mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-26 15:44:53 -04:00
d_a_obj_hat 100% (#696)
* nearly matching obj_hat * use inline instead * cleanup * remove debug map * renaming member variables * fixing missing inlines in setMtx * last couple of renames, status to Matching * bit more inlining * Apply suggestions from code review Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com> * fixing review comments, missing returns --------- Co-authored-by: LagoLunatic <LagoLunatic@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
6c75c400f2
commit
d62ccfae12
@@ -1,25 +1,49 @@
|
||||
#ifndef D_A_OBJ_HAT_H
|
||||
#define D_A_OBJ_HAT_H
|
||||
|
||||
#include "SSystem/SComponent/c_phase.h"
|
||||
#include "d/d_bg_s_acch.h"
|
||||
#include "d/d_cc_d.h"
|
||||
#include "f_op/f_op_actor.h"
|
||||
#include "m_Do/m_Do_ext.h"
|
||||
|
||||
class daObjHat_c : public fopAc_ac_c {
|
||||
public:
|
||||
enum Prm_e {
|
||||
PRM_HAT_NO_W = 8,
|
||||
PRM_HAT_NO_S = 0,
|
||||
};
|
||||
|
||||
daObjHat_c();
|
||||
|
||||
s32 _create();
|
||||
void createHeap();
|
||||
void createInit();
|
||||
bool _delete();
|
||||
bool _draw();
|
||||
bool _execute();
|
||||
BOOL createHeap();
|
||||
s32 createInit();
|
||||
BOOL _delete();
|
||||
BOOL _draw();
|
||||
BOOL _execute();
|
||||
void executeNormal();
|
||||
void getPrmHatNo();
|
||||
u32 getPrmHatNo();
|
||||
void setMtx();
|
||||
void setSpeed(cXyz);
|
||||
|
||||
public:
|
||||
typedef void(daObjHat_c::*MoveFunc_t)();
|
||||
|
||||
/* 0x290 */ request_of_phase_process_class mPhs;
|
||||
/* 0x298 */ J3DModel* mpModel;
|
||||
/* 0x29c */ mDoExt_McaMorf* mpMorf;
|
||||
/* 0x2a0 */ Mtx mMtx;
|
||||
|
||||
/* 0x2d0 */ dBgS_ObjAcch mAcch;
|
||||
/* 0x494 */ dBgS_AcchCir mAcchCir;
|
||||
/* 0x4d4 */ dCcD_Stts mStts;
|
||||
/* 0x510 */ dCcD_Cyl mCyl;
|
||||
|
||||
/* 0x640 */ cXyz mMoveNorm;
|
||||
/* 0x64c */ u8 mState;
|
||||
/* 0x64d */ u8 mHatNo;
|
||||
/* Place member variables here */
|
||||
};
|
||||
}; /* size: 0x650 */
|
||||
|
||||
#endif /* D_A_OBJ_HAT_H */
|
||||
|
||||
+180
-32
@@ -4,91 +4,239 @@
|
||||
//
|
||||
|
||||
#include "d/actor/d_a_obj_hat.h"
|
||||
#include "d/actor/d_a_npc_roten.h"
|
||||
#include "d/d_a_obj.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_kankyo.h"
|
||||
#include "d/d_procname.h"
|
||||
#include "d/res/res_ro.h"
|
||||
#include "JSystem/J3DGraphAnimator/J3DModel.h"
|
||||
|
||||
static const int l_bmd_ix_tbl[] = {RO_BDL_RO_HAT, RO_BDL_RO_HAT2, RO_BDL_RO_HAT3, RO_BDL_RO_HAT};
|
||||
static const int l_bck_ix_tbl[] = {RO_BCK_HAT_WID, RO_BCK_HAT2_WIND, RO_BCK_HAT3_WID,
|
||||
RO_BCK_HAT_WID};
|
||||
static dCcD_SrcCyl l_cyl_src = {
|
||||
// dCcD_SrcGObjInf
|
||||
{
|
||||
/* Flags */ 0,
|
||||
/* SrcObjAt Type */ 0,
|
||||
/* SrcObjAt Atp */ 0,
|
||||
/* SrcObjAt SPrm */ 0,
|
||||
/* SrcObjTg Type */ AT_TYPE_WIND,
|
||||
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e,
|
||||
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsGrpAll_e,
|
||||
/* SrcGObjAt Se */ 0,
|
||||
/* SrcGObjAt HitMark */ 0,
|
||||
/* SrcGObjAt Spl */ 0,
|
||||
/* SrcGObjAt Mtrl */ 0,
|
||||
/* SrcGObjAt SPrm */ 0,
|
||||
/* SrcGObjTg Se */ 0,
|
||||
/* SrcGObjTg HitMark */ 0,
|
||||
/* SrcGObjTg Spl */ 0,
|
||||
/* SrcGObjTg Mtrl */ 0,
|
||||
/* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e | dCcG_TgSPrm_NoConHit_e,
|
||||
/* SrcGObjCo SPrm */ 0,
|
||||
},
|
||||
// cM3dGCylS
|
||||
{
|
||||
/* Center */ 0.0f,
|
||||
0.0f,
|
||||
0.0f,
|
||||
/* Radius */ 70.0f,
|
||||
/* Height */ 80.0f,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* 00000078-00000184 .text __ct__10daObjHat_cFv */
|
||||
daObjHat_c::daObjHat_c() {
|
||||
/* Nonmatching */
|
||||
u32 hatno = getPrmHatNo();
|
||||
mHatNo = hatno;
|
||||
mState = 0;
|
||||
}
|
||||
|
||||
/* 000003AC-000003CC .text CheckCreateHeap__FP10fopAc_ac_c */
|
||||
static BOOL CheckCreateHeap(fopAc_ac_c*) {
|
||||
/* Nonmatching */
|
||||
static BOOL CheckCreateHeap(fopAc_ac_c* actor) {
|
||||
return ((daObjHat_c*)actor)->createHeap();
|
||||
}
|
||||
|
||||
/* 000003CC-0000045C .text _create__10daObjHat_cFv */
|
||||
s32 daObjHat_c::_create() {
|
||||
/* Nonmatching */
|
||||
fopAcM_SetupActor(this, daObjHat_c);
|
||||
|
||||
int phase_state = dComIfG_resLoad(&mPhs, "Ro");
|
||||
|
||||
if (phase_state == cPhs_COMPLEATE_e) {
|
||||
if (fopAcM_entrySolidHeap(this, &CheckCreateHeap, 0uL)) {
|
||||
phase_state = createInit();
|
||||
} else {
|
||||
phase_state = cPhs_ERROR_e;
|
||||
}
|
||||
}
|
||||
return phase_state;
|
||||
}
|
||||
|
||||
/* 0000045C-000005D4 .text createHeap__10daObjHat_cFv */
|
||||
void daObjHat_c::createHeap() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjHat_c::createHeap() {
|
||||
J3DModelData* pModelData = (J3DModelData*)dComIfG_getObjectIDRes("Ro", l_bmd_ix_tbl[mHatNo]);
|
||||
if (pModelData == NULL) {
|
||||
return FALSE;
|
||||
} else {
|
||||
mDoExt_McaMorf* morf = new mDoExt_McaMorf(
|
||||
pModelData, NULL, NULL,
|
||||
(J3DAnmTransformKey*)dComIfG_getObjectIDRes("Ro", l_bck_ix_tbl[mHatNo]),
|
||||
J3DFrameCtrl::LOOP_REPEAT_e, 1.0f, 0, -1, 1, NULL, 0x80000, 0x37441422);
|
||||
|
||||
mpMorf = morf;
|
||||
if (mpMorf == NULL || mpMorf->getModel() == NULL) {
|
||||
return FALSE;
|
||||
} else {
|
||||
mpModel = mpMorf->getModel();
|
||||
mAcchCir.SetWall(30.0f, 30.0f);
|
||||
mAcch.Set(fopAcM_GetPosition_p(this),
|
||||
fopAcM_GetOldPosition_p(this),
|
||||
this,
|
||||
1,
|
||||
&mAcchCir,
|
||||
fopAcM_GetSpeed_p(this),
|
||||
fopAcM_GetAngle_p(this),
|
||||
fopAcM_GetShapeAngle_p(this));
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* 000005D4-000006AC .text createInit__10daObjHat_cFv */
|
||||
void daObjHat_c::createInit() {
|
||||
/* Nonmatching */
|
||||
s32 daObjHat_c::createInit() {
|
||||
mStts.Init(2, 0xff, this);
|
||||
mCyl.Set(l_cyl_src);
|
||||
mCyl.SetStts(&mStts);
|
||||
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
|
||||
fopAcM_setCullSizeBox(this, -50.0f, 0.0f, -50.0f, 50.0f, 200.0f, 50.0f);
|
||||
gravity = -5.0f;
|
||||
|
||||
fopAc_ac_c* parent;
|
||||
if (fopAcM_SearchByID(fopAcM_GetLinkId(this), &parent) && (parent != NULL)) {
|
||||
setSpeed(static_cast<daNpcRoten_c*>(parent)->getWindVec());
|
||||
}
|
||||
|
||||
setMtx();
|
||||
return cPhs_COMPLEATE_e;
|
||||
}
|
||||
|
||||
/* 000006AC-000006DC .text _delete__10daObjHat_cFv */
|
||||
bool daObjHat_c::_delete() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjHat_c::_delete() {
|
||||
dComIfG_resDelete(&mPhs, "Ro");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 000006DC-0000073C .text _draw__10daObjHat_cFv */
|
||||
bool daObjHat_c::_draw() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjHat_c::_draw() {
|
||||
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
||||
g_env_light.setLightTevColorType(mpModel, &tevStr);
|
||||
mpMorf->updateDL();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static daObjHat_c::MoveFunc_t moveProc[] = {
|
||||
&daObjHat_c::executeNormal,
|
||||
};
|
||||
|
||||
|
||||
/* 0000073C-00000884 .text _execute__10daObjHat_cFv */
|
||||
bool daObjHat_c::_execute() {
|
||||
/* Nonmatching */
|
||||
BOOL daObjHat_c::_execute() {
|
||||
|
||||
(this->*moveProc[mState])();
|
||||
f32 xspeed = mMoveNorm.x * speedF;
|
||||
f32 ymove = speed.y + gravity;
|
||||
f32 zspeed = mMoveNorm.z * speedF;
|
||||
|
||||
// because downwards vector quantity has negative value
|
||||
if (ymove < fopAcM_GetMaxFallSpeed(this)) {
|
||||
ymove = fopAcM_GetMaxFallSpeed(this);
|
||||
}
|
||||
fopAcM_SetSpeed(this, xspeed, ymove, zspeed);
|
||||
|
||||
fopAcM_posMove(this, mStts.GetCCMoveP());
|
||||
mAcch.CrrPos(g_dComIfG_gameInfo.play.mBgS);
|
||||
if (mAcch.ChkWallHit()) {
|
||||
fopAcM_SetSpeedF(this, 0.0f);
|
||||
}
|
||||
if (mAcch.ChkGroundHit()) {
|
||||
cLib_addCalc(&speedF, 0.0f, 0.3f, 1000.0f, 1.0f);
|
||||
}
|
||||
|
||||
mCyl.SetC(this->current.pos);
|
||||
dComIfG_Ccsp()->Set(&mCyl);
|
||||
if (mCyl.ChkTgHit()) {
|
||||
setSpeed(*mCyl.GetTgRVecP());
|
||||
}
|
||||
|
||||
setMtx();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 00000884-00000888 .text executeNormal__10daObjHat_cFv */
|
||||
void daObjHat_c::executeNormal() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
void daObjHat_c::executeNormal() { }
|
||||
|
||||
/* 00000888-000008B4 .text getPrmHatNo__10daObjHat_cFv */
|
||||
void daObjHat_c::getPrmHatNo() {
|
||||
/* Nonmatching */
|
||||
u32 daObjHat_c::getPrmHatNo() {
|
||||
return daObj::PrmAbstract(this, PRM_HAT_NO_W, PRM_HAT_NO_S) & 3;
|
||||
}
|
||||
|
||||
/* 000008B4-00000964 .text setMtx__10daObjHat_cFv */
|
||||
void daObjHat_c::setMtx() {
|
||||
/* Nonmatching */
|
||||
mpModel->setBaseScale(scale);
|
||||
mDoMtx_stack_c::transS(current.pos.x, current.pos.y,
|
||||
current.pos.z);
|
||||
|
||||
mDoMtx_stack_c::YrotM(current.angle.y + 0x4000);
|
||||
mDoMtx_stack_c::XrotM(current.angle.x);
|
||||
mDoMtx_stack_c::ZrotM(current.angle.z + 0x4000);
|
||||
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
||||
}
|
||||
|
||||
/* 00000964-00000A20 .text setSpeed__10daObjHat_cF4cXyz */
|
||||
void daObjHat_c::setSpeed(cXyz) {
|
||||
/* Nonmatching */
|
||||
void daObjHat_c::setSpeed(cXyz speed) {
|
||||
speed.y = 0;
|
||||
speed = speed.normZP();
|
||||
|
||||
mMoveNorm = speed;
|
||||
|
||||
fopAcM_SetSpeedF(this, 20.0f);
|
||||
|
||||
speed.x *= 20.0f;
|
||||
speed.y = 50.0f;
|
||||
speed.z *= 20.0f;
|
||||
|
||||
fopAcM_SetSpeed(this, speed.x, speed.y, speed.z);
|
||||
}
|
||||
|
||||
/* 00000A20-00000A40 .text daSampleCreate__FPv */
|
||||
static s32 daSampleCreate(void*) {
|
||||
/* Nonmatching */
|
||||
static s32 daSampleCreate(void* i_this) {
|
||||
return static_cast<daObjHat_c*>(i_this)->_create();
|
||||
}
|
||||
|
||||
/* 00000A40-00000A60 .text daSampleDelete__FPv */
|
||||
static BOOL daSampleDelete(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daSampleDelete(void* i_this) {
|
||||
return static_cast<daObjHat_c*>(i_this)->_delete();
|
||||
}
|
||||
|
||||
/* 00000A60-00000A80 .text daSampleExecute__FPv */
|
||||
static BOOL daSampleExecute(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daSampleExecute(void* i_this) {
|
||||
return static_cast<daObjHat_c*>(i_this)->_execute();
|
||||
}
|
||||
|
||||
/* 00000A80-00000AA0 .text daSampleDraw__FPv */
|
||||
static BOOL daSampleDraw(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daSampleDraw(void* i_this) {
|
||||
return static_cast<daObjHat_c*>(i_this)->_draw();
|
||||
}
|
||||
|
||||
/* 00000AA0-00000AA8 .text daSampleIsDelete__FPv */
|
||||
static BOOL daSampleIsDelete(void*) {
|
||||
/* Nonmatching */
|
||||
static BOOL daSampleIsDelete(void* i_this) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static actor_method_class daSampleMethodTable = {
|
||||
|
||||
Reference in New Issue
Block a user