mirror of
https://github.com/HarbourMasters/SpaghettiKart
synced 2026-07-11 07:25:50 -04:00
Impl objects for editor
This commit is contained in:
@@ -174,6 +174,18 @@ void World::TickActors() {
|
||||
|
||||
OObject* World::AddObject(OObject* object) {
|
||||
Objects.push_back(object);
|
||||
|
||||
if (object->_objectIndex != -1) {
|
||||
Object* cObj = &gObjectList[object->_objectIndex];
|
||||
printf("model 0x%llX\n", cObj->model);
|
||||
|
||||
if (cObj->model != NULL) {
|
||||
gEditor.AddObject((FVector*) &cObj->origin_pos[0], (Gfx*)LOAD_ASSET_RAW(cObj->model), 1.0f, CollisionType::VTX_INTERSECT, 0.0f);
|
||||
} else {
|
||||
gEditor.AddObject((FVector*) &cObj->origin_pos[0], NULL, 1.0f, CollisionType::VTX_INTERSECT, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
return Objects.back();
|
||||
}
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ void FrappeSnowland::LoadTextures() {
|
||||
void FrappeSnowland::BeginPlay() {
|
||||
spawn_foliage((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_frappe_snowland_tree_spawns));
|
||||
spawn_all_item_boxes((struct ActorSpawnData*)LOAD_ASSET_RAW(d_course_frappe_snowland_item_box_spawns));
|
||||
|
||||
|
||||
if (gGamestate != CREDITS_SEQUENCE) {
|
||||
gWorldInstance.AddObject(new OSnowman(FVector(697, 0, -1684)));
|
||||
gWorldInstance.AddObject(new OSnowman(FVector(82, 0, -2245)));
|
||||
|
||||
@@ -28,14 +28,12 @@ int gfx_create_framebuffer(uint32_t width, uint32_t height, uint32_t native_widt
|
||||
uint8_t resize);
|
||||
|
||||
Editor::Editor() {
|
||||
s32 test = 1;
|
||||
// gsSPSetFB(gDisplayListHead++, &test);
|
||||
}
|
||||
|
||||
void Editor::Load() {
|
||||
eObjectPicker.Load();
|
||||
for (auto& object : eGameObjects) {
|
||||
//GenerateCollisionMesh(object, object.Model, 1.0f);
|
||||
GenerateCollisionMesh(object, object.Model, 1.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,7 +82,6 @@ void Editor::Tick() {
|
||||
|
||||
void Editor::Draw() {
|
||||
eObjectPicker.Draw();
|
||||
DrawObj();
|
||||
}
|
||||
|
||||
void Editor::AddObject(FVector* pos, Gfx* model, float scale, CollisionType collision, float boundingBoxSize) {
|
||||
@@ -92,7 +89,6 @@ void Editor::AddObject(FVector* pos, Gfx* model, float scale, CollisionType coll
|
||||
if (model != NULL) {
|
||||
eGameObjects.push_back({pos, model, {}, collision, boundingBoxSize});
|
||||
GenerateCollisionMesh(eGameObjects.back(), model, scale);
|
||||
printf("\n");
|
||||
} else { // to bounding box or sphere collision
|
||||
eGameObjects.push_back({pos, model, {}, CollisionType::BOUNDING_BOX, 2.0f});
|
||||
}
|
||||
|
||||
@@ -225,16 +225,6 @@ bool IntersectRayTriangle(const Ray& ray, const Triangle& tri, const FVector& ob
|
||||
t = f * edge2.Dot(q);
|
||||
return t > EPSILON;
|
||||
}
|
||||
extern Gfx box_Cube_mesh[];
|
||||
void DrawObj() {
|
||||
Mat4 mtx;
|
||||
Vec3f pos2 = { DebugPoss.x, DebugPoss.y, DebugPoss.z };
|
||||
mtxf_translate(mtx, pos2);
|
||||
mtxf_scale(mtx, 0.03);
|
||||
render_set_position(mtx, 0);
|
||||
gSPDisplayList(gDisplayListHead++, box_Cube_mesh);
|
||||
}
|
||||
|
||||
|
||||
bool FindClosestObject(const Ray& ray, const std::vector<GameObject>& objects, GameObject& outObject, float& outDistance) {
|
||||
float closestDist = std::numeric_limits<float>::max();
|
||||
@@ -258,91 +248,3 @@ bool FindClosestObject(const Ray& ray, const std::vector<GameObject>& objects, G
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Vtx box_Cube_mesh_vtx_cull[8] = {
|
||||
{{ {-46, -46, -46}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {-46, -46, 46}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {-46, 46, 46}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {-46, 46, -46}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {46, -46, -46}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {46, -46, 46}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {46, 46, 46}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
{{ {46, 46, -46}, 0, {0, 0}, {0, 0, 0, 0} }},
|
||||
};
|
||||
|
||||
Vtx box_Cube_mesh_vtx_0[24] = {
|
||||
{{ {-46, -46, 46}, 0, {368, 1008}, {129, 0, 0, 255} }},
|
||||
{{ {-46, 46, 46}, 0, {624, 1008}, {129, 0, 0, 255} }},
|
||||
{{ {-46, 46, -46}, 0, {624, 752}, {129, 0, 0, 255} }},
|
||||
{{ {-46, -46, -46}, 0, {368, 752}, {129, 0, 0, 255} }},
|
||||
{{ {-46, -46, -46}, 0, {368, 752}, {0, 0, 129, 255} }},
|
||||
{{ {-46, 46, -46}, 0, {624, 752}, {0, 0, 129, 255} }},
|
||||
{{ {46, 46, -46}, 0, {624, 496}, {0, 0, 129, 255} }},
|
||||
{{ {46, -46, -46}, 0, {368, 496}, {0, 0, 129, 255} }},
|
||||
{{ {46, -46, -46}, 0, {368, 496}, {127, 0, 0, 255} }},
|
||||
{{ {46, 46, -46}, 0, {624, 496}, {127, 0, 0, 255} }},
|
||||
{{ {46, 46, 46}, 0, {624, 240}, {127, 0, 0, 255} }},
|
||||
{{ {46, -46, 46}, 0, {368, 240}, {127, 0, 0, 255} }},
|
||||
{{ {46, -46, 46}, 0, {368, 240}, {0, 0, 127, 255} }},
|
||||
{{ {46, 46, 46}, 0, {624, 240}, {0, 0, 127, 255} }},
|
||||
{{ {-46, 46, 46}, 0, {624, -16}, {0, 0, 127, 255} }},
|
||||
{{ {-46, -46, 46}, 0, {368, -16}, {0, 0, 127, 255} }},
|
||||
{{ {-46, -46, -46}, 0, {112, 496}, {0, 129, 0, 255} }},
|
||||
{{ {46, -46, -46}, 0, {368, 496}, {0, 129, 0, 255} }},
|
||||
{{ {46, -46, 46}, 0, {368, 240}, {0, 129, 0, 255} }},
|
||||
{{ {-46, -46, 46}, 0, {112, 240}, {0, 129, 0, 255} }},
|
||||
{{ {46, 46, -46}, 0, {624, 496}, {0, 127, 0, 255} }},
|
||||
{{ {-46, 46, -46}, 0, {880, 496}, {0, 127, 0, 255} }},
|
||||
{{ {-46, 46, 46}, 0, {880, 240}, {0, 127, 0, 255} }},
|
||||
{{ {46, 46, 46}, 0, {624, 240}, {0, 127, 0, 255} }},
|
||||
};
|
||||
|
||||
Gfx box_Cube_mesh_tri_0[8] = {
|
||||
gsSPVertex(box_Cube_mesh_vtx_0 + 0, 24, 0),
|
||||
gsSP2Triangles(0, 1, 2, 0, 0, 2, 3, 0),
|
||||
gsSP2Triangles(4, 5, 6, 0, 4, 6, 7, 0),
|
||||
gsSP2Triangles(8, 9, 10, 0, 8, 10, 11, 0),
|
||||
gsSP2Triangles(12, 13, 14, 0, 12, 14, 15, 0),
|
||||
gsSP2Triangles(16, 17, 18, 0, 16, 18, 19, 0),
|
||||
gsSP2Triangles(20, 21, 22, 0, 20, 22, 23, 0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
Gfx mat_box_f3dlite_material[6] = {
|
||||
gsSPClearGeometryMode(G_CLIPPING),
|
||||
gsDPPipeSync(),
|
||||
gsDPSetCombineLERP(0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT, 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT),
|
||||
gsDPSetAlphaDither(G_AD_NOISE),
|
||||
gsSPTexture(65535, 65535, 0, 0, 1),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
Gfx mat_revert_box_f3dlite_material[4] = {
|
||||
gsSPSetGeometryMode(G_CLIPPING),
|
||||
gsDPPipeSync(),
|
||||
gsDPSetAlphaDither(G_AD_DISABLE),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
Gfx box_Cube_mesh[13] = {
|
||||
gsSPClearGeometryMode(G_LIGHTING),
|
||||
gsSPVertex(box_Cube_mesh_vtx_cull + 0, 8, 0),
|
||||
gsSPSetGeometryMode(G_LIGHTING),
|
||||
gsSPCullDisplayList(0, 7),
|
||||
gsSPDisplayList(mat_box_f3dlite_material),
|
||||
gsSPDisplayList(box_Cube_mesh_tri_0),
|
||||
gsSPDisplayList(mat_revert_box_f3dlite_material),
|
||||
gsDPPipeSync(),
|
||||
gsSPSetGeometryMode(G_LIGHTING),
|
||||
gsSPClearGeometryMode(G_TEXTURE_GEN),
|
||||
gsDPSetCombineLERP(0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT, 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT),
|
||||
gsSPTexture(65535, 65535, 0, 0, 0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -45,7 +45,6 @@ FVector4 MultiplyMatrixVector(float matrix[4][4], float vector[4]);
|
||||
s32 Inverse(MtxF* src, MtxF* dest);
|
||||
void Copy(MtxF* src, MtxF* dest);
|
||||
void Clear(MtxF* mf);
|
||||
void DrawObj();
|
||||
|
||||
bool IntersectRayTriangle(const Ray& ray, const Triangle& tri, const FVector& objectPos, float& t);
|
||||
|
||||
|
||||
@@ -52,9 +52,9 @@ public:
|
||||
{-5, 0, 0} // Z-Axis (Blue)
|
||||
};
|
||||
FVector _ray;
|
||||
GameObject* _selected;
|
||||
private:
|
||||
bool _draw = false;
|
||||
GameObject* _selected;
|
||||
|
||||
|
||||
Lights1 handle_f3dlite_material_lights = gdSPDefLights1(
|
||||
|
||||
@@ -50,6 +50,7 @@ void ObjectPicker::SelectObject(std::vector<GameObject>& objects) {
|
||||
} else {
|
||||
//eGizmo.Disable();
|
||||
eGizmo.Enabled = false;
|
||||
eGizmo._selected = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,4 @@ class ObjectPicker {
|
||||
s32 Inverse(MtxF* src, MtxF* dest);
|
||||
void Copy(MtxF* src, MtxF* dest);
|
||||
void Clear(MtxF* mf);
|
||||
|
||||
void DrawObj(float length);
|
||||
|
||||
};
|
||||
|
||||
@@ -51,10 +51,8 @@ public:
|
||||
void func_8007D794(s32 objectIndex);
|
||||
void func_8007DA4C(s32 objectIndex);
|
||||
|
||||
|
||||
private:
|
||||
FVector _pos;
|
||||
static size_t _count;
|
||||
size_t _idx;
|
||||
s32 _objectIndex;
|
||||
};
|
||||
|
||||
@@ -72,7 +72,7 @@ OBombKart::OBombKart(Vec3f pos, TrackWaypoint* waypoint, uint16_t waypointIndex,
|
||||
WheelPos[3][2] = _pos[2];
|
||||
check_bounding_collision(&_Collision, 2.0f, _pos[0], _pos[1], _pos[2]);
|
||||
|
||||
find_unused_obj_index(&ObjectIndex);
|
||||
find_unused_obj_index(&_objectIndex);
|
||||
|
||||
_count++;
|
||||
}
|
||||
@@ -329,7 +329,7 @@ void OBombKart::Tick() {
|
||||
void OBombKart::Draw(s32 cameraId) {
|
||||
if (gModeSelection == BATTLE) {
|
||||
for (size_t playerId = 0; playerId < NUM_BOMB_KARTS_BATTLE; playerId++) {
|
||||
Object* object = &gObjectList[ObjectIndex];
|
||||
Object* object = &gObjectList[_objectIndex];
|
||||
if (object->state != 0) {
|
||||
s32 primAlpha = object->primAlpha;
|
||||
Player* player = &gPlayerOne[playerId];
|
||||
@@ -337,9 +337,9 @@ void OBombKart::Draw(s32 cameraId) {
|
||||
object->pos[1] = player->pos[1] - 2.0;
|
||||
object->pos[2] = player->pos[2];
|
||||
object->surfaceHeight = player->unk_074;
|
||||
func_800563DC(ObjectIndex, cameraId, primAlpha);
|
||||
func_8005669C(ObjectIndex, cameraId, primAlpha);
|
||||
func_800568A0(ObjectIndex, cameraId);
|
||||
func_800563DC(_objectIndex, cameraId, primAlpha);
|
||||
func_8005669C(_objectIndex, cameraId, primAlpha);
|
||||
func_800568A0(_objectIndex, cameraId);
|
||||
}
|
||||
}
|
||||
return;
|
||||
@@ -358,27 +358,27 @@ void OBombKart::Draw(s32 cameraId) {
|
||||
}
|
||||
Camera* camera = &camera1[cameraId];
|
||||
if (cameraId == PLAYER_ONE) {
|
||||
if (is_obj_flag_status_active(ObjectIndex, 0x00200000) != 0) {
|
||||
if (is_obj_flag_status_active(_objectIndex, 0x00200000) != 0) {
|
||||
Unk_4A = 0;
|
||||
} else if (gGamestate != ENDING) {
|
||||
Unk_4A = 1;
|
||||
}
|
||||
clear_object_flag(ObjectIndex, 0x00200000);
|
||||
clear_object_flag(_objectIndex, 0x00200000);
|
||||
}
|
||||
|
||||
// huh???
|
||||
s32 state = State;
|
||||
if (State != States::DISABLED) {
|
||||
gObjectList[ObjectIndex].pos[0] = Pos[0];
|
||||
gObjectList[ObjectIndex].pos[1] = Pos[1];
|
||||
gObjectList[ObjectIndex].pos[2] = Pos[2];
|
||||
s32 temp_s4 = func_8008A364(ObjectIndex, cameraId, 0x31C4U, 0x000001F4);
|
||||
if (is_obj_flag_status_active(ObjectIndex, VISIBLE) != 0) {
|
||||
set_object_flag(ObjectIndex, 0x00200000);
|
||||
gObjectList[_objectIndex].pos[0] = Pos[0];
|
||||
gObjectList[_objectIndex].pos[1] = Pos[1];
|
||||
gObjectList[_objectIndex].pos[2] = Pos[2];
|
||||
s32 temp_s4 = func_8008A364(_objectIndex, cameraId, 0x31C4U, 0x000001F4);
|
||||
if (is_obj_flag_status_active(_objectIndex, VISIBLE) != 0) {
|
||||
set_object_flag(_objectIndex, 0x00200000);
|
||||
D_80183E80[0] = 0;
|
||||
D_80183E80[1] = func_800418AC(Pos[0], Pos[2], camera->pos);
|
||||
D_80183E80[2] = 0x8000;
|
||||
func_800563DC(ObjectIndex, cameraId, 0x000000FF);
|
||||
func_800563DC(_objectIndex, cameraId, 0x000000FF);
|
||||
OBombKart::SomeRender(camera->pos);
|
||||
if (((u32) temp_s4 < 0x4E21U) && (state != BOMB_STATE_EXPLODED)) {
|
||||
OBombKart::LoadMtx();
|
||||
|
||||
@@ -47,7 +47,6 @@ public:
|
||||
u16 Unk_4A = 0;
|
||||
s16 Unk_4C = 1;
|
||||
f32 CenterY; // Center of the circle
|
||||
s32 ObjectIndex = 0; // Index into gObjectList
|
||||
Collision _Collision;
|
||||
|
||||
// Set waypoint to NULL if using a spawn position and not a waypoint.
|
||||
|
||||
@@ -19,7 +19,7 @@ size_t OChainChomp::_count = 0;
|
||||
OChainChomp::OChainChomp() {
|
||||
_idx = _count;
|
||||
init_object(indexObjectList2[_count], 0);
|
||||
|
||||
_objectIndex = indexObjectList2[_count];
|
||||
|
||||
_count++;
|
||||
}
|
||||
|
||||
@@ -46,5 +46,4 @@ private:
|
||||
FVector2D _end;
|
||||
static size_t _count;
|
||||
s32 _idx;
|
||||
s32 _objectIndex;
|
||||
};
|
||||
|
||||
@@ -42,5 +42,4 @@ private:
|
||||
s16 _direction;
|
||||
static size_t _count;
|
||||
size_t _idx;
|
||||
s32 _objectIndex;
|
||||
};
|
||||
|
||||
@@ -19,6 +19,7 @@ OHedgehog::OHedgehog(const FVector& pos, const FVector2D& patrolPoint, s16 unk)
|
||||
_pos = pos;
|
||||
|
||||
s32 objectId = indexObjectList2[_idx];
|
||||
_objectIndex = objectId;
|
||||
init_object(objectId, 0);
|
||||
gObjectList[objectId].pos[0] = gObjectList[objectId].origin_pos[0] = pos.x * xOrientation;
|
||||
gObjectList[objectId].pos[1] = gObjectList[objectId].surfaceHeight = pos.y + 6.0;
|
||||
|
||||
@@ -31,5 +31,4 @@ public:
|
||||
private:
|
||||
FVector _pos;
|
||||
bool *_visible;
|
||||
s32 _objectIndex;
|
||||
};
|
||||
|
||||
@@ -40,7 +40,6 @@ public:
|
||||
void func_80081790(s32 objectIndex);
|
||||
void func_8008153C(s32 objectIndex);
|
||||
|
||||
s32 _objectIndex;
|
||||
s32 _moleIndex;
|
||||
private:
|
||||
static size_t _count;
|
||||
|
||||
@@ -12,6 +12,7 @@ public:
|
||||
uint8_t uuid[16];
|
||||
Object o;
|
||||
bool PendingDestroy = false;
|
||||
s32 _objectIndex = -1;
|
||||
|
||||
virtual ~OObject() = default;
|
||||
|
||||
|
||||
@@ -55,7 +55,6 @@ private:
|
||||
void InitOtherPenguin(s32 objectIndex);
|
||||
|
||||
static bool _toggle;
|
||||
s32 _objectIndex;
|
||||
PenguinType _type;
|
||||
Behaviour _bhv;
|
||||
};
|
||||
|
||||
@@ -38,7 +38,6 @@ public:
|
||||
void func_8008241C(s32 objectIndex, s32 arg1);
|
||||
void func_80082714(s32 objectIndex, s32 arg1);
|
||||
private:
|
||||
s32 _objectIndex;
|
||||
FVector _pos;
|
||||
static size_t _count;
|
||||
s32 _idx;
|
||||
|
||||
@@ -22,6 +22,7 @@ OSnowman::OSnowman(const FVector& pos) {
|
||||
|
||||
find_unused_obj_index(&_headIndex);
|
||||
init_object(_headIndex, 0);
|
||||
_objectIndex = _headIndex;
|
||||
gObjectList[_headIndex].origin_pos[0] = pos.x * xOrientation;
|
||||
gObjectList[_headIndex].origin_pos[1] = pos.y + 5.0 + 3.0;
|
||||
gObjectList[_headIndex].origin_pos[2] = pos.z;
|
||||
|
||||
@@ -50,7 +50,6 @@ private:
|
||||
FVector _pos;
|
||||
static size_t _count;
|
||||
size_t _idx;
|
||||
s32 _objectIndex;
|
||||
s32 _headIndex;
|
||||
s32 _bodyIndex;
|
||||
};
|
||||
|
||||
@@ -113,7 +113,6 @@ public:
|
||||
private:
|
||||
static size_t _count;
|
||||
s32 _idx;
|
||||
s32 _objectIndex;
|
||||
s16 _faceDirection;
|
||||
//! @todo Write this better. This effects the squish size and the bounding box size.
|
||||
// We should probably return to the programmer the pointer to the actor so they can do thwomp->squishSize = value.
|
||||
|
||||
@@ -41,6 +41,5 @@ private:
|
||||
FRotation _rot;
|
||||
float _scale;
|
||||
size_t _idx;
|
||||
s32 _objectIndex;
|
||||
bool _drawBin = false;
|
||||
};
|
||||
|
||||
@@ -48,7 +48,6 @@ public:
|
||||
private:
|
||||
StarEmitter* _emitter;
|
||||
|
||||
s32 _objectIndex;
|
||||
TrophyType _trophy;
|
||||
FVector _spawnPos;
|
||||
Behaviour _bhv;
|
||||
|
||||
Reference in New Issue
Block a user