mirror of https://github.com/zeldaret/tp.git
94 lines
3.0 KiB
C++
94 lines
3.0 KiB
C++
#ifndef D_A_OBJ_SWCHAIN_H
|
|
#define D_A_OBJ_SWCHAIN_H
|
|
|
|
#include "f_op/f_op_actor_mng.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/actor/d_a_player.h"
|
|
|
|
/**
|
|
* @ingroup actors-objects
|
|
* @class daObjSwChain_c
|
|
* @brief Chain Switch
|
|
*
|
|
* @details
|
|
*
|
|
*/
|
|
class daObjSwChain_c : public fopAc_ac_c {
|
|
public:
|
|
struct chain_s {
|
|
public:
|
|
/* 80CF8B00 */ ~chain_s();
|
|
/* 80CF8B3C */ chain_s();
|
|
|
|
/* 0x00 */ u8 field_0x00[0x34 - 0x00];
|
|
/* 0x00 */ cXyz field_0x34;
|
|
/* 0x00 */ u8 field_0x40[0x50 - 0x40];
|
|
};
|
|
|
|
/* 80CF8768 */ void Create();
|
|
/* 80CF89C0 */ void CreateHeap();
|
|
/* 80CF8B48 */ void create1st();
|
|
/* 80CF8ED0 */ void execute();
|
|
/* 80CF94E4 */ void getChainBasePos(cXyz*);
|
|
/* 80CF9500 */ void chain_control();
|
|
/* 80CF99C0 */ void chain_control2();
|
|
/* 80CFA05C */ void initChainMtx();
|
|
/* 80CFA124 */ void setChainMtx();
|
|
/* 80CFA4A8 */ void chain_count_control();
|
|
/* 80CFAD50 */ void setTension();
|
|
/* 80CFB450 */ void getTopChainNo();
|
|
/* 80CFB464 */ void checkPlayerPull();
|
|
/* 80CFB53C */ void draw();
|
|
/* 80CFB5E8 */ void _delete();
|
|
|
|
u8 getSwbit() { return fopAcM_GetParamBit(this, 0, 8); }
|
|
u8 getChainID() { return fopAcM_GetParamBit(this, 28, 4); }
|
|
BOOL checkDispEmphasis() { return fopAcM_isSwitch(this, getSwbit()) == FALSE; }
|
|
bool checkCarry() { return mCarry == 1; }
|
|
void setRatioForChandelier(f32 ratio) { mRatio = ratio; }
|
|
|
|
/* 80C665A4 */ BOOL checkTight() {
|
|
if (mCarry != 0 && (home.roomNo == 4 || home.roomNo == 6) && field_0xa64 >= field_0xa69 &&
|
|
field_0xa9c == 0)
|
|
{
|
|
daPy_py_c* player = daPy_getPlayerActorClass();
|
|
chain_s* swChain = &field_0xa74[field_0xa65] - field_0xa64 + 1;
|
|
cXyz cStack_54;
|
|
cXyz cStack_60;
|
|
cStack_54 = swChain->field_0x34;
|
|
cStack_60 = field_0xa74[field_0xa65].field_0x34;
|
|
f32 dVar10 = cStack_60.abs(cStack_54);
|
|
f32 dVar13 = (field_0xa67 - 2) * 35.0f;
|
|
cXyz local_6c;
|
|
cXyz cStack_78 = field_0xa74[0].field_0x34 - field_0xa74[field_0xa65].field_0x34;
|
|
local_6c.x = player->getSpeedF() * cM_ssin(player->current.angle.y);
|
|
local_6c.z = player->getSpeedF() * cM_scos(player->current.angle.y);
|
|
if (cStack_78.inprodXZ(local_6c) < 0.0f && dVar10 > dVar13 - 35.0f) {
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
private:
|
|
/* 0x568 */ u8 field_0x568[0xa62 - 0x568];
|
|
/* 0xA62 */ u8 mCarry;
|
|
/* 0xA63 */ u8 field_0xa63;
|
|
/* 0xA64 */ u8 field_0xa64;
|
|
/* 0xA65 */ u8 field_0xa65;
|
|
/* 0xA66 */ u8 field_0xa66;
|
|
/* 0xA67 */ u8 field_0xa67;
|
|
/* 0xA68 */ u8 field_0xa68;
|
|
/* 0xA69 */ u8 field_0xa69;
|
|
/* 0xA6A */ u8 field_0xa6a[0xa74 - 0xa6a];
|
|
/* 0xA6A */ chain_s* field_0xa74;
|
|
/* 0xA6A */ u8 field_0xa78[0xa98 - 0xa78];
|
|
/* 0xA98 */ f32 mRatio;
|
|
/* 0xA9C */ u8 field_0xa9c;
|
|
};
|
|
|
|
STATIC_ASSERT(sizeof(daObjSwChain_c) == 0xaa0);
|
|
|
|
|
|
#endif /* D_A_OBJ_SWCHAIN_H */
|