diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index ef390b4..4ab92d5 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -30,13 +30,14 @@ extern u32 VU1Draw3D_CodeEnd __attribute__((section(".vudata"))); Engine::Engine() { - SifInitRpc(0); - srand(time(NULL)); - VU1::uploadProgram(0, &VU1Draw3D_CodeStart, &VU1Draw3D_CodeEnd); - audio.startThread(); - isInitialized = 0; - isScreenInitialized = 0; - mainThreadId = GetThreadId(); + setDefaultScreen(); + firePS2(); +} + +Engine::Engine(const ScreenSettings &t_screen) +{ + screen = t_screen; + firePS2(); } Engine::~Engine() {} @@ -45,12 +46,6 @@ Engine::~Engine() {} // Methods // ---- -void Engine::setScreen(ScreenSettings &t_settings) -{ - screen = t_settings; - isScreenInitialized = true; -} - void Engine::setDefaultScreen() { screen.projectionScale = 4096.0F; @@ -60,13 +55,10 @@ void Engine::setDefaultScreen() screen.aspectRatio = 4.0F / 3.0F; screen.width = 640.0F; screen.height = 480.0F; - isScreenInitialized = true; } void Engine::init(Game *t_game, u32 t_gifPacketSize) { - if (!isScreenInitialized) - setDefaultScreen(); if (isInitialized) PRINT_ERR("Already initialized!"); else @@ -88,6 +80,16 @@ void Engine::wakeup(s32 t_alarmId, u16 t_time, void *t_common) ExitHandler(); } +void Engine::firePS2() +{ + SifInitRpc(0); + srand(time(NULL)); + VU1::uploadProgram(0, &VU1Draw3D_CodeStart, &VU1Draw3D_CodeEnd); + audio.startThread(); + isInitialized = 0; + mainThreadId = GetThreadId(); +} + void Engine::gameLoop() { for (;;) diff --git a/src/engine/include/engine.hpp b/src/engine/include/engine.hpp index 184910b..de30139 100644 --- a/src/engine/include/engine.hpp +++ b/src/engine/include/engine.hpp @@ -24,12 +24,12 @@ class Engine { public: + Engine(const ScreenSettings &screen); Engine(); ~Engine(); void init(Game *t_game, u32 t_gifPacketSize); void setDefaultScreen(); - void setScreen(ScreenSettings &t_settings); Renderer *renderer; Audio audio; ScreenSettings screen; @@ -37,9 +37,10 @@ public: float fps; private: + void firePS2(); u8 fpsDelayer; Timer timer; - u8 isInitialized, isScreenInitialized; + u8 isInitialized; void gameLoop(); Game *game; s32 mainThreadId; diff --git a/src/engine/include/models/math/matrix.hpp b/src/engine/include/models/math/matrix.hpp index bf86ddb..366794b 100644 --- a/src/engine/include/models/math/matrix.hpp +++ b/src/engine/include/models/math/matrix.hpp @@ -35,7 +35,7 @@ public: void makeZRotation(float t_radians); void translate(float t_x, float t_y, float t_z); void setPerspective(ScreenSettings &screen); - void print(); + const void print() const; }; #endif diff --git a/src/engine/include/models/math/plane.hpp b/src/engine/include/models/math/plane.hpp index ae7be0c..c5cbf61 100644 --- a/src/engine/include/models/math/plane.hpp +++ b/src/engine/include/models/math/plane.hpp @@ -27,7 +27,7 @@ public: void update(Vector3 &a, Vector3 &b, Vector3 &c); inline float distanceTo(Vector3 &t_vec) { return this->distance + this->normal.innerProduct(t_vec); } - void print(); + const void print() const; }; #endif diff --git a/src/engine/include/models/math/point.hpp b/src/engine/include/models/math/point.hpp index 8f7548d..3ef83a9 100644 --- a/src/engine/include/models/math/point.hpp +++ b/src/engine/include/models/math/point.hpp @@ -33,7 +33,7 @@ public: void set(const float &t_x, const float &t_y); void set(const Point &v); - void print(); + const void print() const; }; #endif diff --git a/src/engine/include/models/math/vector3.hpp b/src/engine/include/models/math/vector3.hpp index 9351ad9..67f5349 100644 --- a/src/engine/include/models/math/vector3.hpp +++ b/src/engine/include/models/math/vector3.hpp @@ -54,7 +54,7 @@ public: void set(const float &x, const float &y, const float &z); void copy(Vector3 &v); float distanceTo(Vector3 &v); - void print(); + const void print() const; }; #endif diff --git a/src/engine/include/models/screen_settings.hpp b/src/engine/include/models/screen_settings.hpp index b0d1f11..8794799 100644 --- a/src/engine/include/models/screen_settings.hpp +++ b/src/engine/include/models/screen_settings.hpp @@ -21,7 +21,6 @@ struct ScreenSettings float aspectRatio; float nearPlaneDist; float farPlaneDist; - /** change it to 4096.0F to check out frustum culling! 😎 */ float projectionScale; }; diff --git a/src/engine/models/math/matrix.cpp b/src/engine/models/math/matrix.cpp index 1113ff1..7aaaf37 100644 --- a/src/engine/models/math/matrix.cpp +++ b/src/engine/models/math/matrix.cpp @@ -187,8 +187,8 @@ void Matrix::setPerspective(ScreenSettings &t_screen) { float fovYdiv2 = Math::HALF_ANG2RAD * t_screen.fov; float cotFOV = 1.0F / (Math::sin(fovYdiv2) / Math::cos(fovYdiv2)); - float w = cotFOV * (t_screen.width / 4096.0F) / t_screen.aspectRatio; - float h = cotFOV * (t_screen.height / 4096.0F); + float w = cotFOV * (t_screen.width / t_screen.projectionScale) / t_screen.aspectRatio; + float h = cotFOV * (t_screen.height / t_screen.projectionScale); this->data[0] = w; this->data[1] = 0.0F; @@ -253,7 +253,7 @@ void Matrix::lookAt(Vector3 &t_up, Vector3 &t_position, Vector3 &t_target) data[15] = 1; } -void Matrix::print() +const void Matrix::print() const { printf("MATRIX(\n%f, %f, %f, %f\n%f, %f, %f, %f\n%f, %f, %f, %f\n%f, %f, %f, %f\n)\n", data[0], data[1], data[2], data[3], diff --git a/src/engine/models/math/plane.cpp b/src/engine/models/math/plane.cpp index b51453e..bf3394c 100644 --- a/src/engine/models/math/plane.cpp +++ b/src/engine/models/math/plane.cpp @@ -44,7 +44,7 @@ void Plane::update(Vector3 &a, Vector3 &b, Vector3 &c) this->distance = -this->normal.innerProduct(b); } -void Plane::print() +const void Plane::print() const { printf("Plane(Vector3(%f, %f, %f), %f)\n", this->normal.x, this->normal.y, this->normal.z, this->distance); } diff --git a/src/engine/models/math/point.cpp b/src/engine/models/math/point.cpp index 3215175..ef6caa5 100644 --- a/src/engine/models/math/point.cpp +++ b/src/engine/models/math/point.cpp @@ -55,7 +55,7 @@ void Point::set(const Point &v) y = v.y; } -void Point::print() +const void Point::print() const { printf("Point(%f, %f)\n", x, y); } diff --git a/src/engine/models/math/vector3.cpp b/src/engine/models/math/vector3.cpp index b1a4712..eeae3ee 100644 --- a/src/engine/models/math/vector3.cpp +++ b/src/engine/models/math/vector3.cpp @@ -295,7 +295,7 @@ float Vector3::distanceTo(Vector3 &v) // (this->z - another.z) * (this->z - another.z)); } -void Vector3::print() +const void Vector3::print() const { printf("Vector3(%f, %f, %f)\n", x, y, z); } diff --git a/src/engine/models/mesh_material.cpp b/src/engine/models/mesh_material.cpp index 67379f5..f435ce6 100644 --- a/src/engine/models/mesh_material.cpp +++ b/src/engine/models/mesh_material.cpp @@ -71,14 +71,15 @@ u8 MeshMaterial::isInFrustum(Plane *t_frustumPlanes, const Vector3 &position) { Vector3 boxCalcTemp; u8 boxResult = 1, boxIn = 0, boxOut = 0; - for (int i = 0; i < 6; i++) + + for (u8 i = 0; i < 6; i++) { boxOut = 0; boxIn = 0; // for each corner of the box do ... // get out of the cycle as soon as a box as corners // both inside and out of the frustum - for (int y = 0; y < 8 && (boxIn == 0 || boxOut == 0); y++) + for (u8 y = 0; y < 8 && (boxIn == 0 || boxOut == 0); y++) { boxCalcTemp.set( boundingBox[y].x + position.x, diff --git a/src/samples/ari/ari.cpp b/src/samples/ari/ari.cpp index 000688c..767c1de 100644 --- a/src/samples/ari/ari.cpp +++ b/src/samples/ari/ari.cpp @@ -18,7 +18,7 @@ const u8 WATER_TILES_COUNT = 64; -Ari::Ari(const Engine &t_engine) : engine(t_engine), camera(&engine.screen) +Ari::Ari(Engine *t_engine) : engine(t_engine), camera(&engine->screen) { waterFloors = new Mesh[WATER_TILES_COUNT]; spirals = new Point[WATER_TILES_COUNT]; @@ -33,13 +33,13 @@ Ari::~Ari() {} void Ari::onInit() { - engine.renderer->setCameraDefinitions(&camera.worldView, &camera.unitCirclePosition, camera.planes); - engine.audio.init(0); - engine.audio.setVolume(40); - engine.audio.loadSong("MOV-CIRC.WAV"); - engine.audio.play(); + engine->renderer->setCameraDefinitions(&camera.worldView, &camera.unitCirclePosition, camera.planes); + engine->audio.init(0); + engine->audio.setVolume(40); + engine->audio.loadSong("MOV-CIRC.WAV"); + engine->audio.play(); - texRepo = engine.renderer->getTextureRepository(); + texRepo = engine->renderer->getTextureRepository(); island.loadDff("sunnyisl/", "sunnyisl", 0.1F, false); island.rotation.x = -1.6F; @@ -86,15 +86,15 @@ void Ari::initBulb() void Ari::onUpdate() { - if (engine.pad.isCrossClicked) - printf("FPS:%f\n", engine.fps); - camera.update(engine.pad, player.mesh); - engine.renderer->draw(skybox); - engine.renderer->draw(island); - engine.renderer->draw(islandAddons); - engine.renderer->draw(player.mesh); + if (engine->pad.isCrossClicked) + printf("FPS:%f\n", engine->fps); + camera.update(engine->pad, player.mesh); + engine->renderer->draw(skybox); + engine->renderer->draw(island); + engine->renderer->draw(islandAddons); + engine->renderer->draw(player.mesh); for (u8 i = 0; i < WATER_TILES_COUNT; i++) - engine.renderer->draw(waterFloors[i]); + engine->renderer->draw(waterFloors[i]); } void Ari::calcSpiral(int X, int Y) diff --git a/src/samples/ari/ari.hpp b/src/samples/ari/ari.hpp index 2da0636..9f86c1f 100644 --- a/src/samples/ari/ari.hpp +++ b/src/samples/ari/ari.hpp @@ -23,13 +23,13 @@ class Ari : public Game { public: - Ari(const Engine &t_engine); + Ari(Engine *t_engine); ~Ari(); void onInit(); void onUpdate(); - Engine engine; + Engine *engine; private: void initBulb(); diff --git a/src/samples/ari/main.cpp b/src/samples/ari/main.cpp index 1a3d027..e8bd95a 100644 --- a/src/samples/ari/main.cpp +++ b/src/samples/ari/main.cpp @@ -13,8 +13,8 @@ int main() { Engine engine = Engine(); - Ari game = Ari(engine); - game.engine.init(&game, 40000); + Ari game = Ari(&engine); + game.engine->init(&game, 40000); SleepThread(); return 0; } diff --git a/src/samples/floors/floors.cpp b/src/samples/floors/floors.cpp index c57e15b..c9450d6 100644 --- a/src/samples/floors/floors.cpp +++ b/src/samples/floors/floors.cpp @@ -16,8 +16,8 @@ const u8 FLOORS_COUNT = 64; // Temp change it also in floor_manager.hpp -Floors::Floors(const Engine &t_engine) - : engine(t_engine), floorManager(FLOORS_COUNT), camera(&engine.screen) {} +Floors::Floors(Engine *t_engine) + : engine(t_engine), floorManager(FLOORS_COUNT), camera(&t_engine->screen) {} Floors::~Floors() {} @@ -27,13 +27,14 @@ Floors::~Floors() {} void Floors::onInit() { - engine.renderer->setCameraDefinitions(&camera.worldView, &camera.unitCirclePosition, camera.planes); - engine.audio.init(2); - engine.audio.addListener(&floorManager); - engine.audio.addListener(&lightManager); - engine.audio.loadSong("NF-CHILL.WAV"); - engine.audio.play(); - texRepo = engine.renderer->getTextureRepository(); + engine->renderer->setCameraDefinitions(&camera.worldView, &camera.unitCirclePosition, camera.planes); + engine->audio.init(2); + engine->audio.addListener(&floorManager); + engine->audio.addListener(&lightManager); + engine->audio.loadSong("NF-CHILL.WAV"); + engine->audio.setVolume(1); + engine->audio.play(); + texRepo = engine->renderer->getTextureRepository(); texRepo->addByMesh("warrior/", player.mesh); texRepo->addByMesh("floor/", floorManager.floors[0].mesh); for (u32 i = 1; i < floorManager.floorAmount; i++) @@ -43,13 +44,13 @@ void Floors::onInit() void Floors::onUpdate() { - if (engine.pad.isCrossClicked) - printf("FPS:%f\n", engine.fps); + if (engine->pad.isCrossClicked) + printf("FPS:%f\n", engine->fps); lightManager.update(); - camera.update(engine.pad, player.mesh); + camera.update(engine->pad, player.mesh); floorManager.update(player); - player.update(engine.pad, camera, floorManager); - engine.renderer->draw(player.mesh); + player.update(engine->pad, camera, floorManager); + engine->renderer->draw(player.mesh); for (u8 i = 0; i < FLOORS_COUNT; i++) - engine.renderer->drawByPath3(floorManager.floors[i].mesh, lightManager.bulbs, lightManager.bulbsCount); + engine->renderer->drawByPath3(floorManager.floors[i].mesh, lightManager.bulbs, lightManager.bulbsCount); } diff --git a/src/samples/floors/floors.hpp b/src/samples/floors/floors.hpp index 67bad16..09447fc 100644 --- a/src/samples/floors/floors.hpp +++ b/src/samples/floors/floors.hpp @@ -24,13 +24,13 @@ class Floors : public Game { public: - Floors(const Engine &t_engine); + Floors(Engine *t_engine); ~Floors(); void onInit(); void onUpdate(); - Engine engine; + Engine *engine; private: TextureRepository *texRepo; diff --git a/src/samples/floors/main.cpp b/src/samples/floors/main.cpp index bc2e3f6..fcbf784 100644 --- a/src/samples/floors/main.cpp +++ b/src/samples/floors/main.cpp @@ -13,8 +13,8 @@ int main() { Engine engine = Engine(); - Floors game = Floors(engine); - game.engine.init(&game, 40000); + Floors game = Floors(&engine); + game.engine->init(&game, 40000); SleepThread(); return 0; } diff --git a/src/samples/floors/managers/floor_manager.cpp b/src/samples/floors/managers/floor_manager.cpp index f491240..3b9cb96 100644 --- a/src/samples/floors/managers/floor_manager.cpp +++ b/src/samples/floors/managers/floor_manager.cpp @@ -106,7 +106,6 @@ void FloorManager::update(Player &t_player) /** Called by audio thread */ void FloorManager::onAudioTick() { - printf("Hit!\n"); if (audioTick++ > 16) { if (audioMode == 0)