diff options
| author | Swekka <swekka@proton.me> | 2025-07-08 10:55:07 +0200 |
|---|---|---|
| committer | Swekka <swekka@proton.me> | 2025-07-08 10:55:07 +0200 |
| commit | 331190722272e21dd267166abef84ffe8a4ff84b (patch) | |
| tree | cf9e757df0e9e4d5c3f7a6ecd46deea9c4575d3f /src/REL/d/a/obj/d_a_obj_under_cloud.cpp | |
| parent | 0dabb0de4221db852c6e3adb6d245daff86a450b (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.cpp | 74 |
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; +} |
