mirror of
https://github.com/zeldaret/ss
synced 2026-05-23 23:05:20 -04:00
d_lyt_meter_shield_gauge OK
This commit is contained in:
@@ -448,7 +448,9 @@ d/lyt/meter/d_lyt_meter_heart.cpp:
|
||||
d/lyt/meter/d_lyt_meter_shield_gauge.cpp:
|
||||
.text start:0x8010BD50 end:0x8010CEC8
|
||||
.ctors start:0x804DB724 end:0x804DB728
|
||||
.rodata start:0x804E6CF8 end:0x804E6D60
|
||||
.data start:0x8051A320 end:0x8051A5A8
|
||||
.sdata2 start:0x80579D48 end:0x80579D70
|
||||
.bss start:0x805ACD50 end:0x805ACE10
|
||||
|
||||
d/lyt/d_lyt_do_button.cpp:
|
||||
|
||||
+21
-21
@@ -6499,10 +6499,10 @@ executeState_ToMax__22dLytMeterShieldGauge_cFv = .text:0x8010BDC0; // type:funct
|
||||
finalizeState_ToMax__22dLytMeterShieldGauge_cFv = .text:0x8010BDD0; // type:function size:0x4
|
||||
build__22dLytMeterShieldGauge_cFPQ23d2d10ResAccIf_c = .text:0x8010BDE0; // type:function size:0x2A0
|
||||
remove__22dLytMeterShieldGauge_cFv = .text:0x8010C080; // type:function size:0x58
|
||||
fn_8010C0E0 = .text:0x8010C0E0; // type:function size:0x9C0
|
||||
fn_8010CAA0 = .text:0x8010CAA0; // type:function size:0x40
|
||||
fn_8010CAE0 = .text:0x8010CAE0; // type:function size:0x20
|
||||
fn_8010CB00 = .text:0x8010CB00; // type:function size:0x2C
|
||||
execute__22dLytMeterShieldGauge_cFv = .text:0x8010C0E0; // type:function size:0x9C0
|
||||
setLevel__22dLytMeterShieldGauge_cFf = .text:0x8010CAA0; // type:function size:0x40
|
||||
getLytFrameForShield__22dLytMeterShieldGauge_cCFl = .text:0x8010CAE0; // type:function size:0x20
|
||||
calcUpdownRatio__22dLytMeterShieldGauge_cCFf = .text:0x8010CB00; // type:function size:0x2C
|
||||
getName__22dLytMeterShieldGauge_cCFv = .text:0x8010CB30; // type:function size:0x8
|
||||
getLyt__22dLytMeterShieldGauge_cFv = .text:0x8010CB40; // type:function size:0x8
|
||||
getPane__22dLytMeterShieldGauge_cFv = .text:0x8010CB50; // type:function size:0x8
|
||||
@@ -20848,7 +20848,7 @@ fn_8037E230 = .text:0x8037E230; // type:function size:0xEC
|
||||
fn_8037E320 = .text:0x8037E320; // type:function size:0x78
|
||||
fn_8037E3A0 = .text:0x8037E3A0; // type:function size:0x158
|
||||
fn_8037E500 = .text:0x8037E500; // type:function size:0x58
|
||||
fn_8037E560 = .text:0x8037E560; // type:function size:0xBC
|
||||
playSoundWithPitch__17SmallSoundManagerF7WZSoundf = .text:0x8037E560; // type:function size:0xBC
|
||||
fn_8037E620 = .text:0x8037E620; // type:function size:0xDC
|
||||
fn_8037E700 = .text:0x8037E700; // type:function size:0x8
|
||||
fn_8037E710 = .text:0x8037E710; // type:function size:0x8
|
||||
@@ -31877,25 +31877,25 @@ lbl_8051A234 = .data:0x8051A234; // type:object size:0xC
|
||||
lbl_8051A240 = .data:0x8051A240; // type:object size:0x98
|
||||
lbl_8051A2D8 = .data:0x8051A2D8; // type:object size:0x10
|
||||
__vt__16dLytMeterHeart_c = .data:0x8051A2E8; // type:object size:0x38
|
||||
lbl_8051A320 = .data:0x8051A320; // type:object size:0x18
|
||||
lbl_8051A338 = .data:0x8051A338; // type:object size:0xC
|
||||
lbl_8051A344 = .data:0x8051A344; // type:object size:0x18
|
||||
lbl_8051A35C = .data:0x8051A35C; // type:object size:0xC
|
||||
lbl_8051A368 = .data:0x8051A368; // type:object size:0x20
|
||||
lbl_8051A320 = .data:0x8051A320; // type:object size:0x16 data:string
|
||||
lbl_8051A338 = .data:0x8051A338; // type:object size:0xB data:string
|
||||
lbl_8051A344 = .data:0x8051A344; // type:object size:0x16 data:string
|
||||
lbl_8051A35C = .data:0x8051A35C; // type:object size:0xB data:string
|
||||
lbl_8051A368 = .data:0x8051A368; // type:object size:0x1D data:string
|
||||
lbl_8051A388 = .data:0x8051A388; // type:object size:0xC data:string
|
||||
lbl_8051A394 = .data:0x8051A394; // type:object size:0x1C
|
||||
lbl_8051A394 = .data:0x8051A394; // type:object size:0x1B data:string
|
||||
lbl_8051A3B0 = .data:0x8051A3B0; // type:object size:0x10 data:string
|
||||
lbl_8051A3C0 = .data:0x8051A3C0; // type:object size:0x1C
|
||||
lbl_8051A3C0 = .data:0x8051A3C0; // type:object size:0x1A data:string
|
||||
lbl_8051A3DC = .data:0x8051A3DC; // type:object size:0xC data:string
|
||||
lbl_8051A3E8 = .data:0x8051A3E8; // type:object size:0x18
|
||||
lbl_8051A400 = .data:0x8051A400; // type:object size:0xC
|
||||
lbl_8051A40C = .data:0x8051A40C; // type:object size:0x18
|
||||
lbl_8051A424 = .data:0x8051A424; // type:object size:0xC
|
||||
lbl_8051A430 = .data:0x8051A430; // type:object size:0x10
|
||||
lbl_8051A3E8 = .data:0x8051A3E8; // type:object size:0x16 data:string
|
||||
lbl_8051A400 = .data:0x8051A400; // type:object size:0xB data:string
|
||||
lbl_8051A40C = .data:0x8051A40C; // type:object size:0x15 data:string
|
||||
lbl_8051A424 = .data:0x8051A424; // type:object size:0xA data:string
|
||||
lbl_8051A430 = .data:0x8051A430; // type:object size:0xA data:string
|
||||
lbl_8051A440 = .data:0x8051A440; // type:object size:0x10 data:string
|
||||
lbl_8051A450 = .data:0x8051A450; // type:object size:0xC
|
||||
lbl_8051A450 = .data:0x8051A450; // type:object size:0xB data:string
|
||||
__vt__22dLytMeterShieldGauge_c = .data:0x8051A45C; // type:object size:0x34
|
||||
__vt__37sFStateID_c<22dLytMeterShieldGauge_c> = .data:0x8051A570; // type:object size:0x38
|
||||
__vt__37sFStateID_c<22dLytMeterShieldGauge_c> = .data:0x8051A570; // type:object size:0x34
|
||||
lbl_8051A5A8 = .data:0x8051A5A8; // type:object size:0x18
|
||||
lbl_8051A5C0 = .data:0x8051A5C0; // type:object size:0xC
|
||||
lbl_8051A5CC = .data:0x8051A5CC; // type:object size:0x20
|
||||
@@ -48792,8 +48792,8 @@ LytMeterTimer__STATE_SIREN = .bss:0x805ACBE0; // type:object size:0x80 data:4byt
|
||||
LytMeterTimer__STATE_CHANGE_SAFE = .bss:0x805ACC60; // type:object size:0x40 data:4byte
|
||||
LytMeterTimer__STATE_SAFE = .bss:0x805ACCA0; // type:object size:0x80 data:4byte
|
||||
LytMeterTimer__STATE_FRUITS = .bss:0x805ACD20; // type:object size:0x30 data:4byte
|
||||
lbl_805ACD50 = .bss:0x805ACD50; // type:object size:0x10
|
||||
LytMeterShieldGauge__STATE_NORMAL = .bss:0x805ACD60; // type:object size:0xB0 data:4byte
|
||||
lbl_805ACD50 = .bss:0x805ACD50; // type:object size:0xC
|
||||
LytMeterShieldGauge__STATE_NORMAL = .bss:0x805ACD60; // type:object size:0x30 data:4byte
|
||||
lbl_805ACE10 = .bss:0x805ACE10; // type:object size:0x10
|
||||
lbl_805ACE20 = .bss:0x805ACE20; // type:object size:0x28
|
||||
LytDoButton__STATE_INVISIBLE_WAIT = .bss:0x805ACE48; // type:object size:0x40 data:4byte
|
||||
|
||||
+1
-1
@@ -403,7 +403,7 @@ config.libs = [
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_event_skip.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_timer.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_heart.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_shield_gauge.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_shield_gauge.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_do_button.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_do_button_related.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_common_a_btn.cpp"),
|
||||
|
||||
@@ -12,6 +12,22 @@ public:
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
f32 getField_0x1CC() const {
|
||||
return field_0x1CC;
|
||||
}
|
||||
|
||||
f32 getField_0x1D0() const {
|
||||
return field_0x1D0;
|
||||
}
|
||||
|
||||
f32 getField_0x1C4() const {
|
||||
return field_0x1C4;
|
||||
}
|
||||
|
||||
s32 getField_0x1C8() const {
|
||||
return field_0x1C8;
|
||||
}
|
||||
|
||||
s32 getField_0x1D8() const {
|
||||
return field_0x1D8;
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
#define D_LYT_METER_SHIELD_GAUGE_H
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytMeterShieldGauge_c : public d2d::dSubPane {
|
||||
public:
|
||||
@@ -11,25 +11,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 ~dLytMeterShieldGauge_c() {}
|
||||
|
||||
void setContainerGroup(d2d::AnmGroup_c *g) {
|
||||
mpContainerAnmGroup = g;
|
||||
}
|
||||
|
||||
private:
|
||||
s32 getLytFrameForShield(s32) const;
|
||||
void setLevel(f32 level);
|
||||
f32 calcUpdownRatio(f32) const;
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterShieldGauge_c, Normal);
|
||||
STATE_FUNC_DECLARE(dLytMeterShieldGauge_c, Use);
|
||||
STATE_FUNC_DECLARE(dLytMeterShieldGauge_c, ToMax);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterShieldGauge_c);
|
||||
d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[8];
|
||||
/* 0x??? */ d2d::AnmGroup_c *mpContainerAnmGroup;
|
||||
/* 0x??? */ u8 padding[0x130C4 - 0x13080];
|
||||
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytMeterShieldGauge_c);
|
||||
/* 0x044 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnm[8];
|
||||
/* 0x2D8 */ d2d::AnmGroup_c *mpContainerAnmGroup;
|
||||
/* 0x2DC */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x2E0 */ f32 field_0x2E0;
|
||||
/* 0x2E4 */ f32 field_0x2E4;
|
||||
/* 0x2E8 */ f32 field_0x2E8;
|
||||
/* 0x2EC */ f32 field_0x2EC;
|
||||
/* 0x2F0 */ f32 field_0x2F0;
|
||||
/* 0x2F4 */ f32 field_0x2F4;
|
||||
/* 0x2F8 */ f32 field_0x2F8;
|
||||
/* 0x2FC */ s32 field_0x2FC;
|
||||
/* 0x300 */ f32 field_0x300;
|
||||
/* 0x304 */ f32 field_0x304;
|
||||
/* 0x308 */ s32 field_0x308;
|
||||
/* 0x30C */ u8 field_0x30C;
|
||||
/* 0x30D */ u8 field_0x30D;
|
||||
/* 0x30E */ u8 field_0x30E;
|
||||
/* 0x310 */ s32 field_0x310;
|
||||
/* 0x314 */ s32 field_0x314;
|
||||
/* 0x318 */ s32 field_0x318;
|
||||
/* 0x31C */ u8 field_0x31C;
|
||||
/* 0x31D */ u8 field_0x31D;
|
||||
/* 0x31E */ u8 field_0x31E;
|
||||
/* 0x31F */ u8 field_0x31F;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -6472,6 +6472,7 @@ enum WZSound {
|
||||
class SmallSoundManager {
|
||||
public:
|
||||
void playSound(WZSound id);
|
||||
void playSoundWithPitch(WZSound id, f32 pitch);
|
||||
void playButtonPressSoundWhenAdvancingTextBoxes(f32);
|
||||
|
||||
static SmallSoundManager *GetInstance() {
|
||||
|
||||
@@ -1,9 +1,39 @@
|
||||
#include "d/lyt/meter/d_lyt_meter_shield_gauge.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/d_pouch.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_meter_configuration.h"
|
||||
#include "toBeSorted/file_manager.h"
|
||||
#include "toBeSorted/small_sound_mgr.h"
|
||||
|
||||
STATE_DEFINE(dLytMeterShieldGauge_c, Normal);
|
||||
STATE_DEFINE(dLytMeterShieldGauge_c, Use);
|
||||
STATE_DEFINE(dLytMeterShieldGauge_c, ToMax);
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{ "shield_00_break.brlan", "G_break_00"},
|
||||
{ "shield_00_level.brlan", "G_level_00"},
|
||||
{"shield_00_shieldUpDown.brlan", "G_shield_00"},
|
||||
{ "shield_00_shieldType.brlan", "G_shieldType_00"},
|
||||
{ "shield_00_shieldUse.brlan", "G_shield_01"},
|
||||
{ "shield_00_toMax.brlan", "G_toMax_00"},
|
||||
{ "shield_00_loop.brlan", "G_loop_00"},
|
||||
{ "shield_00_loop.brlan", "G_loop_01"},
|
||||
};
|
||||
|
||||
#define SHIELD_ANIM_BREAK 0
|
||||
#define SHIELD_ANIM_LEVEL 1
|
||||
#define SHIELD_ANIM_UPDOWN 2
|
||||
#define SHIELD_ANIM_TYPE 3
|
||||
#define SHIELD_ANIM_USE 4
|
||||
#define SHIELD_ANIM_TO_MAX 5
|
||||
#define SHIELD_ANIM_LOOP_0 6
|
||||
#define SHIELD_ANIM_LOOP_1 7
|
||||
|
||||
#define SHIELD_NUM_ANIMS 8
|
||||
|
||||
// Incredible use of the state manager here
|
||||
void dLytMeterShieldGauge_c::initializeState_Normal() {}
|
||||
void dLytMeterShieldGauge_c::executeState_Normal() {}
|
||||
void dLytMeterShieldGauge_c::finalizeState_Normal() {}
|
||||
@@ -17,31 +47,332 @@ void dLytMeterShieldGauge_c::executeState_ToMax() {}
|
||||
void dLytMeterShieldGauge_c::finalizeState_ToMax() {}
|
||||
|
||||
bool dLytMeterShieldGauge_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
// TODO
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("shield_00.brlyt", nullptr);
|
||||
|
||||
for (int i = 0; i < SHIELD_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mpOwnerPane = nullptr;
|
||||
field_0x31D = 1;
|
||||
field_0x2E0 = 0.0f;
|
||||
field_0x2E4 = 0.0f;
|
||||
field_0x2E8 = 0.0f;
|
||||
field_0x2EC = 0.0f;
|
||||
|
||||
field_0x308 = convertFilePouchSlot(FileManager::GetInstance()->getShieldPouchSlot());
|
||||
field_0x300 = field_0x2EC;
|
||||
field_0x304 = field_0x2E0;
|
||||
field_0x2FC = dLytMeterConfiguration_c::GetInstance()->getField_0x1C8();
|
||||
field_0x2F0 = 80.0f;
|
||||
field_0x2F4 = 80.0f;
|
||||
|
||||
field_0x2F8 = mAnm[SHIELD_ANIM_USE].getAnimDuration() - 1.0f;
|
||||
field_0x30D = 0;
|
||||
field_0x30E = 0;
|
||||
field_0x30C = 0;
|
||||
field_0x31F = 0;
|
||||
field_0x31E = 0;
|
||||
field_0x318 = 0;
|
||||
field_0x310 = 0;
|
||||
field_0x314 = -1;
|
||||
|
||||
mAnm[SHIELD_ANIM_UPDOWN].setFrame(field_0x2E0);
|
||||
mAnm[SHIELD_ANIM_UPDOWN].setAnimEnable(true);
|
||||
field_0x2E4 = calcUpdownRatio(field_0x2E0);
|
||||
mAnm[SHIELD_ANIM_USE].setFrame(field_0x2F8 - field_0x2E4);
|
||||
mAnm[SHIELD_ANIM_USE].setAnimEnable(true);
|
||||
setLevel(field_0x2F0);
|
||||
mAnm[SHIELD_ANIM_LEVEL].setAnimEnable(true);
|
||||
mAnm[SHIELD_ANIM_TYPE].setFrame(getLytFrameForShield(0));
|
||||
mAnm[SHIELD_ANIM_TYPE].setAnimEnable(true);
|
||||
mAnm[SHIELD_ANIM_LOOP_0].setAnimEnable(true);
|
||||
mAnm[SHIELD_ANIM_LOOP_1].setAnimEnable(true);
|
||||
|
||||
mAnm[SHIELD_ANIM_BREAK].setToEnd();
|
||||
mAnm[SHIELD_ANIM_BREAK].setAnimEnable(true);
|
||||
|
||||
mLyt.calc();
|
||||
|
||||
mAnm[SHIELD_ANIM_UPDOWN].setAnimEnable(false);
|
||||
mAnm[SHIELD_ANIM_LEVEL].setAnimEnable(false);
|
||||
mAnm[SHIELD_ANIM_TYPE].setAnimEnable(false);
|
||||
mAnm[SHIELD_ANIM_BREAK].setAnimEnable(false);
|
||||
field_0x31C = 1;
|
||||
field_0x30C = 1;
|
||||
mStateMgr.changeState(StateID_Normal);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterShieldGauge_c::remove() {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
mAnmGroups[i].unbind();
|
||||
mAnmGroups[i].remove();
|
||||
mAnm[i].unbind();
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterShieldGauge_c::execute() {
|
||||
// TODO
|
||||
if (!mpOwnerPane) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!mpOwnerPane->IsVisible()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (field_0x2E0 == 0.0f) {
|
||||
field_0x318 = 2;
|
||||
}
|
||||
|
||||
bool b1 = false;
|
||||
bool b2 = true;
|
||||
bool b3 = false;
|
||||
bool b4 = false;
|
||||
|
||||
if (field_0x310 != field_0x314 ||
|
||||
field_0x308 != convertFilePouchSlot(FileManager::GetInstance()->getShieldPouchSlot())) {
|
||||
mLyt.findPane("N_alpha_00")->SetVisible(true);
|
||||
field_0x314 = field_0x310;
|
||||
mAnm[SHIELD_ANIM_TYPE].setFrame(getLytFrameForShield(field_0x310));
|
||||
mAnm[SHIELD_ANIM_TYPE].setAnimEnable(true);
|
||||
mAnm[SHIELD_ANIM_LOOP_0].setFrame(0.0f);
|
||||
field_0x31D = 1;
|
||||
b2 = false;
|
||||
b3 = true;
|
||||
field_0x2E8 = field_0x2E0;
|
||||
field_0x308 = convertFilePouchSlot(FileManager::GetInstance()->getShieldPouchSlot());
|
||||
}
|
||||
|
||||
if (field_0x2E0 != field_0x2E8 || field_0x31D) {
|
||||
if (field_0x2E0 < field_0x2E8) {
|
||||
f32 f = calcUpdownRatio(field_0x2E0);
|
||||
field_0x2E8 = field_0x2E0;
|
||||
mAnm[SHIELD_ANIM_UPDOWN].setFrame(f);
|
||||
mAnm[SHIELD_ANIM_UPDOWN].setAnimEnable(true);
|
||||
b1 = true;
|
||||
if (field_0x31F && field_0x31D) {
|
||||
field_0x31F = 0;
|
||||
b1 = false;
|
||||
}
|
||||
field_0x31E = 0;
|
||||
b4 = true;
|
||||
} else {
|
||||
b1 = true;
|
||||
field_0x2EC += 1.0f;
|
||||
if (field_0x31F && field_0x31D) {
|
||||
field_0x31F = 0;
|
||||
b1 = false;
|
||||
}
|
||||
if (field_0x2EC >= field_0x2E0 || field_0x31D) {
|
||||
field_0x2EC = field_0x2E0;
|
||||
}
|
||||
if (field_0x2E0 < field_0x2EC) {
|
||||
field_0x31E = 1;
|
||||
}
|
||||
|
||||
if (!field_0x31D) {
|
||||
if (field_0x2E0 >= field_0x2F0) {
|
||||
if (field_0x31E) {
|
||||
SmallSoundManager::GetInstance()->playSoundWithPitch(SE_S_GAUGE_SHIELD_UP_LV, 1.0f);
|
||||
}
|
||||
SmallSoundManager::GetInstance()->playSound(SE_S_GAUGE_SHIELD_UP_MAX);
|
||||
} else {
|
||||
if (field_0x31E) {
|
||||
SmallSoundManager::GetInstance()->playSoundWithPitch(
|
||||
SE_S_GAUGE_SHIELD_UP_LV, field_0x2E0 / field_0x2F0
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
f32 tmp = calcUpdownRatio(field_0x2EC);
|
||||
field_0x2E4 = tmp;
|
||||
if (!field_0x31F) {
|
||||
mAnm[SHIELD_ANIM_USE].setFrame(field_0x2F8 - field_0x2E4);
|
||||
mAnm[SHIELD_ANIM_USE].setAnimEnable(true);
|
||||
}
|
||||
field_0x2E8 = field_0x2EC;
|
||||
mAnm[SHIELD_ANIM_UPDOWN].setFrame(tmp);
|
||||
mAnm[SHIELD_ANIM_UPDOWN].setAnimEnable(true);
|
||||
}
|
||||
|
||||
if (FileManager::GetInstance()->getShieldPouchSlot() == 8) {
|
||||
if (field_0x2E0 <= 0.0f && b4) {
|
||||
mAnm[SHIELD_ANIM_BREAK].setFrame(0.0f);
|
||||
mAnm[SHIELD_ANIM_BREAK].setAnimEnable(true);
|
||||
field_0x30D = 1;
|
||||
} else {
|
||||
mAnm[SHIELD_ANIM_BREAK].setToEnd();
|
||||
mAnm[SHIELD_ANIM_BREAK].setAnimEnable(true);
|
||||
mLyt.calc();
|
||||
mAnm[SHIELD_ANIM_BREAK].setAnimEnable(false);
|
||||
field_0x30C = 1;
|
||||
}
|
||||
} else {
|
||||
if (field_0x2E0 <= 0.0f && b4) {
|
||||
mAnm[SHIELD_ANIM_BREAK].setFrame(0.0f);
|
||||
mAnm[SHIELD_ANIM_BREAK].setAnimEnable(true);
|
||||
field_0x30D = 1;
|
||||
} else if (b2 && field_0x2E0 >= field_0x2F0) {
|
||||
mAnm[SHIELD_ANIM_TO_MAX].setFrame(0.0f);
|
||||
mAnm[SHIELD_ANIM_TO_MAX].setAnimEnable(true);
|
||||
field_0x30E = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
f32 f1 = dLytMeterConfiguration_c::GetInstance()->getField_0x1CC() * 40.0f / 4.0f;
|
||||
f32 f2 = dLytMeterConfiguration_c::GetInstance()->getField_0x1D0() * 40.0f / 4.0f;
|
||||
f32 f3 = dLytMeterConfiguration_c::GetInstance()->getField_0x1C4() * 40.0f / 4.0f;
|
||||
|
||||
(void)calcUpdownRatio(field_0x2E0);
|
||||
|
||||
if (field_0x31F) {
|
||||
if (field_0x2E0 < field_0x304 && field_0x2E0 < field_0x2EC - f1) {
|
||||
field_0x2FC = dLytMeterConfiguration_c::GetInstance()->getField_0x1C8();
|
||||
field_0x300 = field_0x2EC;
|
||||
field_0x304 = field_0x2E0;
|
||||
field_0x2E4 = calcUpdownRatio(field_0x2EC);
|
||||
mAnm[SHIELD_ANIM_USE].setFrame(field_0x2F8 - field_0x2E4);
|
||||
mAnm[SHIELD_ANIM_USE].setAnimEnable(true);
|
||||
} else {
|
||||
if (field_0x2FC > 0) {
|
||||
field_0x2FC--;
|
||||
}
|
||||
if (field_0x2FC == 0) {
|
||||
field_0x300 = field_0x300 - f2;
|
||||
if (field_0x300 < field_0x2E0) {
|
||||
field_0x31F = 0;
|
||||
field_0x300 = field_0x2E0;
|
||||
}
|
||||
mAnm[SHIELD_ANIM_USE].setAnimEnable(true);
|
||||
field_0x2E4 = calcUpdownRatio(field_0x300);
|
||||
mAnm[SHIELD_ANIM_USE].setFrame(field_0x2F8 - field_0x2E4);
|
||||
}
|
||||
}
|
||||
} else if (!field_0x31D && field_0x2E0 < field_0x2EC - f3) {
|
||||
field_0x31F = 1;
|
||||
field_0x300 = field_0x2EC;
|
||||
field_0x304 = field_0x2E0;
|
||||
field_0x2FC = dLytMeterConfiguration_c::GetInstance()->getField_0x1C8();
|
||||
field_0x2E4 = calcUpdownRatio(field_0x2EC);
|
||||
mAnm[SHIELD_ANIM_USE].setFrame(field_0x2F8 - field_0x2E4);
|
||||
mAnm[SHIELD_ANIM_USE].setAnimEnable(true);
|
||||
} else if (!b1) {
|
||||
field_0x2E4 = calcUpdownRatio(field_0x2EC);
|
||||
mAnm[SHIELD_ANIM_USE].setFrame(field_0x2F8 - field_0x2E4);
|
||||
mAnm[SHIELD_ANIM_USE].setAnimEnable(true);
|
||||
}
|
||||
|
||||
if (!b1) {
|
||||
field_0x2EC = field_0x2E0;
|
||||
}
|
||||
field_0x31D = 0;
|
||||
if (field_0x2F0 != field_0x2F4 || b3) {
|
||||
setLevel(field_0x2F0);
|
||||
mAnm[SHIELD_ANIM_LEVEL].setAnimEnable(true);
|
||||
field_0x2F4 = field_0x2F0;
|
||||
}
|
||||
|
||||
if (mAnm[SHIELD_ANIM_BREAK].isEnabled()) {
|
||||
if (field_0x318 == 0 && field_0x2E0 > 0) {
|
||||
mAnm[SHIELD_ANIM_BREAK].setFrame(0.0f);
|
||||
mAnm[SHIELD_ANIM_BREAK].setAnimEnable(true); // redundant?
|
||||
field_0x30C = 0;
|
||||
field_0x30D = 0;
|
||||
} else if (mAnm[SHIELD_ANIM_BREAK].isEndReached()) {
|
||||
mAnm[SHIELD_ANIM_BREAK].setAnimEnable(false);
|
||||
field_0x30C = 1;
|
||||
field_0x30D = 0;
|
||||
} else {
|
||||
mAnm[SHIELD_ANIM_BREAK].play();
|
||||
}
|
||||
} else if (field_0x30C && !field_0x318 && field_0x2E0 > 0.0f) {
|
||||
mAnm[SHIELD_ANIM_BREAK].setFrame(0.0f);
|
||||
mAnm[SHIELD_ANIM_BREAK].setAnimEnable(true);
|
||||
field_0x30C = 0;
|
||||
field_0x30D = 0;
|
||||
}
|
||||
|
||||
if (mAnm[SHIELD_ANIM_TO_MAX].isEnabled()) {
|
||||
if (mAnm[SHIELD_ANIM_TO_MAX].isEndReached()) {
|
||||
mAnm[SHIELD_ANIM_TO_MAX].setAnimEnable(false);
|
||||
field_0x30E = 0;
|
||||
} else {
|
||||
mAnm[SHIELD_ANIM_TO_MAX].play();
|
||||
}
|
||||
}
|
||||
|
||||
mStateMgr.executeState();
|
||||
|
||||
if ((field_0x314 == 6 || field_0x314 == 7 || field_0x314 == 8) && mAnm[SHIELD_ANIM_USE].getFrame() == 0.0f &&
|
||||
mAnm[SHIELD_ANIM_LOOP_0].getFrame() == 0.0f) {
|
||||
if (mAnm[SHIELD_ANIM_LOOP_0].isEnabled()) {
|
||||
mAnm[SHIELD_ANIM_LOOP_0].setAnimEnable(false);
|
||||
}
|
||||
} else if (!mAnm[SHIELD_ANIM_LOOP_0].isEnabled()) {
|
||||
mAnm[SHIELD_ANIM_LOOP_0].setAnimEnable(true);
|
||||
}
|
||||
|
||||
if (mAnm[SHIELD_ANIM_LOOP_0].isEnabled()) {
|
||||
mAnm[SHIELD_ANIM_LOOP_0].play();
|
||||
}
|
||||
|
||||
if (mAnm[SHIELD_ANIM_LOOP_1].isEnabled()) {
|
||||
mAnm[SHIELD_ANIM_LOOP_1].play();
|
||||
}
|
||||
|
||||
mLyt.calc();
|
||||
|
||||
if (mAnm[SHIELD_ANIM_UPDOWN].isEnabled()) {
|
||||
mAnm[SHIELD_ANIM_UPDOWN].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (mAnm[SHIELD_ANIM_LEVEL].isEnabled()) {
|
||||
mAnm[SHIELD_ANIM_LEVEL].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (mAnm[SHIELD_ANIM_TYPE].isEnabled()) {
|
||||
mAnm[SHIELD_ANIM_TYPE].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (mAnm[SHIELD_ANIM_USE].isEnabled()) {
|
||||
mAnm[SHIELD_ANIM_USE].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (!field_0x30E && mAnm[SHIELD_ANIM_TO_MAX].isEnabled()) {
|
||||
mAnm[SHIELD_ANIM_TO_MAX].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (!field_0x30C && !field_0x30D && mAnm[SHIELD_ANIM_BREAK].isEnabled()) {
|
||||
mAnm[SHIELD_ANIM_BREAK].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (field_0x318 > 0) {
|
||||
field_0x318--;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const char *dLytMeterShieldGauge_c::getName() const {
|
||||
return mLyt.getName();
|
||||
void dLytMeterShieldGauge_c::setLevel(f32 lv) {
|
||||
mAnm[SHIELD_ANIM_LEVEL].setFrame(lv * 0.5f);
|
||||
}
|
||||
|
||||
d2d::LytBase_c *dLytMeterShieldGauge_c::getLyt() {
|
||||
return &mLyt;
|
||||
s32 dLytMeterShieldGauge_c::getLytFrameForShield(s32 shield) const {
|
||||
static const int table[] = {0, 4, 7, 1, 5, 8, 2, 6, 9, 3};
|
||||
if (shield == 10) {
|
||||
shield = 0;
|
||||
}
|
||||
return table[shield];
|
||||
}
|
||||
|
||||
nw4r::lyt::Pane *dLytMeterShieldGauge_c::getPane() {
|
||||
return mLyt.getLayout()->GetRootPane();
|
||||
f32 dLytMeterShieldGauge_c::calcUpdownRatio(f32 f) const {
|
||||
f32 duration = mAnm[SHIELD_ANIM_UPDOWN].getAnimDuration() - 1.0f;
|
||||
f32 bound = 0.0f;
|
||||
f32 b = (field_0x2F0 > bound ? f / field_0x2F0 : bound);
|
||||
return b * duration;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user