summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-09-07 23:17:38 +0200
committerGitHub <noreply@github.com>2025-09-07 23:17:38 +0200
commit06b6cda8ebf44be9b3e09720a28b200f9b3c60a3 (patch)
tree380c65bcb5e1fe47c4d383e2ea7bdc3d402176f0 /src
parent25cc5c34fd3072f92329f07c47ee7a1c511b067f (diff)
parent8c2f90ba7786582097f4909e53ec762df34a7c65 (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.cpp112
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;
+ }
+}