summaryrefslogtreecommitdiff
path: root/src/d/actor/d_a_obj_mirror_sand.cpp
diff options
context:
space:
mode:
authorTakaRikka <38417346+TakaRikka@users.noreply.github.com>2024-10-10 07:29:58 -0700
committerGitHub <noreply@github.com>2024-10-10 08:29:58 -0600
commit12eb254d769d84743b5cc6cd5424057c57eaf0ad (patch)
tree4509be332b2ccfc6fe939f47740d68f7746eca3e /src/d/actor/d_a_obj_mirror_sand.cpp
parent2fd702c0ac170a789af879b8b92a82d4dcc9080c (diff)
switch to dtk setup (#2203)
* switch to dtk setup * some cleanup / fixes * cleanup d_a_alink literals * Restore doxygen, update CI & README.md (#1) * Fix build image ref (#2) --------- Co-authored-by: Luke Street <luke@street.dev>
Diffstat (limited to 'src/d/actor/d_a_obj_mirror_sand.cpp')
-rw-r--r--src/d/actor/d_a_obj_mirror_sand.cpp202
1 files changed, 202 insertions, 0 deletions
diff --git a/src/d/actor/d_a_obj_mirror_sand.cpp b/src/d/actor/d_a_obj_mirror_sand.cpp
new file mode 100644
index 0000000000..6b2c2b2cc3
--- /dev/null
+++ b/src/d/actor/d_a_obj_mirror_sand.cpp
@@ -0,0 +1,202 @@
+/**
+ * d_a_obj_mirror_sand.cpp
+ * Mirror Chamber Sand Floor
+ */
+
+#include "d/actor/d_a_obj_mirror_sand.h"
+#include "d/d_procname.h"
+
+/* 80C989F0-80C989F4 -00001 0004+00 3/3 0/0 0/0 .data l_arcName */
+static char* l_arcName = "MR-Sand";
+
+int daObjMirrorSand_c::createHeap() {
+ J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(l_arcName, 8);
+ mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000084);
+ if (mpModel == NULL) {
+ return 0;
+ }
+
+ J3DAnmTransform* bck = (J3DAnmTransform*)dComIfG_getObjectRes(l_arcName, 5);
+ mpBck = new mDoExt_bckAnm();
+
+ f32 speed;
+ if (isSwitch()) {
+ speed = 1.0f;
+ } else {
+ speed = 0.0f;
+ }
+
+ if (mpBck == NULL || !mpBck->init(bck, FALSE, J3DFrameCtrl::LOOP_ONCE_e, speed, 0, -1, false)) {
+ return 0;
+ }
+
+ if (isSwitch()) {
+ mpBck->setFrame(bck->getFrameMax());
+ }
+
+ int i = 0; // probably fake match, needed to avoid saving mBgMtx to a register
+ cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes(l_arcName, 11);
+ if (mBgw[0].Set(dzb, dBgW::MOVE_BG_e, (Mtx*)&mBgMtx[i])) {
+ return 0;
+ }
+
+ cBgD_t* dzb2 = (cBgD_t*)dComIfG_getObjectRes(l_arcName, 12);
+ if (mBgw[1].Set(dzb2, dBgW::MOVE_BG_e, &mBgMtx)) {
+ return 0;
+ }
+
+ return 1;
+}
+
+/* 80C981D8-80C984C0 000078 02E8+00 1/1 0/0 0/0 .text createSolidHeap__FP10fopAc_ac_c */
+static int createSolidHeap(fopAc_ac_c* i_this) {
+ return static_cast<daObjMirrorSand_c*>(i_this)->createHeap();
+}
+
+/* 80C98508-80C98534 0003A8 002C+00 1/1 0/0 0/0 .text initBaseMtx__17daObjMirrorSand_cFv
+ */
+void daObjMirrorSand_c::initBaseMtx() {
+ fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
+ setBaseMtx();
+}
+
+/* 80C98534-80C98598 0003D4 0064+00 1/1 0/0 0/0 .text setBaseMtx__17daObjMirrorSand_cFv
+ */
+void daObjMirrorSand_c::setBaseMtx() {
+ mDoMtx_stack_c::transS(current.pos);
+ mDoMtx_stack_c::ZXYrotM(shape_angle);
+
+ mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
+ cMtx_copy(mDoMtx_stack_c::get(), mBgMtx);
+ mpCurrentBgw->Move();
+}
+
+int daObjMirrorSand_c::draw() {
+ g_env_light.settingTevStruct(0x10, &current.pos, &tevStr);
+ g_env_light.setLightTevColorType_MAJI(mpModel, &tevStr);
+
+ mpBck->entry(mpModel->getModelData());
+
+ dComIfGd_setListBG();
+ mDoExt_modelUpdateDL(mpModel);
+ dComIfGd_setList();
+
+ mpBck->remove(mpModel->getModelData());
+ return 1;
+}
+
+/* 80C98598-80C98668 000438 00D0+00 1/0 0/0 0/0 .text daObjMirrorSand_Draw__FP17daObjMirrorSand_c
+ */
+static int daObjMirrorSand_Draw(daObjMirrorSand_c* i_this) {
+ return i_this->draw();
+}
+
+int daObjMirrorSand_c::execute() {
+ mpBck->play();
+
+ if (mpCurrentBgw == &mBgw[0] && mpBck->getPlaySpeed() > 0.0f) {
+ dComIfG_Bgsp().Release(&mBgw[0]);
+ dComIfG_Bgsp().Regist(&mBgw[1], this);
+ mpCurrentBgw = &mBgw[1];
+ mpCurrentBgw->Move();
+ }
+
+ return 1;
+}
+
+/* 80C98668-80C98700 000508 0098+00 1/0 0/0 0/0 .text
+ * daObjMirrorSand_Execute__FP17daObjMirrorSand_c */
+static int daObjMirrorSand_Execute(daObjMirrorSand_c* i_this) {
+ return i_this->execute();
+}
+
+/* 80C98700-80C98708 0005A0 0008+00 1/0 0/0 0/0 .text
+ * daObjMirrorSand_IsDelete__FP17daObjMirrorSand_c */
+static int daObjMirrorSand_IsDelete(daObjMirrorSand_c* i_this) {
+ return 1;
+}
+
+daObjMirrorSand_c::~daObjMirrorSand_c() {
+ if (mBgw[0].ChkUsed()) {
+ dComIfG_Bgsp().Release(&mBgw[0]);
+ }
+
+ if (mBgw[1].ChkUsed()) {
+ dComIfG_Bgsp().Release(&mBgw[1]);
+ }
+
+ dComIfG_resDelete(&mPhase, l_arcName);
+}
+
+/* 80C98708-80C987B8 0005A8 00B0+00 1/0 0/0 0/0 .text
+ * daObjMirrorSand_Delete__FP17daObjMirrorSand_c */
+static int daObjMirrorSand_Delete(daObjMirrorSand_c* i_this) {
+ i_this->~daObjMirrorSand_c();
+ return 1;
+}
+
+void daObjMirrorSand_c::create_init() {
+ fopAcM_setCullSizeBox2(this, mpModel->getModelData());
+ mpBck->setPlaySpeed(0.0f);
+
+ mBgw[0].SetCrrFunc(NULL);
+ mBgw[0].SetRoomId(fopAcM_GetRoomNo(this));
+ mBgw[1].SetCrrFunc(NULL);
+ mBgw[1].SetRoomId(fopAcM_GetRoomNo(this));
+
+ dBgW* current_bgw;
+ if (isSwitch()) {
+ current_bgw = &mBgw[1];
+ } else {
+ current_bgw = &mBgw[0];
+ }
+
+ mpCurrentBgw = current_bgw;
+ dComIfG_Bgsp().Regist(mpCurrentBgw, this);
+ initBaseMtx();
+}
+
+int daObjMirrorSand_c::create() {
+ fopAcM_SetupActor(this, daObjMirrorSand_c);
+
+ int phase = dComIfG_resLoad(&mPhase, l_arcName);
+ if (phase == cPhs_COMPLEATE_e) {
+ if (!fopAcM_entrySolidHeap(this, createSolidHeap, 0x1AD0)) {
+ return cPhs_ERROR_e;
+ }
+
+ create_init();
+ }
+
+ return phase;
+}
+
+/* 80C98818-80C989D0 0006B8 01B8+00 1/0 0/0 0/0 .text daObjMirrorSand_Create__FP10fopAc_ac_c */
+static int daObjMirrorSand_Create(fopAc_ac_c* i_this) {
+ return static_cast<daObjMirrorSand_c*>(i_this)->create();
+}
+
+/* 80C989F4-80C98A14 -00001 0020+00 1/0 0/0 0/0 .data l_daObjMirrorSand_Method */
+static actor_method_class l_daObjMirrorSand_Method = {
+ (process_method_func)daObjMirrorSand_Create, (process_method_func)daObjMirrorSand_Delete,
+ (process_method_func)daObjMirrorSand_Execute, (process_method_func)daObjMirrorSand_IsDelete,
+ (process_method_func)daObjMirrorSand_Draw,
+};
+
+/* 80C98A14-80C98A44 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_MirrorSand */
+extern actor_process_profile_definition g_profile_Obj_MirrorSand = {
+ fpcLy_CURRENT_e,
+ 3,
+ fpcPi_CURRENT_e,
+ PROC_Obj_MirrorSand,
+ &g_fpcLf_Method.mBase,
+ sizeof(daObjMirrorSand_c),
+ 0,
+ 0,
+ &g_fopAc_Method.base,
+ 679,
+ &l_daObjMirrorSand_Method,
+ 0x40000,
+ fopAc_ACTOR_e,
+ fopAc_CULLBOX_CUSTOM_e,
+}; \ No newline at end of file