mirror of
https://github.com/HarbourMasters/SpaghettiKart
synced 2026-07-10 07:07:17 -04:00
actor init
This commit is contained in:
@@ -52,67 +52,5 @@ void render_actor_falling_rock(Camera* camera, struct FallingRock* rock) {
|
||||
if (render_set_position(sp4C, 0) == 0) {
|
||||
return;
|
||||
}
|
||||
// gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_dl_falling_rock);
|
||||
//! @todo: Placeholder DLs weird vtx issues
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_LIGHTING);
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_2CYCLE);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_SHADING_SMOOTH);
|
||||
gSPSetGeometryMode(gDisplayListHead++, G_FOG);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_MODULATEI, G_CC_PASS2);
|
||||
gDPSetRenderMode(gDisplayListHead++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPTileSync(gDisplayListHead++);
|
||||
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0,
|
||||
G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, 5, G_TX_NOLOD);
|
||||
gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C);
|
||||
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, d_course_choco_mountain_wall_texture);
|
||||
gDPTileSync(gDisplayListHead++);
|
||||
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
|
||||
gDPLoadSync(gDisplayListHead++);
|
||||
gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256);
|
||||
gSPVertex(gDisplayListHead++, d_course_choco_mountain_falling_rock_model, 15, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 3, 4, 5, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 6, 7, 8, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 9, 10, 11, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 12, 13, 14, 0);
|
||||
gSPVertex(gDisplayListHead++, d_course_choco_mountain_6006C28, 5, 0);
|
||||
gSPVertex(gDisplayListHead++, d_course_choco_mountain_6006D08, 10, 5);
|
||||
gSP1Triangle(gDisplayListHead++, 0, 5, 6, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 1, 7, 8, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 2, 9, 10, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 3, 11, 12, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 4, 13, 14, 0);
|
||||
gSPVertex(gDisplayListHead++, d_course_choco_mountain_6006C78, 5, 0);
|
||||
gSPVertex(gDisplayListHead++, d_course_choco_mountain_6006DA8, 10, 5);
|
||||
gSP1Triangle(gDisplayListHead++, 0, 5, 6, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 1, 7, 8, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 2, 9, 10, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 3, 11, 12, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 4, 13, 14, 0);
|
||||
gSPVertex(gDisplayListHead++, d_course_choco_mountain_6006CC8, 4, 0);
|
||||
gSPVertex(gDisplayListHead++, d_course_choco_mountain_6006E48, 8, 4);
|
||||
gSP1Triangle(gDisplayListHead++, 0, 4, 5, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 1, 6, 7, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 2, 8, 9, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 3, 10, 11, 0);
|
||||
gDPTileSync(gDisplayListHead++);
|
||||
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0x0000, G_TX_RENDERTILE, 0, G_TX_MIRROR | G_TX_WRAP,
|
||||
5, G_TX_NOLOD, G_TX_MIRROR | G_TX_WRAP, 5, G_TX_NOLOD);
|
||||
gDPSetTileSize(gDisplayListHead++, G_TX_RENDERTILE, 0, 0, 0x007C, 0x007C);
|
||||
gDPSetTextureImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, d_course_choco_mountain_rock_texture);
|
||||
gDPTileSync(gDisplayListHead++);
|
||||
gDPSetTile(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0x0000, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP,
|
||||
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD);
|
||||
gDPLoadSync(gDisplayListHead++);
|
||||
gDPLoadBlock(gDisplayListHead++, G_TX_LOADTILE, 0, 0, 1023, 256);
|
||||
gSPVertex(gDisplayListHead++, d_course_choco_mountain_6006EC8, 3, 0);
|
||||
gSP1Triangle(gDisplayListHead++, 0, 1, 2, 0);
|
||||
gSPClearGeometryMode(gDisplayListHead++, G_FOG | G_LIGHTING);
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_1CYCLE);
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 1, 1, G_OFF);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gSPDisplayList(gDisplayListHead++, d_course_choco_mountain_dl_falling_rock);
|
||||
}
|
||||
|
||||
+9
-11
@@ -121,25 +121,23 @@ AActor* World::AddActor(AActor* actor) {
|
||||
return Actors.back();
|
||||
}
|
||||
|
||||
struct Actor* World::AddBaseActor(s16 actorType) {
|
||||
struct Actor* World::AddBaseActor() {
|
||||
Actors.push_back(new AActor());
|
||||
|
||||
AActor* actor = Actors.back();
|
||||
|
||||
switch(actorType) {
|
||||
case ACTOR_ITEM_BOX:
|
||||
actor->Model = (Gfx*)LOAD_ASSET_RAW(D_0D003090);
|
||||
break;
|
||||
case ACTOR_PIRANHA_PLANT:
|
||||
actor->Model = (Gfx*)LOAD_ASSET_RAW(d_course_mario_raceway_dl_piranha_plant);
|
||||
break;
|
||||
}
|
||||
|
||||
gEditor.AddObject((FVector*) &actor->Pos, actor->Model, 1.0f, CollisionType::VTX_INTERSECT, 0.0f);
|
||||
// Skip C++ vtable to access variables in C
|
||||
return reinterpret_cast<struct Actor*>(reinterpret_cast<char*>(Actors.back()) + sizeof(void*));
|
||||
}
|
||||
|
||||
void World::AddEditorObject(Actor* actor) {
|
||||
if (actor->model != NULL) {
|
||||
gEditor.AddObject((FVector*) &actor->pos, (Gfx*)LOAD_ASSET_RAW(actor->model), 1.0f, CollisionType::VTX_INTERSECT, 0.0f);
|
||||
} else {
|
||||
gEditor.AddObject((FVector*) &actor->pos, NULL, 1.0f, CollisionType::VTX_INTERSECT, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a C struct Actor* to its C++ AActor class
|
||||
*/
|
||||
|
||||
+2
-1
@@ -48,7 +48,8 @@ public:
|
||||
void AddCourse(Course* course);
|
||||
|
||||
AActor* AddActor(AActor* actor);
|
||||
struct Actor* AddBaseActor(s16 actorType);
|
||||
struct Actor* AddBaseActor();
|
||||
void AddEditorObject(Actor* actor);
|
||||
AActor* GetActor(size_t index);
|
||||
|
||||
void TickActors();
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
|
||||
#include <libultraship.h>
|
||||
#include "framebuffer_effects.h"
|
||||
#include "mk64.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "port/Engine.h"
|
||||
#include "math_util.h"
|
||||
#include <stdio.h>
|
||||
|
||||
int gfx_create_framebuffer(uint32_t width, uint32_t height, uint32_t native_width, uint32_t native_height,
|
||||
uint8_t resize);
|
||||
|
||||
|
||||
s32 gColourIdFramebuffer = -1;
|
||||
|
||||
void CreateColourIdFramebuffer(void) {
|
||||
if (gColourIdFramebuffer == -1) {
|
||||
gColourIdFramebuffer = gfx_create_framebuffer(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT, true);
|
||||
}
|
||||
}
|
||||
|
||||
void DrawAsColour() {
|
||||
|
||||
|
||||
}
|
||||
@@ -90,6 +90,6 @@ void Editor::AddObject(FVector* pos, Gfx* model, float scale, CollisionType coll
|
||||
eGameObjects.push_back({pos, model, {}, collision, boundingBoxSize});
|
||||
GenerateCollisionMesh(eGameObjects.back(), model, scale);
|
||||
} else { // to bounding box or sphere collision
|
||||
eGameObjects.push_back({pos, model, {}, CollisionType::BOUNDING_BOX, 2.0f});
|
||||
eGameObjects.push_back({pos, model, {}, CollisionType::BOUNDING_BOX, 22.0f});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,10 @@ void Gizmo::Load() {
|
||||
}
|
||||
|
||||
void Gizmo::Tick() {
|
||||
if (!Enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
switch(SelectedHandle) {
|
||||
case GizmoHandle::X_Axis:
|
||||
Gizmo::Translate();
|
||||
|
||||
@@ -52,7 +52,7 @@ public:
|
||||
{-5, 0, 0} // Z-Axis (Blue)
|
||||
};
|
||||
FVector _ray;
|
||||
GameObject* _selected;
|
||||
GameObject* _selected = nullptr;
|
||||
private:
|
||||
bool _draw = false;
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ void ObjectPicker::SelectObject(std::vector<GameObject>& objects) {
|
||||
} else {
|
||||
//eGizmo.Disable();
|
||||
eGizmo.Enabled = false;
|
||||
eGizmo._selected = NULL;
|
||||
eGizmo._selected = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ void ObjectPicker::DragHandle() {
|
||||
}
|
||||
|
||||
void ObjectPicker::Draw() {
|
||||
if (_selected != nullptr) {
|
||||
if (_selected != NULL) {
|
||||
eGizmo.Draw();
|
||||
}
|
||||
}
|
||||
|
||||
+6
-2
@@ -669,8 +669,12 @@ void CM_CleanWorld(void) {
|
||||
gWorldInstance.Reset();
|
||||
}
|
||||
|
||||
struct Actor* CM_AddBaseActor(s16 actorType) {
|
||||
return (struct Actor*) gWorldInstance.AddBaseActor(actorType);
|
||||
struct Actor* CM_AddBaseActor() {
|
||||
return (struct Actor*) gWorldInstance.AddBaseActor();
|
||||
}
|
||||
|
||||
void CM_AddEditorObject(struct Actor* actor) {
|
||||
gWorldInstance.AddEditorObject(actor);
|
||||
}
|
||||
|
||||
size_t CM_GetActorSize() {
|
||||
|
||||
+2
-1
@@ -139,7 +139,8 @@ void SetCourseByClass(void* course);
|
||||
|
||||
struct Actor* CM_GetActor(size_t index);
|
||||
void CM_DeleteActor(size_t index);
|
||||
struct Actor* CM_AddBaseActor(s16 actorType);
|
||||
struct Actor* CM_AddBaseActor();
|
||||
void CM_AddEditorObject(struct Actor* actor);
|
||||
size_t CM_GetActorSize();
|
||||
size_t CM_FindActorIndex(struct Actor* actor);
|
||||
void CM_ActorCollision(Player* player, struct Actor* actor);
|
||||
|
||||
+15
-1
@@ -135,6 +135,7 @@ void actor_init(struct Actor* actor, Vec3f startingPos, Vec3s startingRot, Vec3f
|
||||
actor->state = 0;
|
||||
actor->unk_08 = 0.0f;
|
||||
actor->boundingBoxSize = 0.0f;
|
||||
actor->model = NULL;
|
||||
func_802AAAAC(&actor->unk30);
|
||||
switch (actorType) {
|
||||
case ACTOR_BOX_TRUCK:
|
||||
@@ -151,6 +152,7 @@ void actor_init(struct Actor* actor, Vec3f startingPos, Vec3s startingRot, Vec3f
|
||||
actor->velocity[0] = actor->pos[0];
|
||||
actor->velocity[1] = actor->pos[1];
|
||||
actor->velocity[2] = actor->pos[2] + 70.0f;
|
||||
actor->model = d_course_yoshi_valley_dl_egg_lod0;
|
||||
break;
|
||||
case ACTOR_KIWANO_FRUIT:
|
||||
actor->state = 0;
|
||||
@@ -158,10 +160,12 @@ void actor_init(struct Actor* actor, Vec3f startingPos, Vec3s startingRot, Vec3f
|
||||
actor->rot[1] = 0;
|
||||
actor->rot[2] = 0;
|
||||
actor->boundingBoxSize = 2.0f;
|
||||
actor->model = d_course_dks_jungle_parkway_dl_kiwano_fruit;
|
||||
break;
|
||||
case ACTOR_FALLING_ROCK:
|
||||
actor->flags |= 0x4000;
|
||||
actor->boundingBoxSize = 10.0f;
|
||||
actor->model = d_course_choco_mountain_dl_falling_rock;
|
||||
break;
|
||||
case ACTOR_TRAIN_ENGINE:
|
||||
actor->unk_08 = 10.0f;
|
||||
@@ -169,6 +173,7 @@ void actor_init(struct Actor* actor, Vec3f startingPos, Vec3s startingRot, Vec3f
|
||||
case ACTOR_BANANA:
|
||||
actor->flags = actor->flags | 0x4000 | 0x1000;
|
||||
actor->boundingBoxSize = 2.0f;
|
||||
actor->model = common_model_flat_banana;
|
||||
break;
|
||||
case ACTOR_GREEN_SHELL:
|
||||
gNumSpawnedShells += 1;
|
||||
@@ -194,27 +199,32 @@ void actor_init(struct Actor* actor, Vec3f startingPos, Vec3s startingRot, Vec3f
|
||||
actor->state = 0x0043;
|
||||
actor->boundingBoxSize = 3.0f;
|
||||
actor->unk_08 = 20.0f;
|
||||
actor->model = d_course_mario_raceway_dl_tree;
|
||||
break;
|
||||
case ACTOR_MARIO_SIGN:
|
||||
actor->flags |= 0x4000;
|
||||
actor->model = d_course_mario_raceway_dl_sign;
|
||||
break;
|
||||
case ACTOR_TREE_YOSHI_VALLEY:
|
||||
actor->flags |= 0x4000;
|
||||
actor->state = 0x0043;
|
||||
actor->boundingBoxSize = 3.0f;
|
||||
actor->unk_08 = 23.0f;
|
||||
actor->model = d_course_yoshi_valley_dl_tree;
|
||||
break;
|
||||
case ACTOR_TREE_ROYAL_RACEWAY:
|
||||
actor->flags |= 0x4000;
|
||||
actor->state = 0x0043;
|
||||
actor->boundingBoxSize = 3.0f;
|
||||
actor->unk_08 = 17.0f;
|
||||
actor->model = d_course_royal_raceway_dl_tree;
|
||||
break;
|
||||
case ACTOR_TREE_MOO_MOO_FARM:
|
||||
actor->state = 0x0043;
|
||||
actor->flags = -0x8000;
|
||||
actor->boundingBoxSize = 3.0f;
|
||||
actor->unk_08 = 17.0f;
|
||||
actor->model = d_course_moo_moo_farm_dl_tree;
|
||||
break;
|
||||
case 26:
|
||||
actor->flags |= 0x4000;
|
||||
@@ -275,17 +285,20 @@ void actor_init(struct Actor* actor, Vec3f startingPos, Vec3s startingRot, Vec3f
|
||||
actor->unk_04 = 0;
|
||||
actor->state = 5;
|
||||
actor->boundingBoxSize = 5.5f;
|
||||
actor->model = D_0D003090;
|
||||
break;
|
||||
case ACTOR_ITEM_BOX:
|
||||
actor->flags |= 0x4000;
|
||||
actor->unk_04 = 0;
|
||||
actor->state = 0;
|
||||
actor->boundingBoxSize = 5.5f;
|
||||
actor->model = D_0D003090;
|
||||
break;
|
||||
case ACTOR_PIRANHA_PLANT:
|
||||
actor->flags |= 0x4000;
|
||||
actor->state = 0x001E;
|
||||
actor->boundingBoxSize = 5.0f;
|
||||
actor->model = d_course_mario_raceway_dl_piranha_plant;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -1400,8 +1413,9 @@ s16 add_actor_to_empty_slot(Vec3f pos, Vec3s rot, Vec3f velocity, s16 actorType)
|
||||
//}
|
||||
}
|
||||
gNumActors++;
|
||||
struct Actor* actor = CM_AddBaseActor(actorType);
|
||||
struct Actor* actor = CM_AddBaseActor();
|
||||
actor_init(actor, pos, rot, velocity, actorType);
|
||||
CM_AddEditorObject(actor);
|
||||
return (s16) CM_GetActorSize() - 1; // Return current index;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user