mirror of
https://github.com/zeldaret/ss
synced 2026-07-28 23:27:06 -04:00
d_a_obj_utajima_island OK (#73)
* d_a_obj_utajima_island OK * Name one field * mAngle constants
This commit is contained in:
@@ -1,9 +1,141 @@
|
||||
#include "d/a/obj/d_a_obj_utajima_island.h"
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/a/obj/d_a_obj_utajima_main_mecha.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "f/f_base.h"
|
||||
#include "f/f_manager.h"
|
||||
#include "f/f_profile_name.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "nw4r/g3d/g3d_resmdl.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/room_manager.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_UTAJIMA_ISLAND, dAcOutajimaIsland_c, fProfile::OBJ_UTAJIMA_ISLAND, 0x1D2, 0, 6);
|
||||
|
||||
bool dAcOutajimaIsland_c::sPlatformsSettled;
|
||||
|
||||
STATE_DEFINE(dAcOutajimaIsland_c, Wait);
|
||||
|
||||
// ?????
|
||||
const f32 dAcOutajimaIsland_c::floats[] = {
|
||||
2500.0f, 1400.0f, 100000.0f, 3.67342e-39f, 9.0072003E15f,
|
||||
};
|
||||
|
||||
bool dAcOutajimaIsland_c::createHeap() {
|
||||
mRes = getOarcResFile("IslPuzIslet00");
|
||||
RoomManager::bindStageResToFile(&mRes);
|
||||
RoomManager::bindSkyCmnToResFile(&mRes);
|
||||
nw4r::g3d::ResMdl m = mRes.GetResMdl("IslPuzIslet00");
|
||||
|
||||
TRY_CREATE(mMdl.create(m, &heap_allocator, 0x120));
|
||||
|
||||
void *dzb = getOarcFile("IslPuzIslet00", "dzb/IslPuzIslet00.dzb");
|
||||
void *plc = getOarcFile("IslPuzIslet00", "dat/IslPuzIslet00.plc");
|
||||
updateMatrix();
|
||||
TRY_CREATE(!mBgW.Set((cBgD_t *)dzb, (PLC *)plc, cBgW::MOVE_BG_e, &mWorldMtx, &mScale));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcOutajimaIsland_c::actorCreate() {
|
||||
mInitialPos = position;
|
||||
mInitialRot = rotation;
|
||||
|
||||
mRingLayer = getRingLayer();
|
||||
mParam2 = getParm2();
|
||||
s32 v = getParm2() * 30;
|
||||
field_0x5BC = mAng::fromDeg(v);
|
||||
field_0x5BE.x = field_0x5BC;
|
||||
field_0x5BE.z = 0x88;
|
||||
field_0x5BE.y = 0x88;
|
||||
|
||||
movePlatforms();
|
||||
CREATE_ALLOCATOR(dAcOutajimaIsland_c);
|
||||
mBgW.SetCrrFunc(dBgS_MoveBGProc_Typical);
|
||||
dBgS::GetInstance()->Regist(&mBgW, this);
|
||||
mStateMgr.changeState(StateID_Wait);
|
||||
mMdl.setPriorityDraw(0x1C, 9);
|
||||
|
||||
mVec3_c min;
|
||||
mVec3_c max;
|
||||
mMdl.getBounds(&min, &max);
|
||||
boundingBox.Set(min, max);
|
||||
mCullingDistance = 500000.0f;
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOutajimaIsland_c::actorPostCreate() {
|
||||
fBase_c *p = nullptr;
|
||||
do {
|
||||
p = fManager_c::searchBaseByProfName(fProfile::OBJ_UTAJIMA_MAIN_MECHA, p);
|
||||
if (p != nullptr) {
|
||||
mMainMechaRef.link(static_cast<dAcOutajimaMainMecha_c *>(p));
|
||||
}
|
||||
} while (p != nullptr);
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOutajimaIsland_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOutajimaIsland_c::actorExecute() {
|
||||
mStateMgr.executeState();
|
||||
updateMatrix();
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
mBgW.Move();
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOutajimaIsland_c::draw() {
|
||||
drawModelType1(&mMdl);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcOutajimaIsland_c::initializeState_Wait() {}
|
||||
void dAcOutajimaIsland_c::executeState_Wait() {}
|
||||
void dAcOutajimaIsland_c::executeState_Wait() {
|
||||
movePlatforms();
|
||||
if (mIsMoving) {
|
||||
mOldPosition.y += 1.0f;
|
||||
mPlaySound = true;
|
||||
sPlatformsSettled = false;
|
||||
}
|
||||
|
||||
if (mPlaySound) {
|
||||
if (mRingLayer == 1) {
|
||||
playSoundEffect1(0xC6E);
|
||||
} else if (mRingLayer == 2) {
|
||||
playSoundEffect1(0xC6F);
|
||||
} else if (mRingLayer == 3) {
|
||||
playSoundEffect1(0xC70);
|
||||
}
|
||||
|
||||
if (mOldPosition == position) {
|
||||
mPlaySound = false;
|
||||
if (mParam2 == 0 && !sPlatformsSettled) {
|
||||
playSound(0xC71);
|
||||
sPlatformsSettled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
void dAcOutajimaIsland_c::finalizeState_Wait() {}
|
||||
|
||||
void dAcOutajimaIsland_c::movePlatforms() {
|
||||
// What is going on here?
|
||||
s32 diff = field_0x5BC - field_0x5BE.x;
|
||||
if (mAng(diff) > mAng::fromDeg(90.0f)) {
|
||||
sLib::chase(&field_0x5BE.y.mVal, 0x7FFF, 1);
|
||||
} else {
|
||||
sLib::chase(&field_0x5BE.y.mVal, field_0x5BE.z, 1);
|
||||
}
|
||||
|
||||
sLib::chaseAngle2(&field_0x5BE.x.mVal, field_0x5BC, field_0x5BE.y);
|
||||
|
||||
rotation.y = mInitialRot.y - field_0x5BE.x;
|
||||
position.z = mInitialPos.z + ((mRingLayer - 1) * 1400.0f + 2500.0f) * rotation.y.cos();
|
||||
position.x = mInitialPos.x + ((mRingLayer - 1) * 1400.0f + 2500.0f) * rotation.y.sin();
|
||||
}
|
||||
|
||||
@@ -449,7 +449,7 @@ void dAcBase_c::FUN_8002d600() {}
|
||||
void dAcBase_c::FUN_8002d630() {}
|
||||
void dAcBase_c::FUN_8002d6d0() {}
|
||||
// currently named ActorBase__playSoundEffect1
|
||||
void dAcBase_c::playSoundEffect1() {}
|
||||
void dAcBase_c::playSoundEffect1(u16) {}
|
||||
void dAcBase_c::FUN_8002d740() {}
|
||||
void dAcBase_c::FUN_8002d770() {}
|
||||
void dAcBase_c::FUN_8002d7a0() {}
|
||||
|
||||
+11
-1
@@ -1,7 +1,17 @@
|
||||
#include "m/m_angle.h"
|
||||
#include "math.h"
|
||||
|
||||
/** 80575c08 */
|
||||
mAng3_c mAng3_c::Zero = mAng3_c::mAng3_c(0, 0, 0);
|
||||
mAng3_c mAng3_c::Zero = mAng3_c(0, 0, 0);
|
||||
|
||||
const f32 mAng::sHalfCircleDeg = 360.0f / 2;
|
||||
const f32 mAng::sAngToDeg = 360.0f / (1 << 16);
|
||||
const f32 mAng::sAngToRad = 2 * M_PI / (1 << 16);
|
||||
const f32 mAng::NotSure = 2.0f / (1 << 16);
|
||||
const f32 mAng::sDegToRad = M_PI / 180.0f;
|
||||
const f32 mAng::sDegToAng = (1 << 16) / 360.0f;
|
||||
const f32 mAng::sRadToAng = (1 << 16) / (2 * M_PI);
|
||||
const f32 mAng::sRadToDeg = 180.0f / M_PI;
|
||||
|
||||
/** 802ee5f0 */
|
||||
s32 mAng::step(s16 target, s32 steps, s16 max, s16 min) {
|
||||
|
||||
Reference in New Issue
Block a user