d_a_obj_treasure_island mostly done

This commit is contained in:
CovenEsme
2025-03-14 07:00:51 +00:00
parent b3b140ff7f
commit 1f47b66472
4 changed files with 180 additions and 35 deletions
+113
View File
@@ -1,3 +1,116 @@
#include "d/a/obj/d_a_obj_treasure_island.h"
#include "d/a/obj/d_a_obj_base.h"
#include "d/col/bg/d_bg_s.h"
#include "d/d_stage.h"
#include "d/d_stage_mgr.h"
static const char *const AcOtreasureIsland__OarcNames[] = {
"IslTreA", "IslTreB", "IslTreC", "IslTreD", "IslTreE", "IslTreF", "IslTreG", "IslTreH",
};
static const char *const AcOtreasureIsland__ModelNames[] = {
"IslTreA", "IslTreB", "IslTreC", "IslTreD", "IslTreE", "IslTreF", "IslTreG", "IslTreH",
};
static const char *const AcOtreasureIsland__DbzNames[] = {
"dzb/IslTreA.dzb", "dzb/IslTreB.dzb", "dzb/IslTreC.dzb", "dzb/IslTreD.dzb",
"dzb/IslTreE.dzb", "dzb/IslTreF.dzb", "dzb/IslTreG.dzb", "dzb/IslTreH.dzb",
};
static const char *const AcOtreasureIsland__PlcNames[] = {
"dat/IslTreA.plc", "dat/IslTreB.plc", "dat/IslTreC.plc", "dat/IslTreD.plc",
"dat/IslTreE.plc", "dat/IslTreF.plc", "dat/IslTreG.plc", "dat/IslTreH.plc",
};
SPECIAL_ACTOR_PROFILE(OBJ_TREASURE_ISLAND, dAcOtreasureIsland_c, fProfile::OBJ_TREASURE_ISLAND, 0x1EE, 0, 3);
bool dAcOtreasureIsland_c::createHeap() {
mResFile = nw4r::g3d::ResFile(getOarcResFile(AcOtreasureIsland__OarcNames[subtype]));
dStage_c::bindStageResToFile(&mResFile);
dStage_c::bindSkyCmnToResFile(&mResFile);
nw4r::g3d::ResMdl mdl;
nw4r::g3d::ResAnmTexSrt anmSrt;
mdl = mResFile.GetResMdl(AcOtreasureIsland__ModelNames[subtype]);
TRY_CREATE(mModel.create(mdl, &heap_allocator, 0x120));
if (subtype == 2) {
mdl = mResFile.GetResMdl("IslTreCWater00");
TRY_CREATE(mWater00.create(mdl, &heap_allocator, 0x324));
if (dStage_c::getMA0IndirectSrt(&anmSrt, mdl)) {
TRY_CREATE(mWaterSrt00.create(mdl, anmSrt, &heap_allocator, 0x0, 1));
}
mdl = mResFile.GetResMdl("IslTreCWater01");
UnkWithWater::linkMdl(mdl, &waterStuff);
TRY_CREATE(mWater01.create(mdl, &heap_allocator, 0x324));
if (dStage_c::getMA0IndirectSrt(&anmSrt, mdl)) {
TRY_CREATE(mWaterSrt01.create(mdl, anmSrt, &heap_allocator, 0x0, 1));
}
}
void *dzb = getOarcFile(AcOtreasureIsland__OarcNames[subtype], AcOtreasureIsland__DbzNames[subtype]);
void *plc = getOarcFile(AcOtreasureIsland__OarcNames[subtype], AcOtreasureIsland__PlcNames[subtype]);
updateMatrix();
mModel.setLocalMtx(mWorldMtx);
if (subtype == 2) {
mWater00.setLocalMtx(mWorldMtx);
mWater01.setLocalMtx(mWorldMtx);
}
TRY_CREATE(!mCollision.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale));
mCollision.Lock();
return mCollision.InitMapStuff(&heap_allocator);
}
int dAcOtreasureIsland_c::create() {
subtype = params & 0xf;
if (subtype == 2) {
dStageMgr_c::GetInstance()->initUnkWithWater(0, &waterStuff);
}
CREATE_ALLOCATOR(dAcOtreasureIsland_c);
dBgS::GetInstance()->Regist(&mCollision, this);
dBgS::GetInstance()->RegistBg(&mCollision, this);
mModel.setPriorityDraw(0x1C, 0x9);
if (subtype == 2) {
mWater00.setAnm(mWaterSrt00);
mWater01.setAnm(mWaterSrt01);
mWater01.setPriorityDraw(0x1C, 0x84);
mWater00.setPriorityDraw(0x1C, 0x9);
}
boundingBox.Set(mVec3_c(-1850.0f, -2050.0f, -1900.0f), mVec3_c(1950.0f, 2500.0f, 1850.0f));
mCullingDistance = 500000.0;
return SUCCEEDED;
}
int dAcOtreasureIsland_c::doDelete() {
if (subtype == 2) {
dStageMgr_c::GetInstance()->destroyUnkWithWater(0, &waterStuff);
}
dBgS::GetInstance()->UnRegist(&mCollision);
return SUCCEEDED;
}
int dAcOtreasureIsland_c::actorExecute() {
if (subtype == 2) {
mWaterSrt00.play();
mWaterSrt01.play();
}
return SUCCEEDED;
}
int dAcOtreasureIsland_c::draw() {
drawModelType1(&mModel);
if (subtype == 2) {
drawModelType1(&mWater00);
drawModelType1(&mWater01);
}
return SUCCEEDED;
}
dAcOtreasureIsland_c::~dAcOtreasureIsland_c() {}