mirror of
https://github.com/zeldaret/ss
synced 2026-07-08 13:56:15 -04:00
d_lyt_meter_rupy except for the hard part
This commit is contained in:
@@ -418,7 +418,10 @@ d/lyt/meter/d_lyt_meter_dowsing.cpp:
|
||||
d/lyt/meter/d_lyt_meter_rupy.cpp:
|
||||
.text start:0x801003F0 end:0x801026A8
|
||||
.ctors start:0x804DB714 end:0x804DB718
|
||||
.rodata start:0x804E6928 end:0x804E69D8
|
||||
.data start:0x80518A60 end:0x80518F00
|
||||
.sdata2 start:0x80579C48 end:0x80579C78
|
||||
.bss start:0x805AC550 end:0x805AC750
|
||||
|
||||
d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp:
|
||||
.text start:0x801026B0 end:0x80105548
|
||||
|
||||
+42
-42
@@ -6211,47 +6211,47 @@ isSameName__37sFStateID_c<22dLytMeterDowsingText_c>CFPCc = .text:0x801001B0; //
|
||||
isSameName__38sFStateID_c<23dLytMeterDowsingInput_c>CFPCc = .text:0x80100240; // type:function size:0x88
|
||||
isSameName__38sFStateID_c<23dLytMeterDowsingBlink_c>CFPCc = .text:0x801002D0; // type:function size:0x88
|
||||
isSameName__41sFStateID_c<26dLytMeterDowsingMenuIcon_c>CFPCc = .text:0x80100360; // type:function size:0x88
|
||||
fn_801003F0 = .text:0x801003F0; // type:function size:0x4
|
||||
fn_80100400 = .text:0x80100400; // type:function size:0x8C
|
||||
fn_80100490 = .text:0x80100490; // type:function size:0x4
|
||||
fn_801004A0 = .text:0x801004A0; // type:function size:0x4
|
||||
fn_801004B0 = .text:0x801004B0; // type:function size:0xA4
|
||||
fn_80100560 = .text:0x80100560; // type:function size:0x4
|
||||
fn_80100570 = .text:0x80100570; // type:function size:0x20
|
||||
fn_80100590 = .text:0x80100590; // type:function size:0x10
|
||||
fn_801005A0 = .text:0x801005A0; // type:function size:0x4
|
||||
fn_801005B0 = .text:0x801005B0; // type:function size:0x8C
|
||||
fn_80100640 = .text:0x80100640; // type:function size:0x4
|
||||
fn_80100650 = .text:0x80100650; // type:function size:0x4
|
||||
fn_80100660 = .text:0x80100660; // type:function size:0x104
|
||||
fn_80100770 = .text:0x80100770; // type:function size:0x4
|
||||
fn_80100780 = .text:0x80100780; // type:function size:0x24
|
||||
fn_801007B0 = .text:0x801007B0; // type:function size:0x10
|
||||
fn_801007C0 = .text:0x801007C0; // type:function size:0x164
|
||||
fn_80100930 = .text:0x80100930; // type:function size:0x78
|
||||
fn_801009B0 = .text:0x801009B0; // type:function size:0x4
|
||||
fn_801009C0 = .text:0x801009C0; // type:function size:0x4
|
||||
fn_801009D0 = .text:0x801009D0; // type:function size:0x74
|
||||
fn_80100A50 = .text:0x80100A50; // type:function size:0x4
|
||||
fn_80100A60 = .text:0x80100A60; // type:function size:0x58
|
||||
fn_80100AC0 = .text:0x80100AC0; // type:function size:0xA8
|
||||
fn_80100B70 = .text:0x80100B70; // type:function size:0x4
|
||||
fn_80100B80 = .text:0x80100B80; // type:function size:0xB8
|
||||
fn_80100C40 = .text:0x80100C40; // type:function size:0xAC
|
||||
fn_80100CF0 = .text:0x80100CF0; // type:function size:0x4
|
||||
fn_80100D00 = .text:0x80100D00; // type:function size:0x310
|
||||
fn_80101010 = .text:0x80101010; // type:function size:0x58
|
||||
fn_80101070 = .text:0x80101070; // type:function size:0x1B0
|
||||
fn_80101220 = .text:0x80101220; // type:function size:0x5C
|
||||
fn_80101280 = .text:0x80101280; // type:function size:0x34
|
||||
fn_801012C0 = .text:0x801012C0; // type:function size:0xB0
|
||||
fn_80101370 = .text:0x80101370; // type:function size:0x74
|
||||
fn_801013F0 = .text:0x801013F0; // type:function size:0x5C8
|
||||
fn_801019C0 = .text:0x801019C0; // type:function size:0x24C
|
||||
fn_80101C10 = .text:0x80101C10; // type:function size:0x158
|
||||
fn_80101D70 = .text:0x80101D70; // type:function size:0x8
|
||||
fn_80101D80 = .text:0x80101D80; // type:function size:0x8
|
||||
fn_80101D90 = .text:0x80101D90; // type:function size:0x8
|
||||
initializeState_Wait__20dLytMeterRupyStart_cFv = .text:0x801003F0; // type:function size:0x4
|
||||
executeState_Wait__20dLytMeterRupyStart_cFv = .text:0x80100400; // type:function size:0x8C
|
||||
finalizeState_Wait__20dLytMeterRupyStart_cFv = .text:0x80100490; // type:function size:0x4
|
||||
initializeState_Start__20dLytMeterRupyStart_cFv = .text:0x801004A0; // type:function size:0x4
|
||||
executeState_Start__20dLytMeterRupyStart_cFv = .text:0x801004B0; // type:function size:0xA4
|
||||
finalizeState_Start__20dLytMeterRupyStart_cFv = .text:0x80100560; // type:function size:0x4
|
||||
init__20dLytMeterRupyStart_cFv = .text:0x80100570; // type:function size:0x20
|
||||
execute__20dLytMeterRupyStart_cFv = .text:0x80100590; // type:function size:0x10
|
||||
initializeState_Wait__20dLytMeterRupyBlink_cFv = .text:0x801005A0; // type:function size:0x4
|
||||
executeState_Wait__20dLytMeterRupyBlink_cFv = .text:0x801005B0; // type:function size:0x8C
|
||||
finalizeState_Wait__20dLytMeterRupyBlink_cFv = .text:0x80100640; // type:function size:0x4
|
||||
initializeState_Flash__20dLytMeterRupyBlink_cFv = .text:0x80100650; // type:function size:0x4
|
||||
executeState_Flash__20dLytMeterRupyBlink_cFv = .text:0x80100660; // type:function size:0x104
|
||||
finalizeState_Flash__20dLytMeterRupyBlink_cFv = .text:0x80100770; // type:function size:0x4
|
||||
init__20dLytMeterRupyBlink_cFv = .text:0x80100780; // type:function size:0x24
|
||||
execute__20dLytMeterRupyBlink_cFv = .text:0x801007B0; // type:function size:0x10
|
||||
initializeState_In__15dLytMeterRupy_cFv = .text:0x801007C0; // type:function size:0x164
|
||||
executeState_In__15dLytMeterRupy_cFv = .text:0x80100930; // type:function size:0x78
|
||||
finalizeState_In__15dLytMeterRupy_cFv = .text:0x801009B0; // type:function size:0x4
|
||||
initializeState_Active__15dLytMeterRupy_cFv = .text:0x801009C0; // type:function size:0x4
|
||||
executeState_Active__15dLytMeterRupy_cFv = .text:0x801009D0; // type:function size:0x74
|
||||
finalizeState_Active__15dLytMeterRupy_cFv = .text:0x80100A50; // type:function size:0x4
|
||||
initializeState_Start__15dLytMeterRupy_cFv = .text:0x80100A60; // type:function size:0x58
|
||||
executeState_Start__15dLytMeterRupy_cFv = .text:0x80100AC0; // type:function size:0xA8
|
||||
finalizeState_Start__15dLytMeterRupy_cFv = .text:0x80100B70; // type:function size:0x4
|
||||
initializeState_Out__15dLytMeterRupy_cFv = .text:0x80100B80; // type:function size:0xB8
|
||||
executeState_Out__15dLytMeterRupy_cFv = .text:0x80100C40; // type:function size:0xAC
|
||||
finalizeState_Out__15dLytMeterRupy_cFv = .text:0x80100CF0; // type:function size:0x4
|
||||
build__15dLytMeterRupy_cFPQ23d2d10ResAccIf_c = .text:0x80100D00; // type:function size:0x310
|
||||
remove__15dLytMeterRupy_cFv = .text:0x80101010; // type:function size:0x58
|
||||
execute__15dLytMeterRupy_cFv = .text:0x80101070; // type:function size:0x1B0
|
||||
hasChangeInRupees__15dLytMeterRupy_cCFv = .text:0x80101220; // type:function size:0x5C
|
||||
getRupeeDifference__15dLytMeterRupy_cCFv = .text:0x80101280; // type:function size:0x34
|
||||
getLastVisibleDigitPosition__15dLytMeterRupy_cFv = .text:0x801012C0; // type:function size:0xB0
|
||||
setDigit__15dLytMeterRupy_cFll = .text:0x80101370; // type:function size:0x74
|
||||
updateDisplayedAmount__15dLytMeterRupy_cFb = .text:0x801013F0; // type:function size:0x5C8
|
||||
executeDigitJump__15dLytMeterRupy_cFv = .text:0x801019C0; // type:function size:0x24C
|
||||
executeDigitBlink__15dLytMeterRupy_cFl = .text:0x80101C10; // type:function size:0x158
|
||||
getName__15dLytMeterRupy_cCFv = .text:0x80101D70; // type:function size:0x8
|
||||
getLyt__15dLytMeterRupy_cFv = .text:0x80101D80; // type:function size:0x8
|
||||
getPane__15dLytMeterRupy_cFv = .text:0x80101D90; // type:function size:0x8
|
||||
__sinit_\d_lyt_meter_rupy_cpp = .text:0x80101DA0; // type:function size:0x640 scope:local
|
||||
__dt__35sFStateID_c<20dLytMeterRupyStart_c>Fv = .text:0x801023E0; // type:function size:0x58
|
||||
__dt__35sFStateID_c<20dLytMeterRupyBlink_c>Fv = .text:0x80102440; // type:function size:0x58
|
||||
@@ -31698,7 +31698,7 @@ lbl_80518BC4 = .data:0x80518BC4; // type:object size:0xC
|
||||
lbl_80518BD0 = .data:0x80518BD0; // type:object size:0x10
|
||||
lbl_80518BE0 = .data:0x80518BE0; // type:object size:0x10 data:4byte
|
||||
lbl_80518BF0 = .data:0x80518BF0; // type:object size:0x10
|
||||
__vt__15dLytMeterRupy_c = .data:0x80518C00; // type:object size:0x260
|
||||
__vt__15dLytMeterRupy_c = .data:0x80518C00; // type:object size:0x34
|
||||
__vt__30sFStateID_c<15dLytMeterRupy_c> = .data:0x80518E60; // type:object size:0x34
|
||||
__vt__35sFStateID_c<20dLytMeterRupyBlink_c> = .data:0x80518E94; // type:object size:0x34
|
||||
__vt__35sFStateID_c<20dLytMeterRupyStart_c> = .data:0x80518EC8; // type:object size:0x34
|
||||
|
||||
@@ -2,33 +2,71 @@
|
||||
#define D_LYT_METER_RUPY_H
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytMeterRupyStart_c {
|
||||
public:
|
||||
dLytMeterRupyStart_c() : mStateMgr(*this, sStateID::null) {}
|
||||
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anm) {
|
||||
mpAnm = anm;
|
||||
}
|
||||
|
||||
void setShouldStart(bool b) {
|
||||
mShouldStart = b;
|
||||
}
|
||||
|
||||
bool isStarting() const {
|
||||
return mShouldStart;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterRupyStart_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterRupyStart_c, Start);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterRupyStart_c);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterRupyStart_c);
|
||||
|
||||
u8 field_0x3C[0x8];
|
||||
d2d::AnmGroup_c *mpAnm;
|
||||
bool mShouldStart;
|
||||
};
|
||||
|
||||
class dLytMeterRupyBlink_c {
|
||||
public:
|
||||
dLytMeterRupyBlink_c() : mStateMgr(*this, sStateID::null) {}
|
||||
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anm) {
|
||||
mpAnm = anm;
|
||||
}
|
||||
|
||||
void doFlash() {
|
||||
mShouldFlash = true;
|
||||
}
|
||||
|
||||
void cancelFlash() {
|
||||
mImmediatelyCancelFlash = true;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterRupyBlink_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterRupyBlink_c, Flash);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterRupyBlink_c);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterRupyBlink_c);
|
||||
|
||||
u8 field_0x3C[0x8];
|
||||
d2d::AnmGroup_c *mpAnm;
|
||||
bool mShouldFlash;
|
||||
bool mImmediatelyCancelFlash;
|
||||
};
|
||||
|
||||
class dLytMeterRupy_c : public d2d::dSubPane {
|
||||
@@ -37,25 +75,57 @@ public:
|
||||
virtual bool build(d2d::ResAccIf_c *resAcc) override;
|
||||
virtual bool remove() override;
|
||||
virtual bool execute() override;
|
||||
virtual nw4r::lyt::Pane *getPane() override;
|
||||
virtual d2d::LytBase_c *getLyt() override;
|
||||
virtual const char *getName() const override;
|
||||
virtual nw4r::lyt::Pane *getPane() override {
|
||||
return mLyt.getLayout()->GetRootPane();
|
||||
}
|
||||
virtual d2d::LytBase_c *getLyt() override {
|
||||
return &mLyt;
|
||||
}
|
||||
virtual const char *getName() const override {
|
||||
return mLyt.getName();
|
||||
}
|
||||
|
||||
virtual ~dLytMeterRupy_c() {}
|
||||
|
||||
mVec3_c getLastVisibleDigitPosition();
|
||||
|
||||
private:
|
||||
bool updateDisplayedAmount(bool suppressSound);
|
||||
bool hasChangeInRupees() const;
|
||||
s32 getRupeeDifference() const;
|
||||
void setDigit(s32 index, s32 digit);
|
||||
void executeDigitJump();
|
||||
void executeDigitBlink(s32 amount);
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterRupy_c, In);
|
||||
STATE_FUNC_DECLARE(dLytMeterRupy_c, Active);
|
||||
STATE_FUNC_DECLARE(dLytMeterRupy_c, Start);
|
||||
STATE_FUNC_DECLARE(dLytMeterRupy_c, Out);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterRupy_c);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterRupy_c);
|
||||
|
||||
/* 0x044 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[22];
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnm[22];
|
||||
/* 0x658 */ dLytMeterRupyStart_c mStartParts[4];
|
||||
/* 0x768 */ dLytMeterRupyBlink_c mBlinkParts[4];
|
||||
/* 0x??? */ u8 padding[0x1A98 - 0x1A60];
|
||||
/* 0x878 */ nw4r::lyt::Pane *mpPanes[4];
|
||||
/* 0x888 */ s32 mNumDisplayedDigits;
|
||||
/* 0x88C */ s32 mDisplayedRupeeCount;
|
||||
/* 0x890 */ s32 field_0x890;
|
||||
/* 0x894 */ s32 mBlinkDelay;
|
||||
/* 0x898 */ s32 mRupeeColor;
|
||||
/* 0x89C */ u8 mSize;
|
||||
/* 0x89D */ u8 mDisplayedDigits[4];
|
||||
/* 0x8A1 */ u8 field_0x8A1[4];
|
||||
/* 0x8A5 */ u8 mJumpState[4];
|
||||
/* 0x8A9 */ u8 field_0x8A9;
|
||||
/* 0x8AA */ u8 field_0x8AA;
|
||||
/* 0x8AB */ u8 field_0x8AB;
|
||||
/* 0x8AC */ u8 field_0x8AC;
|
||||
/* 0x8AD */ u8 field_0x8AD;
|
||||
/* 0x8AE */ u8 field_0x8AE;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
#include "d/lyt/meter/d_lyt_meter_rupy.h"
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "nw4r/math/math_types.h"
|
||||
#include "toBeSorted/small_sound_mgr.h"
|
||||
|
||||
extern "C" s32 getRupeeCounter2();
|
||||
extern "C" u32 getCurrentWalletCapacity2();
|
||||
|
||||
STATE_DEFINE(dLytMeterRupyStart_c, Wait);
|
||||
STATE_DEFINE(dLytMeterRupyStart_c, Start);
|
||||
|
||||
@@ -10,3 +18,484 @@ STATE_DEFINE(dLytMeterRupy_c, In);
|
||||
STATE_DEFINE(dLytMeterRupy_c, Active);
|
||||
STATE_DEFINE(dLytMeterRupy_c, Start);
|
||||
STATE_DEFINE(dLytMeterRupy_c, Out);
|
||||
|
||||
void dLytMeterRupyStart_c::initializeState_Wait() {}
|
||||
void dLytMeterRupyStart_c::executeState_Wait() {
|
||||
if (mShouldStart) {
|
||||
mpAnm->setForwardOnce();
|
||||
mpAnm->setFrame(0.0f);
|
||||
mpAnm->setAnimEnable(true);
|
||||
mStateMgr.changeState(StateID_Start);
|
||||
}
|
||||
}
|
||||
void dLytMeterRupyStart_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytMeterRupyStart_c::initializeState_Start() {}
|
||||
void dLytMeterRupyStart_c::executeState_Start() {
|
||||
if (mpAnm->isEndReached()) {
|
||||
mpAnm->setAnimEnable(false);
|
||||
mShouldStart = false;
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
if (mpAnm->isEnabled()) {
|
||||
mpAnm->play();
|
||||
}
|
||||
}
|
||||
void dLytMeterRupyStart_c::finalizeState_Start() {}
|
||||
|
||||
void dLytMeterRupyStart_c::init() {
|
||||
mShouldStart = false;
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
void dLytMeterRupyStart_c::execute() {
|
||||
mStateMgr.executeState();
|
||||
}
|
||||
|
||||
void dLytMeterRupyBlink_c::initializeState_Wait() {}
|
||||
void dLytMeterRupyBlink_c::executeState_Wait() {
|
||||
if (mShouldFlash) {
|
||||
mpAnm->setForwardOnce();
|
||||
mpAnm->setFrame(0.0f);
|
||||
mpAnm->setAnimEnable(true);
|
||||
mStateMgr.changeState(StateID_Flash);
|
||||
}
|
||||
}
|
||||
void dLytMeterRupyBlink_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytMeterRupyBlink_c::initializeState_Flash() {}
|
||||
void dLytMeterRupyBlink_c::executeState_Flash() {
|
||||
if (mImmediatelyCancelFlash) {
|
||||
mpAnm->setFrame(0.0f);
|
||||
mpAnm->setAnimEnable(false);
|
||||
mImmediatelyCancelFlash = false;
|
||||
mShouldFlash = false;
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
} else {
|
||||
if (mpAnm->isEndReached()) {
|
||||
mpAnm->setAnimEnable(false);
|
||||
mShouldFlash = false;
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
if (mpAnm->isEnabled()) {
|
||||
mpAnm->play();
|
||||
}
|
||||
}
|
||||
}
|
||||
void dLytMeterRupyBlink_c::finalizeState_Flash() {}
|
||||
|
||||
void dLytMeterRupyBlink_c::init() {
|
||||
mShouldFlash = false;
|
||||
mImmediatelyCancelFlash = false;
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
void dLytMeterRupyBlink_c::execute() {
|
||||
mStateMgr.executeState();
|
||||
}
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{ "rupy_01_in.brlan", "G_inOut_00"},
|
||||
{ "rupy_01_sizeChange.brlan", "G_sizeChange"},
|
||||
{ "rupy_01_keta.brlan", "G_keta_00"},
|
||||
{ "rupy_01_color.brlan", "G_color_00"},
|
||||
{ "rupy_01_number.brlan", "G_number_00"},
|
||||
{ "rupy_01_number.brlan", "G_number_01"},
|
||||
{ "rupy_01_number.brlan", "G_number_02"},
|
||||
{ "rupy_01_number.brlan", "G_number_03"},
|
||||
{ "rupy_01_loop.brlan", "G_loop_00"},
|
||||
{"rupy_01_randomFlash.brlan", "G_number_00"},
|
||||
{"rupy_01_randomFlash.brlan", "G_number_01"},
|
||||
{"rupy_01_randomFlash.brlan", "G_number_02"},
|
||||
{"rupy_01_randomFlash.brlan", "G_number_03"},
|
||||
{ "rupy_01_jump.brlan", "G_number_00"},
|
||||
{ "rupy_01_jump.brlan", "G_number_01"},
|
||||
{ "rupy_01_jump.brlan", "G_number_02"},
|
||||
{ "rupy_01_jump.brlan", "G_number_03"},
|
||||
{ "rupy_01_start.brlan", "G_number_00"},
|
||||
{ "rupy_01_start.brlan", "G_number_01"},
|
||||
{ "rupy_01_start.brlan", "G_number_02"},
|
||||
{ "rupy_01_start.brlan", "G_number_03"},
|
||||
{ "rupy_01_out.brlan", "G_inOut_00"},
|
||||
};
|
||||
|
||||
#define RUPY_ANIM_IN 0
|
||||
#define RUPY_ANIM_SIZE_CHANGE 1
|
||||
#define RUPY_ANIM_KETA 2
|
||||
#define RUPY_ANIM_COLOR 3
|
||||
#define RUPY_ANIM_NUMBER_OFFSET 4
|
||||
#define RUPY_ANIM_LOOP 8
|
||||
#define RUPY_ANIM_FLASH_OFFSET 9
|
||||
#define RUPY_ANIM_JUMP_OFFSET 13
|
||||
#define RUPY_ANIM_START_OFFSET 17
|
||||
#define RUPY_ANIM_OUT 21
|
||||
|
||||
#define RUPY_NUM_ANIMS 22
|
||||
|
||||
#define RUPY_NUM_DIGITS 4
|
||||
|
||||
static const char *sPaneNames[] = {
|
||||
"N_ketaT_00",
|
||||
"N_ketaT_01",
|
||||
"N_ketaT_02",
|
||||
"N_ketaT_03",
|
||||
};
|
||||
|
||||
void dLytMeterRupy_c::initializeState_In() {
|
||||
mAnm[RUPY_ANIM_OUT].setAnimEnable(false);
|
||||
mAnm[RUPY_ANIM_OUT].setFrame(0.0f);
|
||||
|
||||
mAnm[RUPY_ANIM_IN].setForwardOnce();
|
||||
if (field_0x8A9 == 1) {
|
||||
mAnm[RUPY_ANIM_IN].setFrame(0.0f);
|
||||
} else {
|
||||
mAnm[RUPY_ANIM_IN].setToEnd();
|
||||
}
|
||||
|
||||
for (int i = 0; i < RUPY_NUM_DIGITS; i++) {
|
||||
if (mAnm[i + RUPY_ANIM_FLASH_OFFSET].isEnabled()) {
|
||||
mBlinkParts[i].cancelFlash();
|
||||
} else {
|
||||
mAnm[i + RUPY_ANIM_FLASH_OFFSET].setAnimEnable(true);
|
||||
}
|
||||
|
||||
mAnm[i + RUPY_ANIM_FLASH_OFFSET].setFrame(0.0f);
|
||||
}
|
||||
|
||||
mLyt.calc();
|
||||
|
||||
for (int i = 0; i < RUPY_NUM_DIGITS; i++) {
|
||||
mAnm[i + RUPY_ANIM_FLASH_OFFSET].setAnimEnable(false);
|
||||
}
|
||||
field_0x8A9 = 0;
|
||||
mAnm[RUPY_ANIM_IN].setAnimEnable(true);
|
||||
field_0x8AB = 1;
|
||||
}
|
||||
void dLytMeterRupy_c::executeState_In() {
|
||||
if (mAnm[RUPY_ANIM_IN].isEndReached()) {
|
||||
mAnm[RUPY_ANIM_IN].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Active);
|
||||
}
|
||||
}
|
||||
void dLytMeterRupy_c::finalizeState_In() {}
|
||||
|
||||
void dLytMeterRupy_c::initializeState_Active() {}
|
||||
void dLytMeterRupy_c::executeState_Active() {
|
||||
bool result = updateDisplayedAmount(false);
|
||||
if (field_0x890 == 0) {
|
||||
mStateMgr.changeState(StateID_Start);
|
||||
} else if (!result && field_0x890 != -1) {
|
||||
field_0x890 = -1;
|
||||
}
|
||||
}
|
||||
void dLytMeterRupy_c::finalizeState_Active() {}
|
||||
|
||||
void dLytMeterRupy_c::initializeState_Start() {
|
||||
for (int i = 0; i < RUPY_NUM_DIGITS; i++) {
|
||||
if (i < mNumDisplayedDigits) {
|
||||
mStartParts[i].setShouldStart(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
void dLytMeterRupy_c::executeState_Start() {
|
||||
updateDisplayedAmount(false);
|
||||
bool bAllDone = true;
|
||||
for (int i = 0; i < RUPY_NUM_DIGITS; i++) {
|
||||
if (mStartParts[i].isStarting()) {
|
||||
bAllDone = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (bAllDone) {
|
||||
mStateMgr.changeState(StateID_Active);
|
||||
}
|
||||
|
||||
field_0x890++;
|
||||
}
|
||||
void dLytMeterRupy_c::finalizeState_Start() {}
|
||||
|
||||
void dLytMeterRupy_c::initializeState_Out() {
|
||||
mAnm[RUPY_ANIM_OUT].setForwardOnce();
|
||||
if (field_0x8AA == 1 || field_0x8AA == 3) {
|
||||
mAnm[RUPY_ANIM_OUT].setFrame(0.0f);
|
||||
} else {
|
||||
mAnm[RUPY_ANIM_OUT].setToEnd();
|
||||
}
|
||||
|
||||
if (field_0x8AA >= 3 && field_0x8AA < 5) {
|
||||
field_0x8AE = 1;
|
||||
} else {
|
||||
field_0x8AE = 0;
|
||||
}
|
||||
|
||||
field_0x8AA = 0;
|
||||
mAnm[RUPY_ANIM_OUT].setAnimEnable(true);
|
||||
}
|
||||
void dLytMeterRupy_c::executeState_Out() {
|
||||
if (mAnm[RUPY_ANIM_OUT].isEndReached()) {
|
||||
field_0x8AB = 0;
|
||||
|
||||
if (field_0x8AE == 0 && hasChangeInRupees()) {
|
||||
mDisplayedRupeeCount = getRupeeCounter2();
|
||||
updateDisplayedAmount(true);
|
||||
}
|
||||
|
||||
mAnm[RUPY_ANIM_OUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Active);
|
||||
}
|
||||
}
|
||||
void dLytMeterRupy_c::finalizeState_Out() {}
|
||||
|
||||
bool dLytMeterRupy_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("rupy_01.brlyt", nullptr);
|
||||
|
||||
for (int i = 0; i < RUPY_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
|
||||
for (int i = 0; i < RUPY_NUM_DIGITS; i++) {
|
||||
mStartParts[i].setAnm(&mAnm[i + RUPY_ANIM_START_OFFSET]);
|
||||
mStartParts[i].init();
|
||||
mBlinkParts[i].setAnm(&mAnm[i + RUPY_ANIM_FLASH_OFFSET]);
|
||||
mBlinkParts[i].init();
|
||||
}
|
||||
|
||||
for (int i = 0; i < RUPY_NUM_DIGITS; i++) {
|
||||
mpPanes[i] = mLyt.findPane(sPaneNames[i]);
|
||||
}
|
||||
|
||||
mAnm[RUPY_ANIM_SIZE_CHANGE].setAnimEnable(true);
|
||||
mAnm[RUPY_ANIM_COLOR].setAnimEnable(true);
|
||||
mAnm[RUPY_ANIM_LOOP].setAnimEnable(true);
|
||||
|
||||
for (int i = 0; i < RUPY_NUM_DIGITS; i++) {
|
||||
mAnm[i + RUPY_ANIM_NUMBER_OFFSET].setAnimEnable(true);
|
||||
mAnm[i + RUPY_ANIM_JUMP_OFFSET].setAnimEnable(true);
|
||||
mAnm[i + RUPY_ANIM_JUMP_OFFSET].setFrame(0.0f);
|
||||
}
|
||||
|
||||
mSize = 1;
|
||||
mAnm[RUPY_ANIM_SIZE_CHANGE].setFrame(mSize);
|
||||
mRupeeColor = 0;
|
||||
mAnm[RUPY_ANIM_COLOR].setFrame(mRupeeColor);
|
||||
mAnm[RUPY_ANIM_IN].setAnimEnable(true);
|
||||
mAnm[RUPY_ANIM_IN].setToEnd();
|
||||
mLyt.calc();
|
||||
mAnm[RUPY_ANIM_IN].setAnimEnable(false);
|
||||
|
||||
field_0x8AB = 0;
|
||||
mDisplayedRupeeCount = getRupeeCounter2();
|
||||
field_0x890 = -1;
|
||||
mBlinkDelay = cM::rndF(10.0f);
|
||||
for (int i = 0; i < RUPY_NUM_DIGITS; i++) {
|
||||
mJumpState[i] = 0xFF;
|
||||
mDisplayedDigits[i] = 0;
|
||||
field_0x8A1[i] = 0;
|
||||
}
|
||||
|
||||
field_0x8A9 = 0;
|
||||
field_0x8AA = 0;
|
||||
mNumDisplayedDigits = 0;
|
||||
field_0x8AC = 0;
|
||||
field_0x8AD = 0;
|
||||
|
||||
field_0x8AE = 0;
|
||||
updateDisplayedAmount(true);
|
||||
|
||||
mStateMgr.changeState(StateID_Active);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterRupy_c::remove() {
|
||||
for (int i = 0; i < RUPY_NUM_ANIMS; i++) {
|
||||
mAnm[i].unbind();
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterRupy_c::execute() {
|
||||
if (field_0x8A9 != 0) {
|
||||
mStateMgr.changeState(StateID_In);
|
||||
} else if (field_0x8AA != 0) {
|
||||
mStateMgr.changeState(StateID_Out);
|
||||
}
|
||||
|
||||
mStateMgr.executeState();
|
||||
for (int i = 0; i < RUPY_NUM_DIGITS; i++) {
|
||||
mStartParts[i].execute();
|
||||
mBlinkParts[i].execute();
|
||||
}
|
||||
|
||||
for (s32 i = 0; i < RUPY_NUM_ANIMS; i++) {
|
||||
switch (i) {
|
||||
case RUPY_ANIM_SIZE_CHANGE:
|
||||
case RUPY_ANIM_KETA:
|
||||
case RUPY_ANIM_COLOR:
|
||||
case RUPY_ANIM_NUMBER_OFFSET + 0:
|
||||
case RUPY_ANIM_NUMBER_OFFSET + 1:
|
||||
case RUPY_ANIM_NUMBER_OFFSET + 2:
|
||||
case RUPY_ANIM_NUMBER_OFFSET + 3:
|
||||
case RUPY_ANIM_JUMP_OFFSET + 0:
|
||||
case RUPY_ANIM_JUMP_OFFSET + 1:
|
||||
case RUPY_ANIM_JUMP_OFFSET + 2:
|
||||
case RUPY_ANIM_JUMP_OFFSET + 3:
|
||||
case RUPY_ANIM_START_OFFSET + 0:
|
||||
case RUPY_ANIM_START_OFFSET + 1:
|
||||
case RUPY_ANIM_START_OFFSET + 2:
|
||||
case RUPY_ANIM_START_OFFSET + 3: continue;
|
||||
}
|
||||
// Yes, really
|
||||
u32 idx = i;
|
||||
if (mAnm[idx].isEnabled()) {
|
||||
mAnm[idx].play();
|
||||
}
|
||||
}
|
||||
|
||||
mAnm[RUPY_ANIM_SIZE_CHANGE].setFrame(mSize);
|
||||
|
||||
bool isMax = false;
|
||||
u32 current = mDisplayedRupeeCount;
|
||||
u32 capacity = getCurrentWalletCapacity2();
|
||||
if (current != 0 && capacity == current) {
|
||||
isMax = true;
|
||||
};
|
||||
if (isMax != mRupeeColor) {
|
||||
mRupeeColor = isMax;
|
||||
mAnm[RUPY_ANIM_COLOR].setFrame(mRupeeColor);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterRupy_c::hasChangeInRupees() const {
|
||||
s32 amount = getRupeeCounter2();
|
||||
if (amount > 9999) {
|
||||
amount = 9999;
|
||||
} else if (amount < 0) {
|
||||
amount = 0;
|
||||
}
|
||||
return amount != mDisplayedRupeeCount;
|
||||
}
|
||||
|
||||
s32 dLytMeterRupy_c::getRupeeDifference() const {
|
||||
return getRupeeCounter2() - mDisplayedRupeeCount;
|
||||
}
|
||||
|
||||
mVec3_c dLytMeterRupy_c::getLastVisibleDigitPosition() {
|
||||
mVec3_c ret(0.0f, 0.0f, 0.0f);
|
||||
u32 idx = mNumDisplayedDigits - 1;
|
||||
if (idx <= 3) {
|
||||
nw4r::math::MTX34 mtx = mpPanes[idx]->GetGlobalMtx();
|
||||
ret.x = mtx._03;
|
||||
ret.y = mtx._13;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void dLytMeterRupy_c::setDigit(s32 index, s32 digit) {
|
||||
mDisplayedDigits[index] = digit;
|
||||
s32 num = index + RUPY_ANIM_NUMBER_OFFSET;
|
||||
mAnm[num].setFrame(digit);
|
||||
}
|
||||
|
||||
bool dLytMeterRupy_c::updateDisplayedAmount(bool suppressSound) {
|
||||
s32 amount = getRupeeCounter2();
|
||||
if (amount > 9999) {
|
||||
amount = 9999;
|
||||
} else if (amount < 0) {
|
||||
amount = 0;
|
||||
}
|
||||
|
||||
if (amount != mDisplayedRupeeCount || suppressSound) {
|
||||
|
||||
} else if (field_0x8AD && mDisplayedRupeeCount == getCurrentWalletCapacity2()) {
|
||||
SmallSoundManager::GetInstance()->playSound(SE_S_RUPEE_MAX);
|
||||
field_0x890 = 0;
|
||||
field_0x8AD = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void dLytMeterRupy_c::executeDigitJump() {
|
||||
// ???
|
||||
s32 last = mNumDisplayedDigits + 3;
|
||||
if (field_0x8A1[last] == 1) {
|
||||
mAnm[mNumDisplayedDigits - 1 + RUPY_ANIM_JUMP_OFFSET].setFrame(2.0f);
|
||||
s32 last = mNumDisplayedDigits + 3;
|
||||
field_0x8A1[last] = 0;
|
||||
} else {
|
||||
mAnm[mNumDisplayedDigits - 1 + RUPY_ANIM_JUMP_OFFSET].setFrame(1.0f);
|
||||
s32 last = mNumDisplayedDigits + 3;
|
||||
field_0x8A1[last] = 1;
|
||||
}
|
||||
|
||||
if (mNumDisplayedDigits >= 4) {
|
||||
s32 last = mNumDisplayedDigits - 4;
|
||||
if (mDisplayedDigits[last] != field_0x8A1[last] && mJumpState[last] == 0xFF) {
|
||||
mJumpState[last] = 0;
|
||||
}
|
||||
}
|
||||
if (mNumDisplayedDigits >= 3) {
|
||||
s32 last = mNumDisplayedDigits - 3;
|
||||
if (mDisplayedDigits[last] != field_0x8A1[last] && mJumpState[last] == 0xFF) {
|
||||
mJumpState[last] = 0;
|
||||
}
|
||||
}
|
||||
if (mNumDisplayedDigits >= 2) {
|
||||
s32 last = mNumDisplayedDigits - 2;
|
||||
if (mDisplayedDigits[last] != field_0x8A1[last] && mJumpState[last] == 0xFF) {
|
||||
mJumpState[last] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < RUPY_NUM_DIGITS; i++) {
|
||||
if (mJumpState[i] == 0xFF) {
|
||||
mAnm[i + RUPY_ANIM_JUMP_OFFSET].setFrame(0.0f);
|
||||
} else if (i != mNumDisplayedDigits - 1) {
|
||||
if (mJumpState[i] == 0) {
|
||||
mAnm[i + RUPY_ANIM_JUMP_OFFSET].setFrame(1.0f);
|
||||
mJumpState[i] = 1;
|
||||
} else if (mJumpState[i] == 1) {
|
||||
mAnm[i + RUPY_ANIM_JUMP_OFFSET].setFrame(2.0f);
|
||||
mJumpState[i] = 2;
|
||||
} else if (mJumpState[i] == 2) {
|
||||
mAnm[i + RUPY_ANIM_JUMP_OFFSET].setFrame(0.0f);
|
||||
mJumpState[i] = 0xFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dLytMeterRupy_c::executeDigitBlink(s32 amount) {
|
||||
if (amount >= 1000 && amount % 1000 == 0) {
|
||||
mBlinkParts[0].doFlash();
|
||||
}
|
||||
|
||||
if (amount >= 100 && amount % 100 == 0) {
|
||||
if (amount >= 1000) {
|
||||
mBlinkParts[1].doFlash();
|
||||
} else {
|
||||
mBlinkParts[0].doFlash();
|
||||
}
|
||||
}
|
||||
|
||||
mBlinkDelay--;
|
||||
if (mBlinkDelay <= 0) {
|
||||
if (mNumDisplayedDigits == 1) {
|
||||
mBlinkParts[mNumDisplayedDigits - 1].doFlash();
|
||||
} else {
|
||||
if (cM::rndF(100.0f) >= 50.0f) {
|
||||
mBlinkParts[mNumDisplayedDigits - 1].doFlash();
|
||||
} else {
|
||||
mBlinkParts[mNumDisplayedDigits - 2].doFlash();
|
||||
}
|
||||
}
|
||||
mBlinkDelay = mAnm[RUPY_ANIM_FLASH_OFFSET + 0].getAnimDuration() + cM::rndF(10.0f);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user