Merge branch 'trackref' of https://github.com/megamech/SpaghettiKart into trackref
This commit is contained in:
commit
96d5a5cdbd
|
|
@ -5,7 +5,6 @@ Checks: '
|
|||
performance-*,
|
||||
bugprone-*,
|
||||
cppcoreguidelines-*,
|
||||
llvm-include-order,
|
||||
|
||||
-readability-magic-numbers,
|
||||
-readability-identifier-length,
|
||||
|
|
@ -54,13 +53,6 @@ CheckOptions:
|
|||
- key: readability-identifier-naming.NamespaceCase
|
||||
value: CamelCase
|
||||
|
||||
# Functions: PascalCase (C++ style)
|
||||
- key: readability-identifier-naming.FunctionCase
|
||||
value: lower_case
|
||||
# Allow legacy decompilation function names (func_XXXXXXXX)
|
||||
- key: readability-identifier-naming.FunctionIgnoredRegexp
|
||||
value: '^func_[0-9A-Fa-f]+$'
|
||||
|
||||
# Methods: PascalCase
|
||||
- key: readability-identifier-naming.MethodCase
|
||||
value: CamelCase
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include <stdbool.h>
|
||||
#include "port/Game.h"
|
||||
#include "port/audio/HMAS.h"
|
||||
#include "engine/TrackBrowser.h"
|
||||
|
||||
s8 D_8018EF10;
|
||||
UnkStruct8018EF18 D_8018EF18[16];
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <stubs.h>
|
||||
|
||||
#include "code_800029B0.h"
|
||||
#include "TrackBrowser.h"
|
||||
#include "memory.h"
|
||||
#include "waypoints.h"
|
||||
#include "actors.h"
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@
|
|||
#include "render_courses.h"
|
||||
#include "main.h"
|
||||
#include "render_player.h"
|
||||
#include "engine/TrackBrowser.h"
|
||||
|
||||
#include "engine/tracks/Track.h"
|
||||
#include "engine/Matrix.h"
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ AActor::AActor(SpawnParams params) {
|
|||
|
||||
void AActor::BeginPlay() {
|
||||
// This makes actors clickable in the editor
|
||||
if (Editor_IsEnabled() == true) {
|
||||
if (Editor_IsEnabled()) {
|
||||
if ((nullptr != Model) && (Model[0] != '\0')) {
|
||||
// Prevent collision mesh from being generated extra times.
|
||||
if (Triangles.size() == 0) {
|
||||
|
|
|
|||
|
|
@ -12,10 +12,9 @@ void RunGarbageCollector() {
|
|||
|
||||
void CleanActors() {
|
||||
for (auto actor = GetWorld()->Actors.begin(); actor != GetWorld()->Actors.end();) {
|
||||
AActor* act = *actor; // Get a mutable copy
|
||||
auto* act = actor->get(); // Get a mutable copy
|
||||
if (act->bPendingDestroy) {
|
||||
if (act->IsMod()) { // C++ actor
|
||||
delete act;
|
||||
actor = GetWorld()->Actors.erase(actor); // Remove from container
|
||||
} else { // Old C actor
|
||||
act->Flags = 0;
|
||||
|
|
@ -33,9 +32,8 @@ void CleanActors() {
|
|||
|
||||
void CleanStaticMeshActors() {
|
||||
for (auto actor = GetWorld()->StaticMeshActors.begin(); actor != GetWorld()->StaticMeshActors.end();) {
|
||||
StaticMeshActor* act = *actor; // Get a mutable copy
|
||||
StaticMeshActor* act = actor->get(); // Get a mutable copy
|
||||
if (act->bPendingDestroy) {
|
||||
delete act;
|
||||
actor = GetWorld()->StaticMeshActors.erase(actor); // Remove from container
|
||||
continue;
|
||||
} else {
|
||||
|
|
@ -46,9 +44,8 @@ void CleanStaticMeshActors() {
|
|||
|
||||
void CleanObjects() {
|
||||
for (auto object = GetWorld()->Objects.begin(); object != GetWorld()->Objects.end();) {
|
||||
OObject* obj = *object; // Get a mutable copy
|
||||
OObject* obj = object->get(); // Get a mutable copy
|
||||
if (obj->bPendingDestroy) {
|
||||
delete obj;
|
||||
object = GetWorld()->Objects.erase(object); // Remove from container
|
||||
continue;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -93,8 +93,8 @@ void RaceManager::BeginPlay() {
|
|||
void RaceManager::PostInit() {
|
||||
// Ruleset options
|
||||
if (CVarGetInteger("gAllThwompsAreMarty", false) == true) {
|
||||
for (auto object : GetWorld()->Objects) {
|
||||
if (OThwomp* thwomp = dynamic_cast<OThwomp*>(object)) {
|
||||
for (auto& object : GetWorld()->Objects) {
|
||||
if (OThwomp* thwomp = dynamic_cast<OThwomp*>(object.get())) {
|
||||
gObjectList[thwomp->_objectIndex].unk_0D5 = OThwomp::States::JAILED; // Sets all the thwomp behaviour flags to marty
|
||||
thwomp->Behaviour = OThwomp::States::JAILED;
|
||||
}
|
||||
|
|
@ -102,8 +102,8 @@ void RaceManager::PostInit() {
|
|||
}
|
||||
|
||||
if (CVarGetInteger("gAllBombKartsChase", false) == true) {
|
||||
for (auto object : GetWorld()->Objects) {
|
||||
if (OBombKart* kart = dynamic_cast<OBombKart*>(object)) {
|
||||
for (auto& object : GetWorld()->Objects) {
|
||||
if (OBombKart* kart = dynamic_cast<OBombKart*>(object.get())) {
|
||||
kart->Behaviour = OBombKart::States::CHASE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
#include "engine/CoreMath.h"
|
||||
#include "Registry.h"
|
||||
#include "engine/World.h"
|
||||
#include "RegisterContent.h"
|
||||
|
||||
#include "AllTracks.h"
|
||||
#include "AllActors.h"
|
||||
|
|
@ -23,425 +24,261 @@ void RegisterActors(Registry<ActorInfo, const SpawnParams&>& r) {
|
|||
|
||||
info = { .ResourceName = "mk:item_box", .Name = "Item Box" };
|
||||
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
spawn_item_box(pos);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
spawn_item_box(pos);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:fake_item_box", .Name = "Fake Item Box" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
spawn_fake_item_box(pos);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
spawn_fake_item_box(pos);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:thwomp", .Name = "Thwomp" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OThwomp(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OThwomp>);
|
||||
|
||||
info = { .ResourceName = "mk:snowman", .Name = "Snowman" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OSnowman(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OSnowman>);
|
||||
|
||||
info = { .ResourceName = "mk:hot_air_balloon", .Name = "Hot Air Balloon" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OHotAirBalloon(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OHotAirBalloon>);
|
||||
|
||||
info = { .ResourceName = "mk:hedgehog", .Name = "Hedgehog" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OHedgehog(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OHedgehog>);
|
||||
|
||||
info = { .ResourceName = "mk:grand_prix_balloons", .Name = "Grand Prix Balloons" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OGrandPrixBalloons(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OGrandPrixBalloons>);
|
||||
|
||||
info = { .ResourceName = "mk:flagpole", .Name = "Flagpole", .Tags = {"sign"}};
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OFlagpole(params));
|
||||
}
|
||||
);
|
||||
info = { .ResourceName = "mk:flagpole", .Name = "Flagpole", .Tags = { "sign" } };
|
||||
r.Add(info, AddObjectToWorld<OFlagpole>);
|
||||
|
||||
info = { .ResourceName = "mk:crab", .Name = "Crab" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OCrab(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OCrab>);
|
||||
|
||||
info = { .ResourceName = "mk:cheep_cheep", .Name = "Cheep Cheep", .Tags = {"passive"}};
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OCheepCheep(params));
|
||||
}
|
||||
);
|
||||
info = { .ResourceName = "mk:cheep_cheep", .Name = "Cheep Cheep", .Tags = { "passive" } };
|
||||
r.Add(info, AddObjectToWorld<OCheepCheep>);
|
||||
|
||||
info = { .ResourceName = "mk:bomb_kart", .Name = "Bomb Kart", .Tags = { "vehicle" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OBombKart(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OBombKart>);
|
||||
|
||||
info = { .ResourceName = "mk:bat", .Name = "Bat" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OBat(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OBat>);
|
||||
|
||||
info = { .ResourceName = "mk:boos", .Name = "Boos" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OBoos(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OBoos>);
|
||||
|
||||
info = { .ResourceName = "mk:trophy", .Name = "Trophy" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OTrophy(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OTrophy>);
|
||||
|
||||
info = { .ResourceName = "mk:trash_bin", .Name = "Trash Bin" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OTrashBin(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OTrashBin>);
|
||||
|
||||
info = { .ResourceName = "mk:seagull", .Name = "Seagull", .Tags = { "passive" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OSeagull(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OSeagull>);
|
||||
|
||||
info = { .ResourceName = "mk:chain_chomp", .Name = "Chain Chomp", .Tags = { "vehicle" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OChainChomp());
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OChainChomp>);
|
||||
|
||||
info = { .ResourceName = "mk:podium", .Name = "Podium" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OPodium(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OPodium>);
|
||||
|
||||
info = { .ResourceName = "mk:penguin", .Name = "Penguin" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddObject(new OPenguin(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddObjectToWorld<OPenguin>);
|
||||
|
||||
info = { .ResourceName = "mk:banana", .Name = "Banana" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new ABanana(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<ABanana>);
|
||||
|
||||
info = { .ResourceName = "mk:mario_sign", .Name = "Mario Sign", .Tags = { "sign" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new AMarioSign(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<AMarioSign>);
|
||||
|
||||
info = { .ResourceName = "mk:wario_sign", .Name = "Wario Sign", .Tags = { "sign" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new AWarioSign(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<AWarioSign>);
|
||||
|
||||
info = { .ResourceName = "mk:falling_rock", .Name = "Falling Rock", .Tags = { "obstacle" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new AFallingRock(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<AFallingRock>);
|
||||
|
||||
info = { .ResourceName = "mk:yoshi_egg", .Name = "Yoshi Egg", .Tags = { "obstacle" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_YOSHI_EGG);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_YOSHI_EGG);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:piranha_plant", .Name = "Piranha Plant", .Tags = { "foliage", "obstacle" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_PIRANHA_PLANT);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_PIRANHA_PLANT);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:tree_mario_raceway", .Name = "Tree (Mario Raceway)", .Tags = { "foliage" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_MARIO_RACEWAY);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_MARIO_RACEWAY);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:tree_yoshi_valley", .Name = "Tree (Yoshi Valley)", .Tags = { "foliage" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_YOSHI_VALLEY);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_YOSHI_VALLEY);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:tree_royal_raceway", .Name = "Tree (Royal Raceway)", .Tags = { "foliage" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_ROYAL_RACEWAY);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_ROYAL_RACEWAY);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:tree_moo_moo_farm", .Name = "Tree (Moo Moo Farm)", .Tags = { "foliage" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_MOO_MOO_FARM);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_MOO_MOO_FARM);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:palm_tree", .Name = "Palm Tree", .Tags = { "foliage" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_PALM_TREE);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_PALM_TREE);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:tree_luigi_raceway", .Name = "Tree (Luigi Raceway)", .Tags = { "foliage" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_LUIGI_RACEWAY);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_LUIGI_RACEWAY);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:unknown_0x1b", .Name = "Unknown Plant (0x1B)", .Tags = { "foliage" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_UNKNOWN_0x1B);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_UNKNOWN_0x1B);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:tree_peach_castle", .Name = "Tree (Peach Castle)", .Tags = { "foliage" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_PEACH_CASTLE);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_PEACH_CASTLE);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:tree_frappe_snowland", .Name = "Tree (Frappe Snowland)", .Tags = { "foliage" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_FRAPPE_SNOWLAND);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_TREE_FRAPPE_SNOWLAND);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:cactus1_kalamari_desert", .Name = "Cactus 1 (Kalamari Desert)", .Tags = {"foliage"}};
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_CACTUS1_KALAMARI_DESERT);
|
||||
}
|
||||
);
|
||||
info = { .ResourceName = "mk:cactus1_kalamari_desert",
|
||||
.Name = "Cactus 1 (Kalamari Desert)",
|
||||
.Tags = { "foliage" } };
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_CACTUS1_KALAMARI_DESERT);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:cactus2_kalamari_desert", .Name = "Cactus 2 (Kalamari Desert)", .Tags = {"foliage"}};
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_CACTUS2_KALAMARI_DESERT);
|
||||
}
|
||||
);
|
||||
info = { .ResourceName = "mk:cactus2_kalamari_desert",
|
||||
.Name = "Cactus 2 (Kalamari Desert)",
|
||||
.Tags = { "foliage" } };
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_CACTUS2_KALAMARI_DESERT);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:cactus3_kalamari_desert", .Name = "Cactus 3 (Kalamari Desert)", .Tags = {"foliage"}};
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_CACTUS3_KALAMARI_DESERT);
|
||||
}
|
||||
);
|
||||
info = { .ResourceName = "mk:cactus3_kalamari_desert",
|
||||
.Name = "Cactus 3 (Kalamari Desert)",
|
||||
.Tags = { "foliage" } };
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_CACTUS3_KALAMARI_DESERT);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:bush_bowsers_castle", .Name = "Bush (Bowser's Castle)" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{0, 0, 0});
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = {0, 0, 0};
|
||||
Vec3f vel = {0, 0, 0};
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_BUSH_BOWSERS_CASTLE);
|
||||
}
|
||||
);
|
||||
r.Add(info, [](const SpawnParams& params) {
|
||||
FVector loc = params.Location.value_or(FVector{ 0, 0, 0 });
|
||||
Vec3f pos = { loc.x, loc.y, loc.z };
|
||||
Vec3s rot = { 0, 0, 0 };
|
||||
Vec3f vel = { 0, 0, 0 };
|
||||
add_actor_to_empty_slot(pos, rot, vel, ACTOR_BUSH_BOWSERS_CASTLE);
|
||||
});
|
||||
|
||||
info = { .ResourceName = "mk:finishline", .Name = "Finishline" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new AFinishline(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<AFinishline>);
|
||||
|
||||
info = { .ResourceName = "mk:train", .Name = "Train", .Tags = { "vehicle" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new ATrain(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<ATrain>);
|
||||
|
||||
info = { .ResourceName = "mk:paddle_boat", .Name = "Paddle Boat", .Tags = { "vehicle" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new ABoat(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<ABoat>);
|
||||
|
||||
info = { .ResourceName = "mk:car", .Name = "Car", .Tags = { "vehicle" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new ACar(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<ACar>);
|
||||
|
||||
info = { .ResourceName = "mk:truck", .Name = "Truck", .Tags = { "vehicle" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new ATankerTruck(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<ATankerTruck>);
|
||||
|
||||
info = { .ResourceName = "mk:tanker_truck", .Name = "Tanker Truck", .Tags = { "vehicle" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new ATankerTruck(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<ATankerTruck>);
|
||||
|
||||
info = { .ResourceName = "mk:bus", .Name = "Bus", .Tags = { "vehicle" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new ATankerTruck(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<ATankerTruck>);
|
||||
|
||||
info = { .ResourceName = "hm:spaghetti_ship", .Name = "Spaghetti Ship" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new ASpaghettiShip(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<ASpaghettiShip>);
|
||||
|
||||
info = { .ResourceName = "hm:ship", .Name = "Ghostship (HM64)" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new AShip(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<AShip>);
|
||||
|
||||
info = { .ResourceName = "hm:starship", .Name = "Starship (HM64)" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new AStarship(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<AStarship>);
|
||||
|
||||
info = { .ResourceName = "hm:cloud", .Name = "Cloud (HM64)", .Tags = { "item" } };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new ACloud(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<ACloud>);
|
||||
|
||||
info = { .ResourceName = "hm:text", .Name = "Text (HM64)" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new AText(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<AText>);
|
||||
|
||||
info = { .ResourceName = "mk:bowser_statue", .Name = "Bowser Statue" };
|
||||
r.Add(info,
|
||||
[](const SpawnParams& params) {
|
||||
GetWorld()->AddActor(new ABowserStatue(params));
|
||||
}
|
||||
);
|
||||
r.Add(info, AddActorToWorld<ABowserStatue>);
|
||||
}
|
||||
|
||||
void RegisterTracks(Registry<TrackInfo>& r) {
|
||||
|
|
@ -455,11 +292,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_mario_raceway,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<MarioRaceway>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<MarioRaceway>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:choco_mountain",
|
||||
|
|
@ -469,11 +302,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_choco_mountain,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<ChocoMountain>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<ChocoMountain>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:bowsers_castle",
|
||||
|
|
@ -483,11 +312,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_bowsers_castle,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<BowsersCastle>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<BowsersCastle>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:banshee_boardwalk",
|
||||
|
|
@ -497,11 +322,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_banshee_boardwalk,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<BansheeBoardwalk>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<BansheeBoardwalk>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:yoshi_valley",
|
||||
|
|
@ -511,11 +332,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_yoshi_valley,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<YoshiValley>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<YoshiValley>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:frappe_snowland",
|
||||
|
|
@ -525,11 +342,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_frappe_snowland,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<FrappeSnowland>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<FrappeSnowland>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:koopa_beach",
|
||||
|
|
@ -539,11 +352,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_koopa_troopa_beach,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<KoopaTroopaBeach>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<KoopaTroopaBeach>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:royal_raceway",
|
||||
|
|
@ -553,11 +362,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_royal_raceway,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<RoyalRaceway>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<RoyalRaceway>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:luigi_raceway",
|
||||
|
|
@ -567,11 +372,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_luigi_raceway,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<LuigiRaceway>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<LuigiRaceway>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:moo_moo_farm",
|
||||
|
|
@ -581,11 +382,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_moo_moo_farm,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<MooMooFarm>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<MooMooFarm>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:toads_turnpike",
|
||||
|
|
@ -595,11 +392,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_toads_turnpike,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<ToadsTurnpike>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<ToadsTurnpike>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:kalimari_desert",
|
||||
|
|
@ -609,11 +402,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_kalimari_desert,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<KalimariDesert>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<KalimariDesert>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:sherbet_land",
|
||||
|
|
@ -623,11 +412,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_sherbet_land,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<SherbetLand>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<SherbetLand>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:rainbow_road",
|
||||
|
|
@ -637,11 +422,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_rainbow_road,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<RainbowRoad>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<RainbowRoad>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:wario_stadium",
|
||||
|
|
@ -651,11 +432,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_wario_stadium,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<WarioStadium>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<WarioStadium>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:block_fort",
|
||||
|
|
@ -665,11 +442,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_block_fort,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<BlockFort>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<BlockFort>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:skyscraper",
|
||||
|
|
@ -679,11 +452,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_skyscraper,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<Skyscraper>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<Skyscraper>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:double_deck",
|
||||
|
|
@ -693,11 +462,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_double_deck,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<DoubleDeck>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<DoubleDeck>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:dk_jungle",
|
||||
|
|
@ -707,11 +472,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_dks_jungle_parkway,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<DKJungle>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<DKJungle>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:big_donut",
|
||||
|
|
@ -721,11 +482,7 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.MinimapTexture = minimap_big_donut,
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<BigDonut>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<BigDonut>()); });
|
||||
|
||||
info = {
|
||||
.ResourceName = "mk:test_track",
|
||||
|
|
@ -734,9 +491,5 @@ void RegisterTracks(Registry<TrackInfo>& r) {
|
|||
.Length = "100m",
|
||||
};
|
||||
|
||||
r.Add(info,
|
||||
[]() {
|
||||
GetWorld()->SetCurrentTrack(std::make_unique<TestTrack>());
|
||||
}
|
||||
);
|
||||
r.Add(info, []() { GetWorld()->SetCurrentTrack(std::make_unique<TestTrack>()); });
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,17 @@
|
|||
#pragma once
|
||||
|
||||
#include "Object.h"
|
||||
#include "Registry.h"
|
||||
#include "SpawnParams.h"
|
||||
#include "port/Game.h"
|
||||
|
||||
template<class T> static OObject* AddObjectToWorld(const SpawnParams& params) {
|
||||
return GetWorld()->AddObject(T(params));
|
||||
}
|
||||
|
||||
template<class T> static AActor* AddActorToWorld(const SpawnParams& params) {
|
||||
return GetWorld()->AddActor(T(params));
|
||||
}
|
||||
|
||||
void RegisterActors(Registry<ActorInfo, const SpawnParams&>& r);
|
||||
void RegisterTracks(Registry<TrackInfo>& r);
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ void TrainSmokeTick() {
|
|||
Object* object;
|
||||
|
||||
for (auto& actor : GetWorld()->Actors) {
|
||||
if (auto train = dynamic_cast<ATrain*>(actor)) {
|
||||
if (auto* train = dynamic_cast<ATrain*>(actor.get())) {
|
||||
if (train->SmokeTimer != 0) {
|
||||
train->SmokeTimer -= 1;
|
||||
}
|
||||
|
|
@ -49,7 +49,7 @@ void TrainSmokeTick() {
|
|||
train->SmokeTimer = 100;
|
||||
}
|
||||
}
|
||||
} else if (auto boat = dynamic_cast<ABoat*>(actor)) {
|
||||
} else if (auto* boat = dynamic_cast<ABoat*>(actor.get())) {
|
||||
if (boat->SmokeTimer != 0) {
|
||||
boat->SmokeTimer -= 1;
|
||||
}
|
||||
|
|
@ -80,7 +80,7 @@ void TrainSmokeDraw(s32 cameraId) {
|
|||
Camera* camera = &camera1[cameraId];
|
||||
|
||||
for (auto& actor : GetWorld()->Actors) {
|
||||
if (auto train = dynamic_cast<ATrain*>(actor)) {
|
||||
if (auto train = dynamic_cast<ATrain*>(actor.get())) {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007AE0);
|
||||
load_texture_block_i8_nomirror((uint8_t*) D_0D029458, 32, 32);
|
||||
func_8004B72C(255, 255, 255, 255, 255, 255, 255);
|
||||
|
|
@ -94,7 +94,7 @@ void TrainSmokeDraw(s32 cameraId) {
|
|||
FrameInterpolation_RecordCloseChild();
|
||||
}
|
||||
}
|
||||
} else if (auto boat = dynamic_cast<ABoat*>(actor)) {
|
||||
} else if (auto* boat = dynamic_cast<ABoat*>(actor.get())) {
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*) D_0D007AE0);
|
||||
|
||||
load_texture_block_i8_nomirror((uint8_t*) D_0D029458, 32, 32);
|
||||
|
|
|
|||
|
|
@ -30,8 +30,7 @@ void TrainCrossing::CrossingTrigger() {
|
|||
OnTriggered = 0;
|
||||
|
||||
for (const auto& actor : GetWorld()->Actors) {
|
||||
if (auto train = dynamic_cast<ATrain*>(actor)) {
|
||||
;
|
||||
if (auto* train = dynamic_cast<ATrain*>(actor.get())) {
|
||||
f32 radius = DynamicRadius(train->Locomotive.position, train->Locomotive.velocity, Position);
|
||||
|
||||
if (Distance(train->Locomotive.position, Position) < radius) {
|
||||
|
|
|
|||
|
|
@ -2,30 +2,21 @@
|
|||
#include "World.h"
|
||||
#include "Cup.h"
|
||||
#include "tracks/Track.h"
|
||||
#include "objects/BombKart.h"
|
||||
#include "TrainCrossing.h"
|
||||
#include <memory>
|
||||
#include "objects/Object.h"
|
||||
#include "port/Game.h"
|
||||
|
||||
#include "editor/GameObject.h"
|
||||
|
||||
extern "C" {
|
||||
#include "camera.h"
|
||||
#include "objects.h"
|
||||
#include "main.h"
|
||||
#include "defines.h"
|
||||
#include "audio/external.h"
|
||||
#include "menus.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "assets/models/common_data.h"
|
||||
#include "assets/models/tracks/mario_raceway/mario_raceway_data.h"
|
||||
}
|
||||
|
||||
#include "engine/cameras/GameCamera.h"
|
||||
#include "engine/cameras/FreeCamera.h"
|
||||
#include "engine/cameras/TourCamera.h"
|
||||
#include "engine/cameras/LookBehindCamera.h"
|
||||
|
||||
World* World::Instance;
|
||||
std::unique_ptr<Track> mTrack;
|
||||
|
|
@ -122,19 +113,25 @@ void World::TickCameras() {
|
|||
}
|
||||
}
|
||||
|
||||
AActor* World::AddActor(AActor* actor) {
|
||||
Actors.push_back(actor);
|
||||
actor->BeginPlay();
|
||||
return Actors.back();
|
||||
AActor* World::AddActor(AActor actor) {
|
||||
Actors.push_back(std::make_unique<AActor>(actor));
|
||||
actor.BeginPlay();
|
||||
return Actors.back().get();
|
||||
}
|
||||
|
||||
AActor* World::AddActor(std::unique_ptr<AActor> actor) {
|
||||
Actors.push_back(std::move(actor));
|
||||
Actors.back()->BeginPlay();
|
||||
return Actors.back().get();
|
||||
}
|
||||
|
||||
struct Actor* World::AddBaseActor() {
|
||||
Actors.push_back(new AActor());
|
||||
Actors.push_back(std::make_unique<AActor>());
|
||||
|
||||
AActor* actor = Actors.back();
|
||||
AActor* actor = Actors.back().get();
|
||||
|
||||
// Skip C++ vtable to access variables in C
|
||||
return reinterpret_cast<struct Actor*>(reinterpret_cast<char*>(Actors.back()) + sizeof(void*));
|
||||
return reinterpret_cast<struct Actor*>(reinterpret_cast<char*>(actor) + sizeof(void*));
|
||||
}
|
||||
|
||||
void World::ActorBeginPlay(Actor* actor) {
|
||||
|
|
@ -162,21 +159,21 @@ Actor* World::ConvertAActorToActor(AActor* actor) {
|
|||
}
|
||||
|
||||
AActor* World::GetActor(size_t index) {
|
||||
return Actors[index];
|
||||
return Actors[index].get();
|
||||
}
|
||||
|
||||
void World::TickActors() {
|
||||
// This only ticks modded actors
|
||||
for (AActor* actor : Actors) {
|
||||
for (auto& actor : Actors) {
|
||||
if (actor->IsMod()) {
|
||||
actor->Tick();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
StaticMeshActor* World::AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t* collision) {
|
||||
StaticMeshActors.push_back(new StaticMeshActor(name, pos, rot, scale, model, collision));
|
||||
auto actor = StaticMeshActors.back();
|
||||
StaticMeshActor* World::AddStaticMeshActor(const std::string& name, FVector pos, IRotator rot, FVector scale, const std::string& model, int32_t* collision) {
|
||||
StaticMeshActors.push_back(std::make_unique<StaticMeshActor>(name, pos, rot, scale, model, collision));
|
||||
auto* actor = StaticMeshActors.back().get();
|
||||
return actor;
|
||||
}
|
||||
|
||||
|
|
@ -186,8 +183,8 @@ void World::DrawStaticMeshActors() {
|
|||
}
|
||||
}
|
||||
|
||||
OObject* World::AddObject(OObject* object) {
|
||||
Objects.push_back(object);
|
||||
OObject* World::AddObject(OObject object) {
|
||||
Objects.push_back(std::make_unique<OObject>(object));
|
||||
|
||||
// This is an example of how to get the C object.
|
||||
// However, nothing is being done with it, so it's been commented out.
|
||||
|
|
@ -195,11 +192,23 @@ OObject* World::AddObject(OObject* object) {
|
|||
// Object* cObj = &gObjectList[object->_objectIndex];
|
||||
// }
|
||||
|
||||
return Objects.back();
|
||||
return Objects.back().get();
|
||||
}
|
||||
|
||||
OObject* World::AddObject(std::unique_ptr<OObject> object) {
|
||||
Objects.push_back(std::move(object));
|
||||
|
||||
// This is an example of how to get the C object.
|
||||
// However, nothing is being done with it, so it's been commented out.
|
||||
// if (object->_objectIndex != -1) {
|
||||
// Object* cObj = &gObjectList[object->_objectIndex];
|
||||
// }
|
||||
|
||||
return Objects.back().get();
|
||||
}
|
||||
|
||||
void World::TickObjects() {
|
||||
for (const auto& object : Objects) {
|
||||
for (auto& object : Objects) {
|
||||
object->Tick();
|
||||
}
|
||||
}
|
||||
|
|
@ -207,7 +216,7 @@ void World::TickObjects() {
|
|||
// Some objects such as lakitu are ticked in process_game_tick.
|
||||
// This is a fallback to support those objects. Probably don't use this.
|
||||
void World::TickObjects60fps() {
|
||||
for (const auto& object : Objects) {
|
||||
for (auto& object : Objects) {
|
||||
object->Tick60fps();
|
||||
}
|
||||
}
|
||||
|
|
@ -218,7 +227,7 @@ ParticleEmitter* World::AddEmitter(ParticleEmitter* emitter) {
|
|||
}
|
||||
|
||||
void World::DrawObjects(s32 cameraId) {
|
||||
for (const auto& object : Objects) {
|
||||
for (auto& object : Objects) {
|
||||
object->Draw(cameraId);
|
||||
}
|
||||
}
|
||||
|
|
@ -237,7 +246,7 @@ void World::DrawParticles(s32 cameraId) {
|
|||
|
||||
// Sets OObjects or AActors static member variables back to default values
|
||||
void World::Reset() {
|
||||
for (const auto& object : Objects) {
|
||||
for (auto& object : Objects) {
|
||||
object->Reset(); // Used for OPenguin
|
||||
}
|
||||
}
|
||||
|
|
@ -254,23 +263,12 @@ Object* World::GetObjectByIndex(size_t index) {
|
|||
void World::CleanWorld(void) {
|
||||
printf("[Game.cpp] Clean World\n");
|
||||
|
||||
for (auto& actor : Actors) {
|
||||
delete actor;
|
||||
}
|
||||
|
||||
World::Reset(); // Reset OObjects
|
||||
for (auto& object : Objects) {
|
||||
delete object;
|
||||
}
|
||||
|
||||
for (auto& emitter : Emitters) {
|
||||
delete emitter;
|
||||
}
|
||||
|
||||
for (auto& actor : StaticMeshActors) {
|
||||
delete actor;
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < ARRAY_COUNT(mPlayerBombKart); i++) {
|
||||
mPlayerBombKart[i].state = PlayerBombKart::PlayerBombKartState::DISABLED;
|
||||
mPlayerBombKart[i]._primAlpha = 0;
|
||||
|
|
|
|||
|
|
@ -65,7 +65,8 @@ public:
|
|||
|
||||
void TickCameras();
|
||||
|
||||
AActor* AddActor(AActor* actor);
|
||||
AActor* AddActor(AActor actor);
|
||||
AActor* AddActor(std::unique_ptr<AActor> actor);
|
||||
struct Actor* AddBaseActor();
|
||||
void ActorBeginPlay(Actor* actor);
|
||||
AActor* GetActor(size_t index);
|
||||
|
|
@ -75,9 +76,10 @@ public:
|
|||
Actor* ConvertAActorToActor(AActor* actor);
|
||||
|
||||
void DrawStaticMeshActors();
|
||||
StaticMeshActor* AddStaticMeshActor(std::string name, FVector pos, IRotator rot, FVector scale, std::string model, int32_t* collision);
|
||||
StaticMeshActor* AddStaticMeshActor(const std::string& name, FVector pos, IRotator rot, FVector scale, const std::string& model, int32_t* collision);
|
||||
|
||||
OObject* AddObject(OObject* object);
|
||||
OObject* AddObject(OObject object);
|
||||
OObject* AddObject(std::unique_ptr<OObject> object);
|
||||
|
||||
void TickObjects();
|
||||
void TickObjects60fps();
|
||||
|
|
@ -117,9 +119,9 @@ public:
|
|||
|
||||
std::vector<GameCamera*> Cameras;
|
||||
|
||||
std::vector<StaticMeshActor*> StaticMeshActors;
|
||||
std::vector<AActor*> Actors;
|
||||
std::vector<OObject*> Objects;
|
||||
std::vector<std::unique_ptr<StaticMeshActor>> StaticMeshActors;
|
||||
std::vector<std::unique_ptr<AActor>> Actors;
|
||||
std::vector<std::unique_ptr<OObject>> Objects;
|
||||
std::vector<ParticleEmitter*> Emitters;
|
||||
|
||||
std::unordered_map<s32, OLakitu*> Lakitus;
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/Actor.h"
|
||||
#include "CoreMath.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "common_structs.h"
|
||||
}
|
||||
|
|
@ -19,7 +17,7 @@ public:
|
|||
virtual ~ACloud() override = default;
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline ACloud* Spawn(FVector pos, uint16_t time, f32 hop, f32 gravity) {
|
||||
static ACloud* Spawn(FVector pos, uint16_t time, f32 hop, f32 gravity) {
|
||||
SpawnParams params = {
|
||||
.Name = "hm:cloud",
|
||||
.Type = time, // How long the effect is active
|
||||
|
|
@ -27,7 +25,7 @@ public:
|
|||
.Speed = hop, // How high you hop
|
||||
.SpeedB = gravity, // How much gravity is effected
|
||||
};
|
||||
return static_cast<ACloud*>(GetWorld()->AddActor(new ACloud(params)));
|
||||
return dynamic_cast<ACloud*>(AddActorToWorld<ACloud>(params));
|
||||
}
|
||||
|
||||
virtual void Tick() override;
|
||||
|
|
|
|||
|
|
@ -1,15 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/Actor.h"
|
||||
#include "CoreMath.h"
|
||||
#include "engine/SpawnParams.h"
|
||||
#include "engine/CoreMath.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "common_structs.h"
|
||||
}
|
||||
|
||||
// Falls from the sky bouncing off of geography until it goes through water.
|
||||
// Then after a brief period of time, respawns.
|
||||
|
|
@ -23,13 +19,13 @@ public:
|
|||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
// @arg respawnTimer default game used 60, 120, 180 as the timer. Time until respawn after reaching the bottom?
|
||||
static inline AFallingRock* Spawn(FVector pos, int16_t respawnTimer) {
|
||||
static AFallingRock* Spawn(FVector pos, int16_t respawnTimer) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:falling_rock",
|
||||
.Behaviour = respawnTimer,
|
||||
.Location = pos,
|
||||
};
|
||||
return static_cast<AFallingRock*>(GetWorld()->AddActor(new AFallingRock(params)));
|
||||
return dynamic_cast<AFallingRock*>(AddActorToWorld<AFallingRock>(params));
|
||||
}
|
||||
|
||||
int16_t TimerLength = 80;
|
||||
|
|
|
|||
|
|
@ -2,12 +2,10 @@
|
|||
|
||||
#include <libultraship.h>
|
||||
#include "CoreMath.h"
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/Actor.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "camera.h"
|
||||
#include "common_structs.h"
|
||||
}
|
||||
|
|
@ -25,20 +23,20 @@ public:
|
|||
}
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline AFinishline* Spawn(FVector pos, IRotator rot) {
|
||||
static AFinishline* Spawn(FVector pos, IRotator rot) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:finishline",
|
||||
.Location = pos,
|
||||
.Rotation = rot,
|
||||
};
|
||||
return static_cast<AFinishline*>(GetWorld()->AddActor(new AFinishline(params)));
|
||||
return dynamic_cast<AFinishline*>(AddActorToWorld<AFinishline>(params));
|
||||
}
|
||||
|
||||
static inline AFinishline* Spawn() {
|
||||
static AFinishline* Spawn() {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:finishline",
|
||||
};
|
||||
return static_cast<AFinishline*>(GetWorld()->AddActor(new AFinishline(params)));
|
||||
return dynamic_cast<AFinishline*>(AddActorToWorld<AFinishline>(params));
|
||||
}
|
||||
|
||||
// Virtual functions to be overridden by derived classes
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include "engine/Actor.h"
|
||||
#include "CoreMath.h"
|
||||
#include "engine/World.h"
|
||||
#include "RegisterContent.h"
|
||||
|
||||
extern "C" {
|
||||
#include "common_structs.h"
|
||||
|
|
@ -25,7 +26,7 @@ public:
|
|||
.Velocity = velocity,
|
||||
.Speed = 182,
|
||||
};
|
||||
return static_cast<AMarioSign*>(GetWorld()->AddActor(new AMarioSign(params)));
|
||||
return static_cast<AMarioSign*>(AddActorToWorld<AMarioSign>(params));
|
||||
}
|
||||
|
||||
virtual bool IsMod() override;
|
||||
|
|
|
|||
|
|
@ -3,13 +3,8 @@
|
|||
#include <libultraship.h>
|
||||
#include <libultra/gbi.h>
|
||||
#include "CoreMath.h"
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/Actor.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "common_structs.h"
|
||||
#include "assets/textures/other_textures.h"
|
||||
}
|
||||
|
||||
class AShip : public AActor {
|
||||
public:
|
||||
|
|
@ -24,7 +19,7 @@ public:
|
|||
virtual ~AShip() = default;
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline AShip* Spawn(FVector pos, IRotator rot, FVector scale, int16_t skin) {
|
||||
static AShip* Spawn(FVector pos, IRotator rot, FVector scale, int16_t skin) {
|
||||
SpawnParams params = {
|
||||
.Name = "hm:ship",
|
||||
.Type = skin, // which ship model to use
|
||||
|
|
@ -32,7 +27,7 @@ public:
|
|||
.Rotation = rot,
|
||||
.Scale = scale,
|
||||
};
|
||||
return static_cast<AShip*>(GetWorld()->AddActor(new AShip(params)));
|
||||
return dynamic_cast<AShip*>(AddActorToWorld<AShip>(params));
|
||||
}
|
||||
|
||||
AShip::Skin SpawnSkin = Skin::GHOSTSHIP;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#include <libultraship.h>
|
||||
#include <libultra/gbi.h>
|
||||
#include "CoreMath.h"
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/Actor.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
|
|
@ -24,7 +25,7 @@ public:
|
|||
.Rotation = rot,
|
||||
.Scale = scale,
|
||||
};
|
||||
return static_cast<ASpaghettiShip*>(GetWorld()->AddActor(new ASpaghettiShip(params)));
|
||||
return static_cast<ASpaghettiShip*>(AddActorToWorld<ASpaghettiShip>(params));
|
||||
}
|
||||
|
||||
virtual void Tick() override;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#include <libultraship.h>
|
||||
#include <libultra/gbi.h>
|
||||
#include "CoreMath.h"
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/Actor.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
|
|
@ -17,7 +18,7 @@ public:
|
|||
virtual ~AStarship() = default;
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline AStarship* Spawn(FVector pos, IRotator rot, FVector scale, f32 speed, f32 radius) {
|
||||
static AStarship* Spawn(FVector pos, IRotator rot, FVector scale, f32 speed, f32 radius) {
|
||||
SpawnParams params = {
|
||||
.Name = "hm:starship",
|
||||
.Location = pos,
|
||||
|
|
@ -26,7 +27,7 @@ public:
|
|||
.Speed = speed,
|
||||
.SpeedB = radius,
|
||||
};
|
||||
return static_cast<AStarship*>(GetWorld()->AddActor(new AStarship(params)));
|
||||
return dynamic_cast<AStarship*>(AddActorToWorld<AStarship>(params));
|
||||
}
|
||||
|
||||
float SpeedB;
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/Actor.h"
|
||||
#include "src/textures.h"
|
||||
#include "engine/CoreMath.h"
|
||||
#include "port/Game.h"
|
||||
|
||||
class AText : public AActor {
|
||||
public:
|
||||
|
|
@ -97,16 +97,16 @@ public:
|
|||
* For transparency {0, 0, 0, 100} <-- alpha value of 100 will render semi-transparent black text.
|
||||
*
|
||||
*/
|
||||
static inline AText* Spawn(std::string text, FVector pos, FVector scale, AText::TextMode textMode, int16_t playerIndex) {
|
||||
static AText* Spawn(std::string text, FVector pos, FVector scale, AText::TextMode textMode, int16_t playerIndex) {
|
||||
SpawnParams params = {
|
||||
.Name = "hm:text",
|
||||
.Type = static_cast<int16_t>(textMode),
|
||||
.Behaviour = static_cast<int16_t>(playerIndex),
|
||||
.Behaviour = playerIndex,
|
||||
.Skin = text,
|
||||
.Location = pos,
|
||||
.Scale = scale,
|
||||
};
|
||||
return static_cast<AText*>(GetWorld()->AddActor(new AText(params)));
|
||||
return dynamic_cast<AText*>(AddActorToWorld<AText>(params));
|
||||
}
|
||||
|
||||
// Virtual functions to be overridden by derived classes
|
||||
|
|
|
|||
|
|
@ -1,13 +1,9 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/Actor.h"
|
||||
#include "CoreMath.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "common_structs.h"
|
||||
}
|
||||
|
||||
class AWarioSign : public AActor {
|
||||
public:
|
||||
|
|
@ -16,7 +12,7 @@ public:
|
|||
explicit AWarioSign(const SpawnParams& params);
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline AWarioSign* Spawn(FVector pos, IRotator rot, FVector velocity, FVector scale) {
|
||||
static AWarioSign* Spawn(FVector pos, IRotator rot, FVector velocity, FVector scale) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:wario_sign",
|
||||
.Location = pos,
|
||||
|
|
@ -25,7 +21,7 @@ public:
|
|||
.Velocity = velocity,
|
||||
.Speed = 182,
|
||||
};
|
||||
return static_cast<AWarioSign*>(GetWorld()->AddActor(new AWarioSign(params)));
|
||||
return dynamic_cast<AWarioSign*>(AddActorToWorld<AWarioSign>(params));
|
||||
}
|
||||
|
||||
virtual bool IsMod() override;
|
||||
|
|
|
|||
|
|
@ -249,7 +249,7 @@ std::pair<AActor*, float> ObjectPicker::CheckAActorRay(Ray ray) {
|
|||
AActor* hitActor = nullptr;
|
||||
float hitDistance = FLT_MAX;
|
||||
|
||||
for (auto actor : GetWorld()->Actors) {
|
||||
for (const auto& actor : GetWorld()->Actors) {
|
||||
if ((actor->bPendingDestroy) && (!actor->IsMod())) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -265,7 +265,7 @@ std::pair<AActor*, float> ObjectPicker::CheckAActorRay(Ray ray) {
|
|||
if (IntersectRayTriangleAndTransform(ray, FVector(actor->Pos[0], actor->Pos[1], actor->Pos[2]), tri, t)) {
|
||||
if (t < hitDistance) {
|
||||
hitDistance = t;
|
||||
hitActor = static_cast<AActor*>(actor);
|
||||
hitActor = actor.get();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -283,7 +283,7 @@ std::pair<AActor*, float> ObjectPicker::CheckAActorRay(Ray ray) {
|
|||
if (QueryCollisionRayActor(&ray.Origin.x, &ray.Direction.x, boxMin, boxMax, &t)) {
|
||||
if (t < hitDistance) {
|
||||
hitDistance = t;
|
||||
hitActor = static_cast<AActor*>(actor);
|
||||
hitActor = actor.get();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <memory>
|
||||
#include <optional> // Must be before json.hpp
|
||||
#include <nlohmann/json.hpp>
|
||||
#include "port/Engine.h"
|
||||
|
|
@ -168,8 +169,8 @@ namespace Editor {
|
|||
}
|
||||
|
||||
void Load_AddStaticMeshActor(const nlohmann::json& actorJson) {
|
||||
GetWorld()->StaticMeshActors.push_back(new StaticMeshActor("", FVector(0, 0, 0), IRotator(0, 0, 0), FVector(1, 1, 1), "", nullptr));
|
||||
auto actor = GetWorld()->StaticMeshActors.back();
|
||||
GetWorld()->StaticMeshActors.push_back(std::make_unique<StaticMeshActor>("", FVector(0, 0, 0), IRotator(0, 0, 0), FVector(1, 1, 1), "", nullptr));
|
||||
auto& actor = GetWorld()->StaticMeshActors.back();
|
||||
actor->from_json(actorJson);
|
||||
|
||||
printf("After from_json: Pos(%f, %f, %f), Name: %s, Model: %s\n",
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <vector>
|
||||
#include "Object.h"
|
||||
|
||||
#include "RegisterContent.h"
|
||||
#include "World.h"
|
||||
#include "CoreMath.h"
|
||||
|
||||
|
|
@ -36,7 +37,7 @@ public:
|
|||
.Location = pos,
|
||||
.Rotation = rot,
|
||||
};
|
||||
return static_cast<OBat*>(GetWorld()->AddObject(new OBat(params)));
|
||||
return dynamic_cast<OBat*>(AddObjectToWorld<OBat>(params));
|
||||
}
|
||||
|
||||
explicit OBat(const SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -1,19 +1,13 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/objects/Object.h"
|
||||
#include <vector>
|
||||
#include "engine/Matrix.h"
|
||||
|
||||
#include "World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include "objects.h"
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -52,7 +46,7 @@ class OBombKart : public OObject {
|
|||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
// Spawn object at a position
|
||||
static inline OBombKart* Spawn(FVector pos, uint16_t behaviour, f32 unk_3C) {
|
||||
static OBombKart* Spawn(FVector pos, uint16_t behaviour, f32 unk_3C) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:bomb_kart",
|
||||
.Behaviour = behaviour,
|
||||
|
|
@ -60,11 +54,11 @@ class OBombKart : public OObject {
|
|||
.Speed = unk_3C, // Only used for podium ceremony. Arbitrarily chose Speed for this
|
||||
.SpeedB = 2.7f, // Chase speed
|
||||
};
|
||||
return static_cast<OBombKart*>(GetWorld()->AddObject(new OBombKart(params)));
|
||||
return dynamic_cast<OBombKart*>(AddObjectToWorld<OBombKart>(params));
|
||||
}
|
||||
|
||||
// Spawn object at a point along the tracks path
|
||||
static inline OBombKart* Spawn(uint32_t pathIndex, uint32_t pathPoint, uint16_t behaviour, f32 unk_3C) {
|
||||
static OBombKart* Spawn(uint32_t pathIndex, uint32_t pathPoint, uint16_t behaviour, f32 unk_3C) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:bomb_kart",
|
||||
.Behaviour = behaviour,
|
||||
|
|
@ -72,7 +66,7 @@ class OBombKart : public OObject {
|
|||
.PathPoint = pathPoint,
|
||||
.Speed = unk_3C, // Only used for podium ceremony. Arbitrarily chose Speed for this
|
||||
};
|
||||
return static_cast<OBombKart*>(GetWorld()->AddObject(new OBombKart(params)));
|
||||
return dynamic_cast<OBombKart*>(AddObjectToWorld<OBombKart>(params));
|
||||
}
|
||||
|
||||
// Set waypoint to NULL if using a spawn position and not a waypoint.
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <vector>
|
||||
#include "Object.h"
|
||||
|
||||
#include "RegisterContent.h"
|
||||
#include "World.h"
|
||||
#include "CoreMath.h"
|
||||
|
||||
|
|
@ -45,7 +46,7 @@ public:
|
|||
.TriggerSpan = triggerBoundary,
|
||||
.RightExitSpan = rightBoundary,
|
||||
};
|
||||
return static_cast<OBoos*>(GetWorld()->AddObject(new OBoos(params)));
|
||||
return static_cast<OBoos*>(AddObjectToWorld<OBoos>(params));
|
||||
}
|
||||
|
||||
explicit OBoos(const SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -29,6 +29,16 @@ OChainChomp::OChainChomp() {
|
|||
_count++;
|
||||
}
|
||||
|
||||
OChainChomp::OChainChomp(const SpawnParams& params) {
|
||||
Name = "Chain Chomp";
|
||||
ResourceName = "mk:chain_chomp";
|
||||
_idx = _count;
|
||||
init_object(indexObjectList2[_idx], 0);
|
||||
_objectIndex = indexObjectList2[_idx];
|
||||
|
||||
_count++;
|
||||
}
|
||||
|
||||
void OChainChomp::Tick() {
|
||||
s32 objectIndex;
|
||||
Object* object;
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ extern "C" {
|
|||
class OChainChomp : public OObject {
|
||||
public:
|
||||
explicit OChainChomp();
|
||||
explicit OChainChomp(const SpawnParams& params);
|
||||
|
||||
|
||||
~OChainChomp() {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "Object.h"
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/CoreMath.h"
|
||||
|
||||
#include "World.h"
|
||||
|
|
@ -32,7 +33,7 @@ public:
|
|||
.Location = pos,
|
||||
.PathSpan = span,
|
||||
};
|
||||
return static_cast<OCheepCheep*>(GetWorld()->AddObject(new OCheepCheep(params)));
|
||||
return static_cast<OCheepCheep*>(AddObjectToWorld<OCheepCheep>(params));
|
||||
}
|
||||
|
||||
explicit OCheepCheep(const SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/objects/Object.h"
|
||||
#include "CoreMath.h"
|
||||
#include "World.h"
|
||||
|
|
@ -37,7 +38,7 @@ public:
|
|||
.PatrolStart = start,
|
||||
.PatrolEnd = end,
|
||||
};
|
||||
return static_cast<OCrab*>(GetWorld()->AddObject(new OCrab(params)));
|
||||
return static_cast<OCrab*>(AddObjectToWorld<OCrab>(params));
|
||||
}
|
||||
|
||||
explicit OCrab(const SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <vector>
|
||||
#include "Object.h"
|
||||
|
||||
#include "RegisterContent.h"
|
||||
#include "World.h"
|
||||
|
||||
extern "C" {
|
||||
|
|
@ -24,7 +25,7 @@ public:
|
|||
explicit OFlagpole(const SpawnParams& params);
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline OFlagpole* Spawn(FVector pos, s16 direction) {
|
||||
static OFlagpole* Spawn(FVector pos, s16 direction) {
|
||||
IRotator rot;
|
||||
rot.Set(0, direction, 0);
|
||||
SpawnParams params = {
|
||||
|
|
@ -32,7 +33,7 @@ public:
|
|||
.Location = pos,
|
||||
.Rotation = rot,
|
||||
};
|
||||
return static_cast<OFlagpole*>(GetWorld()->AddObject(new OFlagpole(params)));
|
||||
return dynamic_cast<OFlagpole*>(AddObjectToWorld<OFlagpole>(params));
|
||||
}
|
||||
|
||||
~OFlagpole() {
|
||||
|
|
|
|||
|
|
@ -1,20 +1,13 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/World.h"
|
||||
#include "engine/objects/Object.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include "objects.h"
|
||||
#include "camera.h"
|
||||
#include "some_data.h"
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -28,12 +21,12 @@ public:
|
|||
explicit OGrandPrixBalloons(const SpawnParams& params);
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline OGrandPrixBalloons* Spawn(const FVector& pos) {
|
||||
static OGrandPrixBalloons* Spawn(const FVector& pos) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:grand_prix_balloons",
|
||||
.Location = pos,
|
||||
};
|
||||
return static_cast<OGrandPrixBalloons*>(GetWorld()->AddObject(new OGrandPrixBalloons(params)));
|
||||
return dynamic_cast<OGrandPrixBalloons*>(AddObjectToWorld<OGrandPrixBalloons>(params));
|
||||
}
|
||||
|
||||
~OGrandPrixBalloons() {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <vector>
|
||||
#include "Object.h"
|
||||
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
extern "C" {
|
||||
|
|
@ -34,7 +35,7 @@ public:
|
|||
.Location = pos,
|
||||
.PatrolEnd = patrolPoint,
|
||||
};
|
||||
return static_cast<OHedgehog*>(GetWorld()->AddObject(new OHedgehog(params)));
|
||||
return static_cast<OHedgehog*>(AddObjectToWorld<OHedgehog>(params));
|
||||
}
|
||||
|
||||
~OHedgehog() {
|
||||
|
|
|
|||
|
|
@ -1,33 +1,22 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "Object.h"
|
||||
|
||||
#include "RegisterContent.h"
|
||||
#include "World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include "objects.h"
|
||||
#include "camera.h"
|
||||
#include "some_data.h"
|
||||
}
|
||||
|
||||
class OHotAirBalloon : public OObject {
|
||||
public:
|
||||
explicit OHotAirBalloon(const SpawnParams& params);
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline OHotAirBalloon* Spawn(FVector pos) {
|
||||
static OHotAirBalloon* Spawn(FVector pos) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:hot_air_balloon",
|
||||
.Location = pos,
|
||||
};
|
||||
return static_cast<OHotAirBalloon*>(GetWorld()->AddObject(new OHotAirBalloon(params)));
|
||||
return dynamic_cast<OHotAirBalloon*>(AddObjectToWorld<OHotAirBalloon>(params));
|
||||
}
|
||||
|
||||
virtual void Tick() override;
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ OMoleGroup::OMoleGroup(std::vector<FVector>& spawns, size_t tickRate) {
|
|||
_tickRate = tickRate;
|
||||
for (auto& pos : spawns) {
|
||||
pos.x * xOrientation;
|
||||
OMole* ptr = reinterpret_cast<OMole*>(GetWorld()->AddObject(new OMole(pos, this)));
|
||||
OMole* ptr = reinterpret_cast<OMole*>(GetWorld()->AddObject(OMole(pos, this)));
|
||||
_moles.push_back({ptr, pos, false});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/World.h"
|
||||
#include "engine/objects/Object.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include "objects.h"
|
||||
#include "course_offsets.h"
|
||||
}
|
||||
|
||||
class OPenguin : public OObject {
|
||||
public:
|
||||
enum PenguinType : int16_t {
|
||||
|
|
@ -34,11 +24,10 @@ public:
|
|||
SLIDE6,
|
||||
};
|
||||
|
||||
public:
|
||||
explicit OPenguin(const SpawnParams& params);
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline OPenguin* Spawn(FVector pos, u16 direction, u16 mirrorModeAngleOffset, f32 diameter, PenguinType type, Behaviour behaviour) {
|
||||
static OPenguin* Spawn(FVector pos, u16 direction, u16 mirrorModeAngleOffset, f32 diameter, PenguinType type, Behaviour behaviour) {
|
||||
IRotator rot;
|
||||
rot.Set(0, direction, mirrorModeAngleOffset);
|
||||
SpawnParams params = {
|
||||
|
|
@ -49,7 +38,7 @@ public:
|
|||
.Rotation = rot,
|
||||
.Speed = diameter, // Diameter of the walking circle
|
||||
};
|
||||
return static_cast<OPenguin*>(GetWorld()->AddObject(new OPenguin(params)));
|
||||
return dynamic_cast<OPenguin*>(AddObjectToWorld<OPenguin>(params));
|
||||
}
|
||||
|
||||
PenguinType Type = PenguinType::CHICK;
|
||||
|
|
|
|||
|
|
@ -1,38 +1,25 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
|
||||
#include "RegisterContent.h"
|
||||
#include "World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include "objects.h"
|
||||
#include "course_offsets.h"
|
||||
#include "some_data.h"
|
||||
}
|
||||
|
||||
|
||||
class OPodium : public OObject {
|
||||
public:
|
||||
enum Behaviour : uint16_t {
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
explicit OPodium(const SpawnParams& params);
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline OPodium* Spawn(const FVector& pos) {
|
||||
static OPodium* Spawn(const FVector& pos) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:podium",
|
||||
.Location = pos,
|
||||
};
|
||||
return static_cast<OPodium*>(GetWorld()->AddObject(new OPodium(params)));
|
||||
return dynamic_cast<OPodium*>(AddObjectToWorld<OPodium>(params));
|
||||
}
|
||||
|
||||
virtual void Tick() override;
|
||||
|
|
|
|||
|
|
@ -1,21 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "Object.h"
|
||||
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include "objects.h"
|
||||
#include "camera.h"
|
||||
}
|
||||
|
||||
//! @todo unk_0D5 needs to be a struct variable probably. What does it do? Behaviour?
|
||||
class OSeagull : public OObject {
|
||||
public:
|
||||
|
|
@ -30,12 +20,12 @@ public:
|
|||
}
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline OSeagull* Spawn(const FVector& pos) {
|
||||
static OSeagull* Spawn(const FVector& pos) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:seagull",
|
||||
.Location = pos,
|
||||
};
|
||||
return static_cast<OSeagull*>(GetWorld()->AddObject(new OSeagull(params)));
|
||||
return dynamic_cast<OSeagull*>(AddObjectToWorld<OSeagull>(params));
|
||||
}
|
||||
|
||||
virtual void Tick() override;
|
||||
|
|
|
|||
|
|
@ -1,31 +1,24 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "Object.h"
|
||||
|
||||
#include "RegisterContent.h"
|
||||
#include "World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include "objects.h"
|
||||
#include "camera.h"
|
||||
#include "some_data.h"
|
||||
}
|
||||
|
||||
class OSnowman : public OObject {
|
||||
public:
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline OSnowman* Spawn(FVector pos) {
|
||||
static OSnowman* Spawn(FVector pos) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:snowman",
|
||||
.Location = FVector(pos.x, pos.y, pos.z),
|
||||
};
|
||||
return static_cast<OSnowman*>(GetWorld()->AddObject(new OSnowman(params)));
|
||||
return dynamic_cast<OSnowman*>(AddObjectToWorld<OSnowman>(params));
|
||||
}
|
||||
|
||||
explicit OSnowman(const SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/World.h"
|
||||
#include "engine/SpawnParams.h"
|
||||
#include "engine/CoreMath.h"
|
||||
|
|
@ -9,14 +9,8 @@
|
|||
#include "engine/objects/Object.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include "objects.h"
|
||||
#include "camera.h"
|
||||
#include "some_data.h"
|
||||
}
|
||||
|
||||
//! @todo Make shadow size bigger if thwomp is scaled up
|
||||
|
|
@ -45,7 +39,7 @@ public:
|
|||
};
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline OThwomp* Spawn(s16 x, s16 z, s16 direction, f32 scale, s16 behaviour, s16 primAlpha, u16 boundingBoxSize = 7) {
|
||||
static OThwomp* Spawn(s16 x, s16 z, s16 direction, f32 scale, s16 behaviour, s16 primAlpha, u16 boundingBoxSize = 7) {
|
||||
IRotator rot;
|
||||
rot.Set(0, direction, 0);
|
||||
|
||||
|
|
@ -58,7 +52,7 @@ public:
|
|||
.PrimAlpha = primAlpha,
|
||||
.BoundingBoxSize = boundingBoxSize
|
||||
};
|
||||
return static_cast<OThwomp*>(GetWorld()->AddObject(new OThwomp(params)));
|
||||
return dynamic_cast<OThwomp*>(AddObjectToWorld<OThwomp>(params));
|
||||
}
|
||||
|
||||
explicit OThwomp(const SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -1,22 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "Object.h"
|
||||
|
||||
#include "RegisterContent.h"
|
||||
#include "World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include "objects.h"
|
||||
#include "camera.h"
|
||||
#include "some_data.h"
|
||||
}
|
||||
|
||||
class OTrashBin : public OObject {
|
||||
public:
|
||||
|
||||
|
|
@ -26,7 +15,7 @@ public:
|
|||
};
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline OTrashBin* Spawn(const FVector& pos, const IRotator& rot, f32 scale, OTrashBin::Behaviour bhv) {
|
||||
static OTrashBin* Spawn(const FVector& pos, const IRotator& rot, f32 scale, OTrashBin::Behaviour bhv) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:trash_bin",
|
||||
.Behaviour = bhv,
|
||||
|
|
@ -34,7 +23,7 @@ public:
|
|||
.Rotation = rot,
|
||||
.Scale = FVector(0, scale, 0),
|
||||
};
|
||||
return static_cast<OTrashBin*>(GetWorld()->AddObject(new OTrashBin(params)));
|
||||
return dynamic_cast<OTrashBin*>(AddObjectToWorld<OTrashBin>(params));
|
||||
}
|
||||
|
||||
explicit OTrashBin(const SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -1,20 +1,13 @@
|
|||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "Object.h"
|
||||
#include "RegisterContent.h"
|
||||
#include "World.h"
|
||||
#include "engine/particles/StarEmitter.h"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include "objects.h"
|
||||
#include "course_offsets.h"
|
||||
#include "some_data.h"
|
||||
}
|
||||
|
||||
class OTrophy : public OObject {
|
||||
|
|
@ -37,14 +30,14 @@ public:
|
|||
};
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline OTrophy* Spawn(const FVector& pos, TrophyType trophy, Behaviour bhv) {
|
||||
static OTrophy* Spawn(const FVector& pos, TrophyType trophy, Behaviour bhv) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:trophy",
|
||||
.Type = trophy,
|
||||
.Behaviour = bhv,
|
||||
.Location = pos,
|
||||
};
|
||||
return static_cast<OTrophy*>(GetWorld()->AddObject(new OTrophy(params)));
|
||||
return dynamic_cast<OTrophy*>(AddObjectToWorld<OTrophy>(params));
|
||||
}
|
||||
|
||||
explicit OTrophy(const SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include "engine/objects/Boos.h"
|
||||
#include "assets/models/tracks/banshee_boardwalk/banshee_boardwalk_data.h"
|
||||
#include "assets/other/tracks/banshee_boardwalk/banshee_boardwalk_data.h"
|
||||
#include "port/Game.h"
|
||||
#include "assets/textures/boo_frames.h"
|
||||
|
||||
extern "C" {
|
||||
|
|
@ -165,25 +166,25 @@ void BansheeBoardwalk::BeginPlay() {
|
|||
}
|
||||
|
||||
if (gIsMirrorMode) {
|
||||
OTrashBin::Spawn(FVector(1765.0f, 45.0f, 195.0f), IRotator(0, 180, 0), 1.0f, bhv);
|
||||
SpawnActor<OTrashBin>(FVector(1765.0f, 45.0f, 195.0f), IRotator(0, 180, 0), 1.0f, bhv);
|
||||
} else {
|
||||
OTrashBin::Spawn(FVector(-1765.0f, 45.0f, 70.0f), IRotator(0, 0, 0), 1.0f, bhv);
|
||||
SpawnActor<OTrashBin>(FVector(-1765.0f, 45.0f, 70.0f), IRotator(0, 0, 0), 1.0f, bhv);
|
||||
}
|
||||
|
||||
if ((gGamestate != CREDITS_SEQUENCE) && (gModeSelection != TIME_TRIALS)) {
|
||||
OBat::Spawn(FVector(0,0,0), IRotator(0, 0, 90));
|
||||
OBoos::Spawn(5, IPathSpan(180, 190), IPathSpan(200, 210), IPathSpan(280, 290));
|
||||
OBoos::Spawn(5, IPathSpan(490, 500), IPathSpan(510, 520), IPathSpan(620, 630));
|
||||
SpawnActor<OBat>(FVector(0,0,0), IRotator(0, 0, 90));
|
||||
SpawnActor<OBoos>(5, IPathSpan(180, 190), IPathSpan(200, 210), IPathSpan(280, 290));
|
||||
SpawnActor<OBoos>(5, IPathSpan(490, 500), IPathSpan(510, 520), IPathSpan(620, 630));
|
||||
}
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 110, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 190, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 250, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 475, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 610, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 110, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 190, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 250, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 475, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 610, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -129,13 +129,13 @@ void BigDonut::BeginPlay() {
|
|||
spawn_all_item_boxes((ActorSpawnData*) LOAD_ASSET_RAW(d_course_big_donut_item_box_spawns));
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 20, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 40, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 60, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 80, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 100, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 120, 0, 1.0);
|
||||
OBombKart::Spawn(0, 140, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 20, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 40, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 60, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 80, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 100, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 120, 0, 1.0);
|
||||
SpawnActor<OBombKart>(0, 140, 0, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -120,13 +120,13 @@ void BlockFort::BeginPlay() {
|
|||
spawn_all_item_boxes((ActorSpawnData*) LOAD_ASSET_RAW(d_course_block_fort_item_box_spawns));
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 20, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 40, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 60, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 80, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 100, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 120, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 140, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 20, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 40, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 60, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 80, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 100, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 120, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 140, 0, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -138,52 +138,52 @@ void BowsersCastle::BeginPlay() {
|
|||
switch (gCCSelection) {
|
||||
case CC_100:
|
||||
case CC_EXTRA:
|
||||
OThwomp::Spawn(0x0320, 0xf92a, 0xC000, 1.0f, OThwomp::States::STATIONARY, 0);
|
||||
OThwomp::Spawn(0x044c, 0xf92a, 0xC000, 1.0f, OThwomp::States::STATIONARY, 1);
|
||||
OThwomp::Spawn(0x02bc, 0xf95c, 0xC000, 1.0f, OThwomp::States::MOVE_AND_ROTATE, 0);
|
||||
OThwomp::Spawn(0x04b0, 0xf8f8, 0xC000, 1.0f, OThwomp::States::MOVE_AND_ROTATE, 1);
|
||||
OThwomp::Spawn(0x04b0, 0xf5ba, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 0);
|
||||
OThwomp::Spawn(0x04b0, 0xf592, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 1);
|
||||
OThwomp::Spawn(0x091a, 0xf5bf, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 0);
|
||||
OThwomp::Spawn(0x091a, 0xf597, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 1);
|
||||
OThwomp::Spawn(0x0596, 0xf92f, 0xC000, 1.5f, OThwomp::States::JAILED, 0);
|
||||
OThwomp::Spawn(0x082a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE, 0);
|
||||
OThwomp::Spawn(0x073a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE, 1);
|
||||
SpawnActor<OThwomp>(0x0320, 0xf92a, 0xC000, 1.0f, OThwomp::States::STATIONARY, 0);
|
||||
SpawnActor<OThwomp>(0x044c, 0xf92a, 0xC000, 1.0f, OThwomp::States::STATIONARY, 1);
|
||||
SpawnActor<OThwomp>(0x02bc, 0xf95c, 0xC000, 1.0f, OThwomp::States::MOVE_AND_ROTATE, 0);
|
||||
SpawnActor<OThwomp>(0x04b0, 0xf8f8, 0xC000, 1.0f, OThwomp::States::MOVE_AND_ROTATE, 1);
|
||||
SpawnActor<OThwomp>(0x04b0, 0xf5ba, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 0);
|
||||
SpawnActor<OThwomp>(0x04b0, 0xf592, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 1);
|
||||
SpawnActor<OThwomp>(0x091a, 0xf5bf, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 0);
|
||||
SpawnActor<OThwomp>(0x091a, 0xf597, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 1);
|
||||
SpawnActor<OThwomp>(0x0596, 0xf92f, 0xC000, 1.5f, OThwomp::States::JAILED, 0);
|
||||
SpawnActor<OThwomp>(0x082a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE, 0);
|
||||
SpawnActor<OThwomp>(0x073a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE, 1);
|
||||
break;
|
||||
case CC_50:
|
||||
OThwomp::Spawn(0x3B6, 0xF92A, 0xC000, 1.0f, OThwomp::States::STATIONARY, 0);
|
||||
OThwomp::Spawn(0x0352, 0xf95c, 0xC000, 1.0f, OThwomp::States::MOVE_AND_ROTATE, 0);
|
||||
OThwomp::Spawn(0x04b0, 0xf5ba, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 0);
|
||||
OThwomp::Spawn(0x04b0, 0xf592, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 1);
|
||||
OThwomp::Spawn(0x091a, 0xf5b0, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 0);
|
||||
OThwomp::Spawn(0x0596, 0xf92f, 0xC000, 1.5f, OThwomp::States::JAILED, 0);
|
||||
OThwomp::Spawn(0x082a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE , 0);
|
||||
OThwomp::Spawn(0x073a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE, 1);
|
||||
SpawnActor<OThwomp>(0x3B6, 0xF92A, 0xC000, 1.0f, OThwomp::States::STATIONARY, 0);
|
||||
SpawnActor<OThwomp>(0x0352, 0xf95c, 0xC000, 1.0f, OThwomp::States::MOVE_AND_ROTATE, 0);
|
||||
SpawnActor<OThwomp>(0x04b0, 0xf5ba, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 0);
|
||||
SpawnActor<OThwomp>(0x04b0, 0xf592, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 1);
|
||||
SpawnActor<OThwomp>(0x091a, 0xf5b0, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 0);
|
||||
SpawnActor<OThwomp>(0x0596, 0xf92f, 0xC000, 1.5f, OThwomp::States::JAILED, 0);
|
||||
SpawnActor<OThwomp>(0x082a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE , 0);
|
||||
SpawnActor<OThwomp>(0x073a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE, 1);
|
||||
break;
|
||||
case CC_150:
|
||||
OThwomp::Spawn(0x0320, 0xf92a, 0xC000, 1.0f, OThwomp::States::STATIONARY, 0);
|
||||
OThwomp::Spawn(0x044c, 0xf92a, 0xC000, 1.0f, OThwomp::States::STATIONARY, 1);
|
||||
OThwomp::Spawn(0x02bc, 0xf95c, 0xC000, 1.0f, OThwomp::States::MOVE_AND_ROTATE, 0);
|
||||
OThwomp::Spawn(0x04b0, 0xf8f8, 0xC000, 1.0f, OThwomp::States::MOVE_AND_ROTATE, 1);
|
||||
OThwomp::Spawn(0x04b0, 0xf5ba, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 0);
|
||||
OThwomp::Spawn(0x04b0, 0xf592, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 1);
|
||||
OThwomp::Spawn(0x091a, 0xf5c9, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 0);
|
||||
OThwomp::Spawn(0x091a, 0xf5ab, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 1);
|
||||
OThwomp::Spawn(0x091a, 0xf58d, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 2);
|
||||
OThwomp::Spawn(0x0596, 0xf92f, 0xC000, 1.5f, OThwomp::States::JAILED, 0);
|
||||
OThwomp::Spawn(0x082a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE, 0);
|
||||
OThwomp::Spawn(0x073a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE, 1);
|
||||
SpawnActor<OThwomp>(0x0320, 0xf92a, 0xC000, 1.0f, OThwomp::States::STATIONARY, 0);
|
||||
SpawnActor<OThwomp>(0x044c, 0xf92a, 0xC000, 1.0f, OThwomp::States::STATIONARY, 1);
|
||||
SpawnActor<OThwomp>(0x02bc, 0xf95c, 0xC000, 1.0f, OThwomp::States::MOVE_AND_ROTATE, 0);
|
||||
SpawnActor<OThwomp>(0x04b0, 0xf8f8, 0xC000, 1.0f, OThwomp::States::MOVE_AND_ROTATE, 1);
|
||||
SpawnActor<OThwomp>(0x04b0, 0xf5ba, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 0);
|
||||
SpawnActor<OThwomp>(0x04b0, 0xf592, 0xC000, 1.0f, OThwomp::States::MOVE_FAR, 1);
|
||||
SpawnActor<OThwomp>(0x091a, 0xf5c9, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 0);
|
||||
SpawnActor<OThwomp>(0x091a, 0xf5ab, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 1);
|
||||
SpawnActor<OThwomp>(0x091a, 0xf58d, 0xC000, 1.0f, OThwomp::States::STATIONARY_FAST, 2);
|
||||
SpawnActor<OThwomp>(0x0596, 0xf92f, 0xC000, 1.5f, OThwomp::States::JAILED, 0);
|
||||
SpawnActor<OThwomp>(0x082a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE, 0);
|
||||
SpawnActor<OThwomp>(0x073a, 0xf9f2, 0x4000, 1.0f, OThwomp::States::SLIDE, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 50, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 150, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 200, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 260, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 435, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 50, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 150, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 200, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 260, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 435, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -160,18 +160,18 @@ void ChocoMountain::Load() {
|
|||
|
||||
void ChocoMountain::BeginPlay() {
|
||||
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_choco_mountain_item_box_spawns));
|
||||
AFallingRock::Spawn(FVector(2019, 156, 164), 60);
|
||||
AFallingRock::Spawn(FVector(2018, 155, 379), 120);
|
||||
AFallingRock::Spawn(FVector(1996, 146, 505), 180);
|
||||
SpawnActor<AFallingRock>(FVector(2019, 156, 164), 60);
|
||||
SpawnActor<AFallingRock>(FVector(2018, 155, 379), 120);
|
||||
SpawnActor<AFallingRock>(FVector(1996, 146, 505), 180);
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 140, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 165, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 330, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 550, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 595, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 140, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 165, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 330, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 550, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 595, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -175,16 +175,16 @@ void DKJungle::BeginPlay() {
|
|||
|
||||
// The original game only ran vehicle logic every second frame.
|
||||
// Thus the speed gets divided by two to set speed to match properly
|
||||
ABoat::Spawn((0.6666666f)/4, 0, 0, ABoat::SpawnMode::POINT);
|
||||
SpawnActor<ABoat>((0.6666666f)/4, 0, 0, ABoat::SpawnMode::POINT);
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 50, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 100, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 150, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 190, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 250, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 50, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 100, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 150, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 190, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 250, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,13 +119,13 @@ void DoubleDeck::BeginPlay() {
|
|||
spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_double_deck_item_box_spawns));
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 20, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 40, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 60, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 80, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 100, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 120, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 140, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 20, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 40, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 60, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 80, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 100, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 120, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 140, 0, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -132,35 +132,35 @@ void FrappeSnowland::BeginPlay() {
|
|||
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_frappe_snowland_item_box_spawns));
|
||||
|
||||
if (gGamestate != CREDITS_SEQUENCE) {
|
||||
OSnowman::Spawn(FVector(697, 0, -1684));
|
||||
OSnowman::Spawn(FVector(82, 0, -2245));
|
||||
OSnowman::Spawn(FVector(27, 5, -2067));
|
||||
OSnowman::Spawn(FVector(-656, 0, -1735));
|
||||
OSnowman::Spawn(FVector(-1497, 0, -83));
|
||||
OSnowman::Spawn(FVector(-1643, 0, -25));
|
||||
OSnowman::Spawn(FVector(-1547, 0, -20));
|
||||
OSnowman::Spawn(FVector(-1445, 0, -10));
|
||||
OSnowman::Spawn(FVector(-1502, 0, 61));
|
||||
OSnowman::Spawn(FVector(-1429, 0, 79));
|
||||
OSnowman::Spawn(FVector(-1586, 0, 71));
|
||||
OSnowman::Spawn(FVector(-1471, 0, 157));
|
||||
OSnowman::Spawn(FVector(-1539, 0, 175));
|
||||
OSnowman::Spawn(FVector(-1484, 0, 303));
|
||||
OSnowman::Spawn(FVector(-1442, 0, 358));
|
||||
OSnowman::Spawn(FVector(-1510, 0, 426));
|
||||
OSnowman::Spawn(FVector(-665, 0, 830));
|
||||
OSnowman::Spawn(FVector(-701, 3, 853));
|
||||
OSnowman::Spawn(FVector(-602, 0, 929));
|
||||
SpawnActor<OSnowman>(FVector(697, 0, -1684));
|
||||
SpawnActor<OSnowman>(FVector(82, 0, -2245));
|
||||
SpawnActor<OSnowman>(FVector(27, 5, -2067));
|
||||
SpawnActor<OSnowman>(FVector(-656, 0, -1735));
|
||||
SpawnActor<OSnowman>(FVector(-1497, 0, -83));
|
||||
SpawnActor<OSnowman>(FVector(-1643, 0, -25));
|
||||
SpawnActor<OSnowman>(FVector(-1547, 0, -20));
|
||||
SpawnActor<OSnowman>(FVector(-1445, 0, -10));
|
||||
SpawnActor<OSnowman>(FVector(-1502, 0, 61));
|
||||
SpawnActor<OSnowman>(FVector(-1429, 0, 79));
|
||||
SpawnActor<OSnowman>(FVector(-1586, 0, 71));
|
||||
SpawnActor<OSnowman>(FVector(-1471, 0, 157));
|
||||
SpawnActor<OSnowman>(FVector(-1539, 0, 175));
|
||||
SpawnActor<OSnowman>(FVector(-1484, 0, 303));
|
||||
SpawnActor<OSnowman>(FVector(-1442, 0, 358));
|
||||
SpawnActor<OSnowman>(FVector(-1510, 0, 426));
|
||||
SpawnActor<OSnowman>(FVector(-665, 0, 830));
|
||||
SpawnActor<OSnowman>(FVector(-701, 3, 853));
|
||||
SpawnActor<OSnowman>(FVector(-602, 0, 929));
|
||||
}
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 50, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 100, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 150, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 290, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 350, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 50, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 100, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 150, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 290, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 350, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -198,17 +198,17 @@ void KalimariDesert::BeginPlay() {
|
|||
}
|
||||
}
|
||||
|
||||
ATrain::Spawn(_tender, _numCarriages, 2.5f, 0, waypoint, ATrain::SpawnMode::POINT);
|
||||
SpawnActor<ATrain>(_tender, _numCarriages, 2.5f, 0, waypoint, ATrain::SpawnMode::POINT);
|
||||
}
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 50, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 138, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 280, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 404, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 510, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 50, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 138, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 280, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 404, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 510, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -144,40 +144,40 @@ void KoopaTroopaBeach::BeginPlay() {
|
|||
spawn_palm_trees((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_koopa_troopa_beach_tree_spawn));
|
||||
|
||||
if (gGamestate != CREDITS_SEQUENCE) {
|
||||
OCrab::Spawn(FVector2D(-1809, 625), FVector2D(-1666, 594));
|
||||
OCrab::Spawn(FVector2D(-1852, 757), FVector2D(-1620, 740));
|
||||
OCrab::Spawn(FVector2D(-1478, 1842), FVector2D(-1453, 1833));
|
||||
OCrab::Spawn(FVector2D(-1418, 1967), FVector2D(-1455, 1962));
|
||||
OCrab::Spawn(FVector2D(-1472, 2112), FVector2D(-1417, 2100));
|
||||
OCrab::Spawn(FVector2D(-1389, 2152), FVector2D(-1335, 2136));
|
||||
OCrab::Spawn(FVector2D(218, 693), FVector2D(69, 696));
|
||||
OCrab::Spawn(FVector2D(235, 528), FVector2D(24, 501));
|
||||
OCrab::Spawn(FVector2D(268, 406), FVector2D(101, 394));
|
||||
OCrab::Spawn(FVector2D(223, 318), FVector2D(86, 308));
|
||||
SpawnActor<OCrab>(FVector2D(-1809, 625), FVector2D(-1666, 594));
|
||||
SpawnActor<OCrab>(FVector2D(-1852, 757), FVector2D(-1620, 740));
|
||||
SpawnActor<OCrab>(FVector2D(-1478, 1842), FVector2D(-1453, 1833));
|
||||
SpawnActor<OCrab>(FVector2D(-1418, 1967), FVector2D(-1455, 1962));
|
||||
SpawnActor<OCrab>(FVector2D(-1472, 2112), FVector2D(-1417, 2100));
|
||||
SpawnActor<OCrab>(FVector2D(-1389, 2152), FVector2D(-1335, 2136));
|
||||
SpawnActor<OCrab>(FVector2D(218, 693), FVector2D(69, 696));
|
||||
SpawnActor<OCrab>(FVector2D(235, 528), FVector2D(24, 501));
|
||||
SpawnActor<OCrab>(FVector2D(268, 406), FVector2D(101, 394));
|
||||
SpawnActor<OCrab>(FVector2D(223, 318), FVector2D(86, 308));
|
||||
}
|
||||
|
||||
if (gGamestate == CREDITS_SEQUENCE) {
|
||||
for (size_t i = 0; i < NUM_SEAGULLS; i++) {
|
||||
OSeagull::Spawn(FVector(-360.0f, 60.0f, -1300.0f));
|
||||
SpawnActor<OSeagull>(FVector(-360.0f, 60.0f, -1300.0f));
|
||||
}
|
||||
} else { // Normal gameplay
|
||||
for (size_t i = 0; i < 4; i++) {
|
||||
OSeagull::Spawn(FVector(-985.0f, 15.0f, 1200.0f));
|
||||
SpawnActor<OSeagull>(FVector(-985.0f, 15.0f, 1200.0f));
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < 6; i++) {
|
||||
OSeagull::Spawn(FVector(328.0f, 20.0f, 2541.0f));
|
||||
SpawnActor<OSeagull>(FVector(328.0f, 20.0f, 2541.0f));
|
||||
}
|
||||
}
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 60, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 120, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 200, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 280, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 435, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 60, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 120, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 200, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 280, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 435, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -142,13 +142,13 @@ void LuigiRaceway::BeginPlay() {
|
|||
}
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 50, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 200, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 305, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 440, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 515, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 50, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 200, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 305, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 440, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 515, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -164,21 +164,21 @@ void MarioRaceway::BeginPlay() {
|
|||
spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_mario_raceway_piranha_plant_spawns));
|
||||
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_mario_raceway_item_box_spawns));
|
||||
|
||||
AMarioSign::Spawn(FVector(150.0f, 40.0f, -1300.0f), IRotator(0, 0, 0), FVector(0, 0, 0), FVector(1.0f, 1.0f, 1.0f));
|
||||
AMarioSign::Spawn(FVector(2520.0f, 0.0f, 1240.0f), IRotator(0, 0, 0), FVector(0, 0, 0), FVector(1.0f, 1.0f, 1.0f));
|
||||
SpawnActor<AMarioSign>(FVector(150.0f, 40.0f, -1300.0f), IRotator(0, 0, 0), FVector(0, 0, 0), FVector(1.0f, 1.0f, 1.0f));
|
||||
SpawnActor<AMarioSign>(FVector(2520.0f, 0.0f, 1240.0f), IRotator(0, 0, 0), FVector(0, 0, 0), FVector(1.0f, 1.0f, 1.0f));
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 40, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 100, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 265, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 285, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 420, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 40, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 100, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 265, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 285, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 420, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
|
||||
if (gGamestate != CREDITS_SEQUENCE) {
|
||||
OGrandPrixBalloons::Spawn(FVector(0, 5, -240));
|
||||
SpawnActor<OGrandPrixBalloons>(FVector(0, 5, -240));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -209,19 +209,19 @@ void MooMooFarm::BeginPlay() {
|
|||
break;
|
||||
}
|
||||
|
||||
GetWorld()->AddObject(new OMoleGroup(moleSpawns1, tick1));
|
||||
GetWorld()->AddObject(new OMoleGroup(moleSpawns2, tick2));
|
||||
GetWorld()->AddObject(new OMoleGroup(moleSpawns3, tick3));
|
||||
GetWorld()->AddObject(OMoleGroup(moleSpawns1, tick1));
|
||||
GetWorld()->AddObject(OMoleGroup(moleSpawns2, tick2));
|
||||
GetWorld()->AddObject(OMoleGroup(moleSpawns3, tick3));
|
||||
}
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 50, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 140, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 225, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 316, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 434, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 50, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 140, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 225, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 316, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 434, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -144,18 +144,18 @@ void PodiumCeremony::BeginPlay() {
|
|||
break;
|
||||
}
|
||||
|
||||
OTrophy::Spawn(pos, type, OTrophy::Behaviour::PODIUM_CEREMONY);
|
||||
SpawnActor<OTrophy>(pos, type, OTrophy::Behaviour::PODIUM_CEREMONY);
|
||||
|
||||
OBombKart::Spawn(3, 3, OBombKart::States::PODIUM_CEREMONY, 1.25f);
|
||||
OBombKart::Spawn(3, 40, 0, 1.0f);
|
||||
OBombKart::Spawn(3, 60, 0, 1.0f);
|
||||
OBombKart::Spawn(3, 80, 0, 1.0f);
|
||||
OBombKart::Spawn(3, 100, 0, 1.0f);
|
||||
OBombKart::Spawn(3, 120, 0, 1.0f);
|
||||
OBombKart::Spawn(3, 140, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(3, 3, OBombKart::States::PODIUM_CEREMONY, 1.25f);
|
||||
SpawnActor<OBombKart>(3, 40, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(3, 60, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(3, 80, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(3, 100, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(3, 120, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(3, 140, 0, 1.0f);
|
||||
|
||||
if (gGamestate != CREDITS_SEQUENCE) {
|
||||
OGrandPrixBalloons::Spawn(FVector(-64, 5, -330));
|
||||
SpawnActor<OGrandPrixBalloons>(FVector(-64, 5, -330));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -133,19 +133,19 @@ void RainbowRoad::BeginPlay() {
|
|||
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_rainbow_road_item_box_spawns));
|
||||
|
||||
if (gGamestate != CREDITS_SEQUENCE) {
|
||||
GetWorld()->AddObject(new OChainChomp());
|
||||
GetWorld()->AddObject(new OChainChomp());
|
||||
GetWorld()->AddObject(new OChainChomp());
|
||||
AddObjectToWorld<OChainChomp>({});
|
||||
AddObjectToWorld<OChainChomp>({});
|
||||
AddObjectToWorld<OChainChomp>({});
|
||||
}
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 50, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 100, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 150, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 200, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 250, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 50, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 100, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 150, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 200, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 250, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -130,16 +130,16 @@ void RoyalRaceway::BeginPlay() {
|
|||
spawn_piranha_plants((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_royal_raceway_piranha_plant_spawn));
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 50, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 100, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 296, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 400, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 746, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 50, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 100, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 296, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 400, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 746, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
if (gGamestate != CREDITS_SEQUENCE) {
|
||||
OGrandPrixBalloons::Spawn(FVector(-64, 5, -330));
|
||||
SpawnActor<OGrandPrixBalloons>(FVector(-64, 5, -330));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -143,42 +143,42 @@ void SherbetLand::BeginPlay() {
|
|||
|
||||
// Multiplayer does not spawn the big penguin... It does now!
|
||||
// if (gPlayerCountSelection1 == 1) {
|
||||
OPenguin::Spawn(FVector(-383.0f, 2.0f, -690.0f), 0, 0, 0.0f, OPenguin::PenguinType::EMPEROR, OPenguin::Behaviour::STRUT);
|
||||
SpawnActor<OPenguin>(FVector(-383.0f, 2.0f, -690.0f), 0, 0, 0.0f, OPenguin::PenguinType::EMPEROR, OPenguin::Behaviour::STRUT);
|
||||
// }
|
||||
|
||||
OPenguin::Spawn(FVector(-2960.0f, -80.0f, 1521.0f), 0x150, 0, 100.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
OPenguin::Spawn(FVector(-2960.0f, -80.0f, 1521.0f), 0x150, 0, 100.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
SpawnActor<OPenguin>(FVector(-2960.0f, -80.0f, 1521.0f), 0x150, 0, 100.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
SpawnActor<OPenguin>(FVector(-2960.0f, -80.0f, 1521.0f), 0x150, 0, 100.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
|
||||
OPenguin::Spawn(FVector(-2490.0f, -80.0f, 1612.0f), 0x100, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
OPenguin::Spawn(FVector(-2490.0f, -80.0f, 1612.0f), 0x100, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
SpawnActor<OPenguin>(FVector(-2490.0f, -80.0f, 1612.0f), 0x100, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
SpawnActor<OPenguin>(FVector(-2490.0f, -80.0f, 1612.0f), 0x100, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
|
||||
OPenguin::Spawn(FVector(-2098.0f, -80.0f, 1624.0f), 0xFF00, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
OPenguin::Spawn(FVector(-2098.0f, -80.0f, 1624.0f), 0xFF00, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
SpawnActor<OPenguin>(FVector(-2098.0f, -80.0f, 1624.0f), 0xFF00, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
SpawnActor<OPenguin>(FVector(-2098.0f, -80.0f, 1624.0f), 0xFF00, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
|
||||
OPenguin::Spawn(FVector(-2080.0f, -80.0f, 1171.0f), 0x150, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
OPenguin::Spawn(FVector(-2080.0f, -80.0f, 1171.0f), 0x150, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
SpawnActor<OPenguin>(FVector(-2080.0f, -80.0f, 1171.0f), 0x150, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
SpawnActor<OPenguin>(FVector(-2080.0f, -80.0f, 1171.0f), 0x150, 0, 80.0f, OPenguin::PenguinType::ADULT, OPenguin::Behaviour::CIRCLE);
|
||||
|
||||
if (gGamestate == CREDITS_SEQUENCE) {
|
||||
OPenguin::Spawn(FVector(380.0f, 0.0f, -535.0f), 0x9000, -0x4000, 0.0f, OPenguin::PenguinType::CREDITS, OPenguin::Behaviour::SLIDE3);
|
||||
SpawnActor<OPenguin>(FVector(380.0f, 0.0f, -535.0f), 0x9000, -0x4000, 0.0f, OPenguin::PenguinType::CREDITS, OPenguin::Behaviour::SLIDE3);
|
||||
} else {
|
||||
OPenguin::Spawn(FVector(146.0f, 0.0f, -380.0f), 0x9000, -0x4000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE3);
|
||||
SpawnActor<OPenguin>(FVector(146.0f, 0.0f, -380.0f), 0x9000, -0x4000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE3);
|
||||
}
|
||||
|
||||
OPenguin::Spawn(FVector(380.0f, 0.0f, -766.0f), 0x5000, 0x8000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE4);
|
||||
OPenguin::Spawn(FVector(-2300.0f, 0.0f, -210.0f), 0xC000, 0x8000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6);
|
||||
OPenguin::Spawn(FVector(-2500.0f, 0.0f, -250.0f), 0x4000, 0x8000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6);
|
||||
OPenguin::Spawn(FVector(-535.0f, 0.0f, 875.0f), 0x8000, -0x4000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6);
|
||||
OPenguin::Spawn(FVector(-250.0f, 0.0f, 953.0f), 0x9000, -0x4000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6);
|
||||
SpawnActor<OPenguin>(FVector(380.0f, 0.0f, -766.0f), 0x5000, 0x8000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE4);
|
||||
SpawnActor<OPenguin>(FVector(-2300.0f, 0.0f, -210.0f), 0xC000, 0x8000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6);
|
||||
SpawnActor<OPenguin>(FVector(-2500.0f, 0.0f, -250.0f), 0x4000, 0x8000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6);
|
||||
SpawnActor<OPenguin>(FVector(-535.0f, 0.0f, 875.0f), 0x8000, -0x4000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6);
|
||||
SpawnActor<OPenguin>(FVector(-250.0f, 0.0f, 953.0f), 0x9000, -0x4000, 0.0f, OPenguin::PenguinType::CHICK, OPenguin::Behaviour::SLIDE6);
|
||||
|
||||
if (gGamestate != CREDITS_SEQUENCE) {
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 50, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 100, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 150, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 200, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 250, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 50, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 100, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 150, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 200, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 250, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -127,13 +127,13 @@ void Skyscraper::BeginPlay() {
|
|||
spawn_all_item_boxes((ActorSpawnData*)LOAD_ASSET_RAW(d_course_skyscraper_item_box_spawns));
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 20, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 40, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 60, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 80, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 100, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 120, 0, 1.0f);
|
||||
OBombKart::Spawn(0, 140, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 20, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 40, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 60, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 80, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 100, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 120, 0, 1.0f);
|
||||
SpawnActor<OBombKart>(0, 140, 0, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -200,7 +200,7 @@ void TestTrack::BeginPlay() {
|
|||
// GetWorld()->AddActor(new OSeagull(2, pos));
|
||||
// GetWorld()->AddActor(new OSeagull(3, pos));
|
||||
// GetWorld()->AddObject(new OCheepCheep(FVector(0, 40, 0), OCheepCheep::CheepType::RACE, IPathSpan(0, 10)));
|
||||
OTrophy::Spawn(FVector(0,0,0), OTrophy::TrophyType::GOLD, OTrophy::Behaviour::GO_FISH);
|
||||
SpawnActor<OTrophy>(FVector(0,0,0), OTrophy::TrophyType::GOLD, OTrophy::Behaviour::GO_FISH);
|
||||
//GetWorld()->AddObject(new OSnowman(FVector(0, 0, 0)));
|
||||
//GetWorld()->AddObject(new OTrashBin(FVector(0.0f, 0.0f, 0.0f), IRotator(0, 90, 0), 1.0f, OTrashBin::Behaviour::MUNCHING));
|
||||
|
||||
|
|
@ -212,13 +212,13 @@ void TestTrack::BeginPlay() {
|
|||
// GetWorld()->AddActor(new ABowserStatue(FVector(-200, 0, 0), ABowserStatue::Behaviour::CRUSH));
|
||||
|
||||
// GetWorld()->AddObject(new OBoos(10, IPathSpan(0, 5), IPathSpan(18, 23), IPathSpan(25, 50)));
|
||||
//OThwomp::Spawn(0, 0, 0, 1.0f, 0, 1, 7);
|
||||
//SpawnActor<OThwomp>(0, 0, 0, 1.0f, 0, 1, 7);
|
||||
|
||||
//GetWorld()->AddTrain(ATrain::TenderStatus::HAS_TENDER, 5, 2.5f, 0);
|
||||
//GetWorld()->AddTrain(ATrain::TenderStatus::HAS_TENDER, 5, 2.5f, 8);
|
||||
|
||||
OBombKart::Spawn(0, 25, 4, 0.8333333f);
|
||||
OBombKart::Spawn(0, 45, 4, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 25, 4, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 45, 4, 0.8333333f);
|
||||
|
||||
// GetWorld()->AddActor(new AShip(FVector(0, 0, 0), AShip::Skin::SHIP3));
|
||||
|
||||
|
|
|
|||
|
|
@ -168,32 +168,32 @@ void ToadsTurnpike::BeginPlay() {
|
|||
|
||||
for (size_t i = 0; i < _numTrucks; i++) {
|
||||
pathPoint = CalculateWaypointDistribution(i, _numTrucks, gPathCountByPathIndex[0], 0);
|
||||
ATruck::Spawn(a, b, 0, pathPoint, ATruck::SpawnMode::POINT);
|
||||
SpawnActor<ATruck>(a, b, 0, pathPoint, ATruck::SpawnMode::POINT);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < _numBuses; i++) {
|
||||
pathPoint = CalculateWaypointDistribution(i, _numBuses, gPathCountByPathIndex[0], 75);
|
||||
ABus::Spawn(a, b, 0, pathPoint, ABus::SpawnMode::POINT);
|
||||
SpawnActor<ABus>(a, b, 0, pathPoint, ABus::SpawnMode::POINT);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < _numTankerTrucks; i++) {
|
||||
pathPoint = CalculateWaypointDistribution(i, _numTankerTrucks, gPathCountByPathIndex[0], 50);
|
||||
ATankerTruck::Spawn(a, b, 0, pathPoint, ATankerTruck::SpawnMode::POINT);
|
||||
SpawnActor<ATankerTruck>(a, b, 0, pathPoint, ATankerTruck::SpawnMode::POINT);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < _numCars; i++) {
|
||||
pathPoint = CalculateWaypointDistribution(i, _numCars, gPathCountByPathIndex[0], 25);
|
||||
ACar::Spawn(a, b, 0, pathPoint, ACar::SpawnMode::POINT);
|
||||
SpawnActor<ACar>(a, b, 0, pathPoint, ACar::SpawnMode::POINT);
|
||||
}
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 50, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 100, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 150, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 200, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 250, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 50, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 100, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 150, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 200, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 250, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -328,7 +328,7 @@ void Track::Load() {
|
|||
printf("[Track] Loading... %s\n", ResourceName.c_str());
|
||||
const TrackInfo* info = gTrackRegistry.GetInfo(ResourceName);
|
||||
if (nullptr == info) {
|
||||
printf("Could not find TrackInfo for %s\n", ResourceName);
|
||||
printf("Could not find TrackInfo for %s\n", ResourceName.c_str());
|
||||
return;
|
||||
}
|
||||
const std::string& trackPath = info->Path;
|
||||
|
|
|
|||
|
|
@ -152,18 +152,18 @@ void WarioStadium::Load() {
|
|||
void WarioStadium::BeginPlay() {
|
||||
spawn_all_item_boxes((struct ActorSpawnData*) LOAD_ASSET_RAW(d_course_wario_stadium_item_box_spawns));
|
||||
|
||||
AWarioSign::Spawn(FVector(-131.0f, 83.0f, 286.0f), IRotator(0, 0, 0), FVector(0, 0, 0), FVector(1.0f, 1.0f, 1.0f));
|
||||
AWarioSign::Spawn(FVector(-2353.0f, 72.0f, -1608.0f), IRotator(0, 0, 0), FVector(0, 0, 0), FVector(1.0f, 1.0f, 1.0f));
|
||||
AWarioSign::Spawn(FVector(-2622.0f, 79.0f, 739.0f), IRotator(0, 0, 0), FVector(0, 0, 0), FVector(1.0f, 1.0f, 1.0f));
|
||||
SpawnActor<AWarioSign>(FVector(-131.0f, 83.0f, 286.0f), IRotator(0, 0, 0), FVector(0, 0, 0), FVector(1.0f, 1.0f, 1.0f));
|
||||
SpawnActor<AWarioSign>(FVector(-2353.0f, 72.0f, -1608.0f), IRotator(0, 0, 0), FVector(0, 0, 0), FVector(1.0f, 1.0f, 1.0f));
|
||||
SpawnActor<AWarioSign>(FVector(-2622.0f, 79.0f, 739.0f), IRotator(0, 0, 0), FVector(0, 0, 0), FVector(1.0f, 1.0f, 1.0f));
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
OBombKart::Spawn(0, 50, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 100, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 150, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 200, 1, 0.8333333f);
|
||||
OBombKart::Spawn(0, 250, 3, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
OBombKart::Spawn(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 50, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 100, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 150, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 200, 1, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 250, 3, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(0, 0, 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -135,26 +135,26 @@ void YoshiValley::BeginPlay() {
|
|||
|
||||
if (gGamestate != CREDITS_SEQUENCE) {
|
||||
//! @bug Skip spawning in credits due to animation crash for now
|
||||
OFlagpole::Spawn(FVector(-902, 70, -1406), 0x3800);
|
||||
OFlagpole::Spawn(FVector(-948, 70, -1533), 0x3800);
|
||||
OFlagpole::Spawn(FVector(-2170, 0, 723), 0x400);
|
||||
OFlagpole::Spawn(FVector(-2193, 0, 761), 0x400);
|
||||
SpawnActor<OFlagpole>(FVector(-902, 70, -1406), 0x3800);
|
||||
SpawnActor<OFlagpole>(FVector(-948, 70, -1533), 0x3800);
|
||||
SpawnActor<OFlagpole>(FVector(-2170, 0, 723), 0x400);
|
||||
SpawnActor<OFlagpole>(FVector(-2193, 0, 761), 0x400);
|
||||
|
||||
OHedgehog::Spawn(FVector(-1683, -80, -88), FVector2D(-1650, -114), 9);
|
||||
OHedgehog::Spawn(FVector(-1636, -93, -147), FVector2D(-1661, -151), 9);
|
||||
OHedgehog::Spawn(FVector(-1628, -86, -108), FVector2D(-1666, -58), 9);
|
||||
OHedgehog::Spawn(FVector(-1676, -69, -30), FVector2D(-1651, -26), 9);
|
||||
OHedgehog::Spawn(FVector(-1227, -27, -989), FVector2D(-1194, -999), 26);
|
||||
OHedgehog::Spawn(FVector(-1261, -41, -880), FVector2D(-1213, -864), 26);
|
||||
OHedgehog::Spawn(FVector(-1342, -60, -830), FVector2D(-1249, -927), 26);
|
||||
OHedgehog::Spawn(FVector(-1429, -78, -849), FVector2D(-1347, -866), 26);
|
||||
OHedgehog::Spawn(FVector(-1492, -94, -774), FVector2D(-1427, -891), 26);
|
||||
OHedgehog::Spawn(FVector(-1453, -87, -784), FVector2D(-1509, -809), 26);
|
||||
OHedgehog::Spawn(FVector(-1488, 89, -852), FVector2D(-1464, -822), 26);
|
||||
OHedgehog::Spawn(FVector(-1301, 47, -904), FVector2D(-1537, -854), 26);
|
||||
OHedgehog::Spawn(FVector(-2587, 56, -259), FVector2D(-2624, -241), 28);
|
||||
OHedgehog::Spawn(FVector(-2493, 94, -454), FVector2D(-2505, -397), 28);
|
||||
OHedgehog::Spawn(FVector(-2477, 3, -57), FVector2D(-2539, -66), 28);
|
||||
SpawnActor<OHedgehog>(FVector(-1683, -80, -88), FVector2D(-1650, -114), 9);
|
||||
SpawnActor<OHedgehog>(FVector(-1636, -93, -147), FVector2D(-1661, -151), 9);
|
||||
SpawnActor<OHedgehog>(FVector(-1628, -86, -108), FVector2D(-1666, -58), 9);
|
||||
SpawnActor<OHedgehog>(FVector(-1676, -69, -30), FVector2D(-1651, -26), 9);
|
||||
SpawnActor<OHedgehog>(FVector(-1227, -27, -989), FVector2D(-1194, -999), 26);
|
||||
SpawnActor<OHedgehog>(FVector(-1261, -41, -880), FVector2D(-1213, -864), 26);
|
||||
SpawnActor<OHedgehog>(FVector(-1342, -60, -830), FVector2D(-1249, -927), 26);
|
||||
SpawnActor<OHedgehog>(FVector(-1429, -78, -849), FVector2D(-1347, -866), 26);
|
||||
SpawnActor<OHedgehog>(FVector(-1492, -94, -774), FVector2D(-1427, -891), 26);
|
||||
SpawnActor<OHedgehog>(FVector(-1453, -87, -784), FVector2D(-1509, -809), 26);
|
||||
SpawnActor<OHedgehog>(FVector(-1488, 89, -852), FVector2D(-1464, -822), 26);
|
||||
SpawnActor<OHedgehog>(FVector(-1301, 47, -904), FVector2D(-1537, -854), 26);
|
||||
SpawnActor<OHedgehog>(FVector(-2587, 56, -259), FVector2D(-2624, -241), 28);
|
||||
SpawnActor<OHedgehog>(FVector(-2493, 94, -454), FVector2D(-2505, -397), 28);
|
||||
SpawnActor<OHedgehog>(FVector(-2477, 3, -57), FVector2D(-2539, -66), 28);
|
||||
}
|
||||
|
||||
if (gModeSelection == VERSUS) {
|
||||
|
|
@ -162,13 +162,13 @@ void YoshiValley::BeginPlay() {
|
|||
// the original data has values here.
|
||||
|
||||
// Note that the Y height is calculated automatically to place the kart on the surface
|
||||
OBombKart::Spawn(FVector(-1533, 0, -682), 0, 0.8333333f);
|
||||
OBombKart::Spawn(FVector(-1565, 0, -619), 0, 0.8333333f);
|
||||
OBombKart::Spawn(FVector(-1529, 0, -579), 0, 0.8333333f);
|
||||
OBombKart::Spawn(FVector(-1588, 0, -534), 0, 0.8333333f);
|
||||
OBombKart::Spawn(FVector(-1598, 0, -207), 0, 0.8333333f);
|
||||
OBombKart::Spawn(FVector(-1646, 0, -147), 0, 0.8333333f);
|
||||
OBombKart::Spawn(FVector(-2532, 0, -445), 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(FVector(-1533, 0, -682), 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(FVector(-1565, 0, -619), 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(FVector(-1529, 0, -579), 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(FVector(-1588, 0, -534), 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(FVector(-1598, 0, -207), 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(FVector(-1646, 0, -147), 0, 0.8333333f);
|
||||
SpawnActor<OBombKart>(FVector(-2532, 0, -445), 0, 0.8333333f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
#include <libultraship.h>
|
||||
#include "Actor.h"
|
||||
#include <vector>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/SpawnParams.h"
|
||||
#include "engine/CoreMath.h"
|
||||
#include "engine/World.h"
|
||||
|
|
@ -55,7 +56,7 @@ class ABoat : public AActor {
|
|||
.PathPoint = pathPoint,
|
||||
.Speed = speed,
|
||||
};
|
||||
return static_cast<ABoat*>(GetWorld()->AddActor(new ABoat(params)));
|
||||
return static_cast<ABoat*>(AddActorToWorld<ABoat>(params));
|
||||
}
|
||||
|
||||
ABoat::SpawnMode SpawnType = ABoat::SpawnMode::AUTO;
|
||||
|
|
|
|||
|
|
@ -3,14 +3,10 @@
|
|||
#include <libultraship.h>
|
||||
#include "Actor.h"
|
||||
#include <vector>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/SpawnParams.h"
|
||||
#include "engine/CoreMath.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "sounds.h"
|
||||
}
|
||||
|
||||
|
|
@ -39,7 +35,7 @@ class ABus : public AActor {
|
|||
u32 SoundBits = SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x03);
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline ABus* Spawn(f32 speedA, f32 speedB, uint32_t pathIndex, uint32_t pathPoint, ABus::SpawnMode spawnMode) {
|
||||
static ABus* Spawn(f32 speedA, f32 speedB, uint32_t pathIndex, uint32_t pathPoint, ABus::SpawnMode spawnMode) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:bus",
|
||||
.Type = static_cast<uint16_t>(spawnMode),
|
||||
|
|
@ -48,7 +44,7 @@ class ABus : public AActor {
|
|||
.Speed = speedA,
|
||||
.SpeedB = speedB
|
||||
};
|
||||
return static_cast<ABus*>(GetWorld()->AddActor(new ABus(params)));
|
||||
return dynamic_cast<ABus*>(AddActorToWorld<ABus>(params));
|
||||
}
|
||||
|
||||
explicit ABus(const SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -3,14 +3,10 @@
|
|||
#include <libultraship.h>
|
||||
#include "Actor.h"
|
||||
#include <vector>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/SpawnParams.h"
|
||||
#include "engine/CoreMath.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "sounds.h"
|
||||
}
|
||||
|
||||
|
|
@ -32,7 +28,7 @@ class ACar : public AActor {
|
|||
}
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline ACar* Spawn(f32 speedA, f32 speedB, uint32_t pathIndex, uint32_t pathPoint, ACar::SpawnMode spawnMode) {
|
||||
static ACar* Spawn(f32 speedA, f32 speedB, uint32_t pathIndex, uint32_t pathPoint, ACar::SpawnMode spawnMode) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:car",
|
||||
.Type = static_cast<uint16_t>(spawnMode),
|
||||
|
|
@ -41,7 +37,7 @@ class ACar : public AActor {
|
|||
.Speed = speedA,
|
||||
.SpeedB = speedB
|
||||
};
|
||||
return static_cast<ACar*>(GetWorld()->AddActor(new ACar(params)));
|
||||
return dynamic_cast<ACar*>(AddActorToWorld<ACar>(params));
|
||||
}
|
||||
|
||||
const char* Type;
|
||||
|
|
|
|||
|
|
@ -3,14 +3,10 @@
|
|||
#include <libultraship.h>
|
||||
#include "Actor.h"
|
||||
#include <vector>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/SpawnParams.h"
|
||||
#include "engine/CoreMath.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "sounds.h"
|
||||
}
|
||||
|
||||
|
|
@ -39,7 +35,7 @@ class ATankerTruck : public AActor {
|
|||
u32 SoundBits = SOUND_ARG_LOAD(0x51, 0x01, 0x80, 0x03);
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline ATankerTruck* Spawn(f32 speedA, f32 speedB, uint32_t pathIndex, uint32_t pathPoint, ATankerTruck::SpawnMode spawnMode) {
|
||||
static ATankerTruck* Spawn(f32 speedA, f32 speedB, uint32_t pathIndex, uint32_t pathPoint, ATankerTruck::SpawnMode spawnMode) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:tanker_truck",
|
||||
.Type = static_cast<uint16_t>(spawnMode),
|
||||
|
|
@ -48,7 +44,7 @@ class ATankerTruck : public AActor {
|
|||
.Speed = speedA,
|
||||
.SpeedB = speedB
|
||||
};
|
||||
return static_cast<ATankerTruck*>(GetWorld()->AddActor(new ATankerTruck(params)));
|
||||
return dynamic_cast<ATankerTruck*>(AddActorToWorld<ATankerTruck>(params));
|
||||
}
|
||||
|
||||
explicit ATankerTruck(const SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/SpawnParams.h"
|
||||
#include "engine/CoreMath.h"
|
||||
#include "engine/World.h"
|
||||
|
|
@ -69,7 +70,7 @@ class ATrain : public AActor {
|
|||
.Bool = tender,
|
||||
.Speed = speed, // 120.0f is about the maximum usable value
|
||||
};
|
||||
return static_cast<ATrain*>(GetWorld()->AddActor(new ATrain(params)));
|
||||
return static_cast<ATrain*>(AddActorToWorld<ATrain>(params));
|
||||
}
|
||||
|
||||
virtual void SetSpawnParams(SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -3,14 +3,10 @@
|
|||
#include <libultraship.h>
|
||||
#include "Actor.h"
|
||||
#include <vector>
|
||||
#include "RegisterContent.h"
|
||||
#include "engine/SpawnParams.h"
|
||||
#include "engine/CoreMath.h"
|
||||
#include "engine/World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "main.h"
|
||||
#include "vehicles.h"
|
||||
#include "waypoints.h"
|
||||
#include "sounds.h"
|
||||
}
|
||||
|
||||
|
|
@ -44,7 +40,7 @@ class ATruck : public AActor {
|
|||
uint32_t PathPoint = 0;
|
||||
|
||||
// This is simply a helper function to keep Spawning code clean
|
||||
static inline ATruck* Spawn(f32 speedA, f32 speedB, uint32_t pathIndex, uint32_t pathPoint, ATruck::SpawnMode spawnMode) {
|
||||
static ATruck* Spawn(f32 speedA, f32 speedB, uint32_t pathIndex, uint32_t pathPoint, ATruck::SpawnMode spawnMode) {
|
||||
SpawnParams params = {
|
||||
.Name = "mk:truck",
|
||||
.Type = static_cast<uint16_t>(spawnMode),
|
||||
|
|
@ -53,7 +49,7 @@ class ATruck : public AActor {
|
|||
.Speed = speedA,
|
||||
.SpeedB = speedB
|
||||
};
|
||||
return static_cast<ATruck*>(GetWorld()->AddActor(new ATruck(params)));
|
||||
return dynamic_cast<ATruck*>(AddActorToWorld<ATruck>(params));
|
||||
}
|
||||
|
||||
explicit ATruck(const SpawnParams& params);
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@
|
|||
#include <stubs.h>
|
||||
|
||||
#include "menus.h"
|
||||
#include "TrackBrowser.h"
|
||||
#include "editor/Editor.h"
|
||||
#include "main.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "actors.h"
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include "port/Engine.h"
|
||||
|
||||
#include <fast/Fast3dWindow.h>
|
||||
#include <memory>
|
||||
#include "engine/World.h"
|
||||
#include "engine/AllTracks.h"
|
||||
|
||||
|
|
@ -211,8 +212,8 @@ void CM_VehicleCollision(s32 playerId, Player* player) {
|
|||
|
||||
void CM_BombKartsWaypoint(s32 cameraId) {
|
||||
for (auto& object : GetWorld()->Objects) {
|
||||
if (auto kart = dynamic_cast<OBombKart*>(object)) {
|
||||
if (kart) {
|
||||
if (auto* kart = dynamic_cast<OBombKart*>(object.get())) {
|
||||
if (kart != nullptr) {
|
||||
kart->Waypoint(cameraId);
|
||||
}
|
||||
}
|
||||
|
|
@ -638,9 +639,9 @@ void CM_SpawnStarterLakitu() {
|
|||
}
|
||||
|
||||
for (size_t i = 0; i < gPlayerCountSelection1; i++) {
|
||||
OLakitu* lakitu = new OLakitu(i, OLakitu::LakituType::STARTER);
|
||||
GetWorld()->Lakitus[i] = lakitu;
|
||||
GetWorld()->AddObject(lakitu);
|
||||
auto lakitu = std::make_unique<OLakitu>(i, OLakitu::LakituType::STARTER);
|
||||
GetWorld()->Lakitus[i] = lakitu.get();
|
||||
GetWorld()->AddObject(std::move(lakitu));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -692,7 +693,7 @@ void* GetTrack(void) {
|
|||
|
||||
struct Actor* CM_GetActor(size_t index) {
|
||||
if (index < GetWorld()->Actors.size()) {
|
||||
AActor* actor = GetWorld()->Actors[index];
|
||||
AActor* actor = GetWorld()->Actors[index].get();
|
||||
return reinterpret_cast<struct Actor*>(reinterpret_cast<char*>(actor) + sizeof(void*));
|
||||
} else {
|
||||
// throw std::runtime_error("GetActor() index out of bounds");
|
||||
|
|
@ -704,9 +705,12 @@ size_t CM_FindActorIndex(Actor* actor) {
|
|||
// Move the ptr back to look at the vtable.
|
||||
// This gets us the proper C++ class instead of just the variables used in C.
|
||||
AActor* a = reinterpret_cast<AActor*>(reinterpret_cast<char*>(actor) - sizeof(void*));
|
||||
auto actors = GetWorld()->Actors;
|
||||
auto& actors = GetWorld()->Actors;
|
||||
|
||||
auto it = std::find_if(actors.begin(), actors.end(), [a](const std::unique_ptr<AActor>& ptr) {
|
||||
return ptr.get() == a;
|
||||
});
|
||||
|
||||
auto it = std::find(actors.begin(), actors.end(), static_cast<AActor*>(a));
|
||||
if (it != actors.end()) {
|
||||
return std::distance(actors.begin(), it);
|
||||
}
|
||||
|
|
@ -715,7 +719,7 @@ size_t CM_FindActorIndex(Actor* actor) {
|
|||
}
|
||||
|
||||
void CM_DeleteActor(size_t index) {
|
||||
std::vector<AActor*> actors = GetWorld()->Actors;
|
||||
auto& actors = GetWorld()->Actors;
|
||||
if (index < actors.size()) {
|
||||
actors.erase(actors.begin() + index);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,6 +11,11 @@
|
|||
class Track;
|
||||
struct Properties;
|
||||
class World;
|
||||
|
||||
template<class T, typename... TArgs> T* SpawnActor(TArgs&&... args) {
|
||||
return T::Spawn(std::forward<TArgs>(args)...);
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "camera.h"
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ namespace Editor {
|
|||
std::string label = fmt::format("{}##{}", name, id);
|
||||
|
||||
if (ImGui::Button(label.c_str())) {
|
||||
gEditor.SelectObjectFromSceneExplorer(actor);
|
||||
gEditor.SelectObjectFromSceneExplorer(actor.get());
|
||||
}
|
||||
|
||||
id += 1;
|
||||
|
|
@ -63,7 +63,7 @@ namespace Editor {
|
|||
std::string label = fmt::format("{}##{}", name, id);
|
||||
|
||||
if (ImGui::Button(label.c_str())) {
|
||||
gEditor.SelectObjectFromSceneExplorer(object);
|
||||
gEditor.SelectObjectFromSceneExplorer(object.get());
|
||||
}
|
||||
id += 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#include <common_structs.h>
|
||||
#include <defines.h>
|
||||
#include <sounds.h>
|
||||
#include "TrackBrowser.h"
|
||||
#include "camera.h"
|
||||
#include "waypoints.h"
|
||||
#include "replays.h"
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include "spawn_players.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "editor/Editor.h"
|
||||
#include "kart_attributes.h"
|
||||
#include "memory.h"
|
||||
#include "waypoints.h"
|
||||
|
|
|
|||
Loading…
Reference in New Issue