summaryrefslogtreecommitdiff
path: root/src/REL/d/a/obj/d_a_obj_under_cloud.cpp
diff options
context:
space:
mode:
authorSwekka <swekka@proton.me>2025-07-08 10:55:07 +0200
committerSwekka <swekka@proton.me>2025-07-08 10:55:07 +0200
commit331190722272e21dd267166abef84ffe8a4ff84b (patch)
treecf9e757df0e9e4d5c3f7a6ecd46deea9c4575d3f /src/REL/d/a/obj/d_a_obj_under_cloud.cpp
parent0dabb0de4221db852c6e3adb6d245daff86a450b (diff)
d_a_obj_under_cloud OK
Diffstat (limited to 'src/REL/d/a/obj/d_a_obj_under_cloud.cpp')
-rw-r--r--src/REL/d/a/obj/d_a_obj_under_cloud.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/REL/d/a/obj/d_a_obj_under_cloud.cpp b/src/REL/d/a/obj/d_a_obj_under_cloud.cpp
index a7a75d07..d9ab3b01 100644
--- a/src/REL/d/a/obj/d_a_obj_under_cloud.cpp
+++ b/src/REL/d/a/obj/d_a_obj_under_cloud.cpp
@@ -1,3 +1,77 @@
#include "d/a/obj/d_a_obj_under_cloud.h"
+#include "d/a/obj/d_a_obj_base.h"
+#include "d/d_light_env.h"
+#include "d/d_stage.h"
+#include "f/f_base.h"
+#include "m/m_vec.h"
+#include "nw4r/g3d/res/g3d_resfile.h"
+#include "nw4r/g3d/res/g3d_resmdl.h"
+
SPECIAL_ACTOR_PROFILE(OBJ_UNDER_CLOUD, dAcOunderCloud_c, fProfile::OBJ_UNDER_CLOUD, 0x202, 0, 4);
+
+bool dAcOunderCloud_c::createHeap() {
+ void *data = getOarcResFile("F020UnderCloud");
+ mResFile = nw4r::g3d::ResFile(data);
+ dStage_c::bindStageResToFile(&mResFile);
+ dStage_c::bindSkyCmnToResFile(&mResFile);
+ nw4r::g3d::ResMdl mdl = mResFile.GetResMdl("F020UnderCloud");
+ TRY_CREATE(mMdl.create(mdl, &heap_allocator, 0x160));
+ nw4r::g3d::ResAnmTexSrt anm = mResFile.GetResAnmTexSrt("F020UnderCloud");
+ TRY_CREATE(mAnm.create(mdl, anm, &heap_allocator, nullptr, 1));
+ mMdl.setOption(0x30001, false);
+ return true;
+}
+
+int dAcOunderCloud_c::create() {
+ CREATE_ALLOCATOR(dAcOunderCloud_c);
+ mMdl.setAnm(mAnm);
+ updateMatrix();
+ mMdl.setLocalMtx(mWorldMtx);
+ mMdl.setPriorityDraw(0x1C, 9);
+ boundingBox.Set(mVec3_c(-550000.0f, -30000.0f, -500000.0f), mVec3_c(500000.0f, -10000.0f, 500000.0f));
+ return SUCCEEDED;
+}
+
+int dAcOunderCloud_c::doDelete() {
+ return SUCCEEDED;
+}
+
+int dAcOunderCloud_c::actorExecute() {
+ mAnm.play();
+ return SUCCEEDED;
+}
+
+int dAcOunderCloud_c::actorExecuteInEvent() {
+ nw4r::g3d::ScnMdl *mdl = nw4r::g3d::ScnObj::DynamicCast<nw4r::g3d::ScnMdl>(mMdl.getG3dObject());
+ nw4r::g3d::ScnMdl::CopiedVisAccess visAccess(mdl, 1);
+ switch (mEvent.getCurrentEventCommand()) {
+ case 'act0': {
+ actorExecute();
+ mEvent.advanceNext();
+ break;
+ };
+ case 'act1': {
+ actorExecute();
+ visAccess.SetVisibility(false);
+ break;
+ };
+ case '????': {
+ actorExecute();
+ break;
+ };
+ default: {
+ mEvent.advanceNext();
+ };
+ }
+ return SUCCEEDED;
+}
+
+int dAcOunderCloud_c::draw() {
+ dLightEnv_c &lightEnv = dLightEnv_c::GetInstance();
+ if (lightEnv.fn_80024770(6) && !lightEnv.fn_800247A0(6)) {
+ return SUCCEEDED;
+ }
+ drawModelType1(&mMdl);
+ return SUCCEEDED;
+}