diff --git a/config/SOUE01/rels/d_a_obj_junk_repairingNP/splits.txt b/config/SOUE01/rels/d_a_obj_junk_repairingNP/splits.txt index 6a5b9ca2..5e8461e3 100644 --- a/config/SOUE01/rels/d_a_obj_junk_repairingNP/splits.txt +++ b/config/SOUE01/rels/d_a_obj_junk_repairingNP/splits.txt @@ -18,8 +18,5 @@ REL/d/a/obj/d_a_obj_junk_repairing.cpp: .text start:0x000000F0 end:0x00000D08 .ctors start:0x00000000 end:0x00000004 .rodata start:0x00000000 end:0x00000030 - .data start:0x00000000 end:0x000001C8 + .data start:0x00000000 end:0x000001F0 .bss start:0x00000008 end:0x00000060 - -REL/d/a/obj/d_a_obj_junk_repairing_data.cpp: - .data start:0x000001C8 end:0x000001F0 diff --git a/config/SOUE01/rels/d_a_obj_junk_repairingNP/symbols.txt b/config/SOUE01/rels/d_a_obj_junk_repairingNP/symbols.txt index ec733f29..4c052da4 100644 --- a/config/SOUE01/rels/d_a_obj_junk_repairingNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_junk_repairingNP/symbols.txt @@ -54,9 +54,9 @@ __vt__82sStateMgr_c<13dAcOJunkRep_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sSta __vt__29sFStateFct_c<13dAcOJunkRep_c> = .data:0x00000118; // type:object size:0x14 __vt__26sFState_c<13dAcOJunkRep_c> = .data:0x00000130; // type:object size:0x18 __vt__17dMyShadowCircle_c = .data:0x00000148; // type:object size:0xC -lbl_116_data_194 = .data:0x00000194; // type:object size:0x34 scope:local -sMdlName1__13dAcOJunkRep_c = .data:0x000001C8; // type:object size:0x14 -sMdlName2__13dAcOJunkRep_c = .data:0x000001DC; // type:object size:0x14 +__vt__28sFStateID_c<13dAcOJunkRep_c> = .data:0x00000194; // type:object size:0x34 +@STRING@getMdlName1__13dAcOJunkRep_cFv = .data:0x000001C8; // type:object size:0x11 data:string +@STRING@getMdlName2__13dAcOJunkRep_cFv = .data:0x000001DC; // type:object size:0x12 data:string __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global lbl_116_bss_8 = .bss:0x00000008; // type:object size:0x10 scope:local StateID_Wait__13dAcOJunkRep_c = .bss:0x00000018; // type:object size:0x30 data:4byte diff --git a/config/SOUE01/rels/d_a_obj_underground_switchNP/splits.txt b/config/SOUE01/rels/d_a_obj_underground_switchNP/splits.txt index 7e715f09..85269c32 100644 --- a/config/SOUE01/rels/d_a_obj_underground_switchNP/splits.txt +++ b/config/SOUE01/rels/d_a_obj_underground_switchNP/splits.txt @@ -17,3 +17,6 @@ REL/global_destructor_chain.c: REL/d/a/obj/d_a_obj_underground_switch.cpp: .text start:0x000000F0 end:0x00001258 .ctors start:0x00000000 end:0x00000004 + .rodata start:0x00000000 end:0x00000028 + .data start:0x00000000 end:0x00000270 + .bss start:0x00000008 end:0x000000C8 diff --git a/config/SOUE01/rels/d_a_obj_underground_switchNP/symbols.txt b/config/SOUE01/rels/d_a_obj_underground_switchNP/symbols.txt index 4bbcf1a4..0f4731ef 100644 --- a/config/SOUE01/rels/d_a_obj_underground_switchNP/symbols.txt +++ b/config/SOUE01/rels/d_a_obj_underground_switchNP/symbols.txt @@ -8,14 +8,14 @@ __dt__27sFState_c<14dAcOUgSwitch_c>Fv = .text:0x000001E0; // type:function size: __dt__30sFStateFct_c<14dAcOUgSwitch_c>Fv = .text:0x00000240; // type:function size:0x6C __dt__83sStateMgr_c<14dAcOUgSwitch_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000002B0; // type:function size:0xA0 __dt__53sFStateMgr_c<14dAcOUgSwitch_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000350; // type:function size:0xA4 -fn_621_400 = .text:0x00000400; // type:function size:0xF4 -fn_621_500 = .text:0x00000500; // type:function size:0x184 +createHeap__14dAcOUgSwitch_cFv = .text:0x00000400; // type:function size:0xF4 +create__14dAcOUgSwitch_cFv = .text:0x00000500; // type:function size:0x184 changeState__83sStateMgr_c<14dAcOUgSwitch_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000690; // type:function size:0x10 -fn_621_6A0 = .text:0x000006A0; // type:function size:0x8 -fn_621_6B0 = .text:0x000006B0; // type:function size:0x30 +doDelete__14dAcOUgSwitch_cFv = .text:0x000006A0; // type:function size:0x8 +actorExecute__14dAcOUgSwitch_cFv = .text:0x000006B0; // type:function size:0x30 executeState__83sStateMgr_c<14dAcOUgSwitch_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x000006E0; // type:function size:0x10 -fn_621_6F0 = .text:0x000006F0; // type:function size:0x128 -fn_621_820 = .text:0x00000820; // type:function size:0x28 +actorExecuteInEvent__14dAcOUgSwitch_cFv = .text:0x000006F0; // type:function size:0x128 +draw__14dAcOUgSwitch_cFv = .text:0x00000820; // type:function size:0x28 initializeState_Off__14dAcOUgSwitch_cFv = .text:0x00000850; // type:function size:0x14 executeState_Off__14dAcOUgSwitch_cFv = .text:0x00000870; // type:function size:0x80 finalizeState_Off__14dAcOUgSwitch_cFv = .text:0x000008F0; // type:function size:0x4 @@ -25,7 +25,7 @@ finalizeState_Active__14dAcOUgSwitch_cFv = .text:0x00000AD0; // type:function si initializeState_On__14dAcOUgSwitch_cFv = .text:0x00000AE0; // type:function size:0x8C executeState_On__14dAcOUgSwitch_cFv = .text:0x00000B70; // type:function size:0xA0 finalizeState_On__14dAcOUgSwitch_cFv = .text:0x00000C10; // type:function size:0x4 -fn_621_C20 = .text:0x00000C20; // type:function size:0x20 +setVariant__14dAcOUgSwitch_cFi = .text:0x00000C20; // type:function size:0x20 __dt__14dAcOUgSwitch_cFv = .text:0x00000C40; // type:function size:0xD8 getStateID__83sStateMgr_c<14dAcOUgSwitch_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000D20; // type:function size:0x10 build__30sFStateFct_c<14dAcOUgSwitch_c>FRC12sStateIDIf_c = .text:0x00000D30; // type:function size:0x60 @@ -48,24 +48,24 @@ isSameName__29sFStateID_c<14dAcOUgSwitch_c>CFPCc = .text:0x000011D0; // type:fun _ctors = .ctors:0x00000000; // type:label scope:global _dtors = .dtors:0x00000000; // type:label scope:global __destroy_global_chain_reference = .dtors:0x00000000; // type:object size:0x4 scope:global -lbl_621_rodata_0 = .rodata:0x00000000; // type:object size:0x18 data:float -lbl_621_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_621_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_621_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_621_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float +lbl_621_rodata_0 = .rodata:0x00000000; // type:object size:0x18 scope:local data:float +lbl_621_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_621_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_621_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_621_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float g_profile_OBJ_UG_SWITCH = .data:0x00000000; // type:object size:0x10 data:4byte -lbl_621_data_10 = .data:0x00000010; // type:object size:0xC -lbl_621_data_1C = .data:0x0000001C; // type:object size:0x14 -lbl_621_data_30 = .data:0x00000030; // type:object size:0x1C data:string -lbl_621_data_4C = .data:0x0000004C; // type:object size:0x1C -lbl_621_data_68 = .data:0x00000068; // type:object size:0x80 -lbl_621_data_E8 = .data:0x000000E8; // type:object size:0x30 -lbl_621_data_118 = .data:0x00000118; // type:object size:0x30 -lbl_621_data_148 = .data:0x00000148; // type:object size:0x18 -lbl_621_data_160 = .data:0x00000160; // type:object size:0xDC -lbl_621_data_23C = .data:0x0000023C; // type:object size:0x34 +lbl_621_data_10 = .data:0x00000010; // type:object size:0xC scope:local +lbl_621_data_1C = .data:0x0000001C; // type:object size:0x14 scope:local +lbl_621_data_30 = .data:0x00000030; // type:object size:0x1C scope:local data:string +lbl_621_data_4C = .data:0x0000004C; // type:object size:0x1C scope:local +__vt__14dAcOUgSwitch_c = .data:0x00000068; // type:object size:0x80 +__vt__53sFStateMgr_c<14dAcOUgSwitch_c,20sStateMethodUsr_FI_c> = .data:0x000000E8; // type:object size:0x30 +__vt__83sStateMgr_c<14dAcOUgSwitch_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000118; // type:object size:0x30 +__vt__30sFStateFct_c<14dAcOUgSwitch_c> = .data:0x00000148; // type:object size:0x14 +__vt__27sFState_c<14dAcOUgSwitch_c> = .data:0x00000160; // type:object size:0x18 +__vt__29sFStateID_c<14dAcOUgSwitch_c> = .data:0x0000023C; // type:object size:0x34 __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global -lbl_621_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte -lbl_621_bss_18 = .bss:0x00000018; // type:object size:0x40 data:4byte -lbl_621_bss_58 = .bss:0x00000058; // type:object size:0x40 data:4byte -lbl_621_bss_98 = .bss:0x00000098; // type:object size:0x30 data:4byte +lbl_621_bss_8 = .bss:0x00000008; // type:object size:0x10 scope:local data:4byte +StateID_Off__14dAcOUgSwitch_c = .bss:0x00000018; // type:object size:0x30 data:4byte +StateID_Active__14dAcOUgSwitch_c = .bss:0x00000058; // type:object size:0x30 data:4byte +StateID_On__14dAcOUgSwitch_c = .bss:0x00000098; // type:object size:0x30 data:4byte diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt index 865f8b04..99e85300 100644 --- a/config/SOUE01/symbols.txt +++ b/config/SOUE01/symbols.txt @@ -3573,7 +3573,7 @@ dBase_c__changeOwnEvent = .text:0x8009FCE0; // type:function size:0x11C fn_8009FE00 = .text:0x8009FE00; // type:function size:0x124 isInEvent__12EventManagerFP9dAcBase_cPCc = .text:0x8009FF30; // type:function size:0x10C fn_800A0040 = .text:0x800A0040; // type:function size:0x114 -dBase_c__finishEvent = .text:0x800A0160; // type:function size:0xB8 +finishEvent__12EventManagerFP9dAcBase_cPCc = .text:0x800A0160; // type:function size:0xB8 getCurrentExecutedEVNT = .text:0x800A0220; // type:function size:0x64 fn_800A0290 = .text:0x800A0290; // type:function size:0x38 fn_800A02D0 = .text:0x800A02D0; // type:function size:0x4 diff --git a/configure.py b/configure.py index f6ddff8b..8dbfd44c 100644 --- a/configure.py +++ b/configure.py @@ -273,16 +273,6 @@ def Rel(status, rel_name, cpp_name, extra_cflags=[]): } -def MultiRel(rel_name, objects, extra_cflags=[]): - return { - "lib": rel_name, - "mw_version": "Wii/1.5", - "cflags": cflags_rel + extra_cflags, - "host": False, - "objects": objects, - } - - def EGGLib(lib_name, objects): return { "lib": lib_name, @@ -1441,13 +1431,7 @@ config.libs = [ "REL/d/a/obj/d_a_obj_item_heart_container.cpp", ), Rel(NonMatching, "d_a_obj_ivy_rope", "REL/d/a/obj/d_a_obj_ivy_rope.cpp"), - MultiRel( - "d_a_obj_junk_repairing", - [ - Object(Matching, "REL/d/a/obj/d_a_obj_junk_repairing.cpp"), - Object(Matching, "REL/d/a/obj/d_a_obj_junk_repairing_data.cpp"), - ], - ), + Rel(Matching, "d_a_obj_junk_repairing", "REL/d/a/obj/d_a_obj_junk_repairing.cpp"), Rel(NonMatching, "d_a_obj_kanban_stone", "REL/d/a/obj/d_a_obj_kanban_stone.cpp"), Rel(NonMatching, "d_a_obj_kibako", "REL/d/a/obj/d_a_obj_kibako.cpp"), Rel(NonMatching, "d_a_obj_kumite_wall", "REL/d/a/obj/d_a_obj_kumite_wall.cpp"), diff --git a/include/d/a/obj/d_a_obj_junk_repairing.h b/include/d/a/obj/d_a_obj_junk_repairing.h index 99917a0a..9ae52e53 100644 --- a/include/d/a/obj/d_a_obj_junk_repairing.h +++ b/include/d/a/obj/d_a_obj_junk_repairing.h @@ -24,8 +24,12 @@ public: private: static const f32 sSomeFloat; - static char sMdlName1[]; - static char sMdlName2[]; + inline const char *getMdlName1() { + return "JunkRepairobject"; + } + inline const char *getMdlName2() { + return "JunkRepairobjectB"; + } bool loadMdl(m3d::smdl_c &mdl, const char *name); void realizeState(); diff --git a/include/d/a/obj/d_a_obj_underground_switch.h b/include/d/a/obj/d_a_obj_underground_switch.h index b751bf17..a52084b7 100644 --- a/include/d/a/obj/d_a_obj_underground_switch.h +++ b/include/d/a/obj/d_a_obj_underground_switch.h @@ -2,20 +2,41 @@ #define D_A_OBJ_UNDERGROUND_SWITCH_H #include "d/a/obj/d_a_obj_base.h" +#include "m/m3d/m_anmmatclr.h" +#include "m/m3d/m_smdl.h" +#include "nw4r/g3d/g3d_resfile.h" +#include "nw4r/g3d/g3d_resmdl.h" #include "s/s_State.hpp" -#include "s/s_StateMgr.hpp" class dAcOUgSwitch_c : public dAcObjBase_c { public: dAcOUgSwitch_c() : mStateMgr(*this, sStateID::null) {} virtual ~dAcOUgSwitch_c() {} + virtual bool createHeap() override; + virtual int create() override; + virtual int doDelete() override; + virtual int actorExecute() override; + virtual int actorExecuteInEvent() override; + virtual int draw() override; + STATE_FUNC_DECLARE(dAcOUgSwitch_c, Off); STATE_FUNC_DECLARE(dAcOUgSwitch_c, Active); STATE_FUNC_DECLARE(dAcOUgSwitch_c, On); private: - /* 0x??? */ STATE_MGR_DECLARE(dAcOUgSwitch_c); + void setVariant(int variant); + static const f32 sActivationRadius; + static const u8 sEventTimer; + + /* 0x330 */ nw4r::g3d::ResFile mRes; + /* 0x334 */ m3d::smdl_c mMdl; + /* 0x350 */ STATE_MGR_DECLARE(dAcOUgSwitch_c); + /* 0x38C */ m3d::anmMatClr_c mAnmClr; + /* 0x3B8 */ int mVariant; + /* 0x3BC */ u8 mActiveSceneFlag; + /* 0x3BD */ u8 field_0x3BD; + /* 0x3BE */ u8 mOnEventTimer; }; #endif diff --git a/include/toBeSorted/event_manager.h b/include/toBeSorted/event_manager.h index 19a888bd..98997300 100644 --- a/include/toBeSorted/event_manager.h +++ b/include/toBeSorted/event_manager.h @@ -11,6 +11,7 @@ class dAcBase_c; class EventManager { public: static bool isInEvent(dAcBase_c *actor, const char *eventName); + static bool finishEvent(dAcBase_c *actor, const char *eventName); static bool alsoSetAsCurrentEvent(dAcBase_c *actor, Event *event, void *unknown); static EventManager *sInstance; diff --git a/src/REL/d/a/obj/d_a_obj_junk_repairing.cpp b/src/REL/d/a/obj/d_a_obj_junk_repairing.cpp index d363eb78..a997f32d 100644 --- a/src/REL/d/a/obj/d_a_obj_junk_repairing.cpp +++ b/src/REL/d/a/obj/d_a_obj_junk_repairing.cpp @@ -20,10 +20,10 @@ bool dAcOJunkRep_c::getState() { bool dAcOJunkRep_c::createHeap() { mResFile = getOarcResFile("Junk"); - if (!loadMdl(mModel1, sMdlName1)) { + if (!loadMdl(mModel1, getMdlName1())) { return false; } - if (!loadMdl(mModel2, sMdlName2)) { + if (!loadMdl(mModel2, getMdlName2())) { return false; } diff --git a/src/REL/d/a/obj/d_a_obj_junk_repairing_data.cpp b/src/REL/d/a/obj/d_a_obj_junk_repairing_data.cpp deleted file mode 100644 index 0aff15f1..00000000 --- a/src/REL/d/a/obj/d_a_obj_junk_repairing_data.cpp +++ /dev/null @@ -1,4 +0,0 @@ -#include "d/a/obj/d_a_obj_junk_repairing.h" - -char dAcOJunkRep_c::sMdlName1[] = "JunkRepairobject"; -char dAcOJunkRep_c::sMdlName2[] = "JunkRepairobjectB"; diff --git a/src/REL/d/a/obj/d_a_obj_underground_switch.cpp b/src/REL/d/a/obj/d_a_obj_underground_switch.cpp index e2605124..04ab2bf6 100644 --- a/src/REL/d/a/obj/d_a_obj_underground_switch.cpp +++ b/src/REL/d/a/obj/d_a_obj_underground_switch.cpp @@ -1,17 +1,156 @@ #include "d/a/obj/d_a_obj_underground_switch.h" +#include "common.h" +#include "d/a/d_a_player.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/flag/sceneflag_manager.h" +#include "m/m_vec.h" +#include "nw4r/g3d/g3d_resanmclr.h" +#include "nw4r/g3d/g3d_resmdl.h" +#include "toBeSorted/event_manager.h" + SPECIAL_ACTOR_PROFILE(OBJ_UG_SWITCH, dAcOUgSwitch_c, fProfile::OBJ_UG_SWITCH, 0x15A, 0, 3); STATE_DEFINE(dAcOUgSwitch_c, Off); STATE_DEFINE(dAcOUgSwitch_c, Active); STATE_DEFINE(dAcOUgSwitch_c, On); -void dAcOUgSwitch_c::initializeState_Off() {} -void dAcOUgSwitch_c::executeState_Off() {} +const f32 dAcOUgSwitch_c::sActivationRadius = 40.0f; +const u8 dAcOUgSwitch_c::sEventTimer = 15; + +bool dAcOUgSwitch_c::createHeap() { + // Why. Regswap... + void *data = getOarcResFile("SwitchPass"); + + mRes = data; + nw4r::g3d::ResMdl mdl = mRes.GetResMdl("SwitchPass"); + TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x120)); + + mRes = data; + mdl = mRes.GetResMdl("SwitchPass"); + nw4r::g3d::ResAnmClr clr = mRes.GetResAnmClr("SwitchPass_Light"); + TRY_CREATE(mAnmClr.create(mdl, clr, &heap_allocator, nullptr, 1)); + + mMdl.setAnm(mAnmClr); + + return true; +} + +int dAcOUgSwitch_c::create() { + mActiveSceneFlag = params & 0xFF; + field_0x3BD = (params >> 8) & 0xFF; + setVariant((params >> 16) & 0xF); + if (!initAllocatorWork1Heap(0x1000, "dAcOUgSwitch_c::m_allocator", 0x20)) { + return FAILED; + } + + mOnEventTimer = 0; + updateMatrix(); + mMdl.setLocalMtx(mWorldMtx); + mMdl.setPriorityDraw(0x82, 0x7F); + if (!SceneflagManager::sInstance->checkBoolFlag(roomid, mActiveSceneFlag)) { + if (mVariant == 0) { + mStateMgr.changeState(StateID_Active); + } else { + mStateMgr.changeState(StateID_Off); + } + } else { + mStateMgr.changeState(StateID_On); + } + boundingBox.Set(mVec3_c(-50.0f, -20.0f, -50.0f), mVec3_c(50.0f, 20.0f, 50.0f)); + + return SUCCEEDED; +} + +int dAcOUgSwitch_c::doDelete() { + return SUCCEEDED; +} + +int dAcOUgSwitch_c::actorExecute() { + mStateMgr.executeState(); + return SUCCEEDED; +} + +int dAcOUgSwitch_c::actorExecuteInEvent() { + if (EventManager::isInEvent(this, "OnSwitchCount")) { + if (mOnEventTimer != 0 && --mOnEventTimer == 0) { + if (mVariant == 0 && !SceneflagManager::sInstance->checkBoolFlag(roomid, mActiveSceneFlag)) { + SceneflagManager::sInstance->setFlag(roomid, mActiveSceneFlag); + } else { + if (mVariant == 1 && !SceneflagManager::sInstance->checkBoolFlag(roomid, field_0x3BD)) { + SceneflagManager::sInstance->setFlag(roomid, field_0x3BD); + } + } + EventManager::finishEvent(this, "OnSwitchCount"); + } + return SUCCEEDED; + } + return NOT_READY; +} + +int dAcOUgSwitch_c::draw() { + drawModelType1(&mMdl); + return SUCCEEDED; +} + +void dAcOUgSwitch_c::initializeState_Off() { + mAnmClr.setFrame(0.0f, 0); +} +void dAcOUgSwitch_c::executeState_Off() { + if (mVariant == 1 && SceneflagManager::sInstance->checkBoolFlag(roomid, mActiveSceneFlag)) { + mStateMgr.changeState(StateID_Active); + } +} void dAcOUgSwitch_c::finalizeState_Off() {} -void dAcOUgSwitch_c::initializeState_Active() {} -void dAcOUgSwitch_c::executeState_Active() {} +void dAcOUgSwitch_c::initializeState_Active() { + mAnmClr.setFrame(1.0f, 0); +} +void dAcOUgSwitch_c::executeState_Active() { + if (mVariant == 0 && !SceneflagManager::sInstance->checkBoolFlag(roomid, mActiveSceneFlag)) { + if (isWithinPlayerRadius(sActivationRadius) && dAcPy_c::LINK->checkActionFlags(dAcPy_c::FLG0_CRAWLING)) { + mOnEventTimer = sEventTimer; + playSound(0xB12); + mStateMgr.changeState(StateID_On); + } + } + if (mVariant == 1) { + if (!SceneflagManager::sInstance->checkBoolFlag(roomid, field_0x3BD)) { + if (isWithinPlayerRadius(sActivationRadius) && dAcPy_c::LINK->checkActionFlags(dAcPy_c::FLG0_CRAWLING)) { + mOnEventTimer = sEventTimer; + playSound(0xB13); + mStateMgr.changeState(StateID_On); + } + } + if (!SceneflagManager::sInstance->checkBoolFlag(roomid, mActiveSceneFlag)) { + mStateMgr.changeState(StateID_Off); + } + } +} void dAcOUgSwitch_c::finalizeState_Active() {} -void dAcOUgSwitch_c::initializeState_On() {} -void dAcOUgSwitch_c::executeState_On() {} +void dAcOUgSwitch_c::initializeState_On() { + mAnmClr.setFrame(2.0f, 0); + static volatile u32 FLAGS_1 = 0x00000001; + static u32 FLAGS_2 = 0x00100001; + u32 f1 = FLAGS_1; + u32 f2 = FLAGS_2; + Event event = Event("OnSwitchCount", 100, f2 & ~f1, nullptr, nullptr); + EventManager::alsoSetAsCurrentEvent(this, &event, nullptr); +} +void dAcOUgSwitch_c::executeState_On() { + if (!SceneflagManager::sInstance->checkBoolFlag(roomid, mActiveSceneFlag)) { + if (mVariant == 0) { + mStateMgr.changeState(StateID_Active); + } else { + mStateMgr.changeState(StateID_Off); + } + } +} void dAcOUgSwitch_c::finalizeState_On() {} + +void dAcOUgSwitch_c::setVariant(int variant) { + if (variant == 0) { + mVariant = 0; + } else { + mVariant = 1; + } +}