mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-18 05:08:57 -04:00
294 lines
7.2 KiB
C++
294 lines
7.2 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_ykgr.cpp
|
|
//
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_ykgr.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/d_path.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "m_Do/m_Do_hostIO.h"
|
|
|
|
class daYkgr_HIO_c :
|
|
#if VERSION == VERSION_DEMO
|
|
public JORReflexible
|
|
#else
|
|
public mDoHIO_entry_c
|
|
#endif
|
|
{
|
|
public:
|
|
daYkgr_HIO_c() {
|
|
#if VERSION == VERSION_DEMO
|
|
mNo = -1;
|
|
m05 = 0;
|
|
#else
|
|
mNo = 0;
|
|
#endif
|
|
m08 = 0xFF;
|
|
m0C = 3;
|
|
m10 = -16.0f;
|
|
m14 = -5.0f;
|
|
m18 = -3.0f;
|
|
m1C = 0.0f;
|
|
m20 = 1500.0f;
|
|
m24 = 500.0f;
|
|
}
|
|
|
|
virtual ~daYkgr_HIO_c() {
|
|
#if VERSION == VERSION_DEMO
|
|
mNo = -1;
|
|
#endif
|
|
}
|
|
|
|
void genMessage(JORMContext* ctx) {}
|
|
|
|
public:
|
|
/* 0x04 */ s8 mNo;
|
|
/* 0x05 */ s8 m05;
|
|
/* 0x08 */ s32 m08;
|
|
/* 0x0C */ s32 m0C;
|
|
/* 0x10 */ f32 m10;
|
|
/* 0x14 */ f32 m14;
|
|
/* 0x18 */ f32 m18;
|
|
/* 0x1C */ f32 m1C;
|
|
/* 0x20 */ f32 m20;
|
|
/* 0x24 */ f32 m24;
|
|
}; // size = 0x28
|
|
|
|
static daYkgr_HIO_c l_HIO;
|
|
static dPa_YkgrPcallBack YkgrCB;
|
|
|
|
/* 000000EC-00000134 .text draw__17dPa_YkgrPcallBackFP14JPABaseEmitterP15JPABaseParticle */
|
|
void dPa_YkgrPcallBack::draw(JPABaseEmitter*, JPABaseParticle*) {
|
|
GXSetIndTexMtx(GX_ITM_0, &m04, m1C);
|
|
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
|
|
}
|
|
|
|
/* 00000134-00000234 .text setParam__17dPa_YkgrPcallBackFf */
|
|
void dPa_YkgrPcallBack::setParam(float arg1) {
|
|
if ((arg1 <= -17.0f) || (arg1 >= 47.0f)) {
|
|
return;
|
|
}
|
|
|
|
if (arg1 >= 0.0f) {
|
|
m1C = arg1;
|
|
m04 = m14 = (arg1 - m1C) * 0.5f + 0.5f;
|
|
} else {
|
|
f32 tmp = arg1 - 1.0f;
|
|
m1C = tmp;
|
|
m04 = m14 = (tmp - m1C) * 0.5f + 1.0f;
|
|
}
|
|
|
|
m08 = 0.0f;
|
|
m0C = 0.0f;
|
|
m10 = 0.0f;
|
|
m18 = 0.0f;
|
|
}
|
|
|
|
/* 00000234-00000408 .text getPosRate__8daYkgr_cFv */
|
|
f32 daYkgr_c::getPosRate() {
|
|
if (m_path == NULL) {
|
|
return 0.0f;
|
|
}
|
|
|
|
f32 fVar4 = FLOAT_MAX;
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
cXyz sp30 = player->current.pos;
|
|
dPnt* pdVar7 = m_path->m_points;
|
|
s32 num = m_path->m_num;
|
|
|
|
for (s32 i = 0; i < num; i++, pdVar7++) {
|
|
cXyz sp24(pdVar7->m_position.x, pdVar7->m_position.y, pdVar7->m_position.z);
|
|
f32 abs = sp30.absXZ(sp24);
|
|
if (abs < fVar4) {
|
|
fVar4 = abs;
|
|
}
|
|
}
|
|
|
|
if (fVar4 > l_HIO.m20) {
|
|
fVar4 = l_HIO.m20;
|
|
} else if (fVar4 < l_HIO.m24) {
|
|
fVar4 = l_HIO.m24;
|
|
}
|
|
|
|
fVar4 = (fVar4 - l_HIO.m24) / (l_HIO.m20 - l_HIO.m24);
|
|
return 1.0f - fVar4;
|
|
}
|
|
|
|
/* 00000408-00000428 .text daYkgrCreate__FPv */
|
|
static cPhs_State daYkgrCreate(void* i_this) {
|
|
return ((daYkgr_c*)i_this)->_create();
|
|
}
|
|
|
|
/* 00000428-00000680 .text _create__8daYkgr_cFv */
|
|
cPhs_State daYkgr_c::_create() {
|
|
u8 uVar4 = fopAcM_GetParam(this) >> 0x14 & 0xF;
|
|
|
|
fopAcM_ct(this, daYkgr_c);
|
|
|
|
u8 pathIndex = fopAcM_GetParam(this) >> 8 & 0xFF;
|
|
if (pathIndex != 0xff) {
|
|
m_path = dPath_GetRoomPath(pathIndex, fopAcM_GetRoomNo(this));
|
|
} else {
|
|
m_path = NULL;
|
|
}
|
|
|
|
if (strcmp(dComIfGp_getStartStageName(), "Adanmae") == 0 && dComIfGs_isSymbol(dSymbol_DIN_e)) {
|
|
return cPhs_STOP_e;
|
|
}
|
|
|
|
if (m_emitter == NULL) {
|
|
fopAc_ac_c* player = dComIfGp_getPlayer(0);
|
|
current.pos = player->current.pos;
|
|
m_emitter = dComIfGp_particle_setProjection(dPa_name::ID_AK_SP_MTDRAGONKAGEROU, ¤t.pos);
|
|
if (m_emitter != NULL) {
|
|
m_emitter->setParticleCallBackPtr(&YkgrCB);
|
|
YkgrCB.setParam(-3.0f);
|
|
} else {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
fopAcM_setStageLayer(this);
|
|
|
|
if ((s32)uVar4 == 1) {
|
|
setAlpha(0xFF);
|
|
m_emitter->setGlobalAlpha(0xFF);
|
|
m2CC = 0.5f;
|
|
m2D0 = 0.0f;
|
|
start();
|
|
} else {
|
|
setAlpha(0);
|
|
m_emitter->setGlobalAlpha(0);
|
|
m2CC = 0.5f;
|
|
m2D0 = 0.0f;
|
|
stop();
|
|
}
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
if (l_HIO.mNo < 0) {
|
|
l_HIO.mNo = mDoHIO_createChild("竜の山陽炎", &l_HIO);
|
|
}
|
|
#endif
|
|
} else {
|
|
if ((s32)uVar4 == 1) {
|
|
start();
|
|
} else {
|
|
stop();
|
|
}
|
|
return cPhs_STOP_e;
|
|
}
|
|
|
|
return cPhs_COMPLEATE_e;
|
|
}
|
|
|
|
bool daYkgr_c::_delete() {
|
|
return true;
|
|
}
|
|
|
|
/* 00000680-00000688 .text daYkgrDelete__FPv */
|
|
static BOOL daYkgrDelete(void* v_this) {
|
|
return ((daYkgr_c*)v_this)->_delete();
|
|
}
|
|
|
|
bool daYkgr_c::_execute() {
|
|
cLib_addCalc2(&m2CC, m_aim_rate, 0.25f, 0.05f);
|
|
cLib_addCalc2(&daYkgr_c::m_aim_rate, l_HIO.m1C, 0.25f, 0.05f);
|
|
cLib_addCalc2(&m2D0, getPosRate(), 0.25f, 0.05f);
|
|
|
|
f32 fVar1 = m2CC * 0.5f + m2D0 * 0.5f;
|
|
f32 tmp2 = fVar1 * l_HIO.m18 + (1.0f - fVar1) * l_HIO.m14;
|
|
YkgrCB.setParam(tmp2);
|
|
|
|
if (m_alpha_flag == 0) {
|
|
if (m_alpha != 0) {
|
|
if (m_alpha > l_HIO.m0C) {
|
|
m_alpha -= l_HIO.m0C;
|
|
} else {
|
|
m_alpha = 0;
|
|
}
|
|
}
|
|
} else if (m_alpha < 0xff) {
|
|
if (m_alpha < 0xff - l_HIO.m0C) {
|
|
m_alpha += l_HIO.m0C;
|
|
} else {
|
|
m_alpha = 0xff;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 00000688-000007F4 .text daYkgrExecute__FPv */
|
|
static BOOL daYkgrExecute(void* v_this) {
|
|
return ((daYkgr_c*)v_this)->_execute();
|
|
}
|
|
|
|
void daYkgr_c::set_mtx() {
|
|
camera_class* camera = dComIfGp_getCamera(0);
|
|
current.pos = *fopCamM_GetEye_p(camera);
|
|
current.angle.y = fopCamM_GetAngleY(camera);
|
|
current.angle.x = fopCamM_GetAngleX(camera);
|
|
|
|
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
mDoMtx_stack_c::XrotM(current.angle.x);
|
|
|
|
MTXCopy(mDoMtx_stack_c::get(), mMtx);
|
|
}
|
|
|
|
bool daYkgr_c::_draw() {
|
|
if (m_alpha == 0) {
|
|
return true;
|
|
}
|
|
|
|
set_mtx();
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
m_emitter->setGlobalRTMatrix(mMtx);
|
|
if (m_emitter != NULL) {
|
|
m_emitter->setGlobalAlpha(m_alpha);
|
|
}
|
|
#else
|
|
if (m_emitter != NULL) {
|
|
m_emitter->setGlobalRTMatrix(mMtx);
|
|
m_emitter->setGlobalAlpha(m_alpha);
|
|
}
|
|
#endif
|
|
return true;
|
|
}
|
|
|
|
/* 000007F4-000008F4 .text daYkgrDraw__FPv */
|
|
static BOOL daYkgrDraw(void* v_this) {
|
|
return ((daYkgr_c*)v_this)->_draw();
|
|
}
|
|
|
|
/* 000008F4-000008FC .text daYkgrIsDelete__FPv */
|
|
static BOOL daYkgrIsDelete(void*) {
|
|
return TRUE;
|
|
}
|
|
|
|
static actor_method_class daYkgrMethodTable = {
|
|
(process_method_func)daYkgrCreate,
|
|
(process_method_func)daYkgrDelete,
|
|
(process_method_func)daYkgrExecute,
|
|
(process_method_func)daYkgrIsDelete,
|
|
(process_method_func)daYkgrDraw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_Ykgr = {
|
|
/* Layer ID */ fpcLy_CURRENT_e,
|
|
/* List ID */ 0x0007,
|
|
/* List Prio */ fpcPi_CURRENT_e,
|
|
/* Proc Name */ fpcNm_Ykgr_e,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daYkgr_c),
|
|
/* Size Other */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Draw Prio */ fpcDwPi_Ykgr_e,
|
|
/* Actor SubMtd */ &daYkgrMethodTable,
|
|
/* Status */ fopAcStts_UNK4000_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* Cull Type */ fopAc_CULLBOX_0_e,
|
|
};
|