mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 15:01:33 -04:00
109 lines
3.5 KiB
C++
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.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);
|
|
}
|
|
}
|