mirror of
https://github.com/zeldaret/ss
synced 2026-07-29 15:42:51 -04:00
d_a_obj_treasure_island mostly done
This commit is contained in:
@@ -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() {}
|
||||
|
||||
Reference in New Issue
Block a user