From 331190722272e21dd267166abef84ffe8a4ff84b Mon Sep 17 00:00:00 2001 From: Swekka Date: Tue, 8 Jul 2025 10:55:07 +0200 Subject: d_a_obj_under_cloud OK --- src/REL/d/a/obj/d_a_obj_under_cloud.cpp | 74 +++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) (limited to 'src') 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(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; +} -- cgit v1.2.3