summaryrefslogtreecommitdiff
path: root/src/d/d_shop_item_ctrl.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/d_shop_item_ctrl.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/d_shop_item_ctrl.cpp')
-rw-r--r--src/d/d_shop_item_ctrl.cpp118
1 files changed, 118 insertions, 0 deletions
diff --git a/src/d/d_shop_item_ctrl.cpp b/src/d/d_shop_item_ctrl.cpp
new file mode 100644
index 0000000000..e29dda72dc
--- /dev/null
+++ b/src/d/d_shop_item_ctrl.cpp
@@ -0,0 +1,118 @@
+//
+// d/shop/d_shop_item_ctrl
+//
+
+#include "d/d_shop_item_ctrl.h"
+#include "SSystem/SComponent/c_lib.h"
+#include "d/d_a_shop_item_static.h"
+
+/* 80196914-80196958 191254 0044+00 0/0 0/0 10/10 .text __ct__15dShopItemCtrl_cFv */
+dShopItemCtrl_c::dShopItemCtrl_c() {
+ for (int i = 0; i < 7; i++) {
+ mItemIndex[i] = -1;
+ mMessageIndex[i] = 0;
+ }
+}
+
+/* 80196958-801969A0 191298 0048+00 1/0 1/1 0/0 .text __dt__15dShopItemCtrl_cFv */
+dShopItemCtrl_c::~dShopItemCtrl_c() {}
+
+/* 801969A0-80196A3C 1912E0 009C+00 0/0 3/3 3/3 .text getCurrentPos__15dShopItemCtrl_cFi
+ */
+cXyz dShopItemCtrl_c::getCurrentPos(int i_itemIdx) {
+ cXyz item_pos(0.0f, 0.0f, 0.0f);
+
+ if (mItemIndex[i_itemIdx] != -1) {
+ fopAc_ac_c* item = fopAcM_SearchByID(mItemIndex[i_itemIdx]);
+ if (item != NULL) {
+ item_pos.set(item->current.pos);
+ }
+ }
+
+ return item_pos;
+}
+
+/* 80196A3C-80196AF0 19137C 00B4+00 0/0 2/2 0/0 .text isHomePos__15dShopItemCtrl_cFi */
+bool dShopItemCtrl_c::isHomePos(int i_itemIdx) {
+ if (i_itemIdx >= 0 && i_itemIdx < 7 && mItemIndex[i_itemIdx] != -1) {
+ daShopItem_c* item = (daShopItem_c*)fopAcM_SearchByID(mItemIndex[i_itemIdx]);
+ if (item != NULL) {
+ cXyz* item_pos = item->getPosP();
+ cXyz item_home = item->home.pos;
+
+ if (item_pos->x == item_home.x && item_pos->y == item_home.y &&
+ item_pos->z == item_home.z)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+/* 80196AF0-80196BA4 191430 00B4+00 0/0 1/1 0/0 .text setRotateAnime__15dShopItemCtrl_cFi
+ */
+void dShopItemCtrl_c::setRotateAnime(int i_itemIdx) {
+ for (int i = 0; i < 7; i++) {
+ if (mItemIndex[i] != -1) {
+ daShopItem_c* item = (daShopItem_c*)fopAcM_SearchByID(mItemIndex[i]);
+ if (item != NULL) {
+ csXyz* item_rot = item->getRotateP();
+
+ if (i == i_itemIdx - 1) {
+ item_rot->y += 0x200;
+ } else {
+ cLib_addCalcAngleS(&item_rot->y, item->home.angle.y, 4, 0x800, 0x80);
+ }
+ }
+ }
+ }
+}
+
+/* 80196BA4-80197098 1914E4 04F4+00 0/0 1/1 0/0 .text setZoomAnime__15dShopItemCtrl_cFiP4cXyzsb */
+void dShopItemCtrl_c::setZoomAnime(int param_1, cXyz* param_2, s16 param_3, bool param_4) {
+ for (int i = 0; i < 7; i++) {
+ if (mItemIndex[i] == -1) {
+ continue;
+ }
+
+ daShopItem_c* shopItem = (daShopItem_c*)fopAcM_SearchByID(mItemIndex[i]);
+ if (shopItem == NULL) {
+ continue;
+ }
+
+ cXyz* pos_p = shopItem->getPosP();
+ cXyz target_pos = shopItem->home.pos;
+ cXyz cStack_50 = *param_2 - target_pos;
+ s16 x_angle = shopItem->getAngleX();
+ s16 y_angle = shopItem->getAngleY();
+
+ if (i == param_1 - 1 && param_4 == true) {
+ cLib_addCalcPos2(pos_p, *param_2, 0.5f, 0.05f * cStack_50.abs());
+ cLib_addCalcAngleS(&x_angle, param_3, 4, 0x800, 0x80);
+ shopItem->setAngleX(x_angle);
+ cLib_addCalcAngleS(&y_angle, shopItem->home.angle.y, 4, 0x800, 0x80);
+ shopItem->setAngleY(y_angle);
+ } else {
+ cLib_addCalcPos2(pos_p, target_pos, 0.5f, 0.1f * cStack_50.abs());
+ cXyz cStack_5c = *pos_p - target_pos;
+ if (cStack_5c.abs() < 0.01f) {
+ pos_p->set(shopItem->home.pos);
+ }
+
+ cLib_addCalcAngleS(&x_angle, 0, 4, 0x800, 0x80);
+ if (x_angle <= 0x80) {
+ x_angle = 0;
+ }
+
+ shopItem->setAngleX(x_angle);
+ cLib_addCalcAngleS(&y_angle, 0, 4, 0x800, 0x80);
+ if (y_angle <= 0x80) {
+ y_angle = 0;
+ }
+
+ shopItem->setAngleY(y_angle);
+ }
+ }
+} \ No newline at end of file