mirror of
https://github.com/HarbourMasters/SpaghettiKart
synced 2026-07-09 06:54:01 -04:00
Impl snowmen and trashbin
This commit is contained in:
@@ -34,7 +34,7 @@ void OMole::Tick() {
|
||||
for (var_s1 = 0; var_s1 < D_8018D1C8; var_s1++) {
|
||||
objectIndex = indexObjectList1[var_s1];
|
||||
if (gObjectList[objectIndex].state == 0) {
|
||||
if (func_8008A8B0(8, 9) != 0) {
|
||||
if (are_players_in_course_section(8, 9) != 0) {
|
||||
func_80081FF4(objectIndex, 1);
|
||||
}
|
||||
} else {
|
||||
@@ -45,7 +45,7 @@ void OMole::Tick() {
|
||||
for (var_s1 = 0; var_s1 < D_8018D1D0; var_s1++) {
|
||||
objectIndex = indexObjectList2[var_s1];
|
||||
if (gObjectList[objectIndex].state == 0) {
|
||||
if (func_8008A8B0(0x0010, 0x0013) != 0) {
|
||||
if (are_players_in_course_section(0x0010, 0x0013) != 0) {
|
||||
OMole::func_80081FF4(objectIndex, 2);
|
||||
}
|
||||
} else {
|
||||
@@ -56,7 +56,7 @@ void OMole::Tick() {
|
||||
for (var_s1 = 0; var_s1 < D_8018D1D8; var_s1++) {
|
||||
objectIndex = indexObjectList3[var_s1];
|
||||
if (gObjectList[objectIndex].state == 0) {
|
||||
if (func_8008A8B0(0x0011, 0x0014) != 0) {
|
||||
if (are_players_in_course_section(0x0011, 0x0014) != 0) {
|
||||
func_80081FF4(objectIndex, 3);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -0,0 +1,300 @@
|
||||
#include "Snowman.h"
|
||||
#include "World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "render_objects.h"
|
||||
#include "update_objects.h"
|
||||
#include "assets/frappe_snowland_data.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "math_util.h"
|
||||
#include "math_util_2.h"
|
||||
#include "code_80086E70.h"
|
||||
#include "code_80057C60.h"
|
||||
}
|
||||
|
||||
static const char* sSnowmanHeadList[] = { d_course_frappe_snowland_snowman_head };
|
||||
|
||||
size_t OSnowman::_count = 0;
|
||||
|
||||
OSnowman::OSnowman(const FVector& pos) {
|
||||
_pos = pos;
|
||||
_idx = _count;
|
||||
|
||||
s32 objectId = indexObjectList2[_idx];
|
||||
init_object(objectId, 0);
|
||||
gObjectList[objectId].origin_pos[0] = pos.x * xOrientation;
|
||||
gObjectList[objectId].origin_pos[1] = pos.y + 5.0 + 3.0;
|
||||
gObjectList[objectId].origin_pos[2] = pos.z;
|
||||
gObjectList[objectId].pos[0] = pos.x * xOrientation;
|
||||
gObjectList[objectId].pos[1] = pos.y + 5.0 + 3.0;
|
||||
gObjectList[objectId].pos[2] = pos.z;
|
||||
|
||||
objectId = indexObjectList1[_idx];
|
||||
init_object(objectId, 0);
|
||||
gObjectList[objectId].origin_pos[0] = pos.x * xOrientation;
|
||||
gObjectList[objectId].origin_pos[1] = pos.y + 3.0;
|
||||
gObjectList[objectId].origin_pos[2] = pos.z;
|
||||
gObjectList[objectId].unk_0D5 = 0; // Section Id no longer used.
|
||||
|
||||
gObjectList[objectId].pos[0] = pos.x * xOrientation;
|
||||
gObjectList[objectId].pos[1] = pos.y + 3.0;
|
||||
gObjectList[objectId].pos[2] = pos.z;
|
||||
|
||||
_count++;
|
||||
}
|
||||
|
||||
void OSnowman::Tick() {
|
||||
s32 var_s0;
|
||||
s32 var_s3;
|
||||
s32 var_s4;
|
||||
s32 objectIndex;
|
||||
Object* object;
|
||||
|
||||
//! @todo quick hack to add the snow particles on hit. Need to separate into its own class
|
||||
if (_idx == 0) {
|
||||
for (var_s0 = 0; var_s0 < gObjectParticle2_SIZE; var_s0++) {
|
||||
objectIndex = gObjectParticle2[var_s0];
|
||||
|
||||
if (objectIndex == DELETED_OBJECT_ID) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (gObjectList[objectIndex].state == 0) {
|
||||
continue;
|
||||
}
|
||||
func_8008379C(objectIndex);
|
||||
if (gObjectList[objectIndex].state != 0) {
|
||||
continue;
|
||||
}
|
||||
delete_object_wrapper(&gObjectParticle2[var_s0]);
|
||||
if (var_s0) {} // ??
|
||||
}
|
||||
}
|
||||
|
||||
//for (var_s0 = 0; var_s0 < NUM_SNOWMEN; var_s0++) {
|
||||
var_s4 = indexObjectList1[_idx];
|
||||
var_s3 = indexObjectList2[_idx];
|
||||
OSnowman::func_80083A94(var_s3); // snowman head
|
||||
OSnowman::func_80083C04(var_s4); // snowman body
|
||||
if (is_obj_index_flag_status_inactive(var_s4, 0x00001000) != 0) {
|
||||
object = &gObjectList[var_s4];
|
||||
if ((are_players_in_course_section(object->unk_0D5 - 1, object->unk_0D5 + 1) != 0) && (func_80089B50(var_s4) != 0)) {
|
||||
set_object_flag(var_s4, 0x00001000);
|
||||
clear_object_flag(var_s4, 0x00000010);
|
||||
func_800726CC(var_s4, 0x0000000A);
|
||||
func_8008701C(var_s3, 0x0000000A);
|
||||
OSnowman::func_800836F0(object->pos);
|
||||
}
|
||||
} else if (func_80072320(var_s4, 2) != 0) {
|
||||
func_800722CC(var_s4, 2);
|
||||
func_8008701C(var_s3, 0x00000014);
|
||||
}
|
||||
//}
|
||||
}
|
||||
|
||||
void OSnowman::Draw(s32 cameraId) {
|
||||
OSnowman::DrawHead(cameraId);
|
||||
OSnowman::DrawBody(cameraId);
|
||||
}
|
||||
|
||||
void OSnowman::func_800836F0(Vec3f pos) {
|
||||
s32 objectIndex;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < D_8018D3BC; i++) {
|
||||
objectIndex = add_unused_obj_index(&gObjectParticle2[0], &gNextFreeObjectParticle2, gObjectParticle2_SIZE);
|
||||
if (objectIndex == NULL_OBJECT_ID) {
|
||||
break;
|
||||
}
|
||||
func_80083538(objectIndex, pos, i, D_8018D3BC);
|
||||
}
|
||||
}
|
||||
|
||||
void OSnowman::DrawHead(s32 cameraId) {
|
||||
s32 objectIndex;
|
||||
Camera* camera = &camera1[cameraId];
|
||||
objectIndex = indexObjectList1[_idx];
|
||||
if (gObjectList[objectIndex].state >= 2) {
|
||||
func_8008A364(objectIndex, cameraId, 0x2AABU, 0x00000258);
|
||||
if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) {
|
||||
D_80183E80[0] = (s16) gObjectList[objectIndex].orientation[0];
|
||||
D_80183E80[1] =
|
||||
func_800418AC(gObjectList[objectIndex].pos[0], gObjectList[objectIndex].pos[2], camera->pos);
|
||||
D_80183E80[2] = (u16) gObjectList[objectIndex].orientation[2];
|
||||
if (is_obj_flag_status_active(objectIndex, 0x00000010) != 0) {
|
||||
draw_2d_texture_at(gObjectList[objectIndex].pos, (u16*) D_80183E80,
|
||||
gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT,
|
||||
(u8*)gObjectList[objectIndex].activeTexture, gObjectList[objectIndex].vertex,
|
||||
0x00000040, 0x00000040, 0x00000040, 0x00000020);
|
||||
}
|
||||
objectIndex = indexObjectList2[_idx];
|
||||
D_80183E80[0] = (s16) gObjectList[objectIndex].orientation[0];
|
||||
D_80183E80[2] = (u16) gObjectList[objectIndex].orientation[2];
|
||||
draw_2d_texture_at(gObjectList[objectIndex].pos, (u16*) D_80183E80,
|
||||
gObjectList[objectIndex].sizeScaling, (u8*) gObjectList[objectIndex].activeTLUT,
|
||||
(u8*)gObjectList[objectIndex].activeTexture, gObjectList[objectIndex].vertex, 0x00000040,
|
||||
0x00000040, 0x00000040, 0x00000020);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OSnowman::DrawBody(s32 cameraId) {
|
||||
UNUSED s32 stackPadding[2];
|
||||
Camera* sp44;
|
||||
s32 someIndex;
|
||||
s32 objectIndex;
|
||||
Object* object;
|
||||
|
||||
sp44 = &camera1[cameraId];
|
||||
load_texture_and_tlut((u8*)d_course_frappe_snowland_snow_tlut, (u8*)d_course_frappe_snowland_snow, 0x00000020, 0x00000020);
|
||||
|
||||
//! @todo quick hack to add the snow particles on hit. Need to separate into its own class
|
||||
if (_idx == 0) {
|
||||
for (someIndex = 0; someIndex < gObjectParticle2_SIZE; someIndex++) {
|
||||
objectIndex = gObjectParticle2[someIndex];
|
||||
if (objectIndex != NULL_OBJECT_ID) {
|
||||
object = &gObjectList[objectIndex];
|
||||
if (object->state > 0) {
|
||||
func_8008A364(objectIndex, cameraId, 0x2AABU, 0x000001F4);
|
||||
if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) {
|
||||
object->orientation[1] = func_800418AC(object->pos[0], object->pos[2], sp44->pos);
|
||||
rsp_set_matrix_gObjectList(objectIndex);
|
||||
gSPDisplayList(gDisplayListHead++, (Gfx*)D_0D0069E0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
gSPTexture(gDisplayListHead++, 1, 1, 0, G_TX_RENDERTILE, G_OFF);
|
||||
}
|
||||
|
||||
void OSnowman::func_80083C04(s32 objectIndex) {
|
||||
Object* object;
|
||||
|
||||
object = &gObjectList[objectIndex];
|
||||
switch (object->state) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
OSnowman::func_80083B0C(objectIndex);
|
||||
break;
|
||||
case 2:
|
||||
set_and_run_timer_object(objectIndex, 0x00000096);
|
||||
break;
|
||||
case 10:
|
||||
if (set_and_run_timer_object(objectIndex, 0x0000012C) != 0) {
|
||||
func_800722A4(objectIndex, 2);
|
||||
}
|
||||
break;
|
||||
case 11:
|
||||
if (set_and_run_timer_object(objectIndex, 0x0000000A) != 0) {
|
||||
set_object_flag(objectIndex, 0x00000010);
|
||||
object->sizeScaling = 0.001f;
|
||||
}
|
||||
break;
|
||||
case 12:
|
||||
if (func_80074118(objectIndex, &object->sizeScaling, 0.001f, 0.1f, 0.0025f, 0, 0) != 0) {
|
||||
object_next_state(objectIndex);
|
||||
}
|
||||
break;
|
||||
case 13:
|
||||
func_800726CC(objectIndex, 2);
|
||||
clear_object_flag(objectIndex, 0x00001000);
|
||||
break;
|
||||
}
|
||||
if (object->state >= 2) {
|
||||
func_80073514(objectIndex);
|
||||
}
|
||||
OSnowman::func_80083BE4(objectIndex);
|
||||
}
|
||||
|
||||
void OSnowman::func_80083BE4(s32 objectIndex) {
|
||||
object_calculate_new_pos_offset(objectIndex);
|
||||
}
|
||||
|
||||
void OSnowman::func_80083868(s32 objectIndex) {
|
||||
Object* object;
|
||||
Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(D_0D0061B0);
|
||||
init_texture_object(objectIndex, (u8*)d_course_frappe_snowland_snowman_tlut, (const char**)sSnowmanHeadList, 0x40U, (u16) 0x00000040);
|
||||
object = &gObjectList[objectIndex];
|
||||
object->vertex = vtx;
|
||||
object->sizeScaling = 0.1f;
|
||||
object->textureListIndex = 0;
|
||||
object_next_state(objectIndex);
|
||||
set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f);
|
||||
object->orientation[0] = 0;
|
||||
object->orientation[1] = 0;
|
||||
object->orientation[2] = 0x8000;
|
||||
object->primAlpha = random_int(0x2000U) - 0x1000;
|
||||
func_80086E70(objectIndex);
|
||||
object->unk_034 = 1.5f;
|
||||
set_object_flag(objectIndex, 0x00000200);
|
||||
}
|
||||
|
||||
void OSnowman::func_80083948(s32 objectIndex) {
|
||||
switch (gObjectList[objectIndex].unk_0AE) {
|
||||
case 1:
|
||||
func_80086FD4(objectIndex);
|
||||
break;
|
||||
case 2:
|
||||
func_800871AC(objectIndex, 0x00000014);
|
||||
break;
|
||||
case 3:
|
||||
func_8008701C(objectIndex, 1);
|
||||
break;
|
||||
case 10:
|
||||
func_80087C48(objectIndex, 10.0f, 0.5f, 0x0000000A);
|
||||
break;
|
||||
case 11:
|
||||
func_80087D24(objectIndex, 0.0f, 0.2f, -7.0f);
|
||||
break;
|
||||
case 20:
|
||||
if (f32_step_up_towards(&gObjectList[objectIndex].offset[1], 0.0f, 0.2f) != 0) {
|
||||
func_80073800(objectIndex, 0);
|
||||
func_8008701C(objectIndex, 1);
|
||||
}
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
object_calculate_new_pos_offset(objectIndex);
|
||||
OSnowman::func_80073D0C(objectIndex, &gObjectList[objectIndex].primAlpha, -0x00001000, 0x00001000, 0x00000400, 1, -1);
|
||||
gObjectList[objectIndex].orientation[2] = gObjectList[objectIndex].primAlpha + 0x8000;
|
||||
}
|
||||
|
||||
bool OSnowman::func_80073D0C(s32 objectIndex, s16* arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6) {
|
||||
return func_80073B78(0, objectIndex, arg1, arg2, arg3, arg4, arg5, arg6);
|
||||
}
|
||||
|
||||
void OSnowman::func_80083A94(s32 objectIndex) {
|
||||
switch (gObjectList[objectIndex].state) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
OSnowman::func_80083868(objectIndex);
|
||||
break;
|
||||
}
|
||||
if (gObjectList[objectIndex].state >= 2) {
|
||||
func_80073514(objectIndex);
|
||||
}
|
||||
OSnowman::func_80083948(objectIndex);
|
||||
}
|
||||
|
||||
static const char* sSnowmanBodyList[] = { d_course_frappe_snowland_snowman_body };
|
||||
|
||||
void OSnowman::func_80083B0C(s32 objectIndex) {
|
||||
Vtx* vtx = (Vtx*) LOAD_ASSET_RAW(common_vtx_hedgehog);
|
||||
init_texture_object(objectIndex, (u8*)d_course_frappe_snowland_snowman_tlut, (const char**)sSnowmanBodyList, 0x40U, (u16) 0x00000040);
|
||||
gObjectList[objectIndex].vertex = vtx;
|
||||
gObjectList[objectIndex].sizeScaling = 0.1f;
|
||||
gObjectList[objectIndex].textureListIndex = 0;
|
||||
object_next_state(objectIndex);
|
||||
set_obj_origin_offset(objectIndex, 0.0f, 0.0f, 0.0f);
|
||||
gObjectList[objectIndex].orientation[0] = 0;
|
||||
gObjectList[objectIndex].orientation[1] = 0;
|
||||
gObjectList[objectIndex].orientation[2] = 0x8000;
|
||||
gObjectList[objectIndex].boundingBoxSize = 2;
|
||||
gObjectList[objectIndex].unk_034 = 1.5f;
|
||||
set_object_flag(objectIndex, 0x04000210);
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "Object.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:
|
||||
explicit OSnowman(const FVector& pos);
|
||||
|
||||
~OSnowman() {
|
||||
_count--;
|
||||
}
|
||||
|
||||
static size_t GetCount() {
|
||||
return _count;
|
||||
}
|
||||
|
||||
virtual void Tick() override;
|
||||
virtual void Draw(s32 cameraId) override;
|
||||
|
||||
void DrawHead(s32);
|
||||
void DrawBody(s32);
|
||||
|
||||
void func_80083868(s32);
|
||||
void func_80083948(s32);
|
||||
void func_80083A94(s32);
|
||||
void func_80083B0C(s32);
|
||||
void func_80083C04(s32);
|
||||
void func_80083BE4(s32);
|
||||
void func_800836F0(Vec3f);
|
||||
bool func_80073D0C(s32 objectIndex, s16* arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6);
|
||||
|
||||
|
||||
private:
|
||||
FVector _pos;
|
||||
static size_t _count;
|
||||
size_t _idx;
|
||||
};
|
||||
@@ -0,0 +1,125 @@
|
||||
#include "TrashBin.h"
|
||||
#include "World.h"
|
||||
|
||||
extern "C" {
|
||||
#include "code_800029B0.h"
|
||||
#include "render_objects.h"
|
||||
#include "update_objects.h"
|
||||
#include "assets/banshee_boardwalk_data.h"
|
||||
#include "assets/common_data.h"
|
||||
#include "math_util.h"
|
||||
#include "math_util_2.h"
|
||||
#include "code_80086E70.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "audio/external.h"
|
||||
}
|
||||
|
||||
#define DEGREES_FLOAT_TO_SHORT(Degrees) ((s16)((Degrees) * (0x8000 / 180.0f)))
|
||||
|
||||
OTrashBin::OTrashBin(const FVector& pos, const FRotation& rotation, f32 scale) {
|
||||
_pos = pos;
|
||||
_rot = rotation;
|
||||
_scale = scale;
|
||||
|
||||
// if (gIsMirrorMode != 0) {
|
||||
// gObjectList[objectIndex].pos[0] = 1765.0f;
|
||||
// gObjectList[objectIndex].pos[2] = 195.0f;
|
||||
// gObjectList[objectIndex].orientation[1] = (s16) rotation.y;
|
||||
// } else {
|
||||
// gObjectList[objectIndex].pos[0] = -1765.0f;
|
||||
// gObjectList[objectIndex].pos[2] = 70.0f;
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
void OTrashBin::Tick() {
|
||||
s32 objectIndex = indexObjectList1[1];
|
||||
OTrashBin::func_8007E00C(objectIndex);
|
||||
if (gModeSelection != TIME_TRIALS) {
|
||||
func_8007DDC0(objectIndex);
|
||||
}
|
||||
}
|
||||
|
||||
void OTrashBin::Draw(s32 cameraId) {
|
||||
s32 objectIndex;
|
||||
Object* object;
|
||||
|
||||
objectIndex = indexObjectList1[1];
|
||||
func_8008A364(objectIndex, cameraId, 0x5555U, 0x00000320);
|
||||
if (is_obj_flag_status_active(objectIndex, VISIBLE) != 0) {
|
||||
object = &gObjectList[objectIndex];
|
||||
if (object->state >= 2) {
|
||||
func_80043220(object->pos, object->orientation, object->sizeScaling, object->model);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void OTrashBin::init_bb_trash_bin(s32 objectIndex) {
|
||||
gObjectList[objectIndex].sizeScaling = _scale;
|
||||
gObjectList[objectIndex].model = (Gfx*)d_course_banshee_boardwalk_dl_trash_bin;
|
||||
gObjectList[objectIndex].unk_04C = 0;
|
||||
gObjectList[objectIndex].unk_084[7] = 0;
|
||||
set_obj_orientation(objectIndex, 0U, 0U, 0U);
|
||||
gObjectList[objectIndex].orientation[0] = DEGREES_FLOAT_TO_SHORT(_rot.pitch);
|
||||
gObjectList[objectIndex].orientation[1] = DEGREES_FLOAT_TO_SHORT(_rot.yaw);
|
||||
gObjectList[objectIndex].orientation[2] = DEGREES_FLOAT_TO_SHORT(_rot.roll);
|
||||
gObjectList[objectIndex].pos[0] = _pos.x;
|
||||
gObjectList[objectIndex].pos[1] = _pos.y;
|
||||
gObjectList[objectIndex].pos[2] = _pos.z;
|
||||
set_obj_velocity(objectIndex, 0.0f, 0.0f, 0.0f);
|
||||
gObjectList[objectIndex].type = 0;
|
||||
object_next_state(objectIndex);
|
||||
}
|
||||
|
||||
#undef DEGREES_FLOAT_TO_SHORT
|
||||
|
||||
void OTrashBin::func_8007E00C(s32 objectIndex) {
|
||||
switch (gObjectList[objectIndex].state) {
|
||||
case 1:
|
||||
init_bb_trash_bin(objectIndex);
|
||||
break;
|
||||
case 3:
|
||||
D_8018CFB0 = 1;
|
||||
object_next_state(objectIndex);
|
||||
break;
|
||||
case 4:
|
||||
set_and_run_timer_object(objectIndex, 0x000000D2);
|
||||
if (D_80165594 == 0) {
|
||||
if (gCCSelection < CC_150) {
|
||||
func_8007D714(1);
|
||||
func_8007D714(1);
|
||||
} else {
|
||||
func_8007D714(1);
|
||||
func_8007D714(1);
|
||||
func_8007D714(1);
|
||||
func_8007D714(1);
|
||||
}
|
||||
}
|
||||
func_80073CB0(objectIndex, &gObjectList[objectIndex].primAlpha, -0x00002000, 0, 0x00000400, 0, -1);
|
||||
gObjectList[objectIndex].orientation[2] = gObjectList[objectIndex].primAlpha;
|
||||
if (gObjectList[objectIndex].unk_084[7] == 0) {
|
||||
func_800C98B8(gObjectList[objectIndex].pos, gObjectList[objectIndex].velocity,
|
||||
SOUND_ARG_LOAD(0x19, 0x01, 0x90, 0x4E));
|
||||
gObjectList[objectIndex].unk_084[7] = 0x0014;
|
||||
} else {
|
||||
gObjectList[objectIndex].unk_084[7]--;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
gObjectList[objectIndex].orientation[2] = func_800417B4(gObjectList[objectIndex].orientation[2], 0U);
|
||||
if (gObjectList[objectIndex].orientation[2] == 0) {
|
||||
object_next_state(objectIndex);
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
gObjectList[objectIndex].orientation[2] = 0;
|
||||
gObjectList[objectIndex].unk_084[7] = 0;
|
||||
object_next_state(objectIndex);
|
||||
D_8018CFB0 = 0;
|
||||
break;
|
||||
case 0:
|
||||
case 2:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
#pragma once
|
||||
|
||||
#include <libultraship.h>
|
||||
#include <vector>
|
||||
#include "Object.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:
|
||||
explicit OTrashBin(const FVector& pos, const FRotation& rotation, f32 scale);
|
||||
|
||||
virtual void Tick() override;
|
||||
virtual void Draw(s32 cameraId) override;
|
||||
void func_8007E00C(s32 objectIndex);
|
||||
void init_bb_trash_bin(s32);
|
||||
|
||||
private:
|
||||
FVector _pos;
|
||||
FRotation _rot;
|
||||
float _scale;
|
||||
size_t _idx;
|
||||
};
|
||||
Reference in New Issue
Block a user