mirror of https://github.com/zeldaret/tp
919 lines
33 KiB
C++
919 lines
33 KiB
C++
#ifndef F_OP_ACTOR_MNG_H_
|
|
#define F_OP_ACTOR_MNG_H_
|
|
|
|
#include "d/d_bg_s.h"
|
|
#include "d/d_bg_s_gnd_chk.h"
|
|
#include "d/d_bg_s_lin_chk.h"
|
|
#include "d/d_bg_s_roof_chk.h"
|
|
#include "d/d_bg_s_wtr_chk.h"
|
|
#include "f_op/f_op_actor.h"
|
|
#include "f_op/f_op_actor_iter.h"
|
|
#include "f_op/f_op_draw_tag.h"
|
|
#include "f_pc/f_pc_manager.h"
|
|
#include "m_Do/m_Do_hostIO.h"
|
|
|
|
#define fopAcM_ct(ptr, ClassName) \
|
|
if (!fopAcM_CheckCondition(ptr, fopAcCnd_INIT_e)) { \
|
|
new (ptr) ClassName(); \
|
|
fopAcM_OnCondition(ptr, fopAcCnd_INIT_e); \
|
|
}
|
|
|
|
#define fopAcM_RegisterDeleteID(i_this, actor_name_str) \
|
|
const fpc_ProcID procID = fopAcM_GetID(i_this); \
|
|
"Delete -> " actor_name_str "(id=%d)\n"
|
|
|
|
#define fopAcM_RegisterCreateID(actor_class, i_this, actor_name_str) \
|
|
actor_class* a_this = static_cast<actor_class*>(i_this); \
|
|
const fpc_ProcID procID = fopAcM_GetID(i_this); \
|
|
"Create -> " actor_name_str "(id=%d)\n"
|
|
|
|
#define fopAcM_RegisterDelete(i_this, actor_name_str) "Delete -> " actor_name_str "\n"
|
|
|
|
#define fopAcM_RegisterCreate(actor_class, i_this, actor_name_str) \
|
|
static_cast<actor_class*>(i_this); \
|
|
"Create -> " actor_name_str "\n"
|
|
|
|
class J3DModelData; // placeholder
|
|
class JKRHeap;
|
|
class cM3dGPla;
|
|
|
|
struct fopAcM_prmBase_class {
|
|
/* 0x00 */ u32 parameters;
|
|
/* 0x04 */ cXyz position;
|
|
/* 0x10 */ csXyz angle;
|
|
/* 0x16 */ u16 setID;
|
|
}; // Size: 0x18
|
|
|
|
struct fopAcM_prmScale_class {
|
|
/* 0x0 */ u8 x;
|
|
/* 0x1 */ u8 y;
|
|
/* 0x2 */ u8 z;
|
|
}; // Size: 0x3
|
|
|
|
struct fopAcM_prm_class {
|
|
/* 0x00 */ fopAcM_prmBase_class base;
|
|
/* 0x18 */ fopAcM_prmScale_class scale;
|
|
/* 0x1C */ fpc_ProcID parent_id;
|
|
/* 0x20 */ s8 argument;
|
|
/* 0x21 */ s8 room_no;
|
|
};
|
|
|
|
struct fopAcM_search4ev_prm {
|
|
fopAcM_search4ev_prm() { clear(); }
|
|
void clear() {
|
|
name[0] = 0;
|
|
event_id = -1;
|
|
procname = PROC_PLAY_SCENE;
|
|
argument = 0;
|
|
}
|
|
|
|
/* 0x00 */ char name[30];
|
|
/* 0x1E */ s16 event_id;
|
|
/* 0x20 */ s16 procname;
|
|
/* 0x22 */ s8 argument;
|
|
};
|
|
|
|
struct fopAcM_search_prm {
|
|
/* 0x00 */ u32 prm0;
|
|
/* 0x04 */ u32 prm1;
|
|
/* 0x08 */ s16 procname;
|
|
/* 0x0A */ s8 argument;
|
|
};
|
|
|
|
struct fOpAcm_HIO_entry_c : public mDoHIO_entry_c {
|
|
virtual ~fOpAcm_HIO_entry_c() {}
|
|
|
|
#if DEBUG
|
|
void removeHIO(const fopAc_ac_c* i_this) { removeHIO(*i_this); }
|
|
void removeHIO(const fopAc_ac_c& i_this) { removeHIO(i_this.base); }
|
|
void removeHIO(const leafdraw_class& i_this) { removeHIO(i_this.base); }
|
|
void removeHIO(const base_process_class& i_this) { removeHIO(i_this.state); }
|
|
void removeHIO(const state_class& state) {
|
|
if (state.create_phase == cPhs_NEXT_e) {
|
|
mDoHIO_entry_c::removeHIO();
|
|
}
|
|
}
|
|
#endif
|
|
};
|
|
|
|
dBgS& dComIfG_Bgsp();
|
|
|
|
class dKy_tevstr_c;
|
|
class cBgS_PolyInfo;
|
|
typedef int (*createFunc)(void*);
|
|
typedef int (*heapCallbackFunc)(fopAc_ac_c*);
|
|
|
|
struct DOUBLE_POS {
|
|
double x, y, z;
|
|
};
|
|
|
|
enum fopAcM_STATUS {
|
|
/* 0x00000001 */ fopAcM_STATUS_UNK_0x1 = 1 << 0,
|
|
/* 0x00000002 */ fopAcM_STATUS_UNK_0x2 = 1 << 1,
|
|
/* 0x00000004 */ fopAcM_STATUS_UNK_0x4 = 1 << 2,
|
|
/* 0x00000008 */ fopAcM_STATUS_UNK_0x8 = 1 << 3,
|
|
/* 0x00000010 */ fopAcM_STATUS_UNK_0x10 = 1 << 4,
|
|
/* 0x00000020 */ fopAcM_STATUS_UNK_0x20 = 1 << 5,
|
|
/* 0x00000040 */ fopAcM_STATUS_UNK_0x40 = 1 << 6,
|
|
/* 0x00000080 */ fopAcM_STATUS_UNK_0x80 = 1 << 7,
|
|
/* 0x00000100 */ fopAcM_STATUS_UNK_0x100 = 1 << 8,
|
|
/* 0x00000200 */ fopAcM_STATUS_UNK_0x200 = 1 << 9,
|
|
/* 0x00000400 */ fopAcM_STATUS_UNK_0x400 = 1 << 10,
|
|
/* 0x00000800 */ fopAcM_STATUS_UNK_0x800 = 1 << 11,
|
|
/* 0x00001000 */ fopAcM_STATUS_UNK_0x1000 = 1 << 12,
|
|
/* 0x00002000 */ fopAcM_STATUS_CARRY_NOW = 1 << 13,
|
|
/* 0x00004000 */ fopAcM_STATUS_UNK_0x4000 = 1 << 14,
|
|
/* 0x00008000 */ fopAcM_STATUS_UNK_0x8000 = 1 << 15,
|
|
/* 0x00010000 */ fopAcM_STATUS_UNK_0x10000 = 1 << 16,
|
|
/* 0x00020000 */ fopAcM_STATUS_UNK_0x20000 = 1 << 17,
|
|
/* 0x00040000 */ fopAcM_STATUS_UNK_0x40000 = 1 << 18,
|
|
/* 0x00080000 */ fopAcM_STATUS_UNK_0x80000 = 1 << 19,
|
|
/* 0x00100000 */ fopAcM_STATUS_HOOK_CARRY_NOW = 1 << 20,
|
|
/* 0x00200000 */ fopAcM_STATUS_UNK_0x200000 = 1 << 21,
|
|
/* 0x00400000 */ fopAcM_STATUS_UNK_0x400000 = 1 << 22,
|
|
/* 0x00800000 */ fopAcM_STATUS_UNK_0x800000 = 1 << 23,
|
|
/* 0x01000000 */ fopAcM_STATUS_UNK_0x1000000 = 1 << 24,
|
|
/* 0x02000000 */ fopAcM_STATUS_UNK_0x2000000 = 1 << 25,
|
|
/* 0x04000000 */ fopAcM_STATUS_UNK_0x4000000 = 1 << 26,
|
|
/* 0x08000000 */ fopAcM_STATUS_UNK_0x8000000 = 1 << 27,
|
|
|
|
/* 0x80000000 */ fopAcM_STATUS_HAWK_CARRY_NOW = 1 << 31,
|
|
};
|
|
|
|
inline s8 fopAcM_GetRoomNo(const fopAc_ac_c* i_actor) {
|
|
return i_actor->current.roomNo;
|
|
}
|
|
|
|
inline fpc_ProcID fopAcM_GetID(const void* i_actor) {
|
|
return fpcM_GetID(i_actor);
|
|
}
|
|
|
|
inline s16 fopAcM_GetName(void* i_actor) {
|
|
return fpcM_GetName(i_actor);
|
|
}
|
|
|
|
inline MtxP fopAcM_GetMtx(const fopAc_ac_c* i_actor) {
|
|
return i_actor->cullMtx;
|
|
}
|
|
|
|
inline u32 fopAcM_CheckStatus(fopAc_ac_c* i_actor, u32 actor_status) {
|
|
return i_actor->actor_status & actor_status;
|
|
}
|
|
|
|
inline u32 fopAcM_checkCarryNow(fopAc_ac_c* i_actor) {
|
|
return i_actor->actor_status & fopAcM_STATUS_CARRY_NOW;
|
|
}
|
|
|
|
inline u32 fopAcM_checkHawkCarryNow(fopAc_ac_c* actor) {
|
|
return fopAcM_CheckStatus(actor, 0x80000000);
|
|
}
|
|
|
|
enum fopAcM_CARRY {
|
|
/* 0x01 */ fopAcM_CARRY_TYPE_1 = 1,
|
|
/* 0x02 */ fopAcM_CARRY_HEAVY = 2,
|
|
/* 0x04 */ fopAcM_CARRY_SIDE = 4,
|
|
/* 0x08 */ fopAcM_CARRY_TYPE_8 = 8,
|
|
/* 0x10 */ fopAcM_CARRY_LIGHT = 16, // guess based on context
|
|
/* 0x20 */ fopAcM_CARRY_ITEM = 32,
|
|
/* 0x30 */ fopAcM_CARRY_UNK_30 = 0x30,
|
|
/* 0x40 */ fopAcM_CARRY_UNK_40 = 0x40,
|
|
/* 0x80 */ fopAcM_CARRY_CHICKEN = 0x80,
|
|
};
|
|
|
|
inline u32 fopAcM_CheckCarryType(const fopAc_ac_c* actor, fopAcM_CARRY type) {
|
|
return actor->carryType & type;
|
|
}
|
|
|
|
inline u32 fopAcM_checkHookCarryNow(fopAc_ac_c* i_actor) {
|
|
return fopAcM_CheckStatus(i_actor, fopAcM_STATUS_HOOK_CARRY_NOW);
|
|
}
|
|
|
|
inline u32 fopAcM_GetParam(const void* i_actor) {
|
|
return fpcM_GetParam(i_actor);
|
|
}
|
|
|
|
inline u32 fopAcM_GetParamBit(void* ac, u8 shift, u8 bit) {
|
|
return (fopAcM_GetParam(ac) >> shift) & ((1 << bit) - 1);
|
|
}
|
|
|
|
inline void fopAcM_SetParam(void* i_actor, u32 param) {
|
|
fpcM_SetParam(i_actor, param);
|
|
}
|
|
|
|
inline void fopAcM_SetJntCol(fopAc_ac_c* i_actorP, dJntCol_c* i_jntColP) {
|
|
i_actorP->jntCol = i_jntColP;
|
|
}
|
|
|
|
inline s16 fopAcM_GetProfName(const void* i_actor) {
|
|
return fpcM_GetProfName(i_actor);
|
|
}
|
|
|
|
inline u8 fopAcM_GetGroup(const fopAc_ac_c* i_actor) {
|
|
return i_actor->group;
|
|
}
|
|
|
|
inline void fopAcM_OnStatus(fopAc_ac_c* i_actor, u32 flag) {
|
|
i_actor->actor_status |= flag;
|
|
}
|
|
|
|
inline void fopAcM_OffStatus(fopAc_ac_c* i_actor, u32 flag) {
|
|
i_actor->actor_status &= ~flag;
|
|
}
|
|
|
|
inline fopAc_ac_c* fopAcM_Search(fopAcIt_JudgeFunc i_judgeFunc, void* i_process) {
|
|
return (fopAc_ac_c*)fopAcIt_Judge(i_judgeFunc, i_process);
|
|
}
|
|
|
|
inline fopAc_ac_c* fopAcM_SearchByID(fpc_ProcID id) {
|
|
return (fopAc_ac_c*)fopAcIt_Judge(fpcSch_JudgeByID, &id);
|
|
}
|
|
|
|
inline fpc_ProcID fopAcM_GetLinkId(const fopAc_ac_c* i_actor) {
|
|
return i_actor->parentActorID;
|
|
}
|
|
|
|
inline cXyz* fopAcM_GetPosition_p(fopAc_ac_c* i_actor) {
|
|
return &i_actor->current.pos;
|
|
}
|
|
|
|
inline cXyz& fopAcM_GetPosition(fopAc_ac_c* i_actor) {
|
|
return i_actor->current.pos;
|
|
}
|
|
|
|
inline cXyz* fopAcM_GetOldPosition_p(fopAc_ac_c* i_actor) {
|
|
return &i_actor->old.pos;
|
|
}
|
|
|
|
inline cXyz* fopAcM_GetScale_p(fopAc_ac_c* i_actor) {
|
|
return &i_actor->scale;
|
|
}
|
|
|
|
inline cXyz* fopAcM_GetSpeed_p(fopAc_ac_c* i_actor) {
|
|
return &i_actor->speed;
|
|
}
|
|
|
|
inline csXyz* fopAcM_GetAngle_p(fopAc_ac_c* i_actor) {
|
|
return &i_actor->current.angle;
|
|
}
|
|
|
|
inline csXyz* fopAcM_GetShapeAngle_p(fopAc_ac_c* i_actor) {
|
|
return &i_actor->shape_angle;
|
|
}
|
|
|
|
inline u32 fopAcM_CheckCondition(fopAc_ac_c* i_actor, u32 flag) {
|
|
return i_actor->actor_condition & flag;
|
|
}
|
|
|
|
inline void fopAcM_OnCondition(fopAc_ac_c* i_actor, u32 flag) {
|
|
i_actor->actor_condition |= flag;
|
|
}
|
|
|
|
inline void fopAcM_OffCondition(fopAc_ac_c* i_actor, u32 flag) {
|
|
i_actor->actor_condition &= ~flag;
|
|
}
|
|
|
|
inline BOOL fopAcM_IsActor(void* actor) {
|
|
return fopAc_IsActor(actor);
|
|
}
|
|
|
|
inline void fopAcM_SetRoomNo(fopAc_ac_c* actor, s8 roomNo) {
|
|
actor->current.roomNo = roomNo;
|
|
}
|
|
|
|
inline void fopAcM_setHookCarryNow(fopAc_ac_c* actor) {
|
|
fopAcM_OnStatus(actor, fopAcM_STATUS_HOOK_CARRY_NOW);
|
|
}
|
|
|
|
inline void fopAcM_cancelHookCarryNow(fopAc_ac_c* actor) {
|
|
fopAcM_OffStatus(actor, fopAcM_STATUS_HOOK_CARRY_NOW);
|
|
}
|
|
|
|
inline void fopAcM_setHawkCarryNow(fopAc_ac_c* actor) {
|
|
fopAcM_OnStatus(actor, fopAcM_STATUS_HAWK_CARRY_NOW);
|
|
}
|
|
|
|
inline void fopAcM_cancelHawkCarryNow(fopAc_ac_c* actor) {
|
|
fopAcM_OffStatus(actor, fopAcM_STATUS_HAWK_CARRY_NOW);
|
|
}
|
|
|
|
inline s8 fopAcM_GetHomeRoomNo(const fopAc_ac_c* i_actor) {
|
|
return i_actor->home.roomNo;
|
|
}
|
|
|
|
inline void fopAcM_SetGravity(fopAc_ac_c* actor, f32 gravity) {
|
|
actor->gravity = gravity;
|
|
}
|
|
|
|
inline void fopAcM_SetGroup(fopAc_ac_c* actor, u8 group) {
|
|
actor->group = group;
|
|
}
|
|
|
|
inline void fopAcM_SetMaxFallSpeed(fopAc_ac_c* actor, f32 speed) {
|
|
actor->maxFallSpeed = speed;
|
|
}
|
|
|
|
inline void fopAcM_SetMtx(fopAc_ac_c* actor, MtxP m) {
|
|
actor->cullMtx = m;
|
|
}
|
|
|
|
inline void fopAcM_SetSpeed(fopAc_ac_c* actor, f32 x, f32 y, f32 z) {
|
|
actor->speed.set(x, y, z);
|
|
}
|
|
|
|
inline void fopAcM_SetSpeedF(fopAc_ac_c* actor, f32 f) {
|
|
actor->speedF = f;
|
|
}
|
|
|
|
inline void fopAcM_SetStatus(fopAc_ac_c* actor, u32 actor_status) {
|
|
actor->actor_status = actor_status;
|
|
}
|
|
|
|
inline void fopAcM_SetModel(fopAc_ac_c* actor, J3DModel* model) {
|
|
actor->model = model;
|
|
}
|
|
|
|
inline J3DModel* fopAcM_GetModel(fopAc_ac_c* actor) {
|
|
return actor->model;
|
|
}
|
|
|
|
inline fopAcM_prm_class* fopAcM_GetAppend(void* actor) {
|
|
return (fopAcM_prm_class*)fpcM_GetAppend(actor);
|
|
}
|
|
|
|
inline BOOL fopAcM_IsExecuting(fpc_ProcID id) {
|
|
return fpcM_IsExecuting(id);
|
|
}
|
|
|
|
inline f32 fopAcM_GetSpeedF(const fopAc_ac_c* i_actor) {
|
|
return i_actor->speedF;
|
|
}
|
|
|
|
inline f32 fopAcM_GetGravity(const fopAc_ac_c* i_actor) {
|
|
return i_actor->gravity;
|
|
}
|
|
|
|
inline f32 fopAcM_GetMaxFallSpeed(const fopAc_ac_c* i_actor) {
|
|
return i_actor->maxFallSpeed;
|
|
}
|
|
|
|
inline const cXyz* fopAcM_GetSpeed_p(const fopAc_ac_c* i_actor) {
|
|
return &i_actor->speed;
|
|
}
|
|
|
|
inline cXyz& fopAcM_GetSpeed(fopAc_ac_c* i_actor) {
|
|
return i_actor->speed;
|
|
}
|
|
|
|
inline const cXyz* fopAcM_GetPosition_p(const fopAc_ac_c* i_actor) {
|
|
return &i_actor->current.pos;
|
|
}
|
|
|
|
inline dJntCol_c* fopAcM_GetJntCol(fopAc_ac_c* i_actor) {
|
|
return i_actor->jntCol;
|
|
}
|
|
|
|
inline void fopAcM_setCullSizeFar(fopAc_ac_c* i_actor, f32 i_far) {
|
|
i_actor->cullSizeFar = i_far;
|
|
}
|
|
|
|
inline f32 fopAcM_getCullSizeFar(const fopAc_ac_c* i_actor) {
|
|
return i_actor->cullSizeFar;
|
|
}
|
|
|
|
inline const Vec* fopAcM_getCullSizeBoxMin(const fopAc_ac_c* i_actor) {
|
|
return &i_actor->cull.box.min;
|
|
}
|
|
|
|
inline const Vec* fopAcM_getCullSizeBoxMax(const fopAc_ac_c* i_actor) {
|
|
return &i_actor->cull.box.max;
|
|
}
|
|
|
|
inline void fopAcM_SetCullSize(fopAc_ac_c* i_actor, int i_cullsize) {
|
|
i_actor->cullType = i_cullsize;
|
|
}
|
|
|
|
inline int fopAcM_GetCullSize(const fopAc_ac_c* i_actor) {
|
|
return i_actor->cullType;
|
|
}
|
|
|
|
inline int fopAcM_CULLSIZE_IDX(int i_culltype) {
|
|
return i_culltype - fopAc_CULLBOX_0_e;
|
|
}
|
|
|
|
inline int fopAcM_CULLSIZE_Q_IDX(int i_culltype) {
|
|
return i_culltype - fopAc_CULLSPHERE_0_e;
|
|
}
|
|
|
|
inline BOOL fopAcM_CULLSIZE_IS_BOX(int i_culltype) {
|
|
return (i_culltype >= 0 && i_culltype < fopAc_CULLBOX_CUSTOM_e) ||
|
|
i_culltype == fopAc_CULLBOX_CUSTOM_e;
|
|
}
|
|
|
|
inline const cXyz& fopAcM_getCullSizeSphereCenter(const fopAc_ac_c* i_actor) {
|
|
return i_actor->cull.sphere.center;
|
|
}
|
|
|
|
inline f32 fopAcM_getCullSizeSphereR(const fopAc_ac_c* i_actor) {
|
|
return i_actor->cull.sphere.radius;
|
|
}
|
|
|
|
inline void fopAcM_SetPosition(fopAc_ac_c* i_actor, f32 x, f32 y, f32 z) {
|
|
i_actor->current.pos.set(x, y, z);
|
|
}
|
|
|
|
inline void fopAcM_SetOldPosition(fopAc_ac_c* i_actor, f32 x, f32 y, f32 z) {
|
|
i_actor->old.pos.set(x, y, z);
|
|
}
|
|
|
|
inline csXyz* fopAcM_GetHomeAngle_p(fopAc_ac_c* i_actor) {
|
|
return &i_actor->home.angle;
|
|
}
|
|
|
|
inline void fopAcM_SetHomePosition(fopAc_ac_c* i_actor, f32 x, f32 y, f32 z) {
|
|
i_actor->home.pos.set(x, y, z);
|
|
}
|
|
|
|
inline void fopAcM_SetAngle(fopAc_ac_c* i_actor, s16 x, s16 y, s16 z) {
|
|
i_actor->current.angle.set(x, y, z);
|
|
}
|
|
|
|
inline void dComIfGs_onSwitch(int i_no, int i_roomNo);
|
|
inline void dComIfGs_offSwitch(int i_no, int i_roomNo);
|
|
inline void dComIfGs_revSwitch(int i_no, int i_roomNo);
|
|
inline BOOL dComIfGs_isSwitch(int i_no, int i_roomNo);
|
|
inline void dComIfGs_offActor(int i_no, int i_roomNo);
|
|
|
|
inline void fopAcM_onSwitch(const fopAc_ac_c* i_actor, int sw) {
|
|
return dComIfGs_onSwitch(sw, fopAcM_GetHomeRoomNo(i_actor));
|
|
}
|
|
|
|
inline void fopAcM_offSwitch(const fopAc_ac_c* i_actor, int sw) {
|
|
return dComIfGs_offSwitch(sw, fopAcM_GetHomeRoomNo(i_actor));
|
|
}
|
|
|
|
inline void fopAcM_revSwitch(const fopAc_ac_c* i_actor, int sw) {
|
|
return dComIfGs_revSwitch(sw, fopAcM_GetHomeRoomNo(i_actor));
|
|
}
|
|
|
|
inline BOOL fopAcM_isSwitch(const fopAc_ac_c* i_actor, int sw) {
|
|
return dComIfGs_isSwitch(sw, fopAcM_GetHomeRoomNo(i_actor));
|
|
}
|
|
|
|
inline fopAc_ac_c* fopAcM_SearchByName(s16 proc_id) {
|
|
return (fopAc_ac_c*)fopAcIt_Judge(fpcSch_JudgeForPName, &proc_id);
|
|
}
|
|
|
|
inline void dComIfGs_onItem(int bitNo, int roomNo);
|
|
inline void fopAcM_onItem(const fopAc_ac_c* item, int bitNo) {
|
|
dComIfGs_onItem(bitNo, fopAcM_GetHomeRoomNo(item));
|
|
}
|
|
|
|
inline bool dComIfGs_isItem(int bitNo, int roomNo);
|
|
inline bool fopAcM_isItem(const fopAc_ac_c* item, int bitNo) {
|
|
return dComIfGs_isItem(bitNo, fopAcM_GetHomeRoomNo(item));
|
|
}
|
|
|
|
inline f32 fopAcM_searchActorDistanceY(const fopAc_ac_c* actorA, const fopAc_ac_c* actorB) {
|
|
return actorB->current.pos.y - actorA->current.pos.y;
|
|
}
|
|
|
|
inline u16 fopAcM_GetSetId(const fopAc_ac_c* i_actor) {
|
|
return i_actor->setID;
|
|
}
|
|
|
|
inline void dComIfGs_onActor(int bitNo, int roomNo);
|
|
|
|
inline void fopAcM_onActor(const fopAc_ac_c* i_actor) {
|
|
int setId = fopAcM_GetSetId(i_actor);
|
|
dComIfGs_onActor(setId, fopAcM_GetHomeRoomNo(i_actor));
|
|
}
|
|
|
|
inline void fopAcM_onDraw(fopAc_ac_c* i_actor) {
|
|
fopDwTg_ToDrawQ(&i_actor->draw_tag, fpcM_DrawPriority(i_actor));
|
|
}
|
|
|
|
inline void fopAcM_offDraw(fopAc_ac_c* i_actor) {
|
|
fopDwTg_DrawQTo(&i_actor->draw_tag);
|
|
}
|
|
|
|
inline int fopAcM_monsSeStart(const fopAc_ac_c* i_actor, u32 i_soundId, u32 param_2) {
|
|
return mDoAud_monsSeStart(i_soundId, &i_actor->eyePos, fopAcM_GetID(i_actor), param_2,
|
|
dComIfGp_getReverb(fopAcM_GetRoomNo(i_actor)));
|
|
}
|
|
|
|
void fopAcM_initManager();
|
|
|
|
fopAc_ac_c* fopAcM_FastCreate(s16 i_procName, FastCreateReqFunc i_createFunc, void* i_createData,
|
|
void* i_append);
|
|
|
|
void fopAcM_setStageLayer(void* i_proc);
|
|
|
|
void fopAcM_setRoomLayer(void* i_proc, int i_roomNo);
|
|
|
|
s32 fopAcM_SearchByID(fpc_ProcID i_actorID, fopAc_ac_c** i_outActor);
|
|
|
|
s32 fopAcM_SearchByName(s16 i_procName, fopAc_ac_c** i_outActor);
|
|
|
|
fopAcM_prm_class* fopAcM_CreateAppend();
|
|
|
|
fopAcM_prm_class* createAppend(u16 i_setId, u32 i_parameters, const cXyz* i_pos, int i_roomNo,
|
|
const csXyz* i_angle, const cXyz* i_scale, s8 i_argument,
|
|
fpc_ProcID i_parentId);
|
|
|
|
void fopAcM_Log(fopAc_ac_c const* i_actor, char const* i_message);
|
|
|
|
s32 fopAcM_delete(fopAc_ac_c* i_actor);
|
|
|
|
s32 fopAcM_delete(fpc_ProcID i_actorID);
|
|
|
|
fpc_ProcID fopAcM_create(s16 i_procName, u16 i_setId, u32 i_parameters, const cXyz* i_pos,
|
|
int i_roomNo, const csXyz* i_angle, const cXyz* i_scale, s8 i_argument,
|
|
createFunc i_createFunc);
|
|
|
|
fpc_ProcID fopAcM_create(s16 i_procName, u32 i_parameters, const cXyz* i_pos, int i_roomNo,
|
|
const csXyz* i_angle, const cXyz* i_scale, s8 i_argument);
|
|
|
|
inline fpc_ProcID fopAcM_create(s16 i_procName, createFunc i_createFunc, void* params) {
|
|
return fpcM_Create(i_procName, i_createFunc, params);
|
|
}
|
|
|
|
inline fpc_ProcID fopAcM_Create(s16 i_procName, createFunc i_createFunc, void* params) {
|
|
return fpcM_Create(i_procName, i_createFunc,params);
|
|
}
|
|
|
|
fopAc_ac_c* fopAcM_fastCreate(s16 i_procName, u32 i_parameters, const cXyz* i_pos, int i_roomNo,
|
|
const csXyz* i_angle, const cXyz* i_scale, s8 i_argument,
|
|
createFunc i_createFunc, void* i_createFuncData);
|
|
|
|
fopAc_ac_c* fopAcM_fastCreate(const char* i_actorname, u32 i_parameters, const cXyz* i_pos,
|
|
int i_roomNo, const csXyz* i_angle, const cXyz* i_scale,
|
|
createFunc i_createFunc, void* i_createFuncData);
|
|
|
|
fpc_ProcID fopAcM_createChild(s16 i_procName, fpc_ProcID i_parentID, u32 i_parameters,
|
|
const cXyz* i_pos, int i_roomNo, const csXyz* i_angle,
|
|
const cXyz* i_scale, s8 i_argument, createFunc i_createFunc);
|
|
|
|
fpc_ProcID fopAcM_createChildFromOffset(s16 i_procName, fpc_ProcID i_parentID, u32 i_parameters,
|
|
const cXyz* i_pos, int i_roomNo, const csXyz* i_angle,
|
|
const cXyz* i_scale, s8 i_argument, createFunc i_createFunc);
|
|
|
|
void fopAcM_DeleteHeap(fopAc_ac_c* i_actor);
|
|
|
|
s32 fopAcM_callCallback(fopAc_ac_c* i_actor, heapCallbackFunc i_heapCallback, JKRHeap* i_heap);
|
|
|
|
bool fopAcM_entrySolidHeap_(fopAc_ac_c* i_actor, heapCallbackFunc i_heapCallback, u32 i_size);
|
|
|
|
bool fopAcM_entrySolidHeap(fopAc_ac_c* i_actor, heapCallbackFunc i_heapCallback, u32 i_size);
|
|
|
|
void fopAcM_SetMin(fopAc_ac_c* i_actor, f32 minX, f32 minY, f32 minZ);
|
|
|
|
void fopAcM_SetMax(fopAc_ac_c* i_actor, f32 maxX, f32 maxY, f32 maxZ);
|
|
|
|
void fopAcM_setCullSizeBox(fopAc_ac_c* i_actor, f32 minX, f32 minY, f32 minZ, f32 maxX, f32 maxY,
|
|
f32 maxZ);
|
|
|
|
void fopAcM_setCullSizeSphere(fopAc_ac_c* i_actor, f32 minX, f32 minY, f32 minZ, f32 radius);
|
|
|
|
void fopAcM_setCullSizeBox2(fopAc_ac_c* i_actor, J3DModelData* i_modelData);
|
|
|
|
bool fopAcM_addAngleY(fopAc_ac_c* i_actor, s16 i_target, s16 i_step);
|
|
|
|
void fopAcM_calcSpeed(fopAc_ac_c* i_actor);
|
|
|
|
void fopAcM_posMove(fopAc_ac_c* i_actor, const cXyz* i_movePos);
|
|
|
|
void fopAcM_posMoveF(fopAc_ac_c* i_actor, const cXyz* i_movePos);
|
|
|
|
s16 fopAcM_searchActorAngleY(const fopAc_ac_c* i_actorA, const fopAc_ac_c* i_actorB);
|
|
|
|
s16 fopAcM_searchActorAngleX(const fopAc_ac_c* i_actorA, const fopAc_ac_c* i_actorB);
|
|
|
|
s32 fopAcM_seenActorAngleY(const fopAc_ac_c* i_actorA, const fopAc_ac_c* i_actorB);
|
|
|
|
f32 fopAcM_searchActorDistance(const fopAc_ac_c* i_actorA, const fopAc_ac_c* i_actorB);
|
|
|
|
f32 fopAcM_searchActorDistance2(const fopAc_ac_c* i_actorA, const fopAc_ac_c* i_actorB);
|
|
|
|
f32 fopAcM_searchActorDistanceXZ(const fopAc_ac_c* i_actorA, const fopAc_ac_c* i_actorB);
|
|
|
|
f32 fopAcM_searchActorDistanceXZ2(const fopAc_ac_c* i_actorA, const fopAc_ac_c* i_actorB);
|
|
|
|
BOOL fopAcM_rollPlayerCrash(fopAc_ac_c const* i_crashActor, f32 i_range, u32 i_flag, f32 i_max_y,
|
|
f32 i_min_y, BOOL param_5, f32 param_6);
|
|
bool fopAcM_checkCullingBox(f32[3][4], f32, f32, f32, f32, f32, f32);
|
|
s32 fopAcM_cullingCheck(const fopAc_ac_c* i_actor);
|
|
s32 fopAcM_orderTalkEvent(fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, u16 i_priority, u16 i_flag);
|
|
s32 fopAcM_orderTalkItemBtnEvent(u16 i_eventType, fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB,
|
|
u16 i_priority, u16 i_flag);
|
|
s32 fopAcM_orderSpeakEvent(fopAc_ac_c* i_actor, u16 i_priority, u16 i_flag);
|
|
s32 fopAcM_orderDoorEvent(fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, u16 i_priority, u16 i_flag);
|
|
s32 fopAcM_orderCatchEvent(fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, u16 i_priority, u16 i_flag);
|
|
s32 fopAcM_orderOtherEvent(fopAc_ac_c* i_actor, char const* i_eventName, u16 param_2, u16 i_flag,
|
|
u16 i_priority);
|
|
s32 fopAcM_orderOtherEvent(fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, char const* i_eventName,
|
|
u16 param_3, u16 i_flag, u16 i_priority);
|
|
s32 fopAcM_orderChangeEventId(fopAc_ac_c* i_actor, s16 i_eventID, u16 i_flag, u16 param_3);
|
|
s32 fopAcM_orderOtherEventId(fopAc_ac_c* i_actor, s16 i_eventID, u8 i_mapToolID, u16 param_3,
|
|
u16 i_priority, u16 i_flag);
|
|
s32 fopAcM_orderMapToolEvent(fopAc_ac_c* i_actor, u8 param_1, s16 i_eventID, u16 param_3,
|
|
u16 i_flag, u16 param_5);
|
|
s32 fopAcM_orderMapToolAutoNextEvent(fopAc_ac_c* i_actor, u8 param_1, s16 i_eventID, u16 param_3,
|
|
u16 i_flag, u16 param_5);
|
|
s32 fopAcM_orderPotentialEvent(fopAc_ac_c* i_actor, u16 i_flag, u16 param_2, u16 i_priority);
|
|
s32 fopAcM_orderItemEvent(fopAc_ac_c* i_actor, u16 i_priority, u16 i_flag);
|
|
s32 fopAcM_orderTreasureEvent(fopAc_ac_c* i_actorA, fopAc_ac_c* i_actorB, u16 i_priority,
|
|
u16 i_flag);
|
|
fopAc_ac_c* fopAcM_getTalkEventPartner(const fopAc_ac_c*);
|
|
fopAc_ac_c* fopAcM_getItemEventPartner(const fopAc_ac_c*);
|
|
fopAc_ac_c* fopAcM_getEventPartner(const fopAc_ac_c*);
|
|
|
|
fpc_ProcID fopAcM_createItemForPresentDemo(cXyz const* i_pos, int i_itemNo, u8 param_2,
|
|
int i_itemBitNo, int i_roomNo, csXyz const* i_angle,
|
|
cXyz const* i_scale);
|
|
|
|
fpc_ProcID fopAcM_createItemForTrBoxDemo(cXyz const* i_pos, int i_itemNo, int i_itemBitNo,
|
|
int i_roomNo, csXyz const* i_angle, cXyz const* i_scale);
|
|
|
|
u8 fopAcM_getItemNoFromTableNo(u8 i_tableNo);
|
|
|
|
fpc_ProcID fopAcM_createItemFromEnemyID(u8 i_enemyID, cXyz const* i_pos, int i_itemBitNo,
|
|
int i_roomNo, csXyz const* i_angle, cXyz const* i_scale,
|
|
f32* i_speedF, f32* i_speedY);
|
|
|
|
fpc_ProcID fopAcM_createItemFromTable(cXyz const* i_pos, int i_tableNo, int i_itemBitNo,
|
|
int i_roomNo, csXyz const* i_angle, int param_5,
|
|
cXyz const* i_scale, f32* i_speedF, f32* i_speedY,
|
|
bool i_createDirect);
|
|
|
|
fpc_ProcID fopAcM_createDemoItem(const cXyz* i_pos, int i_itemNo, int i_itemBitNo,
|
|
const csXyz* i_angle, int i_roomNo, const cXyz* scale, u8 param_7);
|
|
|
|
fpc_ProcID fopAcM_createItemForBoss(const cXyz* i_pos, int i_itemNo, int i_roomNo,
|
|
const csXyz* i_angle, const cXyz* i_scale, f32 i_speedF,
|
|
f32 i_speedY, int param_8);
|
|
|
|
fpc_ProcID fopAcM_createItemForMidBoss(const cXyz* i_pos, int i_itemNo, int i_roomNo,
|
|
const csXyz* i_angle, const cXyz* i_scale, int param_6,
|
|
int param_7);
|
|
|
|
fopAc_ac_c* fopAcM_createItemForDirectGet(const cXyz* i_pos, int i_itemNo, int i_roomNo,
|
|
const csXyz* i_angle, const cXyz* i_scale, f32 i_speedF,
|
|
f32 i_speedY);
|
|
|
|
fopAc_ac_c* fopAcM_createItemForSimpleDemo(const cXyz* i_pos, int i_itemNo, int i_roomNo,
|
|
const csXyz* i_angle, const cXyz* i_scale, f32 i_speedF,
|
|
f32 i_speedY);
|
|
|
|
fpc_ProcID fopAcM_createItem(const cXyz* i_pos, int i_itemNo, int i_itemBitNo, int i_roomNo,
|
|
const csXyz* i_angle, const cXyz* i_scale, int param_7);
|
|
|
|
fopAc_ac_c* fopAcM_fastCreateItem2(const cXyz* i_pos, int i_itemNo, int i_itemBitNo, int i_roomNo,
|
|
int param_5, const csXyz* i_angle, const cXyz* i_scale);
|
|
|
|
fopAc_ac_c* fopAcM_fastCreateItem(const cXyz* i_pos, int i_itemNo, int i_roomNo,
|
|
const csXyz* i_angle, const cXyz* i_scale, f32* i_speedF,
|
|
f32* i_speedY, int i_itemBitNo, int param_9,
|
|
createFunc i_createFunc);
|
|
|
|
fpc_ProcID fopAcM_createBokkuri(u16 i_setId, const cXyz* i_pos, int i_itemNo, int i_itemBit,
|
|
int i_roomNo, const cXyz* param_6, int i_itemType, int param_8);
|
|
fpc_ProcID fopAcM_createWarpHole(const cXyz* i_pos, const csXyz* i_angle, int i_roomNo, u8 param_4,
|
|
u8 param_5, u8 param_6);
|
|
|
|
fopAc_ac_c* fopAcM_myRoomSearchEnemy(s8 roomNo);
|
|
|
|
fpc_ProcID fopAcM_createDisappear(const fopAc_ac_c* i_actor, const cXyz* i_pos, u8 i_size,
|
|
u8 i_type, u8 i_enemyID);
|
|
void fopAcM_setCarryNow(fopAc_ac_c* i_actor, int);
|
|
void fopAcM_cancelCarryNow(fopAc_ac_c* i_actor);
|
|
BOOL fopAcM_otoCheck(const fopAc_ac_c* i_actor, f32);
|
|
BOOL fopAcM_otherBgCheck(const fopAc_ac_c*, const fopAc_ac_c*);
|
|
BOOL fopAcM_wayBgCheck(const fopAc_ac_c*, f32, f32);
|
|
BOOL fopAcM_plAngleCheck(const fopAc_ac_c* i_actor, s16 i_angle);
|
|
void fopAcM_effSmokeSet1(u32*, u32*, const cXyz*, const csXyz*, f32, const dKy_tevstr_c*, int);
|
|
void fopAcM_effHamonSet(u32*, const cXyz*, f32, f32);
|
|
s32 fopAcM_riverStream(cXyz*, s16*, f32*, f32);
|
|
s32 fopAcM_carryOffRevise(fopAc_ac_c*);
|
|
void fopAcM_setEffectMtx(const fopAc_ac_c*, const J3DModelData*);
|
|
|
|
const char* fopAcM_getProcNameString(const fopAc_ac_c* i_actor);
|
|
|
|
static const fopAc_ac_c* fopAcM_findObjectCB(fopAc_ac_c const* i_actor, void* i_data);
|
|
|
|
fopAc_ac_c* fopAcM_searchFromName(char const* name, u32 param0, u32 param1);
|
|
|
|
fopAc_ac_c* fopAcM_findObject4EventCB(fopAc_ac_c* i_actor, void* i_data);
|
|
|
|
fopAc_ac_c* fopAcM_searchFromName4Event(char const* i_name, s16 i_eventID);
|
|
|
|
s32 fopAcM_getWaterY(const cXyz*, f32* o_waterY);
|
|
void fpoAcM_relativePos(fopAc_ac_c const* i_actor, cXyz const* i_pos, cXyz* o_pos);
|
|
s32 fopAcM_getWaterStream(const cXyz*, const cBgS_PolyInfo&, cXyz*, int*, int);
|
|
s16 fopAcM_getPolygonAngle(const cBgS_PolyInfo&, s16);
|
|
s16 fopAcM_getPolygonAngle(cM3dGPla const* param_0, s16 param_1);
|
|
|
|
void fopAcM_DrawCullingBox(const fopAc_ac_c*, const GXColor&);
|
|
|
|
inline void make_prm_warp_hole(u32* o_params, u8 prm1, u8 prm2, u8 prm3) {
|
|
u32 pprm1 = (prm3 << 0x8);
|
|
u32 pprm2 = (prm2 << 0x10);
|
|
u32 pprm3 = (prm1 << 0x1B) | 0x170000FF;
|
|
*o_params = pprm2 | pprm3 | pprm1;
|
|
}
|
|
|
|
inline fopAc_ac_c* dComIfGp_getPlayer(int);
|
|
|
|
inline s16 fopAcM_searchPlayerAngleY(const fopAc_ac_c* actor) {
|
|
return fopAcM_searchActorAngleY(actor, dComIfGp_getPlayer(0));
|
|
}
|
|
|
|
inline s16 fopAcM_searchPlayerAngleX(const fopAc_ac_c* actor) {
|
|
return fopAcM_searchActorAngleX(actor, dComIfGp_getPlayer(0));
|
|
}
|
|
|
|
inline f32 fopAcM_searchPlayerDistanceY(const fopAc_ac_c* actor) {
|
|
return fopAcM_searchActorDistanceY(actor, dComIfGp_getPlayer(0));
|
|
}
|
|
|
|
inline f32 fopAcM_searchPlayerDistanceXZ2(const fopAc_ac_c* actor) {
|
|
return fopAcM_searchActorDistanceXZ2(actor, dComIfGp_getPlayer(0));
|
|
}
|
|
|
|
inline f32 fopAcM_searchPlayerDistanceXZ(const fopAc_ac_c* actor) {
|
|
return fopAcM_searchActorDistanceXZ(actor, dComIfGp_getPlayer(0));
|
|
}
|
|
|
|
inline f32 fopAcM_searchPlayerDistance(const fopAc_ac_c* actor) {
|
|
return fopAcM_searchActorDistance(actor, dComIfGp_getPlayer(0));
|
|
}
|
|
|
|
inline s32 fopAcM_seenPlayerAngleY(const fopAc_ac_c* i_actor) {
|
|
return fopAcM_seenActorAngleY(i_actor, dComIfGp_getPlayer(0));
|
|
}
|
|
|
|
inline s16 fopAcM_toActorShapeAngleY(const fopAc_ac_c* i_actorA, const fopAc_ac_c* i_actorB) {
|
|
return i_actorA->shape_angle.y - i_actorB->shape_angle.y;
|
|
}
|
|
|
|
inline s16 fopAcM_toPlayerShapeAngleY(const fopAc_ac_c* i_actor) {
|
|
return fopAcM_toActorShapeAngleY(i_actor, dComIfGp_getPlayer(0));
|
|
}
|
|
|
|
s8 dComIfGp_getReverb(int roomNo);
|
|
|
|
inline void fopAcM_seStartCurrent(const fopAc_ac_c* actor, u32 sfxID, u32 param_2) {
|
|
mDoAud_seStart(sfxID, &actor->current.pos, param_2,
|
|
dComIfGp_getReverb(fopAcM_GetRoomNo(actor)));
|
|
}
|
|
|
|
inline void fopAcM_seStart(const fopAc_ac_c* actor, u32 sfxID, u32 param_2) {
|
|
mDoAud_seStart(sfxID, &actor->eyePos, param_2, dComIfGp_getReverb(fopAcM_GetRoomNo(actor)));
|
|
}
|
|
|
|
inline void fopAcM_seStartLevel(const fopAc_ac_c* actor, u32 sfxID, u32 param_2) {
|
|
mDoAud_seStartLevel(sfxID, &actor->eyePos, param_2,
|
|
dComIfGp_getReverb(fopAcM_GetRoomNo(actor)));
|
|
}
|
|
|
|
inline void fopAcM_seStartCurrentLevel(const fopAc_ac_c* actor, u32 sfxID, u32 param_2) {
|
|
mDoAud_seStartLevel(sfxID, &actor->current.pos, param_2,
|
|
dComIfGp_getReverb(fopAcM_GetRoomNo(actor)));
|
|
}
|
|
|
|
inline void fopAcM_offActor(fopAc_ac_c* i_actor, u32 flag) {
|
|
dComIfGs_offActor(flag, fopAcM_GetHomeRoomNo(i_actor));
|
|
}
|
|
|
|
inline void fopAcM_OnCarryType(fopAc_ac_c* i_actor, fopAcM_CARRY param_2) {
|
|
i_actor->carryType |= (u8) param_2;
|
|
}
|
|
|
|
inline void fopAcM_OffCarryType(fopAc_ac_c* i_actor, fopAcM_CARRY param_2) {
|
|
i_actor->carryType &= ~param_2;
|
|
}
|
|
|
|
enum fopAcM_FOOD {
|
|
fopAcM_FOOD_0,
|
|
fopAcM_FOOD_1,
|
|
fopAcM_FOOD_2,
|
|
fopAcM_FOOD_3,
|
|
fopAcM_FOOD_4,
|
|
fopAcM_FOOD_5,
|
|
};
|
|
|
|
inline void fopAcM_SetFoodStatus(fopAc_ac_c* actor, fopAcM_FOOD status) {
|
|
actor->field_0x567 = status;
|
|
}
|
|
|
|
inline bool fopAcM_CheckFoodStatus(const fopAc_ac_c* actor, fopAcM_FOOD status) {
|
|
return actor->field_0x567 == status;
|
|
}
|
|
|
|
inline void fopAcM_effSmokeSet2(u32* param_0, u32* param_1, cXyz const* param_2,
|
|
csXyz const* param_3, f32 param_4, dKy_tevstr_c const* param_5) {
|
|
fopAcM_effSmokeSet1(param_0, param_1, param_2, param_3, param_4, param_5, 0);
|
|
}
|
|
|
|
inline void fopAcM_setWarningMessage_f(const fopAc_ac_c* i_actor, const char* i_filename,
|
|
int i_line, const char* i_msg, ...) {
|
|
#if DEBUG
|
|
/* va_list args;
|
|
va_start(args, i_msg);
|
|
|
|
char buf[64];
|
|
snprintf(buf, sizeof(buf), "<%s> %s", dStage_getName(fopAcM_GetProfName(i_actor),
|
|
i_actor->argument), i_msg); setWarningMessage_f_va(JUTAssertion::getSDevice(), i_filename,
|
|
i_line, buf, args);
|
|
|
|
va_end(args); */
|
|
#endif
|
|
}
|
|
|
|
void fopAcM_showAssert_f(const fopAc_ac_c*, const char*, int, const char*, ...);
|
|
|
|
#define fopAcM_assert(line, actor, COND, msg) \
|
|
(COND) ? (void)0 : (fopAcM_showAssert_f(actor, __FILE__, line, msg));
|
|
|
|
#if DEBUG
|
|
#define fopAcM_setWarningMessage(i_actor, i_filename, i_line, i_msg) \
|
|
fopAcM_setWarningMessage_f(i_actor, i_filename, i_line, i_msg)
|
|
#else
|
|
#define fopAcM_setWarningMessage(...)
|
|
#endif
|
|
|
|
void fopAcM_getNameString(const fopAc_ac_c*, char*);
|
|
|
|
class fopAcM_lc_c {
|
|
public:
|
|
fopAcM_lc_c() { mLineCheck.ClrSttsRoofOff(); }
|
|
|
|
static dBgS_ObjLinChk* getLineCheck() { return &mLineCheck; }
|
|
static bool checkMoveBG() { return dComIfG_Bgsp().ChkMoveBG(mLineCheck); }
|
|
static cXyz* getCrossP() { return mLineCheck.GetCrossP(); }
|
|
static cXyz& getCross() { return mLineCheck.GetCross(); }
|
|
static bool lineCheck(const cXyz*, const cXyz*, const fopAc_ac_c*);
|
|
static bool getTriPla(cM3dGPla* o_tri) { return dComIfG_Bgsp().GetTriPla(mLineCheck, o_tri); }
|
|
static s32 getWallCode() { return dComIfG_Bgsp().GetWallCode(mLineCheck); }
|
|
static bool checkWallHit() {
|
|
cM3dGPla poly;
|
|
getTriPla(&poly);
|
|
return cBgW_CheckBWall(poly.mNormal.y);
|
|
}
|
|
static bool checkGroundHit() {
|
|
cM3dGPla poly;
|
|
getTriPla(&poly);
|
|
return cBgW_CheckBGround(poly.mNormal.y);
|
|
}
|
|
|
|
static dBgS_ObjLinChk mLineCheck;
|
|
};
|
|
|
|
class dBgS_RoofChk;
|
|
class fopAcM_rc_c {
|
|
public:
|
|
static dBgS_ObjRoofChk* getRoofCheck() { return &mRoofCheck; }
|
|
static f32 getRoofY() { return mRoofY; }
|
|
static bool roofCheck(const cXyz*);
|
|
|
|
static dBgS_ObjRoofChk mRoofCheck;
|
|
static f32 mRoofY;
|
|
};
|
|
|
|
class dBgS_GndChk;
|
|
class fopAcM_gc_c {
|
|
public:
|
|
static bool gndCheck(const cXyz*);
|
|
static dBgS_ObjGndChk mGndCheck;
|
|
static f32 mGroundY;
|
|
|
|
static bool getTriPla(cM3dGPla* i_plane) {
|
|
return dComIfG_Bgsp().GetTriPla(mGndCheck, i_plane);
|
|
}
|
|
|
|
static s16 getGroundAngleDirection(s16 param_0) {
|
|
cM3dGPla spC;
|
|
getTriPla(&spC);
|
|
return fopAcM_getPolygonAngle(&spC, param_0);
|
|
}
|
|
|
|
static int getRoomId() { return dComIfG_Bgsp().GetRoomId(mGndCheck); }
|
|
static int getPolyColor() { return dComIfG_Bgsp().GetPolyColor(mGndCheck); }
|
|
static int getPolyAtt0() { return dComIfG_Bgsp().GetPolyAtt0(mGndCheck); }
|
|
static int getHorseNoEntry() { return dComIfG_Bgsp().GetHorseNoEntry(mGndCheck); }
|
|
static dBgS_ObjGndChk* getGroundCheck() { return &mGndCheck; }
|
|
static f32 getGroundY() { return mGroundY; }
|
|
};
|
|
|
|
class fopAcM_wt_c {
|
|
public:
|
|
static dBgS_WtrChk* getWaterCheck() { return &mWaterCheck; }
|
|
static f32 getWaterY() { return mWaterY; }
|
|
static int getPolyAtt0() { return dComIfG_Bgsp().GetPolyAtt0(mWaterCheck); }
|
|
|
|
static bool waterCheck(const cXyz*);
|
|
static dBgS_WtrChk mWaterCheck;
|
|
static f32 mWaterY;
|
|
};
|
|
|
|
#endif
|