diff options
| author | robojumper <robojumper@gmail.com> | 2025-09-07 23:17:38 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-09-07 23:17:38 +0200 |
| commit | 06b6cda8ebf44be9b3e09720a28b200f9b3c60a3 (patch) | |
| tree | 380c65bcb5e1fe47c4d383e2ea7bdc3d402176f0 /src | |
| parent | 25cc5c34fd3072f92329f07c47ee7a1c511b067f (diff) | |
| parent | 8c2f90ba7786582097f4909e53ec762df34a7c65 (diff) | |
Merge pull request #241 from swekka/d_a_obj_clearness_wall
d_a_obj_clearness_wall OK
Diffstat (limited to 'src')
| -rw-r--r-- | src/REL/d/a/obj/d_a_obj_clearness_wall.cpp | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/REL/d/a/obj/d_a_obj_clearness_wall.cpp b/src/REL/d/a/obj/d_a_obj_clearness_wall.cpp index 3d074d69..9a2dbad0 100644 --- a/src/REL/d/a/obj/d_a_obj_clearness_wall.cpp +++ b/src/REL/d/a/obj/d_a_obj_clearness_wall.cpp @@ -1,3 +1,115 @@ #include "d/a/obj/d_a_obj_clearness_wall.h" +#include "d/a/obj/d_a_obj_base.h" +#include "d/col/bg/d_bg_s.h" +#include "d/flag/sceneflag_manager.h" +#include "f/f_base.h" +#include "toBeSorted/arc_managers/oarc_manager.h" + SPECIAL_ACTOR_PROFILE(OBJ_CLEARNESS_WALL, dAcOclearnessWall_c, fProfile::OBJ_CLEARNESS_WALL, 0x15B, 0, 0); + +bool dAcOclearnessWall_c::createHeap() { + const char *arcName = getArcName(); + const char *modelName = getModelName(); + void *dzb = OarcManager::GetInstance()->getDzbFromArc(arcName, modelName); + void *plc = OarcManager::GetInstance()->getPlcFromArc(arcName, modelName); + TRY_CREATE(!mBgW.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale)); + return SUCCEEDED; +} + +int dAcOclearnessWall_c::create() { + mSceneflag = params; + mVariant = getFromParams(8, 0xF); + field_0x542 = getFromParams(0xC, 0xF); + if (field_0x542 == 0xF) { + field_0x542 = 0; + } + updateMatrix(); + CREATE_ALLOCATOR(dAcOclearnessWall_c); + dBgS::GetInstance()->Regist(&mBgW, this); + mBgW.Lock(); + if (field_0x542 == 2) { + dBgS::GetInstance()->Release(&mBgW); + } + if (mVariant == 4) { + mBgW.field_0x22 = 4; + } + return SUCCEEDED; +} + +int dAcOclearnessWall_c::doDelete() { + return SUCCEEDED; +} + +int dAcOclearnessWall_c::actorExecute() { + switch (field_0x542) { + case 0: { + bool flag = SceneflagManager::sInstance->checkFlag(roomid, mSceneflag); + if (flag) { + deleteRequest(); + } + break; + } + case 1: { + bool flag = SceneflagManager::sInstance->checkFlag(roomid, mSceneflag); + if (flag && field_0x543) { + dBgS::GetInstance()->Release(&mBgW); + field_0x543 = false; + } else { + bool flag = SceneflagManager::sInstance->checkFlag(roomid, mSceneflag); + if (!flag && !field_0x543) { + dBgS::GetInstance()->Regist(&mBgW, this); + field_0x543 = true; + } + } + break; + } + case 2: { + bool flag = SceneflagManager::sInstance->checkFlag(roomid, mSceneflag); + if (flag && field_0x543) { + dBgS::GetInstance()->Regist(&mBgW, this); + field_0x543 = false; + } else { + bool flag = SceneflagManager::sInstance->checkFlag(roomid, mSceneflag); + if (!flag && !field_0x543) { + dBgS::GetInstance()->Release(&mBgW); + field_0x543 = true; + } + } + break; + } + default: { + bool flag = SceneflagManager::sInstance->checkFlag(roomid, mSceneflag); + if (flag) { + deleteRequest(); + } + } + } + return SUCCEEDED; +} + +int dAcOclearnessWall_c::draw() { + return SUCCEEDED; +} + +const char *dAcOclearnessWall_c::getArcName() { + switch (mVariant) { + case 0: return "InvisibleWall"; + case 1: return "InvisibleWallB"; + case 2: return "InvisibleWallC"; + case 3: return "InvisibleWallD"; + case 4: return "InvisibleWallE"; + default: return nullptr; + } +} + +const char *dAcOclearnessWall_c::getModelName() { + switch (mVariant) { + case 0: return "InvisibleWall"; + case 1: return "InvisibleWall_yahane"; + case 2: return "InvisibleWall_AirNaraku"; + case 3: return "InvisibleWall_Camera"; + case 4: return "InvisibleWall_tekitome"; + default: return nullptr; + } +} |
