It's always the last function

This commit is contained in:
robojumper
2025-04-18 19:36:20 +02:00
parent 0592075008
commit cd7e0d47a9
6 changed files with 1062 additions and 107 deletions
+3
View File
@@ -2,6 +2,7 @@
#define D_LYT_DROP_LINE_H
#include "common.h"
#include "d/a/d_a_item.h"
#include "nw4r/lyt/lyt_pane.h"
class dLytDropLine_c {
@@ -19,6 +20,8 @@ public:
static nw4r::lyt::Pane *getActivePane();
static nw4r::lyt::Pane *setPane(nw4r::lyt::Pane *pane);
static nw4r::lyt::Pane *update(nw4r::lyt::Pane *pane, nw4r::lyt::Pane *otherPane, dAcItem_c::Trial_e, bool);
static bool finishPartMaybe();
private:
static dLytDropLine_c *sInstance;
+44
View File
@@ -47,6 +47,7 @@ public:
bool fn_800D5380(u8);
bool fn_800D5650();
bool fn_800D5680();
bool fn_800C9FE0();
bool isSilentRealm();
@@ -161,6 +162,7 @@ public:
bool draw();
bool fn_800D5670();
bool fn_800D97A0();
static dLytMeterContainer_c *GetInstance() {
return sInstance;
@@ -218,6 +220,27 @@ public:
}
}
static u8 getField_0x13B63() {
if (sInstance != nullptr) {
return sInstance->field_0x13B63;
} else {
return 0;
}
}
static void setField_0x13B61(u8 val) {
if (sInstance != nullptr) {
sInstance->field_0x13B61 = val;
}
}
static void setField_0x13B64(u8 val) {
if (sInstance != nullptr) {
sInstance->field_0x13B64 = val;
}
}
static u8 getDowsing0x550A() {
if (sInstance != nullptr) {
return sInstance->mMeter.mDowsing.getField_0x550A();
@@ -226,6 +249,22 @@ public:
}
}
static bool getfn_800C9FE0() {
if (sInstance != nullptr) {
return sInstance->mMeter.fn_800C9FE0();
} else {
return false;
}
}
static bool getfn_800D97A0() {
if (sInstance != nullptr) {
return sInstance->fn_800D97A0();
} else {
return false;
}
}
private:
/* 0x00004 */ d2d::ResAccIf_c mResAcc;
/* 0x00374 */ dLytMeterEventSkip_c *mpEventSkip;
@@ -236,6 +275,11 @@ private:
/* 0x13B48 */ bool mVisible;
/* 0x13B49 */ u8 _0x13B49[0x13B50 - 0x13B49];
/* 0x13B50 */ s32 mFlags;
/* 0x13B54 */ u8 _0x13B54[0x13B61 - 0x13B54];
/* 0x13B61 */ u8 field_0x13B61;
/* 0x13B62 */ u8 field_0x13B62;
/* 0x13B63 */ u8 field_0x13B63;
/* 0x13B64 */ u8 field_0x13B64;
static dLytMeterContainer_c *sInstance;
};
+109 -5
View File
@@ -46,23 +46,45 @@ public:
bool isAnyFruitAnimFinished();
bool isLastFruitAnimFinished();
bool isOutAnimFinished();
void startFruitAnim(s32 index);
void resetBowlNuts();
void updateDropLine(nw4r::lyt::Pane *pane);
void createEffect(s32 fruitIndex);
bool incrementTearCount();
bool isAnyFruitAnimAtFrame(f32 f) const;
s32 getActualTearCount() const {
return mActualTearCount;
}
s32 getDisplayedTearCount() const {
return mDisplayedTearCount;
}
s32 getField0x780() const {
return field_0x780;
}
void setField0x780(s32 val) {
field_0x780 = val;
}
private:
void initLoopAnim();
void initBowlNuts();
void resetBowlNuts();
void initOutAnim();
void initColors();
void initInAnim();
void startNextFruitAnim();
void disableCurrentFruitAnim();
static LytMeterTimerPart1_c *sInstance;
/* 0x008 */ d2d::dLytSub mLyt;
/* 0x09C */ d2d::AnmGroup_c mAnm[26];
/* 0x71C */ s32 mActualTearCount;
/* 0x720 */ u8 _0x720[0x724 - 0x720];
/* 0x720 */ s32 mDisplayedTearCount;
/* 0x724 */ nw4r::lyt::Pane *mpPanes[15];
/* 0x760 */ s32 field_0x760;
/* 0x764 */ dAcItem_c::Trial_e mTrial;
@@ -101,6 +123,20 @@ public:
mNumPetals = num;
}
s32 getNumPetals() const {
return mNumPetals;
}
nw4r::lyt::Pane *i_getPane() const {
return mpPane;
}
void setVisible(bool bVisible) {
mVisible = bVisible;
}
void calc();
void init();
void initDyingAnims();
void initFallOutAnims();
@@ -108,10 +144,37 @@ public:
void syncPetalsTime();
void updatePetalsRate();
void restartPetals();
void finishSingleAnim(u8 idx);
void resetSingleAnim(u8 idx);
void startInAnim();
void startOutAnim();
void stopInAnim();
void stopBloomAnim();
void stopBeforeFallAnim();
void stopChangeSirenAnim();
void stopSirenLoopAnim();
void stopSirenSafeAnim();
void stopFlowerLoopAnim();
void resetFlowerLoopAnim();
void stopDyingAnims();
void stopFinishedDyingAnims();
void stopFallOutAnims();
void stopFinishedFallOutAnims();
void stopOutAnim();
void stopChangeFruitAnim();
bool isInAnimFinished();
bool isBloomAnimFinished();
bool isBeforeFallAnimAtStart();
bool isChangeSirenAnimFinished();
bool isSirenSafeAnimFinished();
bool isFlowerLoopAnimFinished();
bool isOutAnimFinished();
bool isChangeFruitAnimFinished();
void realizeFruitsColor();
void finishDyingAnims();
void setPetalsToStart();
void enableChangeFruitAnim();
@@ -122,11 +185,21 @@ public:
void enableSafeAnim();
void resumeFlowerLoop();
void startFlowerLoop();
void syncTime();
void syncTimeWithSafe();
/** Played when the finish animation is played and each tear hits the flower */
void createSingleFruitEffect();
/** Played when the whole fruit is finished */
void createFruitCompleteEffect();
void initBeforeFallAnim();
bool isPetalDyingAnimFinished();
bool isFirstFallOutAnimFinished();
void initChangeSirenAnim();
private:
void initBloomAnim();
void initBeforeFallAnim();
void initChangeSirenAnim();
void initSirenLoopAnim();
void initSirenSafeAnim();
void initFlowerLoopAnim();
@@ -154,8 +227,27 @@ public:
virtual ~dLytMeterTimer_c() {}
bool build();
bool remove();
bool execute();
private:
bool startIn2();
bool startOut2();
void startIn();
void gotoChangeSiren();
void gotoSiren();
void gotoChangeSafeBloom();
void gotoChangeSafe();
void gotoSafe();
void gotoChangeFruits6();
void gotoFruits();
void startOut();
void gotoChangeFruits3();
void startSafe();
void doPickup();
bool isInSiren();
s32 getPetalForTimerMaybe(s32 time);
bool checkForPetalChangeMaybe();
STATE_FUNC_DECLARE(dLytMeterTimer_c, ChangeSiren);
STATE_FUNC_DECLARE(dLytMeterTimer_c, Siren);
STATE_FUNC_DECLARE(dLytMeterTimer_c, ChangeSafeBloom);
@@ -168,10 +260,22 @@ private:
static bool sDoFinishAnim;
static bool sFinished;
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterTimer_c);
STATE_MGR_DEFINE_UTIL_ISSTATE(dLytMeterTimer_c);
/* 0x04 */ UI_STATE_MGR_DECLARE(dLytMeterTimer_c);
/* 0x40 */ LytMeterTimerPart1_c *mpPart1;
/* 0x44 */ LytMeterTimerPart2_c *mpPart2;
/* 0x48 */ u8 _0x48[0x60 - 0x48];
/* 0x48 */ u8 field_0x48;
/* 0x4C */ s32 mActualTime;
/* 0x50 */ s32 mLastTime;
/* 0x54 */ u8 field_0x54;
/* 0x55 */ u8 field_0x55;
/* 0x56 */ u8 field_0x56;
/* 0x57 */ u8 field_0x57;
/* 0x58 */ u8 field_0x58;
/* 0x59 */ u8 field_0x59;
/* 0x5C */ s32 field_0x5C;
/* 0x60 */ s32 field_0x60;
};