diff --git a/src/engine/World.cpp b/src/engine/World.cpp index 478b22d0f..e684b6b92 100644 --- a/src/engine/World.cpp +++ b/src/engine/World.cpp @@ -128,11 +128,11 @@ struct Actor* World::AddBaseActor() { return reinterpret_cast(reinterpret_cast(Actors.back()) + sizeof(void*)); } -void World::AddEditorObject(Actor* actor) { +void World::AddEditorObject(Actor* actor, const char* name) { if (actor->model != NULL) { - gEditor.AddObject((FVector*) &actor->pos, (Gfx*)LOAD_ASSET_RAW(actor->model), 1.0f, CollisionType::VTX_INTERSECT, 0.0f, (int32_t*)&actor->type, 0); + gEditor.AddObject(name, (FVector*) &actor->pos, (Gfx*)LOAD_ASSET_RAW(actor->model), 1.0f, CollisionType::VTX_INTERSECT, 0.0f, (int32_t*)&actor->type, 0); } else { - gEditor.AddObject((FVector*) &actor->pos, NULL, 1.0f, CollisionType::VTX_INTERSECT, 0.0f, (int32_t*)&actor->type, 0); + gEditor.AddObject(name, (FVector*) &actor->pos, NULL, 1.0f, CollisionType::VTX_INTERSECT, 0.0f, (int32_t*)&actor->type, 0); } } @@ -175,9 +175,9 @@ OObject* World::AddObject(OObject* object) { Object* cObj = &gObjectList[object->_objectIndex]; if (cObj->model != NULL) { - gEditor.AddObject((FVector*) &cObj->origin_pos[0], (Gfx*)LOAD_ASSET_RAW(cObj->model), 1.0f, CollisionType::VTX_INTERSECT, 0.0f, &object->_objectIndex, -1); + gEditor.AddObject("", (FVector*) &cObj->origin_pos[0], (Gfx*)LOAD_ASSET_RAW(cObj->model), 1.0f, CollisionType::VTX_INTERSECT, 0.0f, &object->_objectIndex, -1); } else { - gEditor.AddObject((FVector*) &cObj->origin_pos[0], NULL, 1.0f, CollisionType::VTX_INTERSECT, 0.0f, &object->_objectIndex, -1); + gEditor.AddObject("", (FVector*) &cObj->origin_pos[0], NULL, 1.0f, CollisionType::VTX_INTERSECT, 0.0f, &object->_objectIndex, -1); } } diff --git a/src/engine/World.h b/src/engine/World.h index b5c4efceb..7589c7d52 100644 --- a/src/engine/World.h +++ b/src/engine/World.h @@ -49,7 +49,7 @@ public: AActor* AddActor(AActor* actor); struct Actor* AddBaseActor(); - void AddEditorObject(Actor* actor); + void AddEditorObject(Actor* actor, const char* name); AActor* GetActor(size_t index); void TickActors(); diff --git a/src/engine/editor/Editor.cpp b/src/engine/editor/Editor.cpp index 1de6eaf2d..2feb0ccf6 100644 --- a/src/engine/editor/Editor.cpp +++ b/src/engine/editor/Editor.cpp @@ -91,12 +91,12 @@ void Editor::Draw() { eObjectPicker.Draw(); } -void Editor::AddObject(FVector* pos, Gfx* model, float scale, CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue) { +void Editor::AddObject(const char* name, FVector* pos, Gfx* model, float scale, CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue) { if (model != NULL) { - eGameObjects.push_back({pos, model, {}, collision, boundingBoxSize, despawnFlag, despawnValue}); + eGameObjects.push_back({name, pos, model, {}, collision, boundingBoxSize, despawnFlag, despawnValue}); GenerateCollisionMesh(eGameObjects.back(), model, scale); } else { // to bounding box or sphere collision - eGameObjects.push_back({pos, model, {}, CollisionType::BOUNDING_BOX, 22.0f, despawnFlag, despawnValue}); + eGameObjects.push_back({name, pos, model, {}, CollisionType::BOUNDING_BOX, 22.0f, despawnFlag, despawnValue}); } } @@ -107,5 +107,5 @@ void Editor::ClearObjects() { void Editor::SelectObjectFromSceneExplorer(GameObject* object) { eObjectPicker._selected = object; eObjectPicker.eGizmo.Enabled = true; - eObjectPicker.eGizmo.EnableNoCursor(object); + eObjectPicker.eGizmo.SetGizmoNoCursor(object); } diff --git a/src/engine/editor/Editor.h b/src/engine/editor/Editor.h index 5d0e803f1..04963180d 100644 --- a/src/engine/editor/Editor.h +++ b/src/engine/editor/Editor.h @@ -19,7 +19,7 @@ public: void Draw(); void MouseClick(); void Load(); - void AddObject(FVector* pos, Gfx* model, float scale, CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue); + void AddObject(const char* name, FVector* pos, Gfx* model, float scale, CollisionType collision, float boundingBoxSize, int32_t* despawnFlag, int32_t despawnValue); void ClearObjects(); void RemoveObject(); void SelectObjectFromSceneExplorer(GameObject* object); diff --git a/src/engine/editor/EditorMath.h b/src/engine/editor/EditorMath.h index 2a9890191..9d904e413 100644 --- a/src/engine/editor/EditorMath.h +++ b/src/engine/editor/EditorMath.h @@ -23,6 +23,7 @@ struct Triangle { }; struct GameObject { + const char* Name; FVector* Pos; Gfx* Model; std::vector Triangles; diff --git a/src/engine/editor/Gizmo.cpp b/src/engine/editor/Gizmo.cpp index a366fd7e8..5840b9896 100644 --- a/src/engine/editor/Gizmo.cpp +++ b/src/engine/editor/Gizmo.cpp @@ -49,7 +49,7 @@ void Gizmo::Tick() { } // Makes the gizmo visible -void Gizmo::Enable(GameObject* object, Ray ray) { +void Gizmo::SetGizmo(GameObject* object, Ray ray) { _selected = object; _ray = ray.Direction; Pos = FVector( @@ -59,7 +59,7 @@ void Gizmo::Enable(GameObject* object, Ray ray) { ); } -void Gizmo::EnableNoCursor(GameObject* object) { +void Gizmo::SetGizmoNoCursor(GameObject* object) { _selected = object; Pos = FVector( object->Pos->x, diff --git a/src/engine/editor/Gizmo.h b/src/engine/editor/Gizmo.h index e3f4d335b..0b7e545ca 100644 --- a/src/engine/editor/Gizmo.h +++ b/src/engine/editor/Gizmo.h @@ -22,8 +22,8 @@ public: void Draw(); void Load(); - void Enable(GameObject* object, Ray ray); - void EnableNoCursor(GameObject* object); // Used for scene explorer selection + void SetGizmo(GameObject* object, Ray ray); + void SetGizmoNoCursor(GameObject* object); // Used for scene explorer selection void Translate(); void DrawHandles(); f32 SnapToSurface(FVector* pos); diff --git a/src/engine/editor/ObjectPicker.cpp b/src/engine/editor/ObjectPicker.cpp index f0cb3e1a4..af8207ab3 100644 --- a/src/engine/editor/ObjectPicker.cpp +++ b/src/engine/editor/ObjectPicker.cpp @@ -49,7 +49,7 @@ void ObjectPicker::SelectObject(std::vector& objects) { ObjectPicker::FindObject(ray, objects); if (_selected != nullptr) { - eGizmo.Enable(_selected, ray); + eGizmo.SetGizmo(_selected, ray); eGizmo.Enabled = true; } else { //eGizmo.Disable(); diff --git a/src/port/Game.cpp b/src/port/Game.cpp index 0de9c610b..895f97cc5 100644 --- a/src/port/Game.cpp +++ b/src/port/Game.cpp @@ -673,8 +673,8 @@ struct Actor* CM_AddBaseActor() { return (struct Actor*) gWorldInstance.AddBaseActor(); } -void CM_AddEditorObject(struct Actor* actor) { - gWorldInstance.AddEditorObject(actor); +void CM_AddEditorObject(struct Actor* actor, const char* name) { + gWorldInstance.AddEditorObject(actor, name); } size_t CM_GetActorSize() { diff --git a/src/port/Game.h b/src/port/Game.h index 9ec041d93..cb65db105 100644 --- a/src/port/Game.h +++ b/src/port/Game.h @@ -140,7 +140,7 @@ void SetCourseByClass(void* course); struct Actor* CM_GetActor(size_t index); void CM_DeleteActor(size_t index); struct Actor* CM_AddBaseActor(); -void CM_AddEditorObject(struct Actor* actor); +void CM_AddEditorObject(struct Actor* actor, const char* name); size_t CM_GetActorSize(); size_t CM_FindActorIndex(struct Actor* actor); void CM_ActorCollision(Player* player, struct Actor* actor); diff --git a/src/port/ui/SceneExplorer.cpp b/src/port/ui/SceneExplorer.cpp index d927a0840..572b4ae8d 100644 --- a/src/port/ui/SceneExplorer.cpp +++ b/src/port/ui/SceneExplorer.cpp @@ -26,7 +26,7 @@ namespace EditorNamespace { int id = 0; // id for now because we don't have unique names atm for (auto& object : gEditor.eGameObjects) { std::string label = fmt::format("Object {}", id++); - if (ImGui::Button(label.c_str())) { + if (ImGui::Button(object.Name)) { gEditor.SelectObjectFromSceneExplorer(&object); } } diff --git a/src/racing/actors.c b/src/racing/actors.c index e3d929892..5d1c0b269 100644 --- a/src/racing/actors.c +++ b/src/racing/actors.c @@ -1415,7 +1415,7 @@ s16 add_actor_to_empty_slot(Vec3f pos, Vec3s rot, Vec3f velocity, s16 actorType) gNumActors++; struct Actor* actor = CM_AddBaseActor(); actor_init(actor, pos, rot, velocity, actorType); - CM_AddEditorObject(actor); + CM_AddEditorObject(actor, get_actor_name(actor->type)); return (s16) CM_GetActorSize() - 1; // Return current index; } @@ -2651,3 +2651,78 @@ void update_course_actors(void) { evaluate_collision_for_destructible_actors(); check_player_use_item(); } + +const char* get_actor_name(s32 id) { + switch(id) { + case ACTOR_FALLING_ROCK: + return "Falling Rock"; + case ACTOR_GREEN_SHELL: + return "Green Shell"; + case ACTOR_RED_SHELL: + return "Red Shell"; + case ACTOR_BLUE_SPINY_SHELL: + return "Blue Spiny Shell"; + case ACTOR_KIWANO_FRUIT: + return "Kiwano Fruit"; + case ACTOR_BANANA: + return "Banana"; + case ACTOR_PADDLE_BOAT: + return "Paddle Boat"; + case ACTOR_TRAIN_ENGINE: + return "Train Engine"; + case ACTOR_TRAIN_TENDER: + return "Train Tender"; + case ACTOR_TRAIN_PASSENGER_CAR: + return "Train Passenger Car"; + case ACTOR_ITEM_BOX: + return "Item Box"; + case ACTOR_HOT_AIR_BALLOON_ITEM_BOX: + return "Hot Air Balloon Item Box"; + case ACTOR_FAKE_ITEM_BOX: + return "Fake Item Box"; + case ACTOR_PIRANHA_PLANT: + return "Piranha Plant"; + case ACTOR_BANANA_BUNCH: + return "Banana Bunch"; + case ACTOR_TRIPLE_GREEN_SHELL: + return "Triple Green Shell"; + case ACTOR_TRIPLE_RED_SHELL: + return "Triple Red Shell"; + case ACTOR_MARIO_SIGN: + return "Mario Sign"; + case ACTOR_WARIO_SIGN: + return "Wario Sign"; + case ACTOR_RAILROAD_CROSSING: + return "Railroad Crossing"; + case ACTOR_TREE_MARIO_RACEWAY: + return "Tree (Mario Raceway)"; + case ACTOR_TREE_YOSHI_VALLEY: + return "Tree (Yoshi Valley)"; + case ACTOR_TREE_ROYAL_RACEWAY: + return "Tree (Royal Raceway)"; + case ACTOR_TREE_MOO_MOO_FARM: + return "Tree (Moo Moo Farm)"; + case ACTOR_PALM_TREE: + return "Palm Tree"; + case ACTOR_UNKNOWN_0x1A: + return "Unknown Plant (0x1A)"; + case ACTOR_UNKNOWN_0x1B: + return "Unknown (0x1B)"; + case ACTOR_TREE_BOWSERS_CASTLE: + return "Tree (Bowser's Castle)"; + case ACTOR_TREE_FRAPPE_SNOWLAND: + return "Tree (Frappe Snowland)"; + case ACTOR_CACTUS1_KALAMARI_DESERT: + return "Cactus 1 (Kalamari Desert)"; + case ACTOR_CACTUS2_KALAMARI_DESERT: + return "Cactus 2 (Kalamari Desert)"; + case ACTOR_CACTUS3_KALAMARI_DESERT: + return "Cactus 3 (Kalamari Desert)"; + case ACTOR_BUSH_BOWSERS_CASTLE: + return "Bush (Bowser's Castle)"; + case ACTOR_YOSHI_EGG: + return "Yoshi Egg"; + default: + return "Obj"; + } +} diff --git a/src/racing/actors.h b/src/racing/actors.h index fe32326af..4f71c9b97 100644 --- a/src/racing/actors.h +++ b/src/racing/actors.h @@ -111,6 +111,7 @@ void render_actor_palm_tree(Camera*, Mat4, struct PalmTree*); void render_item_boxes(struct UnkStruct_800DC5EC*); void render_course_actors(struct UnkStruct_800DC5EC*); void update_course_actors(void); +const char* get_actor_name(s32); // audio/external.c extern void func_800C98B8(Vec3f, Vec3f, u32);