diff --git a/src/engine/World.cpp b/src/engine/World.cpp index 8e20806ff..e84cd5c47 100644 --- a/src/engine/World.cpp +++ b/src/engine/World.cpp @@ -26,7 +26,7 @@ World::World() {} Course* CurrentCourse; Cup* CurrentCup; -void World::AddCourse(Course* course) { +void World::AddCourse(std::unique_ptr course) { gWorldInstance.Courses.push_back(course); } diff --git a/src/engine/World.h b/src/engine/World.h index 915cacf27..7a4fdc159 100644 --- a/src/engine/World.h +++ b/src/engine/World.h @@ -53,7 +53,7 @@ class World { public: explicit World(); - void AddCourse(Course* course); + void AddCourse(std::unique_ptr course); AActor* AddActor(AActor* actor); struct Actor* AddBaseActor(); @@ -120,7 +120,7 @@ public: std::vector> Crossings; // Holds all available courses - std::vector Courses; + std::vector> Courses; size_t CourseIndex = 0; // For browsing courses. private: diff --git a/src/port/Game.cpp b/src/port/Game.cpp index 2c0ec3a0a..658d12650 100644 --- a/src/port/Game.cpp +++ b/src/port/Game.cpp @@ -69,29 +69,29 @@ extern "C" void Timer_Update(); // Create the world instance World gWorldInstance; -MarioRaceway* gMarioRaceway; -ChocoMountain* gChocoMountain; -BowsersCastle* gBowsersCastle; -BansheeBoardwalk* gBansheeBoardwalk; -YoshiValley* gYoshiValley; -FrappeSnowland* gFrappeSnowland; -KoopaTroopaBeach* gKoopaTroopaBeach; -RoyalRaceway* gRoyalRaceway; -LuigiRaceway* gLuigiRaceway; -MooMooFarm* gMooMooFarm; -ToadsTurnpike* gToadsTurnpike; -KalimariDesert* gKalimariDesert; -SherbetLand* gSherbetLand; -RainbowRoad* gRainbowRoad; -WarioStadium* gWarioStadium; -BlockFort* gBlockFort; -Skyscraper* gSkyscraper; -DoubleDeck* gDoubleDeck; -DKJungle* gDkJungle; -BigDonut* gBigDonut; -PodiumCeremony* gPodiumCeremony; -Harbour* gHarbour; -TestCourse* gTestCourse; +// auto gMarioRaceway; +// ChocoMountain* gChocoMountain; +// BowsersCastle* gBowsersCastle; +// BansheeBoardwalk* gBansheeBoardwalk; +// YoshiValley* gYoshiValley; +// FrappeSnowland* gFrappeSnowland; +// KoopaTroopaBeach* gKoopaTroopaBeach; +// RoyalRaceway* gRoyalRaceway; +// LuigiRaceway* gLuigiRaceway; +// MooMooFarm* gMooMooFarm; +// ToadsTurnpike* gToadsTurnpike; +// KalimariDesert* gKalimariDesert; +// SherbetLand* gSherbetLand; +// RainbowRoad* gRainbowRoad; +// WarioStadium* gWarioStadium; +// BlockFort* gBlockFort; +// Skyscraper* gSkyscraper; +// DoubleDeck* gDoubleDeck; +// DKJungle* gDkJungle; +// BigDonut* gBigDonut; +// PodiumCeremony* gPodiumCeremony; +// Harbour* gHarbour; +// TestCourse* gTestCourse; Cup* gMushroomCup; Cup* gFlowerCup; @@ -109,71 +109,72 @@ s32 gTrophyIndex = NULL; void CustomEngineInit() { - gMarioRaceway = new MarioRaceway(); - gChocoMountain = new ChocoMountain(); - gBowsersCastle = new BowsersCastle(); - gBansheeBoardwalk = new BansheeBoardwalk(); - gYoshiValley = new YoshiValley(); - gFrappeSnowland = new FrappeSnowland(); - gKoopaTroopaBeach = new KoopaTroopaBeach(); - gRoyalRaceway = new RoyalRaceway(); - gLuigiRaceway = new LuigiRaceway(); - gMooMooFarm = new MooMooFarm(); - gToadsTurnpike = new ToadsTurnpike(); - gKalimariDesert = new KalimariDesert(); - gSherbetLand = new SherbetLand(); - gRainbowRoad = new RainbowRoad(); - gWarioStadium = new WarioStadium(); - gBlockFort = new BlockFort(); - gSkyscraper = new Skyscraper(); - gDoubleDeck = new DoubleDeck(); - gDkJungle = new DKJungle(); - gBigDonut = new BigDonut(); - gPodiumCeremony = new PodiumCeremony(); - gHarbour = new Harbour(); - gTestCourse = new TestCourse(); + // auto gMarioRaceway = std::make_unique(); + // gChocoMountain = new ChocoMountain(); + // gBowsersCastle = new BowsersCastle(); + // gBansheeBoardwalk = new BansheeBoardwalk(); + // gYoshiValley = new YoshiValley(); + // gFrappeSnowland = new FrappeSnowland(); + // gKoopaTroopaBeach = new KoopaTroopaBeach(); + // gRoyalRaceway = new RoyalRaceway(); + // gLuigiRaceway = new LuigiRaceway(); + // gMooMooFarm = new MooMooFarm(); + // gToadsTurnpike = new ToadsTurnpike(); + // gKalimariDesert = new KalimariDesert(); + // gSherbetLand = new SherbetLand(); + // gRainbowRoad = new RainbowRoad(); + // gWarioStadium = new WarioStadium(); + // gBlockFort = new BlockFort(); + // gSkyscraper = new Skyscraper(); + // gDoubleDeck = new DoubleDeck(); + // gDkJungle = new DKJungle(); + // gBigDonut = new BigDonut(); + // gPodiumCeremony = new PodiumCeremony(); + // gHarbour = new Harbour(); + // gTestCourse = new TestCourse(); /* Add all courses to the global course list */ - gWorldInstance.AddCourse(gMarioRaceway); - gWorldInstance.AddCourse(gChocoMountain); - gWorldInstance.AddCourse(gBowsersCastle); - gWorldInstance.AddCourse(gBansheeBoardwalk); - gWorldInstance.AddCourse(gYoshiValley); - gWorldInstance.AddCourse(gFrappeSnowland); - gWorldInstance.AddCourse(gKoopaTroopaBeach); - gWorldInstance.AddCourse(gRoyalRaceway); - gWorldInstance.AddCourse(gLuigiRaceway); - gWorldInstance.AddCourse(gMooMooFarm); - gWorldInstance.AddCourse(gToadsTurnpike); - gWorldInstance.AddCourse(gKalimariDesert); - gWorldInstance.AddCourse(gSherbetLand); - gWorldInstance.AddCourse(gRainbowRoad); - gWorldInstance.AddCourse(gWarioStadium); - gWorldInstance.AddCourse(gBlockFort); - gWorldInstance.AddCourse(gSkyscraper); - gWorldInstance.AddCourse(gDoubleDeck); - gWorldInstance.AddCourse(gDkJungle); - gWorldInstance.AddCourse(gBigDonut); - gWorldInstance.AddCourse(gHarbour); - gWorldInstance.AddCourse(gTestCourse); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); + gWorldInstance.AddCourse(std::make_unique()); - gMushroomCup = new Cup("mk:mushroom_cup", "mushroom cup", - std::vector{ gLuigiRaceway, gMooMooFarm, gKoopaTroopaBeach, gKalimariDesert }); - gFlowerCup = new Cup("mk:flower_cup", "flower cup", - std::vector{ gToadsTurnpike, gFrappeSnowland, gChocoMountain, gMarioRaceway }); - gStarCup = new Cup("mk:star_cup", "star cup", - std::vector{ gWarioStadium, gSherbetLand, gRoyalRaceway, gBowsersCastle }); - gSpecialCup = new Cup("mk:special_cup", "special cup", - std::vector{ gDkJungle, gYoshiValley, gBansheeBoardwalk, gRainbowRoad }); - gBattleCup = - new Cup("mk:battle_cup", "battle", std::vector{ gBigDonut, gBlockFort, gDoubleDeck, gSkyscraper }); + // gMushroomCup = new Cup("mk:mushroom_cup", "mushroom cup", + // std::vector{ gLuigiRaceway, gMooMooFarm, gKoopaTroopaBeach, gKalimariDesert }); + // gFlowerCup = new Cup("mk:flower_cup", "flower cup", + // std::vector{ gToadsTurnpike, gFrappeSnowland, gChocoMountain, gMarioRaceway }); + // gStarCup = new Cup("mk:star_cup", "star cup", + // std::vector{ gWarioStadium, gSherbetLand, gRoyalRaceway, gBowsersCastle }); + // gSpecialCup = new Cup("mk:special_cup", "special cup", + // std::vector{ gDkJungle, gYoshiValley, gBansheeBoardwalk, gRainbowRoad }); + // gBattleCup = + // new Cup("mk:battle_cup", "battle", std::vector{ gBigDonut, gBlockFort, gDoubleDeck, gSkyscraper }); /* Instantiate Cups */ - gWorldInstance.AddCup(gMushroomCup); - gWorldInstance.AddCup(gFlowerCup); - gWorldInstance.AddCup(gStarCup); - gWorldInstance.AddCup(gSpecialCup); - gWorldInstance.AddCup(gBattleCup); + // gWorldInstance.AddCup(gMushroomCup); + // gWorldInstance.AddCup(gFlowerCup); + // gWorldInstance.AddCup(gStarCup); + // gWorldInstance.AddCup(gSpecialCup); + // gWorldInstance.AddCup(gBattleCup); /* Set default course; mario raceway */ gWorldInstance.CurrentCourse = gMarioRaceway; @@ -723,8 +724,10 @@ f32 CM_GetWaterLevel(Vec3f pos, Collision* collision) { return gWorldInstance.CurrentCourse->GetWaterLevel(fPos, collision); } -void* GetMarioRaceway(void) { - return gMarioRaceway; +bool GetMarioRaceway(Course* course) { + if (dynamic_cast(gWorldInstance.CurrentCourse)) { + return true; // It's Mario Raceway + } } void* GetLuigiRaceway(void) {