Files
tww/src/d/actor/d_a_player.cpp
T
2024-02-10 01:09:51 -05:00

109 lines
3.5 KiB
C++

//
// Generated by dtk
// Translation Unit: d_a_player.cpp
//
#include "dolphin/types.h"
#include "d/actor/d_a_player.h"
#include "d/d_com_inf_game.h"
#include "f_op/f_op_camera_mng.h"
/* 801028FC-80102940 .text changePlayer__9daPy_py_cFP10fopAc_ac_c */
void daPy_py_c::changePlayer(fopAc_ac_c* newPlayer) {
if (!newPlayer) {
return;
}
s8 stayNo = dComIfGp_roomControl_getStayNo();
if (stayNo != newPlayer->current.roomNo) {
return;
}
dComIfGp_setPlayer(0, newPlayer);
dComIfGp_getCamera(0)->mCamera.mpPlayerActor = newPlayer;
dComIfGp_getAttention().mFlags |= 0x80;
}
/* 80102940-80102B84 .text objWindHitCheck__9daPy_py_cFP8dCcD_Cyl */
void daPy_py_c::objWindHitCheck(dCcD_Cyl* cyl) {
cXyz targetSpeed(0.0f, 0.0f, 0.0f);
f32 maxStep = 3.0f;
if (cyl->ChkTgHit()) {
cCcD_Obj* hitObj = cyl->GetTgHitObj();
if (hitObj && hitObj->ChkAtType(AT_TYPE_WIND)) {
targetSpeed = *cyl->GetTgRVecP();
f32 distXZ = cyl->GetTgRVecP()->absXZ();
maxStep = 1.0f;
if (distXZ < 1.0f) {
targetSpeed = (current.pos - *cyl->GetTgHitPosP()) * 30.0f;
distXZ = targetSpeed.absXZ();
}
if (distXZ > 30.0f) {
targetSpeed *= 30.0f / distXZ;
}
}
}
cLib_addCalc(&field_0x2f8.x, targetSpeed.x, 0.5f, maxStep, 0.5f);
cLib_addCalc(&field_0x2f8.z, targetSpeed.z, 0.5f, maxStep, 0.5f);
current.pos.x += field_0x2f8.x;
current.pos.z += field_0x2f8.z;
}
/* 80102B84-80102BB4 .text execute__25daPy_mtxFollowEcallBack_cFP14JPABaseEmitter */
void daPy_mtxFollowEcallBack_c::execute(JPABaseEmitter* emitter) {
emitter->setGlobalRTMatrix(mpMtx);
}
/* 80102BB4-80102BF8 .text end__25daPy_mtxFollowEcallBack_cFv */
void daPy_mtxFollowEcallBack_c::end() {
if (!mpEmitter) {
return;
}
mpEmitter->becomeInvalidEmitter();
mpEmitter->quitImmortalEmitter();
mpEmitter->setEmitterCallBackPtr(NULL);
mpEmitter = NULL;
}
/* 80102BF8-80102C84 .text makeEmitter__25daPy_mtxFollowEcallBack_cFUsPA4_fPC4cXyzPC4cXyz */
void daPy_mtxFollowEcallBack_c::makeEmitter(u16 particleID, MtxP mtx, const cXyz* pos, const cXyz* scale) {
end();
mpMtx = mtx;
dComIfGp_particle_setP1(particleID, pos, NULL, scale, 0xFF, this);
}
/* 80102C84-80102D14 .text makeEmitterColor__25daPy_mtxFollowEcallBack_cFUsPA4_fPC4cXyzPC8_GXColorPC8_GXColor */
void daPy_mtxFollowEcallBack_c::makeEmitterColor(u16 particleID, MtxP mtx, const cXyz* pos, const GXColor* prmColor, const GXColor* envColor) {
end();
mpMtx = mtx;
dComIfGp_particle_setP1(particleID, pos, NULL, NULL, 0xFF, this, -1, prmColor, envColor);
}
/* 80102D14-80102D90 .text setDoButtonQuake__9daPy_py_cFv */
void daPy_py_c::setDoButtonQuake() {
if (checkNoResetFlg0(daPyFlg0_UNK200000)) {
return;
}
onNoResetFlg0(daPyFlg0_UNK200000);
mQuakeTimer = 60;
// u8 temp[4] = {0x00, 0x10, 0xFF, 0xEE}; // Doesn't match
u32 temp2 = 0x0010FFEE;
u8* temp = (u8*)&temp2;
dComIfGp_getVibration().StartQuake(temp, 0, 1, cXyz(0.0f, 1.0f, 0.0f));
}
/* 80102D90-80102E18 .text stopDoButtonQuake__9daPy_py_cFi */
void daPy_py_c::stopDoButtonQuake(BOOL param_1) {
if (mQuakeTimer > 0) {
mQuakeTimer--;
if (mQuakeTimer == 0) {
dComIfGp_getVibration().StopQuake(-1);
}
}
if (param_1 && mQuakeTimer == 0) {
offNoResetFlg0(daPyFlg0_UNK200000);
}
}