diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt index 14f04d46..c9b1a5b8 100644 --- a/config/SOUE01/splits.txt +++ b/config/SOUE01/splits.txt @@ -407,6 +407,12 @@ d/lyt/d_lyt_do_button.cpp: .data start:0x8051A5A8 end:0x8051AC00 .bss start:0x805ACE10 end:0x805ACF78 +d/lyt/d_lyt_common_a_btn.cpp: + .text start:0x8010EF90 end:0x8010F818 + .rodata start:0x804E72E0 end:0x804E7330 + .data start:0x8051AC18 end:0x8051ACD8 + .sdata2 start:0x80579D98 end:0x80579DA8 + d/lyt/d_lyt_common_icon_material.cpp: .text start:0x8010F820 end:0x80111718 .ctors start:0x804DB730 end:0x804DB734 @@ -425,46 +431,51 @@ d/lyt/d_lyt_common_icon_item.cpp: .sdata2 start:0x80579DB8 end:0x80579DD0 .bss start:0x805AD088 end:0x805AD188 -d/lyt/d_lyt_msg_window.cpp: +d/lyt/msg_window/d_lyt_msg_window.cpp: .text start:0x801148F0 end:0x8011C8C8 .ctors start:0x804DB738 end:0x804DB73C -d/lyt/d_lyt_msg_window_select_btn.cpp: +d/lyt/msg_window/d_lyt_msg_window_select_btn.cpp: .text start:0x8011C8D0 end:0x80120988 .ctors start:0x804DB73C end:0x804DB740 -d/lyt/d_lyt_msg_window_base.cpp: +d/lyt/msg_window/d_lyt_msg_window_base.cpp: .text start:0x80120A20 end:0x80121068 -d/lyt/d_lyt_msg_window_talk.cpp: +d/lyt/msg_window/d_lyt_msg_window_talk.cpp: .text start:0x80121070 end:0x801223C8 .ctors start:0x804DB740 end:0x804DB744 -d/lyt/d_lyt_msg_window_link.cpp: +d/lyt/msg_window/d_lyt_msg_window_link.cpp: .text start:0x801223D0 end:0x80123738 .ctors start:0x804DB744 end:0x804DB748 -d/lyt/d_lyt_msg_window_get.cpp: +d/lyt/msg_window/d_lyt_msg_window_get.cpp: .text start:0x80123740 end:0x80124678 .ctors start:0x804DB748 end:0x804DB74C -d/lyt/d_lyt_msg_window_sword.cpp: +d/lyt/msg_window/d_lyt_msg_window_sword.cpp: .text start:0x80124680 end:0x80125BA8 .ctors start:0x804DB74C end:0x804DB750 -d/lyt/d_lyt_msg_window_wood.cpp: +d/lyt/msg_window/d_lyt_msg_window_wood.cpp: .text start:0x80125BB0 end:0x801267F8 .ctors start:0x804DB750 end:0x804DB754 + .rodata start:0x804E75C0 end:0x804E75D8 + .data start:0x8051D8A0 end:0x8051DB08 + .sdata start:0x805725E0 end:0x805725F8 + .sdata2 start:0x80579EC0 end:0x80579EC8 + .bss start:0x805AEDF0 end:0x805AEEF0 -d/lyt/d_lyt_msg_window_stone.cpp: +d/lyt/msg_window/d_lyt_msg_window_stone.cpp: .text start:0x80126800 end:0x80127478 .ctors start:0x804DB754 end:0x804DB758 -d/lyt/d_lyt_msg_window_demo.cpp: +d/lyt/msg_window/d_lyt_msg_window_demo.cpp: .text start:0x80127480 end:0x801281F8 .ctors start:0x804DB758 end:0x804DB75C -d/lyt/d_lyt_simple_window.cpp: +d/lyt/msg_window/d_lyt_simple_window.cpp: .text start:0x80128200 end:0x8012B948 .ctors start:0x804DB75C end:0x804DB760 diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index ae494792..df9063e6 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -2831,7 +2831,7 @@ dSys_c__endFrame = .text:0x800643E0; // type:function size:0x48 EGG__ConfigurationData__onEndFrame = .text:0x80064430; // type:function size:0x4 dSys_c__setBlack = .text:0x80064440; // type:function size:0x80 setFrameRate__4dSysFUl = .text:0x800644C0; // type:function size:0x10 -dSys_c__getFrameRate = .text:0x800644D0; // type:function size:0x10 +getFrameRate__4dSysFv = .text:0x800644D0; // type:function size:0x10 setClearColor__4dSysF6mColor = .text:0x800644E0; // type:function size:0x60 dSys_c__getClearColor = .text:0x80064540; // type:function size:0x14 dSys_c__create = .text:0x80064560; // type:function size:0x3BC @@ -3774,9 +3774,9 @@ LytMeter0x24__Q23d2d8dSubPaneCFv = .text:0x800AC4F0; // type:function size:0x8 LytMeter0x28__Q23d2d8dSubPaneFb = .text:0x800AC500; // type:function size:0x8 init__Q23d2d14AnmGroupBase_cFPCcPQ23m2d10ResAccIf_cPQ23d2d8Layout_cPCc = .text:0x800AC510; // type:function size:0x9C init__Q23d2d14AnmGroupBase_cFPQ34nw4r3lyt13AnimTransformPCcPQ23m2d10ResAccIf_cPQ34nw4r3lyt5Group = .text:0x800AC5B0; // type:function size:0x114 -setDirection__Q23d2d14AnmGroupBase_cFb = .text:0x800AC6D0; // type:function size:0xF8 +bind__Q23d2d14AnmGroupBase_cFb = .text:0x800AC6D0; // type:function size:0xF8 unbind__Q23d2d14AnmGroupBase_cFv = .text:0x800AC7D0; // type:function size:0x88 -afterUnbind__Q23d2d14AnmGroupBase_cFv = .text:0x800AC860; // type:function size:0x8 +remove__Q23d2d14AnmGroupBase_cFv = .text:0x800AC860; // type:function size:0x8 setAnimEnable__Q23d2d14AnmGroupBase_cFb = .text:0x800AC870; // type:function size:0x8C setAnmFrame__Q23d2d14AnmGroupBase_cFf = .text:0x800AC900; // type:function size:0xC syncAnmFrame__Q23d2d14AnmGroupBase_cFv = .text:0x800AC910; // type:function size:0xC @@ -3841,7 +3841,7 @@ fn_800AEF80 = .text:0x800AEF80; // type:function size:0x414 GetCharStrmReader__Q34nw4r2ut4FontCFv = .text:0x800AF3A0; // type:function size:0x38 fn_800AF3E0 = .text:0x800AF3E0; // type:function size:0x8C fn_800AF470 = .text:0x800AF470; // type:function size:0xCC -fn_800AF540 = .text:0x800AF540; // type:function size:0x8C +fn_800AF540__10dTextBox_cFPCwP15dTagProcessor_ce = .text:0x800AF540; // type:function size:0x8C fn_800AF5D0 = .text:0x800AF5D0; // type:function size:0xD4 fn_800AF6B0 = .text:0x800AF6B0; // type:function size:0x64 fn_800AF720 = .text:0x800AF720; // type:function size:0x8C @@ -6547,27 +6547,27 @@ fn_8010EC10 = .text:0x8010EC10; // type:function size:0x134 fn_8010ED50 = .text:0x8010ED50; // type:function size:0x110 fn_8010EE60 = .text:0x8010EE60; // type:function size:0xE8 fn_8010EF50 = .text:0x8010EF50; // type:function size:0x3C -fn_8010EF90 = .text:0x8010EF90; // type:function size:0xAC -fn_8010F040 = .text:0x8010F040; // type:function size:0x50 -fn_8010F090 = .text:0x8010F090; // type:function size:0x58 -fn_8010F0F0 = .text:0x8010F0F0; // type:function size:0x24 -fn_8010F120 = .text:0x8010F120; // type:function size:0x28 -fn_8010F150 = .text:0x8010F150; // type:function size:0x4 -fn_8010F160 = .text:0x8010F160; // type:function size:0x8 -fn_8010F170 = .text:0x8010F170; // type:function size:0x74 -fn_8010F1F0 = .text:0x8010F1F0; // type:function size:0xCC -fn_8010F2C0 = .text:0x8010F2C0; // type:function size:0x5C -fn_8010F320 = .text:0x8010F320; // type:function size:0x8 -fn_8010F330 = .text:0x8010F330; // type:function size:0x6C -canPressAToClearCalibrationScreenMaybe = .text:0x8010F3A0; // type:function size:0x88 -fn_8010F430 = .text:0x8010F430; // type:function size:0x58 -fn_8010F490 = .text:0x8010F490; // type:function size:0x134 -fn_8010F5D0 = .text:0x8010F5D0; // type:function size:0x188 -setTextboxStateMaybe = .text:0x8010F760; // type:function size:0x10 -fn_8010F770 = .text:0x8010F770; // type:function size:0x8 -fn_8010F780 = .text:0x8010F780; // type:function size:0x8 -fn_8010F790 = .text:0x8010F790; // type:function size:0x8 -fn_8010F7A0 = .text:0x8010F7A0; // type:function size:0x78 +build__16dLytCommonABtn_cFPQ23d2d10ResAccIf_c = .text:0x8010EF90; // type:function size:0xAC +remove__16dLytCommonABtn_cFv = .text:0x8010F040; // type:function size:0x50 +execute__16dLytCommonABtn_cFv = .text:0x8010F090; // type:function size:0x58 +requestIn__16dLytCommonABtn_cFv = .text:0x8010F0F0; // type:function size:0x24 +requestOut__16dLytCommonABtn_cFb = .text:0x8010F120; // type:function size:0x28 +resetToInvisble__16dLytCommonABtn_cFv = .text:0x8010F150; // type:function size:0x4 +setSoundVariant__16dLytCommonABtn_cFQ216dLytCommonABtn_c12SoundVariant = .text:0x8010F160; // type:function size:0x8 +runExecuteFunc__16dLytCommonABtn_cFv = .text:0x8010F170; // type:function size:0x74 +gotoStateInvisible__16dLytCommonABtn_cFv = .text:0x8010F1F0; // type:function size:0xCC +executeStateInvisible__16dLytCommonABtn_cFv = .text:0x8010F2C0; // type:function size:0x5C +gotoStateIn__16dLytCommonABtn_cFv = .text:0x8010F320; // type:function size:0x8 +executeStateIn__16dLytCommonABtn_cFv = .text:0x8010F330; // type:function size:0x6C +goToStateVisible__16dLytCommonABtn_cFv = .text:0x8010F3A0; // type:function size:0x88 +executeStateVisible__16dLytCommonABtn_cFv = .text:0x8010F430; // type:function size:0x58 +goToStateDecideOut__16dLytCommonABtn_cFv = .text:0x8010F490; // type:function size:0x134 +executeStateDecideOut__16dLytCommonABtn_cFv = .text:0x8010F5D0; // type:function size:0x188 +setState__16dLytCommonABtn_cFQ216dLytCommonABtn_c9ABtnState = .text:0x8010F760; // type:function size:0x10 +getName__16dLytCommonABtn_cCFv = .text:0x8010F770; // type:function size:0x8 +getLyt__16dLytCommonABtn_cFv = .text:0x8010F780; // type:function size:0x8 +getPane__16dLytCommonABtn_cFv = .text:0x8010F790; // type:function size:0x8 +__dt__16dLytCommonABtn_cFv = .text:0x8010F7A0; // type:function size:0x78 build__29dLytCommonIconMaterialPart1_cFPQ23d2d10ResAccIf_c = .text:0x8010F820; // type:function size:0x100 remove__29dLytCommonIconMaterialPart1_cFv = .text:0x8010F920; // type:function size:0x58 execute__29dLytCommonIconMaterialPart1_cFv = .text:0x8010F980; // type:function size:0x9C @@ -6877,7 +6877,7 @@ fn_801194C0 = .text:0x801194C0; // type:function size:0x40C LytMsgWindowTalk__dtor = .text:0x801198D0; // type:function size:0x198 fn_80119A70 = .text:0x80119A70; // type:function size:0x198 LytMsgWindowSword__dtor = .text:0x80119C10; // type:function size:0x198 -fn_80119DB0 = .text:0x80119DB0; // type:function size:0x170 +__dt__19dLytMsgWindowWood_cFv = .text:0x80119DB0; // type:function size:0x170 fn_80119F20 = .text:0x80119F20; // type:function size:0x170 fn_8011A090 = .text:0x8011A090; // type:function size:0x198 fn_8011A230 = .text:0x8011A230; // type:function size:0x158 @@ -7022,9 +7022,9 @@ fn_8011B560 = .text:0x8011B560; // type:function size:0x30 fn_8011B590 = .text:0x8011B590; // type:function size:0x30 fn_8011B5C0 = .text:0x8011B5C0; // type:function size:0x30 fn_8011B5F0 = .text:0x8011B5F0; // type:function size:0x30 -fn_8011B620 = .text:0x8011B620; // type:function size:0x30 -fn_8011B650 = .text:0x8011B650; // type:function size:0x30 -fn_8011B680 = .text:0x8011B680; // type:function size:0x30 +finalizeState__34sFStateID_c<19dLytMsgWindowWood_c>CFR19dLytMsgWindowWood_c = .text:0x8011B620; // type:function size:0x30 +executeState__34sFStateID_c<19dLytMsgWindowWood_c>CFR19dLytMsgWindowWood_c = .text:0x8011B650; // type:function size:0x30 +initializeState__34sFStateID_c<19dLytMsgWindowWood_c>CFR19dLytMsgWindowWood_c = .text:0x8011B680; // type:function size:0x30 fn_8011B6B0 = .text:0x8011B6B0; // type:function size:0x30 fn_8011B6E0 = .text:0x8011B6E0; // type:function size:0x30 fn_8011B710 = .text:0x8011B710; // type:function size:0x30 @@ -7131,7 +7131,7 @@ fn_80120DC0 = .text:0x80120DC0; // type:function size:0x104 fn_80120ED0 = .text:0x80120ED0; // type:function size:0x28 fn_80120F00 = .text:0x80120F00; // type:function size:0x14C fn_80121050 = .text:0x80121050; // type:function size:0xC -fn_80121060 = .text:0x80121060; // type:function size:0x8 +vt_0x40__20dLytMsgWindowSubtypeCFv = .text:0x80121060; // type:function size:0x8 LytMsgWindowTalk__initialize = .text:0x80121070; // type:function size:0x2F8 fn_80121370 = .text:0x80121370; // type:function size:0xE0 LytMsgWindowTalk__stateInvisibleEnter = .text:0x80121450; // type:function size:0x8 @@ -7253,34 +7253,34 @@ fn_801256B0 = .text:0x801256B0; // type:function size:0x8 LytMsgWindowSword__initStates = .text:0x801256C0; // type:function size:0x3F4 LytMsgWindowSword__dtor2 = .text:0x80125AC0; // type:function size:0x58 fn_80125B20 = .text:0x80125B20; // type:function size:0x88 -fn_80125BB0 = .text:0x80125BB0; // type:function size:0x278 -fn_80125E30 = .text:0x80125E30; // type:function size:0xD8 -fn_80125F10 = .text:0x80125F10; // type:function size:0x8 -fn_80125F20 = .text:0x80125F20; // type:function size:0x28 -fn_80125F50 = .text:0x80125F50; // type:function size:0x4 -fn_80125F60 = .text:0x80125F60; // type:function size:0x48 -fn_80125FB0 = .text:0x80125FB0; // type:function size:0x78 -fn_80126030 = .text:0x80126030; // type:function size:0x4 -fn_80126040 = .text:0x80126040; // type:function size:0x4 -fn_80126050 = .text:0x80126050; // type:function size:0x28 -fn_80126080 = .text:0x80126080; // type:function size:0x4 -fn_80126090 = .text:0x80126090; // type:function size:0x48 -fn_801260E0 = .text:0x801260E0; // type:function size:0x78 -fn_80126160 = .text:0x80126160; // type:function size:0x4 -fn_80126170 = .text:0x80126170; // type:function size:0xBC -fn_80126230 = .text:0x80126230; // type:function size:0x14 -fn_80126250 = .text:0x80126250; // type:function size:0xC -fn_80126260 = .text:0x80126260; // type:function size:0x4C -fn_801262B0 = .text:0x801262B0; // type:function size:0xC -fn_801262C0 = .text:0x801262C0; // type:function size:0x4C -fn_80126310 = .text:0x80126310; // type:function size:0x7C -fn_80126390 = .text:0x80126390; // type:function size:0x8 -fn_801263A0 = .text:0x801263A0; // type:function size:0x8 -fn_801263B0 = .text:0x801263B0; // type:function size:0x8 -fn_801263C0 = .text:0x801263C0; // type:function size:0x8 -LytMsgWindowWood__initStates = .text:0x801263D0; // type:function size:0x338 -LytMsgWindowWood__dtor = .text:0x80126710; // type:function size:0x58 -fn_80126770 = .text:0x80126770; // type:function size:0x88 +build__19dLytMsgWindowWood_cFPvPQ23d2d10ResAccIf_cP15dTagProcessor_c = .text:0x80125BB0; // type:function size:0x278 +remove__19dLytMsgWindowWood_cFv = .text:0x80125E30; // type:function size:0xD8 +initializeState_Invisible__19dLytMsgWindowWood_cFv = .text:0x80125F10; // type:function size:0x8 +executeState_Invisible__19dLytMsgWindowWood_cFv = .text:0x80125F20; // type:function size:0x28 +finalizeState_Invisible__19dLytMsgWindowWood_cFv = .text:0x80125F50; // type:function size:0x4 +initializeState_In__19dLytMsgWindowWood_cFv = .text:0x80125F60; // type:function size:0x48 +executeState_In__19dLytMsgWindowWood_cFv = .text:0x80125FB0; // type:function size:0x78 +finalizeState_In__19dLytMsgWindowWood_cFv = .text:0x80126030; // type:function size:0x4 +initializeState_Visible__19dLytMsgWindowWood_cFv = .text:0x80126040; // type:function size:0x4 +executeState_Visible__19dLytMsgWindowWood_cFv = .text:0x80126050; // type:function size:0x28 +finalizeState_Visible__19dLytMsgWindowWood_cFv = .text:0x80126080; // type:function size:0x4 +initializeState_Out__19dLytMsgWindowWood_cFv = .text:0x80126090; // type:function size:0x48 +executeState_Out__19dLytMsgWindowWood_cFv = .text:0x801260E0; // type:function size:0x78 +finalizeState_Out__19dLytMsgWindowWood_cFv = .text:0x80126160; // type:function size:0x4 +execute__19dLytMsgWindowWood_cFv = .text:0x80126170; // type:function size:0xBC +draw__19dLytMsgWindowWood_cFv = .text:0x80126230; // type:function size:0x14 +vt_0x1C__19dLytMsgWindowWood_cFv = .text:0x80126250; // type:function size:0xC +vt_0x20__19dLytMsgWindowWood_cCFv = .text:0x80126260; // type:function size:0x4C +vt_0x24__19dLytMsgWindowWood_cFv = .text:0x801262B0; // type:function size:0xC +vt_0x28__19dLytMsgWindowWood_cCFv = .text:0x801262C0; // type:function size:0x4C +setText__19dLytMsgWindowWood_cFPCw = .text:0x80126310; // type:function size:0x7C +vt_0x3C__19dLytMsgWindowWood_cCFv = .text:0x80126390; // type:function size:0x8 +vt_0x38__19dLytMsgWindowWood_cFv = .text:0x801263A0; // type:function size:0x8 +vt_0x34__19dLytMsgWindowWood_cFv = .text:0x801263B0; // type:function size:0x8 +vt_0x30__19dLytMsgWindowWood_cFv = .text:0x801263C0; // type:function size:0x8 +__sinit_\d_lyt_msg_window_wood_cpp = .text:0x801263D0; // type:function size:0x338 scope:local +__dt__34sFStateID_c<19dLytMsgWindowWood_c>Fv = .text:0x80126710; // type:function size:0x58 +isSameName__34sFStateID_c<19dLytMsgWindowWood_c>CFPCc = .text:0x80126770; // type:function size:0x88 fn_80126800 = .text:0x80126800; // type:function size:0x284 fn_80126A90 = .text:0x80126A90; // type:function size:0xD8 fn_80126B70 = .text:0x80126B70; // type:function size:0x8 @@ -31963,15 +31963,15 @@ __vt__13DoButtonClass = .data:0x8051AA60; // type:object size:0x16C __vt__29sFStateID_c<14dLytDobutton_c> = .data:0x8051ABCC; // type:object size:0x34 lbl_8051AC00 = .data:0x8051AC00; // type:object size:0xC lbl_8051AC0C = .data:0x8051AC0C; // type:object size:0xC -lbl_8051AC18 = .data:0x8051AC18; // type:object size:0x14 -lbl_8051AC2C = .data:0x8051AC2C; // type:object size:0xC -lbl_8051AC38 = .data:0x8051AC38; // type:object size:0x14 -lbl_8051AC4C = .data:0x8051AC4C; // type:object size:0x10 -lbl_8051AC5C = .data:0x8051AC5C; // type:object size:0x18 +lbl_8051AC18 = .data:0x8051AC18; // type:object size:0x11 data:string +lbl_8051AC2C = .data:0x8051AC2C; // type:object size:0xB data:string +lbl_8051AC38 = .data:0x8051AC38; // type:object size:0x13 data:string +lbl_8051AC4C = .data:0x8051AC4C; // type:object size:0xD data:string +lbl_8051AC5C = .data:0x8051AC5C; // type:object size:0x15 data:string lbl_8051AC74 = .data:0x8051AC74; // type:object size:0xC data:string -lbl_8051AC80 = .data:0x8051AC80; // type:object size:0x14 -lbl_8051AC94 = .data:0x8051AC94; // type:object size:0x10 -lbl_8051ACA4 = .data:0x8051ACA4; // type:object size:0x34 +lbl_8051AC80 = .data:0x8051AC80; // type:object size:0x12 data:string +lbl_8051AC94 = .data:0x8051AC94; // type:object size:0xE data:string +__vt__16dLytCommonABtn_c = .data:0x8051ACA4; // type:object size:0x34 lbl_8051ACD8 = .data:0x8051ACD8; // type:object size:0x18 data:string lbl_8051ACF0 = .data:0x8051ACF0; // type:object size:0x9 data:string lbl_8051ACFC = .data:0x8051ACFC; // type:object size:0x1C data:string @@ -32234,18 +32234,18 @@ lbl_8051D694 = .data:0x8051D694; // type:object size:0xC lbl_8051D6A0 = .data:0x8051D6A0; // type:object size:0x18 LytMsgWindowSword__vtable = .data:0x8051D6B8; // type:object size:0x1B4 lbl_8051D86C = .data:0x8051D86C; // type:object size:0x34 -lbl_8051D8A0 = .data:0x8051D8A0; // type:object size:0x1C -lbl_8051D8BC = .data:0x8051D8BC; // type:object size:0xC -lbl_8051D8C8 = .data:0x8051D8C8; // type:object size:0x1C -lbl_8051D8E4 = .data:0x8051D8E4; // type:object size:0xC -lbl_8051D8F0 = .data:0x8051D8F0; // type:object size:0x1C -lbl_8051D90C = .data:0x8051D90C; // type:object size:0xC -lbl_8051D918 = .data:0x8051D918; // type:object size:0xC -lbl_8051D924 = .data:0x8051D924; // type:object size:0x10 -lbl_8051D934 = .data:0x8051D934; // type:object size:0x10 -lbl_8051D944 = .data:0x8051D944; // type:object size:0xC -lbl_8051D950 = .data:0x8051D950; // type:object size:0x18 -lbl_8051D968 = .data:0x8051D968; // type:object size:0x16C +lbl_8051D8A0 = .data:0x8051D8A0; // type:object size:0x19 data:string +lbl_8051D8BC = .data:0x8051D8BC; // type:object size:0xB data:string +lbl_8051D8C8 = .data:0x8051D8C8; // type:object size:0x1B data:string +lbl_8051D8E4 = .data:0x8051D8E4; // type:object size:0xA data:string +lbl_8051D8F0 = .data:0x8051D8F0; // type:object size:0x1A data:string +lbl_8051D90C = .data:0x8051D90C; // type:object size:0xA data:string +lbl_8051D918 = .data:0x8051D918; // type:object size:0xB data:string +lbl_8051D924 = .data:0x8051D924; // type:object size:0xD data:string +lbl_8051D934 = .data:0x8051D934; // type:object size:0xE data:string +lbl_8051D944 = .data:0x8051D944; // type:object size:0x9 data:string +lbl_8051D950 = .data:0x8051D950; // type:object size:0x16 data:string +__vt__19dLytMsgWindowWood_c = .data:0x8051D968; // type:object size:0x44 lbl_8051DAD4 = .data:0x8051DAD4; // type:object size:0x34 lbl_8051DB08 = .data:0x8051DB08; // type:object size:0x1C lbl_8051DB24 = .data:0x8051DB24; // type:object size:0xC @@ -38208,7 +38208,7 @@ lbl_805725D0 = .sdata:0x805725D0; // type:object size:0x8 data:4byte lbl_805725D8 = .sdata:0x805725D8; // type:object size:0x8 data:4byte lbl_805725E0 = .sdata:0x805725E0; // type:object size:0x8 data:4byte lbl_805725E8 = .sdata:0x805725E8; // type:object size:0x8 data:4byte -lbl_805725F0 = .sdata:0x805725F0; // type:object size:0x8 data:4byte +lbl_805725F0 = .sdata:0x805725F0; // type:object size:0x4 data:4byte lbl_805725F8 = .sdata:0x805725F8; // type:object size:0x8 data:4byte lbl_80572600 = .sdata:0x80572600; // type:object size:0x8 data:4byte lbl_80572608 = .sdata:0x80572608; // type:object size:0x8 data:4byte @@ -48858,11 +48858,11 @@ LytMsgWindowSword__STATE_IN = .bss:0x805AED00; // type:object size:0x40 data:4by LytMsgWindowSword__STATE_WAIT = .bss:0x805AED40; // type:object size:0x40 data:4byte LytMsgWindowSword__STATE_VISIBLE = .bss:0x805AED80; // type:object size:0x40 data:4byte LytMsgWindowSword__STATE_OUT = .bss:0x805AEDC0; // type:object size:0x30 data:4byte -lbl_805AEDF0 = .bss:0x805AEDF0; // type:object size:0x10 -LytMsgWindowWood__STATE_INVISIBLE = .bss:0x805AEE00; // type:object size:0x40 data:4byte -LytMsgWindowWood__STATE_IN = .bss:0x805AEE40; // type:object size:0x40 data:4byte -LytMsgWindowWood__STATE_VISIBLE = .bss:0x805AEE80; // type:object size:0x40 data:4byte -LytMsgWindowWood__STATE_OUT = .bss:0x805AEEC0; // type:object size:0x30 data:4byte +lbl_805AEDF0 = .bss:0x805AEDF0; // type:object size:0xC +StateID_Invisible__19dLytMsgWindowWood_c = .bss:0x805AEE00; // type:object size:0x30 data:4byte +StateID_In__19dLytMsgWindowWood_c = .bss:0x805AEE40; // type:object size:0x30 data:4byte +StateID_Visible__19dLytMsgWindowWood_c = .bss:0x805AEE80; // type:object size:0x30 data:4byte +StateID_Out__19dLytMsgWindowWood_c = .bss:0x805AEEC0; // type:object size:0x30 data:4byte lbl_805AEEF0 = .bss:0x805AEEF0; // type:object size:0x10 LytMsgWindowStone__STATE_INVISIBLE = .bss:0x805AEF00; // type:object size:0x40 data:4byte LytMsgWindowStone__STATE_IN = .bss:0x805AEF40; // type:object size:0x40 data:4byte diff --git a/configure.py b/configure.py index 085daf4e..c5fbf426 100644 --- a/configure.py +++ b/configure.py @@ -404,17 +404,18 @@ config.libs = [ Object(NonMatching, "d/lyt/meter/d_lyt_meter_heart.cpp"), Object(NonMatching, "d/lyt/meter/d_lyt_meter_shield_gauge.cpp"), Object(NonMatching, "d/lyt/d_lyt_do_button.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"), - Object(NonMatching, "d/lyt/d_lyt_msg_window.cpp"), - Object(NonMatching, "d/lyt/d_lyt_msg_window_select_btn.cpp"), - Object(NonMatching, "d/lyt/d_lyt_msg_window_talk.cpp"), - Object(NonMatching, "d/lyt/d_lyt_msg_window_link.cpp"), - Object(NonMatching, "d/lyt/d_lyt_msg_window_get.cpp"), - Object(NonMatching, "d/lyt/d_lyt_msg_window_sword.cpp"), - Object(NonMatching, "d/lyt/d_lyt_msg_window_wood.cpp"), - Object(NonMatching, "d/lyt/d_lyt_msg_window_stone.cpp"), - Object(NonMatching, "d/lyt/d_lyt_msg_window_demo.cpp"), + Object(NonMatching, "d/lyt/msg_window/d_lyt_msg_window.cpp"), + Object(NonMatching, "d/lyt/msg_window/d_lyt_msg_window_select_btn.cpp"), + Object(NonMatching, "d/lyt/msg_window/d_lyt_msg_window_talk.cpp"), + Object(NonMatching, "d/lyt/msg_window/d_lyt_msg_window_link.cpp"), + Object(NonMatching, "d/lyt/msg_window/d_lyt_msg_window_get.cpp"), + Object(NonMatching, "d/lyt/msg_window/d_lyt_msg_window_sword.cpp"), + Object(Matching, "d/lyt/msg_window/d_lyt_msg_window_wood.cpp"), + Object(NonMatching, "d/lyt/msg_window/d_lyt_msg_window_stone.cpp"), + Object(NonMatching, "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"), diff --git a/include/d/d_sys.h b/include/d/d_sys.h index 02a9c127..a9d6ff9c 100644 --- a/include/d/d_sys.h +++ b/include/d/d_sys.h @@ -7,6 +7,7 @@ namespace dSys { void setFrameRate(u32); +u8 getFrameRate(); void setClearColor(mColor clr); } // namespace dSys_c diff --git a/include/d/lyt/d2d.h b/include/d/lyt/d2d.h index a1015f1f..50dddb7e 100644 --- a/include/d/lyt/d2d.h +++ b/include/d/lyt/d2d.h @@ -44,10 +44,10 @@ class Multi_c : public m2d::Base_c { public: Multi_c(); virtual ~Multi_c() {} - virtual void draw() override; - virtual void animate(); - virtual void calc(); - virtual bool build(const char *name, m2d::ResAccIf_c *acc); + /* vt 0x0C */ virtual void draw() override; + /* vt 0x10 */ virtual void animate(); + /* vt 0x18 */ virtual void calc(); + /* vt 0x18 */ virtual bool build(const char *name, m2d::ResAccIf_c *acc); void calcBefore(); void calcAfter(); @@ -79,11 +79,11 @@ class LytBase_c : public Multi_c { public: LytBase_c(); virtual ~LytBase_c(); - virtual void draw() override { + /* vt 0x0C */ virtual void draw() override { mLayout.Draw(mDrawInfo); }; - virtual bool build(const char *name, m2d::ResAccIf_c *acc) override; + /* vt 0x18 */ virtual bool build(const char *name, m2d::ResAccIf_c *acc) override; dTextBox_c *getTextBox(const char *name); dTextBox_c *getSizeBoxInWindow(const char *windowName); dWindow_c *getWindow(const char *name); @@ -131,9 +131,11 @@ private: class dSubPane; struct SubPaneListNode { - nw4r::ut::LinkListNode mNode; - dSubPane *mpLytPane; - nw4r::lyt::Pane *mpPane; + /* 0x00 */ nw4r::ut::LinkListNode mNode; + /** The d lyt pane, set by the UI element */ + /* 0x08 */ dSubPane *mpLytPane; + /** The nw4r lyt pane, set by linkMeters */ + /* 0x0C */ nw4r::lyt::Pane *mpPane; }; typedef nw4r::ut::LinkList SubPaneList; @@ -141,24 +143,24 @@ typedef nw4r::ut::LinkList Su class dSubPane { public: dSubPane() : field_0x04(false), field_0x05(0) {} - virtual ~dSubPane() {} - virtual bool build(ResAccIf_c *resAcc) = 0; - virtual bool remove() = 0; - virtual bool execute() = 0; - virtual nw4r::lyt::Pane *getPane() = 0; - virtual LytBase_c *getLyt() = 0; - virtual const char *getName() const = 0; - virtual bool LytMeter0x24() const { + /* vt 0x08 */ virtual ~dSubPane() {} + /* vt 0x0C */ virtual bool build(ResAccIf_c *resAcc) = 0; + /* vt 0x10 */ virtual bool remove() = 0; + /* vt 0x14 */ virtual bool execute() = 0; + /* vt 0x18 */ virtual nw4r::lyt::Pane *getPane() = 0; + /* vt 0x1C */ virtual LytBase_c *getLyt() = 0; + /* vt 0x20 */ virtual const char *getName() const = 0; + /* vt 0x24 */ virtual bool LytMeter0x24() const { return field_0x04; } - virtual void LytMeter0x28(bool arg) { + /* vt 0x28 */ virtual void LytMeter0x28(bool arg) { field_0x04 = arg; } - virtual u8 LytMeter0x2C() const { + /* vt 0x2C */ virtual u8 LytMeter0x2C() const { return field_0x05; } - virtual void LytMeter0x30(u8 arg) { + /* vt 0x30 */ virtual void LytMeter0x30(u8 arg) { field_0x05 = arg; } @@ -178,9 +180,9 @@ struct AnmGroupBase_c { bool init(const char *fileName, m2d::ResAccIf_c *acc, d2d::Layout_c *layout, const char *animName); bool init(nw4r::lyt::AnimTransform *transform, const char *fileName, m2d::ResAccIf_c *acc, nw4r::lyt::Group *group); - bool setDirection(bool backwards); + bool bind(bool bDisable); bool unbind(); - bool afterUnbind(); + bool remove(); void setAnimEnable(bool); void setAnmFrame(f32); void syncAnmFrame(); @@ -188,7 +190,7 @@ struct AnmGroupBase_c { void setBackward(); inline void setFrameAndControlThings(f32 frame) { - setDirection(false); + bind(false); setAnimEnable(true); mpFrameCtrl->setFrame(frame); syncAnmFrame(); diff --git a/include/d/lyt/d_lyt_common_a_btn.h b/include/d/lyt/d_lyt_common_a_btn.h new file mode 100644 index 00000000..dc38a6ae --- /dev/null +++ b/include/d/lyt/d_lyt_common_a_btn.h @@ -0,0 +1,103 @@ +#ifndef D_LYT_COMMON_A_BTN_H +#define D_LYT_COMMON_A_BTN_H + +#include "d/lyt/d2d.h" + +/** + * Made up name. + * + * An A button used in various message windows, as well as + * the title menu. Can be hidden, visible, animating in, animating out. + */ +class dLytCommonABtn_c : public d2d::dSubPane { +public: + 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(); + } + + void openMaybe() { + field_0x1B0 = 1; + } + + void closeMaybe() { + field_0x1B0 = 0; + } + + u8 shouldBeOpen() const { + return field_0x1B0; + } + + u8 isDoneOut() const { + return mIsDoneOut; + } + + bool requestIn(); + bool requestOut(bool b); + + enum SoundVariant { + VARIANT_NORMAL, + VARIANT_TITLE, + }; + + void setSoundVariant(SoundVariant); + void resetToInvisble(); + + enum ABtnState { + STATE_INVISIBLE, + STATE_IN, + STATE_VISIBLE, + STATE_OUT, + }; + +private: + + enum OutState { + OUT_STATE_DECIDING, + OUT_STATE_GOTO_OUT, + OUT_STATE_OUT, + OUT_STATE_GOTO_INVISIBLE, + }; + + void setState(ABtnState state); + + void runExecuteFunc(); + + void executeStateInvisible(); + void executeStateIn(); + void executeStateVisible(); + void executeStateDecideOut(); + + void gotoStateInvisible(); + void gotoStateIn(); + void goToStateVisible(); + void goToStateDecideOut(); + + typedef void (dLytCommonABtn_c::*executeFunc)(void); + static const executeFunc sExecuteFuncs[4]; + + /* 0x008 */ d2d::dLytSub mLyt; + /* 0x09C */ d2d::AnmGroup_c mAnm[4]; + /* 0x19C */ ABtnState mState; + /* 0x1A0 */ OutState mOutState; + /* 0x1A4 */ SoundVariant mSoundVariant; + /* 0x1A8 */ u8 field_0x1A8; + /* 0x1A9 */ bool mInRequested; + /* 0x1AA */ bool mOutRequested; + /* 0x1AB */ bool mIsDoneOut; + /* 0x1AC */ u8 field_0x1AC; + /* 0x1AD */ bool mNoDecide; + /* 0x1AE */ u8 field_0x1AE; + /* 0x1AF */ u8 field_0x1AF; + /* 0x1B0 */ u8 field_0x1B0; +}; + +#endif diff --git a/include/d/lyt/d_textbox.h b/include/d/lyt/d_textbox.h index b3a69449..cfbd3396 100644 --- a/include/d/lyt/d_textbox.h +++ b/include/d/lyt/d_textbox.h @@ -5,6 +5,8 @@ #include "nw4r/lyt/lyt_textBox.h" #include "nw4r/lyt/lyt_types.h" +class dTagProcessor_c; + class dTextBox_c : public nw4r::lyt::TextBox { friend class dWindow_c; @@ -26,6 +28,10 @@ public: nw4r::lyt::TextBox::SetFontSize(value); } + void set0x1F6(u8 val) { + field_0x1F6 = val; + } + void set0x1F8(u8 val) { field_0x1F8 = val; } @@ -39,6 +45,7 @@ public: } void fn_800AF930(const wchar_t *); + void fn_800AF540(const wchar_t *text, dTagProcessor_c *tagProcessor, ...); // @bug: This does not implement UT's RTTI, so casts to dTextBox_c will // succeed even if all you have is a lyt::TextBox @@ -49,7 +56,9 @@ private: /* 0x108 */ u8 field_0x108[0x118 - 0x108]; /* 0x118 */ nw4r::lyt::Size mTextScale; /* 0x120 */ f32 mScale; - /* 0x124 */ u8 field_0x124[0x1F8 - 0x124]; + /* 0x124 */ u8 field_0x124[0x1F6 - 0x124]; + /* 0x1F6 */ u8 field_0x1F6; + /* 0x1F7 */ u8 field_0x1F7; /* 0x1F8 */ u8 field_0x1F8; /* 0x1F9 */ u8 field_0x1F9[0x204 - 0x1F9]; }; diff --git a/include/d/lyt/msg_window/d_lyt_msg_window_common.h b/include/d/lyt/msg_window/d_lyt_msg_window_common.h new file mode 100644 index 00000000..907cfbfd --- /dev/null +++ b/include/d/lyt/msg_window/d_lyt_msg_window_common.h @@ -0,0 +1,27 @@ +#ifndef D_LYT_MGS_WINDOW_COMMON_H +#define D_LYT_MGS_WINDOW_COMMON_H + +#include "d/d_tag_processor.h" +#include "d/lyt/d2d.h" +#include "m/m2d.h" + +class dLytMsgWindowSubtype : public m2d::Base_c { +public: + /* vt 0x08 */ virtual ~dLytMsgWindowSubtype() {} + // vt 0x0C = m2d::Base_c::draw + /* vt 0x10 */ virtual bool build(void *unk, d2d::ResAccIf_c *resAcc, dTagProcessor_c *tagProcessor); + /* vt 0x14 */ virtual bool remove(); + /* vt 0x18 */ virtual bool execute(); + /* vt 0x1C */ virtual void vt_0x1C(); + /* vt 0x20 */ virtual bool vt_0x20() const; + /* vt 0x24 */ virtual void vt_0x24(); + /* vt 0x28 */ virtual bool vt_0x28() const; + /* vt 0x2C */ virtual bool setText(const wchar_t *text); + /* vt 0x30 */ virtual dTextBox_c *vt_0x30(); + /* vt 0x34 */ virtual void vt_0x34(); + /* vt 0x38 */ virtual void vt_0x38(bool b); + /* vt 0x3C */ virtual u8 vt_0x3C() const; + /* vt 0x40 */ virtual bool vt_0x40() const; +}; + +#endif diff --git a/include/d/lyt/msg_window/d_lyt_msg_window_wood.h b/include/d/lyt/msg_window/d_lyt_msg_window_wood.h new file mode 100644 index 00000000..b3457fc4 --- /dev/null +++ b/include/d/lyt/msg_window/d_lyt_msg_window_wood.h @@ -0,0 +1,55 @@ +#ifndef D_LYT_MSG_WINDOW_WOOD_H +#define D_LYT_MSG_WINDOW_WOOD_H + +#include "d/d_tag_processor.h" +#include "d/lyt/d2d.h" +#include "d/lyt/d_lyt_common_a_btn.h" +#include "d/lyt/d_textbox.h" +#include "d/lyt/msg_window/d_lyt_msg_window_common.h" +#include "nw4r/lyt/lyt_pane.h" +#include "s/s_State.hpp" + +class dLytMsgWindowWood_c : public dLytMsgWindowSubtype { +public: + /* vt 0x08 */ virtual ~dLytMsgWindowWood_c() {} + /* vt 0x0C */ virtual void draw() override; + /* vt 0x10 */ virtual bool build(void *unk, d2d::ResAccIf_c *resAcc, dTagProcessor_c *tagProcessor) override; + /* vt 0x14 */ virtual bool remove() override; + /* vt 0x18 */ virtual bool execute() override; + /* vt 0x1C */ virtual void vt_0x1C() override; + /* vt 0x20 */ virtual bool vt_0x20() const override; + /* vt 0x24 */ virtual void vt_0x24() override; + /* vt 0x28 */ virtual bool vt_0x28() const override; + /* vt 0x2C */ virtual bool setText(const wchar_t *text) override; + /* vt 0x30 */ virtual dTextBox_c *vt_0x30() override { + return mpTextboxes[0]; + } + /* vt 0x34 */ virtual void vt_0x34() override { + mCommon.requestIn(); + } + /* vt 0x38 */ virtual void vt_0x38(bool b) override { + mCommon.requestOut(b); + } + /* vt 0x3C */ virtual u8 vt_0x3C() const override { + return mCommon.isDoneOut(); + } + + STATE_FUNC_DECLARE(dLytMsgWindowWood_c, Invisible); + STATE_FUNC_DECLARE(dLytMsgWindowWood_c, In); + STATE_FUNC_DECLARE(dLytMsgWindowWood_c, Visible); + STATE_FUNC_DECLARE(dLytMsgWindowWood_c, Out); + +private: + /* 0x010 */ UI_STATE_MGR_DECLARE(dLytMsgWindowWood_c); + /* 0x04C */ d2d::SubPaneList mSubpaneList; + /* 0x05C */ d2d::SubPaneListNode mNodes[1]; + /* 0x068 */ d2d::ResAccIf_c mResAcc; + /* 0x3D8 */ d2d::LytBase_c mLyt; + /* 0x468 */ d2d::AnmGroup_c mAnm[3]; + /* 0x528 */ dTextBox_c *mpTextboxes[2]; + /* 0x530 */ nw4r::lyt::Pane *mpPanes[2]; + /* 0x538 */ dTagProcessor_c *mpTagProcessor; + /* 0x53C */ dLytCommonABtn_c mCommon; +}; + +#endif diff --git a/src/d/d_cs_game.cpp b/src/d/d_cs_game.cpp index 3ed7ea18..bc153463 100644 --- a/src/d/d_cs_game.cpp +++ b/src/d/d_cs_game.cpp @@ -234,7 +234,7 @@ bool dCsGame_c::lytItemCursor_c::doInit() { mAnm.init(mAnmGroups.tmp.mAnmGroups, lytItemCursorMap, 0x17, mpResAcc, mLyt.getLayout()); for (int i = 0; i < 0x17; i++) { - mAnmGroups.tmp.mAnmGroups[i].setDirection(false); + mAnmGroups.tmp.mAnmGroups[i].bind(false); mAnmGroups.tmp.mAnmGroups[i].setAnimEnable(false); } diff --git a/src/d/lyt/d2d.cpp b/src/d/lyt/d2d.cpp index 41551895..6e3f4f5c 100644 --- a/src/d/lyt/d2d.cpp +++ b/src/d/lyt/d2d.cpp @@ -811,7 +811,7 @@ bool AnmGroupBase_c::init( return true; } -bool AnmGroupBase_c::setDirection(bool b) { +bool AnmGroupBase_c::bind(bool bDisable) { nw4r::lyt::AnimTransform *anmTransform = mpAnmTransform; if (anmTransform == nullptr) { return false; @@ -823,7 +823,7 @@ bool AnmGroupBase_c::setDirection(bool b) { nw4r::lyt::BindAnimation(mpGroup, anmTransform, false, b); mFlags |= ANMGROUP_FLAG_BOUND; - if (b) { + if (bDisable) { mFlags = (mFlags & ~ANMGROUP_FLAG_ENABLE); } else { mFlags |= ANMGROUP_FLAG_ENABLE; @@ -855,7 +855,7 @@ bool AnmGroupBase_c::unbind() { return true; } -bool AnmGroupBase_c::afterUnbind() { +bool AnmGroupBase_c::remove() { return true; } @@ -905,7 +905,7 @@ bool AnmGroups::init( void AnmGroups::remove() { for (int i = 0; i < mNumAnmGroups; i++) { - mpAnmGroups[i].afterUnbind(); + mpAnmGroups[i].remove(); } } diff --git a/src/d/lyt/d_lyt_area_caption.cpp b/src/d/lyt/d_lyt_area_caption.cpp index e9d5eaf5..97145059 100644 --- a/src/d/lyt/d_lyt_area_caption.cpp +++ b/src/d/lyt/d_lyt_area_caption.cpp @@ -43,7 +43,7 @@ bool dLytAreaCaptionParts_c::init(int first) { mAnmCtrlInUse[i] = false; } else { mAnmGroups[i].init(brlanMap1[i].mFile, &mResAcc, mLyt.getLayout(), brlanMap1[i].mName); - mAnmGroups[i].setDirection(false); + mAnmGroups[i].bind(false); mAnmGroups[i].setAnimEnable(false); mAnmCtrlInUse[i] = true; } @@ -56,7 +56,7 @@ bool dLytAreaCaptionParts_c::init(int first) { mAnmCtrlInUse[i] = false; } else { mAnmGroups[i].init(brlanMap2[i].mFile, &mResAcc, mLyt.getLayout(), brlanMap2[i].mName); - mAnmGroups[i].setDirection(false); + mAnmGroups[i].bind(false); mAnmGroups[i].setAnimEnable(false); mAnmCtrlInUse[i] = true; } @@ -78,7 +78,7 @@ bool dLytAreaCaptionParts_c::remove() { for (int i = 0; i < 4; i++) { if (mAnmCtrlInUse[i]) { mAnmGroups[i].unbind(); - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } } mResAcc.detach(); diff --git a/src/d/lyt/d_lyt_battery.cpp b/src/d/lyt/d_lyt_battery.cpp index 1b1f5f16..0f8681d9 100644 --- a/src/d/lyt/d_lyt_battery.cpp +++ b/src/d/lyt/d_lyt_battery.cpp @@ -48,7 +48,7 @@ bool dLytBattery_c::init() { for (int i = 0; i < 4; i++) { mAnmGroups[i].init(brlanMap[i].mFile, &mResAcc, mLyt.getLayout(), brlanMap[i].mName); - mAnmGroups[i].setDirection(false); + mAnmGroups[i].bind(false); mAnmGroups[i].setAnimEnable(false); } diff --git a/src/d/lyt/d_lyt_bird_gauge.cpp b/src/d/lyt/d_lyt_bird_gauge.cpp index 5fd5337a..9ed904f1 100644 --- a/src/d/lyt/d_lyt_bird_gauge.cpp +++ b/src/d/lyt/d_lyt_bird_gauge.cpp @@ -109,7 +109,7 @@ bool dLytBirdGaugeMain_c::build(d2d::ResAccIf_c *resAcc) { for (int i = 0; i < LYT_SKY_GAUGE_MAIN_NUM_ANIMS; i++) { mAnmGroups[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName); - mAnmGroups[i].setDirection(false); + mAnmGroups[i].bind(false); mAnmGroups[i].setAnimEnable(false); } @@ -148,7 +148,7 @@ bool dLytBirdGaugeMain_c::execute() { bool dLytBirdGaugeMain_c::remove() { mLyt.unbindAnims(); for (int i = 0; i < LYT_SKY_GAUGE_MAIN_NUM_ANIMS; i++) { - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } return true; } diff --git a/src/d/lyt/d_lyt_common_a_btn.cpp b/src/d/lyt/d_lyt_common_a_btn.cpp new file mode 100644 index 00000000..056e6397 --- /dev/null +++ b/src/d/lyt/d_lyt_common_a_btn.cpp @@ -0,0 +1,244 @@ + + +#include "d/lyt/d_lyt_common_a_btn.h" + +#include "common.h" +#include "d/d_sys.h" +#include "d/lyt/d2d.h" +#include "toBeSorted/small_sound_mgr.h" + +static const d2d::LytBrlanMapping brlanMap[] = { + { "aBtn_00_in.brlan", "G_inOut_00"}, + { "aBtn_00_loop.brlan", "G_loopBtn_00"}, + {"aBtn_00_decide.brlan", "G_decide_00"}, + { "aBtn_00_out.brlan", "G_inOut_00"}, +}; + +#define MSG_ABTN_ANIM_IN 0 +#define MSG_ABTN_ANIM_LOOP 1 +#define MSG_ABTN_ANIM_DECIDE 2 +#define MSG_ABTN_ANIM_OUT 3 + +#define MSG_ABTN_NUM_ANIMS 4 + +const dLytCommonABtn_c::executeFunc dLytCommonABtn_c::sExecuteFuncs[4] = { + &dLytCommonABtn_c::executeStateInvisible, + &dLytCommonABtn_c::executeStateIn, + &dLytCommonABtn_c::executeStateVisible, + &dLytCommonABtn_c::executeStateDecideOut, +}; + +bool dLytCommonABtn_c::build(d2d::ResAccIf_c *resAcc) { + mLyt.setResAcc(resAcc); + mLyt.build("aBtn_00.brlyt", nullptr); + + for (int i = 0; i < MSG_ABTN_NUM_ANIMS; i++) { + mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName); + } + + resetToInvisble(); + setSoundVariant(VARIANT_NORMAL); + return true; +} + +bool dLytCommonABtn_c::remove() { + for (int i = 0; i < MSG_ABTN_NUM_ANIMS; i++) { + mAnm[i].remove(); + } + return true; +} + +bool dLytCommonABtn_c::execute() { + runExecuteFunc(); + if (mState == STATE_INVISIBLE) { + return true; + } + mLyt.calc(); + return true; +} + +bool dLytCommonABtn_c::requestIn() { + if (mState != STATE_INVISIBLE) { + return false; + } + mInRequested = true; + return true; +} + +bool dLytCommonABtn_c::requestOut(bool b) { + if (mState != STATE_VISIBLE) { + return false; + } + mOutRequested = true; + field_0x1AC = b; + return true; +} + +void dLytCommonABtn_c::resetToInvisble() { + gotoStateInvisible(); +} + +void dLytCommonABtn_c::setSoundVariant(SoundVariant value) { + mSoundVariant = value; +} + +void dLytCommonABtn_c::runExecuteFunc() { + executeFunc fn = sExecuteFuncs[mState]; + if (fn != nullptr) { + (this->*fn)(); + } +} + +void dLytCommonABtn_c::gotoStateInvisible() { + setState(STATE_INVISIBLE); + mLyt.unbindAnims(); + + d2d::AnmGroup_c &inAnim = mAnm[MSG_ABTN_ANIM_IN]; + field_0x1A8 = 0; + mInRequested = false; + mOutRequested = false; + mIsDoneOut = false; + field_0x1AC = 0; + mNoDecide = false; + + inAnim.bind(false); + inAnim.setAnimEnable(true); + inAnim.setFrame(0.0f); + if (dSys::getFrameRate() == 1) { + inAnim.setRate(0.5f); + } else { + inAnim.setRate(1.0f); + } + mLyt.calc(); +} + +void dLytCommonABtn_c::executeStateInvisible() { + if (mInRequested != true) { + return; + } + + if (field_0x1AC == 1) { + gotoStateInvisible(); + } + mInRequested = false; + field_0x1A8 = 1; + gotoStateIn(); +} + +void dLytCommonABtn_c::gotoStateIn() { + setState(STATE_IN); +} + +void dLytCommonABtn_c::executeStateIn() { + d2d::AnmGroup_c &anm = mAnm[MSG_ABTN_ANIM_IN]; + if (anm.isEndReached() == true) { + goToStateVisible(); + } else { + anm.play(); + } +} + +void dLytCommonABtn_c::goToStateVisible() { + setState(STATE_VISIBLE); + mAnm[MSG_ABTN_ANIM_IN].unbind(); + d2d::AnmGroup_c &anm = mAnm[MSG_ABTN_ANIM_LOOP]; + anm.bind(false); + anm.setFrame(0.0f); + if (dSys::getFrameRate() == 1) { + anm.setRate(0.5f); + } else { + anm.setRate(1.0f); + } +} + +void dLytCommonABtn_c::executeStateVisible() { + if (mOutRequested == true) { + goToStateDecideOut(); + mOutRequested = false; + } else { + d2d::AnmGroup_c &anm = mAnm[MSG_ABTN_ANIM_LOOP]; + anm.play(); + } +} + +void dLytCommonABtn_c::goToStateDecideOut() { + setState(STATE_OUT); + mAnm[MSG_ABTN_ANIM_LOOP].unbind(); + if (mNoDecide == true) { + mNoDecide = false; + d2d::AnmGroup_c &anm = mAnm[MSG_ABTN_ANIM_OUT]; + anm.bind(false); + anm.setFrame(0.0f); + if (dSys::getFrameRate() == 1) { + anm.setRate(0.5f); + } else { + anm.setRate(1.0f); + } + mOutState = OUT_STATE_OUT; + } else { + d2d::AnmGroup_c &anm = mAnm[MSG_ABTN_ANIM_DECIDE]; + anm.bind(false); + anm.setAnimEnable(true); + anm.setFrame(0.0f); + if (dSys::getFrameRate() == 1) { + anm.setRate(0.5f); + } else { + anm.setRate(1.0f); + } + if (mSoundVariant == VARIANT_NORMAL) { + SmallSoundManager::GetInstance()->playSound(SE_S_WINDOW_PRESS_A); + } else { + SmallSoundManager::GetInstance()->playSound(SE_S_TITLE_PRESS_START); + } + } +} + +void dLytCommonABtn_c::executeStateDecideOut() { + d2d::AnmGroup_c &decideAnm = mAnm[MSG_ABTN_ANIM_DECIDE]; + switch (mOutState) { + case OUT_STATE_DECIDING: { + if (decideAnm.isEndReached() == true) { + mOutState = OUT_STATE_GOTO_OUT; + if (field_0x1AC == 1) { + mIsDoneOut = true; + setState(STATE_INVISIBLE); + break; + } + } + decideAnm.play(); + break; + } + case OUT_STATE_GOTO_OUT: { + decideAnm.unbind(); + d2d::AnmGroup_c &anmOut = mAnm[MSG_ABTN_ANIM_OUT]; + anmOut.bind(false); + anmOut.setAnimEnable(true); + anmOut.setFrame(0.0f); + if (dSys::getFrameRate() == 1) { + anmOut.setRate(0.5f); + } else { + anmOut.setRate(1.0f); + } + mOutState = OUT_STATE_OUT; + break; + } + case OUT_STATE_OUT: { + d2d::AnmGroup_c &anmOut = mAnm[MSG_ABTN_ANIM_OUT]; + if (anmOut.isEndReached() == true) { + mOutState = OUT_STATE_GOTO_INVISIBLE; + mIsDoneOut = true; + } + anmOut.play(); + break; + } + case OUT_STATE_GOTO_INVISIBLE: { + gotoStateInvisible(); + break; + } + } +} + +void dLytCommonABtn_c::setState(ABtnState state) { + mState = state; + mOutState = OUT_STATE_DECIDING; +} diff --git a/src/d/lyt/d_lyt_common_arrow.cpp b/src/d/lyt/d_lyt_common_arrow.cpp index 5126fbba..2590df0a 100644 --- a/src/d/lyt/d_lyt_common_arrow.cpp +++ b/src/d/lyt/d_lyt_common_arrow.cpp @@ -60,7 +60,7 @@ bool dLytCommonArrow_c::fn_80168490() { d2d::dLytStructDList::GetInstance()->removeFromList2(&mStructD); mLytBase.unbindAnims(); for (int i = 0; i < 9; i++) { - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } return true; } diff --git a/src/d/lyt/d_lyt_common_icon_item.cpp b/src/d/lyt/d_lyt_common_icon_item.cpp index c4fc6a66..fd0ea926 100644 --- a/src/d/lyt/d_lyt_common_icon_item.cpp +++ b/src/d/lyt/d_lyt_common_icon_item.cpp @@ -45,7 +45,7 @@ bool dLytCommonIconItemPart1_c::build(d2d::ResAccIf_c *resAcc) { mLyt.build("commonIcon_02.brlyt", nullptr); for (int i = 0; i < ITEM_PART_1_NUM_ANIMS; i++) { mAnm[i].init(brlanMapPart1[i].mFile, resAcc, mLyt.getLayout(), brlanMapPart1[i].mName); - mAnm[i].setDirection(false); + mAnm[i].bind(false); mAnm[i].setRate(1.0f); } @@ -61,7 +61,7 @@ bool dLytCommonIconItemPart1_c::build(d2d::ResAccIf_c *resAcc) { bool dLytCommonIconItemPart1_c::remove() { for (int i = 0; i < ITEM_PART_1_NUM_ANIMS; i++) { mAnm[i].unbind(); - mAnm[i].afterUnbind(); + mAnm[i].remove(); } return true; } @@ -276,7 +276,7 @@ bool dLytCommonIconItemPart2_c::build(d2d::ResAccIf_c *resAcc) { mLyt.build("commonIcon_03.brlyt", nullptr); for (int i = 0; i < ITEM_PART_2_NUM_ANIMS; i++) { mAnm[i].init(brlanMapPart2[i].mFile, resAcc, mLyt.getLayout(), brlanMapPart2[i].mName); - mAnm[i].setDirection(false); + mAnm[i].bind(false); mAnm[i].setRate(1.0f); } @@ -292,7 +292,7 @@ bool dLytCommonIconItemPart2_c::build(d2d::ResAccIf_c *resAcc) { bool dLytCommonIconItemPart2_c::remove() { for (int i = 0; i < ITEM_PART_2_NUM_ANIMS; i++) { mAnm[i].unbind(); - mAnm[i].afterUnbind(); + mAnm[i].remove(); } return true; } @@ -600,7 +600,7 @@ bool dLytCommonIconItemPart3_c::build(d2d::ResAccIf_c *resAcc) { mLyt.build("commonIcon_04.brlyt", nullptr); for (int i = 0; i < ITEM_PART_3_NUM_ANIMS; i++) { mAnm[i].init(brlanMapPart3[i].mFile, resAcc, mLyt.getLayout(), brlanMapPart3[i].mName); - mAnm[i].setDirection(false); + mAnm[i].bind(false); mAnm[i].setRate(1.0f); } @@ -612,7 +612,7 @@ bool dLytCommonIconItemPart3_c::build(d2d::ResAccIf_c *resAcc) { bool dLytCommonIconItemPart3_c::remove() { for (int i = 0; i < ITEM_PART_3_NUM_ANIMS; i++) { mAnm[i].unbind(); - mAnm[i].afterUnbind(); + mAnm[i].remove(); } return true; } diff --git a/src/d/lyt/d_lyt_common_icon_material.cpp b/src/d/lyt/d_lyt_common_icon_material.cpp index 72799255..9463bbbc 100644 --- a/src/d/lyt/d_lyt_common_icon_material.cpp +++ b/src/d/lyt/d_lyt_common_icon_material.cpp @@ -41,7 +41,7 @@ bool dLytCommonIconMaterialPart1_c::build(d2d::ResAccIf_c *resAcc) { mLyt.build("commonIcon_00.brlyt", nullptr); for (int i = 0; i < MATERIAL_PART_1_NUM_ANIMS; i++) { mAnm[i].init(brlanMapPart1[i].mFile, resAcc, mLyt.getLayout(), brlanMapPart1[i].mName); - mAnm[i].setDirection(false); + mAnm[i].bind(false); mAnm[i].setRate(1.0f); } @@ -57,7 +57,7 @@ bool dLytCommonIconMaterialPart1_c::build(d2d::ResAccIf_c *resAcc) { bool dLytCommonIconMaterialPart1_c::remove() { for (int i = 0; i < MATERIAL_PART_1_NUM_ANIMS; i++) { mAnm[i].unbind(); - mAnm[i].afterUnbind(); + mAnm[i].remove(); } return true; } @@ -240,7 +240,7 @@ bool dLytCommonIconMaterialPart2_c::build(d2d::ResAccIf_c *resAcc) { mLyt.build("commonIcon_01.brlyt", nullptr); for (int i = 0; i < MATERIAL_PART_2_NUM_ANIMS; i++) { mAnm[i].init(brlanMapPart2[i].mFile, resAcc, mLyt.getLayout(), brlanMapPart2[i].mName); - mAnm[i].setDirection(false); + mAnm[i].bind(false); mAnm[i].setRate(1.0f); } @@ -256,7 +256,7 @@ bool dLytCommonIconMaterialPart2_c::build(d2d::ResAccIf_c *resAcc) { bool dLytCommonIconMaterialPart2_c::remove() { for (int i = 0; i < MATERIAL_PART_2_NUM_ANIMS; i++) { mAnm[i].unbind(); - mAnm[i].afterUnbind(); + mAnm[i].remove(); } return true; } diff --git a/src/d/lyt/d_lyt_fader.cpp b/src/d/lyt/d_lyt_fader.cpp index 8e215e89..4b27ae73 100644 --- a/src/d/lyt/d_lyt_fader.cpp +++ b/src/d/lyt/d_lyt_fader.cpp @@ -16,7 +16,7 @@ dLytFader_c::~dLytFader_c() { if (field_0x4DD == true) { for (int i = 0; i < 3; i++) { - mLytStructAs[i].afterUnbind(); + mLytStructAs[i].remove(); } mResAcc.detach(); } @@ -27,7 +27,7 @@ void dLytFader_c::setStatus(EStatus status) { mStatus = FADED_OUT; mLytBase.unbindAnims(); d2d::AnmGroup_c *s = &mLytStructAs[0]; - s->setDirection(false); + s->bind(false); s->setToEnd(); s->setAnimEnable(true); s->play(); @@ -38,7 +38,7 @@ void dLytFader_c::setStatus(EStatus status) { mStatus = FADED_IN; mLytBase.unbindAnims(); d2d::AnmGroup_c *s = &mLytStructAs[0]; - s->setDirection(false); + s->bind(false); s->setFrame(0.0f); s->setAnimEnable(true); mLytBase.calc(); @@ -109,7 +109,7 @@ void dLytFader_c::fn_801758F0() { fn_80175BC0(0); mLytBase.unbindAnims(); d2d::AnmGroup_c *s = &mLytStructAs[0]; - s->setDirection(false); + s->bind(false); s->setFrame(0.0f); s->setRate(20.0f / (mFrame - 1)); s->setAnimEnable(true); @@ -130,7 +130,7 @@ void dLytFader_c::fn_80175A50() { fn_80175BC0(1); mLytBase.unbindAnims(); d2d::AnmGroup_c *s = &mLytStructAs[1]; - s->setDirection(false); + s->bind(false); s->setFrame(0.0f); s->setRate(20.0f / (mFrame - 1)); s->setAnimEnable(true); diff --git a/src/d/lyt/d_lyt_map.cpp b/src/d/lyt/d_lyt_map.cpp index 38d5335d..d01e6942 100644 --- a/src/d/lyt/d_lyt_map.cpp +++ b/src/d/lyt/d_lyt_map.cpp @@ -207,7 +207,7 @@ void dLytMapPinIcon_c::finalizeState_Wait() {} void dLytMapPinIcon_c::initializeState_ToSelect() { d2d::AnmGroup_c *m = &mAnmGroups[1]; - m->setDirection(false); + m->bind(false); m->setFrame(0.0f); } void dLytMapPinIcon_c::executeState_ToSelect() { @@ -255,7 +255,7 @@ bool dLytMapPinIcon_c::build(d2d::ResAccIf_c *resAcc) { for (int i = 0; i < 3; i++) { pAnmGroups[i].init(sMapPinIconBrlanMap[i].mFile, resAcc, mLyt.getLayout(), sMapPinIconBrlanMap[i].mName); - pAnmGroups[i].setDirection(false); + pAnmGroups[i].bind(false); pAnmGroups[i].setFrame(0.0f); } @@ -269,8 +269,8 @@ bool dLytMapPinIcon_c::build(d2d::ResAccIf_c *resAcc) { mStructD.fn_80065E70(mpBounding, 2, 1, 0); d2d::dLytStructDList::GetInstance()->appendToList2(&mStructD); - mAnmGroups[LYT_MAP_PIN_ICON_ANIM_SCALE].setDirection(false); - mAnmGroups[LYT_MAP_PIN_ICON_ANIM_LOOP].setDirection(false); + mAnmGroups[LYT_MAP_PIN_ICON_ANIM_SCALE].bind(false); + mAnmGroups[LYT_MAP_PIN_ICON_ANIM_LOOP].bind(false); mLyt.calc(); @@ -284,7 +284,7 @@ bool dLytMapPinIcon_c::build(d2d::ResAccIf_c *resAcc) { bool dLytMapPinIcon_c::remove() { d2d::dLytStructDList::GetInstance()->removeFromList2(&mStructD); for (int i = 0; i < 3; i++) { - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } return true; } diff --git a/src/d/lyt/d_lyt_note.cpp b/src/d/lyt/d_lyt_note.cpp index e4b83f07..5bde50d7 100644 --- a/src/d/lyt/d_lyt_note.cpp +++ b/src/d/lyt/d_lyt_note.cpp @@ -142,7 +142,7 @@ bool dLytNote_c::build(d2d::ResAccIf_c *resAcc) { for (int i = 0; i < 6; i++) { mAnmGroups[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName); - mAnmGroups[i].setDirection(false); + mAnmGroups[i].bind(false); mAnmGroups[i].setAnimEnable(false); } @@ -168,7 +168,7 @@ bool dLytNote_c::build(d2d::ResAccIf_c *resAcc) { bool dLytNote_c::remove() { for (int i = 0; i < 6; i++) { // @bug? .unbind call is missing - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } return true; } diff --git a/src/d/lyt/d_lyt_sky_gauge.cpp b/src/d/lyt/d_lyt_sky_gauge.cpp index 7e961ec3..b75541f6 100644 --- a/src/d/lyt/d_lyt_sky_gauge.cpp +++ b/src/d/lyt/d_lyt_sky_gauge.cpp @@ -68,7 +68,7 @@ bool dLytSkyGaugeMain_c::build(d2d::ResAccIf_c *resAcc) { for (int i = 0; i < 3; i++) { mAnmGroups[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName); - mAnmGroups[i].setDirection(false); + mAnmGroups[i].bind(false); mAnmGroups[i].setAnimEnable(false); } @@ -104,7 +104,7 @@ bool dLytSkyGaugeMain_c::execute() { bool dLytSkyGaugeMain_c::remove() { mLyt.unbindAnims(); for (int i = 0; i < 3; i++) { - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } return true; diff --git a/src/d/lyt/meter/d_lyt_meter.cpp b/src/d/lyt/meter/d_lyt_meter.cpp index 2ce06aab..3e8cfa7a 100644 --- a/src/d/lyt/meter/d_lyt_meter.cpp +++ b/src/d/lyt/meter/d_lyt_meter.cpp @@ -102,7 +102,7 @@ bool dLytMeter1Button_c::build(d2d::ResAccIf_c *resAcc) { for (int i = 0; i < 3; i++) { mAnmGroups[i].init(btn1BrlanMap[i].mFile, resAcc, mLyt.getLayout(), btn1BrlanMap[i].mName); - mAnmGroups[i].setDirection(false); + mAnmGroups[i].bind(false); mAnmGroups[i].setAnimEnable(false); } // TODO @@ -127,7 +127,7 @@ bool dLytMeter1Button_c::build(d2d::ResAccIf_c *resAcc) { bool dLytMeter1Button_c::remove() { for (int i = 0; i < 3; i++) { mAnmGroups[i].unbind(); - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } return true; } @@ -215,7 +215,7 @@ bool dLytMeter2Button_c::build(d2d::ResAccIf_c *resAcc) { for (int i = 0; i < 3; i++) { mAnmGroups[i].init(btn2BrlanMap[i].mFile, resAcc, mLyt.getLayout(), btn2BrlanMap[i].mName); - mAnmGroups[i].setDirection(false); + mAnmGroups[i].bind(false); mAnmGroups[i].setAnimEnable(false); } mpWindow = mLyt.getWindow(sWindowName2); @@ -237,7 +237,7 @@ bool dLytMeter2Button_c::build(d2d::ResAccIf_c *resAcc) { bool dLytMeter2Button_c::remove() { for (int i = 0; i < 3; i++) { mAnmGroups[i].unbind(); - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } return true; } @@ -333,7 +333,7 @@ bool dLytMeter_c::build(d2d::ResAccIf_c *resAcc) { mLyt.setPriority(0x8A); for (int i = 0; i < 34; i++) { mAnmGroups[i].init(meterBrlanMap[i].mFile, resAcc, mLyt.getLayout(), meterBrlanMap[i].mName); - mAnmGroups[i].setDirection(false); + mAnmGroups[i].bind(false); mAnmGroups[i].setAnimEnable(false); } @@ -460,7 +460,7 @@ bool dLytMeter_c::build(d2d::ResAccIf_c *resAcc) { bool dLytMeter_c::remove() { for (int i = 0; i < 34; i++) { - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } diff --git a/src/d/lyt/meter/d_lyt_meter_a_btn.cpp b/src/d/lyt/meter/d_lyt_meter_a_btn.cpp index 204f31fc..9383d1c8 100644 --- a/src/d/lyt/meter/d_lyt_meter_a_btn.cpp +++ b/src/d/lyt/meter/d_lyt_meter_a_btn.cpp @@ -94,7 +94,7 @@ bool dLytMeterABtn_c::build(d2d::ResAccIf_c *resAcc) { for (int i = 0; i < 3; i++) { mAnmGroups[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName); - mAnmGroups[i].setDirection(false); + mAnmGroups[i].bind(false); mAnmGroups[i].setAnimEnable(false); } @@ -133,7 +133,7 @@ bool dLytMeterABtn_c::build(d2d::ResAccIf_c *resAcc) { bool dLytMeterABtn_c::remove() { for (int i = 0; i < 3; i++) { mAnmGroups[i].unbind(); - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } return true; } diff --git a/src/d/lyt/meter/d_lyt_meter_drink.cpp b/src/d/lyt/meter/d_lyt_meter_drink.cpp index 2715fc8b..7682488f 100644 --- a/src/d/lyt/meter/d_lyt_meter_drink.cpp +++ b/src/d/lyt/meter/d_lyt_meter_drink.cpp @@ -375,7 +375,7 @@ bool dLytMeterDrink_c::build(d2d::ResAccIf_c *resAcc) { for (int i = 0; i < 20; i++) { mAnmGroups[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName); - mAnmGroups[i].setDirection(false); + mAnmGroups[i].bind(false); mAnmGroups[i].setAnimEnable(false); } @@ -409,7 +409,7 @@ bool dLytMeterDrink_c::build(d2d::ResAccIf_c *resAcc) { bool dLytMeterDrink_c::remove() { for (int i = 0; i < 20; i++) { mAnmGroups[i].unbind(); - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } return true; diff --git a/src/d/lyt/meter/d_lyt_meter_shield_gauge.cpp b/src/d/lyt/meter/d_lyt_meter_shield_gauge.cpp index e87ac199..259e9483 100644 --- a/src/d/lyt/meter/d_lyt_meter_shield_gauge.cpp +++ b/src/d/lyt/meter/d_lyt_meter_shield_gauge.cpp @@ -24,7 +24,7 @@ bool dLytMeterShieldGauge_c::build(d2d::ResAccIf_c *resAcc) { bool dLytMeterShieldGauge_c::remove() { for (int i = 0; i < 8; i++) { mAnmGroups[i].unbind(); - mAnmGroups[i].afterUnbind(); + mAnmGroups[i].remove(); } return true; } diff --git a/src/d/lyt/msg_window/d_lyt_msg_window_wood.cpp b/src/d/lyt/msg_window/d_lyt_msg_window_wood.cpp new file mode 100644 index 00000000..2727e7cf --- /dev/null +++ b/src/d/lyt/msg_window/d_lyt_msg_window_wood.cpp @@ -0,0 +1,191 @@ +#include "d/lyt/msg_window/d_lyt_msg_window_wood.h" + +#include "common.h" +#include "d/d_tag_processor.h" +#include "d/lyt/d2d.h" +#include "d/lyt/d_textbox.h" +#include "nw4r/lyt/lyt_group.h" +#include "nw4r/lyt/lyt_pane.h" +#include "s/s_State.hpp" + +STATE_DEFINE(dLytMsgWindowWood_c, Invisible); +STATE_DEFINE(dLytMsgWindowWood_c, In); +STATE_DEFINE(dLytMsgWindowWood_c, Visible); +STATE_DEFINE(dLytMsgWindowWood_c, Out); + +static const d2d::LytBrlanMapping brlanMap[] = { + { "kanbanWindow_00_in.brlan", "G_inOut_00"}, + {"kanbanWindow_00_loop.brlan", "G_loop_00"}, + { "kanbanWindow_00_out.brlan", "G_inOut_00"}, +}; + +#define KANBAN_ANIM_IN 0 +#define KANBAN_ANIM_LOOP 1 +#define KANBAN_ANIM_OUT 2 + +#define KANBAN_NUM_ANIMS 3 + +static const char *sPanes[] = { + "N_aBtn_00", + "N_inOut_00", +}; + +static const char *sTextBoxes[] = { + "T_message_00", + "T_messageS_00", +}; + +static const char *sGroupName = "G_ref_00"; + +bool dLytMsgWindowWood_c::build(void *unk, d2d::ResAccIf_c *resAcc, dTagProcessor_c *tagProcessor) { + mLyt.setResAcc(resAcc); + mLyt.build("kanbanWindow_00.brlyt", nullptr); + mLyt.setPriority(0x8A); + + for (int i = 0; i < KANBAN_NUM_ANIMS; i++) { + mAnm[i].init(brlanMap[i].mFile, resAcc, mLyt.getLayout(), brlanMap[i].mName); + mAnm[i].bind(false); + mAnm[i].setAnimEnable(false); + } + + mAnm[KANBAN_ANIM_LOOP].setAnimEnable(true); + mAnm[KANBAN_ANIM_OUT].setAnimEnable(true); + mAnm[KANBAN_ANIM_OUT].setToEnd(); + mLyt.calc(); + mAnm[KANBAN_ANIM_OUT].setAnimEnable(false); + + for (int i = 0; i < 2; i++) { + mpPanes[i] = mLyt.findPane(sPanes[i]); + } + + for (int i = 0; i < 2; i++) { + mpTextboxes[i] = mLyt.getTextBox(sTextBoxes[i]); + mpTextboxes[i]->SetTextPositionH(0); + mpTextboxes[i]->SetTextPositionV(0); + } + + mpTextboxes[1]->set0x1F6(1); + + for (int i = 0; i < 1; i++) { + mNodes[i].mpLytPane = &mCommon; + mCommon.build(resAcc); + mSubpaneList.PushBack(&mNodes[i]); + } + + if (mLyt.getLayout()->GetGroupContainer() != nullptr) { + nw4r::lyt::Group *g = mLyt.getLayout()->GetGroupContainer()->FindGroupByName(sGroupName); + if (g != nullptr) { + d2d::dSubPane::linkMeters(g, &mSubpaneList); + } + } + + mpPanes[1]->SetVisible(true); + mLyt.calc(); + mpPanes[1]->SetVisible(false); + mpTagProcessor = tagProcessor; + mStateMgr.changeState(StateID_Invisible); + return true; +} + +bool dLytMsgWindowWood_c::remove() { + for (d2d::SubPaneList::Iterator it = mSubpaneList.GetBeginIter(); it != mSubpaneList.GetEndIter(); ++it) { + d2d::dSubPane *subPane = it->mpLytPane; + if (subPane != nullptr) { + nw4r::lyt::Pane *parent = subPane->getPane()->GetParent(); + parent->RemoveChild(subPane->getPane()); + } + } + + for (int i = 0; i < 1; i++) { + mNodes[i].mpLytPane->remove(); + } + mCommon.remove(); + for (int i = 0; i < KANBAN_NUM_ANIMS; i++) { + mAnm[i].remove(); + } + return true; +} + +void dLytMsgWindowWood_c::initializeState_Invisible() { + mCommon.resetToInvisble(); +} +void dLytMsgWindowWood_c::executeState_Invisible() { + if (mCommon.shouldBeOpen()) { + mStateMgr.changeState(StateID_In); + } +} +void dLytMsgWindowWood_c::finalizeState_Invisible() {} + +void dLytMsgWindowWood_c::initializeState_In() { + mAnm[KANBAN_ANIM_IN].setAnimEnable(true); + mAnm[KANBAN_ANIM_IN].setFrame(0.0f); +} +void dLytMsgWindowWood_c::executeState_In() { + if (mAnm[KANBAN_ANIM_IN].isEndReached()) { + mAnm[KANBAN_ANIM_IN].setAnimEnable(false); + mStateMgr.changeState(StateID_Visible); + } +} +void dLytMsgWindowWood_c::finalizeState_In() {} + +void dLytMsgWindowWood_c::initializeState_Visible() {} +void dLytMsgWindowWood_c::executeState_Visible() { + if (!mCommon.shouldBeOpen()) { + mStateMgr.changeState(StateID_Out); + } +} +void dLytMsgWindowWood_c::finalizeState_Visible() {} + +void dLytMsgWindowWood_c::initializeState_Out() { + mAnm[KANBAN_ANIM_OUT].setAnimEnable(true); + mAnm[KANBAN_ANIM_OUT].setFrame(0.0f); +} +void dLytMsgWindowWood_c::executeState_Out() { + if (mAnm[KANBAN_ANIM_OUT].isEndReached()) { + mAnm[KANBAN_ANIM_OUT].setAnimEnable(false); + mStateMgr.changeState(StateID_Invisible); + } +} +void dLytMsgWindowWood_c::finalizeState_Out() {} + +bool dLytMsgWindowWood_c::execute() { + mStateMgr.executeState(); + for (int i = 0; i < KANBAN_NUM_ANIMS; i++) { + if (mAnm[i].isEnabled()) { + mAnm[i].play(); + } + } + mLyt.calc(); + for (int i = 0; i < 1; i++) { + mNodes[i].mpLytPane->execute(); + } + return true; +} + +void dLytMsgWindowWood_c::draw() { + mLyt.draw(); +} + +void dLytMsgWindowWood_c::vt_0x1C() { + mCommon.openMaybe(); +} + +bool dLytMsgWindowWood_c::vt_0x20() const { + return !(*mStateMgr.getStateID() == StateID_In); +} + +void dLytMsgWindowWood_c::vt_0x24() { + mCommon.closeMaybe(); +} + +bool dLytMsgWindowWood_c::vt_0x28() const { + return !(*mStateMgr.getStateID() == StateID_Out); +} + +bool dLytMsgWindowWood_c::setText(const wchar_t *text) { + mpTextboxes[0]->SetTagProcessor(mpTagProcessor); + mpTextboxes[1]->SetTagProcessor(mpTagProcessor); + mpTextboxes[0]->fn_800AF540(text, mpTagProcessor, 0); + mpTextboxes[1]->fn_800AF540(text, mpTagProcessor, 0); + return true; +}