From 12eb254d769d84743b5cc6cd5424057c57eaf0ad Mon Sep 17 00:00:00 2001 From: TakaRikka <38417346+TakaRikka@users.noreply.github.com> Date: Thu, 10 Oct 2024 07:29:58 -0700 Subject: 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 --- src/d/d_shop_camera.cpp | 307 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 src/d/d_shop_camera.cpp (limited to 'src/d/d_shop_camera.cpp') diff --git a/src/d/d_shop_camera.cpp b/src/d/d_shop_camera.cpp new file mode 100644 index 0000000000..abc0e7bea5 --- /dev/null +++ b/src/d/d_shop_camera.cpp @@ -0,0 +1,307 @@ +/** + * d_shop_camera.cpp + * Shop Camera Handling + */ + +#include "d/d_shop_camera.h" +#include "SSystem/SComponent/c_math.h" +#include "d/actor/d_a_player.h" +#include "d/d_com_inf_game.h" + +struct SeiraCam { + /* 0x00 */ Vec field_0x0; + /* 0x0C */ Vec field_0xc; + /* 0x18 */ f32 field_0x18; + /* 0x1c */ Vec field_0x1c; + /* 0x20 */ Vec field_0x28; + /* 0x18 */ f32 field_0x34; +}; + +/* 803BB7C8-803BB800 0188E8 0038+00 1/0 0/0 0/0 .data cam_seira_shop */ +static SeiraCam cam_seira_shop = { + {0.0f, 115.0f, 0.0f}, {0.0f, 115.0f, 150.0f}, 45.0f, + {100.0f, 155.0f, -175.0f}, {100.0f, 155.0f, 0.0f}, 45.0f, +}; + +/* 803BB800-803BB838 018920 0038+00 1/0 0/0 0/0 .data cam_seira_evnt_before */ +static SeiraCam cam_seira_evnt_before = { + {-50.0f, 115.0f, 0.0f}, {-50.0f, 115.0f, 150.0f}, 45.0f, + {100.0f, 155.0f, -175.0f}, {100.0f, 155.0f, 0.0f}, 45.0f, +}; + +/* 803BB838-803BB870 018958 0038+00 1/0 0/0 0/0 .data cam_seira_evnt_after */ +static SeiraCam cam_seira_evnt_after = { + {0.0f, 115.0f, 0.0f}, {0.0f, 115.0f, 150.0f}, 45.0f, + {100.0f, 155.0f, -175.0f}, {100.0f, 155.0f, 0.0f}, 45.0f, +}; + +/* 803BB870-803BB87C -00001 000C+00 2/2 0/0 0/0 .data shop_cam_data_tbl */ +static SeiraCam* shop_cam_data_tbl[3] = { + &cam_seira_shop, + &cam_seira_evnt_before, + &cam_seira_evnt_after, +}; + +/* 80195C9C-80195E18 1905DC 017C+00 0/0 0/0 9/9 .text shop_cam_action_init__16ShopCam_action_cFv + */ +int ShopCam_action_c::shop_cam_action_init() { + Save(); + + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + player->onPlayerNoDraw(); + + setCamAction(&ShopCam_action_c::shop_cam_action); + if (field_0xd6 >= 0) { + field_0x7c = shop_cam_data_tbl[field_0xd6]->field_0x0; + field_0x88 = shop_cam_data_tbl[field_0xd6]->field_0xc; + field_0x94 = shop_cam_data_tbl[field_0xd6]->field_0x18; + } else if (field_0xd4 <= 0) { + field_0x7c = field_0x38; + field_0x88 = field_0x44; + field_0x94 = field_0x50; + } else { + field_0x7c = field_0x54; + field_0x88 = field_0x60; + field_0x94 = field_0x6c; + } + + SetSelectIdx(-1); + return 1; +} + +/* 80195E18-8019630C 190758 04F4+00 1/0 0/0 0/0 .text shop_cam_action__16ShopCam_action_cFv */ +int ShopCam_action_c::shop_cam_action() { + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera->mCamera.Stay(); + camera->mCamera.SetTrimSize(1); + + cXyz acStack_4c; + cXyz acStack_58; + f32 dVar11; + if (field_0xd4 <= 0) { + if (field_0xd6 >= 0) { + acStack_4c = shop_cam_data_tbl[field_0xd6]->field_0x0; + acStack_58 = shop_cam_data_tbl[field_0xd6]->field_0xc; + dVar11 = shop_cam_data_tbl[field_0xd6]->field_0x18; + } else { + acStack_4c = field_0x38; + acStack_58 = field_0x44; + dVar11 = field_0x50; + } + } else if (field_0xd6 >= 0) { + acStack_4c = shop_cam_data_tbl[field_0xd6]->field_0x1c; + acStack_58 = shop_cam_data_tbl[field_0xd6]->field_0x28; + dVar11 = shop_cam_data_tbl[field_0xd6]->field_0x34; + } else { + acStack_4c = field_0x54; + acStack_58 = field_0x60; + dVar11 = field_0x6c; + } + + cLib_addCalcPos2(&field_0x7c, acStack_4c, field_0xc0, field_0xc4); + cLib_addCalcPos2(&field_0x88, acStack_58, field_0xc0, field_0xc4); + cLib_addCalc2(&field_0x94, dVar11, field_0xc8, field_0xcc); + + cXyz cStack_64 = field_0x7c - acStack_4c; + cXyz cStack_70 = field_0x88 - acStack_58; + f32 dVar10 = field_0x94 - dVar11; + bool r30 = false; + bool r29 = false; + bool r28 = false; + + if (cStack_64.abs() < 1.0f) { + field_0x7c = acStack_4c; + r30 = true; + } + + if (cStack_70.abs() < 1.0f) { + field_0x88 = acStack_58; + r29 = true; + } + + if (dVar10 < 1.0f) { + field_0x94 = dVar11; + r28 = true; + } + + if (r30 && r29 && r28) { + field_0xda = true; + } else { + field_0xda = false; + } + + camera->mCamera.Set(field_0x7c, field_0x88, field_0x94, 0); + return 1; +} + +/* 8019630C-8019635C 190C4C 0050+00 1/1 0/0 12/12 .text Save__16ShopCam_action_cFv */ +void ShopCam_action_c::Save() { + camera_class* camera = dComIfGp_getCamera(0); + if (camera != NULL) { + field_0x98 = *fopCamM_GetCenter_p(camera); + field_0xa4 = *fopCamM_GetEye_p(camera); + field_0xbc = fopCamM_GetFovy(camera); + } +} + +/* 8019635C-801963B4 190C9C 0058+00 0/0 0/0 9/9 .text EventRecoverNotime__16ShopCam_action_cFv */ +void ShopCam_action_c::EventRecoverNotime() { + dComIfGp_getPlayer(0); + field_0xd8 = 2; + dCam_getBody()->EventRecoverNotime(); + mCamAction = NULL; +} + +/* 801963B4-801964C8 190CF4 0114+00 0/0 0/0 9/9 .text Reset__16ShopCam_action_cFv */ +void ShopCam_action_c::Reset() { + daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + player->offPlayerNoDraw(); + + camera_class* camera = dComIfGp_getCamera(dComIfGp_getPlayerCameraID(0)); + camera->mCamera.Set(field_0x98, field_0xa4, field_0xbc, 0); + camera->mCamera.Stay(); + camera->mCamera.Reset(field_0x98, field_0xa4, field_0xbc, 0); + + mCamAction = NULL; +} + +/* 801964C8-80196544 190E08 007C+00 0/0 0/0 9/9 .text move__16ShopCam_action_cFv */ +void ShopCam_action_c::move() { + if (mCamAction != NULL) { + (this->*mCamAction)(); + } + + if (field_0xd8 > 0) { + --field_0xd8; + if (field_0xd8 == 0) { + ((daPy_py_c*)dComIfGp_getPlayer(0))->offPlayerNoDraw(); + } + } +} + +/* 80196544-80196608 190E84 00C4+00 0/0 1/1 0/0 .text + * setCamDataIdx__16ShopCam_action_cFP10fopAc_ac_cP10fopAc_ac_cP10fopAc_ac_cP10fopAc_ac_cP4cXyzP4cXyz + */ +void ShopCam_action_c::setCamDataIdx(fopAc_ac_c* param_1, fopAc_ac_c* param_2, fopAc_ac_c* param_3, + fopAc_ac_c* param_4, cXyz* param_5, cXyz* param_6) { + field_0xd6 = -1; + if (field_0x18 == NULL) { + field_0xb0 = param_1->eyePos; + } + + field_0x18 = param_1; + field_0x1c = param_2; + field_0x20 = param_3; + field_0x24 = param_4; + field_0x28 = 0; + field_0x2c = 0; + field_0x30 = 0; + field_0x34 = 0; + + field_0x44.x = param_5->x; + field_0x44.y = param_5->y; + field_0x44.z = param_5->z; + field_0x50 = 45.0f; + + field_0x60.x = param_6->x; + field_0x60.y = param_6->y; + field_0x60.z = param_6->z; + field_0x6c = 45.0f; + + field_0x70.set(*param_6); + + _debugSetCamera(); +} + +/* 80196608-801966D4 190F48 00CC+00 0/0 1/1 0/0 .text + * setCamDataIdx2__16ShopCam_action_cFP10fopAc_ac_cP10fopAc_ac_cP10fopAc_ac_cP10fopAc_ac_cP10fopAc_ac_cP10fopAc_ac_cP10fopAc_ac_cP4cXyzP4cXyz + */ +void ShopCam_action_c::setCamDataIdx2(fopAc_ac_c* param_1, fopAc_ac_c* param_2, fopAc_ac_c* param_3, + fopAc_ac_c* param_4, fopAc_ac_c* param_5, fopAc_ac_c* param_6, + fopAc_ac_c* param_7, cXyz* param_8, cXyz* param_9) { + field_0xd6 = -1; + if (field_0x18 == NULL) { + field_0xb0 = param_1->eyePos; + } + + field_0x18 = param_1; + field_0x1c = param_2; + field_0x20 = param_3; + field_0x24 = param_4; + field_0x28 = param_5; + field_0x2c = param_6; + field_0x30 = param_7; + field_0x34 = 0; + + field_0x44.x = param_8->x; + field_0x44.y = param_8->y; + field_0x44.z = param_8->z; + field_0x50 = 45.0f; + + field_0x60.x = param_9->x; + field_0x60.y = param_9->y; + field_0x60.z = param_9->z; + field_0x6c = 45.0f; + + field_0x70.set(*param_9); + + _debugSetCamera(); +} + +/* 801966D4-801968B8 191014 01E4+00 2/2 0/0 0/0 .text _debugSetCamera__16ShopCam_action_cFv */ +void ShopCam_action_c::_debugSetCamera() { + field_0x38.x = field_0xb0.x; + field_0x38.y = field_0xb0.y; + field_0x38.z = field_0xb0.z; + + cXyz local_28; + cXyz cStack_34; + cXyz local_40; + cXyz local_4c; + bool bVar1 = false; + + if (field_0x1c != NULL && field_0x20 != NULL && field_0x24 != NULL && field_0x28 != NULL && + field_0x2c == NULL && field_0x30 == NULL) + { + local_4c.x = (field_0x24->home.pos.x + field_0x20->home.pos.x) / 2; + local_4c.y = (field_0x24->home.pos.y + field_0x20->home.pos.y) / 2; + local_4c.z = (field_0x24->home.pos.z + field_0x20->home.pos.z) / 2; + } else { + if (field_0x1c != NULL && field_0x20 != NULL && field_0x24 != NULL && field_0x28 != NULL && + field_0x2c != NULL && field_0x30 == NULL) + { + local_4c.set(field_0x28->home.pos); + bVar1 = true; + } else { + local_4c.set(field_0x20->home.pos); + } + } + + if (bVar1) { + field_0x54.x = 167.0f; + field_0x54.y = 220.0f; + field_0x54.z = 120.0f; + } else { + local_28 = local_4c - field_0x70; + s16 sVar2 = cM_atan2s(local_28.x, local_28.z); + cStack_34.set(0.0f, -50.0f, 350.0f); + cLib_offsetPos(&local_40, &field_0x70, sVar2, &cStack_34); + field_0x54.x = local_40.x; + field_0x54.y = local_40.y; + field_0x54.z = local_40.z; + } +} + +/* 801968B8-80196914 1911F8 005C+00 0/0 1/1 3/3 .text + * setMasterCamCtrPos__16ShopCam_action_cFP4cXyz */ +void ShopCam_action_c::setMasterCamCtrPos(cXyz* param_0) { + if (param_0 == NULL) { + field_0xb0.set(field_0x18->eyePos); + } else { + field_0xb0.set(*param_0); + } + + field_0x38.x = field_0xb0.x; + field_0x38.y = field_0xb0.y; + field_0x38.z = field_0xb0.z; +} \ No newline at end of file -- cgit v1.2.3