mirror of
https://github.com/zeldaret/ss
synced 2026-06-04 10:48:38 -04:00
Merge pull request #153 from robojumper/d_lyt_meter_stuff
d_lyt_meter OK
This commit is contained in:
@@ -316,19 +316,27 @@ d/lyt/meter/d_lyt_meter_unk.cpp:
|
||||
d/lyt/meter/d_lyt_meter_a_btn.cpp:
|
||||
.text start:0x800DFCC0 end:0x800E1188
|
||||
.ctors start:0x804DB6E4 end:0x804DB6E8
|
||||
.data start:0x80513BE8 end:0x80513F38
|
||||
.rodata start:0x804E5020 end:0x804E5298
|
||||
.data start:0x80513B70 end:0x80513F38
|
||||
.sdata start:0x80572380 end:0x80572398
|
||||
.sdata2 start:0x80579B60 end:0x80579B70
|
||||
.bss start:0x805AA190 end:0x805AA350
|
||||
|
||||
d/lyt/meter/d_lyt_meter_z_btn.cpp:
|
||||
.text start:0x800E1190 end:0x800E2238
|
||||
.ctors start:0x804DB6E8 end:0x804DB6EC
|
||||
.rodata start:0x804E5298 end:0x804E5510
|
||||
.data start:0x80513F38 end:0x80514188
|
||||
.sdata start:0x80572398 end:0x805723B8
|
||||
.sdata2 start:0x80579B70 end:0x80579B80
|
||||
.bss start:0x805AA350 end:0x805AA450
|
||||
|
||||
d/lyt/meter/d_lyt_meter_key.cpp:
|
||||
.text start:0x800E2240 end:0x800E4928
|
||||
.ctors start:0x804DB6EC end:0x804DB6F0
|
||||
.rodata start:0x804E5510 end:0x804E55A0
|
||||
.data start:0x80514188 end:0x805148B0
|
||||
.sdata2 start:0x80579B80 end:0x80579BA0
|
||||
.bss start:0x805AA450 end:0x805AA790
|
||||
|
||||
d/lyt/meter/d_lyt_meter_drink.cpp:
|
||||
@@ -343,71 +351,121 @@ d/lyt/meter/d_lyt_meter_remocon_bg.cpp:
|
||||
.text start:0x800E6AD0 end:0x800E7218
|
||||
.ctors start:0x804DB6F4 end:0x804DB6F8
|
||||
.data start:0x80514D60 end:0x80514F10
|
||||
.sdata start:0x805723B8 end:0x805723C0
|
||||
.bss start:0x805AA9D0 end:0x805AAAD0
|
||||
|
||||
d/lyt/meter/d_lyt_meter_nunchaku_bg.cpp:
|
||||
.text start:0x800E7220 end:0x800E8168
|
||||
.ctors start:0x804DB6F8 end:0x804DB6FC
|
||||
.rodata start:0x804E5640 end:0x804E58B8
|
||||
.data start:0x80514F10 end:0x80515178
|
||||
.sdata start:0x805723C0 end:0x805723D8
|
||||
.sdata2 start:0x80579BB0 end:0x80579BC0
|
||||
.bss start:0x805AAAD0 end:0x805AABD0
|
||||
|
||||
d/lyt/meter/d_lyt_meter_nun_stk.cpp:
|
||||
.text start:0x800E8170 end:0x800E8ED8
|
||||
.ctors start:0x804DB6FC end:0x804DB700
|
||||
.rodata start:0x804E58B8 end:0x804E5B28
|
||||
.data start:0x80515178 end:0x805153A8
|
||||
.sdata start:0x805723D8 end:0x805723F0
|
||||
.sdata2 start:0x80579BC0 end:0x80579BD0
|
||||
.bss start:0x805AABD0 end:0x805AACD0
|
||||
|
||||
d/lyt/meter/d_lyt_meter_item_select.cpp:
|
||||
.text start:0x800E8EE0 end:0x800F35A8
|
||||
.ctors start:0x804DB700 end:0x804DB704
|
||||
.rodata start:0x804E5B28 end:0x804E5F28
|
||||
.data start:0x805153A8 end:0x80516A28
|
||||
.sdata start:0x805723F0 end:0x80572400
|
||||
.sdata2 start:0x80579BD0 end:0x80579BF8
|
||||
.bss start:0x805AACD0 end:0x805AB650
|
||||
|
||||
d/lyt/meter/d_lyt_meter_plus_btn.cpp:
|
||||
.text start:0x800F35B0 end:0x800F4768
|
||||
.ctors start:0x804DB704 end:0x804DB708
|
||||
.rodata start:0x804E5F28 end:0x804E61A0
|
||||
.data start:0x80516A28 end:0x80516C90
|
||||
.sdata start:0x80572400 end:0x80572418
|
||||
.sdata2 start:0x80579BF8 end:0x80579C08
|
||||
.bss start:0x805AB650 end:0x805AB750
|
||||
|
||||
d/lyt/meter/d_lyt_meter_minus_btn.cpp:
|
||||
.text start:0x800F4770 end:0x800F8D98
|
||||
.ctors start:0x804DB708 end:0x804DB70C
|
||||
.rodata start:0x804E61A0 end:0x804E62A8
|
||||
.data start:0x80516C90 end:0x80517818
|
||||
.sdata start:0x80572418 end:0x80572480
|
||||
.sdata2 start:0x80579C08 end:0x80579C18
|
||||
.bss start:0x805AB750 end:0x805ABC90
|
||||
|
||||
d/lyt/meter/d_lyt_meter_cross_btn.cpp:
|
||||
.text start:0x800F8DA0 end:0x800FAFC8
|
||||
.ctors start:0x804DB70C end:0x804DB710
|
||||
.rodata start:0x804E62A8 end:0x804E6568
|
||||
.data start:0x80517818 end:0x80517CE0
|
||||
.sdata start:0x80572480 end:0x805724A8
|
||||
.sdata2 start:0x80579C18 end:0x80579C38
|
||||
.bss start:0x805ABC90 end:0x805ABE90
|
||||
|
||||
d/lyt/meter/d_lyt_meter_dowsing.cpp:
|
||||
.text start:0x800FAFD0 end:0x801003E8
|
||||
.ctors start:0x804DB710 end:0x804DB714
|
||||
.rodata start:0x804E6568 end:0x804E6928
|
||||
.data start:0x80517CE0 end:0x80518A60
|
||||
.sdata start:0x805724A8 end:0x805724F0
|
||||
.sdata2 start:0x80579C38 end:0x80579C48
|
||||
.bss start:0x805ABE90 end:0x805AC550
|
||||
|
||||
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
|
||||
.ctors start:0x804DB718 end:0x804DB71C
|
||||
.rodata start:0x804E69D8 end:0x804E6A58
|
||||
.data start:0x80518F00 end:0x80519578
|
||||
.sdata start:0x805724F0 end:0x80572500
|
||||
.sdata2 start:0x80579C78 end:0x80579CF8
|
||||
.bss start:0x805AC750 end:0x805ACA90
|
||||
|
||||
d/lyt/meter/d_lyt_meter_event_skip.cpp:
|
||||
.text start:0x80105550 end:0x80105F68
|
||||
.ctors start:0x804DB71C end:0x804DB720
|
||||
.rodata start:0x804E6A58 end:0x804E6A68
|
||||
.data start:0x80519578 end:0x80519748
|
||||
.sdata start:0x80572500 end:0x80572510
|
||||
.sdata2 start:0x80579CF8 end:0x80579D00
|
||||
.bss start:0x805ACA90 end:0x805ACB90
|
||||
|
||||
d/lyt/meter/d_lyt_meter_timer.cpp:
|
||||
.text start:0x80105F70 end:0x8010AEB8
|
||||
.ctors start:0x804DB720 end:0x804DB724
|
||||
.rodata start:0x804E6A68 end:0x804E6C28
|
||||
.data start:0x80519748 end:0x80519F60
|
||||
.sdata start:0x80572510 end:0x80572518
|
||||
.sbss start:0x80575458 end:0x80575468
|
||||
.sdata2 start:0x80579D00 end:0x80579D30
|
||||
.bss start:0x805ACB90 end:0x805ACD50
|
||||
|
||||
d/lyt/meter/d_lyt_meter_heart.cpp:
|
||||
.text start:0x8010AEC0 end:0x8010BD48
|
||||
.rodata start:0x804E6C28 end:0x804E6CF8
|
||||
.data start:0x80519F60 end:0x8051A320
|
||||
.sdata start:0x80572518 end:0x80572520
|
||||
.sdata2 start:0x80579D30 end:0x80579D48
|
||||
|
||||
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:
|
||||
@@ -417,6 +475,10 @@ d/lyt/d_lyt_do_button.cpp:
|
||||
.data start:0x8051A5A8 end:0x8051AC00
|
||||
.bss start:0x805ACE10 end:0x805ACF78
|
||||
|
||||
d/lyt/d_lyt_do_button_related.cpp:
|
||||
.text start:0x8010EB00 end:0x8010EF8C
|
||||
.ctors start:0x804DB72C end:0x804DB730
|
||||
|
||||
d/lyt/d_lyt_common_a_btn.cpp:
|
||||
.text start:0x8010EF90 end:0x8010F818
|
||||
.rodata start:0x804E72E0 end:0x804E7330
|
||||
@@ -592,12 +654,17 @@ d/lyt/d_lyt_area_caption.cpp:
|
||||
.data start:0x80522B00 end:0x80522E80
|
||||
.sdata start:0x80572878 end:0x80572880
|
||||
.sbss start:0x805754C0 end:0x805754C8
|
||||
.sdata2 start:0x80579FD0 end:0x80579FE0
|
||||
.bss start:0x805B0A70 end:0x805B0B30
|
||||
|
||||
d/lyt/d_lyt_wipe.cpp:
|
||||
.text start:0x8014C6C0 end:0x8014E008
|
||||
.ctors start:0x804DB77C end:0x804DB780
|
||||
.data start:0x80522E80 end:0x805231E8
|
||||
.sdata start:0x80572880 end:0x80572888
|
||||
.sbss start:0x805754C8 end:0x805754D0
|
||||
.sdata2 start:0x80579FE0 end:0x80579FF0
|
||||
.bss start:0x805B0B30 end:0x805B0D30
|
||||
|
||||
d/lyt/d_lyt_help.cpp:
|
||||
.text start:0x8014E010 end:0x80150428
|
||||
@@ -657,6 +724,9 @@ d/lyt/d_lyt_save_msg_window.cpp:
|
||||
.text start:0x80164F90 end:0x80166968
|
||||
.ctors start:0x804DB7A8 end:0x804DB7AC
|
||||
|
||||
d/lyt/d_lyt_util_items.cpp:
|
||||
.text start:0x80166970 end:0x80167FD4
|
||||
|
||||
d/lyt/d_lyt_common_arrow.cpp:
|
||||
.text start:0x80167FE0 end:0x801695E8
|
||||
.ctors start:0x804DB7AC end:0x804DB7B0
|
||||
@@ -749,6 +819,9 @@ d/a/d_a_door_base.cpp:
|
||||
d/lyt/d_lyt_map_popup.cpp:
|
||||
.text start:0x801792D0 end:0x80189F9C
|
||||
|
||||
d/d_pouch.cpp:
|
||||
.text start:0x80189FA0 end:0x8018B4A4
|
||||
|
||||
d/a/d_a_fish_mgr_base.cpp:
|
||||
.text start:0x8018B880 end:0x8018BFC8
|
||||
.ctors start:0x804DB7E4 end:0x804DB7E8
|
||||
@@ -945,6 +1018,14 @@ d/lyt/d_lyt_save_mgr.cpp:
|
||||
.text start:0x80284FB0 end:0x80286C88
|
||||
.ctors start:0x804DB864 end:0x804DB868
|
||||
|
||||
d/lyt/d_lyt_drop_line.cpp:
|
||||
.text start:0x80286C90 end:0x802884F8
|
||||
.ctors start:0x804DB868 end:0x804DB86C
|
||||
|
||||
d/lyt/d_lyt_force_line.cpp:
|
||||
.text start:0x80288500 end:0x8028A9F8
|
||||
.ctors start:0x804DB86C end:0x804DB870
|
||||
|
||||
d/lyt/d_lyt_enemy_icon.cpp:
|
||||
.text start:0x8028AA00 end:0x8028BCD8
|
||||
.ctors start:0x804DB870 end:0x804DB874
|
||||
@@ -975,6 +1056,7 @@ d/lyt/d_lyt_end_roll.cpp:
|
||||
d/lyt/d_lyt_control_game.cpp:
|
||||
.text start:0x802CC7B0 end:0x802D16A8
|
||||
.ctors start:0x804DB8A0 end:0x804DB8A4
|
||||
.data start:0x805403F8 end:0x80540C88
|
||||
|
||||
d/lyt/d_lyt_control_title.cpp:
|
||||
.text start:0x802D16B0 end:0x802D17BC
|
||||
|
||||
+1749
-1750
File diff suppressed because it is too large
Load Diff
+23
-22
@@ -384,27 +384,28 @@ config.libs = [
|
||||
Object(Matching, "d/d_textunk.cpp"),
|
||||
Object(NonMatching, "d/d_textwindow_unk.cpp"),
|
||||
Object(NonMatching, "d/d_tag_processor.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_unk.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_a_btn.cpp"),
|
||||
Object(NonMatching, "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_a_btn.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_z_btn.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_key.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_drink.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_remocon_bg.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_nunchaku_bg.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_nun_stk.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_item_select.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_plus_btn.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_minus_btn.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_cross_btn.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_dowsing.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_rupy.cpp"),
|
||||
Object(NonMatching, "d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp"),
|
||||
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_remocon_bg.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_nunchaku_bg.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_nun_stk.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_item_select.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_plus_btn.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_minus_btn.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_cross_btn.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_dowsing.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_rupy.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_ganbari_gauge.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_event_skip.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_timer.cpp"),
|
||||
Object(Matching, "d/lyt/meter/d_lyt_meter_heart.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"),
|
||||
Object(Matching, "d/lyt/d_lyt_common_icon_material.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_common_icon_item.cpp"),
|
||||
@@ -419,14 +420,14 @@ config.libs = [
|
||||
Object(Matching, "d/lyt/msg_window/d_lyt_msg_window_stone.cpp"),
|
||||
Object(Matching, "d/lyt/msg_window/d_lyt_msg_window_demo.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_simple_window.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_auto_caption.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_auto_explain.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_auto_caption.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_auto_explain.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_map_capture.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_map.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_note.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_battery.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_area_caption.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_wipe.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_area_caption.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_wipe.cpp"),
|
||||
Object(NonMatching, "d/lyt/d_lyt_help.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_bird_gauge.cpp"),
|
||||
Object(Matching, "d/lyt/d_lyt_sky_gauge.cpp"),
|
||||
|
||||
@@ -10,6 +10,9 @@ s32 targetAngleY(const mVec3_c &target, const mVec3_c &source);
|
||||
s32 targetAngleX(const mVec3_c &target, const mVec3_c &source);
|
||||
f32 addCalcPosXZ(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f32 minStep);
|
||||
|
||||
// made up name
|
||||
f32 easeOut(f32 value, f32 exponent);
|
||||
|
||||
} // namespace cLib
|
||||
|
||||
#endif
|
||||
|
||||
@@ -21,6 +21,15 @@
|
||||
|
||||
#define ALIGN_DECL(ALIGNMENT) __attribute__((aligned(ALIGNMENT)))
|
||||
|
||||
// static_assert from TP
|
||||
#ifdef __MWERKS__
|
||||
#define GLUE(a, b) a##b
|
||||
#define GLUE2(a, b) GLUE(a, b)
|
||||
#define STATIC_ASSERT(cond) typedef char GLUE2(static_assertion_failed, __LINE__)[(cond) ? 1 : -1]
|
||||
#else
|
||||
#define STATIC_ASSERT(...)
|
||||
#endif
|
||||
|
||||
// To remove some warnings
|
||||
#ifdef __MWERKS__
|
||||
#define DECL_SECTION(x) __declspec(section x)
|
||||
|
||||
@@ -26,8 +26,14 @@ public:
|
||||
STATE_FUNC_DECLARE(dBird_c, MiniGameEnd);
|
||||
STATE_FUNC_DECLARE(dBird_c, MiniGameLevelUpDemo);
|
||||
|
||||
s16 getNumDashes() const {
|
||||
return mNumDashes;
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dBird_c);
|
||||
u8 _0x36C[0xF8E - 0x36C];
|
||||
/* 0xF8E */ s16 mNumDashes;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+21
-4
@@ -51,9 +51,16 @@ public:
|
||||
void getItemFromBWheelItem();
|
||||
bool isStateWait();
|
||||
|
||||
static int getTotalBombCount();
|
||||
static int getTotalArrowCount();
|
||||
static int getTotalSeedCount();
|
||||
static s32 getTotalBombCount();
|
||||
static s32 getTotalArrowCount();
|
||||
static s32 getTotalSeedCount();
|
||||
|
||||
static s32 getTotalBombCapacity();
|
||||
static s32 getTotalSeedCapacity();
|
||||
static s32 getTotalArrowCapacity();
|
||||
|
||||
static u32 getKeyPieceCount();
|
||||
static u32 getSmallKeyCount();
|
||||
|
||||
static bool isRupee(ITEM_ID item);
|
||||
static bool isKeyPiece(ITEM_ID item);
|
||||
@@ -63,7 +70,17 @@ public:
|
||||
static void itemGetEventStart(dAcBase_c *);
|
||||
static void itemGetEventEnd(dAcBase_c *);
|
||||
|
||||
static void healLink(u32 amount, bool);
|
||||
enum Trial_e {
|
||||
TRIAL_SKYLOFT,
|
||||
TRIAL_FARON,
|
||||
TRIAL_ELDIN,
|
||||
TRIAL_LANAYRU,
|
||||
TRIAL_NONE,
|
||||
};
|
||||
|
||||
static Trial_e getCurrentTrial();
|
||||
|
||||
static void healLink(u32 amount, bool); // move to dAcPy_c
|
||||
|
||||
private:
|
||||
/* 0x334 */ UNKTYPE *mpMdl; // Model has its own handling system
|
||||
|
||||
@@ -109,7 +109,7 @@ enum ITEM_ID {
|
||||
/* 0x066 */ ITEM_TREASURE_MEDAL = 102,
|
||||
/* 0x067 */ ITEM_POTION_MEDAL = 103,
|
||||
/* 0x068 */ ITEM_CURSED_MEDAL = 104,
|
||||
/* 0x069 */ ITEM_SCATTERSHOT = 105,
|
||||
/* 0x069 */ ITEM_MIGHTY_SCATTERSHOT = 105,
|
||||
/* 0x06A */ ITEM_UNK_106 = 106,
|
||||
/* 0x06B */ ITEM_UNK_107 = 107,
|
||||
/* 0x06C */ ITEM_MEDIUM_WALLET = 108,
|
||||
|
||||
@@ -3,12 +3,15 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/d_a_itembase.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "m/m3d/m_anmmatclr.h"
|
||||
#include "m/m_allocator.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "toBeSorted/file_manager.h"
|
||||
|
||||
class dAcPy_c : public dAcObjBase_c {
|
||||
// See Below for some info
|
||||
@@ -54,6 +57,13 @@ public:
|
||||
FLG0_HANGING_ITEM | FLG0_HANGING_LEDGE | FLG0_UNK_0x10 | FLG0_IN_AIR,
|
||||
};
|
||||
|
||||
enum dAcPy_RidingActor {
|
||||
RIDING_NONE = 0,
|
||||
RIDING_TRUCK_MINECART = 1,
|
||||
RIDING_LOFTWING = 2,
|
||||
RIDING_BOAT = 3,
|
||||
};
|
||||
|
||||
dAcPy_c();
|
||||
virtual ~dAcPy_c();
|
||||
|
||||
@@ -61,6 +71,7 @@ public:
|
||||
void setPosYRot(const mVec3_c &pos, mAng rot, UNKWORD, UNKWORD, UNKWORD);
|
||||
// argument is always false in existing code, true doesn't seem to make a difference
|
||||
void bonk(bool unk = false);
|
||||
bool fn_80202D90(bool);
|
||||
|
||||
/* vt 0x080 */ virtual UNKWORD IfCurrentActionToActor(dAcBase_c *ac, UNKWORD);
|
||||
/* vt 0x084 */ virtual void vt_0x084(dAcBase_c *ac, UNKWORD);
|
||||
@@ -142,7 +153,7 @@ public:
|
||||
/* vt 0x1B4 */ virtual void isByte0x434eEqual7();
|
||||
/* vt 0x1B8 */ virtual void canHandleGameOver();
|
||||
/* vt 0x1BC */ virtual void vt_0x1BC();
|
||||
/* vt 0x1C0 */ virtual void vt_0x1C0();
|
||||
/* vt 0x1C0 */ virtual void *vt_0x1C0() const;
|
||||
/* vt 0x1C4 */ virtual void getActorInActorRef1();
|
||||
/* vt 0x1C8 */ virtual void doesActorRef1Exist();
|
||||
/* vt 0x1CC */ virtual void unlinkActorRef1();
|
||||
@@ -182,7 +193,7 @@ public:
|
||||
/* vt 0x254 */ virtual void isAttackingUnderground();
|
||||
/* vt 0x258 */ virtual void vt_0x258();
|
||||
/* vt 0x25C */ virtual void vt_0x25C();
|
||||
/* vt 0x260 */ virtual void vt_0x260();
|
||||
/* vt 0x260 */ virtual f32 vt_0x260() const;
|
||||
/* vt 0x264 */ virtual void getGroosenatorIfIn();
|
||||
/* vt 0x268 */ virtual void setActorRef11();
|
||||
/* vt 0x26C */ virtual void doesGameOver();
|
||||
@@ -230,9 +241,13 @@ public:
|
||||
/* vt 0x314 */ virtual void vt_0x314();
|
||||
/* vt 0x318 */ virtual void vt_0x318();
|
||||
|
||||
/* 0x330 */ u8 unk_0x330[0x340 - 0x330];
|
||||
/* 0x330 */ u8 unk_0x330[0x339 - 0x330];
|
||||
/* 0x339 */ u8 mRidingActorType;
|
||||
/* 0x33A */ u8 unk_0x33A[0x340 - 0x33A];
|
||||
/* 0x340 */ u32 someFlags_0x340;
|
||||
/* 0x344 */ u8 unk_0x344[0x350 - 0x344];
|
||||
/* 0x344 */ u8 unk_0x344[0x348 - 0x344];
|
||||
/* 0x348 */ u32 mSwordAndMoreStates;
|
||||
/* 0x34C */ u8 unk_0x34C[0x350 - 0x34C];
|
||||
/* 0x350 */ u32 someFlags_0x350;
|
||||
u8 UNK_0x354[0x35C - 0x354];
|
||||
/* 0x35C */ u32 mForceOrPreventActionFlags;
|
||||
@@ -242,6 +257,18 @@ public:
|
||||
/* 0x36C */ int mCurrentAction; // TODO (Document Enum)
|
||||
/* 0x370 */ u8 _370[0x3C8 - 0x370];
|
||||
/* 0x3C8 */ nw4r::g3d::ResFile mSwordRes;
|
||||
/* 0x3CC */ u8 _0x3CC[0x5B4 - 0x3CC];
|
||||
/* 0x5B4 */ m3d::anmMatClr_c mAnmMatClr;
|
||||
/* 0x5E0 */ u8 _0x5E0[0x4564 - 0x5E0];
|
||||
/* 0x4564 */ f32 field_0x4564;
|
||||
|
||||
f32 getField_0x4564() const {
|
||||
return field_0x4564;
|
||||
}
|
||||
|
||||
f32 getAnmMatClrFrame() const {
|
||||
return mAnmMatClr.getFrame(0);
|
||||
}
|
||||
|
||||
inline bool checkFlags0x340(u32 mask) const {
|
||||
return (someFlags_0x340 & mask) != 0;
|
||||
@@ -263,6 +290,14 @@ public:
|
||||
return mCurrentAction == action;
|
||||
}
|
||||
|
||||
bool isSittingOrUnk0xAE() const {
|
||||
return mCurrentAction == 0xAD || mCurrentAction == 0xAE;
|
||||
}
|
||||
|
||||
inline bool checkSwordAndMoreStates(u32 mask) const {
|
||||
return (mSwordAndMoreStates & mask) != 0;
|
||||
}
|
||||
|
||||
inline bool checkActionFlags(u32 mask) const {
|
||||
return (mActionFlags & mask) != 0;
|
||||
}
|
||||
@@ -270,13 +305,45 @@ public:
|
||||
return (mActionFlagsCont & mask) != 0;
|
||||
}
|
||||
|
||||
inline u8 getRidingActorType() const {
|
||||
return mRidingActorType;
|
||||
}
|
||||
|
||||
inline bool hasvt_0x1C0() const {
|
||||
return vt_0x1C0() != nullptr;
|
||||
}
|
||||
|
||||
inline bool isAffectedByStaminaPotion() const {
|
||||
return FileManager::GetInstance()->hasStaminaPotionNormal() && getRidingActorType() != RIDING_BOAT;
|
||||
}
|
||||
|
||||
inline bool isAffectedByStaminaPotionPlus() const {
|
||||
return FileManager::GetInstance()->hasStaminaPotionPlus() && getRidingActorType() != RIDING_BOAT;
|
||||
}
|
||||
|
||||
static nw4r::g3d::ResFile getItemResFile(const char *name, mAllocator_c &allocator);
|
||||
|
||||
static const dAcPy_c *GetLink() {
|
||||
return LINK;
|
||||
}
|
||||
|
||||
static dAcPy_c *GetLink2() {
|
||||
return LINK2;
|
||||
}
|
||||
|
||||
static dAcPy_c *LINK;
|
||||
static dAcPy_c *LINK2;
|
||||
|
||||
static s32 getCurrentBowType();
|
||||
static s32 getCurrentSlingshotType();
|
||||
static s32 getCurrentBeetleType();
|
||||
static s32 getCurrentBugNetType();
|
||||
|
||||
static bool isItemRestrictedByBokoBase(ITEM_ID item);
|
||||
|
||||
static u32 getCurrentHealthCapacity();
|
||||
|
||||
bool canDowseProbably() const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#ifndef D_CAMERA_H
|
||||
#define D_CAMERA_H
|
||||
|
||||
#include "d/d_base.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
extern "C" bool fn_80081FE0(void *, const char *);
|
||||
|
||||
class dCamera_c : public dBase_c {
|
||||
public:
|
||||
bool isCurrentTrend(const char *name) const {
|
||||
return fn_80081FE0(field_0xD98, name);
|
||||
}
|
||||
|
||||
void *getField_0xD98() const {
|
||||
return field_0xD98;
|
||||
}
|
||||
|
||||
const mVec3_c &getPositionMaybe() const {
|
||||
return mPositionMaybe;
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x068 */ u8 _0x068[0x6C - 0x068];
|
||||
/* 0x06C */ mVec3_c mPositionMaybe;
|
||||
/* 0x078 */ u8 _0x078[0xD98 - 0x078];
|
||||
/* 0xD98 */ void *field_0xD98;
|
||||
};
|
||||
|
||||
#endif
|
||||
+22
-2
@@ -30,12 +30,29 @@ public:
|
||||
return sTagProcessor;
|
||||
}
|
||||
|
||||
void init();
|
||||
void reset();
|
||||
|
||||
bool getField_0x328() const {
|
||||
return field_0x328;
|
||||
}
|
||||
|
||||
bool getField_0x329() const {
|
||||
return field_0x329;
|
||||
}
|
||||
|
||||
s32 getField_0x2FC() const {
|
||||
return field_0x2FC;
|
||||
}
|
||||
|
||||
void setField_0x2FC(s32 val) {
|
||||
field_0x2FC = val;
|
||||
}
|
||||
|
||||
s32 getField_0x32C() const {
|
||||
return field_0x32C;
|
||||
}
|
||||
|
||||
void setField_0x329(bool v) {
|
||||
field_0x329 = v;
|
||||
}
|
||||
@@ -102,12 +119,15 @@ private:
|
||||
|
||||
/* 0x2FC */ s32 field_0x2FC;
|
||||
|
||||
/* 0x300 */ u8 _0x300[0x329 - 0x300];
|
||||
/* 0x300 */ u8 _0x300[0x328 - 0x300];
|
||||
|
||||
/* 0x328 */ bool field_0x328;
|
||||
/* 0x329 */ bool field_0x329;
|
||||
/* 0x32A */ bool field_0x32A;
|
||||
|
||||
/* 0x32B */ u8 _0x32B[0x334 - 0x32B];
|
||||
/* 0x32B */ u8 field_0x32B;
|
||||
/* 0x32C */ s32 field_0x32C;
|
||||
/* 0x330 */ u8 _0x330[0x334 - 0x330];
|
||||
|
||||
/* 0x334 */ u32 mMinigameResultPoints;
|
||||
/* 0x338 */ u32 mMinigameTime;
|
||||
|
||||
@@ -6,7 +6,16 @@ public:
|
||||
static bool checkButtonAPressed();
|
||||
static bool checkButtonBPressed();
|
||||
static bool checkButtonZPressed();
|
||||
static bool checkButtonCPressed();
|
||||
static bool checkButtonMinusPressed();
|
||||
static bool checkButtonPlusPressed();
|
||||
static bool checkButton1Pressed();
|
||||
static bool checkButton2Pressed();
|
||||
|
||||
static bool checkButtonDpadUpPressed();
|
||||
static bool checkButtonDpadDownPressed();
|
||||
static bool checkButtonDpadLeftPressed();
|
||||
static bool checkButtonDpadRightPressed();
|
||||
|
||||
static bool checkButtonAHeld();
|
||||
static bool checkButtonZHeld();
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
#ifndef D_POUCH_H
|
||||
#define D_POUCH_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
u32 convertFilePouchSlot(s32 fileSlot);
|
||||
s32 convertLytPouchSlot(s32 fileSlot);
|
||||
s32 getPouchSlotCount(bool unk);
|
||||
bool isItemExtraAmmo(s32 item);
|
||||
bool isItemMedal(s32 item);
|
||||
|
||||
#endif
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "d/d_dylink.h"
|
||||
#include "d/d_fader.h"
|
||||
#include "d/d_scene.h"
|
||||
#include "d/d_camera.h"
|
||||
#include "egg/gfx/eggScreen.h"
|
||||
#include "f/f_profile_name.h"
|
||||
#include "m/m2d.h"
|
||||
@@ -148,6 +149,7 @@ public:
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
|
||||
bool setReloadTrigger(fProfile::PROFILE_NAME_e reloadTrigger);
|
||||
void setRespawnInfo(const mVec3_c &linkPos, const mAng3_c &linkRot, bool unk);
|
||||
void setSpawnInfo(u8 roomid, const mVec3_c &pos, mAng rot);
|
||||
@@ -190,6 +192,13 @@ public:
|
||||
sReloaderType = type;
|
||||
}
|
||||
|
||||
static dCamera_c *getCamera(s32 idx);
|
||||
static void setCamera(s32 idx, dCamera_c *);
|
||||
|
||||
bool isFaderSettled() const {
|
||||
return mFader.isSettled();
|
||||
}
|
||||
|
||||
protected:
|
||||
static u32 sUpdateFrameCount;
|
||||
static u8 sCurrentLayer;
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "egg/gfx/eggPostEffectBlur.h"
|
||||
#include "egg/gfx/eggScreenEffectBlur.h"
|
||||
#include "m/m_allocator.h"
|
||||
#include "m/m_fader_base.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "s/s_FPhase.h"
|
||||
@@ -128,10 +129,20 @@ public:
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
bool isFadedOut() const {
|
||||
return mFader.isStatus(mFaderBase_c::FADED_OUT);
|
||||
}
|
||||
|
||||
bool isFadedIn() const {
|
||||
return mFader.isStatus(mFaderBase_c::FADED_IN);
|
||||
}
|
||||
|
||||
u8 getCurrRoomId() const {
|
||||
return curr_room_id;
|
||||
}
|
||||
|
||||
bool fn_801B3EE0();
|
||||
|
||||
private:
|
||||
dRoom_c *createRoom(int roomid, bool flag0x40);
|
||||
void createLytSeekerStone();
|
||||
|
||||
@@ -49,11 +49,26 @@ public:
|
||||
public:
|
||||
bool isAreaTypeDungeon() const;
|
||||
bool isAreaTypeSky() const;
|
||||
bool isAreaTypeHouse() const;
|
||||
bool isAreaTypeDungeonOrBoss() const;
|
||||
bool isAreaTypeOverworldOrSkyloft() const;
|
||||
s32 getSTIFunk1() const;
|
||||
|
||||
s32 getSTIFbyte4() const;
|
||||
bool isSTIFbyte4_2or3or4() const;
|
||||
bool isSTIFbyte4_5or6() const;
|
||||
bool isSTIFbyte4_7or8or9or10or11() const;
|
||||
bool isSTIFbyte4_1() const {
|
||||
return getSTIFbyte4() == 1;
|
||||
}
|
||||
bool isSTIFbyte4_0() const {
|
||||
return getSTIFbyte4() == 0;
|
||||
}
|
||||
|
||||
s32 getAreaType() const;
|
||||
s32 getMapNameId() const;
|
||||
|
||||
bool fn_80199250();
|
||||
|
||||
static dStageMgr_c *GetInstance() {
|
||||
return sInstance;
|
||||
@@ -121,6 +136,14 @@ public:
|
||||
return &mFader;
|
||||
}
|
||||
|
||||
bool isFaderSettled() const {
|
||||
return mFader.isSettled();
|
||||
}
|
||||
|
||||
bool isInLastBoss() const {
|
||||
return mIsInLastBoss;
|
||||
}
|
||||
|
||||
private:
|
||||
static void lastExecuteCallback();
|
||||
|
||||
@@ -165,6 +188,12 @@ private:
|
||||
|
||||
/* 0x88A0 */ u32 field_0x88A0;
|
||||
/* 0x88A4 */ SizedString<16> mDemoName;
|
||||
/* 0x88B4 */ u8 _0x88B4[0x88BC - 0x88B4];
|
||||
/* 0x88BC */ bool field_0x88BC;
|
||||
/* 0x88BD */ u8 field_0x88BD;
|
||||
/* 0x88BE */ u8 field_0x88BE;
|
||||
/* 0x88BF */ u8 field_0x88BF;
|
||||
/* 0x88C0 */ u8 field_0x88C0;
|
||||
/* 0x88C1 */ bool mIsInLastBoss;
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -51,7 +51,7 @@ public:
|
||||
return checkUncommittedTempOrSceneflag(flag);
|
||||
}
|
||||
u16 checkFlag(u16 roomId, u16 flag);
|
||||
bool checkSceneflagGlobal(u16 sceneIdx, u16 flag);
|
||||
u16 checkSceneflagGlobal(u16 sceneIdx, u16 flag);
|
||||
u16 checkTempOrSceneflag(u16 flag);
|
||||
u16 checkUncommittedFlag(u16 roomId, u16 flag);
|
||||
void setZoneflag(u16 roomId, u16 flag);
|
||||
|
||||
+11
-1
@@ -46,7 +46,7 @@ public:
|
||||
virtual ~Multi_c() {}
|
||||
/* vt 0x0C */ virtual void draw() override;
|
||||
/* vt 0x10 */ virtual void animate();
|
||||
/* vt 0x18 */ virtual void calc();
|
||||
/* vt 0x14 */ virtual void calc();
|
||||
/* vt 0x18 */ virtual bool build(const char *name, m2d::ResAccIf_c *acc);
|
||||
|
||||
void calcBefore();
|
||||
@@ -258,6 +258,10 @@ struct AnmGroupBase_c {
|
||||
mpFrameCtrl->setFlags(FLAG_NO_LOOP);
|
||||
}
|
||||
|
||||
inline void setForwardLoop() {
|
||||
mpFrameCtrl->setFlags(0);
|
||||
}
|
||||
|
||||
inline void setToStart() {
|
||||
m2d::FrameCtrl_c &ctrl = *mpFrameCtrl;
|
||||
ctrl.setCurrFrame(ctrl.getStartFrame());
|
||||
@@ -288,6 +292,12 @@ struct AnmGroupBase_c {
|
||||
return mpFrameCtrl->getNextFrame();
|
||||
}
|
||||
|
||||
#ifdef NEED_DIRECT_FRAMECTRL_ACCESS
|
||||
m2d::FrameCtrl_c *getFrameCtrl() {
|
||||
return mpFrameCtrl;
|
||||
}
|
||||
#endif
|
||||
|
||||
private:
|
||||
/* 0x04 */ void *field_0x04;
|
||||
/* 0x08 */ m2d::FrameCtrl_c *mpFrameCtrl;
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytAreaCaptionParts_c {
|
||||
public:
|
||||
@@ -23,13 +22,15 @@ public:
|
||||
STATE_FUNC_DECLARE(dLytAreaCaptionParts_c, Out);
|
||||
|
||||
private:
|
||||
bool shouldImmediatelyDismiss() const;
|
||||
|
||||
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytAreaCaptionParts_c);
|
||||
/* 0x040 */ d2d::ResAccIf_c mResAcc;
|
||||
/* 0x0EB */ d2d::dLytSub mLyt;
|
||||
/* 0x110 */ d2d::AnmGroup_c mAnmGroups[4];
|
||||
/* 0x540 */ dTextBox_c *mTextBoxes[3];
|
||||
/* 0x54C */ u8 field_0x54C;
|
||||
/* 0x54D */ u8 field_0x54D;
|
||||
/* 0x54C */ bool field_0x54C;
|
||||
/* 0x54D */ bool field_0x54D;
|
||||
/* 0x54E */ u8 mFirst;
|
||||
/* 0x54F */ bool mAnmCtrlInUse[4];
|
||||
};
|
||||
@@ -46,8 +47,8 @@ public:
|
||||
static void setArea(int id);
|
||||
static void check();
|
||||
|
||||
static void set0xAAC(u8 arg);
|
||||
static u8 get0xAAC();
|
||||
static void setVisible(bool arg);
|
||||
static bool getVisible();
|
||||
|
||||
private:
|
||||
dLytAreaCaption_c() {
|
||||
@@ -63,10 +64,10 @@ private:
|
||||
void doSetTextIfWaiting(const char *);
|
||||
void doSetArea(int id);
|
||||
void doCheck();
|
||||
dLytAreaCaptionParts_c mParts[2];
|
||||
|
||||
s32 mPartToDraw;
|
||||
u8 field_0xAAC;
|
||||
/* 0x000 */ dLytAreaCaptionParts_c mParts[2];
|
||||
/* 0xAA8 */ s32 mPartToDraw;
|
||||
/* 0xAAC */ bool mVisible;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -71,6 +71,22 @@ public:
|
||||
|
||||
void hide();
|
||||
|
||||
void setNumDashes(s32 num) {
|
||||
mGameStateDashes = num;
|
||||
}
|
||||
|
||||
void setField_0x690(bool val) {
|
||||
field_0x690 = val;
|
||||
}
|
||||
|
||||
bool getField_0x692() const {
|
||||
return field_0x692;
|
||||
}
|
||||
|
||||
bool getField_0x693() const {
|
||||
return field_0x693;
|
||||
}
|
||||
|
||||
private:
|
||||
static dLytBirdGauge_c *sInstance;
|
||||
|
||||
@@ -80,6 +96,8 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytBirdGauge_c, Recovery);
|
||||
STATE_FUNC_DECLARE(dLytBirdGauge_c, Out);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytBirdGauge_c);
|
||||
|
||||
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytBirdGauge_c);
|
||||
/* 0x008 */ d2d::ResAccIf_c mResAcc;
|
||||
/* 0x3B4 */ dLytBirdGaugeMain_c mMain;
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytBossGauge_c {
|
||||
public:
|
||||
@@ -12,18 +11,32 @@ public:
|
||||
|
||||
bool build();
|
||||
bool remove();
|
||||
bool execute();
|
||||
bool draw();
|
||||
|
||||
void setMode(s32 mode);
|
||||
|
||||
void fn_80158940();
|
||||
|
||||
void setField_0x545(bool value) {
|
||||
field_0x545 = value;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytBossGauge_c, None);
|
||||
STATE_FUNC_DECLARE(dLytBossGauge_c, In);
|
||||
STATE_FUNC_DECLARE(dLytBossGauge_c, Move);
|
||||
STATE_FUNC_DECLARE(dLytBossGauge_c, Out);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytBossGauge_c);
|
||||
|
||||
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytBossGauge_c);
|
||||
/* 0x040 */ d2d::ResAccIf_c mResAcc;
|
||||
/* 0x3B0 */ d2d::dLytSub mLyt;
|
||||
/* 0x444 */ d2d::AnmGroup_c mAnmGroups[4];
|
||||
/* 0x544 */ u8 field_0x544;
|
||||
/* 0x545 */ bool field_0x545;
|
||||
/* 0x546 */ u8 _0x546[0x550 - 0x546];
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -8,27 +8,19 @@
|
||||
#include "nw4r/lyt/lyt_bounding.h"
|
||||
#include "s/s_State.hpp"
|
||||
|
||||
class dLytCommonIconItemPartBase_c {
|
||||
public:
|
||||
virtual ~dLytCommonIconItemPartBase_c() {}
|
||||
virtual nw4r::lyt::Pane *getPane() = 0;
|
||||
virtual d2d::LytBase_c *getLyt() = 0;
|
||||
virtual const char *getName() const = 0;
|
||||
};
|
||||
|
||||
/** B-Wheel item */
|
||||
class dLytCommonIconItemPart1_c : public dLytCommonIconItemPartBase_c {
|
||||
class dLytCommonIconItemPart1_c {
|
||||
public:
|
||||
dLytCommonIconItemPart1_c()
|
||||
: mItem(0), mColor(0), field_0x2B4(false), mHasNumber(false), mSize(false), mBocoburinLocked(false) {}
|
||||
virtual ~dLytCommonIconItemPart1_c() {}
|
||||
virtual nw4r::lyt::Pane *getPane() override {
|
||||
virtual nw4r::lyt::Pane *getPane() {
|
||||
return mLyt.getLayout()->GetRootPane();
|
||||
}
|
||||
virtual d2d::LytBase_c *getLyt() override {
|
||||
virtual d2d::LytBase_c *getLyt() {
|
||||
return &mLyt;
|
||||
}
|
||||
virtual const char *getName() const override {
|
||||
virtual const char *getName() const {
|
||||
return mLyt.getName();
|
||||
}
|
||||
|
||||
@@ -82,7 +74,7 @@ private:
|
||||
};
|
||||
|
||||
/** Pouch item */
|
||||
class dLytCommonIconItemPart2_c : public dLytCommonIconItemPartBase_c {
|
||||
class dLytCommonIconItemPart2_c {
|
||||
public:
|
||||
dLytCommonIconItemPart2_c()
|
||||
: mItem(0),
|
||||
@@ -94,13 +86,13 @@ public:
|
||||
mOnOff(true),
|
||||
mDurability(0.0f) {}
|
||||
virtual ~dLytCommonIconItemPart2_c() {}
|
||||
virtual nw4r::lyt::Pane *getPane() override {
|
||||
virtual nw4r::lyt::Pane *getPane() {
|
||||
return mLyt.getLayout()->GetRootPane();
|
||||
}
|
||||
virtual d2d::LytBase_c *getLyt() override {
|
||||
virtual d2d::LytBase_c *getLyt() {
|
||||
return &mLyt;
|
||||
}
|
||||
virtual const char *getName() const override {
|
||||
virtual const char *getName() const {
|
||||
return mLyt.getName();
|
||||
}
|
||||
|
||||
@@ -162,17 +154,17 @@ private:
|
||||
};
|
||||
|
||||
/** Dowsing "item" */
|
||||
class dLytCommonIconItemPart3_c : public dLytCommonIconItemPartBase_c {
|
||||
class dLytCommonIconItemPart3_c {
|
||||
public:
|
||||
dLytCommonIconItemPart3_c() : mItem(0), mSize(false), mBocoburinLocked(false) {}
|
||||
virtual ~dLytCommonIconItemPart3_c() {}
|
||||
virtual nw4r::lyt::Pane *getPane() override {
|
||||
virtual nw4r::lyt::Pane *getPane() {
|
||||
return mLyt.getLayout()->GetRootPane();
|
||||
}
|
||||
virtual d2d::LytBase_c *getLyt() override {
|
||||
virtual d2d::LytBase_c *getLyt() {
|
||||
return &mLyt;
|
||||
}
|
||||
virtual const char *getName() const override {
|
||||
virtual const char *getName() const {
|
||||
return mLyt.getName();
|
||||
}
|
||||
|
||||
@@ -208,11 +200,16 @@ private:
|
||||
|
||||
/**
|
||||
* A common item component used in various UI screens like the item check, scrap shop,
|
||||
* pause menu wheels, B item preview in the top right HUD corner.
|
||||
* NOT used for the HUD wheels.
|
||||
* pause menu wheels, HUD wheels, B item preview in the top right HUD corner.
|
||||
*/
|
||||
class dLytCommonIconItem_c : public d2d::dSubPane {
|
||||
public:
|
||||
enum Variant_e {
|
||||
B_WHEEL,
|
||||
POUCH,
|
||||
DOWSING,
|
||||
};
|
||||
|
||||
dLytCommonIconItem_c() : mStateMgr(*this, sStateID::null), mPart(3) {}
|
||||
~dLytCommonIconItem_c() {}
|
||||
|
||||
@@ -276,6 +273,9 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytCommonIconItem_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytCommonIconItem_c, Out);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytCommonIconItem_c);
|
||||
STATE_MGR_DEFINE_UTIL_ISSTATE(dLytCommonIconItem_c);
|
||||
|
||||
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytCommonIconItem_c);
|
||||
/* 0x044 */ u8 mPart;
|
||||
/* 0x048 */ dLytCommonIconItemPart1_c mPart1;
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#define LYT_CMN_ItemBigBugnet (15) // [14] uc_netB_00.tpl
|
||||
#define LYT_CMN_ItemBoatCannon (16) // [ 7] uc_boatCannon_00.tpl
|
||||
#define LYT_CMN_ItemHarp (17) // [ 0] tr_tategoto_00.tpl
|
||||
#define LYT_CMN_ItemInvalid (18) // -------------------------
|
||||
|
||||
// Pouch Items
|
||||
#define LYT_CMN_PouchPotionHealyh (0) // [12] uc_bottleKusuriA_00.tpl
|
||||
@@ -112,5 +113,6 @@
|
||||
#define LYT_CMN_DowsingZelda (19) // [13] tr_dauzTarget_19.tpl
|
||||
#define LYT_CMN_DowsingTrialGate (20) // [14] tr_dauzTarget_20.tpl
|
||||
#define LYT_CMN_DowsingNewPlantSpecies (21) // [15] tr_dauzTarget_21.tpl
|
||||
#define LYT_CMN_DowsingInvalid (22) // -------------------------
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define D_LYT_CONTROL_GAME_H
|
||||
|
||||
#include "d/d_base.h"
|
||||
#include "s/s_State.hpp"
|
||||
|
||||
class dLytControlGame_c : public dBase_c {
|
||||
public:
|
||||
@@ -17,7 +18,22 @@ public:
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
STATE_FUNC_DECLARE(dLytControlGame_c, Normal);
|
||||
STATE_FUNC_DECLARE(dLytControlGame_c, Pause_SetRes);
|
||||
STATE_FUNC_DECLARE(dLytControlGame_c, Pause_SyncRes);
|
||||
STATE_FUNC_DECLARE(dLytControlGame_c, Pause);
|
||||
STATE_FUNC_DECLARE(dLytControlGame_c, Pause_DelRes);
|
||||
STATE_FUNC_DECLARE(dLytControlGame_c, Map_SetRes);
|
||||
STATE_FUNC_DECLARE(dLytControlGame_c, Map_SyncRes);
|
||||
STATE_FUNC_DECLARE(dLytControlGame_c, Map);
|
||||
STATE_FUNC_DECLARE(dLytControlGame_c, Map_DelRes);
|
||||
|
||||
bool isStateNormal() const {
|
||||
return *mStateMgr.getStateID() == StateID_Normal;
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x00068 */ UI_STATE_MGR_DECLARE(dLytControlGame_c);
|
||||
|
||||
static dLytControlGame_c *sInstance;
|
||||
};
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
#ifndef D_LYT_DO_BUTTON_H
|
||||
#define D_LYT_DO_BUTTON_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytDobutton_c {
|
||||
public:
|
||||
@@ -16,17 +16,74 @@ public:
|
||||
|
||||
bool init(m2d::ResAccIf_c *resAcc);
|
||||
bool remove();
|
||||
bool execute();
|
||||
bool draw();
|
||||
|
||||
static dLytDobutton_c *GetInstance() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
static s32 getField0x47C() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->field_0x47C;
|
||||
} else {
|
||||
return 0x5E;
|
||||
}
|
||||
}
|
||||
|
||||
static s32 getField0x480() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->field_0x480;
|
||||
} else {
|
||||
return 0x29;
|
||||
}
|
||||
}
|
||||
|
||||
static s32 getNextActionToShow() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->mNextDoActionToShow;
|
||||
} else {
|
||||
return 0x29;
|
||||
}
|
||||
}
|
||||
|
||||
static s32 getFn0x8010E5E0() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->fn_8010E5E0();
|
||||
} else {
|
||||
return 0x29;
|
||||
}
|
||||
}
|
||||
|
||||
static s32 getFn0x8010E5D0() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->fn_8010E5D0();
|
||||
} else {
|
||||
return 0x5E;
|
||||
}
|
||||
}
|
||||
|
||||
static void setActionTextStuff(s32 p1, s32 p2, bool p3) {
|
||||
if (sInstance != nullptr) {
|
||||
sInstance->setActionTextStuffInternal(p1, p2, p3);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
void setActionTextStuffInternal(s32, s32, bool);
|
||||
s32 fn_8010E5D0() const;
|
||||
s32 fn_8010E5E0() const;
|
||||
|
||||
static dLytDobutton_c *sInstance;
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytDobutton_c, InvisibleWait);
|
||||
STATE_FUNC_DECLARE(dLytDobutton_c, InvisibleTimeCnt);
|
||||
STATE_FUNC_DECLARE(dLytDobutton_c, In);
|
||||
STATE_FUNC_DECLARE(dLytDobutton_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytDobutton_c, Out);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytDobutton_c);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytDobutton_c);
|
||||
/* 0x040 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D4 */ d2d::AnmGroup_c mAnmGroups[12];
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
#ifndef D_LYT_DROP_LINE_H
|
||||
#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 {
|
||||
public:
|
||||
dLytDropLine_c() {
|
||||
sInstance = this;
|
||||
}
|
||||
virtual ~dLytDropLine_c() {
|
||||
sInstance = nullptr;
|
||||
}
|
||||
|
||||
static dLytDropLine_c *GetInstance() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef D_LYT_GAME_OVER_H
|
||||
#define D_LYT_GAME_OVER_H
|
||||
|
||||
#include "d/d_base.h"
|
||||
|
||||
class dLytGameOver_c : public dBase_c {
|
||||
public:
|
||||
dLytGameOver_c();
|
||||
virtual ~dLytGameOver_c();
|
||||
|
||||
static dLytGameOver_c *GetInstance() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
private:
|
||||
static dLytGameOver_c *sInstance;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -267,6 +267,7 @@ private:
|
||||
};
|
||||
|
||||
class dLytMapMain_c : public m2d::Base_c {
|
||||
friend class dLytMap_c;
|
||||
public:
|
||||
dLytMapMain_c();
|
||||
virtual ~dLytMapMain_c();
|
||||
@@ -276,6 +277,7 @@ public:
|
||||
void build();
|
||||
|
||||
bool isOpenMaybe() const;
|
||||
bool fn_80139EA0() const;
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMapMain_c, Invisible);
|
||||
STATE_FUNC_DECLARE(dLytMapMain_c, RenderingWait);
|
||||
@@ -338,10 +340,16 @@ private:
|
||||
/* 0x8904 */ mVec3_c field_0x8904;
|
||||
/* 0x8910 */ mVec3_c field_0x8910;
|
||||
/* 0x891C */ mVec3_c field_0x891C;
|
||||
// ???
|
||||
|
||||
/* 0x8928 */ u8 _0x8928[0x8930 - 0x8928];
|
||||
|
||||
/* 0x8930 */ mVec3_c field_0x8930;
|
||||
/* 0x893C */ mVec3_c field_0x893C;
|
||||
// ???
|
||||
|
||||
/* 0x8948 */ u8 idkfixmelater[0x4BC0];
|
||||
/* 0x8C94 */ s32 field_0x8C94;
|
||||
|
||||
// ...
|
||||
|
||||
/* 0x8CC4 */ mVec3_c field_0x8CC4;
|
||||
/* 0x8CD0 */ mVec3_c field_0x8CD0;
|
||||
@@ -391,8 +399,24 @@ public:
|
||||
return mMapMain.isOpenMaybe();
|
||||
}
|
||||
|
||||
bool getFn_80139EA0() const {
|
||||
return mMapMain.fn_80139EA0();
|
||||
}
|
||||
|
||||
void build();
|
||||
|
||||
static bool isValid(s32 val) {
|
||||
if (val >= 2 && val < 7) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool unkMeterCheck() const {
|
||||
s32 val = mMapMain.field_0x8C94;
|
||||
return isValid(val) && ((1 << (val - 2)) & 0x1D);
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x0004 */ d2d::ResAccIf_c mResAcc;
|
||||
/* 0x0374 */ dLytMapMain_c mMapMain;
|
||||
|
||||
@@ -8,9 +8,134 @@ public:
|
||||
dLytMeterConfiguration_c();
|
||||
virtual ~dLytMeterConfiguration_c();
|
||||
|
||||
static const dLytMeterConfiguration_c *GetInstance() {
|
||||
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;
|
||||
}
|
||||
|
||||
s32 getField_0x1DC() const {
|
||||
return field_0x1DC;
|
||||
}
|
||||
|
||||
s32 getField_0x1E0() const {
|
||||
return field_0x1E0;
|
||||
}
|
||||
|
||||
s32 getField_0x1E4() const {
|
||||
return field_0x1E4;
|
||||
}
|
||||
|
||||
|
||||
static dLytMeterConfiguration_c *sInstance;
|
||||
f32 field_0x04[0x7A - 0x01];
|
||||
|
||||
/* 0x004 */ u8 field_0x004;
|
||||
/* 0x005 */ u8 field_0x005;
|
||||
/* 0x006 */ u8 field_0x006;
|
||||
/* 0x007 */ u8 field_0x007;
|
||||
/* 0x008 */ u8 field_0x008;
|
||||
/* 0x009 */ u8 field_0x009;
|
||||
/* 0x00A */ u8 field_0x00A;
|
||||
/* 0x00B */ u8 field_0x00B;
|
||||
/* 0x00C */ f32 field_0x00C;
|
||||
/* 0x010 */ u8 field_0x010;
|
||||
/* 0x011 */ u8 field_0x011;
|
||||
/* 0x012 */ u8 field_0x012;
|
||||
/* 0x013 */ u8 field_0x013;
|
||||
/* 0x014 */ f32 field_0x014;
|
||||
/* 0x018 */ f32 field_0x018;
|
||||
/* 0x01C */ u8 field_0x01C;
|
||||
/* 0x01D */ u8 field_0x01D;
|
||||
/* 0x01E */ u8 field_0x01E;
|
||||
/* 0x01F */ u8 field_0x01F;
|
||||
/* 0x020 */ s32 field_0x020;
|
||||
/* 0x024 */ s32 field_0x024;
|
||||
/* 0x028 */ u8 field_0x028;
|
||||
/* 0x029 */ u8 field_0x029;
|
||||
/* 0x02A */ u8 field_0x02A;
|
||||
/* 0x02B */ u8 field_0x02B;
|
||||
/* 0x02C */ s32 field_0x02C[16];
|
||||
/* 0x06C */ s32 field_0x06C[16];
|
||||
/* 0x0AC */ f32 field_0x0AC[16];
|
||||
/* 0x0EC */ u8 field_0x0EC[16];
|
||||
/* 0x0FC */ u8 field_0x0FC;
|
||||
/* 0x0FD */ u8 field_0x0FD;
|
||||
/* 0x0FE */ u8 field_0x0FE;
|
||||
/* 0x0FF */ u8 field_0x0FF;
|
||||
/* 0x100 */ s32 field_0x100[8];
|
||||
/* 0x121 */ u8 field_0x121;
|
||||
/* 0x124 */ f32 field_0x124;
|
||||
/* 0x128 */ f32 field_0x128;
|
||||
/* 0x12C */ f32 field_0x12C;
|
||||
/* 0x130 */ f32 field_0x130;
|
||||
/* 0x134 */ u8 field_0x134;
|
||||
/* 0x135 */ u8 field_0x135;
|
||||
/* 0x138 */ f32 field_0x138;
|
||||
/* 0x13C */ u8 field_0x13C;
|
||||
/* 0x140 */ f32 field_0x140;
|
||||
/* 0x144 */ f32 field_0x144;
|
||||
/* 0x148 */ f32 field_0x148;
|
||||
/* 0x14C */ f32 field_0x14C;
|
||||
/* 0x150 */ f32 field_0x150;
|
||||
/* 0x154 */ f32 field_0x154;
|
||||
/* 0x158 */ f32 field_0x158;
|
||||
/* 0x15C */ f32 field_0x15C;
|
||||
/* 0x160 */ f32 field_0x160;
|
||||
/* 0x164 */ u8 field_0x164;
|
||||
/* 0x168 */ f32 field_0x168;
|
||||
/* 0x16C */ f32 field_0x16C;
|
||||
/* 0x170 */ f32 field_0x170;
|
||||
/* 0x174 */ f32 field_0x174;
|
||||
/* 0x178 */ f32 field_0x178;
|
||||
/* 0x17C */ f32 field_0x17C;
|
||||
/* 0x180 */ f32 field_0x180;
|
||||
/* 0x184 */ f32 field_0x184;
|
||||
/* 0x188 */ f32 field_0x188;
|
||||
/* 0x18C */ f32 field_0x18C;
|
||||
/* 0x190 */ f32 field_0x190;
|
||||
/* 0x194 */ f32 field_0x194;
|
||||
/* 0x198 */ f32 field_0x198;
|
||||
/* 0x19C */ f32 field_0x19C;
|
||||
/* 0x1A0 */ f32 field_0x1A0;
|
||||
/* 0x1A4 */ f32 field_0x1A4;
|
||||
/* 0x1A8 */ f32 field_0x1A8;
|
||||
/* 0x1AC */ f32 field_0x1AC;
|
||||
/* 0x1B0 */ u8 field_0x1B0;
|
||||
/* 0x1B1 */ u8 field_0x1B1;
|
||||
/* 0x1B4 */ f32 field_0x1B4;
|
||||
/* 0x1B8 */ f32 field_0x1B8;
|
||||
/* 0x1BC */ u8 field_0x1BC;
|
||||
/* 0x1C0 */ f32 field_0x1C0;
|
||||
/* 0x1C4 */ f32 field_0x1C4;
|
||||
/* 0x1C8 */ u32 field_0x1C8;
|
||||
/* 0x1CC */ f32 field_0x1CC;
|
||||
/* 0x1D0 */ f32 field_0x1D0;
|
||||
/* 0x1D4 */ u8 field_0x1D4;
|
||||
/* 0x1D5 */ u8 field_0x1D5;
|
||||
/* 0x1D6 */ u8 field_0x1D6;
|
||||
/* 0x1D7 */ u8 field_0x1D7;
|
||||
/* 0x1D8 */ s32 field_0x1D8;
|
||||
/* 0x1D8 */ s32 field_0x1DC;
|
||||
/* 0x1D8 */ s32 field_0x1E0;
|
||||
/* 0x1D8 */ s32 field_0x1E4;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#ifndef D_LYT_SAVE_MGR_H
|
||||
#define D_LYT_SAVE_MGR_H
|
||||
|
||||
class dLytSaveMgr_c {
|
||||
public:
|
||||
|
||||
static dLytSaveMgr_c* GetInstance() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
bool fn_80285650() const;
|
||||
|
||||
private:
|
||||
static dLytSaveMgr_c *sInstance;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -68,6 +68,12 @@ public:
|
||||
void setHeight(f32 height);
|
||||
|
||||
static dLytSkyGauge_c *sInstance;
|
||||
void setWantsIn() {
|
||||
mWantsIn = true;
|
||||
}
|
||||
void setWantsOut() {
|
||||
mWantsOut = true;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytSkyGauge_c, None);
|
||||
@@ -75,6 +81,8 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytSkyGauge_c, Move);
|
||||
STATE_FUNC_DECLARE(dLytSkyGauge_c, Out);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytSkyGauge_c);
|
||||
|
||||
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytSkyGauge_c);
|
||||
/* 0x008 */ d2d::ResAccIf_c mResAcc;
|
||||
/* 0x3B4 */ dLytSkyGaugeMain_c mMain;
|
||||
|
||||
@@ -7,14 +7,99 @@
|
||||
class LytDoButtonRelated {
|
||||
public:
|
||||
LytDoButtonRelated();
|
||||
virtual ~LytDoButtonRelated();
|
||||
virtual ~LytDoButtonRelated() {
|
||||
sInstance = nullptr;
|
||||
}
|
||||
bool build(d2d::ResAccIf_c *resAcc);
|
||||
bool remove();
|
||||
|
||||
static LytDoButtonRelated *sInstance;
|
||||
static LytDoButtonRelated *GetInstance() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
enum Action_e {
|
||||
DO_DASH = 0x5F,
|
||||
|
||||
DO_0x74 = 0x74,
|
||||
|
||||
DO_RETURN = 0x7F,
|
||||
DO_STOP = 0x84,
|
||||
DO_ITEMS = 0x85,
|
||||
DO_DONE = 0x87,
|
||||
DO_READY_CANNON = 0x8F,
|
||||
DO_STOW_CANNON = 0x90,
|
||||
DO_SAILCLOTH = 0x91,
|
||||
DO_NONE = 0x98,
|
||||
};
|
||||
|
||||
enum DoButton_e {
|
||||
DO_BUTTON_A = 0,
|
||||
DO_BUTTON_B = 1,
|
||||
DO_BUTTON_C = 2,
|
||||
DO_BUTTON_Z = 3,
|
||||
DO_BUTTON_NUN_STK = 4,
|
||||
DO_BUTTON_REMOCON_BG = 5,
|
||||
DO_BUTTON_NUN_BG = 6,
|
||||
|
||||
DO_BUTTON_CROSS_T = 7,
|
||||
DO_BUTTON_CROSS_D = 8,
|
||||
DO_BUTTON_CROSS_L = 9,
|
||||
DO_BUTTON_CROSS_R = 10,
|
||||
|
||||
DO_BUTTON_PLUS = 11,
|
||||
};
|
||||
|
||||
static void set(DoButton_e button, Action_e value) {
|
||||
if (sInstance != nullptr) {
|
||||
LytDoButtonRelated *b = sInstance;
|
||||
b->field_0x04[button] = value;
|
||||
b->field_0x34[button] = true;
|
||||
}
|
||||
}
|
||||
|
||||
static void reset(DoButton_e button, Action_e value) {
|
||||
LytDoButtonRelated *b = sInstance;
|
||||
if (b != nullptr) {
|
||||
b->field_0x04[button] = value;
|
||||
b->field_0x34[button] = false;
|
||||
}
|
||||
}
|
||||
|
||||
static Action_e get(DoButton_e button) {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->field_0x04[button];
|
||||
} else {
|
||||
return DO_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
static bool getHas(DoButton_e button) {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->field_0x34[button];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static Action_e get0x08() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->field_0x04[1];
|
||||
} else {
|
||||
return DO_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
static Action_e convertDoButton(s32);
|
||||
|
||||
static void fn_8010EC10(Action_e, bool);
|
||||
static void fn_8010ED50(Action_e, bool);
|
||||
|
||||
private:
|
||||
u8 field_0x04[0x40 - 0x04];
|
||||
|
||||
static LytDoButtonRelated *sInstance;
|
||||
/* 0x04 */ Action_e field_0x04[12];
|
||||
/* 0x34 */ bool field_0x34[12];
|
||||
};
|
||||
|
||||
// size 0x27C
|
||||
@@ -28,6 +113,7 @@ public:
|
||||
}
|
||||
bool build(d2d::ResAccIf_c *resAcc);
|
||||
bool remove();
|
||||
bool execute();
|
||||
bool draw();
|
||||
|
||||
static LytBirdButtonRelated *sInstance;
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef D_LYT_UTIL_ITEMS_H
|
||||
#define D_LYT_UTIL_ITEMS_H
|
||||
|
||||
#include "common.h"
|
||||
#include "toBeSorted/dowsing_target.h"
|
||||
|
||||
bool isPouchBocoburinLocked();
|
||||
|
||||
u8 getPouchItemForSlot(s32 slot, bool unk);
|
||||
bool hasPouchSlot(s32 slot, bool unk);
|
||||
s32 getPouchItemAmount(s32 slot, bool unk);
|
||||
u8 getPouchItemNumberColor(s32 slot, bool unk);
|
||||
f32 getShieldDurability(s32 slot, bool unk);
|
||||
|
||||
DowsingTarget::DowsingSlot dowsingSlotForIndex(s32 index);
|
||||
s32 getLytIndexForDowsingIndex(s32 index);
|
||||
u16 getDowsingItemIdForIndex(s32 index);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,74 @@
|
||||
#ifndef D_LYT_WIPE_H
|
||||
#define D_LYT_WIPE_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "s/s_State.hpp"
|
||||
|
||||
class dLytWipeMain_c {
|
||||
public:
|
||||
dLytWipeMain_c();
|
||||
virtual ~dLytWipeMain_c() {}
|
||||
|
||||
bool build(d2d::ResAccIf_c *resAcc);
|
||||
bool remove();
|
||||
bool execute();
|
||||
bool draw();
|
||||
|
||||
void gotoIn();
|
||||
void gotoWait();
|
||||
void gotoOut();
|
||||
void gotoNone();
|
||||
|
||||
bool isStateEndReached() const {
|
||||
return mStateEndReached;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytWipeMain_c, ModeNone);
|
||||
STATE_FUNC_DECLARE(dLytWipeMain_c, ModeIn);
|
||||
STATE_FUNC_DECLARE(dLytWipeMain_c, ModeWait);
|
||||
STATE_FUNC_DECLARE(dLytWipeMain_c, ModeOut);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytWipeMain_c);
|
||||
|
||||
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytWipeMain_c);
|
||||
/* 0x040 */ d2d::LytBase_c mLyt;
|
||||
/* 0x0D0 */ d2d::AnmGroup_c mAnm[1];
|
||||
/* 0x110 */ bool mStateEndReached;
|
||||
/* 0x111 */ u8 _0x111[0x132 - 0x111];
|
||||
/* 0x132 */ bool mIsIn;
|
||||
};
|
||||
|
||||
class dLytWipe_c {
|
||||
public:
|
||||
dLytWipe_c() : mStateMgr(*this, sStateID::null) {}
|
||||
|
||||
bool build();
|
||||
bool remove();
|
||||
bool execute();
|
||||
bool draw();
|
||||
|
||||
private:
|
||||
static dLytWipe_c *sInstance;
|
||||
|
||||
STATE_FUNC_DECLARE(dLytWipe_c, None);
|
||||
STATE_FUNC_DECLARE(dLytWipe_c, In);
|
||||
STATE_FUNC_DECLARE(dLytWipe_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytWipe_c, Out);
|
||||
|
||||
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytWipe_c);
|
||||
/* 0x03C */ d2d::ResAccIf_c mResAcc;
|
||||
/* 0x3AC */ dLytWipeMain_c mMain;
|
||||
|
||||
/* 0x4E0 */ u8 _0x4E0[0x59C - 0x4E0];
|
||||
|
||||
/* 0x59C */ bool mWantsIn;
|
||||
/* 0x59D */ bool mWantsOut;
|
||||
/* 0x59E */ bool mIsSettled;
|
||||
/* 0x59F */ bool mVisible;
|
||||
/* 0x5A0 */ s32 mTransitionStage;
|
||||
/* 0x5A4 */ s32 mFadeDelay;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef D_LYT_TEXTBOX_H
|
||||
#define D_LYT_TEXTBOX_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "libms/msgfile.h"
|
||||
#include "nw4r/lyt/lyt_drawInfo.h"
|
||||
@@ -47,8 +48,11 @@ public:
|
||||
return mMyScale;
|
||||
}
|
||||
|
||||
void fn_800E0A60(const char *area, ...) {
|
||||
// TODO
|
||||
void setMessageWithGlobalTextProcessor2(const char *message, void *unk, ...) {
|
||||
va_list l;
|
||||
va_start(l, str);
|
||||
setMessageWithGlobalTextProcessorV(message, nullptr, unk, l);
|
||||
va_end(l);
|
||||
}
|
||||
|
||||
void setTextWithGlobalTextProcessor(const wchar_t *str);
|
||||
@@ -58,9 +62,8 @@ public:
|
||||
void setTextWithTextProcessor(const wchar_t *str, dTagProcessor_c *tagProcessor, void *, ...);
|
||||
s32 calcTextLines(const wchar_t *src, dTagProcessor_c *tagProcessor);
|
||||
|
||||
void setMessageWithGlobalTextProcessorAndMsbtInfo(
|
||||
MsbtInfo *info, const char *labelId, wchar_t *destBuf, u32 maxLen
|
||||
);
|
||||
void
|
||||
setMessageWithGlobalTextProcessorAndMsbtInfo(MsbtInfo *info, const char *labelId, wchar_t *destBuf, u32 maxLen);
|
||||
|
||||
void loadTextFormatVars();
|
||||
void setupGX() const;
|
||||
|
||||
+332
-121
@@ -1,8 +1,11 @@
|
||||
#ifndef D_LYT_METER_H
|
||||
#define D_LYT_METER_H
|
||||
// TODO sort includes for vtable order
|
||||
|
||||
// clang-format off
|
||||
#include "common.h"
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/d_cursor_hit_check.h"
|
||||
#include "d/lyt/d_lyt_do_button.h"
|
||||
#include "d/lyt/meter/d_lyt_meter_shield_gauge.h"
|
||||
#include "d/lyt/d_lyt_common_icon_item.h"
|
||||
@@ -20,122 +23,115 @@
|
||||
#include "d/lyt/meter/d_lyt_meter_ganbari_gauge.h"
|
||||
#include "d/lyt/meter/d_lyt_meter_event_skip.h"
|
||||
#include "d/lyt/meter/d_lyt_meter_item_select.h"
|
||||
|
||||
// clang-format on
|
||||
|
||||
class dLytMeter1Button_c : public d2d::dSubPane {
|
||||
public:
|
||||
dLytMeter1Button_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dLytMeter1Button_c() {}
|
||||
virtual bool build(d2d::ResAccIf_c *resAcc) override;
|
||||
virtual bool remove() override;
|
||||
virtual bool execute() 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();
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeter1Button_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeter1Button_c, ToUse);
|
||||
STATE_FUNC_DECLARE(dLytMeter1Button_c, ToUnuse);
|
||||
STATE_FUNC_DECLARE(dLytMeter1Button_c, Unuse);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeter1Button_c);
|
||||
d2d::dLytSub mLyt;
|
||||
d2d::AnmGroup_c mAnmGroups[3];
|
||||
/* 0x198 */ dWindow_c *mpWindow;
|
||||
/* 0x19C */ dTextBox_c *mpTextbox;
|
||||
/* 0x1A0 */ u32 field_0x1A0;
|
||||
/* 0x1A4 */ s32 field_0x1A4;
|
||||
/* 0x1A8 */ s32 field_0x1A8;
|
||||
/* 0x1AC */ u8 field_0x1AC;
|
||||
/* 0x1AD */ u8 field_0x1AD;
|
||||
};
|
||||
|
||||
class dLytMeter2Button_c : public d2d::dSubPane {
|
||||
public:
|
||||
dLytMeter2Button_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dLytMeter2Button_c() {}
|
||||
virtual bool build(d2d::ResAccIf_c *resAcc) override;
|
||||
virtual bool remove() override;
|
||||
virtual bool execute() 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();
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeter2Button_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeter2Button_c, ToUse);
|
||||
STATE_FUNC_DECLARE(dLytMeter2Button_c, ToUnuse);
|
||||
STATE_FUNC_DECLARE(dLytMeter2Button_c, Unuse);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeter2Button_c);
|
||||
d2d::dLytSub mLyt;
|
||||
d2d::AnmGroup_c mAnmGroups[3];
|
||||
/* 0x198 */ dWindow_c *mpWindow;
|
||||
/* 0x19C */ dTextBox_c *mpTextbox;
|
||||
/* 0x1A0 */ u32 field_0x1A0;
|
||||
/* 0x1A4 */ s32 field_0x1A4;
|
||||
/* 0x1A8 */ s32 field_0x1A8;
|
||||
/* 0x1AC */ u8 field_0x1AC;
|
||||
/* 0x1AD */ u8 field_0x1AD;
|
||||
};
|
||||
|
||||
class dLytMeterParts_c {
|
||||
public:
|
||||
dLytMeterParts_c() : mStateMgr(*this, sStateID::null) {}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterParts_c, Invisible);
|
||||
STATE_FUNC_DECLARE(dLytMeterParts_c, In);
|
||||
STATE_FUNC_DECLARE(dLytMeterParts_c, Visible);
|
||||
STATE_FUNC_DECLARE(dLytMeterParts_c, Out);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterParts_c);
|
||||
u8 field_0x3C[0x10];
|
||||
};
|
||||
|
||||
// TODO sort includes for vtable order
|
||||
// clang-format off
|
||||
|
||||
#include "d/lyt/meter/d_lyt_meter_key.h"
|
||||
#include "d/lyt/meter/d_lyt_meter_parts.h"
|
||||
#include "d/lyt/d_lyt_unknowns.h"
|
||||
|
||||
#include "d/lyt/meter/d_lyt_meter_drink.h"
|
||||
#include "d/lyt/meter/d_lyt_meter_timer.h"
|
||||
#include "d/lyt/d_lyt_bird_gauge.h"
|
||||
#include "d/lyt/d_lyt_boss_gauge.h"
|
||||
#include "d/lyt/d_lyt_sky_gauge.h"
|
||||
|
||||
#include "m/m_vec.h"
|
||||
// clang-format on
|
||||
|
||||
class dLytMeter_c {
|
||||
class dLytMeter1Button_c;
|
||||
class dLytMeter2Button_c;
|
||||
class dLytMeterTimer_c;
|
||||
class LytMeterTimerPart1_c;
|
||||
class LytMeterTimerPart2_c;
|
||||
class dLytMeterKakeraKey_c;
|
||||
class dLytMeterBossKey_c;
|
||||
class dLytMeterSmallKey_c;
|
||||
class dLytMeterDrink_c;
|
||||
class dLytSkyGauge_c;
|
||||
class dLytBirdGauge_c;
|
||||
class dLytBossGauge_c;
|
||||
|
||||
// apart from dLytMeterParts_c the names here are made up
|
||||
|
||||
enum MeterFlag_e {
|
||||
METER_BTN_CROSS_UP = 0x1,
|
||||
METER_BTN_CROSS_DOWN = 0x2,
|
||||
METER_BTN_CROSS_LEFT = 0x4,
|
||||
METER_BTN_CROSS_RIGHT = 0x8,
|
||||
METER_BTN_B = 0x10,
|
||||
METER_BTN_PLUS = 0x20,
|
||||
METER_BTN_MINUS = 0x40,
|
||||
METER_BTN_1 = 0x80,
|
||||
METER_BTN_2 = 0x100,
|
||||
METER_BTN_NUN_STK = 0x200,
|
||||
METER_BTN_C = 0x400,
|
||||
METER_BTN_Z = 0x800,
|
||||
METER_BTN_0x1000 = 0x1000,
|
||||
|
||||
|
||||
METER_BTN_CROSS = METER_BTN_CROSS_UP | METER_BTN_CROSS_DOWN | METER_BTN_CROSS_LEFT | METER_BTN_CROSS_RIGHT,
|
||||
};
|
||||
|
||||
class dLytMeterMain_c {
|
||||
friend class dLytMeter_c;
|
||||
|
||||
public:
|
||||
dLytMeter_c();
|
||||
virtual ~dLytMeter_c() {}
|
||||
dLytMeterMain_c();
|
||||
virtual ~dLytMeterMain_c() {}
|
||||
|
||||
bool build(d2d::ResAccIf_c *resAcc);
|
||||
bool remove();
|
||||
bool draw();
|
||||
|
||||
bool isNotSilentRealmOrLoftwing();
|
||||
|
||||
bool fn_800C9F70();
|
||||
bool fn_800C9FE0();
|
||||
bool fn_800CA040();
|
||||
|
||||
bool fn_800D5350();
|
||||
bool fn_800D5380(u8);
|
||||
void fn_800D5290();
|
||||
bool fn_800D5590();
|
||||
void fn_800D5630();
|
||||
bool fn_800D5650();
|
||||
bool fn_800D5680();
|
||||
bool fn_800D56B0();
|
||||
void checkPaneVisibility();
|
||||
bool execute();
|
||||
|
||||
bool isSilentRealm();
|
||||
|
||||
bool fn_800D53D0();
|
||||
bool fn_800D5420();
|
||||
|
||||
void setUiMode(u16 value) const;
|
||||
u8 getUiMode();
|
||||
|
||||
bool getItemSelectNotHiddenByAreaCaption() const {
|
||||
return mPanesNotHiddenByAreaCaption[0];
|
||||
}
|
||||
|
||||
bool getMinusBtnNotHiddenByAreaCaption() const {
|
||||
return mPanesNotHiddenByAreaCaption[1];
|
||||
}
|
||||
|
||||
bool getDowsingNotHiddenByAreaCaption() const {
|
||||
return mPanesNotHiddenByAreaCaption[8];
|
||||
}
|
||||
|
||||
void setGanbariGaugeHiddenByAreaCaption(bool visible) {
|
||||
mPanesNotHiddenByAreaCaption[15] = visible;
|
||||
}
|
||||
|
||||
bool getField_0x1377E() const {
|
||||
return field_0x1377E;
|
||||
}
|
||||
|
||||
bool getField_0x1377F() const {
|
||||
return field_0x1377F;
|
||||
}
|
||||
|
||||
dLytMeterNunStk_c *getNunStk() {
|
||||
return &mNunStk;
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x00004 */ d2d::ResAccIf_c mResAcc;
|
||||
/* 0x00374 */ d2d::LytBase_c mLyt;
|
||||
/* 0x00404 */ d2d::AnmGroup_c mAnmGroups[34];
|
||||
u8 field_0x00C84[0x00C8C - 0x00C84];
|
||||
/* 0x00C84 */ u8 _0x00C84[0x00C8C - 0x00C84];
|
||||
/* 0x00C8C */ dLytMeterGanbariGauge_c mGanbariGauge;
|
||||
/* 0x011E8 */ dLytMeterRupy_c mRupy;
|
||||
/* 0x01A98 */ dLytMeterItemSelect_c mItemSelect;
|
||||
@@ -165,51 +161,266 @@ public:
|
||||
/* 0x130F4 */ d2d::SubPaneList mMeters;
|
||||
|
||||
/* 0x13100 */ d2d::SubPaneListNode mNodes[16];
|
||||
/* 0x13200 */ u8 field_0x13200[0x13204 - 0x13200];
|
||||
/* 0x13200 */ u8 _0x13200[0x13204 - 0x13200];
|
||||
/* 0x13204 */ dLytMeterParts_c mParts[16];
|
||||
|
||||
/* 0x136C4 */ mVec3_c mPosArray1[2];
|
||||
/* 0x136DC */ mVec3_c mPosArray2[7];
|
||||
/* 0x13730 */ mVec3_c mPos1;
|
||||
/* 0x1373C */ mVec3_c mPos2;
|
||||
/* 0x13748 */ u8 field_0x13748[0x13750 - 0x13748];
|
||||
/* 0x136C4 */ mVec3_c mShieldPositions[2];
|
||||
/* 0x136DC */ mVec3_c mRupyPositions[7];
|
||||
/* 0x13730 */ mVec3_c mShieldPos;
|
||||
/* 0x1373C */ mVec3_c mRupyPos;
|
||||
/* 0x13748 */ s32 field_0x13748;
|
||||
/* 0x1374C */ s32 field_0x1374C;
|
||||
/* 0x13750 */ s32 field_0x13750;
|
||||
/* 0x13754 */ u8 field_0x13754[0x137B4 - 0x13754];
|
||||
/* 0x13754 */ s32 field_0x13754;
|
||||
/* 0x13758 */ s32 mShieldPosIndex;
|
||||
/* 0x1375C */ s32 mRupyPosIndex;
|
||||
/* 0x13760 */ s32 mRupyPosInterpFrame;
|
||||
/* 0x13764 */ s32 mShieldPosInterpFrame;
|
||||
/* 0x13768 */ s32 mOldShieldPosIndex;
|
||||
/* 0x1376C */ s32 mOldRupyPosIndex;
|
||||
/* 0x13770 */ u8 field_0x13770;
|
||||
/* 0x13771 */ bool field_0x13771;
|
||||
/* 0x13772 */ bool field_0x13772;
|
||||
/* 0x13773 */ bool field_0x13773;
|
||||
/* 0x13774 */ bool field_0x13774;
|
||||
/* 0x13775 */ bool field_0x13775;
|
||||
/* 0x13776 */ bool mTimerVisible;
|
||||
/* 0x13777 */ bool mBirdGaugeVisible;
|
||||
/* 0x13778 */ bool mSkyGaugeVisible;
|
||||
/* 0x13779 */ bool mBossGaugeVisible;
|
||||
/* 0x1377A */ bool mKakeraKeyVisible;
|
||||
/* 0x1377B */ bool mBossKeyVisible;
|
||||
/* 0x1377C */ bool mSmallKeyVisible;
|
||||
/* 0x1377D */ bool mDrinkVisible;
|
||||
/* 0x1377E */ bool field_0x1377E;
|
||||
/* 0x1377F */ bool field_0x1377F;
|
||||
/* 0x13780 */ bool field_0x13780;
|
||||
/* 0x13781 */ bool field_0x13781;
|
||||
/* 0x13782 */ bool mPanesVisible[16];
|
||||
/* 0x13792 */ bool mPanesNotHiddenByAreaCaption[16];
|
||||
/* 0x137A2 */ bool mPanesForceShown[16];
|
||||
/* 0x137B2 */ bool field_0x137B2;
|
||||
/* 0x137B4 */ mVec3_c mPos3;
|
||||
/* 0x13B38 */ u32 field_0x13B38;
|
||||
/* 0x137C0 */ u32 field_0x137C0;
|
||||
};
|
||||
|
||||
// made up name
|
||||
class dLytMeterContainer_c {
|
||||
class dLytMeter_c {
|
||||
public:
|
||||
dLytMeterContainer_c();
|
||||
virtual ~dLytMeterContainer_c() {
|
||||
dLytMeter_c();
|
||||
virtual ~dLytMeter_c() {
|
||||
sInstance = nullptr;
|
||||
}
|
||||
|
||||
bool build();
|
||||
bool remove();
|
||||
bool execute();
|
||||
bool draw();
|
||||
|
||||
// FIXME This goes to doButton!!!
|
||||
bool isButtonFlag(u32 flag) {
|
||||
return (mMeter.field_0x13B38 & flag) == flag;
|
||||
bool fn_800D5670();
|
||||
bool fn_800D56F0();
|
||||
bool fn_800D97A0();
|
||||
/** Running out of good names for this function, but this allows
|
||||
the area caption to temporarily hide the main HUD. */
|
||||
void setAreaCaptionOverrideVisibility(bool visible);
|
||||
void fn_800D9710();
|
||||
void fn_800D9730(u8 val);
|
||||
void fn_800D9780(bool val);
|
||||
static void fn_800D97E0(u8);
|
||||
static void setVisible(bool);
|
||||
|
||||
static void setStaminaWheelPercent(f32 percent);
|
||||
void setStaminaWheelPercentInternal(f32 percent);
|
||||
|
||||
static dLytMeter_c *GetInstance() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
static dLytMeterContainer_c *GetInstance() {
|
||||
return sInstance;
|
||||
static dLytMeterMain_c *GetMain() {
|
||||
return &sInstance->mMain;
|
||||
}
|
||||
|
||||
// Not all of these inlines exist on dLytMeterMain_c
|
||||
// because accessing via GetMeter->get... causes
|
||||
// different instructions sometimes
|
||||
|
||||
s32 getMeterField_0x13750() const {
|
||||
return mMain.field_0x13750;
|
||||
}
|
||||
|
||||
u8 getMeterField_0x13770() const {
|
||||
return mMain.field_0x13770;
|
||||
}
|
||||
|
||||
bool getMeterField_0x13774() const {
|
||||
return mMain.field_0x13774;
|
||||
}
|
||||
|
||||
bool getMeterField_0x1377F() const {
|
||||
return mMain.field_0x1377F;
|
||||
}
|
||||
|
||||
bool checkAllFlags(u32 mask) const {
|
||||
return (mFlags & mask) == mask;
|
||||
}
|
||||
|
||||
void clearFlags(u32 mask) {
|
||||
mFlags = mFlags & ~mask;
|
||||
}
|
||||
|
||||
void setFlags(u32 mask) {
|
||||
mFlags = mFlags | mask;
|
||||
}
|
||||
|
||||
void resetFlags() {
|
||||
mFlags = 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
static s32 getCrossBtn0x7BF8() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->mMain.mCrossBtn.getField_0x620();
|
||||
} else {
|
||||
return 6;
|
||||
}
|
||||
}
|
||||
|
||||
static bool getItemSelect0x75A2() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->mMain.mItemSelect.getField_0x57A2();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void setRupyField_0x8A9(u8 val) {
|
||||
if (sInstance != nullptr) {
|
||||
sInstance->mMain.mRupy.setField_0x8A9(val);
|
||||
}
|
||||
}
|
||||
|
||||
static void setRupyField_0x8AA(u8 val) {
|
||||
if (sInstance != nullptr) {
|
||||
sInstance->mMain.mRupy.setField_0x8AA(val);
|
||||
}
|
||||
}
|
||||
|
||||
static void setRupyField_0x8AC(u8 val) {
|
||||
if (sInstance != nullptr) {
|
||||
sInstance->mMain.mRupy.setField_0x8AC(val);
|
||||
}
|
||||
}
|
||||
|
||||
static u8 getRupyField_0x8AC() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->mMain.mRupy.getField_0x8AC();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static s32 getHeartField_0x78C() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->mMain.mHeart.getField_0x78C();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void setField_0x13B61(u8 val) {
|
||||
if (sInstance != nullptr) {
|
||||
sInstance->field_0x13B61 = val;
|
||||
}
|
||||
}
|
||||
|
||||
static void setField_0x13B63(u8 val) {
|
||||
if (sInstance != nullptr) {
|
||||
sInstance->field_0x13B63 = val;
|
||||
}
|
||||
}
|
||||
|
||||
static u8 getField_0x13B63() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->field_0x13B63;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void setField_0x13B64(u8 val) {
|
||||
if (sInstance != nullptr) {
|
||||
sInstance->field_0x13B64 = val;
|
||||
}
|
||||
}
|
||||
|
||||
static u8 getField_0x13B66() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->field_0x13B66;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static u8 getDowsing0x550A() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->mMain.mDowsing.getField_0x550A();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static bool getfn_800C9FE0() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->mMain.fn_800C9FE0();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static bool getfn_800D97A0() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->fn_800D97A0();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static bool getMinusBtnFn800F7600() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->mMain.mMinusBtn.fn_800F7600();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static bool getDowsingFn800FE4B0() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->mMain.mDowsing.fn_800FE4B0();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x00004 */ d2d::ResAccIf_c mResAcc;
|
||||
/* 0x00374 */ dLytMeterEventSkip_c *mpEventSkip;
|
||||
/* 0x00378 */ dLytMeter_c mMeter;
|
||||
/* 0x00378 */ dLytMeterMain_c mMain;
|
||||
/* 0x13B3C */ dLytDobutton_c *mpDoButton;
|
||||
/* 0x13B40 */ LytDoButtonRelated *mpDoButtonRelated;
|
||||
/* 0x13B44 */ LytBirdButtonRelated *mpBirdRelated;
|
||||
/* 0x13B48 */ bool mVisible;
|
||||
/* 0x13B49 */ u8 _0x13B49[0x13B50 - 0x13B49];
|
||||
/* 0x13B50 */ s32 mFlags;
|
||||
/* 0x13B54 */ s32 field_0x13B54;
|
||||
/* 0x13B58 */ s32 field_0x13B58;
|
||||
/* 0x13B5C */ s32 field_0x13B5C;
|
||||
/* 0x13B60 */ bool field_0x13B60;
|
||||
/* 0x13B61 */ bool field_0x13B61;
|
||||
/* 0x13B62 */ bool field_0x13B62;
|
||||
/* 0x13B63 */ bool field_0x13B63;
|
||||
/* 0x13B64 */ bool field_0x13B64;
|
||||
/* 0x13B65 */ bool field_0x13B65;
|
||||
/* 0x13B66 */ bool field_0x13B66;
|
||||
|
||||
static dLytMeterContainer_c *sInstance;
|
||||
static dLytMeter_c *sInstance;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytMeterABtn_c : public d2d::dSubPane {
|
||||
public:
|
||||
@@ -17,7 +16,7 @@ public:
|
||||
virtual d2d::LytBase_c *getLyt() override {
|
||||
return &mLyt;
|
||||
}
|
||||
virtual const char *getName() const {
|
||||
virtual const char *getName() const override {
|
||||
return mLyt.getName();
|
||||
}
|
||||
|
||||
@@ -26,8 +25,13 @@ public:
|
||||
mpContainerAnmGroup1 = g1;
|
||||
mpContainerAnmGroup2 = g2;
|
||||
}
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
}
|
||||
|
||||
private:
|
||||
void fn_800E0870(u32);
|
||||
void setMessage(s32 id);
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterABtn_c, InvisibleWait);
|
||||
STATE_FUNC_DECLARE(dLytMeterABtn_c, In);
|
||||
@@ -37,24 +41,26 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytMeterABtn_c, Active);
|
||||
STATE_FUNC_DECLARE(dLytMeterABtn_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterABtn_c);
|
||||
d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[3];
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterABtn_c);
|
||||
|
||||
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytMeterABtn_c);
|
||||
/* 0x044 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnm[3];
|
||||
/* 0x198 */ d2d::AnmGroup_c *mpContainerAnmGroup1;
|
||||
/* 0x19C */ d2d::AnmGroup_c *mpContainerAnmGroup2;
|
||||
/* 0x1A0 */ nw4r::lyt::Pane *mpPane;
|
||||
/* 0x1A4 */ void *field_0x1A4;
|
||||
/* 0x1A4 */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x1A8 */ dTextBox_c *mpTextBoxes[2];
|
||||
/* 0x1B0 */ dWindow_c *mpWindow;
|
||||
/* 0x1B4 */ dTextBox_c *mpSizeBox;
|
||||
/* 0x1B8 */ u32 field_0x1B8;
|
||||
/* 0x1BC */ u32 field_0x1BC;
|
||||
/* 0x1C0 */ u32 field_0x1C0;
|
||||
/* 0x1C4 */ u32 field_0x1C4;
|
||||
/* 0x1B0 */ dWindow_c *mpWindow[1];
|
||||
/* 0x1B4 */ dTextBox_c *mpSizeBox[1];
|
||||
/* 0x1B8 */ s32 field_0x1B8;
|
||||
/* 0x1BC */ s32 field_0x1BC;
|
||||
/* 0x1C0 */ BOOL field_0x1C0;
|
||||
/* 0x1C4 */ s32 field_0x1C4;
|
||||
/* 0x1C8 */ u8 field_0x1C8;
|
||||
/* 0x1C9 */ u8 field_0x1C9;
|
||||
/* 0x1CA */ u8 field_0x1CA;
|
||||
/* 0x1CB */ u8 field_0x1CB;
|
||||
/* 0x1CB */ bool mOldTextState;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,23 +2,53 @@
|
||||
#define D_LYT_METER_CROSS_BTN_H
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/d_window.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
// Size 0x80
|
||||
class dLytMeterCrossBtnParts_c {
|
||||
friend class dLytMeterCrossBtn_c;
|
||||
|
||||
public:
|
||||
dLytMeterCrossBtnParts_c(): mStateMgr(*this, sStateID::null) {}
|
||||
dLytMeterCrossBtnParts_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterCrossBtnParts_c() {}
|
||||
|
||||
void init();
|
||||
void execute(bool bIsVisible);
|
||||
|
||||
bool isActive() const {
|
||||
return *mStateMgr.getStateID() == StateID_Active;
|
||||
}
|
||||
|
||||
private:
|
||||
void setMessage(s32 id);
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Active);
|
||||
STATE_FUNC_DECLARE(dLytMeterCrossBtnParts_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterCrossBtnParts_c);
|
||||
|
||||
u32 padding[17];
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterCrossBtnParts_c);
|
||||
|
||||
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterCrossBtnParts_c);
|
||||
|
||||
/* 0x3C */ d2d::LytBase_c *mpLyt;
|
||||
/* 0x40 */ d2d::AnmGroup_c *mpAnm[2];
|
||||
/* 0x48 */ dTextBox_c *mpTextBoxes[2];
|
||||
/* 0x50 */ dWindow_c *mpWindow;
|
||||
/* 0x54 */ dTextBox_c *mpSizeBox;
|
||||
/* 0x58 */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x5C */ s32 mIndex;
|
||||
/* 0x60 */ s32 field_0x60;
|
||||
/* 0x64 */ s32 field_0x64;
|
||||
/* 0x68 */ s32 field_0x68;
|
||||
/* 0x6C */ s32 field_0x6C;
|
||||
/* 0x70 */ s32 field_0x70;
|
||||
/* 0x74 */ s32 field_0x74;
|
||||
/* 0x78 */ s32 mOnDelay;
|
||||
/* 0x7C */ u8 field_0x7C;
|
||||
};
|
||||
|
||||
class dLytMeterCrossBtn_c : public d2d::dSubPane {
|
||||
@@ -27,23 +57,56 @@ 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 ~dLytMeterCrossBtn_c() {}
|
||||
|
||||
s32 getField_0x620() const {
|
||||
return field_0x620;
|
||||
}
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane);
|
||||
bool fn_800FA730() const;
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, ToUse);
|
||||
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, ToUnuse);
|
||||
STATE_FUNC_DECLARE(dLytMeterCrossBtn_c, Unuse);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterCrossBtn_c);
|
||||
d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[12];
|
||||
/* 0x3D8 */ u8 field_0x3D8[0x420 - 0x3D8];
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtn_c);
|
||||
|
||||
/* 0x00C */ UI_STATE_MGR_DECLARE(dLytMeterCrossBtn_c);
|
||||
/* 0x044 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnm[12];
|
||||
/* 0x3D8 */ nw4r::lyt::Pane *mpPane;
|
||||
/* 0x3DC */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x3E0 */ dTextBox_c *mpTextboxes[8];
|
||||
/* 0x400 */ dWindow_c *mpWindows[4];
|
||||
/* 0x410 */ dTextBox_c *mpSizeBoxes[4];
|
||||
/* 0x420 */ dLytMeterCrossBtnParts_c mParts[4];
|
||||
/* 0x??? */ u8 padding[0x78A0 - 0x7880];
|
||||
/* 0x620 */ s32 field_0x620;
|
||||
/* 0x624 */ s32 field_0x624;
|
||||
/* 0x628 */ u16 field_0x628;
|
||||
/* 0x62C */ s32 mCallCount0;
|
||||
/* 0x630 */ s32 mCallCount1;
|
||||
/* 0x634 */ u8 field_0x634;
|
||||
/* 0x635 */ u8 field_0x635;
|
||||
/* 0x636 */ u8 field_0x636;
|
||||
/* 0x637 */ u8 field_0x637;
|
||||
/* 0x638 */ u8 field_0x638;
|
||||
/* 0x639 */ u8 field_0x639;
|
||||
/* 0x63A */ u8 field_0x63A;
|
||||
/* 0x63B */ u8 field_0x63B;
|
||||
/* 0x63C */ u8 field_0x63C;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,23 +3,39 @@
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_common_icon_item.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytMeterDowsingMenuIcon_c {
|
||||
public:
|
||||
dLytMeterDowsingMenuIcon_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dLytMeterDowsingMenuIcon_c() {}
|
||||
|
||||
void init();
|
||||
void execute();
|
||||
void reset();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anim) {
|
||||
mpAnm = anim;
|
||||
}
|
||||
|
||||
void setShouldBeSelect(u32 v) {
|
||||
mShouldBeSelect = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingMenuIcon_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingMenuIcon_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingMenuIcon_c, Select);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingMenuIcon_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterDowsingMenuIcon_c);
|
||||
u32 field_0x40;
|
||||
u32 field_0x44;
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDowsingMenuIcon_c);
|
||||
|
||||
/* 0x04 */ UI_STATE_MGR_DECLARE(dLytMeterDowsingMenuIcon_c);
|
||||
|
||||
/* 0x40 */ d2d::AnmGroup_c *mpAnm;
|
||||
/* 0x44 */ u32 mShouldBeSelect;
|
||||
};
|
||||
|
||||
class dLytMeterDowsingBlink_c {
|
||||
@@ -27,15 +43,29 @@ public:
|
||||
dLytMeterDowsingBlink_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterDowsingBlink_c() {}
|
||||
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anim) {
|
||||
mpAnm = anim;
|
||||
}
|
||||
|
||||
void setShouldBeSelect(u32 v) {
|
||||
mShouldBeSelect = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingBlink_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingBlink_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingBlink_c, Select);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingBlink_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterDowsingBlink_c);
|
||||
u32 field_0x40;
|
||||
u32 field_0x44;
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDowsingBlink_c);
|
||||
|
||||
/* 0x04 */ UI_STATE_MGR_DECLARE(dLytMeterDowsingBlink_c);
|
||||
|
||||
/* 0x40 */ d2d::AnmGroup_c *mpAnm;
|
||||
/* 0x44 */ u32 mShouldBeSelect;
|
||||
};
|
||||
|
||||
class dLytMeterDowsingInput_c {
|
||||
@@ -43,15 +73,29 @@ public:
|
||||
dLytMeterDowsingInput_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterDowsingInput_c() {}
|
||||
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anim) {
|
||||
mpAnm = anim;
|
||||
}
|
||||
|
||||
void setShouldBeSelect(u32 v) {
|
||||
mShouldBeSelect = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingInput_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingInput_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingInput_c, Select);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingInput_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterDowsingInput_c);
|
||||
u32 field_0x40;
|
||||
u32 field_0x44;
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDowsingInput_c);
|
||||
|
||||
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterDowsingInput_c);
|
||||
|
||||
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
|
||||
/* 0x40 */ u32 mShouldBeSelect;
|
||||
};
|
||||
|
||||
class dLytMeterDowsingText_c {
|
||||
@@ -59,15 +103,29 @@ public:
|
||||
dLytMeterDowsingText_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterDowsingText_c() {}
|
||||
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anim) {
|
||||
mpAnm = anim;
|
||||
}
|
||||
|
||||
void setShouldBeSelect(u32 v) {
|
||||
mShouldBeSelect = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingText_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingText_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingText_c, Select);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsingText_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterDowsingText_c);
|
||||
u32 field_0x40;
|
||||
u32 field_0x44;
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDowsingText_c);
|
||||
|
||||
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterDowsingText_c);
|
||||
|
||||
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
|
||||
/* 0x40 */ u32 mShouldBeSelect;
|
||||
};
|
||||
|
||||
class dLytMeterDowsing_c : public d2d::dSubPane {
|
||||
@@ -76,13 +134,50 @@ 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 ~dLytMeterDowsing_c() {}
|
||||
|
||||
bool shouldCall() const;
|
||||
bool fn_800FE3C0(s32 arg);
|
||||
bool fn_800FE490() const;
|
||||
bool fn_800FE4B0() const;
|
||||
bool fn_800FE610();
|
||||
|
||||
u8 getField_0x550A() const {
|
||||
return field_0x550A;
|
||||
}
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
}
|
||||
|
||||
void setField_0x54E0(s32 value) {
|
||||
field_0x54E0 = value;
|
||||
}
|
||||
|
||||
private:
|
||||
void setItemName(s32 id);
|
||||
void setMessage(s32 id);
|
||||
u8 getSelectedDowsingSlot() const;
|
||||
void fn_800FE110();
|
||||
void fn_800FE220();
|
||||
s32 convertToLytIndex(s32 slot) const;
|
||||
s32 convertSlotIndexToAnm(s32 slot) const;
|
||||
s32 fn_800FE9C0(s32) const;
|
||||
|
||||
nw4r::lyt::Pane *getPaneByIndex(s32 idx) const {
|
||||
return mpPanes[idx];
|
||||
}
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsing_c, Invisible);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsing_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsing_c, MenuSelectingIn);
|
||||
@@ -95,21 +190,48 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsing_c, DemoMove);
|
||||
STATE_FUNC_DECLARE(dLytMeterDowsing_c, DemoOut);
|
||||
|
||||
/* 0x008 */ dLytMeterDowsingMenuIcon_c mIcon[8];
|
||||
/* 0x248 */ dLytMeterDowsingBlink_c mBlink;
|
||||
/* 0x28C */ dLytMeterDowsingInput_c mInput;
|
||||
/* 0x2D0 */ dLytMeterDowsingText_c mText[2];
|
||||
/* 0x358 */ UI_STATE_MGR_DECLARE(dLytMeterDowsing_c);
|
||||
STATE_MGR_DEFINE_UTIL_ISSTATE(dLytMeterDowsing_c);
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDowsing_c);
|
||||
|
||||
/* 0x490 */ d2d::dLytSub mLyt;
|
||||
/* 0x0008 */ dLytMeterDowsingMenuIcon_c mIcon[8];
|
||||
/* 0x0248 */ dLytMeterDowsingBlink_c mBlink;
|
||||
/* 0x028C */ dLytMeterDowsingInput_c mInput;
|
||||
/* 0x02D0 */ dLytMeterDowsingText_c mText[2];
|
||||
/* 0x0358 */ UI_STATE_MGR_DECLARE(dLytMeterDowsing_c);
|
||||
|
||||
/* 0x428 */ d2d::AnmGroup_c mAnmGroups[29];
|
||||
/* 0xB68 */ u8 field_0xB68[0xBEC - 0xB68];
|
||||
/* 0xBEC */ dLytCommonIconItem_c mItemIcons[9];
|
||||
/* 0x0490 */ d2d::dLytSub mLyt;
|
||||
|
||||
/* 0x5434 */ d2d::SubPaneList mNodeList;
|
||||
/* 0x5440 */ d2d::SubPaneListNode mNodes[9];
|
||||
/* 0x??? */ u8 padding[0x11E34 - 0x11DF8];
|
||||
/* 0x0428 */ d2d::AnmGroup_c mAnm[29];
|
||||
/* 0x0B68 */ nw4r::lyt::Pane *mpPanes[22];
|
||||
/* 0x0BC0 */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x0BC4 */ dWindow_c *mpWindows[3];
|
||||
/* 0x0BD0 */ dTextBox_c *mpSizeBoxes[3];
|
||||
/* 0x0BDC */ dTextBox_c *mpTextBoxes[4];
|
||||
/* 0x0BEC */ dLytCommonIconItem_c mItemIcons[9];
|
||||
|
||||
/* 0x5434 */ d2d::SubPaneList mSubpaneList;
|
||||
/* 0x5440 */ d2d::SubPaneListNode mSubpanes[9];
|
||||
/* 0x54D0 */ f32 mArrowRotation;
|
||||
/* 0x54D4 */ f32 mArrowLength;
|
||||
/* 0x54D8 */ s32 field_0x54D8;
|
||||
/* 0x54D8 */ s32 field_0x54DC;
|
||||
/* 0x54E0 */ s32 field_0x54E0;
|
||||
/* 0x54E4 */ s32 field_0x54E4;
|
||||
/* 0x54E8 */ s32 field_0x54E8;
|
||||
/* 0x54EC */ s32 field_0x54EC;
|
||||
/* 0x54F0 */ s32 field_0x54F0;
|
||||
/* 0x54F4 */ s32 field_0x54F4;
|
||||
/* 0x54F8 */ u32 field_0x54F8;
|
||||
/* 0x54FC */ s32 mDemoFrame;
|
||||
/* 0x5500 */ s32 field_0x5500;
|
||||
/* 0x5504 */ u8 field_0x5504;
|
||||
/* 0x5505 */ u8 field_0x5505;
|
||||
/* 0x5506 */ u8 field_0x5506;
|
||||
/* 0x5507 */ u8 field_0x5507;
|
||||
/* 0x5508 */ u8 field_0x5508;
|
||||
/* 0x5509 */ u8 field_0x5509;
|
||||
/* 0x550A */ u8 field_0x550A;
|
||||
/* 0x550B */ u8 field_0x550B;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
// Size 0x54
|
||||
class dLytMeterDrinkParts_c {
|
||||
@@ -46,6 +45,8 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytMeterDrinkParts_c, Visible);
|
||||
STATE_FUNC_DECLARE(dLytMeterDrinkParts_c, Out);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDrinkParts_c);
|
||||
|
||||
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterDrinkParts_c);
|
||||
/* 0x03C */ d2d::AnmGroup_c *mAnmGroups[3];
|
||||
/* 0x048 */ s32 field_0x48;
|
||||
@@ -71,6 +72,14 @@ public:
|
||||
bool draw();
|
||||
bool execute();
|
||||
|
||||
void setShouldBeVisible(bool v) {
|
||||
field_0x6F4 = v;
|
||||
}
|
||||
|
||||
void setField_0x6E0(const mVec3_c &v) {
|
||||
field_0x6E0 = v;
|
||||
}
|
||||
|
||||
private:
|
||||
bool fn_800E5C40(int);
|
||||
int getPartForDrinkType(dLytMeterDrinkParts_c::DrinkType_e ty) const;
|
||||
@@ -82,6 +91,8 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytMeterDrink_c, Move);
|
||||
STATE_FUNC_DECLARE(dLytMeterDrink_c, Out);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterDrink_c);
|
||||
|
||||
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterDrink_c);
|
||||
/* 0x040 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D4 */ d2d::AnmGroup_c mAnmGroups[20];
|
||||
|
||||
@@ -2,28 +2,36 @@
|
||||
#define D_LYT_METER_EVENT_SKIP_H
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/d_window.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
// size 0x164
|
||||
class dLytMeterEventSkip_c {
|
||||
public:
|
||||
dLytMeterEventSkip_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dLytMeterEventSkip_c() {}
|
||||
bool build(d2d::ResAccIf_c *resAcc);
|
||||
bool remove();
|
||||
bool execute();
|
||||
bool draw();
|
||||
|
||||
private:
|
||||
bool shouldPromptForSkip() const;
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, Invisible);
|
||||
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, In);
|
||||
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, Visible);
|
||||
STATE_FUNC_DECLARE(dLytMeterEventSkip_c, Out);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterEventSkip_c);
|
||||
d2d::LytBase_c mLyt;
|
||||
/* 0x0D0 */ d2d::AnmGroup_c mAnmGroups[2];
|
||||
/* 0x150 */ u8 field_0x150[0x164 - 0x150];
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterEventSkip_c);
|
||||
|
||||
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytMeterEventSkip_c);
|
||||
/* 0x03C */ d2d::LytBase_c mLyt;
|
||||
/* 0x0D0 */ d2d::AnmGroup_c mAnm[2];
|
||||
/* 0x150 */ dTextBox_c *mpTextBoxes[2];
|
||||
/* 0x158 */ dWindow_c *mpWindow;
|
||||
/* 0x15C */ dTextBox_c *mpSizeBox;
|
||||
/* 0x160 */ bool mVisible;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,22 +1,54 @@
|
||||
#ifndef D_LYT_METER_GANBARI_GAUGE_H
|
||||
#define D_LYT_METER_GANBARI_GAUGE_H
|
||||
|
||||
#include "common.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 dLytMeterGanbariGauge_c : public d2d::dSubPane {
|
||||
public:
|
||||
dLytMeterGanbariGauge_c() : mStateMgr1(*this, sStateID::null), mStateMgr2(*this, sStateID::null) {}
|
||||
dLytMeterGanbariGauge_c() : mStateMgrMain(*this, sStateID::null), mStateMgrWheel(*this, sStateID::null) {}
|
||||
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 ~dLytMeterGanbariGauge_c() {}
|
||||
|
||||
bool fn_80104760() const;
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
}
|
||||
|
||||
void setStaminaPercent(f32 value) {
|
||||
mStaminaPercent = value;
|
||||
}
|
||||
|
||||
void setField_0x539(bool v) {
|
||||
field_0x539 = v;
|
||||
}
|
||||
|
||||
private:
|
||||
void realizeAnimState();
|
||||
static bool isStaminaLow(f32);
|
||||
static bool isStaminaCritical(f32);
|
||||
bool fn_80104710(bool) const;
|
||||
bool isCrawling() const;
|
||||
static bool swimmingRelated();
|
||||
bool fn_801047B0() const;
|
||||
bool displayAirInsteadOfStamina();
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterGanbariGauge_c, InvisibleWait);
|
||||
STATE_FUNC_DECLARE(dLytMeterGanbariGauge_c, In);
|
||||
STATE_FUNC_DECLARE(dLytMeterGanbariGauge_c, Wait);
|
||||
@@ -31,13 +63,38 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytMeterGanbariGauge_c, Recovery);
|
||||
STATE_FUNC_DECLARE(dLytMeterGanbariGauge_c, ToMax);
|
||||
|
||||
STATE_MGR(dLytMeterGanbariGauge_c) mStateMgr1;
|
||||
STATE_MGR(dLytMeterGanbariGauge_c) mStateMgr2;
|
||||
void changeState(const sStateIDIf_c &value) {
|
||||
mStateMgrMain.changeState(value);
|
||||
}
|
||||
|
||||
STATE_MGR(dLytMeterGanbariGauge_c) mStateMgrMain;
|
||||
STATE_MGR(dLytMeterGanbariGauge_c) mStateMgrWheel;
|
||||
|
||||
/* 0x080 */ d2d::dLytSub mLyt;
|
||||
/* 0x114 */ d2d::AnmGroup_c mAnmGroups[16];
|
||||
/* 0x??? */ u8 padding[0x11E8 - 0x11A0];
|
||||
/* 0x114 */ d2d::AnmGroup_c mAnm[16];
|
||||
/* 0x514 */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x518 */ f32 mStaminaPercent;
|
||||
/* 0x51C */ f32 field_0x51C;
|
||||
/* 0x520 */ u8 _0x520[0x524 - 0x520];
|
||||
/* 0x524 */ mVec3_c field_0x524;
|
||||
/* 0x530 */ u8 field_0x530;
|
||||
/* 0x534 */ s32 field_0x534;
|
||||
/* 0x538 */ u8 field_0x538;
|
||||
/* 0x539 */ u8 field_0x539;
|
||||
/* 0x53C */ s32 mOutWaitTimer;
|
||||
/* 0x540 */ s32 field_0x540;
|
||||
/* 0x544 */ s32 field_0x544;
|
||||
/* 0x548 */ s32 field_0x548;
|
||||
/* 0x54C */ f32 field_0x54C;
|
||||
/* 0x550 */ f32 field_0x550;
|
||||
|
||||
/* 0x554 */ f32 field_0x554;
|
||||
u8 field_0x558;
|
||||
u8 field_0x559;
|
||||
bool field_0x55A;
|
||||
u8 field_0x55B;
|
||||
};
|
||||
|
||||
STATIC_ASSERT(sizeof(dLytMeterGanbariGauge_c) == 0x55C);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define D_LYT_METER_HEART_H
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
|
||||
class dLytMeterHeart_c : public d2d::dSubPane {
|
||||
public:
|
||||
@@ -9,16 +10,51 @@ 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 ~dLytMeterHeart_c() {}
|
||||
private:
|
||||
|
||||
s32 getField_0x78C() const {
|
||||
return field_0x78C;
|
||||
}
|
||||
|
||||
d2d::dLytSub mLyt;
|
||||
/* 0xD8 */ d2d::AnmGroup_c mAnm[26];
|
||||
/* 0x??? */ u8 padding[0x12DA4 - 0x12D24];
|
||||
u8 getCurrentHealthCapacity() const;
|
||||
|
||||
private:
|
||||
u8 getCurrentHealth() const;
|
||||
void realizeHeartsState();
|
||||
void executeInternal();
|
||||
s32 getNumDisplayedHearts() const;
|
||||
s32 getDisplayedHealthCapacity() const;
|
||||
|
||||
/* 0x008 */ d2d::dLytSub mLyt;
|
||||
/* 0x09C */ d2d::AnmGroup_c mAnm[26];
|
||||
/* 0x71C */ nw4r::lyt::Pane *mpHeartPanes[20];
|
||||
/* 0x76C */ nw4r::lyt::Pane *mpAlphaPane;
|
||||
/* 0x770 */ nw4r::lyt::Pane *mpMainPane;
|
||||
/* 0x774 */ s32 mCurrentHealth;
|
||||
/* 0x778 */ s32 mCurrentHealthCapacity;
|
||||
/* 0x77C */ s32 mStoredHealth;
|
||||
/* 0x780 */ s32 mStoredHealthCapacity;
|
||||
/* 0x784 */ s32 mHealthCapacityIncreaseDelayTimer;
|
||||
/* 0x788 */ s32 mEffectHeartIdx;
|
||||
/* 0x78C */ s32 field_0x78C;
|
||||
/* 0x790 */ s32 field_0x790;
|
||||
/* 0x794 */ u8 field_0x794;
|
||||
/* 0x795 */ u8 field_0x795;
|
||||
/* 0x796 */ u8 field_0x796;
|
||||
/* 0x797 */ bool field_0x797;
|
||||
/* 0x798 */ bool mIsLoop;
|
||||
/* 0x799 */ bool mIsDanger;
|
||||
/* 0x79A */ u8 field_0x79A;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,53 +1,154 @@
|
||||
#ifndef D_LYT_METER_ITEM_SELECT_H
|
||||
#define D_LYT_METER_ITEM_SELECT_H
|
||||
|
||||
#include "d/a/d_a_itembase.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_common_icon_item.h"
|
||||
#include "toBeSorted/effects_struct.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/d_window.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
#include "toBeSorted/effects_struct.h"
|
||||
|
||||
class dLytMeterItemSelectIcon_c {
|
||||
public:
|
||||
dLytMeterItemSelectIcon_c(): mStateMgr(*this, sStateID::null) {}
|
||||
dLytMeterItemSelectIcon_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterItemSelectIcon_c() {}
|
||||
private:
|
||||
UI_STATE_MGR_DECLARE(dLytMeterItemSelectIcon_c);
|
||||
|
||||
u32 padding;
|
||||
u32 padding2;
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anim) {
|
||||
mpAnm = anim;
|
||||
}
|
||||
|
||||
void setShouldBeSelect(u32 v) {
|
||||
mShouldBeSelect = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectIcon_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectIcon_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectIcon_c, Select);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectIcon_c, Off);
|
||||
|
||||
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterItemSelectIcon_c);
|
||||
|
||||
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
|
||||
/* 0x40 */ u32 mShouldBeSelect;
|
||||
};
|
||||
|
||||
class dLytMeterItemSelectBlink_c {
|
||||
public:
|
||||
dLytMeterItemSelectBlink_c(): mStateMgr(*this, sStateID::null) {}
|
||||
dLytMeterItemSelectBlink_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterItemSelectBlink_c() {}
|
||||
private:
|
||||
UI_STATE_MGR_DECLARE(dLytMeterItemSelectBlink_c);
|
||||
|
||||
u32 padding;
|
||||
u32 padding2;
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anim) {
|
||||
mpAnm = anim;
|
||||
}
|
||||
|
||||
void setShouldBeSelect(u32 v) {
|
||||
mShouldBeSelect = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectBlink_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectBlink_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectBlink_c, Select);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectBlink_c, Off);
|
||||
|
||||
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterItemSelectBlink_c);
|
||||
|
||||
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
|
||||
/* 0x40 */ u32 mShouldBeSelect;
|
||||
};
|
||||
|
||||
class dLytMeterItemSelectText_c {
|
||||
public:
|
||||
dLytMeterItemSelectText_c(): mStateMgr(*this, sStateID::null) {}
|
||||
dLytMeterItemSelectText_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterItemSelectText_c() {}
|
||||
private:
|
||||
UI_STATE_MGR_DECLARE(dLytMeterItemSelectText_c);
|
||||
|
||||
u32 padding;
|
||||
u32 padding2;
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anim) {
|
||||
mpAnm = anim;
|
||||
}
|
||||
|
||||
void setShouldBeSelect(u32 v) {
|
||||
mShouldBeSelect = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectText_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectText_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectText_c, Select);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectText_c, Off);
|
||||
|
||||
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterItemSelectText_c);
|
||||
|
||||
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
|
||||
/* 0x40 */ u32 mShouldBeSelect;
|
||||
};
|
||||
|
||||
class dLytMeterItemSelectBtn_c {
|
||||
public:
|
||||
dLytMeterItemSelectBtn_c(): mStateMgr(*this, sStateID::null) {}
|
||||
dLytMeterItemSelectBtn_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterItemSelectBtn_c() {}
|
||||
private:
|
||||
UI_STATE_MGR_DECLARE(dLytMeterItemSelectBtn_c);
|
||||
|
||||
u8 padding[0x58 - 0x3C];
|
||||
void init(s32 i, d2d::dLytSub *lyt, nw4r::lyt::Pane *pane);
|
||||
void setVisible(bool bVisible, bool bInstant);
|
||||
void setVisible(bool bVisible);
|
||||
void setVisible2(bool bVisible);
|
||||
void execute();
|
||||
|
||||
bool isSettled() const;
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anim) {
|
||||
mpAnm = anim;
|
||||
}
|
||||
|
||||
u8 getField_0x57() const {
|
||||
return field_0x57;
|
||||
}
|
||||
|
||||
void setField_0x57(u8 val) {
|
||||
field_0x57 = val;
|
||||
}
|
||||
|
||||
bool getShouldBeVisible() const {
|
||||
return mShouldBeVisible;
|
||||
}
|
||||
|
||||
bool getInstant() const {
|
||||
return mInstant;
|
||||
}
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *p) {
|
||||
mpPane2 = p;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectBtn_c, Invisible);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectBtn_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectBtn_c, Visible);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelectBtn_c, Off);
|
||||
|
||||
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterItemSelectBtn_c);
|
||||
|
||||
/* 0x3C */ d2d::dLytSub *mpLyt;
|
||||
/* 0x40 */ d2d::AnmGroup_c *mpAnm;
|
||||
/* 0x44 */ nw4r::lyt::Pane *mpPane1;
|
||||
/* 0x48 */ nw4r::lyt::Pane *mpPane2;
|
||||
/* 0x4C */ s32 mDelay;
|
||||
/* 0x50 */ s32 mIdx;
|
||||
/* 0x54 */ bool mShouldBeVisible;
|
||||
/* 0x55 */ bool mInstant;
|
||||
/* 0x56 */ u8 field_0x56;
|
||||
/* 0x57 */ u8 field_0x57;
|
||||
};
|
||||
|
||||
class dLytMeterItemSelect_c : public d2d::dSubPane {
|
||||
@@ -56,12 +157,84 @@ 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 ~dLytMeterItemSelect_c() {}
|
||||
|
||||
static bool isInSpiralChargeTutorialMinigame();
|
||||
static bool isInRollercoasterMinigame();
|
||||
|
||||
// This enum might be used externally too?
|
||||
enum InternalItem_e {
|
||||
I_BOMB_BAG,
|
||||
I_BOW,
|
||||
I_SAILCLOTH,
|
||||
I_CLAWSHOTS,
|
||||
I_BEETLE,
|
||||
I_SLINGSHOT,
|
||||
I_GUST_BELLOWS,
|
||||
I_BUG_NET,
|
||||
I_WHIP,
|
||||
I_BOAT_CANNON,
|
||||
I_HARP,
|
||||
|
||||
I_INVALID, // 11
|
||||
};
|
||||
|
||||
void fn_800EF580();
|
||||
void fn_800EF6B0(u8);
|
||||
void setOwnerPane(nw4r::lyt::Pane *p);
|
||||
void fn_800EF710(u8);
|
||||
void fn_800EF720(InternalItem_e item);
|
||||
void fn_800EF7A0(bool, s32);
|
||||
bool fn_800EFDF0(bool b) const;
|
||||
bool fn_800F02F0() const;
|
||||
bool fn_800F0220(s32 arg);
|
||||
|
||||
bool getField_0x57A2() const {
|
||||
return field_0x57A2;
|
||||
}
|
||||
|
||||
u8 getField_0x5794() const {
|
||||
return field_0x5794;
|
||||
}
|
||||
|
||||
private:
|
||||
void setBtnItem(s32 internalItem);
|
||||
void realizeSelectedWheelItem();
|
||||
void fn_800EF8C0(bool);
|
||||
bool isWheelBlockedByCurrentAction();
|
||||
void setBtnText(s32);
|
||||
bool fn_800F01B0(s32) const;
|
||||
bool fn_800F01E0(s32) const;
|
||||
bool isSlotBocoburinLocked(s32);
|
||||
void fn_800F0310();
|
||||
bool fn_800F0030() const;
|
||||
s32 fn_800F0170(s32) const;
|
||||
u8 getInternalBaseItemForSlot(s32) const;
|
||||
|
||||
bool isWheelIndexLocked(s32 idx);
|
||||
|
||||
void realizeWheelItems();
|
||||
|
||||
void realizeWheelNumberForLytIndex(s32 iconIdx, s32 lytItemIdx);
|
||||
void realizeBtnNumberForLytIndex(s32 iconIdx, bool);
|
||||
void realizeWheelNumberVForLytIndex(s32 iconIdx, s32 lytItemIdx);
|
||||
|
||||
void setCurrentItemText(ITEM_ID item);
|
||||
static ITEM_ID getBaseItemForBWheelSlot(s32 idx);
|
||||
ITEM_ID baseItemIdToCurrentVariant(ITEM_ID baseItem) const;
|
||||
s32 baseItemLytIndexToCurrentVariant(s32 lytIndex) const;
|
||||
s32 getBaseItemLytIndexforInternalId(s32 idx) const;
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelect_c, InitWait);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelect_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelect_c, SelectIn);
|
||||
@@ -85,35 +258,79 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelect_c, FrameOffMove);
|
||||
STATE_FUNC_DECLARE(dLytMeterItemSelect_c, FrameOffOut);
|
||||
|
||||
dLytMeterItemSelectIcon_c mIcon[8];
|
||||
dLytMeterItemSelectBlink_c mBlink;
|
||||
dLytMeterItemSelectText_c mText[2];
|
||||
dLytMeterItemSelectBtn_c mBtn[4];
|
||||
UI_STATE_MGR_DECLARE(dLytMeterItemSelect_c);
|
||||
/* 0x0008 */ dLytMeterItemSelectIcon_c mIcon[8];
|
||||
/* 0x0228 */ dLytMeterItemSelectBlink_c mBlink;
|
||||
/* 0x026C */ dLytMeterItemSelectText_c mText[2];
|
||||
/* 0x02F4 */ dLytMeterItemSelectBtn_c mBtn[4];
|
||||
/* 0x0454 */ UI_STATE_MGR_DECLARE(dLytMeterItemSelect_c);
|
||||
/* 0x0490 */ d2d::dLytSub mLyt;
|
||||
/* 0x0524 */ d2d::AnmGroup_c mAnm[34];
|
||||
|
||||
/* 0x490 */ d2d::dLytSub mLyt;
|
||||
/* 0x0DA4 */ nw4r::lyt::Pane *mpPanes[17];
|
||||
|
||||
/* 0x524 */ d2d::AnmGroup_c mAnmGroups[34];
|
||||
/* 0x0DE8 */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x0DEC */ dTextBox_c *mpTextBoxes[10];
|
||||
/* 0x0E14 */ dWindow_c *mpWindows[4];
|
||||
/* 0x0E24 */ dTextBox_c *mpSizeBoxes[4];
|
||||
/* 0x0E34 */ dLytCommonIconItem_c mItemIcons[9];
|
||||
/* 0x567C */ d2d::SubPaneList mSubpaneList;
|
||||
/* 0x5688 */ d2d::SubPaneListNode mSubpanes[9];
|
||||
/* 0x5718 */ EffectsStruct mEffects;
|
||||
|
||||
// What is here?
|
||||
u8 padding2[0xE34 - 0xDA4];
|
||||
|
||||
/* 0xE34 */ dLytCommonIconItem_c mItemIcons[9];
|
||||
|
||||
d2d::SubPaneList mNodeList;
|
||||
d2d::SubPaneListNode mNodes[9];
|
||||
EffectsStruct mEffects;
|
||||
|
||||
s32 field_0x574C;
|
||||
s32 field_0x5750;
|
||||
s32 field_0x5754;
|
||||
s32 field_0x5758;
|
||||
s32 field_0x575C;
|
||||
s32 field_0x5760;
|
||||
s32 field_0x5764;
|
||||
s32 field_0x5768;
|
||||
|
||||
/* 0x??? */ u8 padding[0x7260 - 0x7204];
|
||||
/* 0x574C */ InternalItem_e field_0x574C;
|
||||
/* 0x5750 */ InternalItem_e field_0x5750;
|
||||
/* 0x5754 */ s32 field_0x5754;
|
||||
/* 0x5758 */ s32 field_0x5758;
|
||||
/* 0x575C */ s32 field_0x575C;
|
||||
/* 0x5760 */ s32 mDemoMoveTimer;
|
||||
/* 0x5764 */ s32 field_0x5764;
|
||||
/* 0x5768 */ s32 field_0x5768;
|
||||
/* 0x576C */ s32 mLastDoButtonRelatedAction;
|
||||
/* 0x5770 */ s32 field_0x5770;
|
||||
/* 0x5774 */ s32 field_0x5774;
|
||||
/* 0x5778 */ f32 mArrowRotation;
|
||||
/* 0x577C */ f32 mArrowLength;
|
||||
/* 0x5780 */ f32 field_0x5780;
|
||||
/* 0x5784 */ f32 field_0x5784;
|
||||
/* 0x5788 */ s32 field_0x5788;
|
||||
/* 0x578C */ s32 field_0x578C;
|
||||
/* 0x5790 */ s32 field_0x5790;
|
||||
/* 0x5794 */ u8 field_0x5794;
|
||||
/* 0x5795 */ u8 field_0x5795;
|
||||
/* 0x5796 */ u8 field_0x5796;
|
||||
/* 0x5797 */ u8 field_0x5797;
|
||||
/* 0x5798 */ u8 field_0x5798;
|
||||
/* 0x5799 */ u8 field_0x5799;
|
||||
/* 0x579A */ u8 field_0x579A;
|
||||
/* 0x579B */ u8 field_0x579B;
|
||||
/* 0x579C */ u8 mStoredBowVariant;
|
||||
/* 0x579C */ u8 mStoredSlingshotVariant;
|
||||
/* 0x579C */ u8 mStoredBeetleVariant;
|
||||
/* 0x579C */ u8 mStoredBugNetVariant;
|
||||
/* 0x57A0 */ u8 field_0x57A0;
|
||||
/* 0x57A1 */ u8 field_0x57A1;
|
||||
/* 0x57A2 */ bool field_0x57A2;
|
||||
/* 0x57A3 */ bool field_0x57A3[8];
|
||||
/* 0x57AB */ bool mIsBocoburinLocked[8];
|
||||
/* 0x57B3 */ u8 field_0x57B3;
|
||||
/* 0x57B4 */ u8 field_0x57B4;
|
||||
/* 0x57B5 */ u8 field_0x57B5;
|
||||
/* 0x57B6 */ bool field_0x57B6;
|
||||
/* 0x57B7 */ bool field_0x57B7;
|
||||
/* 0x57B8 */ u8 field_0x57B8;
|
||||
/* 0x57B9 */ u8 field_0x57B9;
|
||||
/* 0x57BA */ u8 field_0x57BA;
|
||||
/* 0x57BB */ u8 field_0x57BB;
|
||||
/* 0x57BC */ u8 field_0x57BC;
|
||||
/* 0x57BD */ u8 field_0x57BD;
|
||||
/* 0x57BE */ u8 field_0x57BE;
|
||||
/* 0x57BF */ u8 field_0x57BF;
|
||||
/* 0x57C0 */ u8 field_0x57C0;
|
||||
/* 0x57C1 */ u8 field_0x57C1;
|
||||
/* 0x57C2 */ u8 field_0x57C2;
|
||||
/* 0x57C3 */ u8 field_0x57C3;
|
||||
/* 0x57C4 */ u8 field_0x57C4;
|
||||
/* 0x57C5 */ u8 field_0x57C5;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
#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"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytMeterKakeraKey_c {
|
||||
public:
|
||||
@@ -12,8 +14,15 @@ public:
|
||||
|
||||
bool build(d2d::ResAccIf_c *);
|
||||
bool remove();
|
||||
bool execute();
|
||||
bool draw();
|
||||
|
||||
void setPosition(s32 position);
|
||||
|
||||
void setShouldBeVisible(bool v) {
|
||||
mShouldBeVisible = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterKakeraKey_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterKakeraKey_c, On);
|
||||
@@ -21,11 +30,20 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytMeterKakeraKey_c, Active);
|
||||
STATE_FUNC_DECLARE(dLytMeterKakeraKey_c, Off);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterKakeraKey_c);
|
||||
|
||||
/* 0x000 */ UI_STATE_MGR_DECLARE(dLytMeterKakeraKey_c);
|
||||
/* 0x03C */ d2d::dLytSub mLyt;
|
||||
/* 0x0D0 */ d2d::AnmGroup_c mAnmGroups[8];
|
||||
/* 0x2D0 */ u32 field_0x2D0;
|
||||
/* 0x2D4 */ mVec3_c mVecs[2];
|
||||
/* 0x0D0 */ d2d::AnmGroup_c mAnm[8];
|
||||
/* 0x2D0 */ nw4r::lyt::Pane *mpPane;
|
||||
/* 0x2D4 */ mVec3_c mPanePositions[2];
|
||||
/* 0x2EC */ mVec3_c mPosition;
|
||||
/* 0x2F8 */ u32 mSavedKeyPieceCount;
|
||||
/* 0x2FC */ s32 mNextKeyPieceCount;
|
||||
/* 0x300 */ s32 mPosititionIndex;
|
||||
/* 0x304 */ s32 mOldPosititionIndex;
|
||||
/* 0x308 */ s32 mMovementFrame;
|
||||
/* 0x30C */ u8 mShouldBeVisible;
|
||||
};
|
||||
|
||||
class dLytMeterBossKey_c {
|
||||
@@ -33,24 +51,42 @@ public:
|
||||
dLytMeterBossKey_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterBossKey_c() {}
|
||||
|
||||
virtual void BossKey0x8() {}
|
||||
virtual void BossKey0xC() {}
|
||||
virtual d2d::LytBase_c *getLyt() {
|
||||
return &mLyt;
|
||||
}
|
||||
virtual const char *getName() const {
|
||||
return mLyt.getName();
|
||||
}
|
||||
|
||||
bool build(d2d::ResAccIf_c *);
|
||||
bool remove();
|
||||
bool execute();
|
||||
bool draw();
|
||||
|
||||
void setPosition(s32 position);
|
||||
|
||||
void setShouldBeVisible(bool v) {
|
||||
mShouldBeVisible = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterBossKey_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterBossKey_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterBossKey_c, Active);
|
||||
STATE_FUNC_DECLARE(dLytMeterBossKey_c, Off);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterBossKey_c);
|
||||
|
||||
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterBossKey_c);
|
||||
/* 0x040 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D4 */ d2d::AnmGroup_c mAnmGroups[5];
|
||||
/* 0x214 */ u32 field_0x2D0;
|
||||
/* 0x218 */ mVec3_c mVecs[4];
|
||||
/* 0x0D4 */ d2d::AnmGroup_c mAnm[5];
|
||||
/* 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 {
|
||||
@@ -58,24 +94,43 @@ public:
|
||||
dLytMeterSmallKey_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterSmallKey_c() {}
|
||||
|
||||
virtual void SmallKey0x8() {}
|
||||
virtual void SmallKey0xC() {}
|
||||
virtual d2d::LytBase_c *getLyt() {
|
||||
return &mLyt;
|
||||
}
|
||||
virtual const char *getName() const {
|
||||
return mLyt.getName();
|
||||
}
|
||||
|
||||
bool build(d2d::ResAccIf_c *);
|
||||
bool remove();
|
||||
bool execute();
|
||||
bool draw();
|
||||
|
||||
void setPosition(s32 position);
|
||||
|
||||
void setShouldBeVisible(bool v) {
|
||||
mShouldBeVisible = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterSmallKey_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterSmallKey_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterSmallKey_c, Active);
|
||||
STATE_FUNC_DECLARE(dLytMeterSmallKey_c, Off);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterSmallKey_c);
|
||||
|
||||
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterSmallKey_c);
|
||||
/* 0x040 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D4 */ d2d::AnmGroup_c mAnmGroups[5];
|
||||
/* 0x214 */ u32 field_0x2D0;
|
||||
/* 0x218 */ mVec3_c mVecs[4];
|
||||
/* 0x0D4 */ d2d::AnmGroup_c mAnm[5];
|
||||
/* 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
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_common_icon_item.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/d_window.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
#include "toBeSorted/effects_struct.h"
|
||||
|
||||
// At 0x8, [8], size 0x48
|
||||
@@ -13,16 +15,29 @@ public:
|
||||
dLytMeterMinusBtnMenuIcon_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dLytMeterMinusBtnMenuIcon_c() {}
|
||||
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anim) {
|
||||
mpAnm = anim;
|
||||
}
|
||||
|
||||
void setShouldBeSelect(u32 v) {
|
||||
mShouldBeSelect = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnMenuIcon_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnMenuIcon_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnMenuIcon_c, Select);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnMenuIcon_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterMinusBtnMenuIcon_c);
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtnMenuIcon_c);
|
||||
|
||||
u32 padding2;
|
||||
u32 padding3;
|
||||
/* 0x04 */ UI_STATE_MGR_DECLARE(dLytMeterMinusBtnMenuIcon_c);
|
||||
|
||||
/* 0x40 */ d2d::AnmGroup_c *mpAnm;
|
||||
/* 0x44 */ u32 mShouldBeSelect;
|
||||
};
|
||||
|
||||
// At 0x248, standalone
|
||||
@@ -31,16 +46,29 @@ public:
|
||||
dLytMeterMinusBtnBlink_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterMinusBtnBlink_c() {}
|
||||
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anim) {
|
||||
mpAnm = anim;
|
||||
}
|
||||
|
||||
void setShouldBeSelect(u32 v) {
|
||||
mShouldBeSelect = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnBlink_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnBlink_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnBlink_c, Select);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnBlink_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterMinusBtnBlink_c);
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtnBlink_c);
|
||||
|
||||
u32 padding;
|
||||
u32 padding2;
|
||||
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterMinusBtnBlink_c);
|
||||
|
||||
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
|
||||
/* 0x40 */ u32 mShouldBeSelect;
|
||||
};
|
||||
|
||||
// At 0x28C, [2], size 0x44
|
||||
@@ -49,16 +77,29 @@ public:
|
||||
dLytMeterMinusBtnText_c() : mStateMgr(*this, sStateID::null) {}
|
||||
~dLytMeterMinusBtnText_c() {}
|
||||
|
||||
void init();
|
||||
void execute();
|
||||
|
||||
void setAnm(d2d::AnmGroup_c *anim) {
|
||||
mpAnm = anim;
|
||||
}
|
||||
|
||||
void setShouldBeSelect(u32 v) {
|
||||
mShouldBeSelect = v;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnText_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnText_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnText_c, Select);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtnText_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterMinusBtnText_c);
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtnText_c);
|
||||
|
||||
u32 padding;
|
||||
u32 padding2;
|
||||
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterMinusBtnText_c);
|
||||
|
||||
/* 0x3C */ d2d::AnmGroup_c *mpAnm;
|
||||
/* 0x40 */ u32 mShouldBeSelect;
|
||||
};
|
||||
|
||||
class dLytMeterMinusBtn_c : public d2d::dSubPane {
|
||||
@@ -67,13 +108,44 @@ 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 ~dLytMeterMinusBtn_c() {}
|
||||
|
||||
bool demoRelated(s32 arg);
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
}
|
||||
|
||||
void setField_0x4E80(s32 value) {
|
||||
field_0x4E80 = value;
|
||||
}
|
||||
|
||||
bool fn_800F75E0() const;
|
||||
bool fn_800F7600() const;
|
||||
|
||||
private:
|
||||
bool shouldCall() const;
|
||||
void fn_800F7300();
|
||||
bool fn_800F7760() const;
|
||||
void realizeShieldDurability();
|
||||
bool isUnequippable(s32 num) const;
|
||||
void setItemText(s32 item);
|
||||
bool isNotMedalOrExtraAmmo(s32 item);
|
||||
|
||||
nw4r::lyt::Pane *getPaneByIndex(s32 idx) const {
|
||||
return mpPanes[idx];
|
||||
}
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, MenuSelectingIn);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, MenuSelecting);
|
||||
@@ -84,33 +156,41 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, DemoMove);
|
||||
STATE_FUNC_DECLARE(dLytMeterMinusBtn_c, DemoOut);
|
||||
|
||||
dLytMeterMinusBtnMenuIcon_c mIcon[8];
|
||||
dLytMeterMinusBtnBlink_c mBlink;
|
||||
dLytMeterMinusBtnText_c mText[2];
|
||||
UI_STATE_MGR_DECLARE(dLytMeterMinusBtn_c);
|
||||
STATE_MGR_DEFINE_UTIL_ISSTATE(dLytMeterMinusBtn_c);
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterMinusBtn_c);
|
||||
|
||||
/* 0x490 */ d2d::dLytSub mLyt;
|
||||
|
||||
/* 0x524 */ d2d::AnmGroup_c mAnmGroups[33];
|
||||
|
||||
// What is here?
|
||||
u8 padding2[0xE30 - 0xDA4];
|
||||
|
||||
/* 0xE34 */ dLytCommonIconItem_c mItemIcons[8];
|
||||
|
||||
d2d::SubPaneList mNodeList;
|
||||
d2d::SubPaneListNode mNodes[8];
|
||||
EffectsStruct mEffects[4];
|
||||
|
||||
s32 field_0x574C;
|
||||
s32 field_0x5750;
|
||||
s32 field_0x5754;
|
||||
s32 field_0x5758;
|
||||
s32 field_0x575C;
|
||||
s32 field_0x5760;
|
||||
s32 field_0x5764;
|
||||
s32 field_0x5768;
|
||||
/* 0x??? */ u8 padding[0x13730 - 0x136D8];
|
||||
/* 0x0008 */ dLytMeterMinusBtnMenuIcon_c mIcon[8];
|
||||
/* 0x0244 */ dLytMeterMinusBtnBlink_c mBlink;
|
||||
/* 0x028C */ dLytMeterMinusBtnText_c mText[2];
|
||||
/* 0x0314 */ UI_STATE_MGR_DECLARE(dLytMeterMinusBtn_c);
|
||||
/* 0x0350 */ d2d::dLytSub mLyt;
|
||||
/* 0x03E4 */ d2d::AnmGroup_c mAnm[33];
|
||||
/* 0x0C24 */ nw4r::lyt::Pane *mpPanes[28];
|
||||
/* 0x0C94 */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x0C98 */ dWindow_c *mpWindows[2];
|
||||
/* 0x0CA0 */ dTextBox_c *mpSizeBoxes[2];
|
||||
/* 0x0CA8 */ dTextBox_c *mpTextBoxes[2];
|
||||
/* 0x0CB0 */ dLytCommonIconItem_c mItemIcons[8];
|
||||
/* 0x4CF0 */ d2d::SubPaneList mSubpaneList;
|
||||
/* 0x4CFC */ d2d::SubPaneListNode mSubpanes[8];
|
||||
/* 0x4D7C */ EffectsStruct mEffects[4];
|
||||
/* 0x4E4C */ mAng3_c mEffectsRot[4];
|
||||
/* 0x4E64 */ s32 mSlotForEffect[4];
|
||||
/* 0x4E74 */ f32 mArrowRotation;
|
||||
/* 0x4E78 */ f32 mArrowLength;
|
||||
/* 0x4E7C */ s32 field_0x4E7C;
|
||||
/* 0x4E80 */ s32 field_0x4E80;
|
||||
/* 0x4E84 */ s32 field_0x4E84;
|
||||
/* 0x4E88 */ s32 field_0x4E88;
|
||||
/* 0x4E8C */ s32 field_0x4E8C;
|
||||
/* 0x4E90 */ s32 mDemoFrame;
|
||||
/* 0x4E94 */ s32 mSlotToDemo;
|
||||
/* 0x4E98 */ s32 field_0x4E98[8];
|
||||
/* 0x4EB8 */ u8 field_0x4EB8;
|
||||
/* 0x4EB9 */ u8 field_0x4EB9;
|
||||
/* 0x4EBA */ u8 field_0x4EBA;
|
||||
/* 0x4EBB */ u8 field_0x4EBB[8];
|
||||
/* 0x4EC3 */ u8 field_0x4EC3;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
#define D_LYT_METER_NUN_STK_H
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytMeterNunStk_c : public d2d::dSubPane {
|
||||
public:
|
||||
@@ -11,21 +11,52 @@ 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();
|
||||
}
|
||||
|
||||
nw4r::lyt::Pane *getBgPane() {
|
||||
return mpPane;
|
||||
}
|
||||
|
||||
virtual ~dLytMeterNunStk_c() {}
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
}
|
||||
|
||||
private:
|
||||
void setMessage(s32 id);
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterNunStk_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterNunStk_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterNunStk_c, Active);
|
||||
STATE_FUNC_DECLARE(dLytMeterNunStk_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterNunStk_c);
|
||||
d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[2];
|
||||
/* 0x??? */ u8 padding[0x12350 - 0x12320];
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterNunStk_c);
|
||||
|
||||
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytMeterNunStk_c);
|
||||
/* 0x044 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnm[2];
|
||||
/* 0x158 */ nw4r::lyt::Pane *mpPane;
|
||||
/* 0x15C */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x160 */ dTextBox_c *mpTextBoxes[2];
|
||||
/* 0x168 */ dWindow_c *mpWindow[1];
|
||||
/* 0x16C */ dTextBox_c *mpSizeBox[1];
|
||||
|
||||
/* 0x170 */ s32 field_0x170;
|
||||
/* 0x174 */ s32 field_0x174;
|
||||
/* 0x178 */ BOOL field_0x178;
|
||||
/* 0x17C */ s32 mDisplayedAction;
|
||||
/* 0x180 */ s32 mOnDelay;
|
||||
/* 0x184 */ bool field_0x184;
|
||||
/* 0x185 */ u8 field_0x185;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytMeterNunchakuBg_c : public d2d::dSubPane {
|
||||
public:
|
||||
@@ -11,21 +10,48 @@ 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 ~dLytMeterNunchakuBg_c() {}
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
}
|
||||
|
||||
private:
|
||||
void setMessage(s32 id);
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterNunchakuBg_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterNunchakuBg_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterNunchakuBg_c, Active);
|
||||
STATE_FUNC_DECLARE(dLytMeterNunchakuBg_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterNunchakuBg_c);
|
||||
d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[3];
|
||||
/* 0x??? */ u8 padding[0x12608 - 0x125D8];
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterNunchakuBg_c);
|
||||
|
||||
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytMeterNunchakuBg_c);
|
||||
/* 0x044 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnm[3];
|
||||
/* 0x198 */ nw4r::lyt::Pane *mpPane;
|
||||
/* 0x19C */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x1A0 */ dTextBox_c *mpTextBoxes[2];
|
||||
/* 0x1A8 */ dWindow_c *mpWindow[1];
|
||||
/* 0x1AC */ dTextBox_c *mpSizeBox[1];
|
||||
/* 0x1B0 */ s32 field_0x1B0;
|
||||
/* 0x1B4 */ s32 field_0x1B4;
|
||||
/* 0x1B8 */ BOOL field_0x1B8;
|
||||
/* 0x1BC */ s32 field_0x1BC;
|
||||
/* 0x1C0 */ s32 mOnDelay;
|
||||
/* 0x1C4 */ bool field_0x1C4;
|
||||
/* 0x1C5 */ u8 field_0x1C5;
|
||||
/* 0x1C6 */ u8 field_0x1C6;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
#ifndef D_LYT_METER_PARTS_H
|
||||
#define D_LYT_METER_PARTS_H
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
|
||||
class dLytMeter1Button_c : public d2d::dSubPane {
|
||||
public:
|
||||
dLytMeter1Button_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dLytMeter1Button_c() {}
|
||||
virtual bool build(d2d::ResAccIf_c *resAcc) override;
|
||||
virtual bool remove() override;
|
||||
virtual bool execute() 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();
|
||||
}
|
||||
|
||||
bool shouldCall() const;
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeter1Button_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeter1Button_c, ToUse);
|
||||
STATE_FUNC_DECLARE(dLytMeter1Button_c, ToUnuse);
|
||||
STATE_FUNC_DECLARE(dLytMeter1Button_c, Unuse);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeter1Button_c);
|
||||
d2d::dLytSub mLyt;
|
||||
d2d::AnmGroup_c mAnm[3];
|
||||
/* 0x198 */ dWindow_c *mpWindow[1];
|
||||
/* 0x19C */ dTextBox_c *mpSizeBox[1];
|
||||
/* 0x1A0 */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x1A4 */ s32 mUnuseDelay;
|
||||
/* 0x1A8 */ s32 mCallCount;
|
||||
/* 0x1AC */ bool mShouldCall;
|
||||
/* 0x1AD */ bool mHasInitedCall;
|
||||
};
|
||||
|
||||
class dLytMeter2Button_c : public d2d::dSubPane {
|
||||
public:
|
||||
dLytMeter2Button_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dLytMeter2Button_c() {}
|
||||
virtual bool build(d2d::ResAccIf_c *resAcc) override;
|
||||
virtual bool remove() override;
|
||||
virtual bool execute() 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();
|
||||
}
|
||||
|
||||
bool shouldCall() const;
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeter2Button_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeter2Button_c, ToUse);
|
||||
STATE_FUNC_DECLARE(dLytMeter2Button_c, ToUnuse);
|
||||
STATE_FUNC_DECLARE(dLytMeter2Button_c, Unuse);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeter2Button_c);
|
||||
d2d::dLytSub mLyt;
|
||||
d2d::AnmGroup_c mAnm[3];
|
||||
/* 0x198 */ dWindow_c *mpWindow[1];
|
||||
/* 0x19C */ dTextBox_c *mpSizeBox[1];
|
||||
/* 0x1A0 */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x1A4 */ s32 mUnuseDelay;
|
||||
/* 0x1A8 */ s32 mCallCount;
|
||||
/* 0x1AC */ bool mShouldCall;
|
||||
/* 0x1AD */ bool mHasInitedCall;
|
||||
};
|
||||
|
||||
class dLytMeterParts_c {
|
||||
public:
|
||||
dLytMeterParts_c() : mStateMgr(*this, sStateID::null) {}
|
||||
|
||||
void build(s32 index);
|
||||
void execute();
|
||||
|
||||
void setAnmGroups(d2d::AnmGroup_c *inAnm, d2d::AnmGroup_c *outAnm) {
|
||||
mpAnmIn = inAnm;
|
||||
mpAnmOut = outAnm;
|
||||
}
|
||||
|
||||
void setShouldBeVisible(bool val) {
|
||||
mShouldBeVisible = val;
|
||||
}
|
||||
|
||||
private:
|
||||
STATE_FUNC_DECLARE(dLytMeterParts_c, Invisible);
|
||||
STATE_FUNC_DECLARE(dLytMeterParts_c, In);
|
||||
STATE_FUNC_DECLARE(dLytMeterParts_c, Visible);
|
||||
STATE_FUNC_DECLARE(dLytMeterParts_c, Out);
|
||||
|
||||
/* 0x00 */ UI_STATE_MGR_DECLARE(dLytMeterParts_c);
|
||||
/* 0x3C */ d2d::AnmGroup_c *mpAnmIn;
|
||||
/* 0x40 */ d2d::AnmGroup_c *mpAnmOut;
|
||||
/* 0x44 */ s32 mIndex;
|
||||
/* 0x48 */ bool mShouldBeVisible;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -2,8 +2,9 @@
|
||||
#define D_LYT_METER_PLUS_BTN_H
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytMeterPlusBtn_c : public d2d::dSubPane {
|
||||
public:
|
||||
@@ -11,21 +12,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 ~dLytMeterPlusBtn_c() {}
|
||||
|
||||
bool isCalling() const;
|
||||
void setCall(bool shouldCall);
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
}
|
||||
|
||||
bool getField_0x1C0() const {
|
||||
return field_0x1C0;
|
||||
}
|
||||
|
||||
private:
|
||||
void setMessage(s32 id);
|
||||
bool isMapOpen() const;
|
||||
static bool hasSpecificMapMark();
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterPlusBtn_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterPlusBtn_c, ToUse);
|
||||
STATE_FUNC_DECLARE(dLytMeterPlusBtn_c, ToUnuse);
|
||||
STATE_FUNC_DECLARE(dLytMeterPlusBtn_c, Unuse);
|
||||
|
||||
/* 0x004 */ UI_STATE_MGR_DECLARE(dLytMeterPlusBtn_c);
|
||||
/* 0x040 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[3];
|
||||
/* 0x??? */ u8 padding[0x7A64 - 0x7A38];
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterPlusBtn_c);
|
||||
|
||||
/* 0x00C */ UI_STATE_MGR_DECLARE(dLytMeterPlusBtn_c);
|
||||
/* 0x044 */ d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnm[3];
|
||||
/* 0x198 */ nw4r::lyt::Pane *mpPane[1];
|
||||
/* 0x19C */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x1A0 */ dTextBox_c *mpTextBoxes[2];
|
||||
/* 0x1A8 */ dWindow_c *mpWindow[1];
|
||||
/* 0x1AC */ dTextBox_c *mpSizeBox[1];
|
||||
/* 0x1B0 */ s32 field_0x1B0;
|
||||
/* 0x1B4 */ s32 field_0x1B4;
|
||||
/* 0x1B8 */ s32 mCallCount;
|
||||
/* 0x1BC */ s32 field_0x1BC;
|
||||
/* 0x1C0 */ bool field_0x1C0;
|
||||
/* 0x1C1 */ bool field_0x1C1;
|
||||
/* 0x1C2 */ bool mShouldCall;
|
||||
/* 0x1C3 */ bool field_0x1C3;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytMeterRemoconBg_c : public d2d::dSubPane {
|
||||
public:
|
||||
@@ -11,9 +10,15 @@ 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 ~dLytMeterRemoconBg_c() {}
|
||||
|
||||
@@ -23,9 +28,11 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytMeterRemoconBg_c, Active);
|
||||
STATE_FUNC_DECLARE(dLytMeterRemoconBg_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterRemoconBg_c);
|
||||
d2d::dLytSub mLyt;
|
||||
/* 0xD8 */ nw4r::lyt::Pane *mpPane;
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterRemoconBg_c);
|
||||
|
||||
/* 0x08 */ UI_STATE_MGR_DECLARE(dLytMeterRemoconBg_c);
|
||||
/* 0x44 */ d2d::dLytSub mLyt;
|
||||
/* 0xD8 */ nw4r::lyt::Pane *mpPane[1];
|
||||
/* 0xDC */ u32 field_0xDC;
|
||||
/* 0xE0 */ u32 field_0xE0;
|
||||
/* 0xE4 */ u32 field_0xE4;
|
||||
|
||||
@@ -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,81 @@ 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();
|
||||
|
||||
void setField_0x8A9(u8 val) {
|
||||
field_0x8A9 = val;
|
||||
}
|
||||
|
||||
u8 getField_0x8A9() const {
|
||||
return field_0x8A9;
|
||||
}
|
||||
|
||||
void setField_0x8AA(u8 val) {
|
||||
field_0x8AA = val;
|
||||
}
|
||||
|
||||
u8 getField_0x8AC() const {
|
||||
return field_0x8AC;
|
||||
}
|
||||
|
||||
void setField_0x8AC(u8 val) {
|
||||
field_0x8AC = val;
|
||||
}
|
||||
|
||||
void setSize(u8 size) {
|
||||
mSize = size;
|
||||
}
|
||||
|
||||
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 mPrevDigits[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
|
||||
|
||||
@@ -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,75 @@ 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;
|
||||
}
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
}
|
||||
|
||||
f32 getGaugePercentMaybe() const {
|
||||
return field_0x2E0;
|
||||
}
|
||||
|
||||
void setfield_0x318(s32 v) {
|
||||
field_0x318 = v;
|
||||
}
|
||||
|
||||
u8 getField_0x31D() const {
|
||||
return field_0x31D;
|
||||
}
|
||||
|
||||
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];
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterShieldGauge_c);
|
||||
|
||||
/* 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
|
||||
|
||||
@@ -1,69 +1,274 @@
|
||||
#ifndef D_LYT_METER_TIMER_H
|
||||
#define D_LYT_METER_TIMER_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_item.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "m/m_color.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
|
||||
class LytMeterTimerPart1_c : public d2d::dSubPane {
|
||||
public:
|
||||
LytMeterTimerPart1_c() {
|
||||
LytMeterTimerPart1_c()
|
||||
: mActualTearCount(0), mDisplayedTearCount(0), field_0x760(0), mTrial(dAcItem_c::TRIAL_NONE), field_0x780(0) {
|
||||
sInstance = this;
|
||||
}
|
||||
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 ~LytMeterTimerPart1_c() {
|
||||
sInstance = nullptr;
|
||||
}
|
||||
|
||||
static LytMeterTimerPart1_c *sInstance;
|
||||
static LytMeterTimerPart1_c *GetInstance() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
void init();
|
||||
void startInAnim();
|
||||
void realizeTrial();
|
||||
|
||||
void startOutAnim();
|
||||
void stopInAnim();
|
||||
void stopFinishedFruit();
|
||||
void stopOutAnim();
|
||||
bool isInAnimFinished();
|
||||
bool isCurrentFruitAnimFinished();
|
||||
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 initOutAnim();
|
||||
void initColors();
|
||||
void initInAnim();
|
||||
void startNextFruitAnim();
|
||||
void disableCurrentFruitAnim();
|
||||
|
||||
static LytMeterTimerPart1_c *sInstance;
|
||||
|
||||
/* 0x008 */ d2d::dLytSub mLyt;
|
||||
/* 0x09C */ d2d::AnmGroup_c mAnmGroups[26];
|
||||
/* 0x71C */ u8 field_0x71C[0x768 - 0x71C];
|
||||
/* 0x09C */ d2d::AnmGroup_c mAnm[26];
|
||||
/* 0x71C */ s32 mActualTearCount;
|
||||
/* 0x720 */ s32 mDisplayedTearCount;
|
||||
/* 0x724 */ nw4r::lyt::Pane *mpPanes[15];
|
||||
/* 0x760 */ s32 field_0x760;
|
||||
/* 0x764 */ dAcItem_c::Trial_e mTrial;
|
||||
/* 0x768 */ mColor mColors1[3];
|
||||
/* 0x774 */ mColor mColors2[3];
|
||||
/* 0x780 */ s32 field_0x780;
|
||||
};
|
||||
|
||||
class LytMeterTimerPart2_c : public d2d::dSubPane {
|
||||
public:
|
||||
LytMeterTimerPart2_c() {
|
||||
LytMeterTimerPart2_c(): mNumPetals(0), mTrial(dAcItem_c::TRIAL_NONE), mVisible(true), mFlowerLoopFrame(0.0f) {
|
||||
sInstance = this;
|
||||
}
|
||||
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 ~LytMeterTimerPart2_c() {
|
||||
sInstance = nullptr;
|
||||
}
|
||||
|
||||
static LytMeterTimerPart2_c *sInstance;
|
||||
static LytMeterTimerPart2_c *GetInstance() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
void setNumPetals(s32 num) {
|
||||
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();
|
||||
void realizePetalsOnOff();
|
||||
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();
|
||||
|
||||
void enableBloomAnim();
|
||||
void enableBeforeFallAnim();
|
||||
void enableChangeSirenAnim();
|
||||
void enableSirenLoopAnim();
|
||||
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 initSirenLoopAnim();
|
||||
void initSirenSafeAnim();
|
||||
void initFlowerLoopAnim();
|
||||
void initOutAnim();
|
||||
void initInAnim();
|
||||
void initChangeFruitAnim();
|
||||
void initColors();
|
||||
|
||||
static LytMeterTimerPart2_c *sInstance;
|
||||
|
||||
/* 0x008 */ d2d::dLytSub mLyt;
|
||||
/* 0x09C */ d2d::AnmGroup_c mAnmGroups[30];
|
||||
/* 0x81C */ u8 field_0x81C[0x828 - 0x81C];
|
||||
/* 0x09C */ d2d::AnmGroup_c mAnm[30];
|
||||
/* 0x81C */ s32 mNumPetals;
|
||||
/* 0x820 */ nw4r::lyt::Pane *mpPane;
|
||||
/* 0x824 */ dAcItem_c::Trial_e mTrial;
|
||||
/* 0x828 */ mColor mColors1[2];
|
||||
/* 0x830 */ mColor mColors2[2];
|
||||
/* 0x838 */ u8 mVisible;
|
||||
/* 0x83C */ f32 mFlowerLoopFrame;
|
||||
};
|
||||
|
||||
class dLytMeterTimer_c {
|
||||
public:
|
||||
dLytMeterTimer_c() : mStateMgr(*this, sStateID::null) {}
|
||||
dLytMeterTimer_c()
|
||||
: mStateMgr(*this, sStateID::null),
|
||||
mpPart1(nullptr),
|
||||
mpPart2(nullptr),
|
||||
field_0x48(0),
|
||||
field_0x49(0),
|
||||
mActualTime(0),
|
||||
mLastTime(0),
|
||||
field_0x54(0),
|
||||
field_0x55(0),
|
||||
field_0x56(8),
|
||||
field_0x57(8),
|
||||
field_0x58(0),
|
||||
field_0x59(0),
|
||||
field_0x5C(0),
|
||||
field_0x60(0) {}
|
||||
virtual ~dLytMeterTimer_c() {}
|
||||
bool build();
|
||||
bool remove();
|
||||
bool execute();
|
||||
bool startIn2();
|
||||
bool startOut2();
|
||||
|
||||
bool getField_0x54() const {
|
||||
return field_0x54;
|
||||
}
|
||||
|
||||
private:
|
||||
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);
|
||||
@@ -72,7 +277,28 @@ private:
|
||||
STATE_FUNC_DECLARE(dLytMeterTimer_c, ChangeFruits);
|
||||
STATE_FUNC_DECLARE(dLytMeterTimer_c, Fruits);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterTimer_c);
|
||||
static bool sDoExit;
|
||||
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 field_0x48;
|
||||
/* 0x49 */ u8 field_0x49;
|
||||
/* 0x4C */ s32 mActualTime;
|
||||
/* 0x50 */ s32 mLastTime;
|
||||
/* 0x54 */ bool 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;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
#ifndef D_LYT_METER_Z_BTN_H
|
||||
#define D_LYT_METER_Z_BTN_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/d_window.h"
|
||||
#include "nw4r/lyt/lyt_pane.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
|
||||
class dLytMeterZBtn_c : public d2d::dSubPane {
|
||||
public:
|
||||
@@ -11,21 +14,50 @@ 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 ~dLytMeterZBtn_c() {}
|
||||
|
||||
bool isCalling() const;
|
||||
|
||||
void setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
}
|
||||
|
||||
private:
|
||||
void setMessage(s32 id);
|
||||
|
||||
STATE_FUNC_DECLARE(dLytMeterZBtn_c, Wait);
|
||||
STATE_FUNC_DECLARE(dLytMeterZBtn_c, On);
|
||||
STATE_FUNC_DECLARE(dLytMeterZBtn_c, Active);
|
||||
STATE_FUNC_DECLARE(dLytMeterZBtn_c, Off);
|
||||
|
||||
UI_STATE_MGR_DECLARE(dLytMeterZBtn_c);
|
||||
d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnmGroups[3];
|
||||
/* 0x??? */ u8 padding[0x121C8 - 0x12198];
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dLytMeterZBtn_c);
|
||||
|
||||
/* 0x008 */ UI_STATE_MGR_DECLARE(dLytMeterZBtn_c);
|
||||
/* 0x04C */ d2d::dLytSub mLyt;
|
||||
/* 0x0D8 */ d2d::AnmGroup_c mAnm[3];
|
||||
/* 0x198 */ nw4r::lyt::Pane *mpPane;
|
||||
/* 0x19C */ nw4r::lyt::Pane *mpOwnerPane;
|
||||
/* 0x1A0 */ dTextBox_c *mpTextBoxes[2];
|
||||
/* 0x1A8 */ dWindow_c *mpWindow[1];
|
||||
/* 0x1AC */ dTextBox_c *mpSizeBox[1];
|
||||
/* 0x1B0 */ s32 field_0x1B0;
|
||||
/* 0x1B4 */ s32 field_0x1B4;
|
||||
/* 0x1B8 */ BOOL field_0x1B8;
|
||||
/* 0x1BC */ s32 field_0x1BC;
|
||||
/* 0x1C0 */ s32 mOnDelay;
|
||||
/* 0x1C4 */ bool field_0x1C4;
|
||||
/* 0x1C5 */ u8 field_0x1C5;
|
||||
/* 0x1C6 */ u8 field_0x1C6;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -50,6 +50,14 @@ public:
|
||||
|
||||
const char *fn_80117390(bool) const;
|
||||
|
||||
// This function appears to be related to a compiler quirk.
|
||||
// 0x800D7B40 is in d_lyt_meter, but calling a static method
|
||||
// on an instance via dLytMsgWindow_c::getInstance()->fn_800D7B40()
|
||||
// causes the method to be emitted there.
|
||||
static u16 fn_800D7B40() {
|
||||
return sInstance->mEntryPointToTrigger;
|
||||
}
|
||||
|
||||
private:
|
||||
bool setTextToDisplay(const wchar_t *text);
|
||||
void createSubMsgManager(u8 type);
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef D_LYT_SIMPLE_WINDOW_H
|
||||
#define D_LYT_SIMPLE_WINDOW_H
|
||||
|
||||
class dLytSimpleWindow_c {
|
||||
public:
|
||||
dLytSimpleWindow_c() {}
|
||||
virtual ~dLytSimpleWindow_c() {}
|
||||
|
||||
static dLytSimpleWindow_c *getInstance() {
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
bool fn_8012B000();
|
||||
|
||||
private:
|
||||
static dLytSimpleWindow_c *sInstance;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,14 +1,27 @@
|
||||
#ifndef D_T_MAP_MARK_H
|
||||
#define D_T_MAP_MARK_H
|
||||
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/t/d_tg.h"
|
||||
|
||||
class dTgMapMark_c : public dAcBase_c {
|
||||
class dTgMapMark_c : public dTg_c {
|
||||
public:
|
||||
dTgMapMark_c() {}
|
||||
virtual ~dTgMapMark_c() {}
|
||||
|
||||
private:
|
||||
/* 0x0FC */ u16 mTriggerStoryFlag;
|
||||
/* 0x0FE */ u16 rotz_shift8_0xff;
|
||||
/* 0x100 */ u8 shift4_0x8;
|
||||
/* 0x101 */ u8 shift23_0x8;
|
||||
/* 0x102 */ u8 shift0_0x3;
|
||||
/* 0x103 */ u8 shift2_0x3;
|
||||
/* 0x104 */ u8 shift4_0x3f;
|
||||
/* 0x105 */ u8 rotz_shift0_0xff;
|
||||
/* 0x108 */ s32 rotz_shift0_0xf;
|
||||
/* 0x10C */ bool field_0x10C;
|
||||
/* 0x10D */ bool field_0x10D;
|
||||
/* 0x10E */ bool field_0x10E;
|
||||
/* 0x10F */ u8 rotz_shift10_0x3;
|
||||
/* 0x110 */ u8 rotz_shift12_0x3;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "d/t/d_tg.h"
|
||||
#include "toBeSorted/timekeeper.h"
|
||||
|
||||
class dTgSiren_c : public dTg_c {
|
||||
public:
|
||||
@@ -16,10 +17,20 @@ public:
|
||||
return sInstance->outOfTime();
|
||||
}
|
||||
|
||||
static s32 getTime() {
|
||||
if (sInstance == nullptr) {
|
||||
return -1;
|
||||
}
|
||||
return sInstance->mTimekeeper.getTime();
|
||||
}
|
||||
|
||||
private:
|
||||
bool outOfTime() const;
|
||||
|
||||
static dTgSiren_c *sInstance;
|
||||
|
||||
/* 0x0FC */ u8 _0x0FC[0x2C0 - 0x0FC];
|
||||
/* 0x2C0 */ Timekeeper mTimekeeper;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -114,7 +114,15 @@ public:
|
||||
return mEndFrame;
|
||||
}
|
||||
|
||||
// There's at least 1 file where the obvious way of writing
|
||||
// it seems to require accessing some members directly, without
|
||||
// inlines. I want to discourage direct access though, so
|
||||
// putting the ability behind an explicit define. We don't
|
||||
// know either way whether inlines are used at all or
|
||||
// whether stuff even is private.
|
||||
#ifndef NEED_DIRECT_FRAMECTRL_ACCESS
|
||||
private:
|
||||
#endif
|
||||
inline bool notLooping() const {
|
||||
return (mFlags & FLAG_NO_LOOP) != 0;
|
||||
}
|
||||
|
||||
@@ -140,6 +140,10 @@ public:
|
||||
z = fz;
|
||||
}
|
||||
|
||||
void setR(const s32 &f) {
|
||||
x = y = z = f;
|
||||
}
|
||||
|
||||
mAng x, y, z;
|
||||
|
||||
static mAng3_c Zero;
|
||||
|
||||
@@ -262,6 +262,10 @@ public:
|
||||
mVec2_c(const mVec2_c &other) {
|
||||
set(other.x, other.y);
|
||||
}
|
||||
|
||||
mVec2_c(f32 fx, f32 fy) {
|
||||
set(fx, fy);
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -71,6 +71,10 @@ public:
|
||||
mTranslate = value;
|
||||
}
|
||||
|
||||
void SetRotate(const nw4r::math::VEC3 &value) {
|
||||
mRotate = value;
|
||||
}
|
||||
|
||||
const math::MTX34 &GetGlobalMtx() const {
|
||||
return mGlbMtx;
|
||||
}
|
||||
|
||||
+11
-1
@@ -2,8 +2,8 @@
|
||||
#define S_STATE_H
|
||||
|
||||
#include "s/s_FStateMgr.hpp"
|
||||
#include "s/s_StateMethodUsr_FI.hpp"
|
||||
#include "s/s_FStateVirtualID.hpp"
|
||||
#include "s/s_StateMethodUsr_FI.hpp"
|
||||
|
||||
// Note: Ported from https://github.com/NSMBW-Community/NSMBW-Decomp/tree/master/include/dol/sLib
|
||||
// See include/s/README.txt for changes made
|
||||
@@ -34,6 +34,16 @@
|
||||
|
||||
#define STATE_MGR(class_name) sFStateMgr_c<class_name, sStateMethodUsr_FI_c>
|
||||
|
||||
#define STATE_MGR_DEFINE_UTIL_CHANGESTATE(class_name) \
|
||||
void changeState(const sStateIDIf_c &value) { \
|
||||
mStateMgr.changeState(value); \
|
||||
}
|
||||
|
||||
#define STATE_MGR_DEFINE_UTIL_ISSTATE(class_name) \
|
||||
bool isState(const sFStateID_c<class_name> &value) const { \
|
||||
return *mStateMgr.getStateID() == value; \
|
||||
}
|
||||
|
||||
// TODO this is probably not the whole solution.
|
||||
// The problems with this approach are:
|
||||
// * You can't define the same state name for multiple files in the same TU due to baseID_ symbol clash.
|
||||
|
||||
@@ -213,12 +213,13 @@ public:
|
||||
void addReadTarget(dAcObjBase_c &actor, u32 flags, f32 field_0x14, f32 ignored, f32 field_0x20, f32 field_0x24);
|
||||
void addReadTarget2(dAcObjBase_c &actor, u32 flags, f32 field_0x14, f32 field_0x20, f32 field_0x24);
|
||||
|
||||
bool checkLink2() const;
|
||||
|
||||
private:
|
||||
bool isInNormalGameState() const;
|
||||
bool checkZButtonPressed() const;
|
||||
bool checkZButtonHeld() const;
|
||||
bool checkLink1() const;
|
||||
bool checkLink2() const;
|
||||
bool switchTarget(s32 target);
|
||||
bool playTargetAnim(s32 target);
|
||||
|
||||
|
||||
@@ -8,9 +8,9 @@ public:
|
||||
GoddessChestCounter() : Counter(0x43F) {}
|
||||
virtual ~GoddessChestCounter() {};
|
||||
|
||||
virtual u16 getCommittedValue() override;
|
||||
virtual u16 getMax() override;
|
||||
virtual u16 getUncommittedValue() override;
|
||||
virtual u16 getCommittedValue() const override;
|
||||
virtual u16 getMax() const override;
|
||||
virtual u16 getUncommittedValue() const override;
|
||||
virtual void setValue(u16 num) override;
|
||||
|
||||
static GoddessChestCounter sInstance;
|
||||
|
||||
@@ -65,8 +65,8 @@ public:
|
||||
static void init();
|
||||
static void execute();
|
||||
|
||||
static u8 getTopDowsingIcon();
|
||||
static u8 getLeftDowsingIcon();
|
||||
static s32 getTopDowsingIcon();
|
||||
static s32 getLeftDowsingIcon();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -24,12 +24,19 @@ public:
|
||||
|
||||
void remove(bool);
|
||||
void fn_80027320(u8);
|
||||
void fn_800271E0(mVec3_c *pos, mAng3_c *rot, mVec3_c *scale);
|
||||
void fn_80029920(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *);
|
||||
void fn_80029980(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *);
|
||||
void fn_800299F0(u16 effect, mMtx_c *mtx, void *, void *);
|
||||
void fn_80029A10(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *);
|
||||
void fn_80029A70(u16 effect, mVec3_c *pos, mAng3_c *rot, mVec3_c *scale, void *, void *);
|
||||
void setMtx(const mMtx_c &);
|
||||
|
||||
static void fn_800298C0(u16 effect, mVec3_c *pos, void*, void*, void*, void*);
|
||||
|
||||
void fn_80026ED0();
|
||||
void fn_80026F10();
|
||||
|
||||
bool checkField0x00() const {
|
||||
return field_0x00 != 0;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ public:
|
||||
static void changeOwnEvent(dAcBase_c *actor1, dAcBase_c *actor2, Event *event, UNKWORD);
|
||||
static bool alsoSetAsCurrentEvent(dAcBase_c *actor, Event *event, void *unknown);
|
||||
static dAcObjBase_c *fn_800A08F0(fBase_c::GROUP_TYPE_e);
|
||||
static bool canSkipCurrentEvent();
|
||||
|
||||
static EventManager *sInstance;
|
||||
|
||||
@@ -40,6 +41,8 @@ public:
|
||||
return strequals(getCurrentEventName(), name);
|
||||
}
|
||||
|
||||
static bool eventRelatedStateFlags_shift0x11_1();
|
||||
|
||||
// Something like isActorInEvent maybe?
|
||||
static bool FUN_800a0570(dAcBase_c *actor);
|
||||
static bool FUN_800a0ba0();
|
||||
|
||||
@@ -149,17 +149,17 @@ public:
|
||||
/* 8000B6A0 */ u8 getShieldPouchSlot();
|
||||
|
||||
/* 8000B6F0 */ void setAirPotionTimer(u16 time);
|
||||
/* 8000B720 */ u16 getAirPotionTimer();
|
||||
/* 8000B720 */ u16 getAirPotionTimer() const;
|
||||
/* 8000B770 */ void setAirPotionPlusTimer(u16 time);
|
||||
/* 8000B7A0 */ u16 getAirPotionPlusTimer();
|
||||
/* 8000B7A0 */ u16 getAirPotionPlusTimer() const;
|
||||
/* 8000B7F0 */ void setStaminaPotionTimer(u16 time);
|
||||
/* 8000B820 */ u16 getStaminaPotionTimer();
|
||||
/* 8000B820 */ u16 getStaminaPotionTimer() const;
|
||||
/* 8000B870 */ void setStaminaPotionPlusTimer(u16 time);
|
||||
/* 8000B8A0 */ u16 getStaminaPotionPlusTimer();
|
||||
/* 8000B8A0 */ u16 getStaminaPotionPlusTimer() const;
|
||||
/* 8000B8F0 */ void setGuardianPotionTimer(u16 time);
|
||||
/* 8000B920 */ u16 getGuardianPotionTimer();
|
||||
/* 8000B920 */ u16 getGuardianPotionTimer() const;
|
||||
/* 8000B970 */ void setGuardianPotionPlusTimer(u16 time);
|
||||
/* 8000B9A0 */ u16 getGuardianPotionPlusTimer();
|
||||
/* 8000B9A0 */ u16 getGuardianPotionPlusTimer() const;
|
||||
|
||||
/* 8000B9F0 */ void setDowsingSlotIdx(u8 idx);
|
||||
/* 8000BA20 */ u8 getDowsingSlotIdx();
|
||||
@@ -285,6 +285,30 @@ public:
|
||||
return sInstance;
|
||||
}
|
||||
|
||||
bool hasGuardianPotionPlus() const {
|
||||
return getGuardianPotionPlusTimer() != 0;
|
||||
}
|
||||
|
||||
bool hasGuardianPotionNormal() const {
|
||||
return getGuardianPotionTimer() != 0;
|
||||
}
|
||||
|
||||
bool hasAirPotionPlus() const {
|
||||
return getAirPotionPlusTimer() != 0;
|
||||
}
|
||||
|
||||
bool hasAirPotionNormal() const {
|
||||
return getAirPotionTimer() != 0;
|
||||
}
|
||||
|
||||
bool hasStaminaPotionPlus() const {
|
||||
return getStaminaPotionPlusTimer() != 0;
|
||||
}
|
||||
|
||||
bool hasStaminaPotionNormal() const {
|
||||
return getStaminaPotionTimer() != 0;
|
||||
}
|
||||
|
||||
private:
|
||||
static FileManager *sInstance;
|
||||
};
|
||||
|
||||
@@ -19,6 +19,7 @@ public:
|
||||
HARP_PLAYING,
|
||||
};
|
||||
static bool isInMinigameState(Minigame game);
|
||||
static bool isInAnyMinigame();
|
||||
|
||||
static void create();
|
||||
static void destroy();
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
#ifndef TIMEKEEPER_H
|
||||
#define TIMEKEEPER_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
class Timekeeper {
|
||||
public:
|
||||
s32 getTime() const;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -171,8 +171,8 @@ int dAcODungeonShip_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_682_;
|
||||
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_683_;
|
||||
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_682_;
|
||||
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_683_;
|
||||
|
||||
int dAcODungeonShip_c::actorExecute() {
|
||||
field_0x850++;
|
||||
|
||||
@@ -126,7 +126,7 @@ void dAcOTowerGearD101_c::initTransform() {
|
||||
mMdl.setLocalMtx(field_0x3C4);
|
||||
}
|
||||
|
||||
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_585_;
|
||||
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_585_;
|
||||
void dAcOTowerGearD101_c::playVisualEffect() {
|
||||
mEffects.fn_80029A10(PARTICLE_RESOURCE_ID_MAPPING_585_, &field_0x3F4, &rotation, nullptr, nullptr, nullptr);
|
||||
}
|
||||
|
||||
@@ -593,7 +593,7 @@ void dAcOTowerHandD101_c::executeState_RemainOpen() {
|
||||
}
|
||||
void dAcOTowerHandD101_c::finalizeState_RemainOpen() {}
|
||||
|
||||
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_573;
|
||||
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_573;
|
||||
void dAcOTowerHandD101_c::initializeState_Close() {
|
||||
mMdl.getAnm().setPlayState(m3d::PLAY_MODE_1);
|
||||
mMdl.setRate(getCloseRate());
|
||||
|
||||
@@ -449,7 +449,7 @@ void dAcOtubo_c::finalizeState_Rebirth() {
|
||||
extern "C" void fn_80027510(void *, bool);
|
||||
extern "C" void fn_80027560(void *, bool, int);
|
||||
extern "C" void *fn_800298B0(u16, mVec3_c *, mVec3_c *, u32, u32, u32, u32, u32);
|
||||
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_109_, PARTICLE_RESOURCE_ID_MAPPING_209_;
|
||||
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_109_, PARTICLE_RESOURCE_ID_MAPPING_209_;
|
||||
extern "C" void *ENVIRONMENT;
|
||||
extern "C" void fn_80022BE0(void *, const mVec3_c &);
|
||||
|
||||
|
||||
@@ -259,7 +259,7 @@ bool dAcOTumbleWeed_c::checkInvalidGround() const {
|
||||
code == POLY_ATTR_SAND_DEEP_SLOW;
|
||||
}
|
||||
|
||||
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_743_;
|
||||
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_743_;
|
||||
extern "C" void fn_800298B0(u16, mVec3_c *, mAng3_c *, u32, u32, u32, u32, u32);
|
||||
|
||||
void dAcOTumbleWeed_c::doBreak() {
|
||||
|
||||
@@ -1933,8 +1933,8 @@ void dAcTbox_c::executeState_LoadArchive() {
|
||||
void dAcTbox_c::finalizeState_LoadArchive() {}
|
||||
|
||||
extern "C" void fn_800298B0(u16 effectIndex, mVec3_c *, mAng3_c *, mVec3_c *, void *, void *, void *, void *);
|
||||
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_209_;
|
||||
extern "C" bool isPouchItem(u16);
|
||||
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_209_;
|
||||
extern "C" const bool isPouchItem(u16);
|
||||
extern "C" u8 adventurePouchFindItemSlot(ITEM_ID item);
|
||||
extern "C" u16 findItemInItemCheck(ITEM_ID item);
|
||||
extern "C" dAcItem_c *giveItem3(u16 item, s32);
|
||||
|
||||
@@ -60,7 +60,7 @@ int dAcOwaterSpout_c::draw() {
|
||||
}
|
||||
|
||||
extern "C" void fn_800298B0(u16, mVec3_c *, mVec3_c *, mVec3_c *, u32, u32, u32, u32);
|
||||
extern "C" u16 PARTICLE_RESOURCE_ID_MAPPING_213_;
|
||||
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_213_;
|
||||
|
||||
void dAcOwaterSpout_c::initializeState_Wait() {
|
||||
if (params == 1) {
|
||||
|
||||
@@ -138,7 +138,7 @@ u16 SceneflagManager::checkFlag(u16 roomId, u16 flag) {
|
||||
return checkTempOrSceneflag(flag);
|
||||
}
|
||||
}
|
||||
bool SceneflagManager::checkSceneflagGlobal(u16 sceneIdx, u16 flag) {
|
||||
u16 SceneflagManager::checkSceneflagGlobal(u16 sceneIdx, u16 flag) {
|
||||
u16 *pData = FileManager::GetInstance()->getSceneFlagsConst();
|
||||
return mFlagHelper.checkFlag(getSceneflagSlotGlobal(sceneIdx, flag), flag % 16, pData, 0x800);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
#include "d/lyt/d_lyt_area_caption.h"
|
||||
|
||||
#include "d/d_message.h"
|
||||
#include "d/d_pad.h"
|
||||
#include "d/d_sc_game.h"
|
||||
#include "d/d_stage_mgr.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/meter/d_lyt_meter.h"
|
||||
#include "toBeSorted/arc_managers/layout_arc_manager.h"
|
||||
|
||||
#include "toBeSorted/event_manager.h"
|
||||
|
||||
STATE_DEFINE(dLytAreaCaptionParts_c, Wait);
|
||||
STATE_DEFINE(dLytAreaCaptionParts_c, Start);
|
||||
@@ -22,6 +27,13 @@ static const d2d::LytBrlanMapping brlanMap2[] = {
|
||||
{ "areaCaption_01_out.brlan", "G_inOut_00"},
|
||||
};
|
||||
|
||||
#define AREA_CAPTION_ANIM_START 0
|
||||
#define AREA_CAPTION_ANIM_TYPE 1
|
||||
#define AREA_CAPTION_ANIM_TEXTLINE 2
|
||||
#define AREA_CAPTION_ANIM_OUT 3
|
||||
|
||||
#define AREA_CAPTION_NUM_ANIMS 4
|
||||
|
||||
static const char *captionBoxes[] = {
|
||||
"T_caption_00",
|
||||
"T_captionS_00",
|
||||
@@ -38,7 +50,7 @@ bool dLytAreaCaptionParts_c::init(int first) {
|
||||
mFirst = first;
|
||||
if (mFirst != 0) {
|
||||
mLyt.build("areaCaption_00.brlyt", nullptr);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
for (int i = 0; i < AREA_CAPTION_NUM_ANIMS; i++) {
|
||||
if (brlanMap1[i].mFile[0] == '\0') {
|
||||
mAnmCtrlInUse[i] = false;
|
||||
} else {
|
||||
@@ -51,7 +63,7 @@ bool dLytAreaCaptionParts_c::init(int first) {
|
||||
} else {
|
||||
mLyt.build("areaCaption_01.brlyt", nullptr);
|
||||
mLyt.setPriority(0x8A);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
for (int i = 0; i < AREA_CAPTION_NUM_ANIMS; i++) {
|
||||
if (brlanMap2[i].mFile[0] == '\0') {
|
||||
mAnmCtrlInUse[i] = false;
|
||||
} else {
|
||||
@@ -67,15 +79,15 @@ bool dLytAreaCaptionParts_c::init(int first) {
|
||||
mTextBoxes[i] = mLyt.getTextBox(captionBoxes[i]);
|
||||
}
|
||||
|
||||
field_0x54C = 0;
|
||||
field_0x54D = 0;
|
||||
field_0x54C = false;
|
||||
field_0x54D = false;
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
mLyt.calc();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytAreaCaptionParts_c::remove() {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
for (int i = 0; i < AREA_CAPTION_NUM_ANIMS; i++) {
|
||||
if (mAnmCtrlInUse[i]) {
|
||||
mAnmGroups[i].unbind();
|
||||
mAnmGroups[i].remove();
|
||||
@@ -88,7 +100,7 @@ bool dLytAreaCaptionParts_c::remove() {
|
||||
bool dLytAreaCaptionParts_c::update() {
|
||||
mStateMgr.executeState();
|
||||
if (*mStateMgr.getStateID() != StateID_Wait) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
for (int i = 0; i < AREA_CAPTION_NUM_ANIMS; i++) {
|
||||
if (mAnmCtrlInUse[i] && mAnmGroups[i].isEnabled()) {
|
||||
mAnmGroups[i].play();
|
||||
}
|
||||
@@ -105,33 +117,168 @@ bool dLytAreaCaptionParts_c::draw() {
|
||||
|
||||
void dLytAreaCaptionParts_c::setTextIfWaiting(const char *text) {
|
||||
if (*mStateMgr.getStateID() == StateID_Wait) {
|
||||
mTextBoxes[0]->fn_800E0A60(text, nullptr);
|
||||
mTextBoxes[1]->fn_800E0A60(text, nullptr);
|
||||
mTextBoxes[2]->fn_800E0A60(text, nullptr);
|
||||
field_0x54C = 1;
|
||||
mTextBoxes[0]->setMessageWithGlobalTextProcessor2(text, nullptr);
|
||||
mTextBoxes[1]->setMessageWithGlobalTextProcessor2(text, nullptr);
|
||||
mTextBoxes[2]->setMessageWithGlobalTextProcessor2(text, nullptr);
|
||||
field_0x54C = true;
|
||||
}
|
||||
}
|
||||
|
||||
void dLytAreaCaptionParts_c::check() {
|
||||
if (*mStateMgr.getStateID() == StateID_Start) {
|
||||
field_0x54D = 1;
|
||||
field_0x54D = true;
|
||||
}
|
||||
}
|
||||
|
||||
void dLytAreaCaptionParts_c::initializeState_Wait() {}
|
||||
void dLytAreaCaptionParts_c::executeState_Wait() {
|
||||
mTextBoxes[0]->fn_800E0A60("N_inOut_00", nullptr);
|
||||
if (field_0x54C) {
|
||||
field_0x54C = false;
|
||||
s32 typeFrame = 0;
|
||||
if (dStageMgr_c::GetInstance()->isSTIFbyte4_2or3or4()) {
|
||||
typeFrame = 1;
|
||||
} else if (dStageMgr_c::GetInstance()->isSTIFbyte4_5or6()) {
|
||||
typeFrame = 2;
|
||||
} else if (dStageMgr_c::GetInstance()->isSTIFbyte4_7or8or9or10or11()) {
|
||||
typeFrame = 3;
|
||||
} else if (dStageMgr_c::GetInstance()->isSTIFbyte4_1()) {
|
||||
typeFrame = 4;
|
||||
} else if (dStageMgr_c::GetInstance()->isSTIFbyte4_0()) {
|
||||
typeFrame = 5;
|
||||
}
|
||||
|
||||
if (!mFirst && dScGame_c::currentSpawnInfo.getTrial() == SpawnInfo::TRIAL) {
|
||||
typeFrame = 6;
|
||||
}
|
||||
|
||||
s32 numLines = mTextBoxes[0]->calcTextLines(mTextBoxes[0]->GetString(), dMessage_c::getGlobalTagProcessor());
|
||||
f32 textFrame = 0.0f;
|
||||
if (numLines > 1) {
|
||||
textFrame = 1.0f;
|
||||
}
|
||||
|
||||
if (!mFirst) {
|
||||
mLyt.findPane("N_inOut_00")->SetVisible(true);
|
||||
}
|
||||
|
||||
mAnmGroups[AREA_CAPTION_ANIM_TYPE].setFrame(typeFrame);
|
||||
mAnmGroups[AREA_CAPTION_ANIM_TYPE].setAnimEnable(true);
|
||||
mAnmGroups[AREA_CAPTION_ANIM_TEXTLINE].setAnimEnable(true);
|
||||
mAnmGroups[AREA_CAPTION_ANIM_TEXTLINE].setFrame(textFrame);
|
||||
mLyt.calc();
|
||||
mAnmGroups[AREA_CAPTION_ANIM_TYPE].setAnimEnable(false);
|
||||
mAnmGroups[AREA_CAPTION_ANIM_TEXTLINE].setAnimEnable(false);
|
||||
mAnmGroups[AREA_CAPTION_ANIM_START].setAnimEnable(true);
|
||||
mAnmGroups[AREA_CAPTION_ANIM_START].setFrame(0.0f);
|
||||
mStateMgr.changeState(StateID_Start);
|
||||
}
|
||||
}
|
||||
void dLytAreaCaptionParts_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytAreaCaptionParts_c::initializeState_Start() {}
|
||||
void dLytAreaCaptionParts_c::executeState_Start() {}
|
||||
void dLytAreaCaptionParts_c::initializeState_Start() {
|
||||
if (mFirst == 0) {
|
||||
dLytAreaCaption_c::setVisible(true);
|
||||
dLytMeter_c::GetInstance()->setAreaCaptionOverrideVisibility(false);
|
||||
dLytMeter_c::GetMain()->setGanbariGaugeHiddenByAreaCaption(true);
|
||||
}
|
||||
}
|
||||
void dLytAreaCaptionParts_c::executeState_Start() {
|
||||
if (mAnmGroups[AREA_CAPTION_ANIM_START].isEndReached()) {
|
||||
mAnmGroups[AREA_CAPTION_ANIM_START].setAnimEnable(false);
|
||||
if (!mFirst) {
|
||||
dLytAreaCaption_c::setVisible(false);
|
||||
dLytMeter_c::GetInstance()->setAreaCaptionOverrideVisibility(true);
|
||||
}
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
} else {
|
||||
if (shouldImmediatelyDismiss()) {
|
||||
field_0x54D = false;
|
||||
if (mFirst) {
|
||||
mAnmGroups[AREA_CAPTION_ANIM_START].setFrame(0.0f);
|
||||
mLyt.calc();
|
||||
mAnmGroups[AREA_CAPTION_ANIM_START].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
} else {
|
||||
mAnmGroups[AREA_CAPTION_ANIM_OUT].setAnimEnable(true);
|
||||
mAnmGroups[AREA_CAPTION_ANIM_OUT].setFrame(0.0f);
|
||||
mStateMgr.changeState(StateID_Out);
|
||||
dLytAreaCaption_c::setVisible(false);
|
||||
dLytMeter_c::GetInstance()->setAreaCaptionOverrideVisibility(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
void dLytAreaCaptionParts_c::finalizeState_Start() {}
|
||||
|
||||
void dLytAreaCaptionParts_c::initializeState_Out() {}
|
||||
void dLytAreaCaptionParts_c::executeState_Out() {}
|
||||
void dLytAreaCaptionParts_c::executeState_Out() {
|
||||
if (mAnmGroups[AREA_CAPTION_ANIM_OUT].isEndReached()) {
|
||||
mAnmGroups[AREA_CAPTION_ANIM_OUT].setAnimEnable(false);
|
||||
if (!mFirst) {
|
||||
dLytAreaCaption_c::setVisible(false);
|
||||
dLytMeter_c::GetInstance()->setAreaCaptionOverrideVisibility(true);
|
||||
}
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dLytAreaCaptionParts_c::finalizeState_Out() {}
|
||||
|
||||
bool dLytAreaCaptionParts_c::shouldImmediatelyDismiss() const {
|
||||
if (mFirst) {
|
||||
return field_0x54D;
|
||||
}
|
||||
|
||||
if (field_0x54D) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dPad::checkButtonBPressed()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_C) && dPad::checkButtonCPressed()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_PLUS) && dPad::checkButtonPlusPressed()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dPad::checkButtonMinusPressed()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_1) && dPad::checkButton1Pressed()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_2) && dPad::checkButton2Pressed()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dPad::checkButtonDpadUpPressed()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_CROSS_DOWN) && dPad::checkButtonDpadDownPressed()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_CROSS_LEFT) && dPad::checkButtonDpadLeftPressed()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_CROSS_RIGHT) && dPad::checkButtonDpadRightPressed()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (EventManager::eventRelatedStateFlags_shift0x11_1()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dLytAreaCaption_c::create() {
|
||||
new dLytAreaCaption_c();
|
||||
if (dLytAreaCaption_c::sInstance == nullptr) {
|
||||
@@ -182,15 +329,15 @@ void dLytAreaCaption_c::check() {
|
||||
}
|
||||
}
|
||||
|
||||
void dLytAreaCaption_c::set0xAAC(u8 arg) {
|
||||
void dLytAreaCaption_c::setVisible(bool arg) {
|
||||
if (sInstance != nullptr) {
|
||||
sInstance->field_0xAAC = arg;
|
||||
sInstance->mVisible = arg;
|
||||
}
|
||||
}
|
||||
|
||||
u8 dLytAreaCaption_c::get0xAAC() {
|
||||
bool dLytAreaCaption_c::getVisible() {
|
||||
if (sInstance != nullptr) {
|
||||
return sInstance->field_0xAAC;
|
||||
return sInstance->mVisible;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -202,7 +349,7 @@ bool dLytAreaCaption_c::init() {
|
||||
first = 0;
|
||||
}
|
||||
mPartToDraw = 0;
|
||||
field_0xAAC = 0;
|
||||
mVisible = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,11 @@
|
||||
#include "common.h"
|
||||
#include "d/d_tag_processor.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_control_game.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/meter/d_lyt_meter.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
|
||||
STATE_DEFINE(dLytAutoCaption_c, Invisible);
|
||||
STATE_DEFINE(dLytAutoCaption_c, In);
|
||||
@@ -171,6 +174,10 @@ bool dLytAutoCaption_c::setText(const wchar_t *text) {
|
||||
}
|
||||
|
||||
bool dLytAutoCaption_c::checkSomethingMeter() {
|
||||
// TODO - too many dependencies on dLytMeter
|
||||
if (EventManager::isInEvent() || !dLytControlGame_c::getInstance()->isStateNormal() ||
|
||||
dLytMeter_c::getItemSelect0x75A2() || dLytMeter_c::getMinusBtnFn800F7600() ||
|
||||
dLytMeter_c::getDowsingFn800FE4B0()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -3,8 +3,11 @@
|
||||
#include "common.h"
|
||||
#include "d/d_tag_processor.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_control_game.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/meter/d_lyt_meter.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
|
||||
STATE_DEFINE(dLytAutoExplain_c, Invisible);
|
||||
STATE_DEFINE(dLytAutoExplain_c, In);
|
||||
@@ -164,6 +167,11 @@ bool dLytAutoExplain_c::setText(const wchar_t *text) {
|
||||
}
|
||||
|
||||
bool dLytAutoExplain_c::checkSomethingMeter() {
|
||||
// TODO - too many dependencies on dLytMeter
|
||||
if (EventManager::isInEvent() || !dLytControlGame_c::getInstance()->isStateNormal() ||
|
||||
dLytMeter_c::getItemSelect0x75A2() || dLytMeter_c::getMinusBtnFn800F7600() ||
|
||||
dLytMeter_c::getDowsingFn800FE4B0()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_unknowns.h"
|
||||
|
||||
LytDoButtonRelated::LytDoButtonRelated() {
|
||||
sInstance = this;
|
||||
}
|
||||
|
||||
bool LytDoButtonRelated::build(d2d::ResAccIf_c *resAcc) {
|
||||
for (int i = 0; i < 12; i++) {
|
||||
field_0x04[i] = DO_NONE;
|
||||
field_0x34[i] = 0;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool LytDoButtonRelated::remove() {
|
||||
return true;
|
||||
}
|
||||
@@ -0,0 +1,263 @@
|
||||
#include "d/lyt/d_lyt_wipe.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/d_stage.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "toBeSorted/arc_managers/layout_arc_manager.h"
|
||||
|
||||
STATE_DEFINE(dLytWipeMain_c, ModeNone);
|
||||
STATE_DEFINE(dLytWipeMain_c, ModeIn);
|
||||
STATE_DEFINE(dLytWipeMain_c, ModeWait);
|
||||
STATE_DEFINE(dLytWipeMain_c, ModeOut);
|
||||
|
||||
STATE_DEFINE(dLytWipe_c, None);
|
||||
STATE_DEFINE(dLytWipe_c, In);
|
||||
STATE_DEFINE(dLytWipe_c, Wait);
|
||||
STATE_DEFINE(dLytWipe_c, Out);
|
||||
|
||||
dLytWipe_c *dLytWipe_c::sInstance;
|
||||
|
||||
#define WIPE_ANIM_INOUT 0
|
||||
#define WIPE_NUM_ANIMS 1
|
||||
|
||||
void dLytWipeMain_c::initializeState_ModeNone() {}
|
||||
void dLytWipeMain_c::executeState_ModeNone() {
|
||||
mStateEndReached = true;
|
||||
}
|
||||
void dLytWipeMain_c::finalizeState_ModeNone() {}
|
||||
|
||||
void dLytWipeMain_c::initializeState_ModeIn() {}
|
||||
void dLytWipeMain_c::executeState_ModeIn() {
|
||||
if (mAnm[WIPE_ANIM_INOUT].isStop2()) {
|
||||
mStateEndReached = true;
|
||||
}
|
||||
}
|
||||
void dLytWipeMain_c::finalizeState_ModeIn() {}
|
||||
|
||||
void dLytWipeMain_c::initializeState_ModeWait() {}
|
||||
void dLytWipeMain_c::executeState_ModeWait() {
|
||||
mStateEndReached = true;
|
||||
}
|
||||
void dLytWipeMain_c::finalizeState_ModeWait() {}
|
||||
|
||||
void dLytWipeMain_c::initializeState_ModeOut() {}
|
||||
void dLytWipeMain_c::executeState_ModeOut() {
|
||||
if (mAnm[WIPE_ANIM_INOUT].isStop2()) {
|
||||
mStateEndReached = true;
|
||||
}
|
||||
}
|
||||
void dLytWipeMain_c::finalizeState_ModeOut() {}
|
||||
|
||||
dLytWipeMain_c::dLytWipeMain_c() : mStateMgr(*this, sStateID::null) {}
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{"wipe_00_inOut.brlan", "G_inOut_00"},
|
||||
};
|
||||
|
||||
bool dLytWipeMain_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("wipe_00.brlyt", nullptr);
|
||||
mLyt.setPriority(0);
|
||||
|
||||
for (int i = 0; i < WIPE_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mAnm[WIPE_ANIM_INOUT].setAnimEnable(true);
|
||||
mAnm[WIPE_ANIM_INOUT].setFrame(0.0f);
|
||||
mLyt.calc();
|
||||
mAnm[WIPE_ANIM_INOUT].setAnimEnable(false);
|
||||
mIsIn = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytWipeMain_c::remove() {
|
||||
mLyt.unbindAnims();
|
||||
for (int i = 0; i < WIPE_NUM_ANIMS; i++) {
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void dLytWipeMain_c::gotoIn() {
|
||||
if (!mIsIn) {
|
||||
mAnm[WIPE_ANIM_INOUT].setForwardOnce();
|
||||
mAnm[WIPE_ANIM_INOUT].setAnimEnable(true);
|
||||
if (mStateEndReached) {
|
||||
mAnm[WIPE_ANIM_INOUT].setToStart();
|
||||
} else {
|
||||
mStateMgr.finalizeState(); // ???????
|
||||
}
|
||||
mStateMgr.changeState(StateID_ModeIn);
|
||||
mIsIn = true;
|
||||
mStateEndReached = false;
|
||||
}
|
||||
}
|
||||
|
||||
void dLytWipeMain_c::gotoWait() {
|
||||
mAnm[WIPE_ANIM_INOUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_ModeWait);
|
||||
mStateEndReached = false;
|
||||
}
|
||||
|
||||
void dLytWipeMain_c::gotoOut() {
|
||||
if (mIsIn) {
|
||||
mAnm[WIPE_ANIM_INOUT].setBackwardsOnce();
|
||||
mAnm[WIPE_ANIM_INOUT].setAnimEnable(true);
|
||||
if (mStateEndReached) {
|
||||
// Nothing to do - Anim already at end
|
||||
} else {
|
||||
mStateMgr.finalizeState(); // ???????
|
||||
}
|
||||
mStateMgr.changeState(StateID_ModeOut);
|
||||
mIsIn = false;
|
||||
mStateEndReached = false;
|
||||
}
|
||||
}
|
||||
|
||||
void dLytWipeMain_c::gotoNone() {
|
||||
mStateMgr.changeState(StateID_ModeNone);
|
||||
mStateEndReached = false;
|
||||
}
|
||||
|
||||
bool dLytWipeMain_c::execute() {
|
||||
mStateMgr.executeState();
|
||||
for (int i = 0; i < WIPE_NUM_ANIMS; i++) {
|
||||
if (mAnm[i].isEnabled()) {
|
||||
mAnm[i].play();
|
||||
}
|
||||
}
|
||||
mLyt.calc();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytWipeMain_c::draw() {
|
||||
mLyt.addToDrawList();
|
||||
return true;
|
||||
}
|
||||
|
||||
void dLytWipe_c::initializeState_None() {
|
||||
mWantsIn = false;
|
||||
}
|
||||
void dLytWipe_c::executeState_None() {
|
||||
mWantsOut = false;
|
||||
if (mWantsIn) {
|
||||
mTransitionStage = 0;
|
||||
mIsSettled = false;
|
||||
// State IN fades OUT, because I guess the fader fades the scene out,
|
||||
// which means Wipe is In
|
||||
if (dStage_c::GetInstance()->fadeOut(2, 16)) {
|
||||
mStateMgr.changeState(StateID_In);
|
||||
mWantsIn = false;
|
||||
mVisible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
void dLytWipe_c::finalizeState_None() {}
|
||||
|
||||
void dLytWipe_c::initializeState_In() {}
|
||||
void dLytWipe_c::executeState_In() {
|
||||
if (mTransitionStage == 0) {
|
||||
if (dStage_c::GetInstance()->isFadedOut()) {
|
||||
mFadeDelay = 15;
|
||||
mTransitionStage = 1;
|
||||
}
|
||||
} else if (mTransitionStage == 1) {
|
||||
mFadeDelay--;
|
||||
if (mFadeDelay == 0) {
|
||||
dStage_c::GetInstance()->forceFadeIn();
|
||||
mMain.gotoIn();
|
||||
mTransitionStage = 2;
|
||||
}
|
||||
} else {
|
||||
mTransitionStage = 3;
|
||||
if (mMain.isStateEndReached()) {
|
||||
mMain.gotoWait();
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
mIsSettled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
void dLytWipe_c::finalizeState_In() {}
|
||||
|
||||
void dLytWipe_c::initializeState_Wait() {}
|
||||
void dLytWipe_c::executeState_Wait() {
|
||||
mWantsIn = false;
|
||||
if (mWantsOut) {
|
||||
mTransitionStage = 0;
|
||||
mMain.gotoOut();
|
||||
mStateMgr.changeState(StateID_Out);
|
||||
mWantsOut = false;
|
||||
mIsSettled = false;
|
||||
}
|
||||
}
|
||||
void dLytWipe_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytWipe_c::initializeState_Out() {}
|
||||
void dLytWipe_c::executeState_Out() {
|
||||
if (mTransitionStage == 0) {
|
||||
if (mMain.isStateEndReached()) {
|
||||
dStage_c::GetInstance()->forceFadeOut();
|
||||
mFadeDelay = 15;
|
||||
mTransitionStage = 1;
|
||||
}
|
||||
} else if (mTransitionStage == 1) {
|
||||
dStage_c::GetInstance()->forceFadeOut();
|
||||
mFadeDelay--;
|
||||
if (mFadeDelay == 0) {
|
||||
dStage_c::GetInstance()->fadeIn(2, 16);
|
||||
mMain.gotoNone();
|
||||
mTransitionStage = 2;
|
||||
}
|
||||
} else {
|
||||
mTransitionStage = 3;
|
||||
if (dStage_c::GetInstance()->isFadedIn()) {
|
||||
mStateMgr.changeState(StateID_None);
|
||||
mIsSettled = true;
|
||||
mVisible = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
void dLytWipe_c::finalizeState_Out() {}
|
||||
|
||||
bool dLytWipe_c::build() {
|
||||
sInstance = this;
|
||||
mTransitionStage = 0;
|
||||
mFadeDelay = 0;
|
||||
|
||||
mWantsIn = false;
|
||||
mWantsOut = false;
|
||||
mIsSettled = true;
|
||||
mVisible = false;
|
||||
|
||||
void *data = LayoutArcManager::GetInstance()->getLoadedData("DoButton");
|
||||
mResAcc.attach(data, "");
|
||||
mMain.build(&mResAcc);
|
||||
|
||||
mStateMgr.changeState(StateID_None);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytWipe_c::remove() {
|
||||
sInstance = nullptr;
|
||||
mMain.remove();
|
||||
mResAcc.detach();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytWipe_c::execute() {
|
||||
mMain.execute();
|
||||
mStateMgr.executeState();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytWipe_c::draw() {
|
||||
if (mVisible &&
|
||||
((mTransitionStage && (*mStateMgr.getStateID() == StateID_In || *mStateMgr.getStateID() == StateID_Wait)) ||
|
||||
(*mStateMgr.getStateID() == StateID_Out && mTransitionStage < 2))) {
|
||||
mMain.draw();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
+1415
-154
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,12 @@
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/d_window.h"
|
||||
#include "d/lyt/meter/d_lyt_meter_a_btn.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/lyt/d_lyt_do_button.h"
|
||||
#include "d/lyt/d_lyt_unknowns.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/d_window.h"
|
||||
#include "d/lyt/meter/d_lyt_meter.h"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
|
||||
STATE_DEFINE(dLytMeterABtn_c, InvisibleWait);
|
||||
STATE_DEFINE(dLytMeterABtn_c, In);
|
||||
@@ -11,6 +16,18 @@ STATE_DEFINE(dLytMeterABtn_c, On);
|
||||
STATE_DEFINE(dLytMeterABtn_c, Active);
|
||||
STATE_DEFINE(dLytMeterABtn_c, Off);
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{"remoConBtn_06_input.brlan", "G_input_00"},
|
||||
{ "remoConBtn_06_text.brlan", "G_text_00"},
|
||||
{ "remoConBtn_06_loop.brlan", "G_loop_00"},
|
||||
};
|
||||
|
||||
#define A_BTN_ANIM_INPUT 0
|
||||
#define A_BTN_ANIM_TEXT 1
|
||||
#define A_BTN_ANIM_LOOP 2
|
||||
|
||||
#define A_BTN_NUM_ANIMS 3
|
||||
|
||||
void dLytMeterABtn_c::initializeState_InvisibleWait() {}
|
||||
void dLytMeterABtn_c::executeState_InvisibleWait() {
|
||||
if (field_0x1C8 == 0) {
|
||||
@@ -28,8 +45,8 @@ void dLytMeterABtn_c::finalizeState_InvisibleWait() {}
|
||||
void dLytMeterABtn_c::initializeState_In() {
|
||||
mpContainerAnmGroup1->setToStart();
|
||||
mpContainerAnmGroup1->setAnimEnable(true);
|
||||
mAnmGroups[0].setBackwardsOnce();
|
||||
mAnmGroups[0].setToStart();
|
||||
mAnm[A_BTN_ANIM_INPUT].setBackwardsOnce();
|
||||
mAnm[A_BTN_ANIM_INPUT].setToStart();
|
||||
}
|
||||
void dLytMeterABtn_c::executeState_In() {
|
||||
if (mpContainerAnmGroup1->isEndReached()) {
|
||||
@@ -58,82 +75,266 @@ void dLytMeterABtn_c::executeState_Out() {
|
||||
void dLytMeterABtn_c::finalizeState_Out() {}
|
||||
|
||||
void dLytMeterABtn_c::initializeState_Wait() {}
|
||||
void dLytMeterABtn_c::executeState_Wait() {}
|
||||
void dLytMeterABtn_c::executeState_Wait() {
|
||||
if (field_0x1C9 == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (field_0x1C0) {
|
||||
if (field_0x1BC != LytDoButtonRelated::DO_NONE) {
|
||||
mAnm[A_BTN_ANIM_INPUT].setBackwardsOnce();
|
||||
mAnm[A_BTN_ANIM_INPUT].setToStart();
|
||||
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(true);
|
||||
mStateMgr.changeState(StateID_On);
|
||||
setMessage(field_0x1BC);
|
||||
}
|
||||
field_0x1B8 = field_0x1BC;
|
||||
} else {
|
||||
if (field_0x1BC != LytDoButtonRelated::DO_NONE) {
|
||||
setMessage(field_0x1BC);
|
||||
}
|
||||
field_0x1B8 = field_0x1BC;
|
||||
}
|
||||
}
|
||||
void dLytMeterABtn_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytMeterABtn_c::initializeState_On() {}
|
||||
void dLytMeterABtn_c::executeState_On() {}
|
||||
void dLytMeterABtn_c::executeState_On() {
|
||||
if (mAnm[A_BTN_ANIM_INPUT].isStop2()) {
|
||||
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Active);
|
||||
}
|
||||
}
|
||||
void dLytMeterABtn_c::finalizeState_On() {}
|
||||
|
||||
void dLytMeterABtn_c::initializeState_Active() {}
|
||||
void dLytMeterABtn_c::executeState_Active() {}
|
||||
void dLytMeterABtn_c::executeState_Active() {
|
||||
if (field_0x1BC != field_0x1B8 || !field_0x1C0) {
|
||||
if (field_0x1BC == LytDoButtonRelated::DO_NONE || !field_0x1C0) {
|
||||
mAnm[A_BTN_ANIM_INPUT].setForwardOnce();
|
||||
mAnm[A_BTN_ANIM_INPUT].setFrame(0.0f);
|
||||
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(true);
|
||||
if (field_0x1B8 != field_0x1C4) {
|
||||
field_0x1BC = field_0x1C4;
|
||||
}
|
||||
mStateMgr.changeState(StateID_Off);
|
||||
} else {
|
||||
setMessage(field_0x1BC);
|
||||
}
|
||||
field_0x1B8 = field_0x1BC;
|
||||
} else if (field_0x1B8 == LytDoButtonRelated::DO_NONE) {
|
||||
mAnm[A_BTN_ANIM_INPUT].setForwardOnce();
|
||||
mAnm[A_BTN_ANIM_INPUT].setFrame(0.0f);
|
||||
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(true);
|
||||
mStateMgr.changeState(StateID_Off);
|
||||
}
|
||||
}
|
||||
void dLytMeterABtn_c::finalizeState_Active() {}
|
||||
|
||||
void dLytMeterABtn_c::initializeState_Off() {}
|
||||
void dLytMeterABtn_c::executeState_Off() {}
|
||||
void dLytMeterABtn_c::executeState_Off() {
|
||||
if (mAnm[A_BTN_ANIM_INPUT].isEndReached()) {
|
||||
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dLytMeterABtn_c::finalizeState_Off() {}
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{"remoConBtn_06_input.brlan", "G_input_00"},
|
||||
{ "remoConBtn_06_text.brlan", "G_text_00"},
|
||||
{ "remoConBtn_06_loop.brlan", "G_loop_00"},
|
||||
};
|
||||
|
||||
#define A_BTN_ANIM_INPUT 0
|
||||
#define A_BTN_ANIM_TEXT 1
|
||||
#define A_BTN_ANIM_LOOP 2
|
||||
static const char *sPane = "N_all_00";
|
||||
|
||||
static const char *sTextBoxes[] = {
|
||||
"T_aBtn_00",
|
||||
"T_aBtnS_00",
|
||||
};
|
||||
|
||||
static const char *sWindows[] = {"W_bgP_00"};
|
||||
|
||||
bool dLytMeterABtn_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("remoConBtn_06.brlyt", nullptr);
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
mAnmGroups[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnmGroups[i].bind(false);
|
||||
mAnmGroups[i].setAnimEnable(false);
|
||||
for (int i = 0; i < A_BTN_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
|
||||
static const char *sPane = "N_all_0";
|
||||
mpPane = mLyt.findPane(sPane);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpTextBoxes[i] = mLyt.getTextBox(sTextBoxes[i]);
|
||||
}
|
||||
|
||||
static const char *sWindow = "W_bg_P_00";
|
||||
mpWindow = mLyt.getWindow(sWindow);
|
||||
mpSizeBox = mLyt.getSizeBoxInWindow(sWindow);
|
||||
for (int i = 0; i < 1; i++) {
|
||||
mpWindow[i] = mLyt.getWindow(sWindows[i]);
|
||||
mpSizeBox[i] = mLyt.getSizeBoxInWindow(sWindows[i]);
|
||||
}
|
||||
|
||||
field_0x1C4 = 0x5F;
|
||||
field_0x1B8 = 0x5F;
|
||||
field_0x1BC = 0x5F;
|
||||
field_0x1C4 = LytDoButtonRelated::DO_DASH;
|
||||
field_0x1B8 = LytDoButtonRelated::DO_DASH;
|
||||
field_0x1BC = LytDoButtonRelated::DO_DASH;
|
||||
field_0x1C8 = 0;
|
||||
field_0x1CA = 0;
|
||||
field_0x1C9 = 0;
|
||||
field_0x1C0 = 1;
|
||||
field_0x1CB = 0;
|
||||
field_0x1A4 = 0;
|
||||
mAnmGroups[A_BTN_ANIM_TEXT].setAnimEnable(true);
|
||||
fn_800E0870(field_0x1B8);
|
||||
mAnmGroups[A_BTN_ANIM_TEXT].setFrame(0.0f);
|
||||
mAnmGroups[A_BTN_ANIM_INPUT].setToEnd();
|
||||
mAnmGroups[A_BTN_ANIM_INPUT].setAnimEnable(true);
|
||||
mAnmGroups[A_BTN_ANIM_LOOP].setAnimEnable(true);
|
||||
field_0x1C0 = true;
|
||||
mOldTextState = false;
|
||||
mpOwnerPane = nullptr;
|
||||
mAnm[A_BTN_ANIM_TEXT].setAnimEnable(true);
|
||||
setMessage(field_0x1B8);
|
||||
mAnm[A_BTN_ANIM_TEXT].setFrame(0.0f);
|
||||
mAnm[A_BTN_ANIM_INPUT].setToEnd();
|
||||
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(true);
|
||||
mAnm[A_BTN_ANIM_LOOP].setAnimEnable(true);
|
||||
mLyt.calc();
|
||||
mAnmGroups[A_BTN_ANIM_INPUT].setAnimEnable(false);
|
||||
mAnm[A_BTN_ANIM_INPUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterABtn_c::remove() {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
mAnmGroups[i].unbind();
|
||||
mAnmGroups[i].remove();
|
||||
for (int i = 0; i < A_BTN_NUM_ANIMS; i++) {
|
||||
mAnm[i].unbind();
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
extern "C" bool checkIsInSkykeepPuzzle();
|
||||
|
||||
bool dLytMeterABtn_c::execute() {
|
||||
if (mpOwnerPane == nullptr) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!mpOwnerPane->IsVisible()) {
|
||||
if (*mStateMgr.getStateID() == StateID_Off) {
|
||||
mAnm[A_BTN_ANIM_INPUT].setToEnd2();
|
||||
}
|
||||
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_A, LytDoButtonRelated::DO_NONE);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (dLytMeter_c::GetInstance()->getMeterField_0x13750() == 0) {
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_A, LytDoButtonRelated::DO_NONE);
|
||||
|
||||
if (field_0x1BC != LytDoButtonRelated::DO_NONE) {
|
||||
field_0x1BC = LytDoButtonRelated::DO_NONE;
|
||||
field_0x1B8 = LytDoButtonRelated::DO_NONE;
|
||||
}
|
||||
setMessage(field_0x1BC);
|
||||
}
|
||||
|
||||
bool state = false;
|
||||
|
||||
if (EventManager::isInEvent() && !dLytMeter_c::GetInstance()->fn_800D5670() &&
|
||||
dLytMeter_c::GetMain()->getField_0x1377E() == 0 && !checkIsInSkykeepPuzzle() &&
|
||||
LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_A) == LytDoButtonRelated::DO_NONE) {
|
||||
field_0x1C9 = 0;
|
||||
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_A, LytDoButtonRelated::DO_NONE);
|
||||
} else {
|
||||
field_0x1C9 = 1;
|
||||
}
|
||||
|
||||
field_0x1CA = 1;
|
||||
|
||||
// TODO
|
||||
switch (dLytDobutton_c::getField0x480()) {
|
||||
case 0x0:
|
||||
case 0x7:
|
||||
case 0xB:
|
||||
case 0x15:
|
||||
case 0x1A:
|
||||
case 0x1B:
|
||||
case 0x1C:
|
||||
case 0x1D:
|
||||
case 0x1F:
|
||||
case 0x21:
|
||||
case 0x22:
|
||||
case 0x23:
|
||||
case 0x27:
|
||||
case 0x28: {
|
||||
LytDoButtonRelated::Action_e action = LytDoButtonRelated::convertDoButton(dLytDobutton_c::getField0x47C());
|
||||
if (action >= 0) {
|
||||
state = true;
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_A, action);
|
||||
}
|
||||
field_0x1CA = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
field_0x1BC = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_A);
|
||||
field_0x1C0 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_A);
|
||||
|
||||
if (field_0x1BC == 0x76) {
|
||||
state = true;
|
||||
} else if (field_0x1BC == 0x57) {
|
||||
state = false;
|
||||
}
|
||||
|
||||
mStateMgr.executeState();
|
||||
|
||||
if (mOldTextState != state) {
|
||||
if (*mStateMgr.getStateID() != StateID_Off) {
|
||||
if (state) {
|
||||
mAnm[A_BTN_ANIM_TEXT].setFrame(1.0f);
|
||||
} else {
|
||||
mAnm[A_BTN_ANIM_TEXT].setFrame(0.0f);
|
||||
}
|
||||
mOldTextState = state;
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < A_BTN_NUM_ANIMS; i++) {
|
||||
if (i != 1 && mAnm[i].isEnabled()) {
|
||||
mAnm[i].play();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#include "d/lyt/meter/d_lyt_meter_action_table.inc"
|
||||
|
||||
void dLytMeterABtn_c::setMessage(s32 id) {
|
||||
char buf[11];
|
||||
for (int i = 0; i < 11; i++) {
|
||||
buf[i] = 0;
|
||||
}
|
||||
|
||||
if (id < LytDoButtonRelated::DO_NONE) {
|
||||
if (id < 0x5D) {
|
||||
sprintf(buf, "ACT_INFO_%03d", sActIds[id]);
|
||||
} else if (id == 0x5D) {
|
||||
wchar_t b2[2];
|
||||
b2[0] = b2[1] = 0;
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpTextBoxes[i]->setTextWithGlobalTextProcessor(b2);
|
||||
}
|
||||
} else {
|
||||
s32 id2 = id - 0x5E;
|
||||
sprintf(buf, "ACT_ETC_%03d", sActIds[id2]);
|
||||
}
|
||||
|
||||
if (id != 0x5D) {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpTextBoxes[i]->SetVisible(true);
|
||||
mpTextBoxes[i]->setMessageWithGlobalTextProcessor2(buf, nullptr);
|
||||
}
|
||||
mpWindow[0]->SetVisible(true);
|
||||
mpWindow[0]->UpdateSize(mpSizeBox[0], 32.0f);
|
||||
} else {
|
||||
mpTextBoxes[0]->SetVisible(false);
|
||||
mpTextBoxes[1]->SetVisible(false);
|
||||
mpWindow[0]->SetVisible(false);
|
||||
}
|
||||
field_0x1C4 = id;
|
||||
} else {
|
||||
mpTextBoxes[0]->SetVisible(false);
|
||||
mpTextBoxes[1]->SetVisible(false);
|
||||
mpWindow[0]->SetVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
static const s32 sActIds[] = {
|
||||
0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0x10, 0x11, 0x12, 0x13,
|
||||
0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
|
||||
0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
|
||||
0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C,
|
||||
0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, -1, 0x1,
|
||||
0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF, 0x10, 0x11, 0x12, 0x13, 0x14,
|
||||
0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
|
||||
0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x0, 0x0, 0x0, 0x0, 0x0
|
||||
};
|
||||
@@ -1,5 +1,15 @@
|
||||
#include "d/lyt/meter/d_lyt_meter_cross_btn.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/d_message.h"
|
||||
#include "d/flag/storyflag_manager.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_unknowns.h"
|
||||
#include "d/lyt/meter/d_lyt_meter.h"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
#include "toBeSorted/small_sound_mgr.h"
|
||||
|
||||
STATE_DEFINE(dLytMeterCrossBtnParts_c, Wait);
|
||||
STATE_DEFINE(dLytMeterCrossBtnParts_c, On);
|
||||
STATE_DEFINE(dLytMeterCrossBtnParts_c, Active);
|
||||
@@ -9,3 +19,559 @@ STATE_DEFINE(dLytMeterCrossBtn_c, Wait);
|
||||
STATE_DEFINE(dLytMeterCrossBtn_c, ToUse);
|
||||
STATE_DEFINE(dLytMeterCrossBtn_c, ToUnuse);
|
||||
STATE_DEFINE(dLytMeterCrossBtn_c, Unuse);
|
||||
|
||||
void dLytMeterCrossBtnParts_c::initializeState_Wait() {
|
||||
mOnDelay = 15;
|
||||
}
|
||||
void dLytMeterCrossBtnParts_c::executeState_Wait() {
|
||||
if (dLytMeter_c::GetMain()->fn_800D5650()) {
|
||||
mOnDelay = 0;
|
||||
}
|
||||
|
||||
s32 timer = mOnDelay;
|
||||
if (field_0x7C) {
|
||||
if (field_0x68) {
|
||||
bool bDoUpdate = true;
|
||||
if (field_0x64 != LytDoButtonRelated::DO_NONE || field_0x70 != field_0x74) {
|
||||
if (timer <= 0) {
|
||||
mStateMgr.changeState(StateID_On);
|
||||
setMessage(field_0x64);
|
||||
} else {
|
||||
bDoUpdate = false;
|
||||
mOnDelay -= 1;
|
||||
}
|
||||
}
|
||||
if (bDoUpdate) {
|
||||
field_0x60 = field_0x64;
|
||||
field_0x70 = field_0x74;
|
||||
}
|
||||
} else {
|
||||
if (field_0x64 != LytDoButtonRelated::DO_NONE || field_0x70 != field_0x74) {
|
||||
setMessage(field_0x64);
|
||||
}
|
||||
field_0x60 = field_0x64;
|
||||
field_0x70 = field_0x74;
|
||||
}
|
||||
}
|
||||
|
||||
if (timer == mOnDelay) {
|
||||
mOnDelay = 15;
|
||||
}
|
||||
}
|
||||
void dLytMeterCrossBtnParts_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytMeterCrossBtnParts_c::initializeState_On() {
|
||||
mpAnm[0]->setBackwardsOnce();
|
||||
mpAnm[0]->setToStart();
|
||||
mpAnm[0]->setAnimEnable(true);
|
||||
}
|
||||
void dLytMeterCrossBtnParts_c::executeState_On() {
|
||||
if (mpAnm[0]->isStop2()) {
|
||||
mpAnm[0]->setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Active);
|
||||
}
|
||||
}
|
||||
void dLytMeterCrossBtnParts_c::finalizeState_On() {}
|
||||
|
||||
void dLytMeterCrossBtnParts_c::initializeState_Active() {}
|
||||
void dLytMeterCrossBtnParts_c::executeState_Active() {
|
||||
if (field_0x64 != field_0x60 || !field_0x68 || field_0x70 != field_0x74) {
|
||||
if ((field_0x64 == LytDoButtonRelated::DO_NONE && field_0x74 == 6) || !field_0x68) {
|
||||
if (field_0x60 != field_0x6C) {
|
||||
field_0x64 = field_0x6C;
|
||||
}
|
||||
mStateMgr.changeState(StateID_Off);
|
||||
} else {
|
||||
setMessage(field_0x64);
|
||||
}
|
||||
field_0x60 = field_0x64;
|
||||
field_0x70 = field_0x74;
|
||||
} else if (field_0x60 == LytDoButtonRelated::DO_NONE && field_0x74 == 6) {
|
||||
mStateMgr.changeState(StateID_Off);
|
||||
}
|
||||
}
|
||||
void dLytMeterCrossBtnParts_c::finalizeState_Active() {}
|
||||
|
||||
void dLytMeterCrossBtnParts_c::initializeState_Off() {
|
||||
mpAnm[0]->setForwardOnce();
|
||||
mpAnm[0]->setToStart();
|
||||
mpAnm[0]->setAnimEnable(true);
|
||||
}
|
||||
void dLytMeterCrossBtnParts_c::executeState_Off() {
|
||||
if (mpAnm[0]->isStop2()) {
|
||||
mpAnm[0]->setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dLytMeterCrossBtnParts_c::finalizeState_Off() {}
|
||||
|
||||
void dLytMeterCrossBtnParts_c::init() {
|
||||
field_0x6C = LytDoButtonRelated::DO_NONE;
|
||||
field_0x60 = LytDoButtonRelated::DO_NONE;
|
||||
field_0x64 = LytDoButtonRelated::DO_NONE;
|
||||
field_0x7C = false;
|
||||
field_0x70 = 6;
|
||||
field_0x68 = 1;
|
||||
mOnDelay = 15;
|
||||
mpOwnerPane = 0;
|
||||
setMessage(LytDoButtonRelated::DO_NONE);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
extern "C" bool checkIsInSkykeepPuzzle();
|
||||
void dLytMeterCrossBtnParts_c::execute(bool bIsVisible) {
|
||||
if (mpOwnerPane == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mpOwnerPane->IsVisible()) {
|
||||
if (!(*mStateMgr.getStateID() == StateID_On)) {
|
||||
return;
|
||||
}
|
||||
field_0x70 = 6;
|
||||
mpAnm[0]->setForwardOnce();
|
||||
mpAnm[0]->setToEnd2();
|
||||
mpAnm[0]->setAnimEnable(true);
|
||||
mpLyt->getLayout()->Animate(0);
|
||||
mpLyt->calc();
|
||||
mpAnm[0]->setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
return;
|
||||
}
|
||||
|
||||
if (dLytMeter_c::GetInstance()->getMeterField_0x13750() == 0) {
|
||||
if (mIndex == 0) {
|
||||
LytDoButtonRelated::fn_8010EC10(LytDoButtonRelated::DO_NONE, true);
|
||||
} else if (mIndex == 1) {
|
||||
LytDoButtonRelated::fn_8010ED50(LytDoButtonRelated::DO_NONE, true);
|
||||
} else if (mIndex == 2) {
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_L, LytDoButtonRelated::DO_NONE);
|
||||
} else if (mIndex == 3) {
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_R, LytDoButtonRelated::DO_NONE);
|
||||
}
|
||||
|
||||
if (field_0x64 != LytDoButtonRelated::DO_NONE) {
|
||||
field_0x64 = LytDoButtonRelated::DO_NONE;
|
||||
field_0x60 = LytDoButtonRelated::DO_NONE;
|
||||
}
|
||||
setMessage(field_0x64);
|
||||
}
|
||||
|
||||
if (!bIsVisible && *mStateMgr.getStateID() == StateID_Off) {
|
||||
mpAnm[0]->setToEnd();
|
||||
mpLyt->calc();
|
||||
}
|
||||
|
||||
if ((EventManager::isInEvent() && dMessage_c::getInstance()->getField_0x32C() == 12 && !checkIsInSkykeepPuzzle() &&
|
||||
!dLytMeter_c::GetInstance()->fn_800D5670()) ||
|
||||
((dLytMeter_c::getItemSelect0x75A2() && (mIndex != 1 || field_0x74 != 0)) || !bIsVisible)) {
|
||||
field_0x7C = 0;
|
||||
|
||||
if (mIndex == 0) {
|
||||
LytDoButtonRelated::fn_8010EC10(LytDoButtonRelated::DO_NONE, true);
|
||||
} else if (mIndex == 1) {
|
||||
LytDoButtonRelated::fn_8010ED50(LytDoButtonRelated::DO_NONE, true);
|
||||
} else if (mIndex == 2) {
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_L, LytDoButtonRelated::DO_NONE);
|
||||
} else if (mIndex == 3) {
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_CROSS_R, LytDoButtonRelated::DO_NONE);
|
||||
}
|
||||
} else {
|
||||
field_0x7C = 1;
|
||||
}
|
||||
|
||||
if (mIndex == 0) {
|
||||
field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_T);
|
||||
field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_T);
|
||||
} else if (mIndex == 1) {
|
||||
field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_D);
|
||||
field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_D);
|
||||
} else if (mIndex == 2) {
|
||||
field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_L);
|
||||
field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_L);
|
||||
} else if (mIndex == 3) {
|
||||
field_0x64 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_CROSS_R);
|
||||
field_0x68 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_CROSS_R);
|
||||
}
|
||||
|
||||
mStateMgr.executeState();
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
if (mpAnm[i]->isEnabled()) {
|
||||
mpAnm[i]->play();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#include "d/lyt/meter/d_lyt_meter_action_table.inc"
|
||||
|
||||
void dLytMeterCrossBtnParts_c::setMessage(s32 id) {
|
||||
char buf[11];
|
||||
for (int i = 0; i < 11; i++) {
|
||||
buf[i] = 0;
|
||||
}
|
||||
|
||||
// If only there was an easier way to write this
|
||||
if (field_0x74 == 0 || field_0x74 == 1) {
|
||||
mpWindow->SetVisible(false);
|
||||
mpAnm[1]->setFrame(0.0f);
|
||||
mpAnm[1]->setAnimEnable(true);
|
||||
mpTextBoxes[0]->SetVisible(false);
|
||||
mpTextBoxes[1]->SetVisible(false);
|
||||
mpLyt->getLayout()->Animate(0);
|
||||
mpLyt->calc();
|
||||
mpAnm[1]->setAnimEnable(false);
|
||||
} else if (field_0x74 == 2) {
|
||||
mpWindow->SetVisible(false);
|
||||
mpAnm[1]->setFrame(2.0f);
|
||||
mpAnm[1]->setAnimEnable(true);
|
||||
mpTextBoxes[0]->SetVisible(false);
|
||||
mpTextBoxes[1]->SetVisible(false);
|
||||
mpLyt->getLayout()->Animate(0);
|
||||
mpLyt->calc();
|
||||
mpAnm[1]->setAnimEnable(false);
|
||||
} else if (field_0x74 == 3) {
|
||||
mpWindow->SetVisible(false);
|
||||
mpAnm[1]->setFrame(3.0f);
|
||||
mpAnm[1]->setAnimEnable(true);
|
||||
mpTextBoxes[0]->SetVisible(false);
|
||||
mpTextBoxes[1]->SetVisible(false);
|
||||
mpLyt->getLayout()->Animate(0);
|
||||
mpLyt->calc();
|
||||
mpAnm[1]->setAnimEnable(false);
|
||||
} else if (field_0x74 == 4) {
|
||||
mpWindow->SetVisible(false);
|
||||
mpAnm[1]->setFrame(4.0f);
|
||||
mpAnm[1]->setAnimEnable(true);
|
||||
mpTextBoxes[0]->SetVisible(false);
|
||||
mpTextBoxes[1]->SetVisible(false);
|
||||
mpLyt->getLayout()->Animate(0);
|
||||
mpLyt->calc();
|
||||
mpAnm[1]->setAnimEnable(false);
|
||||
} else if (field_0x74 == 5) {
|
||||
mpWindow->SetVisible(false);
|
||||
mpAnm[1]->setFrame(5.0f);
|
||||
mpAnm[1]->setAnimEnable(true);
|
||||
mpTextBoxes[0]->SetVisible(false);
|
||||
mpTextBoxes[1]->SetVisible(false);
|
||||
mpLyt->getLayout()->Animate(0);
|
||||
mpLyt->calc();
|
||||
mpAnm[1]->setAnimEnable(false);
|
||||
} else if (id < LytDoButtonRelated::DO_NONE) {
|
||||
if (id < 0x5D) {
|
||||
sprintf(buf, "ACT_INFO_%03d", sActIds[id]);
|
||||
} else {
|
||||
s32 id2 = id - 0x5E;
|
||||
sprintf(buf, "ACT_ETC_%03d", sActIds[id2]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpTextBoxes[i]->SetVisible(true);
|
||||
mpTextBoxes[i]->setMessageWithGlobalTextProcessor2(buf, nullptr);
|
||||
}
|
||||
mpWindow->SetVisible(true);
|
||||
mpWindow->UpdateSize(mpSizeBox, 32.0f);
|
||||
field_0x6C = id;
|
||||
mpAnm[1]->setFrame(1.0f);
|
||||
mpAnm[1]->setAnimEnable(true);
|
||||
mpLyt->getLayout()->Animate(0);
|
||||
mpLyt->calc();
|
||||
mpAnm[1]->setAnimEnable(false);
|
||||
} else {
|
||||
mpWindow->SetVisible(false);
|
||||
mpAnm[1]->setFrame(1.0f);
|
||||
mpAnm[1]->setAnimEnable(true);
|
||||
mpLyt->getLayout()->Animate(0);
|
||||
mpLyt->calc();
|
||||
mpAnm[1]->setAnimEnable(false);
|
||||
}
|
||||
}
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{ "remoConBtn_03_input.brlan", "G_inputT_00"},
|
||||
{ "remoConBtn_03_input.brlan", "G_inputD_00"},
|
||||
{ "remoConBtn_03_input.brlan", "G_inputL_00"},
|
||||
{ "remoConBtn_03_input.brlan", "G_inputR_00"},
|
||||
{"remoConBtn_03_pattern.brlan", "N_T_00"},
|
||||
{"remoConBtn_03_pattern.brlan", "N_D_00"},
|
||||
{"remoConBtn_03_pattern.brlan", "N_L_00"},
|
||||
{"remoConBtn_03_pattern.brlan", "N_R_00"},
|
||||
{ "remoConBtn_03_call.brlan", "G_call_00"},
|
||||
{ "remoConBtn_03_call.brlan", "G_call_01"},
|
||||
{ "remoConBtn_03_call.brlan", "G_call_02"},
|
||||
{ "remoConBtn_03_loop.brlan", "G_loop_00"},
|
||||
};
|
||||
|
||||
#define CROSS_BTN_ANIM_INPUT_T 0
|
||||
#define CROSS_BTN_ANIM_INPUT_OFFSET 0
|
||||
#define CROSS_BTN_ANIM_PATTERN_OFFSET 4
|
||||
#define CROSS_BTN_ANIM_CALL_0 8
|
||||
#define CROSS_BTN_ANIM_CALL_1 9
|
||||
#define CROSS_BTN_ANIM_CALL_2 10
|
||||
#define CROSS_BTN_ANIM_LOOP 11
|
||||
|
||||
#define CROSS_BTN_NUM_ANIMS 12
|
||||
|
||||
void dLytMeterCrossBtn_c::initializeState_Wait() {}
|
||||
void dLytMeterCrossBtn_c::executeState_Wait() {}
|
||||
void dLytMeterCrossBtn_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytMeterCrossBtn_c::initializeState_ToUse() {
|
||||
mAnm[CROSS_BTN_ANIM_INPUT_T].setBackwardsOnce();
|
||||
mAnm[CROSS_BTN_ANIM_INPUT_T].setToStart();
|
||||
mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(true);
|
||||
}
|
||||
void dLytMeterCrossBtn_c::executeState_ToUse() {
|
||||
if (mAnm[CROSS_BTN_ANIM_INPUT_T].isStop2()) {
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
if (mAnm[CROSS_BTN_ANIM_INPUT_T].isEnabled()) {
|
||||
mAnm[CROSS_BTN_ANIM_INPUT_T].play();
|
||||
}
|
||||
}
|
||||
void dLytMeterCrossBtn_c::finalizeState_ToUse() {
|
||||
mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(false);
|
||||
}
|
||||
|
||||
void dLytMeterCrossBtn_c::initializeState_ToUnuse() {
|
||||
mAnm[CROSS_BTN_ANIM_INPUT_T].setForwardOnce();
|
||||
mAnm[CROSS_BTN_ANIM_INPUT_T].setToStart();
|
||||
mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(true);
|
||||
}
|
||||
void dLytMeterCrossBtn_c::executeState_ToUnuse() {
|
||||
if (mAnm[CROSS_BTN_ANIM_INPUT_T].isStop2()) {
|
||||
mStateMgr.changeState(StateID_Unuse);
|
||||
}
|
||||
|
||||
if (mAnm[CROSS_BTN_ANIM_INPUT_T].isEnabled()) {
|
||||
mAnm[CROSS_BTN_ANIM_INPUT_T].play();
|
||||
}
|
||||
}
|
||||
void dLytMeterCrossBtn_c::finalizeState_ToUnuse() {
|
||||
mAnm[CROSS_BTN_ANIM_INPUT_T].setAnimEnable(false);
|
||||
}
|
||||
|
||||
void dLytMeterCrossBtn_c::initializeState_Unuse() {}
|
||||
void dLytMeterCrossBtn_c::executeState_Unuse() {
|
||||
if (dLytMeter_c::GetInstance()->checkAllFlags(METER_BTN_CROSS_UP)) {
|
||||
mStateMgr.changeState(StateID_ToUse);
|
||||
}
|
||||
}
|
||||
void dLytMeterCrossBtn_c::finalizeState_Unuse() {}
|
||||
|
||||
static const char *sPane = "N_all_00";
|
||||
|
||||
static const char *sTextBoxes[] = {
|
||||
"T_textT_00", "T_textD_00", "T_textL_00", "T_textR_00", "T_textTS_00", "T_textDS_00", "T_textLS_00", "T_textRS_00",
|
||||
};
|
||||
|
||||
static const char *sWindows[] = {"W_bgP_01", "W_bgP_00", "W_bgP_02", "W_bgP_03"};
|
||||
|
||||
bool dLytMeterCrossBtn_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("remoConBtn_03.brlyt", nullptr);
|
||||
|
||||
for (int i = 0; i < CROSS_BTN_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mpPane = mLyt.findPane(sPane);
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
mpTextboxes[i] = mLyt.getTextBox(sTextBoxes[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
mpWindows[i] = mLyt.getWindow(sWindows[i]);
|
||||
mpSizeBoxes[i] = mLyt.getSizeBoxInWindow(sWindows[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
mParts[i].mIndex = i;
|
||||
mParts[i].mpLyt = &mLyt;
|
||||
mParts[i].mpAnm[0] = &mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET];
|
||||
mParts[i].mpAnm[1] = &mAnm[i + CROSS_BTN_ANIM_PATTERN_OFFSET];
|
||||
mParts[i].mpTextBoxes[0] = mpTextboxes[i];
|
||||
mParts[i].mpTextBoxes[1] = mpTextboxes[i + 4];
|
||||
mParts[i].mpWindow = mpWindows[i];
|
||||
mParts[i].mpSizeBox = mpSizeBoxes[i];
|
||||
mParts[i].field_0x74 = 6;
|
||||
mParts[i].init();
|
||||
}
|
||||
|
||||
field_0x634 = 0;
|
||||
field_0x635 = 0;
|
||||
field_0x636 = 0;
|
||||
|
||||
field_0x628 = 0xFFFF;
|
||||
mCallCount0 = 0;
|
||||
mCallCount1 = 0;
|
||||
field_0x620 = 6;
|
||||
field_0x624 = 6;
|
||||
|
||||
field_0x637 = 0;
|
||||
field_0x638 = 0;
|
||||
field_0x639 = 0;
|
||||
field_0x63A = 0;
|
||||
field_0x63B = 0;
|
||||
field_0x63C = 0;
|
||||
|
||||
mpOwnerPane = nullptr;
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET].setToEnd();
|
||||
mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET].setAnimEnable(true);
|
||||
}
|
||||
|
||||
mAnm[CROSS_BTN_ANIM_CALL_0].setToEnd();
|
||||
mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(true);
|
||||
mAnm[CROSS_BTN_ANIM_CALL_1].setToEnd();
|
||||
mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(true);
|
||||
mAnm[CROSS_BTN_ANIM_CALL_2].setToEnd();
|
||||
mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(true);
|
||||
|
||||
mLyt.calc();
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
mAnm[i + CROSS_BTN_ANIM_INPUT_OFFSET].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(false);
|
||||
mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(false);
|
||||
mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(false);
|
||||
mAnm[CROSS_BTN_ANIM_LOOP].setAnimEnable(true);
|
||||
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterCrossBtn_c::remove() {
|
||||
for (int i = 0; i < CROSS_BTN_NUM_ANIMS; i++) {
|
||||
mAnm[i].unbind();
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
extern "C" u16 prepareFiHelpIndex();
|
||||
bool dLytMeterCrossBtn_c::execute() {
|
||||
u16 newFiValue = prepareFiHelpIndex();
|
||||
if (newFiValue != field_0x628) {
|
||||
field_0x628 = newFiValue;
|
||||
mCallCount0 = 0;
|
||||
}
|
||||
|
||||
mParts[0].field_0x74 = field_0x624;
|
||||
mParts[1].field_0x74 = field_0x620;
|
||||
|
||||
if (mpOwnerPane != nullptr) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
mParts[i].execute(mpOwnerPane->IsVisible());
|
||||
}
|
||||
}
|
||||
|
||||
mStateMgr.executeState();
|
||||
|
||||
if (StoryflagManager::sInstance->getCounterOrFlag(43)) {
|
||||
field_0x63B = 1;
|
||||
}
|
||||
|
||||
if (field_0x637 != 0) {
|
||||
if (field_0x620 == 0) {
|
||||
f32 frame = dAcPy_c::GetLink2()->getAnmMatClrFrame();
|
||||
if (frame == 0.0f) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_0].setToEnd();
|
||||
if (!mAnm[CROSS_BTN_ANIM_CALL_0].isEnabled()) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(true);
|
||||
}
|
||||
}
|
||||
|
||||
if (mAnm[CROSS_BTN_ANIM_CALL_0].isEnabled()) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_0].play();
|
||||
if (mParts[1].isActive() && mCallCount0 < 3 && mAnm[CROSS_BTN_ANIM_CALL_0].getFrame() == 1.0f) {
|
||||
SmallSoundManager::GetInstance()->playSound(SE_S_SG_CALL);
|
||||
mCallCount0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (field_0x638 == 1) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_0].setToEnd();
|
||||
} else if (mAnm[CROSS_BTN_ANIM_CALL_0].isEnabled()) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_0].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (field_0x639 != 0) {
|
||||
if (field_0x624 == 3) {
|
||||
if (field_0x63A == 0) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_1].setToEnd();
|
||||
mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(true);
|
||||
}
|
||||
if (mAnm[CROSS_BTN_ANIM_CALL_1].isEnabled()) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_1].play();
|
||||
if (mParts[0].isActive() && mCallCount1 < 3 && mAnm[CROSS_BTN_ANIM_CALL_1].getFrame() == 1.0f) {
|
||||
SmallSoundManager::GetInstance()->playSound(SE_S_CATAPULT_READY);
|
||||
mCallCount1++;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (field_0x63A == 1) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_1].setToEnd();
|
||||
} else if (mAnm[CROSS_BTN_ANIM_CALL_1].isEnabled()) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_1].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (field_0x63B != 0) {
|
||||
if (field_0x620 == 2) {
|
||||
if (field_0x63C == 0) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_2].setToEnd();
|
||||
mAnm[CROSS_BTN_ANIM_CALL_2].setRate(2.0f);
|
||||
mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(true);
|
||||
}
|
||||
if (mAnm[CROSS_BTN_ANIM_CALL_2].isEnabled()) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_2].play();
|
||||
if (mParts[1].isActive() && mAnm[CROSS_BTN_ANIM_CALL_2].getFrame() == 1.0f) {
|
||||
SmallSoundManager::GetInstance()->playSound(SE_S_BIRD_CALL);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (field_0x63C == 1) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_2].setToEnd();
|
||||
} else if (mAnm[CROSS_BTN_ANIM_CALL_2].isEnabled()) {
|
||||
mAnm[CROSS_BTN_ANIM_CALL_2].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (mAnm[CROSS_BTN_ANIM_LOOP].isEnabled()) {
|
||||
mAnm[CROSS_BTN_ANIM_LOOP].play();
|
||||
}
|
||||
|
||||
field_0x620 = 6;
|
||||
field_0x624 = 6;
|
||||
// Might be arrays
|
||||
field_0x638 = field_0x637;
|
||||
field_0x637 = 0;
|
||||
field_0x63A = field_0x639;
|
||||
field_0x639 = 0;
|
||||
field_0x63C = field_0x63B;
|
||||
field_0x63B = 0;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void dLytMeterCrossBtn_c::setOwnerPane(nw4r::lyt::Pane *pane) {
|
||||
mpOwnerPane = pane;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
mParts[i].mpOwnerPane = pane;
|
||||
}
|
||||
}
|
||||
|
||||
bool dLytMeterCrossBtn_c::fn_800FA730() const {
|
||||
if (field_0x620 == 2) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return field_0x637 != 0 || field_0x639 != 0 || field_0x63B != 0;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,133 @@
|
||||
#include "d/lyt/meter/d_lyt_meter_event_skip.h"
|
||||
|
||||
#include "d/d_sc_game.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/meter/d_lyt_meter.h"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
|
||||
STATE_DEFINE(dLytMeterEventSkip_c, Invisible);
|
||||
STATE_DEFINE(dLytMeterEventSkip_c, In);
|
||||
STATE_DEFINE(dLytMeterEventSkip_c, Visible);
|
||||
STATE_DEFINE(dLytMeterEventSkip_c, Out);
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{ "skip_00_in.brlan", "G_inOut_00"},
|
||||
{"skip_00_out.brlan", "G_inOut_00"},
|
||||
};
|
||||
|
||||
#define SKIP_ANIM_IN 0
|
||||
#define SKIP_ANIM_OUT 1
|
||||
|
||||
#define SKIP_NUM_ANIMS 2
|
||||
|
||||
void dLytMeterEventSkip_c::initializeState_Invisible() {}
|
||||
void dLytMeterEventSkip_c::executeState_Invisible() {
|
||||
if (shouldPromptForSkip() || dLytMeter_c::GetInstance()->getMeterField_0x13774()) {
|
||||
if (dLytMeter_c::GetInstance()->getMeterField_0x13774()) {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mLyt.fn_800AB9A0(mpTextBoxes[i], 1);
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mLyt.fn_800AB9A0(mpTextBoxes[i], 0);
|
||||
}
|
||||
}
|
||||
|
||||
mpWindow->UpdateSize(mpSizeBox, 32.0f);
|
||||
mVisible = true;
|
||||
mAnm[SKIP_ANIM_IN].setAnimEnable(true);
|
||||
mAnm[SKIP_ANIM_IN].setFrame(0.0f);
|
||||
mStateMgr.changeState(StateID_In);
|
||||
}
|
||||
}
|
||||
void dLytMeterEventSkip_c::finalizeState_Invisible() {}
|
||||
|
||||
void dLytMeterEventSkip_c::initializeState_In() {}
|
||||
void dLytMeterEventSkip_c::executeState_In() {
|
||||
if (mAnm[SKIP_ANIM_IN].isStop2()) {
|
||||
mLyt.calc(); // ???
|
||||
mAnm[SKIP_ANIM_IN].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Visible);
|
||||
}
|
||||
}
|
||||
void dLytMeterEventSkip_c::finalizeState_In() {}
|
||||
|
||||
void dLytMeterEventSkip_c::initializeState_Visible() {}
|
||||
void dLytMeterEventSkip_c::executeState_Visible() {
|
||||
if (!shouldPromptForSkip() && !dLytMeter_c::GetInstance()->getMeterField_0x13774()) {
|
||||
mAnm[SKIP_ANIM_OUT].setAnimEnable(true);
|
||||
mAnm[SKIP_ANIM_OUT].setFrame(0.0f);
|
||||
mStateMgr.changeState(StateID_Out);
|
||||
}
|
||||
}
|
||||
void dLytMeterEventSkip_c::finalizeState_Visible() {}
|
||||
|
||||
void dLytMeterEventSkip_c::initializeState_Out() {}
|
||||
void dLytMeterEventSkip_c::executeState_Out() {
|
||||
if (mAnm[SKIP_ANIM_OUT].isStop2()) {
|
||||
mAnm[SKIP_ANIM_OUT].setAnimEnable(false);
|
||||
mVisible = false;
|
||||
mStateMgr.changeState(StateID_Invisible);
|
||||
}
|
||||
}
|
||||
void dLytMeterEventSkip_c::finalizeState_Out() {}
|
||||
|
||||
static const char *sTextBoxes[] = {
|
||||
"T_skipText_00",
|
||||
"T_skipTextS_00",
|
||||
};
|
||||
|
||||
bool dLytMeterEventSkip_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("skip_00.brlyt", nullptr);
|
||||
|
||||
for (int i = 0; i < SKIP_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 < 2; i++) {
|
||||
mpTextBoxes[i] = mLyt.getTextBox(sTextBoxes[i]);
|
||||
}
|
||||
|
||||
mpWindow = mLyt.getWindow("W_bgP_00");
|
||||
mpSizeBox = mLyt.getSizeBoxInWindow("W_bgP_00");
|
||||
mpWindow->UpdateSize(mpSizeBox, 32.0f);
|
||||
mLyt.setPriority(0x8A);
|
||||
mVisible = false;
|
||||
mStateMgr.changeState(StateID_Invisible);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterEventSkip_c::remove() {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterEventSkip_c::execute() {
|
||||
mStateMgr.executeState();
|
||||
if (mVisible) {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
if (mAnm[i].isEnabled()) {
|
||||
mAnm[i].play();
|
||||
}
|
||||
}
|
||||
mLyt.calc();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterEventSkip_c::draw() {
|
||||
if (mVisible) {
|
||||
mLyt.addToDrawList();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterEventSkip_c::shouldPromptForSkip() const {
|
||||
return dScGame_c::currentSpawnInfo.stageName == "Demo" ? false : EventManager::canSkipCurrentEvent();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
#include "d/lyt/meter/d_lyt_meter_ganbari_gauge.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/d_camera.h"
|
||||
#include "d/d_sc_game.h"
|
||||
#include "d/lyt/d_lyt_meter_configuration.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "toBeSorted/d_d3d.h"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
#include "toBeSorted/file_manager.h"
|
||||
|
||||
STATE_DEFINE(dLytMeterGanbariGauge_c, InvisibleWait);
|
||||
STATE_DEFINE(dLytMeterGanbariGauge_c, In);
|
||||
STATE_DEFINE(dLytMeterGanbariGauge_c, Wait);
|
||||
@@ -14,80 +24,704 @@ STATE_DEFINE(dLytMeterGanbariGauge_c, ToMin);
|
||||
STATE_DEFINE(dLytMeterGanbariGauge_c, Recovery);
|
||||
STATE_DEFINE(dLytMeterGanbariGauge_c, ToMax);
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_InvisibleWait() {}
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{ "guts_00_in.brlan", "G_inOut_00"},
|
||||
{ "guts_00_angle.brlan", "G_angle_00"},
|
||||
{"guts_00_ganbariUpDown.brlan", "G_ganbari_00"},
|
||||
{"guts_00_ganbariUpDown.brlan", "G_ganbari_01"},
|
||||
{ "guts_00_ganbariUse.brlan", "G_ganbari_01"},
|
||||
{ "guts_00_ganbariLoop.brlan", "G_ganbariLoop_00"},
|
||||
{ "guts_00_drink.brlan", "G_drink_00"},
|
||||
{ "guts_00_mLoop.brlan", "G_mLoop_00"},
|
||||
{ "guts_00_mCaution.brlan", "G_mCaution_00"},
|
||||
{ "guts_00_caution.brlan", "G_caution_00"},
|
||||
{ "guts_00_toMin.brlan", "G_minMax_00"},
|
||||
{ "guts_00_toMinLoop.brlan", "G_toMinLoop"},
|
||||
{ "guts_00_toMax.brlan", "G_minMax_00"},
|
||||
{ "guts_00_color.brlan", "G_color_00"},
|
||||
{ "guts_00_out.brlan", "G_inOut_00"},
|
||||
{ "guts_00_cameraOut.brlan", "G_inOut_00"},
|
||||
};
|
||||
|
||||
#define GANBARI_ANIM_IN 0
|
||||
#define GANBARI_ANIM_ANGLE 1
|
||||
#define GANBARI_ANIM_UPDOWN_0 2
|
||||
#define GANBARI_ANIM_UPDOWN_1 3
|
||||
#define GANBARI_ANIM_USE 4
|
||||
#define GANBARI_ANIM_LOOP 5
|
||||
#define GANBARI_ANIM_DRINK 6
|
||||
#define GANBARI_ANIM_M_LOOP 7
|
||||
#define GANBARI_ANIM_M_CAUTION 8
|
||||
#define GANBARI_ANIM_CAUTION 9
|
||||
#define GANBARI_ANIM_TO_MIN 10
|
||||
#define GANBARI_ANIM_TO_MIN_LOOP 11
|
||||
#define GANBARI_ANIM_TO_MAX 12
|
||||
#define GANBARI_ANIM_COLOR 13
|
||||
#define GANBARI_ANIM_OUT 14
|
||||
#define GANBARI_ANIM_CAMERA_OUT 15
|
||||
|
||||
#define GANBARI_NUM_ANIMS 16
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_InvisibleWait() {
|
||||
mAnm[GANBARI_ANIM_IN].setToStart();
|
||||
mAnm[GANBARI_ANIM_IN].setAnimEnable(true);
|
||||
mLyt.calc();
|
||||
mAnm[GANBARI_ANIM_IN].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_OUT].setAnimEnable(false);
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::executeState_InvisibleWait() {}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_InvisibleWait() {}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_In() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_In() {}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_In() {}
|
||||
void dLytMeterGanbariGauge_c::initializeState_In() {
|
||||
if (dAcPy_c::GetLink()->getRidingActorType() == dAcPy_c::RIDING_BOAT) {
|
||||
field_0x554 = 3.0f;
|
||||
} else if (swimmingRelated()) {
|
||||
field_0x554 = 1.0f;
|
||||
} else {
|
||||
field_0x554 = 0.0f;
|
||||
}
|
||||
mAnm[GANBARI_ANIM_IN].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_IN].setFrame(0.0f);
|
||||
}
|
||||
#pragma pool_data off
|
||||
void dLytMeterGanbariGauge_c::executeState_In() {
|
||||
if (mAnm[GANBARI_ANIM_IN].getFrame() == 1.0f) {
|
||||
realizeAnimState();
|
||||
if (*mStateMgrWheel.getStateID() == StateID_Caution || *mStateMgrWheel.getStateID() == StateID_ToMin ||
|
||||
*mStateMgrWheel.getStateID() == StateID_Recovery || *mStateMgrWheel.getStateID() == StateID_ToMax) {
|
||||
if (mStaminaPercent > 0.95f) {
|
||||
mStateMgrWheel.changeState(StateID_Normal);
|
||||
} else {
|
||||
mStateMgrWheel.changeState(*mStateMgrWheel.getStateID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (mAnm[GANBARI_ANIM_IN].isEndReached()) {
|
||||
mAnm[GANBARI_ANIM_IN].setAnimEnable(false);
|
||||
mStateMgrMain.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
#pragma pool_data on
|
||||
void dLytMeterGanbariGauge_c::finalizeState_In() {
|
||||
mAnm[GANBARI_ANIM_IN].setAnimEnable(false);
|
||||
}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_Wait() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_Wait() {}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_OutWait() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_OutWait() {}
|
||||
void dLytMeterGanbariGauge_c::initializeState_OutWait() {
|
||||
mOutWaitTimer = 0x1E;
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::executeState_OutWait() {
|
||||
if (--mOutWaitTimer <= 0) {
|
||||
mStateMgrMain.changeState(StateID_Out);
|
||||
} else if (mStaminaPercent < 0.9999f) {
|
||||
mStateMgrMain.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_OutWait() {}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_Out() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_Out() {}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_Out() {}
|
||||
void dLytMeterGanbariGauge_c::initializeState_Out() {
|
||||
mAnm[GANBARI_ANIM_IN].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_OUT].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_OUT].setFrame(0.0f);
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::executeState_Out() {
|
||||
if (mAnm[GANBARI_ANIM_OUT].isEndReached()) {
|
||||
mLyt.calc();
|
||||
mStateMgrMain.changeState(StateID_InvisibleWait);
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_Out() {
|
||||
mAnm[GANBARI_ANIM_OUT].setAnimEnable(false);
|
||||
}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_CameraOut() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_CameraOut() {}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_CameraOut() {}
|
||||
void dLytMeterGanbariGauge_c::initializeState_CameraOut() {
|
||||
mAnm[GANBARI_ANIM_CAMERA_OUT].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_CAMERA_OUT].setFrame(0.0f);
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::executeState_CameraOut() {
|
||||
if (mAnm[GANBARI_ANIM_CAMERA_OUT].isEndReached()) {
|
||||
mLyt.calc();
|
||||
mStateMgrMain.changeState(StateID_InvisibleWait);
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_CameraOut() {
|
||||
mAnm[GANBARI_ANIM_CAMERA_OUT].setAnimEnable(false);
|
||||
}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_Full() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_Full() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_Full() {
|
||||
if (mStaminaPercent < 0.9999f) {
|
||||
mStateMgrWheel.changeState(StateID_Normal);
|
||||
} else if (dAcPy_c::GetLink()->checkSwordAndMoreStates(0x200 | 0x40 | 0x20) || field_0x558 != 0) {
|
||||
mStateMgrWheel.changeState(StateID_FullGutsUse);
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_Full() {}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_FullGutsUse() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_FullGutsUse() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_FullGutsUse() {
|
||||
if (mStaminaPercent < 0.9999f) {
|
||||
mStateMgrWheel.changeState(StateID_Normal);
|
||||
} else if (!dAcPy_c::GetLink()->checkSwordAndMoreStates(0x200 | 0x40 | 0x20) && field_0x558 == 0) {
|
||||
mStateMgrWheel.changeState(StateID_Full);
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_FullGutsUse() {}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_Normal() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_Normal() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_Normal() {
|
||||
if (isStaminaLow(mStaminaPercent)) {
|
||||
mAnm[GANBARI_ANIM_CAUTION].setRate(1.0f);
|
||||
mStateMgrWheel.changeState(StateID_Caution);
|
||||
} else if (isStaminaCritical(mStaminaPercent)) {
|
||||
mAnm[GANBARI_ANIM_CAUTION].setRate(3.0f);
|
||||
mStateMgrWheel.changeState(StateID_Caution);
|
||||
} else if (mStaminaPercent >= 0.9999f) {
|
||||
mStateMgrWheel.changeState(StateID_ToMax);
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_Normal() {}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_Caution() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_Caution() {}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_Caution() {}
|
||||
void dLytMeterGanbariGauge_c::initializeState_Caution() {
|
||||
mAnm[GANBARI_ANIM_CAUTION].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_CAUTION].setFrame(0.0f);
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::executeState_Caution() {
|
||||
if (mStaminaPercent <= 0.0001f) {
|
||||
mStateMgrWheel.changeState(StateID_ToMin);
|
||||
} else if (isStaminaCritical(mStaminaPercent)) {
|
||||
mAnm[GANBARI_ANIM_CAUTION].setRate(3.0f);
|
||||
} else if (isStaminaLow(mStaminaPercent)) {
|
||||
mAnm[GANBARI_ANIM_CAUTION].setRate(1.0f);
|
||||
} else {
|
||||
mStateMgrWheel.changeState(StateID_Normal);
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_Caution() {
|
||||
mAnm[GANBARI_ANIM_CAUTION].setFrame(0.0f);
|
||||
mLyt.calc();
|
||||
mAnm[GANBARI_ANIM_CAUTION].setAnimEnable(false);
|
||||
}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_ToMin() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_ToMin() {}
|
||||
void dLytMeterGanbariGauge_c::initializeState_ToMin() {
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(0.0f);
|
||||
mLyt.calc();
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(false);
|
||||
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setToStart();
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::executeState_ToMin() {
|
||||
if (mStaminaPercent >= 0.9999f) {
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setToStart();
|
||||
mLyt.calc();
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(false);
|
||||
mStateMgrWheel.changeState(StateID_ToMax);
|
||||
} else if (mAnm[GANBARI_ANIM_TO_MIN].isEndReached()) {
|
||||
mStateMgrWheel.changeState(StateID_Recovery);
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_ToMin() {}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_Recovery() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_Recovery() {}
|
||||
void dLytMeterGanbariGauge_c::initializeState_Recovery() {
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setToEnd2();
|
||||
mLyt.calc();
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(false);
|
||||
|
||||
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setFrame(0.0f);
|
||||
|
||||
if (dAcPy_c::GetLink()->getRidingActorType() == dAcPy_c::RIDING_BOAT) {
|
||||
field_0x554 = 4.0f;
|
||||
} else if (swimmingRelated()) {
|
||||
field_0x554 = 1.0f;
|
||||
} else {
|
||||
field_0x554 = 2.0f;
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::executeState_Recovery() {
|
||||
if (swimmingRelated()) {
|
||||
if (mStaminaPercent >= 0.0001f) {
|
||||
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setFrame(0.0f);
|
||||
mAnm[GANBARI_ANIM_TO_MAX].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_TO_MAX].setToEnd2();
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(0.0f);
|
||||
mLyt.calc();
|
||||
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_TO_MAX].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(false);
|
||||
mStateMgrWheel.changeState(StateID_Normal);
|
||||
}
|
||||
} else if (mStaminaPercent >= 0.9999f) {
|
||||
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setFrame(0.0f);
|
||||
mLyt.calc();
|
||||
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setAnimEnable(false);
|
||||
mStateMgrWheel.changeState(StateID_ToMax);
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_Recovery() {}
|
||||
|
||||
void dLytMeterGanbariGauge_c::initializeState_ToMax() {}
|
||||
void dLytMeterGanbariGauge_c::executeState_ToMax() {}
|
||||
void dLytMeterGanbariGauge_c::initializeState_ToMax() {
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setToStart();
|
||||
mLyt.calc();
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_TO_MAX].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_TO_MAX].setToStart();
|
||||
if (swimmingRelated()) {
|
||||
field_0x554 = 1.0f;
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::executeState_ToMax() {
|
||||
if (mAnm[GANBARI_ANIM_TO_MAX].isStop2()) {
|
||||
realizeAnimState();
|
||||
if (dAcPy_c::GetLink()->checkSwordAndMoreStates(0x200 | 0x40 | 0x20)) {
|
||||
mStateMgrWheel.changeState(StateID_FullGutsUse);
|
||||
} else {
|
||||
mStateMgrWheel.changeState(StateID_Full);
|
||||
}
|
||||
}
|
||||
}
|
||||
void dLytMeterGanbariGauge_c::finalizeState_ToMax() {}
|
||||
|
||||
bool dLytMeterGanbariGauge_c::isStaminaLow(f32 arg) {
|
||||
if (swimmingRelated()) {
|
||||
return arg <= 0.125f;
|
||||
} else {
|
||||
return arg <= 0.3f;
|
||||
}
|
||||
}
|
||||
|
||||
bool dLytMeterGanbariGauge_c::isStaminaCritical(f32 arg) {
|
||||
if (swimmingRelated()) {
|
||||
return false;
|
||||
} else {
|
||||
return arg <= 0.1f;
|
||||
}
|
||||
}
|
||||
|
||||
bool dLytMeterGanbariGauge_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
// TODO
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("guts_00.brlyt", nullptr);
|
||||
|
||||
for (int i = 0; i < GANBARI_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(true);
|
||||
}
|
||||
|
||||
mAnm[GANBARI_ANIM_USE].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_LOOP].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_M_LOOP].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_M_CAUTION].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_OUT].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_CAMERA_OUT].setAnimEnable(false);
|
||||
|
||||
mStaminaPercent = 1.0f;
|
||||
field_0x51C = 1.0f;
|
||||
field_0x54C = 1.0f;
|
||||
field_0x550 = 1.0f;
|
||||
|
||||
field_0x548 = dLytMeterConfiguration_c::sInstance->field_0x1C8;
|
||||
|
||||
field_0x558 = 0;
|
||||
field_0x559 = 0;
|
||||
field_0x55B = 0;
|
||||
mpOwnerPane = nullptr;
|
||||
field_0x55A = 0;
|
||||
|
||||
field_0x554 = 0.0f;
|
||||
|
||||
mOutWaitTimer = 0x1E;
|
||||
field_0x540 = 0;
|
||||
field_0x534 = 0;
|
||||
|
||||
if (dLytMeterConfiguration_c::sInstance->field_0x13C != 0) {
|
||||
field_0x534 = 0;
|
||||
} else {
|
||||
field_0x534 = 1;
|
||||
}
|
||||
|
||||
if (field_0x534 == 0) {
|
||||
mAnm[GANBARI_ANIM_IN].setToStart();
|
||||
} else {
|
||||
mAnm[GANBARI_ANIM_IN].setToEnd2();
|
||||
}
|
||||
|
||||
mAnm[GANBARI_ANIM_IN].setAnimEnable(true);
|
||||
realizeAnimState();
|
||||
mAnm[GANBARI_ANIM_IN].setAnimEnable(false);
|
||||
|
||||
field_0x524.copyFrom(mLyt.getLayout()->GetRootPane()->GetTranslate());
|
||||
field_0x530 = 0;
|
||||
field_0x544 = 0;
|
||||
|
||||
if (field_0x534 == 0) {
|
||||
mStateMgrMain.changeState(StateID_InvisibleWait);
|
||||
} else {
|
||||
mStateMgrMain.changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
mStateMgrWheel.changeState(StateID_Full);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterGanbariGauge_c::remove() {
|
||||
for (int i = 0; i < GANBARI_NUM_ANIMS; i++) {
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterGanbariGauge_c::execute() {
|
||||
// TODO
|
||||
if (mpOwnerPane == nullptr) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!mpOwnerPane->IsVisible()) {
|
||||
if (*mStateMgrMain.getStateID() != StateID_InvisibleWait) {
|
||||
mStateMgrMain.changeState(StateID_InvisibleWait);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (fn_80104710(false) || (isCrawling() && !fn_801047B0())) {
|
||||
field_0x534 = 1;
|
||||
} else if (dLytMeterConfiguration_c::GetInstance()->field_0x13C) {
|
||||
field_0x534 = 0;
|
||||
} else {
|
||||
field_0x534 = 1;
|
||||
}
|
||||
|
||||
bool b12 = false;
|
||||
field_0x558 = 0;
|
||||
f32 drinkFrame = 0.0f;
|
||||
if (displayAirInsteadOfStamina()) {
|
||||
if (FileManager::GetInstance()->hasAirPotionPlus() || FileManager::GetInstance()->hasAirPotionNormal()) {
|
||||
b12 = true;
|
||||
if ((FileManager::GetInstance()->hasAirPotionNormal() &&
|
||||
FileManager::GetInstance()->getAirPotionTimer() < 600) ||
|
||||
(FileManager::GetInstance()->hasAirPotionPlus() &&
|
||||
FileManager::GetInstance()->getAirPotionPlusTimer() < 600)) {
|
||||
field_0x558 = 1;
|
||||
}
|
||||
if (FileManager::GetInstance()->hasAirPotionPlus()) {
|
||||
drinkFrame = 3.0f;
|
||||
} else if (FileManager::GetInstance()->hasAirPotionNormal()) {
|
||||
drinkFrame = 1.0f;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (dAcPy_c::GetLink()->isAffectedByStaminaPotionPlus() || dAcPy_c::GetLink()->isAffectedByStaminaPotion()) {
|
||||
b12 = true;
|
||||
if ((dAcPy_c::GetLink()->isAffectedByStaminaPotion() &&
|
||||
FileManager::GetInstance()->getStaminaPotionTimer() < 600) ||
|
||||
(dAcPy_c::GetLink()->isAffectedByStaminaPotionPlus() &&
|
||||
FileManager::GetInstance()->getStaminaPotionPlusTimer() < 600)) {
|
||||
field_0x558 = 1;
|
||||
}
|
||||
if (dAcPy_c::GetLink()->isAffectedByStaminaPotionPlus()) {
|
||||
drinkFrame = 2.0f;
|
||||
} else if (dAcPy_c::GetLink()->isAffectedByStaminaPotion()) {
|
||||
drinkFrame = 1.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mVec3_c diff = dAcPy_c::GetLink()->poscopy3 - dScGame_c::getCamera(0)->getPositionMaybe();
|
||||
f32 len = diff.mag();
|
||||
mVec3_c v;
|
||||
d3d::fn_80016960(v, dAcPy_c::GetLink()->poscopy3);
|
||||
if (!EventManager::isInEvent()) {
|
||||
field_0x524 = v;
|
||||
}
|
||||
|
||||
s32 angle = 0;
|
||||
mVec3_c v1(field_0x524);
|
||||
mVec2_c v2(0.0f, 0.0f);
|
||||
if (fn_80104710(true)) {
|
||||
field_0x540 = 5;
|
||||
} else if (field_0x540 > 0 && *mStateMgrMain.getStateID() == StateID_Wait) {
|
||||
mStateMgrMain.changeState(StateID_CameraOut);
|
||||
}
|
||||
|
||||
f32 scale;
|
||||
if (fn_80104710(false) || (isCrawling() && !fn_801047B0())) {
|
||||
if (dAcPy_c::GetLink()->getRidingActorType() == dAcPy_c::RIDING_BOAT) {
|
||||
angle = 4;
|
||||
v1.x = 232.0f;
|
||||
v1.y = 145.0f;
|
||||
scale = 1.12f;
|
||||
} else if (displayAirInsteadOfStamina()) {
|
||||
angle = 2;
|
||||
scale = 1.45f;
|
||||
v1.x = 232.0f;
|
||||
v1.y = 145.0f;
|
||||
} else {
|
||||
angle = 2;
|
||||
scale = 1.3f;
|
||||
v1.x = 232.0f;
|
||||
v1.y = 145.0f;
|
||||
}
|
||||
} else if (fn_801047B0()) {
|
||||
v2.set(-32.0f, -40.0f);
|
||||
scale = 0.8f;
|
||||
} else if (field_0x55B) {
|
||||
v2.x = -44.0f;
|
||||
v2.y = -105.0f;
|
||||
v2.y += 46.0f;
|
||||
scale = 1.0f;
|
||||
} else if (dAcPy_c::GetLink()->getRidingActorType() == dAcPy_c::RIDING_BOAT) {
|
||||
angle = 3;
|
||||
v2.set(-95.0f, -50.0f);
|
||||
scale = 0.9f;
|
||||
} else if (field_0x559 && swimmingRelated()) {
|
||||
angle = 1;
|
||||
v2.set(-65.0f, 0.0f);
|
||||
scale = 1.0f;
|
||||
} else if (field_0x534 == 0) {
|
||||
v2.set(-44.0f, -105.0f);
|
||||
scale = 1.0f;
|
||||
} else {
|
||||
v1.x = 216.0f;
|
||||
v1.y = -60.0f;
|
||||
scale = 1.4f;
|
||||
}
|
||||
|
||||
v1.x = v1.x + v2.x;
|
||||
v1.y = v1.y + v2.y;
|
||||
v1.z = 0.0f;
|
||||
mLyt.getLayout()->GetRootPane()->SetTranslate(v1);
|
||||
mVec2_c scaleV(scale, scale);
|
||||
mLyt.getLayout()->GetRootPane()->SetScale(scaleV);
|
||||
|
||||
if (!field_0x534 && len <= dLytMeterConfiguration_c::GetInstance()->field_0x138 && !fn_80104710(false) &&
|
||||
!isCrawling()) {
|
||||
field_0x530 = 1;
|
||||
} else {
|
||||
field_0x530 = 0;
|
||||
}
|
||||
|
||||
for (int i = 0; i < GANBARI_NUM_ANIMS; i++) {
|
||||
if (i != GANBARI_ANIM_ANGLE && i != GANBARI_ANIM_UPDOWN_0 && i != GANBARI_ANIM_UPDOWN_1 &&
|
||||
i != GANBARI_ANIM_USE && i != GANBARI_ANIM_COLOR && i != GANBARI_ANIM_DRINK) {
|
||||
if (mAnm[i].isEnabled()) {
|
||||
mAnm[i].play();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mAnm[GANBARI_ANIM_UPDOWN_0].setFrame(mStaminaPercent * 100.0f);
|
||||
mAnm[GANBARI_ANIM_ANGLE].setFrame(angle);
|
||||
|
||||
mStateMgrWheel.executeState();
|
||||
|
||||
if (field_0x544 != 0) {
|
||||
if (mStaminaPercent < field_0x550 &&
|
||||
mStaminaPercent < field_0x51C - dLytMeterConfiguration_c::GetInstance()->getField_0x1CC()) {
|
||||
field_0x548 = dLytMeterConfiguration_c::GetInstance()->getField_0x1C8();
|
||||
field_0x54C = field_0x51C;
|
||||
field_0x550 = mStaminaPercent;
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(field_0x54C * 100.0f);
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
|
||||
} else {
|
||||
if (field_0x548 > 0) {
|
||||
field_0x548--;
|
||||
}
|
||||
if (field_0x548 == 0) {
|
||||
field_0x54C -= dLytMeterConfiguration_c::GetInstance()->getField_0x1D0();
|
||||
if (field_0x54C < mStaminaPercent) {
|
||||
field_0x544 = 0;
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(0.0f);
|
||||
mLyt.calc();
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(false);
|
||||
} else {
|
||||
f32 frame = field_0x54C * 100.0f;
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(frame);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mStaminaPercent < field_0x51C - dLytMeterConfiguration_c::GetInstance()->getField_0x1C4()) {
|
||||
field_0x544 = 1;
|
||||
field_0x54C = field_0x51C;
|
||||
field_0x550 = mStaminaPercent;
|
||||
field_0x548 = dLytMeterConfiguration_c::GetInstance()->getField_0x1C8();
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(field_0x54C * 100.0f);
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
|
||||
} else {
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(mStaminaPercent * 100.0f);
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
|
||||
}
|
||||
}
|
||||
|
||||
if (b12) {
|
||||
if (!mAnm[GANBARI_ANIM_M_LOOP].isEnabled()) {
|
||||
mAnm[GANBARI_ANIM_M_LOOP].setFrame(0.0f);
|
||||
mAnm[GANBARI_ANIM_M_LOOP].setAnimEnable(true);
|
||||
}
|
||||
} else if (mAnm[GANBARI_ANIM_M_LOOP].getFrame() < 1.0f) {
|
||||
mAnm[GANBARI_ANIM_M_LOOP].setFrame(0.0f);
|
||||
mAnm[GANBARI_ANIM_M_LOOP].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (b12 && field_0x558) {
|
||||
if (!mAnm[GANBARI_ANIM_M_CAUTION].isEnabled()) {
|
||||
mAnm[GANBARI_ANIM_M_CAUTION].setFrame(0.0f);
|
||||
mAnm[GANBARI_ANIM_M_CAUTION].setAnimEnable(true);
|
||||
}
|
||||
} else if (mAnm[GANBARI_ANIM_M_CAUTION].getFrame() < 1.0f) {
|
||||
mAnm[GANBARI_ANIM_M_CAUTION].setFrame(0.0f);
|
||||
mAnm[GANBARI_ANIM_M_CAUTION].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (!b12 && mStaminaPercent < field_0x51C) {
|
||||
if (!mAnm[GANBARI_ANIM_LOOP].isEnabled()) {
|
||||
mAnm[GANBARI_ANIM_LOOP].setFrame(0.0f);
|
||||
mAnm[GANBARI_ANIM_LOOP].setAnimEnable(true);
|
||||
}
|
||||
} else if (mAnm[GANBARI_ANIM_LOOP].getFrame() < 1.0f) {
|
||||
mAnm[GANBARI_ANIM_LOOP].setFrame(0.0f);
|
||||
mAnm[GANBARI_ANIM_LOOP].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mAnm[GANBARI_ANIM_COLOR].setFrame(field_0x554);
|
||||
mAnm[GANBARI_ANIM_COLOR].setAnimEnable(true);
|
||||
|
||||
mAnm[GANBARI_ANIM_DRINK].setFrame(drinkFrame);
|
||||
mAnm[GANBARI_ANIM_DRINK].setAnimEnable(true);
|
||||
|
||||
if (!EventManager::isInEvent() && !dAcPy_c::GetLink()->hasvt_0x1C0() &&
|
||||
!dAcPy_c::GetLink()->checkActionFlagsCont(0x10) &&
|
||||
(d3d::fn_80016A90(dAcPy_c::GetLink()->poscopy3) || fn_80104710(false) || isCrawling()) &&
|
||||
*mStateMgrWheel.getStateID() != StateID_Full && *mStateMgrMain.getStateID() == StateID_InvisibleWait &&
|
||||
!field_0x530) {
|
||||
mStateMgrMain.changeState(StateID_In);
|
||||
} else if (!EventManager::isInEvent() && *mStateMgrWheel.getStateID() == StateID_Full &&
|
||||
*mStateMgrWheel.getOldStateID() != StateID_Full && *mStateMgrMain.getStateID() == StateID_Wait) {
|
||||
mStateMgrMain.changeState(StateID_OutWait);
|
||||
} else if ((EventManager::isInEvent() || dAcPy_c::GetLink()->hasvt_0x1C0() ||
|
||||
dAcPy_c::GetLink()->checkActionFlagsCont(0x10) ||
|
||||
(!d3d::fn_80016A90(dAcPy_c::GetLink()->poscopy3) && !fn_80104710(false) && !isCrawling())) &&
|
||||
*mStateMgrMain.getStateID() == StateID_Wait) {
|
||||
mStateMgrMain.changeState(StateID_CameraOut);
|
||||
} else if (field_0x530 && *mStateMgrMain.getStateID() == StateID_Wait) {
|
||||
mStateMgrMain.changeState(StateID_CameraOut);
|
||||
}
|
||||
|
||||
if (field_0x540 > 0) {
|
||||
field_0x540--;
|
||||
}
|
||||
|
||||
if (field_0x55A != swimmingRelated() && *mStateMgrMain.getStateID() == StateID_Wait) {
|
||||
mStateMgrMain.changeState(StateID_Out);
|
||||
field_0x55A = swimmingRelated();
|
||||
}
|
||||
|
||||
mStateMgrMain.executeState();
|
||||
field_0x51C = mStaminaPercent;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
const char *dLytMeterGanbariGauge_c::getName() const {
|
||||
return mLyt.getName();
|
||||
bool dLytMeterGanbariGauge_c::fn_80104710(bool arg) const {
|
||||
if (dAcPy_c::GetLink() != nullptr &&
|
||||
dAcPy_c::GetLink()->checkActionFlagsCont(0x400 | 0x100 | 0x80 | 0x40 | 0x10 | 0x4 | 0x2 | 0x1) &&
|
||||
dAcPy_c::GetLink()->checkActionFlagsCont(0x40)) {
|
||||
return true;
|
||||
}
|
||||
if (!arg && field_0x540 > 0) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
d2d::LytBase_c *dLytMeterGanbariGauge_c::getLyt() {
|
||||
return &mLyt;
|
||||
bool dLytMeterGanbariGauge_c::fn_80104760() const {
|
||||
const dAcPy_c *link = dAcPy_c::GetLink();
|
||||
if (link != nullptr &&
|
||||
(link->checkActionFlagsCont(0x2) || link->checkActionFlagsCont(0x80) || link->checkActionFlagsCont(0x4) ||
|
||||
link->checkActionFlagsCont(0x10) || link->checkActionFlagsCont(0x100))) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
nw4r::lyt::Pane *dLytMeterGanbariGauge_c::getPane() {
|
||||
return mLyt.getLayout()->GetRootPane();
|
||||
bool dLytMeterGanbariGauge_c::fn_801047B0() const {
|
||||
if (fn_80081FE0(dScGame_c::getCamera(0)->getField_0xD98(), "mogu") ||
|
||||
fn_80081FE0(dScGame_c::getCamera(0)->getField_0xD98(), "mogu2")) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dLytMeterGanbariGauge_c::isCrawling() const {
|
||||
return dAcPy_c::GetLink()->checkActionFlags(dAcPy_c::FLG0_CRAWLING);
|
||||
}
|
||||
|
||||
bool dLytMeterGanbariGauge_c::swimmingRelated() {
|
||||
if (!dAcPy_c::GetLink()->checkFlags0x340(0x100) || dAcPy_c::GetLink()->getCurrentAction() == 0x57 ||
|
||||
dAcPy_c::GetLink()->checkActionFlags(dAcPy_c::FLG0_IN_WATER)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool dLytMeterGanbariGauge_c::displayAirInsteadOfStamina() {
|
||||
if (field_0x554 == 1.0f) {
|
||||
return true;
|
||||
}
|
||||
if (field_0x554 == 2.0f && swimmingRelated()) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void dLytMeterGanbariGauge_c::realizeAnimState() {
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setToStart();
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(true);
|
||||
|
||||
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setFrame(0.0f);
|
||||
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setAnimEnable(true);
|
||||
|
||||
mAnm[GANBARI_ANIM_TO_MAX].setToEnd2();
|
||||
mAnm[GANBARI_ANIM_TO_MAX].setAnimEnable(true);
|
||||
|
||||
mAnm[GANBARI_ANIM_CAUTION].setFrame(0.0f);
|
||||
mAnm[GANBARI_ANIM_CAUTION].setAnimEnable(true);
|
||||
|
||||
// okay
|
||||
mAnm[GANBARI_ANIM_USE].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_USE].setAnimEnable(true);
|
||||
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(true);
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setFrame(0.0f);
|
||||
|
||||
mLyt.calc();
|
||||
|
||||
mAnm[GANBARI_ANIM_TO_MIN].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_TO_MIN_LOOP].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_TO_MAX].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_CAUTION].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_USE].setAnimEnable(false);
|
||||
mAnm[GANBARI_ANIM_UPDOWN_1].setAnimEnable(false);
|
||||
|
||||
if (dAcPy_c::GetLink() != nullptr) {
|
||||
if (dAcPy_c::GetLink()->getRidingActorType() == dAcPy_c::RIDING_BOAT) {
|
||||
field_0x554 = 3.0f;
|
||||
} else if (swimmingRelated()) {
|
||||
field_0x554 = 1.0f;
|
||||
} else {
|
||||
field_0x554 = 0.0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,382 @@
|
||||
#include "d/lyt/meter/d_lyt_meter_heart.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/d_sc_game.h"
|
||||
#include "d/lyt/d2d.h"
|
||||
#include "d/lyt/d_lyt_game_over.h"
|
||||
#include "nw4r/math/math_types.h"
|
||||
#include "toBeSorted/effects_struct.h"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
#include "toBeSorted/file_manager.h"
|
||||
#include "toBeSorted/small_sound_mgr.h"
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{ "heartAll_00_heat.brlan", "G_heart_00"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_01"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_02"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_03"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_04"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_05"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_06"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_07"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_08"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_09"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_10"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_11"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_12"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_13"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_14"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_15"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_16"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_17"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_18"},
|
||||
{ "heartAll_00_heat.brlan", "G_heart_19"},
|
||||
{"heartAll_00_heartMain.brlan", "G_heartMain_00"},
|
||||
{ "heartAll_00_drink.brlan", "G_drink_00"},
|
||||
{ "heartAll_00_mLoop.brlan", "G_mLoop_00"},
|
||||
{ "heartAll_00_mCaution.brlan", "G_mCaution_00"},
|
||||
{ "heartAll_00_loop.brlan", "G_loop_00"},
|
||||
{ "heartAll_00_danger.brlan", "G_danger_00"},
|
||||
};
|
||||
|
||||
#define HEART_ANIM_HEAT_OFFSET 0
|
||||
#define HEART_ANIM_MAIN 20
|
||||
#define HEART_ANIM_DRINK 21
|
||||
#define HEART_ANIM_MLOOP 22
|
||||
#define HEART_ANIM_MCAUTION 23
|
||||
#define HEART_ANIM_LOOP 24
|
||||
#define HEART_ANIM_DANGER 25
|
||||
|
||||
#define HEART_NUM_ANIMS 26
|
||||
|
||||
#define HEART_NUM_HEARTS 20
|
||||
|
||||
static const char *sPaneNames[] = {
|
||||
"N_heart_00", "N_heart_01", "N_heart_02", "N_heart_03", "N_heart_04", "N_heart_05", "N_heart_06",
|
||||
"N_heart_07", "N_heart_08", "N_heart_09", "N_heart_10", "N_heart_11", "N_heart_12", "N_heart_13",
|
||||
"N_heart_14", "N_heart_15", "N_heart_16", "N_heart_17", "N_heart_18", "N_heart_19",
|
||||
|
||||
};
|
||||
|
||||
bool dLytMeterHeart_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("heartAll_00.brlyt", nullptr);
|
||||
|
||||
for (int i = 0; i < HEART_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
if (i <= HEART_NUM_HEARTS) {
|
||||
mAnm[i].setAnimEnable(true);
|
||||
} else {
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < HEART_NUM_HEARTS; i++) {
|
||||
mpHeartPanes[i] = mLyt.findPane(sPaneNames[i]);
|
||||
}
|
||||
|
||||
mpAlphaPane = mLyt.findPane("N_heartAlpha_00");
|
||||
mpMainPane = mLyt.findPane("N_heartMain_00");
|
||||
|
||||
mCurrentHealth = 0;
|
||||
mCurrentHealthCapacity = 0;
|
||||
mStoredHealth = 0;
|
||||
mStoredHealthCapacity = 0;
|
||||
mHealthCapacityIncreaseDelayTimer = 0;
|
||||
mEffectHeartIdx = -1;
|
||||
field_0x78C = 0;
|
||||
field_0x790 = 0;
|
||||
field_0x794 = 0;
|
||||
field_0x797 = 0;
|
||||
mIsLoop = false;
|
||||
mIsDanger = false;
|
||||
field_0x79A = 0;
|
||||
|
||||
mCurrentHealth = getCurrentHealth();
|
||||
mCurrentHealthCapacity = getCurrentHealthCapacity();
|
||||
mStoredHealth = mCurrentHealth;
|
||||
mStoredHealthCapacity = mCurrentHealthCapacity;
|
||||
field_0x794 = 1;
|
||||
realizeHeartsState();
|
||||
field_0x795 = 1;
|
||||
|
||||
mLyt.calc();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterHeart_c::remove() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterHeart_c::execute() {
|
||||
if (field_0x78C > 0) {
|
||||
field_0x78C--;
|
||||
}
|
||||
if (field_0x790 > 0) {
|
||||
field_0x790--;
|
||||
}
|
||||
executeInternal();
|
||||
|
||||
if (mIsLoop) {
|
||||
if (!mAnm[HEART_ANIM_LOOP].isEnabled()) {
|
||||
mAnm[HEART_ANIM_LOOP].setFrame(0.0f);
|
||||
mAnm[HEART_ANIM_LOOP].setAnimEnable(true);
|
||||
}
|
||||
} else {
|
||||
if (mAnm[HEART_ANIM_LOOP].isEnabled()) {
|
||||
mAnm[HEART_ANIM_LOOP].setFrame(0.0f);
|
||||
mLyt.calc();
|
||||
mAnm[HEART_ANIM_LOOP].setAnimEnable(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (mIsDanger) {
|
||||
if (dAcPy_c::GetLink2()->getField_0x4564() == 1.0f) {
|
||||
if (!mAnm[HEART_ANIM_DANGER].isEnabled()) {
|
||||
mAnm[HEART_ANIM_DANGER].setAnimEnable(true);
|
||||
}
|
||||
mAnm[HEART_ANIM_DANGER].setFrame(0.0f);
|
||||
}
|
||||
} else {
|
||||
if (mAnm[HEART_ANIM_DANGER].isEnabled()) {
|
||||
mAnm[HEART_ANIM_DANGER].setToEnd();
|
||||
mLyt.getLayout()->Animate(0);
|
||||
mLyt.calc();
|
||||
mAnm[HEART_ANIM_DANGER].setAnimEnable(false);
|
||||
}
|
||||
}
|
||||
|
||||
f32 drinkFrame = 0.0f;
|
||||
bool hasGuardianPotion = false;
|
||||
bool hasExpiringGuardianPotion = false;
|
||||
if (FileManager::GetInstance()->hasGuardianPotionPlus()) {
|
||||
drinkFrame = 2.0f;
|
||||
hasGuardianPotion = true;
|
||||
} else if (FileManager::GetInstance()->hasGuardianPotionNormal()) {
|
||||
hasGuardianPotion = true;
|
||||
drinkFrame = 1.0f;
|
||||
}
|
||||
|
||||
if ((FileManager::GetInstance()->hasGuardianPotionNormal() &&
|
||||
FileManager::GetInstance()->getGuardianPotionTimer() < 600) ||
|
||||
(FileManager::GetInstance()->hasGuardianPotionPlus() &&
|
||||
FileManager::GetInstance()->getGuardianPotionPlusTimer() < 600)) {
|
||||
hasExpiringGuardianPotion = true;
|
||||
}
|
||||
|
||||
if (hasGuardianPotion) {
|
||||
if (!mAnm[HEART_ANIM_MLOOP].isEnabled()) {
|
||||
mAnm[HEART_ANIM_MLOOP].setFrame(0.0f);
|
||||
mAnm[HEART_ANIM_MLOOP].setAnimEnable(true);
|
||||
}
|
||||
} else if (mAnm[HEART_ANIM_MLOOP].getFrame() < 1.0f) {
|
||||
mAnm[HEART_ANIM_MLOOP].setFrame(0.0f);
|
||||
mLyt.getLayout()->Animate(0);
|
||||
mAnm[HEART_ANIM_MLOOP].setAnimEnable(false);
|
||||
}
|
||||
|
||||
if (hasGuardianPotion && hasExpiringGuardianPotion) {
|
||||
if (!mAnm[HEART_ANIM_MCAUTION].isEnabled()) {
|
||||
mAnm[HEART_ANIM_MCAUTION].setFrame(0.0f);
|
||||
mAnm[HEART_ANIM_MCAUTION].setAnimEnable(true);
|
||||
}
|
||||
} else if (mAnm[HEART_ANIM_MCAUTION].getFrame() < 1.0f) {
|
||||
mAnm[HEART_ANIM_MCAUTION].setFrame(0.0f);
|
||||
mLyt.getLayout()->Animate(0);
|
||||
mAnm[HEART_ANIM_MCAUTION].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mAnm[HEART_ANIM_DRINK].setFrame(drinkFrame);
|
||||
mAnm[HEART_ANIM_DRINK].setAnimEnable(true);
|
||||
|
||||
for (int i = 0; i < HEART_NUM_ANIMS; i++) {
|
||||
if (i > HEART_NUM_HEARTS + 1 && mAnm[i].isEnabled()) {
|
||||
mAnm[i].play();
|
||||
}
|
||||
}
|
||||
|
||||
if (mIsDanger && mAnm[HEART_ANIM_DANGER].isEndReached()) {
|
||||
mAnm[HEART_ANIM_DANGER].setToEnd();
|
||||
mAnm[HEART_ANIM_DANGER].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mLyt.calc();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
s32 dLytMeterHeart_c::getNumDisplayedHearts() const {
|
||||
return mStoredHealthCapacity / 4;
|
||||
}
|
||||
|
||||
s32 dLytMeterHeart_c::getDisplayedHealthCapacity() const {
|
||||
return getNumDisplayedHearts() * 4;
|
||||
}
|
||||
|
||||
void dLytMeterHeart_c::realizeHeartsState() {
|
||||
s32 hearts = getNumDisplayedHearts();
|
||||
(void)getDisplayedHealthCapacity();
|
||||
s32 health = mStoredHealth;
|
||||
s32 healthCapacity = mStoredHealthCapacity;
|
||||
s32 numFilledHearts = health / 4;
|
||||
s32 partialHeartFill = health % 4; // Wrong
|
||||
s32 displayedFilledHearts = healthCapacity / 4;
|
||||
s32 mNumTotalHeartsIncludingPartial = (getCurrentHealthCapacity() + 3) / 4;
|
||||
if (displayedFilledHearts < mNumTotalHeartsIncludingPartial) {
|
||||
mNumTotalHeartsIncludingPartial = displayedFilledHearts;
|
||||
}
|
||||
|
||||
mIsLoop = false;
|
||||
mIsDanger = false;
|
||||
|
||||
for (int i = 0; i < HEART_NUM_HEARTS; i++) {
|
||||
if (i < mNumTotalHeartsIncludingPartial) {
|
||||
mpHeartPanes[i]->SetVisible(true);
|
||||
if (i < displayedFilledHearts) {
|
||||
if (i < hearts) {
|
||||
if (numFilledHearts == 0 && partialHeartFill == 0) {
|
||||
if (i == 0) {
|
||||
mpMainPane->SetVisible(false);
|
||||
}
|
||||
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(1.0f);
|
||||
} else if (i < numFilledHearts) {
|
||||
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(0.0f);
|
||||
if (i == numFilledHearts - 1 && partialHeartFill == 0) {
|
||||
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(2.0f);
|
||||
mpMainPane->SetVisible(true);
|
||||
mpMainPane->SetTranslate(mpHeartPanes[i]->GetTranslate());
|
||||
mAnm[HEART_ANIM_MAIN].setFrame(4.0f);
|
||||
if (dAcPy_c::GetLink2() != nullptr &&
|
||||
dAcPy_c::GetLink2()->hasLessThanQuarterHealth(false)) {
|
||||
mIsDanger = true;
|
||||
} else {
|
||||
mIsLoop = true;
|
||||
}
|
||||
} else {
|
||||
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(0.0f);
|
||||
}
|
||||
} else if (i == numFilledHearts && partialHeartFill != 0) {
|
||||
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(2.0f);
|
||||
mpMainPane->SetVisible(true);
|
||||
mpMainPane->SetTranslate(mpHeartPanes[i]->GetTranslate());
|
||||
mAnm[HEART_ANIM_MAIN].setFrame(partialHeartFill);
|
||||
if (dAcPy_c::GetLink2() != nullptr && dAcPy_c::GetLink2()->hasLessThanQuarterHealth(false)) {
|
||||
mIsDanger = true;
|
||||
} else {
|
||||
mIsLoop = true;
|
||||
}
|
||||
} else {
|
||||
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(1.0f);
|
||||
}
|
||||
} else {
|
||||
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(1.0f);
|
||||
}
|
||||
} else {
|
||||
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(1.0f);
|
||||
}
|
||||
} else {
|
||||
mpHeartPanes[i]->SetVisible(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
extern "C" const u16 PARTICLE_RESOURCE_ID_MAPPING_972_;
|
||||
void dLytMeterHeart_c::executeInternal() {
|
||||
if (mEffectHeartIdx >= 0) {
|
||||
nw4r::math::MTX34 mtx = mpHeartPanes[mEffectHeartIdx]->GetGlobalMtx();
|
||||
mVec3_c pos(mtx._03, mtx._13, 0.0f);
|
||||
EffectsStruct::fn_800298C0(PARTICLE_RESOURCE_ID_MAPPING_972_, &pos, nullptr, nullptr, nullptr, nullptr);
|
||||
SmallSoundManager::GetInstance()->playSound(SE_S_HEART_ADD);
|
||||
mEffectHeartIdx = -1;
|
||||
}
|
||||
|
||||
// Redundant
|
||||
if (!field_0x794) {
|
||||
mCurrentHealth = getCurrentHealth();
|
||||
mCurrentHealthCapacity = getCurrentHealthCapacity();
|
||||
field_0x794 = 1;
|
||||
}
|
||||
|
||||
mCurrentHealthCapacity = getCurrentHealthCapacity();
|
||||
mCurrentHealth = getCurrentHealth();
|
||||
|
||||
if (field_0x796) {
|
||||
for (int i = 0; i < HEART_NUM_HEARTS; i++) {
|
||||
mAnm[i + HEART_ANIM_HEAT_OFFSET].setFrame(1.0f);
|
||||
}
|
||||
mLyt.calc();
|
||||
field_0x796 = 0;
|
||||
}
|
||||
|
||||
bool isDanger = dAcPy_c::GetLink2()->hasLessThanQuarterHealth(0);
|
||||
bool healthDifferent = mStoredHealth != mCurrentHealth;
|
||||
bool healthCapacityDifferent = mStoredHealthCapacity != mCurrentHealthCapacity;
|
||||
if (healthCapacityDifferent && field_0x790 < 20) {
|
||||
field_0x790 = 20;
|
||||
}
|
||||
if (healthDifferent || field_0x797 != isDanger) {
|
||||
s32 current = mCurrentHealth;
|
||||
if (mStoredHealth + 1 <= current) {
|
||||
mStoredHealth = mStoredHealth + 1;
|
||||
if (mpAlphaPane->IsVisible() && mpAlphaPane->GetGlobalAlpha() != 0 && mStoredHealth % 4 == 0 &&
|
||||
(!(dScGame_c::currentSpawnInfo.stageName == "F406") || dScGame_c::currentSpawnInfo.layer != 13) &&
|
||||
dLytGameOver_c::GetInstance() == nullptr) {
|
||||
SmallSoundManager::GetInstance()->playSound(SE_S_HP_GAUGE_UP);
|
||||
}
|
||||
} else {
|
||||
if (mStoredHealth - 1 >= current) {
|
||||
mStoredHealth = mStoredHealth - 1;
|
||||
if (EventManager::isInEvent() && !strcmp(EventManager::getCurrentEventName(), ("MoleF202Start")) &&
|
||||
mStoredHealth % 4 == 0) {
|
||||
SmallSoundManager::GetInstance()->playSound(SE_S_HP_GAUGE_DOWN);
|
||||
}
|
||||
}
|
||||
}
|
||||
realizeHeartsState();
|
||||
if (healthDifferent && field_0x78C < 10) {
|
||||
field_0x78C = 10;
|
||||
}
|
||||
field_0x797 = isDanger;
|
||||
} else if (healthCapacityDifferent) {
|
||||
if (mStoredHealthCapacity + 1 <= mCurrentHealthCapacity) {
|
||||
if ((mStoredHealthCapacity + 1) % 4 == 0) {
|
||||
if (mHealthCapacityIncreaseDelayTimer < 15) {
|
||||
mHealthCapacityIncreaseDelayTimer += 1;
|
||||
return;
|
||||
}
|
||||
mHealthCapacityIncreaseDelayTimer = 0;
|
||||
}
|
||||
mStoredHealthCapacity++;
|
||||
if (mStoredHealthCapacity % 4 == 0) {
|
||||
field_0x79A = 1;
|
||||
}
|
||||
} else {
|
||||
if (mStoredHealthCapacity - 1 >= mCurrentHealthCapacity) {
|
||||
mStoredHealthCapacity = mStoredHealthCapacity - 1;
|
||||
}
|
||||
}
|
||||
if (field_0x79A && mStoredHealth > mCurrentHealthCapacity - 3) {
|
||||
s32 numDisplayed = getNumDisplayedHearts();
|
||||
if (numDisplayed >= 1 && numDisplayed <= 20) {
|
||||
mEffectHeartIdx = numDisplayed - 1;
|
||||
field_0x79A = 0;
|
||||
}
|
||||
}
|
||||
realizeHeartsState();
|
||||
if (field_0x78C < 20) {
|
||||
field_0x78C = 20;
|
||||
}
|
||||
} else if (field_0x79A) {
|
||||
field_0x79A = 0;
|
||||
}
|
||||
}
|
||||
|
||||
u8 dLytMeterHeart_c::getCurrentHealth() const {
|
||||
return FileManager::GetInstance()->getCurrentHealth();
|
||||
}
|
||||
|
||||
u8 dLytMeterHeart_c::getCurrentHealthCapacity() const {
|
||||
return dAcPy_c::getCurrentHealthCapacity();
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,14 @@
|
||||
#include "d/lyt/meter/d_lyt_meter_key.h"
|
||||
|
||||
#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"
|
||||
#include "toBeSorted/small_sound_mgr.h"
|
||||
|
||||
STATE_DEFINE(dLytMeterKakeraKey_c, Wait);
|
||||
STATE_DEFINE(dLytMeterKakeraKey_c, On);
|
||||
STATE_DEFINE(dLytMeterKakeraKey_c, Increase);
|
||||
@@ -16,54 +25,503 @@ STATE_DEFINE(dLytMeterSmallKey_c, On);
|
||||
STATE_DEFINE(dLytMeterSmallKey_c, Active);
|
||||
STATE_DEFINE(dLytMeterSmallKey_c, Off);
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMapKakera[] = {
|
||||
{ "keyKakera_00_in.brlan", "G_inOut_00"},
|
||||
{"keyKakera_00_number1.brlan", "G_number1_00"},
|
||||
{"keyKakera_00_number2.brlan", "G_number2_00"},
|
||||
{"keyKakera_00_number3.brlan", "G_number3_00"},
|
||||
{"keyKakera_00_number4.brlan", "G_number4_00"},
|
||||
{"keyKakera_00_number5.brlan", "G_number5_00"},
|
||||
{ "keyKakera_00_loop.brlan", "G_loop_00"},
|
||||
{ "keyKakera_00_out.brlan", "G_inOut_00"},
|
||||
};
|
||||
|
||||
#define KEY_KAKERA_ANIM_IN 0
|
||||
#define KEY_KAKERA_ANIM_NUMBER_OFFSET 1
|
||||
#define KEY_KAKERA_ANIM_LOOP 6
|
||||
#define KEY_KAKERA_ANIM_OUT 7
|
||||
|
||||
#define KEY_KAKERA_NUM_ANIMS 8
|
||||
|
||||
#define KEY_KAKERA_NUM_PIECES 5
|
||||
|
||||
void dLytMeterKakeraKey_c::initializeState_Wait() {}
|
||||
void dLytMeterKakeraKey_c::executeState_Wait() {}
|
||||
void dLytMeterKakeraKey_c::executeState_Wait() {
|
||||
if (mShouldBeVisible) {
|
||||
mStateMgr.changeState(StateID_On);
|
||||
}
|
||||
}
|
||||
void dLytMeterKakeraKey_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytMeterKakeraKey_c::initializeState_On() {}
|
||||
void dLytMeterKakeraKey_c::executeState_On() {}
|
||||
void dLytMeterKakeraKey_c::initializeState_On() {
|
||||
mAnm[KEY_KAKERA_ANIM_IN].setAnimEnable(true);
|
||||
mAnm[KEY_KAKERA_ANIM_IN].setToEnd();
|
||||
for (int i = 0; i < KEY_KAKERA_NUM_PIECES; i++) {
|
||||
if (i < mSavedKeyPieceCount) {
|
||||
mAnm[i + KEY_KAKERA_ANIM_NUMBER_OFFSET].setAnimEnable(true);
|
||||
mAnm[i + KEY_KAKERA_ANIM_NUMBER_OFFSET].setToEnd();
|
||||
}
|
||||
}
|
||||
|
||||
mLyt.calc();
|
||||
|
||||
for (int i = 0; i < KEY_KAKERA_NUM_PIECES; i++) {
|
||||
if (mAnm[i + KEY_KAKERA_ANIM_NUMBER_OFFSET].isEnabled()) {
|
||||
mAnm[i + KEY_KAKERA_ANIM_NUMBER_OFFSET].setAnimEnable(false);
|
||||
}
|
||||
}
|
||||
|
||||
mAnm[KEY_KAKERA_ANIM_IN].setFrame(0.0f);
|
||||
}
|
||||
void dLytMeterKakeraKey_c::executeState_On() {
|
||||
if (mAnm[KEY_KAKERA_ANIM_IN].isEndReached()) {
|
||||
mAnm[KEY_KAKERA_ANIM_IN].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Active);
|
||||
}
|
||||
}
|
||||
void dLytMeterKakeraKey_c::finalizeState_On() {}
|
||||
|
||||
void dLytMeterKakeraKey_c::initializeState_Increase() {}
|
||||
void dLytMeterKakeraKey_c::executeState_Increase() {}
|
||||
void dLytMeterKakeraKey_c::initializeState_Increase() {
|
||||
mNextKeyPieceCount = mSavedKeyPieceCount + 1;
|
||||
mAnm[mNextKeyPieceCount - 1 + KEY_KAKERA_ANIM_NUMBER_OFFSET].setAnimEnable(true);
|
||||
mAnm[mNextKeyPieceCount - 1 + KEY_KAKERA_ANIM_NUMBER_OFFSET].setFrame(0.0f);
|
||||
mSavedKeyPieceCount = dAcItem_c::getKeyPieceCount();
|
||||
if (mSavedKeyPieceCount == KEY_KAKERA_NUM_PIECES) {
|
||||
SmallSoundManager::GetInstance()->playSound(SE_S_KEY_COMPLETE);
|
||||
} else {
|
||||
SmallSoundManager::GetInstance()->playSound(SE_S_KEY_PARTS);
|
||||
}
|
||||
}
|
||||
void dLytMeterKakeraKey_c::executeState_Increase() {
|
||||
if (mAnm[mNextKeyPieceCount + KEY_KAKERA_ANIM_IN].isEndReached()) {
|
||||
mAnm[mNextKeyPieceCount + KEY_KAKERA_ANIM_IN].setAnimEnable(false);
|
||||
mNextKeyPieceCount = -1;
|
||||
mStateMgr.changeState(StateID_Active);
|
||||
}
|
||||
}
|
||||
void dLytMeterKakeraKey_c::finalizeState_Increase() {}
|
||||
|
||||
void dLytMeterKakeraKey_c::initializeState_Active() {}
|
||||
void dLytMeterKakeraKey_c::executeState_Active() {}
|
||||
void dLytMeterKakeraKey_c::executeState_Active() {
|
||||
if (mSavedKeyPieceCount != dAcItem_c::getKeyPieceCount()) {
|
||||
mStateMgr.changeState(StateID_Increase);
|
||||
} else if (!mShouldBeVisible) {
|
||||
mStateMgr.changeState(StateID_Off);
|
||||
}
|
||||
}
|
||||
void dLytMeterKakeraKey_c::finalizeState_Active() {}
|
||||
|
||||
void dLytMeterKakeraKey_c::initializeState_Off() {}
|
||||
void dLytMeterKakeraKey_c::executeState_Off() {}
|
||||
void dLytMeterKakeraKey_c::initializeState_Off() {
|
||||
mAnm[KEY_KAKERA_ANIM_OUT].setAnimEnable(true);
|
||||
mAnm[KEY_KAKERA_ANIM_OUT].setFrame(0.0f);
|
||||
}
|
||||
void dLytMeterKakeraKey_c::executeState_Off() {
|
||||
if (mAnm[KEY_KAKERA_ANIM_OUT].isEndReached()) {
|
||||
mAnm[KEY_KAKERA_ANIM_OUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dLytMeterKakeraKey_c::finalizeState_Off() {}
|
||||
|
||||
bool dLytMeterKakeraKey_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("keyKakera_00.brlyt", nullptr);
|
||||
mLyt.setPriority(0x8A);
|
||||
|
||||
for (int i = 0; i < KEY_KAKERA_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMapKakera[i].mFile, resAcc, mLyt.getLayout(), brlanMapKakera[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mAnm[KEY_KAKERA_ANIM_LOOP].setAnimEnable(true);
|
||||
mSavedKeyPieceCount = dAcItem_c::getKeyPieceCount();
|
||||
mNextKeyPieceCount = -1;
|
||||
mpPane = mLyt.findPane("N_inOut_00");
|
||||
nw4r::lyt::Pane *positionPane = mLyt.findPane("N_keyPosition_00");
|
||||
|
||||
mPanePositions[0].copyFrom(positionPane->GetTranslate());
|
||||
mPanePositions[1].copyFrom(mpPane->GetTranslate());
|
||||
|
||||
mPosititionIndex = 1;
|
||||
mOldPosititionIndex = 1;
|
||||
mMovementFrame = 0;
|
||||
|
||||
mPosition.copyFrom(mPanePositions[mPosititionIndex]);
|
||||
mShouldBeVisible = 0;
|
||||
mpPane->SetTranslate(mPosition);
|
||||
|
||||
mAnm[KEY_KAKERA_ANIM_IN].setFrame(0.0f);
|
||||
mAnm[KEY_KAKERA_ANIM_IN].setAnimEnable(true);
|
||||
mLyt.calc();
|
||||
mAnm[KEY_KAKERA_ANIM_IN].setAnimEnable(false);
|
||||
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterKakeraKey_c::remove() {
|
||||
for (int i = 0; i < KEY_KAKERA_NUM_ANIMS; i++) {
|
||||
mAnm[i].unbind();
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterKakeraKey_c::execute() {
|
||||
mStateMgr.executeState();
|
||||
if (mPosition != mPanePositions[mPosititionIndex]) {
|
||||
if (mMovementFrame < 5) {
|
||||
mVec3_c diff = mPanePositions[mPosititionIndex] - mPanePositions[mOldPosititionIndex];
|
||||
mPosition = diff * cLib::easeOut(++mMovementFrame / 5.0f, 3.0f) + mPanePositions[mOldPosititionIndex];
|
||||
} else {
|
||||
mMovementFrame = 0;
|
||||
mPosition = mPanePositions[mPosititionIndex];
|
||||
}
|
||||
mpPane->SetTranslate(mPosition);
|
||||
}
|
||||
|
||||
for (int i = 0; i < KEY_KAKERA_NUM_ANIMS; i++) {
|
||||
if (mAnm[i].isEnabled()) {
|
||||
mAnm[i].play();
|
||||
}
|
||||
}
|
||||
mLyt.calc();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterKakeraKey_c::draw() {
|
||||
mLyt.addToDrawList();
|
||||
return true;
|
||||
}
|
||||
|
||||
void dLytMeterKakeraKey_c::setPosition(s32 position) {
|
||||
if (mPosititionIndex == position) {
|
||||
return;
|
||||
}
|
||||
|
||||
mOldPosititionIndex = mPosititionIndex;
|
||||
mPosititionIndex = 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) {
|
||||
mVec3_c diff = mPanePositions[mPosititionIndex] - mPanePositions[mOldPosititionIndex];
|
||||
mPosition = diff * 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) {
|
||||
mVec3_c diff = mPanePositions[mPosititionIndex] - mPanePositions[mOldPosititionIndex];
|
||||
mPosition = diff * 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;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,228 @@
|
||||
#include "d/lyt/meter/d_lyt_meter_nun_stk.h"
|
||||
|
||||
#include "d/lyt/d_lyt_unknowns.h"
|
||||
#include "d/lyt/d_textbox.h"
|
||||
#include "d/lyt/d_window.h"
|
||||
|
||||
STATE_DEFINE(dLytMeterNunStk_c, Wait);
|
||||
STATE_DEFINE(dLytMeterNunStk_c, On);
|
||||
STATE_DEFINE(dLytMeterNunStk_c, Active);
|
||||
STATE_DEFINE(dLytMeterNunStk_c, Off);
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{"nunBtn_02_input.brlan", "G_input_00"},
|
||||
{ "nunBtn_02_loop.brlan", "G_loop_00"},
|
||||
};
|
||||
|
||||
#define NUN_STK_ANIM_INPUT 0
|
||||
#define NUN_STK_ANIM_LOOP 1
|
||||
|
||||
#define NUN_STK_NUM_ANIMS 2
|
||||
|
||||
void dLytMeterNunStk_c::initializeState_Wait() {
|
||||
mOnDelay = 15;
|
||||
}
|
||||
void dLytMeterNunStk_c::executeState_Wait() {
|
||||
s32 timer = mOnDelay;
|
||||
if (field_0x184) {
|
||||
if (field_0x178) {
|
||||
bool bDoUpdate = true;
|
||||
if (field_0x174 != LytDoButtonRelated::DO_NONE) {
|
||||
if (timer <= 0) {
|
||||
mAnm[NUN_STK_ANIM_INPUT].setBackwardsOnce();
|
||||
mAnm[NUN_STK_ANIM_INPUT].setToStart();
|
||||
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(true);
|
||||
mStateMgr.changeState(StateID_On);
|
||||
setMessage(field_0x174);
|
||||
} else {
|
||||
mOnDelay = timer - 1;
|
||||
bDoUpdate = false;
|
||||
}
|
||||
}
|
||||
if (bDoUpdate) {
|
||||
field_0x170 = field_0x174;
|
||||
}
|
||||
} else {
|
||||
if (field_0x174 != LytDoButtonRelated::DO_NONE) {
|
||||
setMessage(field_0x174);
|
||||
}
|
||||
field_0x170 = field_0x174;
|
||||
}
|
||||
}
|
||||
|
||||
if (timer == mOnDelay) {
|
||||
mOnDelay = 15;
|
||||
}
|
||||
}
|
||||
void dLytMeterNunStk_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytMeterNunStk_c::initializeState_On() {}
|
||||
void dLytMeterNunStk_c::executeState_On() {
|
||||
if (mAnm[NUN_STK_ANIM_INPUT].isStop2()) {
|
||||
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Active);
|
||||
}
|
||||
}
|
||||
void dLytMeterNunStk_c::finalizeState_On() {}
|
||||
|
||||
void dLytMeterNunStk_c::initializeState_Active() {}
|
||||
void dLytMeterNunStk_c::executeState_Active() {
|
||||
if (field_0x174 != field_0x170 || !field_0x178) {
|
||||
if (field_0x174 == LytDoButtonRelated::DO_NONE || !field_0x178) {
|
||||
mAnm[NUN_STK_ANIM_INPUT].setForwardOnce();
|
||||
mAnm[NUN_STK_ANIM_INPUT].setFrame(0.0f);
|
||||
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(true);
|
||||
if (field_0x170 != mDisplayedAction) {
|
||||
field_0x174 = mDisplayedAction;
|
||||
}
|
||||
mStateMgr.changeState(StateID_Off);
|
||||
} else {
|
||||
setMessage(field_0x174);
|
||||
}
|
||||
field_0x170 = field_0x174;
|
||||
} else if (field_0x170 == LytDoButtonRelated::DO_NONE) {
|
||||
mAnm[NUN_STK_ANIM_INPUT].setForwardOnce();
|
||||
mAnm[NUN_STK_ANIM_INPUT].setFrame(0.0f);
|
||||
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(true);
|
||||
mStateMgr.changeState(StateID_Off);
|
||||
}
|
||||
}
|
||||
void dLytMeterNunStk_c::finalizeState_Active() {}
|
||||
|
||||
void dLytMeterNunStk_c::initializeState_Off() {}
|
||||
void dLytMeterNunStk_c::executeState_Off() {
|
||||
if (mAnm[NUN_STK_ANIM_INPUT].isEndReached()) {
|
||||
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dLytMeterNunStk_c::finalizeState_Off() {}
|
||||
|
||||
static const char *sPane = "N_all_00";
|
||||
|
||||
static const char *sTextBoxes[] = {
|
||||
"T_conStick_00",
|
||||
"T_conStickS_00",
|
||||
};
|
||||
|
||||
static const char *sWindows[] = {"W_bgP_00"};
|
||||
|
||||
bool dLytMeterNunStk_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("nunBtn_02.brlyt", nullptr);
|
||||
|
||||
for (int i = 0; i < NUN_STK_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
mpPane = mLyt.findPane(sPane);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpTextBoxes[i] = mLyt.getTextBox(sTextBoxes[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 1; i++) {
|
||||
mpWindow[i] = mLyt.getWindow(sWindows[i]);
|
||||
mpSizeBox[i] = mLyt.getSizeBoxInWindow(sWindows[i]);
|
||||
}
|
||||
|
||||
mDisplayedAction = LytDoButtonRelated::DO_NONE;
|
||||
field_0x170 = LytDoButtonRelated::DO_NONE;
|
||||
field_0x174 = LytDoButtonRelated::DO_NONE;
|
||||
field_0x184 = true;
|
||||
field_0x178 = true;
|
||||
|
||||
field_0x185 = false;
|
||||
mpOwnerPane = nullptr;
|
||||
|
||||
setMessage(field_0x170);
|
||||
|
||||
mAnm[NUN_STK_ANIM_INPUT].setToEnd();
|
||||
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(true);
|
||||
|
||||
mAnm[NUN_STK_ANIM_LOOP].setAnimEnable(true);
|
||||
mLyt.calc();
|
||||
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(false);
|
||||
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterNunStk_c::remove() {
|
||||
for (int i = 0; i < NUN_STK_NUM_ANIMS; i++) {
|
||||
mAnm[i].unbind();
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterNunStk_c::execute() {
|
||||
if (mpOwnerPane == nullptr) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!mpOwnerPane->IsVisible()) {
|
||||
if (*mStateMgr.getStateID() == StateID_Active) {
|
||||
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(true);
|
||||
}
|
||||
if (mAnm[NUN_STK_ANIM_INPUT].isEnabled()) {
|
||||
mAnm[NUN_STK_ANIM_INPUT].setForwardOnce();
|
||||
mAnm[NUN_STK_ANIM_INPUT].setToEnd2();
|
||||
mLyt.calc();
|
||||
mAnm[NUN_STK_ANIM_INPUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_NUN_STK, LytDoButtonRelated::DO_NONE);
|
||||
field_0x174 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_NUN_STK);
|
||||
setMessage(field_0x174);
|
||||
return true;
|
||||
}
|
||||
|
||||
field_0x185 = false;
|
||||
|
||||
field_0x174 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_NUN_STK);
|
||||
field_0x178 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_NUN_STK);
|
||||
|
||||
mStateMgr.executeState();
|
||||
for (int i = 0; i < NUN_STK_NUM_ANIMS; i++) {
|
||||
if (mAnm[i].isEnabled()) {
|
||||
mAnm[i].play();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#include "d/lyt/meter/d_lyt_meter_action_table.inc"
|
||||
|
||||
void dLytMeterNunStk_c::setMessage(s32 id) {
|
||||
char buf[11];
|
||||
for (int i = 0; i < 11; i++) {
|
||||
buf[i] = 0;
|
||||
}
|
||||
|
||||
if (id < LytDoButtonRelated::DO_NONE) {
|
||||
if (id < 0x5D) {
|
||||
sprintf(buf, "ACT_INFO_%03d", sActIds[id]);
|
||||
} else {
|
||||
s32 id2 = id - 0x5E;
|
||||
sprintf(buf, "ACT_ETC_%03d", sActIds[id2]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpTextBoxes[i]->setMessageWithGlobalTextProcessor2(buf, nullptr);
|
||||
}
|
||||
|
||||
mpWindow[0]->SetVisible(true);
|
||||
mpWindow[0]->UpdateSize(mpSizeBox[0], 32.0f);
|
||||
mDisplayedAction = id;
|
||||
} else {
|
||||
wchar_t b2[2];
|
||||
b2[0] = b2[1] = 0;
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpTextBoxes[i]->setTextWithGlobalTextProcessor(b2);
|
||||
}
|
||||
mpWindow[0]->SetVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,270 @@
|
||||
#include "d/lyt/meter/d_lyt_meter_nunchaku_bg.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/lyt/d_lyt_unknowns.h"
|
||||
#include "d/lyt/meter/d_lyt_meter.h"
|
||||
#include "toBeSorted/event_manager.h"
|
||||
|
||||
STATE_DEFINE(dLytMeterNunchakuBg_c, Wait);
|
||||
STATE_DEFINE(dLytMeterNunchakuBg_c, On);
|
||||
STATE_DEFINE(dLytMeterNunchakuBg_c, Active);
|
||||
STATE_DEFINE(dLytMeterNunchakuBg_c, Off);
|
||||
|
||||
static const d2d::LytBrlanMapping brlanMap[] = {
|
||||
{ "nunBg_00_input.brlan", "G_input_00"},
|
||||
{"nunBg_00_arrowV.brlan", "G_arrowAlpha_00"},
|
||||
{ "nunBg_00_loop.brlan", "G_loop_00"},
|
||||
};
|
||||
|
||||
#define NUN_BG_ANIM_INPUT 0
|
||||
#define NUN_BG_ANIM_ARROWV 1
|
||||
#define NUN_BG_ANIM_LOOP 2
|
||||
|
||||
#define NUN_BG_NUM_ANIMS 3
|
||||
|
||||
void dLytMeterNunchakuBg_c::initializeState_Wait() {
|
||||
mOnDelay = 15;
|
||||
}
|
||||
void dLytMeterNunchakuBg_c::executeState_Wait() {
|
||||
s32 timer = mOnDelay;
|
||||
if (field_0x1C4) {
|
||||
if (field_0x1B8) {
|
||||
bool bDoUpdate = true;
|
||||
if (field_0x1B4 != LytDoButtonRelated::DO_NONE) {
|
||||
if (timer <= 0) {
|
||||
mAnm[NUN_BG_ANIM_INPUT].setBackwardsOnce();
|
||||
mAnm[NUN_BG_ANIM_INPUT].setToStart();
|
||||
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(true);
|
||||
mStateMgr.changeState(StateID_On);
|
||||
setMessage(field_0x1B4);
|
||||
} else {
|
||||
mOnDelay = timer - 1;
|
||||
bDoUpdate = false;
|
||||
}
|
||||
}
|
||||
if (bDoUpdate) {
|
||||
field_0x1B0 = field_0x1B4;
|
||||
}
|
||||
} else {
|
||||
if (field_0x1B4 != LytDoButtonRelated::DO_NONE) {
|
||||
setMessage(field_0x1B4);
|
||||
}
|
||||
field_0x1B0 = field_0x1B4;
|
||||
}
|
||||
}
|
||||
|
||||
if (timer == mOnDelay) {
|
||||
mOnDelay = 15;
|
||||
}
|
||||
}
|
||||
void dLytMeterNunchakuBg_c::finalizeState_Wait() {}
|
||||
|
||||
void dLytMeterNunchakuBg_c::initializeState_On() {}
|
||||
void dLytMeterNunchakuBg_c::executeState_On() {
|
||||
if (mAnm[NUN_BG_ANIM_INPUT].isStop2()) {
|
||||
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Active);
|
||||
}
|
||||
}
|
||||
void dLytMeterNunchakuBg_c::finalizeState_On() {}
|
||||
|
||||
void dLytMeterNunchakuBg_c::initializeState_Active() {}
|
||||
void dLytMeterNunchakuBg_c::executeState_Active() {
|
||||
if (field_0x1B4 != field_0x1B0 || !field_0x1B8) {
|
||||
if (field_0x1B4 == LytDoButtonRelated::DO_NONE || !field_0x1B8) {
|
||||
mAnm[NUN_BG_ANIM_INPUT].setForwardOnce();
|
||||
mAnm[NUN_BG_ANIM_INPUT].setFrame(0.0f);
|
||||
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(true);
|
||||
if (field_0x1B0 != field_0x1BC) {
|
||||
field_0x1B4 = field_0x1BC;
|
||||
}
|
||||
mStateMgr.changeState(StateID_Off);
|
||||
} else {
|
||||
setMessage(field_0x1B4);
|
||||
}
|
||||
field_0x1B0 = field_0x1B4;
|
||||
} else if (field_0x1B0 == LytDoButtonRelated::DO_NONE) {
|
||||
mAnm[NUN_BG_ANIM_INPUT].setForwardOnce();
|
||||
mAnm[NUN_BG_ANIM_INPUT].setFrame(0.0f);
|
||||
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(true);
|
||||
mStateMgr.changeState(StateID_Off);
|
||||
}
|
||||
}
|
||||
void dLytMeterNunchakuBg_c::finalizeState_Active() {}
|
||||
|
||||
void dLytMeterNunchakuBg_c::initializeState_Off() {}
|
||||
void dLytMeterNunchakuBg_c::executeState_Off() {
|
||||
if (mAnm[NUN_BG_ANIM_INPUT].isEndReached()) {
|
||||
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dLytMeterNunchakuBg_c::finalizeState_Off() {}
|
||||
|
||||
static const char *sPane = "N_nunBg_00";
|
||||
|
||||
static const char *sTextBoxes[] = {
|
||||
"T_nunchaku_00",
|
||||
"T_nunchakuS_00",
|
||||
};
|
||||
|
||||
static const char *sWindows[] = {"W_bgP_04"};
|
||||
|
||||
bool dLytMeterNunchakuBg_c::build(d2d::ResAccIf_c *resAcc) {
|
||||
mLyt.setResAcc(resAcc);
|
||||
mLyt.build("nunBg_00.brlyt", nullptr);
|
||||
|
||||
for (int i = 0; i < NUN_BG_NUM_ANIMS; i++) {
|
||||
mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName);
|
||||
mAnm[i].bind(false);
|
||||
mAnm[i].setAnimEnable(false);
|
||||
}
|
||||
|
||||
mpPane = mLyt.findPane(sPane);
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpTextBoxes[i] = mLyt.getTextBox(sTextBoxes[i]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 1; i++) {
|
||||
mpWindow[i] = mLyt.getWindow(sWindows[i]);
|
||||
mpSizeBox[i] = mLyt.getSizeBoxInWindow(sWindows[i]);
|
||||
}
|
||||
|
||||
field_0x1BC = 0x60;
|
||||
field_0x1B0 = 0x60;
|
||||
field_0x1B4 = 0x60;
|
||||
field_0x1C4 = false;
|
||||
field_0x1B8 = true;
|
||||
|
||||
field_0x1C5 = 0;
|
||||
field_0x1C6 = 0;
|
||||
mpOwnerPane = nullptr;
|
||||
mOnDelay = 15;
|
||||
|
||||
dLytMeter_c::GetMain()->getNunStk()->getBgPane()->SetVisible(false);
|
||||
|
||||
setMessage(field_0x1B0);
|
||||
|
||||
mAnm[NUN_BG_ANIM_INPUT].setToEnd();
|
||||
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(true);
|
||||
|
||||
mAnm[NUN_BG_ANIM_LOOP].setAnimEnable(true);
|
||||
mLyt.calc();
|
||||
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterNunchakuBg_c::remove() {
|
||||
for (int i = 0; i < NUN_BG_NUM_ANIMS; i++) {
|
||||
mAnm[i].unbind();
|
||||
mAnm[i].remove();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dLytMeterNunchakuBg_c::execute() {
|
||||
if (mpOwnerPane == nullptr) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!mpOwnerPane->IsVisible()) {
|
||||
if (*mStateMgr.getStateID() == StateID_Active) {
|
||||
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(true);
|
||||
}
|
||||
if (mAnm[NUN_BG_ANIM_INPUT].isEnabled()) {
|
||||
mAnm[NUN_BG_ANIM_INPUT].setForwardOnce();
|
||||
mAnm[NUN_BG_ANIM_INPUT].setToEnd2();
|
||||
mLyt.calc();
|
||||
mAnm[NUN_BG_ANIM_INPUT].setAnimEnable(false);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
}
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_NUN_BG, LytDoButtonRelated::DO_NONE);
|
||||
field_0x1B4 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_NUN_STK);
|
||||
setMessage(field_0x1B4);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (EventManager::isInEvent()) {
|
||||
field_0x1C4 = false;
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_NUN_BG, LytDoButtonRelated::DO_NONE);
|
||||
} else {
|
||||
field_0x1C4 = true;
|
||||
}
|
||||
|
||||
s32 d = dLytDobutton_c::getFn0x8010E5E0();
|
||||
if (d == 6 || d == 9) {
|
||||
LytDoButtonRelated::Action_e a = LytDoButtonRelated::convertDoButton(dLytDobutton_c::getFn0x8010E5D0());
|
||||
if (a >= 0) {
|
||||
LytDoButtonRelated::set(LytDoButtonRelated::DO_BUTTON_NUN_BG, a);
|
||||
}
|
||||
}
|
||||
|
||||
field_0x1B4 = LytDoButtonRelated::get(LytDoButtonRelated::DO_BUTTON_NUN_BG);
|
||||
field_0x1B8 = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_NUN_BG);
|
||||
|
||||
bool hasNunStk = LytDoButtonRelated::getHas(LytDoButtonRelated::DO_BUTTON_NUN_STK);
|
||||
u8 val = dLytMeter_c::getDowsing0x550A();
|
||||
if (hasNunStk != field_0x1C5 || val != field_0x1C6) {
|
||||
field_0x1C5 = hasNunStk;
|
||||
field_0x1C6 = val;
|
||||
|
||||
if (hasNunStk) {
|
||||
mAnm[NUN_BG_ANIM_ARROWV].setFrame(1.0f);
|
||||
mAnm[NUN_BG_ANIM_ARROWV].setAnimEnable(true);
|
||||
dLytMeter_c::GetMain()->getNunStk()->getBgPane()->SetVisible(true);
|
||||
} else {
|
||||
if (val) {
|
||||
mAnm[NUN_BG_ANIM_ARROWV].setFrame(1.0f);
|
||||
mAnm[NUN_BG_ANIM_ARROWV].setAnimEnable(true);
|
||||
} else {
|
||||
mAnm[NUN_BG_ANIM_ARROWV].setFrame(0.0f);
|
||||
mAnm[NUN_BG_ANIM_ARROWV].setAnimEnable(true);
|
||||
setMessage(field_0x1B4);
|
||||
}
|
||||
dLytMeter_c::GetMain()->getNunStk()->getBgPane()->SetVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
mStateMgr.executeState();
|
||||
for (int i = 0; i < NUN_BG_NUM_ANIMS; i++) {
|
||||
if (i != 1 && mAnm[i].isEnabled()) {
|
||||
mAnm[i].play();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#include "d/lyt/meter/d_lyt_meter_action_table.inc"
|
||||
|
||||
void dLytMeterNunchakuBg_c::setMessage(s32 id) {
|
||||
char buf[11];
|
||||
for (int i = 0; i < 11; i++) {
|
||||
buf[i] = 0;
|
||||
}
|
||||
|
||||
if (id < LytDoButtonRelated::DO_NONE) {
|
||||
if (id < 0x5D) {
|
||||
sprintf(buf, "ACT_INFO_%03d", sActIds[id]);
|
||||
} else {
|
||||
s32 id2 = id - 0x5E;
|
||||
sprintf(buf, "ACT_ETC_%03d", sActIds[id2]);
|
||||
}
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpTextBoxes[i]->setMessageWithGlobalTextProcessor2(buf, nullptr);
|
||||
}
|
||||
mpWindow[0]->SetVisible(true);
|
||||
mpWindow[0]->UpdateSize(mpSizeBox[0], 32.0f);
|
||||
field_0x1BC = id;
|
||||
} else {
|
||||
wchar_t b2[2];
|
||||
b2[0] = b2[1] = 0;
|
||||
for (int i = 0; i < 2; i++) {
|
||||
mpTextBoxes[i]->setTextWithGlobalTextProcessor(b2);
|
||||
}
|
||||
mpWindow[0]->SetVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user