Skip to content

Commit

Permalink
Finish implementing RaceScene
Browse files Browse the repository at this point in the history
  • Loading branch information
vabold committed Aug 25, 2023
1 parent fc045fe commit 4a442d9
Show file tree
Hide file tree
Showing 12 changed files with 115 additions and 6 deletions.
1 change: 1 addition & 0 deletions configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@
os.path.join('source', 'game', 'kart', 'KartObjectProxy.cc'),
os.path.join('source', 'game', 'kart', 'KartParam.cc'),
os.path.join('source', 'game', 'scene', 'GameScene.cc'),
os.path.join('source', 'game', 'scene', 'RaceScene.cc'),
os.path.join('source', 'game', 'scene', 'RootScene.cc'),
os.path.join('source', 'game', 'system', 'DvdArchive.cc'),
os.path.join('source', 'game', 'system', 'InputManager.cc'),
Expand Down
4 changes: 4 additions & 0 deletions source/game/kart/KartObjectManager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@

namespace Kart {

void KartObjectManager::init() {}

void KartObjectManager::calc() {}

KartObjectManager *KartObjectManager::CreateInstance() {
assert(!s_instance);
s_instance = new KartObjectManager;
Expand Down
3 changes: 3 additions & 0 deletions source/game/kart/KartObjectManager.hh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ namespace Kart {

class KartObjectManager {
public:
void init();
void calc();

static KartObjectManager *CreateInstance();
static void DestroyInstance();
static KartObjectManager *Instance();
Expand Down
2 changes: 2 additions & 0 deletions source/game/scene/GameScene.cc
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ void GameScene::reinit() {
}
}

void GameScene::appendResource(System::MultiDvdArchive *arc, s32 id) {}

void GameScene::initScene() {
createEngines();
initEngines();
Expand Down
11 changes: 11 additions & 0 deletions source/game/scene/GameScene.hh
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#pragma once

#include "game/system/MultiDvdArchive.hh"

#include <abstract/List.hh>
#include <egg/core/Scene.hh>

namespace Scene {
Expand All @@ -21,10 +24,18 @@ public:
virtual void configure() = 0;
virtual void onReinit() {}

protected:
void appendResource(System::MultiDvdArchive *arc, s32 id);

private:
struct Resource : private Abstract::Node {
s32 m_id;
};

void initScene();
void deinitScene();

Abstract::List m_resources;
int m_nextSceneId;
};

Expand Down
63 changes: 63 additions & 0 deletions source/game/scene/RaceScene.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#include "RaceScene.hh"

#include "game/kart/KartObjectManager.hh"
#include "game/system/RaceConfig.hh"
#include "game/system/ResourceManager.hh"

namespace Scene {

RaceScene::RaceScene() = default;

RaceScene::~RaceScene() = default;

void RaceScene::createEngines() {
// System::CourseMap::CreateInstance()->init();
// System::RaceManager::CreateInstance();
Kart::KartObjectManager::CreateInstance();
// Field::CourseModel::CreateInstance();
// Item::ItemDirector::CreateInstance();
}

void RaceScene::initEngines() {
Kart::KartObjectManager::Instance()->init();
// System::RaceManager::Instance()->init();
// Item::ItemDirector::Instance()->init();
}

void RaceScene::calcEngines() {
// auto *raceMgr = System::RaceManager::Instance();
// raceMgr->calc();
// if (!raceMgr->spectatorMode())
Kart::KartObjectManager::Instance()->calc();
// if (raceMgr->isStateReached(State::Countdown)) {
// Item::ItemDirector::Instance()->calc();
// }
// raceMgr->random1()->nextU32();
}

void RaceScene::destroyEngines() {
Kart::KartObjectManager::DestroyInstance();
// Field::CourseModel::DestroyInstance();
// Item::ItemDirector::DestroyInstance();
// System::RaceManager::DestroyInstance();
// System::CourseMap::DestroyInstance();
}

void RaceScene::configure() {
auto *raceCfg = System::RaceConfig::Instance();
auto *resMgr = System::ResourceManager::Instance();

raceCfg->initRace();

auto *commonArc = resMgr->load(0, nullptr);
appendResource(commonArc, 0);

auto *courseArc = resMgr->load(raceCfg->raceScenario().m_course);
appendResource(courseArc, 1);
}

void RaceScene::onReinit() {
System::RaceConfig::Instance()->initRace();
}

} // namespace Scene
20 changes: 20 additions & 0 deletions source/game/scene/RaceScene.hh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#pragma once

#include "game/scene/GameScene.hh"

namespace Scene {

class RaceScene final : public GameScene {
public:
RaceScene();
~RaceScene() override;

void createEngines() override;
void initEngines() override;
void calcEngines() override;
void destroyEngines() override;
void configure() override;
void onReinit() override;
};

} // namespace Scene
2 changes: 2 additions & 0 deletions source/game/system/RaceConfig.cc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ namespace System {
// TODO: read from parameter file
void RaceConfig::init() {}

void RaceConfig::initRace() {}

RaceConfig *RaceConfig::CreateInstance() {
assert(!s_instance);
s_instance = new RaceConfig;
Expand Down
2 changes: 2 additions & 0 deletions source/game/system/RaceConfig.hh
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@ public:

Player m_players[12];
u8 m_playerCount;
Course m_course;
};

void init();
void initRace();

const Scenario &raceScenario() const {
return m_raceScenario;
Expand Down
3 changes: 2 additions & 1 deletion source/game/system/ResourceManager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,9 @@ MultiDvdArchive *ResourceManager::load(s32 idx, const char *filename) {
return m_archives[idx];
}

void ResourceManager::load(Course courseId) {
MultiDvdArchive *ResourceManager::load(Course courseId) {
static_cast<CourseArchive *>(m_archives[1])->load(courseId);
return m_archives[1];
}

const char *ResourceManager::GetVehicleName(Vehicle vehicle) {
Expand Down
2 changes: 1 addition & 1 deletion source/game/system/ResourceManager.hh
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public:

void *getFile(const char *filename, size_t *size, s32 idx);
void *getBsp(u8 playerIdx, size_t *size);
void load(Course courseId);
MultiDvdArchive *load(Course courseId);
MultiDvdArchive *load(s32 idx, const char *filename);

static const char *GetVehicleName(Vehicle vehicle);
Expand Down
8 changes: 4 additions & 4 deletions source/host/SceneCreatorDynamic.cc
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#include "SceneCreatorDynamic.hh"

#include <game/scene/RaceScene.hh>
#include <game/scene/RootScene.hh>


namespace Host {

EGG::Scene *SceneCreatorDynamic::create(int sceneId) const {
Expand All @@ -12,24 +14,22 @@ void SceneCreatorDynamic::destroy(int sceneId) const {
destroy(static_cast<SceneId>(sceneId));
}

// TODO
EGG::Scene *SceneCreatorDynamic::create(SceneId sceneId) const {
switch (sceneId) {
case SceneId::Root:
return new Scene::RootScene;
case SceneId::Race:
return nullptr;
return new Scene::RaceScene;
default:
K_PANIC("Unreachable scene creation!");
}
}

// TODO
void SceneCreatorDynamic::destroy(SceneId sceneId) const {
switch (sceneId) {
case SceneId::Root:
break;
case SceneId::Race:
// The base game doesn't do anything, so we don't either
break;
default:
K_PANIC("Unreachable scene deletion!");
Expand Down

0 comments on commit 4a442d9

Please sign in to comment.