d_lyt_meter_key OK

This commit is contained in:
robojumper
2025-04-16 20:45:35 +02:00
parent 568268a9a8
commit 2d4c0f0468
7 changed files with 374 additions and 64 deletions
+45 -45
View File
@@ -5530,9 +5530,9 @@ executeState_Off__18dLytMeterBossKey_cFv = .text:0x800E2D90; // type:function si
finalizeState_Off__18dLytMeterBossKey_cFv = .text:0x800E2E10; // type:function size:0x4
build__18dLytMeterBossKey_cFPQ23d2d10ResAccIf_c = .text:0x800E2E20; // type:function size:0x2F4
remove__18dLytMeterBossKey_cFv = .text:0x800E3120; // type:function size:0x58
fn_800E3180 = .text:0x800E3180; // type:function size:0x21C
execute__18dLytMeterBossKey_cFv = .text:0x800E3180; // type:function size:0x21C
draw__18dLytMeterBossKey_cFv = .text:0x800E33A0; // type:function size:0x28
fn_800E33D0 = .text:0x800E33D0; // type:function size:0x20
setPosition__18dLytMeterBossKey_cFl = .text:0x800E33D0; // type:function size:0x20
initializeState_Wait__19dLytMeterSmallKey_cFv = .text:0x800E33F0; // type:function size:0x4
executeState_Wait__19dLytMeterSmallKey_cFv = .text:0x800E3400; // type:function size:0x5C
finalizeState_Wait__19dLytMeterSmallKey_cFv = .text:0x800E3460; // type:function size:0x4
@@ -5547,9 +5547,9 @@ executeState_Off__19dLytMeterSmallKey_cFv = .text:0x800E36D0; // type:function s
finalizeState_Off__19dLytMeterSmallKey_cFv = .text:0x800E3750; // type:function size:0x4
build__19dLytMeterSmallKey_cFPQ23d2d10ResAccIf_c = .text:0x800E3760; // type:function size:0x230
remove__19dLytMeterSmallKey_cFv = .text:0x800E3990; // type:function size:0x58
fn_800E39F0 = .text:0x800E39F0; // type:function size:0x224
execute__19dLytMeterSmallKey_cFv = .text:0x800E39F0; // type:function size:0x224
draw__19dLytMeterSmallKey_cFv = .text:0x800E3C20; // type:function size:0x28
fn_800E3C50 = .text:0x800E3C50; // type:function size:0x20
setPosition__19dLytMeterSmallKey_cFl = .text:0x800E3C50; // type:function size:0x20
__sinit_\d_lyt_meter_key_cpp = .text:0x800E3C70; // type:function size:0x9EC scope:local
__dt__35sFStateID_c<20dLytMeterKakeraKey_c>Fv = .text:0x800E4660; // type:function size:0x58
__dt__33sFStateID_c<18dLytMeterBossKey_c>Fv = .text:0x800E46C0; // type:function size:0x58
@@ -10577,7 +10577,7 @@ StageManager__isAreaTypeHouse = .text:0x80199940; // type:function size:0x2C
isAreaTypeSky__11dStageMgr_cCFv = .text:0x80199970; // type:function size:0x2C
isAreaTypeOverworldOrSkyloft__11dStageMgr_cCFv = .text:0x801999A0; // type:function size:0x3C
isAreaTypeDungeonOrBoss__11dStageMgr_cCFv = .text:0x801999E0; // type:function size:0x3C
StageManager__getSTIFmapNameId = .text:0x80199A20; // type:function size:0x20
getMapNameId__11dStageMgr_cCFv = .text:0x80199A20; // type:function size:0x20
StageManager__getSTIFbyte4 = .text:0x80199A40; // type:function size:0x20
fn_80199A60 = .text:0x80199A60; // type:function size:0x3C
isSTIFbyte4_5or6 = .text:0x80199AA0; // type:function size:0x3C
@@ -13581,7 +13581,7 @@ AcItem__getMaxNumberOfSlingshotSeeds = .text:0x802522A0; // type:function size:0
getTotalSeedCapacity__9dAcItem_cFv = .text:0x802522B0; // type:function size:0x38
getKeyPieceCount__9dAcItem_cFv = .text:0x802522F0; // type:function size:0x8
increaseKeyPieceCounter = .text:0x80252300; // type:function size:0xC
getSmallKeyCounter = .text:0x80252310; // type:function size:0x8
getSmallKeyCount__9dAcItem_cFv = .text:0x80252310; // type:function size:0x8
increaseSmallKeyCounter = .text:0x80252320; // type:function size:0xC
getAdditionalPouchSlotCounter = .text:0x80252330; // type:function size:0x8
addToAdditionalAdventurePouchCounter = .text:0x80252340; // type:function size:0xC
@@ -31296,34 +31296,34 @@ lbl_80513FF0 = .data:0x80513FF0; // type:object size:0xE data:string
lbl_80514000 = .data:0x80514000; // type:object size:0xD data:string
__vt__15dLytMeterZBtn_c = .data:0x80514010; // type:object size:0x34
__vt__30sFStateID_c<15dLytMeterZBtn_c> = .data:0x80514150; // type:object size:0x34
lbl_80514188 = .data:0x80514188; // type:object size:0x18
lbl_805141A0 = .data:0x805141A0; // type:object size:0xC
lbl_805141AC = .data:0x805141AC; // type:object size:0x1C
lbl_805141C8 = .data:0x805141C8; // type:object size:0x10
lbl_805141D8 = .data:0x805141D8; // type:object size:0x1C
lbl_805141F4 = .data:0x805141F4; // type:object size:0x10
lbl_80514204 = .data:0x80514204; // type:object size:0x1C
lbl_80514220 = .data:0x80514220; // type:object size:0x10
lbl_80514230 = .data:0x80514230; // type:object size:0x1C
lbl_8051424C = .data:0x8051424C; // type:object size:0x10
lbl_8051425C = .data:0x8051425C; // type:object size:0x1C
lbl_80514278 = .data:0x80514278; // type:object size:0x10
lbl_80514188 = .data:0x80514188; // type:object size:0x16 data:string
lbl_805141A0 = .data:0x805141A0; // type:object size:0xB data:string
lbl_805141AC = .data:0x805141AC; // type:object size:0x1B data:string
lbl_805141C8 = .data:0x805141C8; // type:object size:0xD data:string
lbl_805141D8 = .data:0x805141D8; // type:object size:0x1B data:string
lbl_805141F4 = .data:0x805141F4; // type:object size:0xD data:string
lbl_80514204 = .data:0x80514204; // type:object size:0x1B data:string
lbl_80514220 = .data:0x80514220; // type:object size:0xD data:string
lbl_80514230 = .data:0x80514230; // type:object size:0x1B data:string
lbl_8051424C = .data:0x8051424C; // type:object size:0xD data:string
lbl_8051425C = .data:0x8051425C; // type:object size:0x1B data:string
lbl_80514278 = .data:0x80514278; // type:object size:0xD data:string
lbl_80514288 = .data:0x80514288; // type:object size:0x18 data:string
lbl_805142A0 = .data:0x805142A0; // type:object size:0xC
lbl_805142AC = .data:0x805142AC; // type:object size:0x4C
lbl_805142A0 = .data:0x805142A0; // type:object size:0xA data:string
lbl_805142AC = .data:0x805142AC; // type:object size:0x17 data:string
lbl_805142F8 = .data:0x805142F8; // type:object size:0x14 data:string
lbl_8051430C = .data:0x8051430C; // type:object size:0x18
lbl_80514324 = .data:0x80514324; // type:object size:0x1C
lbl_80514340 = .data:0x80514340; // type:object size:0x10
lbl_80514350 = .data:0x80514350; // type:object size:0x18
lbl_80514368 = .data:0x80514368; // type:object size:0x1C
lbl_80514384 = .data:0x80514384; // type:object size:0x34
lbl_805143B8 = .data:0x805143B8; // type:object size:0x18
lbl_805143D0 = .data:0x805143D0; // type:object size:0x18
lbl_805143E8 = .data:0x805143E8; // type:object size:0x1C
lbl_80514404 = .data:0x80514404; // type:object size:0x10
lbl_80514414 = .data:0x80514414; // type:object size:0x18
lbl_8051442C = .data:0x8051442C; // type:object size:0x3E4
lbl_8051430C = .data:0x8051430C; // type:object size:0x15 data:string
lbl_80514324 = .data:0x80514324; // type:object size:0x19 data:string
lbl_80514340 = .data:0x80514340; // type:object size:0xD data:string
lbl_80514350 = .data:0x80514350; // type:object size:0x16 data:string
lbl_80514368 = .data:0x80514368; // type:object size:0x1A data:string
lbl_80514384 = .data:0x80514384; // type:object size:0xE data:string
lbl_805143B8 = .data:0x805143B8; // type:object size:0x15 data:string
lbl_805143D0 = .data:0x805143D0; // type:object size:0x16 data:string
lbl_805143E8 = .data:0x805143E8; // type:object size:0x1B data:string
lbl_80514404 = .data:0x80514404; // type:object size:0xE data:string
lbl_80514414 = .data:0x80514414; // type:object size:0x17 data:string
lbl_8051442C = .data:0x8051442C; // type:object size:0x1B data:string
__vt__34sFStateID_c<19dLytMeterSmallKey_c> = .data:0x80514810; // type:object size:0x34
__vt__33sFStateID_c<18dLytMeterBossKey_c> = .data:0x80514844; // type:object size:0x34
__vt__35sFStateID_c<20dLytMeterKakeraKey_c> = .data:0x80514878; // type:object size:0x34
@@ -48637,19 +48637,19 @@ LytMeterZBtn__STATE_WAIT = .bss:0x805AA360; // type:object size:0x30 data:4byte
LytMeterZBtn__STATE_ON = .bss:0x805AA3A0; // type:object size:0x30 data:4byte
LytMeterZBtn__STATE_ACTIVE = .bss:0x805AA3E0; // type:object size:0x30 data:4byte
LytMeterZBtn__STATE_OFF = .bss:0x805AA420; // type:object size:0x30 data:4byte
lbl_805AA450 = .bss:0x805AA450; // type:object size:0x10
LytMeterKakeraKey__STATE_WAIT = .bss:0x805AA460; // type:object size:0x40 data:4byte
LytMeterKakeraKey__STATE_ON = .bss:0x805AA4A0; // type:object size:0x40 data:4byte
lbl_805AA4E0 = .bss:0x805AA4E0; // type:object size:0x40 data:4byte
LytMeterKakeraKey__STATE_ACTIVE = .bss:0x805AA520; // type:object size:0x40 data:4byte
LytMeterKakeraKey__STATE_OFF = .bss:0x805AA560; // type:object size:0x40 data:4byte
LytMeterBossKey__STATE_WAIT = .bss:0x805AA5A0; // type:object size:0x40 data:4byte
LytMeterBossKey__STATE_ON = .bss:0x805AA5E0; // type:object size:0x40 data:4byte
LytMeterBossKey__STATE_ACTIVE = .bss:0x805AA620; // type:object size:0x40 data:4byte
LytMeterBossKey__STATE_OFF = .bss:0x805AA660; // type:object size:0x40 data:4byte
LytMeterSmallKey__STATE_WAIT = .bss:0x805AA6A0; // type:object size:0x40 data:4byte
LytMeterSmallKey__STATE_ON = .bss:0x805AA6E0; // type:object size:0x40 data:4byte
LytMeterSmallKey__STATE_ACTIVE = .bss:0x805AA720; // type:object size:0x40 data:4byte
lbl_805AA450 = .bss:0x805AA450; // type:object size:0xC
LytMeterKakeraKey__STATE_WAIT = .bss:0x805AA460; // type:object size:0x30 data:4byte
LytMeterKakeraKey__STATE_ON = .bss:0x805AA4A0; // type:object size:0x30 data:4byte
lbl_805AA4E0 = .bss:0x805AA4E0; // type:object size:0x30 data:4byte
LytMeterKakeraKey__STATE_ACTIVE = .bss:0x805AA520; // type:object size:0x30 data:4byte
LytMeterKakeraKey__STATE_OFF = .bss:0x805AA560; // type:object size:0x30 data:4byte
LytMeterBossKey__STATE_WAIT = .bss:0x805AA5A0; // type:object size:0x30 data:4byte
LytMeterBossKey__STATE_ON = .bss:0x805AA5E0; // type:object size:0x30 data:4byte
LytMeterBossKey__STATE_ACTIVE = .bss:0x805AA620; // type:object size:0x30 data:4byte
LytMeterBossKey__STATE_OFF = .bss:0x805AA660; // type:object size:0x30 data:4byte
LytMeterSmallKey__STATE_WAIT = .bss:0x805AA6A0; // type:object size:0x30 data:4byte
LytMeterSmallKey__STATE_ON = .bss:0x805AA6E0; // type:object size:0x30 data:4byte
LytMeterSmallKey__STATE_ACTIVE = .bss:0x805AA720; // type:object size:0x30 data:4byte
LytMeterSmallKey__STATE_OFF = .bss:0x805AA760; // type:object size:0x30 data:4byte
lbl_805AA790 = .bss:0x805AA790; // type:object size:0xC scope:local
StateID_Invisible__21dLytMeterDrinkParts_c = .bss:0x805AA7A0; // type:object size:0x30 data:4byte
+1 -1
View File
@@ -388,7 +388,7 @@ config.libs = [
Object(NonMatching, "d/lyt/meter/d_lyt_meter_unk.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_a_btn.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_z_btn.cpp"),
Object(NonMatching, "d/lyt/meter/d_lyt_meter_key.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_key.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_drink.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_remocon_bg.cpp"),
Object(Matching, "d/lyt/meter/d_lyt_meter_nunchaku_bg.cpp"),
+2 -1
View File
@@ -59,7 +59,8 @@ public:
static s32 getTotalSeedCapacity();
static s32 getTotalArrowCapacity();
static bool getKeyPieceCount();
static u32 getKeyPieceCount();
static u32 getSmallKeyCount();
static bool isRupee(ITEM_ID item);
static bool isKeyPiece(ITEM_ID item);
+1 -1
View File
@@ -189,7 +189,7 @@ struct STIF {
/* 0x0F */ u8 field_0x0F;
/* 0x10 */ u8 field_0x10;
/* 0x11 */ u8 field_0x11;
/* 0x12 */ u8 mapNameId;
/* 0x12 */ s8 mapNameId;
/* 0x13 */ u8 field_0x13;
};
+1
View File
@@ -54,6 +54,7 @@ public:
s32 getSTIFunk1() const;
s32 getAreaType() const;
s32 getMapNameId() const;
static dStageMgr_c *GetInstance() {
return sInstance;
+22 -4
View File
@@ -1,6 +1,7 @@
#ifndef D_LYT_METER_KEY_H
#define D_LYT_METER_KEY_H
#include "common.h"
#include "d/lyt/d2d.h"
#include "m/m_vec.h"
#include "nw4r/lyt/lyt_pane.h"
@@ -49,8 +50,11 @@ public:
bool build(d2d::ResAccIf_c *);
bool remove();
bool execute();
bool draw();
void setPosition(s32 position);
private:
STATE_FUNC_DECLARE(dLytMeterBossKey_c, Wait);
STATE_FUNC_DECLARE(dLytMeterBossKey_c, On);
@@ -60,8 +64,13 @@ private:
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterBossKey_c);
/* 0x040 */ d2d::dLytSub mLyt;
/* 0x0D4 */ d2d::AnmGroup_c mAnm[5];
/* 0x214 */ u32 field_0x2D0;
/* 0x218 */ mVec3_c mVecs[4];
/* 0x214 */ nw4r::lyt::Pane *mpPane;
/* 0x218 */ mVec3_c mPanePositions[4];
/* 0x248 */ mVec3_c mPosition;
/* 0x254 */ s32 mPosititionIndex;
/* 0x258 */ s32 mOldPosititionIndex;
/* 0x25C */ s32 mMovementFrame;
/* 0x260 */ u8 mShouldBeVisible;
};
class dLytMeterSmallKey_c {
@@ -74,8 +83,11 @@ public:
bool build(d2d::ResAccIf_c *);
bool remove();
bool execute();
bool draw();
void setPosition(s32 position);
private:
STATE_FUNC_DECLARE(dLytMeterSmallKey_c, Wait);
STATE_FUNC_DECLARE(dLytMeterSmallKey_c, On);
@@ -85,8 +97,14 @@ private:
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterSmallKey_c);
/* 0x040 */ d2d::dLytSub mLyt;
/* 0x0D4 */ d2d::AnmGroup_c mAnm[5];
/* 0x214 */ u32 field_0x2D0;
/* 0x218 */ mVec3_c mVecs[4];
/* 0x214 */ nw4r::lyt::Pane *mpPane;
/* 0x218 */ mVec3_c mPanePositions[4];
/* 0x248 */ mVec3_c mPosition;
/* 0x254 */ s32 mSavedSmallKeyCount;
/* 0x258 */ s32 mPosititionIndex;
/* 0x25C */ s32 mOldPosititionIndex;
/* 0x260 */ s32 mMovementFrame;
/* 0x264 */ u8 mShouldBeVisible;
};
#endif
+302 -12
View File
@@ -3,6 +3,7 @@
#include "c/c_lib.h"
#include "common.h"
#include "d/a/d_a_item.h"
#include "d/d_stage_mgr.h"
#include "d/lyt/d2d.h"
#include "m/m_vec.h"
#include "nw4r/lyt/lyt_pane.h"
@@ -207,34 +208,323 @@ void dLytMeterKakeraKey_c::setPosition(s32 position) {
mMovementFrame = 0;
}
static const d2d::LytBrlanMapping brlanMapBoss[] = {
{ "keyBoss_00_in.brlan", "G_inOut_00"},
{ "keyBoss_00_out.brlan", "G_inOut_00"},
{ "keyBoss_00_keyBoss.brlan", "G_keyBoss_00"},
{ "keyBoss_00_loop.brlan", "G_loop_00"},
{"keyBoss_00_position.brlan", "G_position_00"},
};
#define KEY_BOSS_ANIM_IN 0
#define KEY_BOSS_ANIM_OUT 1
#define KEY_BOSS_ANIM_KEYBOSS 2
#define KEY_BOSS_ANIM_LOOP 3
#define KEY_BOSS_ANIM_POSITION 4
#define KEY_BOSS_NUM_ANIMS 5
void dLytMeterBossKey_c::initializeState_Wait() {}
void dLytMeterBossKey_c::executeState_Wait() {}
void dLytMeterBossKey_c::executeState_Wait() {
if (mShouldBeVisible) {
mStateMgr.changeState(StateID_On);
}
}
void dLytMeterBossKey_c::finalizeState_Wait() {}
void dLytMeterBossKey_c::initializeState_On() {}
void dLytMeterBossKey_c::executeState_On() {}
void dLytMeterBossKey_c::initializeState_On() {
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(true);
mAnm[KEY_BOSS_ANIM_IN].setFrame(0.0f);
}
void dLytMeterBossKey_c::executeState_On() {
if (mAnm[KEY_BOSS_ANIM_IN].isEndReached()) {
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterBossKey_c::finalizeState_On() {}
void dLytMeterBossKey_c::initializeState_Active() {}
void dLytMeterBossKey_c::executeState_Active() {}
void dLytMeterBossKey_c::executeState_Active() {
if (!mShouldBeVisible) {
mStateMgr.changeState(StateID_Off);
}
}
void dLytMeterBossKey_c::finalizeState_Active() {}
void dLytMeterBossKey_c::initializeState_Off() {}
void dLytMeterBossKey_c::executeState_Off() {}
void dLytMeterBossKey_c::initializeState_Off() {
mAnm[KEY_BOSS_ANIM_OUT].setAnimEnable(true);
mAnm[KEY_BOSS_ANIM_OUT].setFrame(0.0f);
}
void dLytMeterBossKey_c::executeState_Off() {
if (mAnm[KEY_BOSS_ANIM_OUT].isEndReached()) {
mAnm[KEY_BOSS_ANIM_OUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
}
void dLytMeterBossKey_c::finalizeState_Off() {}
bool dLytMeterBossKey_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("keyBoss_00.brlyt", nullptr);
for (int i = 0; i < KEY_BOSS_NUM_ANIMS; i++) {
mAnm[i].init(brlanMapBoss[i].mFile, resAcc, mLyt.getLayout(), brlanMapBoss[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
mAnm[KEY_BOSS_ANIM_LOOP].setAnimEnable(true);
mpPane = mLyt.findPane("N_keyBoss_00");
mAnm[KEY_BOSS_ANIM_POSITION].setAnimEnable(true);
for (int i = 0; i < 4; i++) {
mAnm[KEY_BOSS_ANIM_POSITION].setFrame(i);
mLyt.calc();
mPanePositions[i].copyFrom(mLyt.findPane("N_keyPosition_00")->GetTranslate());
}
mAnm[KEY_BOSS_ANIM_POSITION].setAnimEnable(false);
mPosititionIndex = 1;
mOldPosititionIndex = 1;
mMovementFrame = 0;
mPosition.copyFrom(mPanePositions[mPosititionIndex]);
mShouldBeVisible = 0;
mpPane->SetTranslate(mPosition);
mAnm[KEY_BOSS_ANIM_IN].setFrame(0.0f);
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(true);
f32 frame = 0.0f;
if (dStageMgr_c::GetInstance()->getMapNameId() == 11) {
frame = 0.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 14) {
frame = 1.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 12) {
frame = 2.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 16) {
frame = 3.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 13) {
frame = 4.0f;
} else if (dStageMgr_c::GetInstance()->getMapNameId() == 15) {
frame = 5.0f;
}
mAnm[KEY_BOSS_ANIM_KEYBOSS].setAnimEnable(true);
mAnm[KEY_BOSS_ANIM_KEYBOSS].setFrame(frame);
mLyt.getLayout()->Animate(0);
mLyt.calc();
mAnm[KEY_BOSS_ANIM_IN].setAnimEnable(false);
mAnm[KEY_BOSS_ANIM_KEYBOSS].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
return true;
}
bool dLytMeterBossKey_c::remove() {
for (int i = 0; i < KEY_BOSS_NUM_ANIMS; i++) {
mAnm[i].unbind();
mAnm[i].remove();
}
return true;
}
bool dLytMeterBossKey_c::execute() {
mStateMgr.executeState();
if (mPosition != mPanePositions[mPosititionIndex]) {
if (mMovementFrame < 5) {
mPosition = (mPanePositions[mPosititionIndex] - mPanePositions[mOldPosititionIndex]) *
cLib::easeOut(++mMovementFrame / 5.0f, 3.0f) +
mPanePositions[mOldPosititionIndex];
} else {
mMovementFrame = 0;
mPosition = mPanePositions[mPosititionIndex];
}
mpPane->SetTranslate(mPosition);
}
for (int i = 0; i < KEY_BOSS_NUM_ANIMS; i++) {
if (mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
mLyt.calc();
return true;
}
bool dLytMeterBossKey_c::draw() {
mLyt.addToDrawList();
return true;
}
void dLytMeterBossKey_c::setPosition(s32 position) {
if (mPosititionIndex == position) {
return;
}
mOldPosititionIndex = mPosititionIndex;
mPosititionIndex = position;
mMovementFrame = 0;
}
static const d2d::LytBrlanMapping brlanMapSmall[] = {
{ "keySmall_00_in.brlan", "G_inOut_00"},
{ "keySmall_00_out.brlan", "G_inOut_00"},
{"keySmall_00_keySmall.brlan", "G_keySmall_00"},
{ "keySmall_00_loop.brlan", "G_loop_00"},
{"keySmall_00_position.brlan", "G_position_00"},
};
#define KEY_SMALL_ANIM_IN 0
#define KEY_SMALL_ANIM_OUT 1
#define KEY_SMALL_ANIM_KEYSMALL 2
#define KEY_SMALL_ANIM_LOOP 3
#define KEY_SMALL_ANIM_POSITION 4
#define KEY_SMALL_NUM_ANIMS 5
void dLytMeterSmallKey_c::initializeState_Wait() {}
void dLytMeterSmallKey_c::executeState_Wait() {}
void dLytMeterSmallKey_c::executeState_Wait() {
if (mShouldBeVisible && dAcItem_c::getSmallKeyCount() != 0) {
mStateMgr.changeState(StateID_On);
}
}
void dLytMeterSmallKey_c::finalizeState_Wait() {}
void dLytMeterSmallKey_c::initializeState_On() {}
void dLytMeterSmallKey_c::executeState_On() {}
void dLytMeterSmallKey_c::initializeState_On() {
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(true);
mAnm[KEY_SMALL_ANIM_IN].setToEnd();
mSavedSmallKeyCount = dAcItem_c::getSmallKeyCount();
if (mSavedSmallKeyCount > 0 && mSavedSmallKeyCount <= 5) {
mAnm[KEY_SMALL_ANIM_KEYSMALL].setFrame(mSavedSmallKeyCount - 1);
}
mAnm[KEY_SMALL_ANIM_IN].setFrame(0.0f);
}
void dLytMeterSmallKey_c::executeState_On() {
if (mAnm[KEY_SMALL_ANIM_IN].isEndReached()) {
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Active);
}
}
void dLytMeterSmallKey_c::finalizeState_On() {}
void dLytMeterSmallKey_c::initializeState_Active() {}
void dLytMeterSmallKey_c::executeState_Active() {}
void dLytMeterSmallKey_c::executeState_Active() {
if (mSavedSmallKeyCount != dAcItem_c::getSmallKeyCount()) {
mSavedSmallKeyCount = dAcItem_c::getSmallKeyCount();
if (mSavedSmallKeyCount > 0 && mSavedSmallKeyCount <= 5) {
mAnm[KEY_SMALL_ANIM_KEYSMALL].setFrame(mSavedSmallKeyCount - 1);
}
}
if (!mShouldBeVisible || dAcItem_c::getSmallKeyCount() == 0) {
mStateMgr.changeState(StateID_Off);
}
}
void dLytMeterSmallKey_c::finalizeState_Active() {}
void dLytMeterSmallKey_c::initializeState_Off() {}
void dLytMeterSmallKey_c::executeState_Off() {}
void dLytMeterSmallKey_c::initializeState_Off() {
mAnm[KEY_SMALL_ANIM_OUT].setAnimEnable(true);
mAnm[KEY_SMALL_ANIM_OUT].setFrame(0.0f);
}
void dLytMeterSmallKey_c::executeState_Off() {
if (mAnm[KEY_SMALL_ANIM_OUT].isEndReached()) {
mAnm[KEY_SMALL_ANIM_OUT].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
}
}
void dLytMeterSmallKey_c::finalizeState_Off() {}
bool dLytMeterSmallKey_c::build(d2d::ResAccIf_c *resAcc) {
mLyt.setResAcc(resAcc);
mLyt.build("keySmall_00.brlyt", nullptr);
for (int i = 0; i < KEY_SMALL_NUM_ANIMS; i++) {
mAnm[i].init(brlanMapSmall[i].mFile, resAcc, mLyt.getLayout(), brlanMapSmall[i].mName);
mAnm[i].bind(false);
mAnm[i].setAnimEnable(false);
}
mAnm[KEY_SMALL_ANIM_LOOP].setAnimEnable(true);
mAnm[KEY_SMALL_ANIM_KEYSMALL].setAnimEnable(true);
mpPane = mLyt.findPane("N_keyAll_00");
mAnm[KEY_SMALL_ANIM_POSITION].setAnimEnable(true);
for (int i = 0; i < 4; i++) {
mAnm[KEY_SMALL_ANIM_POSITION].setFrame(i);
mLyt.calc();
mPanePositions[i].copyFrom(mLyt.findPane("N_keyPosition_00")->GetTranslate());
}
mAnm[KEY_SMALL_ANIM_POSITION].setAnimEnable(false);
mPosititionIndex = 1;
mOldPosititionIndex = 1;
mMovementFrame = 0;
mPosition.copyFrom(mPanePositions[mPosititionIndex]);
mShouldBeVisible = 0;
mSavedSmallKeyCount = 0;
mpPane->SetTranslate(mPosition);
mAnm[KEY_SMALL_ANIM_IN].setFrame(0.0f);
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(true);
mLyt.calc();
mAnm[KEY_SMALL_ANIM_IN].setAnimEnable(false);
mStateMgr.changeState(StateID_Wait);
return true;
}
bool dLytMeterSmallKey_c::remove() {
for (int i = 0; i < KEY_SMALL_NUM_ANIMS; i++) {
mAnm[i].unbind();
mAnm[i].remove();
}
return true;
}
bool dLytMeterSmallKey_c::execute() {
mStateMgr.executeState();
if (mPosition != mPanePositions[mPosititionIndex]) {
if (mMovementFrame < 5) {
mPosition = (mPanePositions[mPosititionIndex] - mPanePositions[mOldPosititionIndex]) *
cLib::easeOut(++mMovementFrame / 5.0f, 3.0f) +
mPanePositions[mOldPosititionIndex];
} else {
mMovementFrame = 0;
mPosition = mPanePositions[mPosititionIndex];
}
mpPane->SetTranslate(mPosition);
}
for (int i = 0; i < KEY_SMALL_NUM_ANIMS; i++) {
if (i != KEY_SMALL_ANIM_KEYSMALL && mAnm[i].isEnabled()) {
mAnm[i].play();
}
}
mLyt.calc();
return true;
}
bool dLytMeterSmallKey_c::draw() {
mLyt.addToDrawList();
return true;
}
void dLytMeterSmallKey_c::setPosition(s32 position) {
if (mPosititionIndex == position) {
return;
}
mOldPosititionIndex = mPosititionIndex;
mPosititionIndex = position;
mMovementFrame = 0;
}