mirror of
https://github.com/zeldaret/ss
synced 2026-09-09 19:51:39 -04:00
Updated CC collision (#80)
* c_cc_d soooo close * d_cc_shape_colliders -> d_cc_d * ported over changes from #43 * Oops, didnt save * use better collision functions in bombf * bombf fixes * bombf actorPostCreate matching * fix * small fix for cCcD_UnkAttr Set function * more cleanup(?) for c_cc_d * d_cc_mass_s OK * Initial d_cc_s setup * some easy funcs --------- Co-authored-by: robojumper <robojumper@gmail.com>
This commit is contained in:
+24
-2
@@ -2,18 +2,40 @@
|
||||
#define D_A_BOMBF_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/a/obj/d_a_obj_bomb.h"
|
||||
#include "d/col/c/c_bg_s_poly_info.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
#include "toBeSorted/time_area_mgr.h"
|
||||
|
||||
class dAcBombf_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcBombf_c() : mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dAcBombf_c() {}
|
||||
virtual bool createHeap() override;
|
||||
virtual int create() override;
|
||||
virtual int actorExecute() override;
|
||||
virtual int draw() override;
|
||||
virtual int doDelete() override;
|
||||
|
||||
virtual int actorCreate() override;
|
||||
virtual int actorPostCreate() override;
|
||||
|
||||
STATE_FUNC_DECLARE(dAcBombf_c, Wait);
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcBombf_c);
|
||||
void regrowBomb();
|
||||
|
||||
/* 0x330 */ m3d::smdl_c mModel;
|
||||
/* 0x34C */ STATE_MGR_DECLARE(dAcBombf_c);
|
||||
/* 0x388 */ dAcRef_c<dAcBomb_c> mBombRef;
|
||||
/* 0x394 */ UNKWORD field_0x394;
|
||||
/* 0x398 */ cBgS_PolyInfo field_0x398;
|
||||
/* 0x3C4 */ TimeAreaStruct mTimeAreaStruct;
|
||||
/* 0x3D0 */ bool field_0x3D0;
|
||||
/* 0x3D1 */ u8 mDespawnSceneFlag;
|
||||
/* 0x3D2 */ u8 field_0x3D2;
|
||||
/* 0x3D3 */ u8 field_0x3D3;
|
||||
/* 0x3D4 */ u8 field_0x3D4;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -223,6 +223,7 @@ public:
|
||||
/* 0x35C */ u32 mForceOrPreventActionFlags;
|
||||
/* 0x360 */ UNKWORD field_0x360;
|
||||
/* 0x364 */ u32 mActionFlags;
|
||||
/* 0x368 */ u32 mActionFlagsCont;
|
||||
|
||||
inline bool checkFlags0x340(u32 mask) const {
|
||||
return (someFlags_0x340 & mask) != 0;
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
#ifndef D_A_OBJ_ARROW_H
|
||||
#define D_A_OBJ_ARROW_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/c/c_bg_s_poly_info.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateID.hpp"
|
||||
#include "toBeSorted/effects_struct.h"
|
||||
|
||||
class dAcArrow_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcArrow_c() : mPolyInfo(), mStateMgr(*this, sStateID::null) {}
|
||||
virtual ~dAcArrow_c();
|
||||
|
||||
virtual bool createHeap() override;
|
||||
virtual int create() override;
|
||||
virtual int doDelete() override;
|
||||
virtual int actorExecute() override;
|
||||
virtual int draw() override;
|
||||
|
||||
STATE_FUNC_DECLARE(dAcArrow_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcArrow_c, Move);
|
||||
STATE_FUNC_DECLARE(dAcArrow_c, ActorStop);
|
||||
STATE_FUNC_DECLARE(dAcArrow_c, BgStop);
|
||||
STATE_FUNC_DECLARE(dAcArrow_c, Bound);
|
||||
|
||||
void hitCallback(cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB);
|
||||
|
||||
public:
|
||||
static cCcD_SrcGObj sCcSrcInf;
|
||||
static dCcD_SrcCps sCc1;
|
||||
static const dCcD_SrcSph sCc2;
|
||||
|
||||
/* 0x330 */ nw4r::g3d::ResFile mResFile;
|
||||
/* 0x334 */ m3d::smdl_c mModel;
|
||||
/* 0x350 */ dAcRef_c<dAcObjBase_c> mRef1;
|
||||
/* 0x35C */ dCcD_Cps mCcCps;
|
||||
/* 0x4CC */ dCcD_Sph mCcSph;
|
||||
/* 0x61C */ cBgS_PolyInfo mPolyInfo; // ??
|
||||
/* 0x648 */ EffectsStruct mEffects;
|
||||
/* 0x67C */ u32 field_0x67C;
|
||||
/* 0x680 */ u8 mSubType;
|
||||
/* 0x681 */ u8 field_0x681;
|
||||
/* 0x682 */ u8 mDespawnTimer;
|
||||
/* 0x684 */ s16 field_0x684;
|
||||
/* 0x686 */ u8 field_0x686[0x688 - 0x686];
|
||||
/* 0x688 */ u16 field_0x688;
|
||||
/* 0x68A */ u16 field_0x68A;
|
||||
/* 0x68C */ u8 field_0x68C[0x6A8 - 0x68C];
|
||||
/* 0x6A8 */ f32 field_0x6A8;
|
||||
/* 0x6AC */ u8 field_0x6AC[0x6F8 - 0x6AC];
|
||||
/* 0x6F8 */ dAcRef_c<dAcObjBase_c> mRef2;
|
||||
/* 0x704 */ STATE_MGR_DECLARE(dAcArrow_c);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -2,8 +2,8 @@
|
||||
#define D_A_OBJ_BASE_H
|
||||
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/c/c_m3d_g_aab.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "m/m3d/m_shadow.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_angle.h"
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "m/m_vec.h"
|
||||
#include "m/types_m.h"
|
||||
|
||||
|
||||
// Size: 0xA8
|
||||
struct ActorCarryStruct {
|
||||
/* 0x00 */ fLiNdBa_c actorLink;
|
||||
@@ -68,7 +69,7 @@ public:
|
||||
|
||||
/* 0x1B0 */ u8 unk_0x1B0[0x1C0 - 0x1B0];
|
||||
|
||||
/* 0x1C0 */ UnkCCDStruct mCCdStruct;
|
||||
/* 0x1C0 */ cCcD_Stts mStts;
|
||||
|
||||
/* 0x1FC */ mVec3_c mStartingPos;
|
||||
/* 0x208 */ mAng3_c mStartingRot;
|
||||
|
||||
@@ -1,20 +1,32 @@
|
||||
#ifndef D_A_BOMB_H
|
||||
#define D_A_BOMB_H
|
||||
#ifndef D_A_OBJ_BOMB_H
|
||||
#define D_A_OBJ_BOMB_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_s_acch.h"
|
||||
#include "d/col/bg/d_bg_s_lin_chk.h"
|
||||
#include "d/col/cc/d_cc_shape_colliders.h"
|
||||
#include "d/col/c/c_bg_s_poly_info.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "d/d_shadow.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
#include "s/s_StateID.hpp"
|
||||
#include "toBeSorted/effects_struct.h"
|
||||
|
||||
// This may need its own file and could be independent of a bomb
|
||||
class UnkBombColInfo : public cBgS_PolyInfo {
|
||||
public:
|
||||
UnkBombColInfo() : mField_0x10(0), mField_0x14(0), mField_0x18(0) {}
|
||||
u32 mField_0x10;
|
||||
u32 mField_0x14;
|
||||
u32 mField_0x18;
|
||||
};
|
||||
|
||||
class dAcBomb_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcBomb_c();
|
||||
dAcBomb_c() : mStateMgr(*this, sStateID::null), mSelfRef(this), mEffect1(this), mEffect2(this) {}
|
||||
virtual ~dAcBomb_c();
|
||||
|
||||
/* vt 0x08 */ virtual int create() override;
|
||||
@@ -32,19 +44,28 @@ public:
|
||||
STATE_FUNC_DECLARE(dAcBomb_c, Carry);
|
||||
STATE_FUNC_DECLARE(dAcBomb_c, WindCarry);
|
||||
|
||||
private:
|
||||
void setTransformFromFlower(const mMtx_c &);
|
||||
|
||||
public:
|
||||
/* 0x330 */ nw4r::g3d::ResFile mBrres;
|
||||
/* 0x334 */ m3d::smdl_c mMdl;
|
||||
/* 0x350 */ u8 _0[0x358 - 0x350];
|
||||
/* 0x350 */ dShadowCircle_c mShdw;
|
||||
/* 0x358 */ dBgS_BombAcch mAcch;
|
||||
/* 0x708 */ dBgS_AcchCir mAcchCir;
|
||||
/* 0x764 */ dCcD_Sph mCcDSph;
|
||||
/* 0x8B4 */ mMtx_c mMtx;
|
||||
/* 0x8E4 */ dBgS_BombLinChk mLinChk;
|
||||
/* 0x97C */ u8 _1[0x9D4 - 0x97C];
|
||||
/* 0x97C */ UnkBombColInfo mUnkInfo;
|
||||
/* 0x9B4 */ u8 _0[0x9B8 - 0x9B4];
|
||||
/* 0x9B8 */ dAcBomb_c *mSelfRef;
|
||||
/* 0x9BC */ u8 _1[0x9D4 - 0x9BC];
|
||||
/* 0x9D4 */ EffectsStruct mEffect1;
|
||||
/* 0xA08 */ EffectsStruct mEffect2;
|
||||
/* 0xA3C */ u8 _2[0xA9C - 0xA3C];
|
||||
/* 0xA3C */ u8 _2[0xA44 - 0xA3C];
|
||||
/* 0xA44 */ s16 mField_0xA44;
|
||||
/* 0xA46 */ u8 _3[0xA50 - 0xA46];
|
||||
/* 0xA50 */ f32 mField_0xA50;
|
||||
/* 0xA54 */ u8 _4[0xA9C - 0xA54];
|
||||
/* 0xA9C */ STATE_MGR_DECLARE(dAcBomb_c);
|
||||
};
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define D_A_O_SPIKE_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/cc/d_cc_shape_colliders.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
@@ -25,11 +25,11 @@ public:
|
||||
static const mVec3_c sVec2;
|
||||
|
||||
private:
|
||||
static dCcD_SrcAabb sCcSrc;
|
||||
static dCcD_SrcUnk sCcSrc;
|
||||
|
||||
nw4r::g3d::ResFile mResFile;
|
||||
m3d::smdl_c mMdl;
|
||||
dCcD_Aabb mCollision;
|
||||
dCcD_Unk mCollision;
|
||||
|
||||
STATE_MGR_DECLARE(dAcOspike_c);
|
||||
};
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/cc/d_cc_shape_colliders.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "nw4r/g3d/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/cc/d_cc_shape_colliders.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "m/m3d/m_anmtexsrt.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_angle.h"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define C_BG_S_POLY_INFO_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/c/c_bg_w.h"
|
||||
#include "d/col/c/c_m3d_g_pla.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
@@ -1,4 +1,916 @@
|
||||
#ifndef C_CC_D_H
|
||||
#define C_CC_D_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/col/c/c_m3d.h"
|
||||
#include "d/col/c/c_m3d_g_aab.h"
|
||||
#include "d/col/c/c_m3d_g_cps.h"
|
||||
#include "d/col/c/c_m3d_g_cyl.h"
|
||||
#include "d/col/c/c_m3d_g_sph.h"
|
||||
#include "d/col/c/c_m3d_g_tri.h"
|
||||
#include "d/col/c/c_m3d_g_unk.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/types_nw4r.h"
|
||||
|
||||
class dAcObjBase_c;
|
||||
|
||||
class cCcD_CpsAttr;
|
||||
class cCcD_TriAttr;
|
||||
class cCcD_UnkAttr;
|
||||
class cCcD_CylAttr;
|
||||
class cCcD_SphAttr;
|
||||
|
||||
class cCcD_DivideInfo {
|
||||
private:
|
||||
/* 0x00 */ u32 mXDivInfo;
|
||||
/* 0x04 */ u32 mYDivInfo;
|
||||
/* 0x08 */ u32 mZDivInfo;
|
||||
/* 0x0C vtable */
|
||||
public:
|
||||
cCcD_DivideInfo();
|
||||
virtual ~cCcD_DivideInfo();
|
||||
|
||||
// Following two funcs were probably inlined based on how other classes went
|
||||
void Set(u32 xDivInfo, u32 yDivInfo, u32 zDivInfo) {
|
||||
mXDivInfo = xDivInfo;
|
||||
mYDivInfo = yDivInfo;
|
||||
mZDivInfo = zDivInfo;
|
||||
}
|
||||
|
||||
bool Chk(cCcD_DivideInfo const &other) const {
|
||||
if ((mXDivInfo & other.mXDivInfo) && (mZDivInfo & other.mZDivInfo) && (mYDivInfo & other.mYDivInfo)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
class cCcD_DivideArea : public cM3dGAab {
|
||||
private:
|
||||
/* 0x18 */ bool mXDiffIsZero;
|
||||
/* 0x1C */ f32 mScaledXDiff;
|
||||
/* 0x20 */ f32 mInvScaledXDiff;
|
||||
/* 0x24 */ bool mYDiffIsZero;
|
||||
/* 0x28 */ f32 mScaledYDiff;
|
||||
/* 0x2C */ f32 mInvScaledYDiff;
|
||||
/* 0x30 */ bool mZDiffIsZero;
|
||||
/* 0x34 */ f32 mScaledZDiff;
|
||||
/* 0x38 */ f32 mInvScaledZDiff;
|
||||
/* 0x3C vtable */
|
||||
|
||||
public:
|
||||
cCcD_DivideArea();
|
||||
virtual ~cCcD_DivideArea();
|
||||
void SetArea(cM3dGAab const &);
|
||||
void CalcDivideInfo(cCcD_DivideInfo *, cM3dGAab const &);
|
||||
void CalcDivideInfoOverArea(cCcD_DivideInfo *, cM3dGAab const &);
|
||||
};
|
||||
|
||||
class cCcD_ShapeAttr {
|
||||
public:
|
||||
cM3dGAab mAab;
|
||||
cCcD_DivideInfo mInfo;
|
||||
enum ShapeType {
|
||||
SHAPE_SPHERE = 0,
|
||||
SHAPE_CYLINDER = 1,
|
||||
SHAPE_CAPSULE = 2,
|
||||
SHAPE_TRIANGLE = 3,
|
||||
SHAPE_DEFAULT = 4,
|
||||
};
|
||||
struct Shape {
|
||||
~Shape();
|
||||
|
||||
/* 0x00 */ int mField_0x00;
|
||||
/* 0x04 */ mVec3_c mField_0x04;
|
||||
/* 0x10 */ mVec3_c mField_0x10;
|
||||
/* 0x1C */ mVec3_c mField_0x1C;
|
||||
};
|
||||
cCcD_ShapeAttr();
|
||||
/* vt 0x08 */ virtual ~cCcD_ShapeAttr();
|
||||
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *);
|
||||
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *);
|
||||
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) = 0;
|
||||
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) = 0;
|
||||
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) = 0;
|
||||
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) = 0;
|
||||
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) = 0;
|
||||
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *);
|
||||
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) = 0;
|
||||
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) = 0;
|
||||
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) = 0;
|
||||
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) = 0;
|
||||
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) = 0;
|
||||
/* vt 0x40 */ virtual mVec3_c &GetCoP();
|
||||
/* vt 0x44 */ virtual void CalcAabBox() = 0;
|
||||
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const = 0;
|
||||
/* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const;
|
||||
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const = 0;
|
||||
/* vt 0x54 */ virtual bool GetPosBool(mVec3_c *) const;
|
||||
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) = 0;
|
||||
|
||||
cM3dGAab &GetWorkAab() {
|
||||
return mAab;
|
||||
}
|
||||
cM3dGAab const &GetWorkAab() const {
|
||||
return mAab;
|
||||
}
|
||||
|
||||
static mVec3_c sVirtualCenter;
|
||||
};
|
||||
|
||||
struct cCcD_SrcCpsAttr {
|
||||
f32 mRadius;
|
||||
};
|
||||
class cCcD_CpsAttr : public cCcD_ShapeAttr, public cM3dGCps {
|
||||
public:
|
||||
mVec3_c mVirtCenter;
|
||||
|
||||
cCcD_CpsAttr();
|
||||
void Set(const cCcD_SrcCpsAttr &src);
|
||||
void SetVirtCenter(mVec3_c *);
|
||||
|
||||
f32 CrossCoCommon(cCcD_ShapeAttr &, f32);
|
||||
|
||||
/* vt 0x08 */ virtual ~cCcD_CpsAttr();
|
||||
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override;
|
||||
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override;
|
||||
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override;
|
||||
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override;
|
||||
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override;
|
||||
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override;
|
||||
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override;
|
||||
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override;
|
||||
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override;
|
||||
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override;
|
||||
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override;
|
||||
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override;
|
||||
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override;
|
||||
/* vt 0x40 */ virtual mVec3_c &GetCoP() override;
|
||||
/* vt 0x44 */ virtual void CalcAabBox() override;
|
||||
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override;
|
||||
/* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override;
|
||||
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override;
|
||||
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) override;
|
||||
};
|
||||
|
||||
class cCcD_TriAttr : public cCcD_ShapeAttr, public cM3dGTri {
|
||||
public:
|
||||
cCcD_TriAttr();
|
||||
/* vt 0x08 */ virtual ~cCcD_TriAttr();
|
||||
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override;
|
||||
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override;
|
||||
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override;
|
||||
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override;
|
||||
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override;
|
||||
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override;
|
||||
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override;
|
||||
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override;
|
||||
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override;
|
||||
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override;
|
||||
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override;
|
||||
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override;
|
||||
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override;
|
||||
/* vt 0x44 */ virtual void CalcAabBox() override;
|
||||
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override;
|
||||
/* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override;
|
||||
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override;
|
||||
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) override;
|
||||
};
|
||||
|
||||
struct cCcD_SrcUnkAttr {
|
||||
f32 mMinX, mMinY, mMinZ;
|
||||
f32 mMaxX, mMaxY, mMaxZ;
|
||||
|
||||
mVec3_c &getMin() const {
|
||||
return *(mVec3_c *)&mMinX;
|
||||
}
|
||||
mVec3_c &getMax() const {
|
||||
return *(mVec3_c *)&mMaxX;
|
||||
}
|
||||
};
|
||||
|
||||
class cCcD_UnkAttr : public cCcD_ShapeAttr, public cM3dGUnk {
|
||||
public:
|
||||
cCcD_UnkAttr();
|
||||
|
||||
void Set(const cCcD_SrcUnkAttr &src);
|
||||
/* vt 0x08 */ virtual ~cCcD_UnkAttr();
|
||||
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override;
|
||||
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override;
|
||||
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override;
|
||||
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override;
|
||||
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override;
|
||||
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override;
|
||||
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override;
|
||||
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override;
|
||||
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override;
|
||||
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override;
|
||||
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override;
|
||||
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override;
|
||||
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override;
|
||||
/* vt 0x40 */ virtual mVec3_c &GetCoP() override;
|
||||
/* vt 0x44 */ virtual void CalcAabBox() override;
|
||||
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override;
|
||||
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override;
|
||||
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) override;
|
||||
};
|
||||
|
||||
struct cCcD_SrcCylAttr {
|
||||
f32 mRadius;
|
||||
f32 mHeight;
|
||||
};
|
||||
|
||||
class cCcD_CylAttr : public cCcD_ShapeAttr, public cM3dGCyl {
|
||||
public:
|
||||
cCcD_CylAttr();
|
||||
void Set(const cCcD_SrcCylAttr &);
|
||||
/* vt 0x08 */ virtual ~cCcD_CylAttr();
|
||||
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override;
|
||||
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override;
|
||||
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override;
|
||||
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override;
|
||||
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override;
|
||||
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override;
|
||||
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override;
|
||||
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override;
|
||||
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override;
|
||||
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override;
|
||||
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override;
|
||||
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override;
|
||||
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override;
|
||||
/* vt 0x40 */ virtual mVec3_c &GetCoP() override;
|
||||
/* vt 0x44 */ virtual void CalcAabBox() override;
|
||||
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override;
|
||||
/* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override;
|
||||
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override;
|
||||
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) override;
|
||||
};
|
||||
|
||||
struct cCcD_SrcSphAttr {
|
||||
f32 mRadius;
|
||||
};
|
||||
|
||||
class cCcD_SphAttr : public cCcD_ShapeAttr, public cM3dGSph {
|
||||
public:
|
||||
cCcD_SphAttr();
|
||||
void Set(const cCcD_SrcSphAttr &);
|
||||
/* vt 0x08 */ virtual ~cCcD_SphAttr();
|
||||
/* vt 0x0C */ virtual bool Calc(const mVec3_c &, const mVec3_c &, mVec3_c *) override;
|
||||
/* vt 0x10 */ virtual bool CrossAtTg(cCcD_ShapeAttr &, mVec3_c *) override;
|
||||
/* vt 0x14 */ virtual bool CrossAtTg(cCcD_CpsAttr &, mVec3_c *) override;
|
||||
/* vt 0x18 */ virtual bool CrossAtTg(cCcD_TriAttr &, mVec3_c *) override;
|
||||
/* vt 0x1C */ virtual bool CrossAtTg(cCcD_UnkAttr &, mVec3_c *) override;
|
||||
/* vt 0x20 */ virtual bool CrossAtTg(cCcD_CylAttr &, mVec3_c *) override;
|
||||
/* vt 0x24 */ virtual bool CrossAtTg(cCcD_SphAttr &, mVec3_c *) override;
|
||||
/* vt 0x28 */ virtual bool CrossCo(cCcD_ShapeAttr &, f32 *) override;
|
||||
/* vt 0x2C */ virtual bool CrossCo(cCcD_CpsAttr &, f32 *) override;
|
||||
/* vt 0x30 */ virtual bool CrossCo(cCcD_TriAttr &, f32 *) override;
|
||||
/* vt 0x34 */ virtual bool CrossCo(cCcD_UnkAttr &, f32 *) override;
|
||||
/* vt 0x38 */ virtual bool CrossCo(cCcD_CylAttr &, f32 *) override;
|
||||
/* vt 0x3C */ virtual bool CrossCo(cCcD_SphAttr &, f32 *) override;
|
||||
/* vt 0x40 */ virtual mVec3_c &GetCoP() override;
|
||||
/* vt 0x44 */ virtual void CalcAabBox() override;
|
||||
/* vt 0x48 */ virtual bool GetNVec(const mVec3_c &, mVec3_c *) const override;
|
||||
/* vt 0x4C */ virtual void GetShapeAccess(cCcD_ShapeAttr::Shape *) const override;
|
||||
/* vt 0x50 */ virtual void GetPos(nw4r::math::VEC3 *) const override;
|
||||
/* vt 0x54 */ virtual bool GetPosBool(mVec3_c *) const override;
|
||||
/* vt 0x58 */ virtual void TranslateXZ(f32, f32) override;
|
||||
};
|
||||
|
||||
// This has changed bit
|
||||
class cCcD_Stts {
|
||||
public:
|
||||
/* 0x00 */ int mAtApid;
|
||||
/* 0x04 */ int mAtOldApid;
|
||||
/* 0x08 */ int mTgApid;
|
||||
/* 0x0C */ int mTgOldApid;
|
||||
/* 0x10 */ mVec3_c mField_0x10;
|
||||
/* 0x1C */ mVec3_c mField_0x1C;
|
||||
/* 0x28 */ mVec3_c mCcMove;
|
||||
/* 0x34 */ dAcObjBase_c *mpActor;
|
||||
/* 0x38 */ int mRank;
|
||||
|
||||
cCcD_Stts(dAcObjBase_c *);
|
||||
void Move();
|
||||
int GetID() const;
|
||||
void PlusCcMove(f32, f32, f32);
|
||||
void ClrCcMove();
|
||||
int GetWeight(int) const; // idk what to really call it but it removes the rank table
|
||||
|
||||
void SetDefaultRank() {
|
||||
mRank = 0xD;
|
||||
}
|
||||
void SetRank(int rank) {
|
||||
mRank = rank;
|
||||
}
|
||||
dAcObjBase_c *GetAc() {
|
||||
return mpActor;
|
||||
}
|
||||
};
|
||||
|
||||
struct cCcD_SrcGObjTgInfo {
|
||||
/* 0x00 */ u16 mField_0x0;
|
||||
/* 0x02 */ u16 mField_0x2;
|
||||
};
|
||||
|
||||
struct cCcD_SrcGObjTg {
|
||||
/* 0x00 */ u32 mType;
|
||||
/* 0x04 */ u32 mSPrm;
|
||||
/* 0x08 */ cCcD_SrcGObjTgInfo mInfo;
|
||||
/* 0x0C */ u16 mField_0x0C;
|
||||
/* 0x0E */ u16 mField_0x0E;
|
||||
};
|
||||
|
||||
enum cCcD_AtModifiers_e {
|
||||
/* 0x 0000 0001 */ AT_MOD_FIRE = (1 << 0),
|
||||
/* 0x 0000 0002 */ AT_MOD_0x2 = (1 << 1),
|
||||
/* 0x 0000 0004 */ AT_MOD_ELECTRIC = (1 << 2),
|
||||
/* 0x 0000 0008 */ AT_MOD_WIND = (1 << 3),
|
||||
/* 0x 0000 0010 */ AT_MOD_0x10 = (1 << 4),
|
||||
/* 0x 0000 0020 */ AT_MOD_0x20 = (1 << 5),
|
||||
/* 0x 0000 0040 */ AT_MOD_WATER = (1 << 6),
|
||||
/* 0x 0000 0080 */ AT_MOD_0x80 = (1 << 7),
|
||||
/* 0x 0000 0100 */ AT_MOD_0x100 = (1 << 8),
|
||||
/* 0x 0000 0200 */ AT_MOD_STINKY = (1 << 9),
|
||||
/* 0x 0000 0400 */ AT_MOD_CURSED = (1 << 10),
|
||||
};
|
||||
struct cCcD_SrcGObjAtInfo {
|
||||
/* 0x00 */ u8 mField_0x0;
|
||||
/* 0x01 */ u8 mField_0x1;
|
||||
/* 0x02 */ u16 mModifier;
|
||||
};
|
||||
|
||||
enum cCcD_AtSPrm {
|
||||
AT_SPRM_DAMAGE = 0x4,
|
||||
};
|
||||
|
||||
struct cCcD_SrcGObjAt {
|
||||
/* 0x00 */ u32 mType;
|
||||
/* 0x04 */ u32 mSPrm;
|
||||
/* 0x08 */ cCcD_SrcGObjAtInfo mInfo;
|
||||
/* 0x0C */ u8 mDamage;
|
||||
/* 0x0D */ u8 mField_0xD;
|
||||
/* 0x0E */ u8 mField_0xE;
|
||||
/* 0x0F */ u8 mField_0xF;
|
||||
/* 0x10 */ u16 mField_0x10;
|
||||
/* 0x12 */ s16 mField_0x12;
|
||||
};
|
||||
|
||||
struct cCcD_SrcGObjCo {
|
||||
/* 0x00 */ u32 mSPrm;
|
||||
};
|
||||
|
||||
struct cCcD_SrcGObj {
|
||||
/* 0x00 */ cCcD_SrcGObjAt mObjAt;
|
||||
/* 0x14 */ cCcD_SrcGObjTg mObjTg;
|
||||
/* 0x1C */ cCcD_SrcGObjCo mObjCo;
|
||||
};
|
||||
|
||||
class dAcObjBase_c;
|
||||
class cCcD_Obj;
|
||||
|
||||
typedef bool (*cCcD_HitCallback)(
|
||||
dAcObjBase_c *i_actorA, cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB
|
||||
);
|
||||
typedef int (*cCcD_ShieldChkCallback)(
|
||||
dAcObjBase_c *i_actorA, cCcD_Obj *i_objInfA, dAcObjBase_c *i_actorB, cCcD_Obj *i_objInfB
|
||||
);
|
||||
|
||||
class cCcD_GAtTgCoCommonBase {
|
||||
public:
|
||||
cCcD_HitCallback mHit_cb;
|
||||
s8 mEffCounter;
|
||||
dAcRef_c<dAcObjBase_c> mAc;
|
||||
u32 mRPrm;
|
||||
|
||||
cCcD_GAtTgCoCommonBase();
|
||||
|
||||
virtual ~cCcD_GAtTgCoCommonBase();
|
||||
void dt() {
|
||||
mEffCounter = 0;
|
||||
ClrActorInfo();
|
||||
mHit_cb = nullptr;
|
||||
}
|
||||
void ClrActorInfo();
|
||||
void SetHitActor(dAcObjBase_c *);
|
||||
dAcObjBase_c *GetActor();
|
||||
void SubtractEffCounter();
|
||||
|
||||
bool ChkEffCounter() {
|
||||
return mEffCounter > 0;
|
||||
}
|
||||
void ClrEffCounter() {
|
||||
mEffCounter = 0;
|
||||
}
|
||||
void SetEffCounterTimer() {
|
||||
mEffCounter = 5;
|
||||
}
|
||||
|
||||
u32 MskRPrm(u32 m) const {
|
||||
return mRPrm & m;
|
||||
}
|
||||
void SetRPrm(u32 f) {
|
||||
mRPrm = f;
|
||||
}
|
||||
void OnRPrm(u32 m) {
|
||||
mRPrm |= m;
|
||||
}
|
||||
void OffRPrm(u32 m) {
|
||||
mRPrm = (mRPrm & ~m) | m;
|
||||
}
|
||||
};
|
||||
|
||||
class cCcD_ObjAt : public cCcD_GAtTgCoCommonBase {
|
||||
public:
|
||||
cCcD_ObjAt();
|
||||
virtual ~cCcD_ObjAt();
|
||||
void Set(const cCcD_SrcGObjAt &);
|
||||
void SetAtFlag(u32);
|
||||
void AdjustHitPos(f32, f32);
|
||||
|
||||
void SetVec(const mVec3_c &vec) {
|
||||
mVec = vec;
|
||||
}
|
||||
mVec3_c &GetVec() {
|
||||
return mVec;
|
||||
}
|
||||
|
||||
void SetHitPos(mVec3_c &pos) {
|
||||
mHitPos = pos;
|
||||
}
|
||||
mVec3_c &GetHitPos() {
|
||||
return mHitPos;
|
||||
}
|
||||
void ClrSet() {
|
||||
OffSPrm(1);
|
||||
}
|
||||
u32 ChkSet() {
|
||||
return MskSPrm(1);
|
||||
}
|
||||
|
||||
void SetCallback(cCcD_HitCallback cb) {
|
||||
mHit_cb = cb;
|
||||
}
|
||||
|
||||
u32 MskType(u32 mask) const {
|
||||
return mSrc.mType & mask;
|
||||
}
|
||||
void SetType(u32 flag) {
|
||||
mSrc.mType = flag;
|
||||
}
|
||||
void OnType(u32 m) {
|
||||
mSrc.mType |= m;
|
||||
}
|
||||
void OffType(u32 m) {
|
||||
mSrc.mType &= ~m;
|
||||
}
|
||||
u32 MskSPrm(u32 m) const {
|
||||
return mSrc.mSPrm & m;
|
||||
}
|
||||
void SetSPrm(u32 f) {
|
||||
mSrc.mSPrm = f;
|
||||
}
|
||||
void OnSPrm(u32 m) {
|
||||
mSrc.mSPrm |= m;
|
||||
}
|
||||
void OffSPrm(u32 m) {
|
||||
mSrc.mSPrm &= ~m;
|
||||
}
|
||||
u32 MskTgHitSPrm(u32 m) const {
|
||||
return mTgHitSrc.mSPrm & m;
|
||||
}
|
||||
void SetTgHitSPrm(u32 f) {
|
||||
mTgHitSrc.mSPrm = f;
|
||||
}
|
||||
void OnTgHitSPrm(u32 m) {
|
||||
mTgHitSrc.mSPrm |= m;
|
||||
}
|
||||
void OffTgHitSPrm(u32 m) {
|
||||
mTgHitSrc.mSPrm &= ~m;
|
||||
}
|
||||
|
||||
const cCcD_SrcGObjAt &GetSrc() const {
|
||||
return mSrc;
|
||||
}
|
||||
void SetTgHitSrc(const cCcD_SrcGObjTg &src) {
|
||||
mTgHitSrc = src;
|
||||
}
|
||||
const cCcD_SrcGObjTg &GetTgHitSrc() const {
|
||||
return mTgHitSrc;
|
||||
}
|
||||
|
||||
public:
|
||||
/* 0x1C */ cCcD_SrcGObjAt mSrc;
|
||||
/* 0x30 */ mVec3_c mHitPos;
|
||||
/* 0x3C */ mVec3_c mVec;
|
||||
/* 0x48 */ cCcD_SrcGObjTg mTgHitSrc;
|
||||
/* 0x58 */ cCcD_HitCallback mField_0x58;
|
||||
};
|
||||
|
||||
class cCcD_ObjTg : public cCcD_GAtTgCoCommonBase {
|
||||
public:
|
||||
cCcD_ObjTg();
|
||||
virtual ~cCcD_ObjTg();
|
||||
void Set(const cCcD_SrcGObjTg &);
|
||||
void AdjustHitPos(f32, f32);
|
||||
|
||||
void SetHitPos(mVec3_c &pos) {
|
||||
mHitPos = pos;
|
||||
}
|
||||
mVec3_c &GetHitPos() {
|
||||
return mHitPos;
|
||||
}
|
||||
|
||||
u32 GetAtHitType() const {
|
||||
return mAtHitSrc.mType;
|
||||
}
|
||||
|
||||
void SetFlag_0xA(u16 flag) {
|
||||
mSrc.mField_0x0E = flag;
|
||||
}
|
||||
|
||||
u16 GetFlag_0xA(u16 mask) const {
|
||||
return mSrc.mField_0x0E & mask;
|
||||
}
|
||||
void ClrSet() {
|
||||
OffSPrm(1);
|
||||
}
|
||||
u32 ChkSet() {
|
||||
return MskSPrm(1);
|
||||
}
|
||||
|
||||
void Set_0x4C(u32 f) {
|
||||
mField_0x4C = f;
|
||||
}
|
||||
|
||||
u32 MskType(u32 mask) const {
|
||||
return mSrc.mType & mask;
|
||||
}
|
||||
void SetType(u32 flag) {
|
||||
mSrc.mType = flag;
|
||||
}
|
||||
void OnType(u32 m) {
|
||||
mSrc.mType |= m;
|
||||
}
|
||||
void OffType(u32 m) {
|
||||
mSrc.mType &= ~m;
|
||||
}
|
||||
u32 MskSPrm(u32 m) const {
|
||||
return mSrc.mSPrm & m;
|
||||
}
|
||||
void SetSPrm(u32 f) {
|
||||
mSrc.mSPrm = f;
|
||||
}
|
||||
void OnSPrm(u32 m) {
|
||||
mSrc.mSPrm |= m;
|
||||
}
|
||||
void OffSPrm(u32 m) {
|
||||
mSrc.mSPrm &= ~m;
|
||||
}
|
||||
u32 MskAtHitSPrm(u32 m) const {
|
||||
return mAtHitSrc.mSPrm & m;
|
||||
}
|
||||
void SetAtHitSPrm(u32 f) {
|
||||
mAtHitSrc.mSPrm = f;
|
||||
}
|
||||
void OnAtHitSPrm(u32 m) {
|
||||
mAtHitSrc.mSPrm |= m;
|
||||
}
|
||||
void OffAtHitSPrm(u32 m) {
|
||||
mAtHitSrc.mSPrm &= ~m;
|
||||
}
|
||||
|
||||
const cCcD_SrcGObjTg &GetSrc() const {
|
||||
return mSrc;
|
||||
}
|
||||
void SetAtHitSrc(const cCcD_SrcGObjAt &src) {
|
||||
mAtHitSrc = src;
|
||||
}
|
||||
const cCcD_SrcGObjAt &GetAtHitSrc() const {
|
||||
return mAtHitSrc;
|
||||
}
|
||||
|
||||
void Set_0x4B(u8 val) {
|
||||
mField_0x4B = val;
|
||||
}
|
||||
|
||||
public:
|
||||
/* 0x1C */ cCcD_SrcGObjTg mSrc;
|
||||
/* 0x2C */ mVec3_c mField_0x2C;
|
||||
/* 0x38 */ mVec3_c mHitPos;
|
||||
/* 0x44 */ s16 *mShieldFrontRangeYAngle;
|
||||
/* 0x48 */ s16 mShieldRange;
|
||||
/* 0x4A */ u8 mField_0x4A;
|
||||
/* 0x4B */ u8 mField_0x4B;
|
||||
/* 0x4C */ u32 mField_0x4C;
|
||||
/* 0x50 */ u32 mField_0x50;
|
||||
/* 0x54 */ cCcD_ShieldChkCallback mField_0x54;
|
||||
/* 0x58 */ cCcD_SrcGObjAt mAtHitSrc;
|
||||
/* 0x6C */ mVec3_c mField_0x6C;
|
||||
/* 0x78 */ cCcD_HitCallback mField_0x78;
|
||||
};
|
||||
|
||||
class cCcD_ObjCo : public cCcD_GAtTgCoCommonBase {
|
||||
public:
|
||||
cCcD_ObjCo();
|
||||
virtual ~cCcD_ObjCo();
|
||||
void Set(const cCcD_SrcGObjCo &);
|
||||
void SetCoFlag(u32);
|
||||
void AdjustHitPos(f32, f32);
|
||||
|
||||
void ClrSet() {
|
||||
OffSPrm(1);
|
||||
}
|
||||
u32 ChkSet() {
|
||||
return MskSPrm(1);
|
||||
}
|
||||
u32 MskSPrm(u32 m) const {
|
||||
return mSrc.mSPrm & m;
|
||||
}
|
||||
void SetSPrm(u32 f) {
|
||||
mSrc.mSPrm = f;
|
||||
}
|
||||
void OnSPrm(u32 m) {
|
||||
mSrc.mSPrm |= m;
|
||||
}
|
||||
void OffSPrm(u32 m) {
|
||||
mSrc.mSPrm &= ~m;
|
||||
}
|
||||
|
||||
const cCcD_SrcGObjCo &GetSrc() const {
|
||||
return mSrc;
|
||||
}
|
||||
void SetCoHitSrc(const cCcD_SrcGObjCo &src) {
|
||||
mCoHitSrc = src;
|
||||
}
|
||||
|
||||
public:
|
||||
/* 0x1C */ cCcD_SrcGObjCo mSrc;
|
||||
/* 0x20 */ u32 mGrp;
|
||||
/* 0x24 */ cCcD_SrcGObjCo mCoHitSrc;
|
||||
/* 0x28 */ cCcD_HitCallback mField_0x28_callback;
|
||||
};
|
||||
|
||||
// Maybe ?
|
||||
class cCcD_ObjInf {
|
||||
public:
|
||||
/* 0x000 */ cCcD_ObjAt mObjAt;
|
||||
/* 0x05C */ cCcD_ObjTg mObjTg;
|
||||
/* 0x0D8 */ cCcD_ObjCo mObjCo;
|
||||
};
|
||||
|
||||
class cCcD_Obj {
|
||||
public:
|
||||
/* 0x000 */ cCcD_ObjAt mAt;
|
||||
/* 0x05C */ cCcD_ObjTg mTg;
|
||||
/* 0x0D8 */ cCcD_ObjCo mCo;
|
||||
/* 0x104 */ cCcD_Stts *mStts;
|
||||
/* 0x108 */ u32 mField_0x108;
|
||||
|
||||
public:
|
||||
cCcD_Obj();
|
||||
virtual ~cCcD_Obj();
|
||||
virtual cCcD_ShapeAttr *GetShapeAttr() = 0;
|
||||
virtual cCcD_ObjInf *GetGObjInfo();
|
||||
void ClrSet();
|
||||
void Set(const cCcD_SrcGObj &);
|
||||
void ClrAtHit();
|
||||
void ClrTgHit();
|
||||
void ClrCoHit();
|
||||
|
||||
const mVec3_c &GetAtHitPos() const;
|
||||
mVec3_c &GetAtHitPos();
|
||||
bool GetAtFlag0x2() const;
|
||||
bool GetAtFlag0x4() const;
|
||||
bool GetAtFlag0x8() const;
|
||||
|
||||
const mVec3_c &GetTgHitPos() const;
|
||||
mVec3_c &GetTgHitPos();
|
||||
bool GetTgFlag0x4() const;
|
||||
bool GetTgFlag0x8() const;
|
||||
|
||||
bool ChkAtClawshot() const;
|
||||
bool ChkAtClawshotDebug() const;
|
||||
bool ChkAtElectrified() const;
|
||||
bool ChkAtElectrifiedExtra() const;
|
||||
bool ChkAtWhippable() const;
|
||||
bool ChkAtBit24() const;
|
||||
bool ChkAtArrowStick() const;
|
||||
bool ChkAtWaterScaleBonk() const;
|
||||
bool ChkAtSwordBonk() const;
|
||||
dAcObjBase_c *GetAtActor();
|
||||
|
||||
bool ChkTgAtHitType(u32) const;
|
||||
u32 GetTg_0x58() const;
|
||||
bool ChkTgBit14() const;
|
||||
u8 GetTgDamage() const;
|
||||
u16 GetTgDamageFlags() const;
|
||||
bool ChkTgSkywardStrike() const;
|
||||
bool ChkTgBit17() const;
|
||||
bool ChkTgBit18() const;
|
||||
bool ChkTgBit19() const;
|
||||
bool ChkTgBit20() const;
|
||||
bool ChkTgBit23() const;
|
||||
bool ChkTgBit24() const;
|
||||
bool ChkTgBit25() const;
|
||||
u16 GetTgSoundID() const;
|
||||
s16 GetTg_0x6A() const;
|
||||
bool ChkTgBit8() const;
|
||||
u8 GetTg_0x4A() const;
|
||||
dAcObjBase_c *GetTgActor();
|
||||
const mVec3_c &GetTg_0x2C() const;
|
||||
|
||||
dAcObjBase_c *GetCoActor();
|
||||
bool ChkCoBit4() const;
|
||||
|
||||
void SetAtFlagsUpper(u32);
|
||||
bool ChkTgBit1() const;
|
||||
|
||||
void AdjustHitPos(f32, f32);
|
||||
|
||||
static bool fn_80328ad0(dAcObjBase_c *pObj, u32 attype);
|
||||
|
||||
// clang-format off
|
||||
cCcD_Stts* GetStts() {
|
||||
return mStts;
|
||||
}
|
||||
void SetStts(cCcD_Stts &stts) { mStts = &stts; }
|
||||
|
||||
void SetAtVec(const mVec3_c &vec) { mAt.SetVec(vec); }
|
||||
|
||||
|
||||
void OnTgCoFlag(u32 f) {
|
||||
mTg.OnSPrm(f);
|
||||
mCo.OnSPrm(f);
|
||||
}
|
||||
|
||||
void SetTgFlag(u32 flag) {
|
||||
mTg.SetType(flag);
|
||||
}
|
||||
void SetAtFlag(u32 flag) {
|
||||
mAt.SetSPrm(flag);
|
||||
}
|
||||
|
||||
void SetTgFlag_0xA(u16 flag) {
|
||||
mTg.SetFlag_0xA(flag);
|
||||
}
|
||||
|
||||
bool ChkTgHit() {
|
||||
return mTg.MskSPrm(1) != 0 && mTg.GetActor() != nullptr;
|
||||
}
|
||||
bool ChkAtHit() {
|
||||
return mAt.MskSPrm(1) != 0 && mAt.GetActor() != nullptr;
|
||||
}
|
||||
bool ChkCoHit() {
|
||||
return mCo.MskSPrm(1) != 0 && mCo.GetActor() != nullptr;
|
||||
}
|
||||
|
||||
dAcObjBase_c *GetAc() {
|
||||
if (mStts == nullptr) {
|
||||
return nullptr;
|
||||
} else {
|
||||
return mStts->mpActor;
|
||||
}
|
||||
}
|
||||
|
||||
void ClrCoSet() {
|
||||
mCo.ClrSet();
|
||||
}
|
||||
void ClrAtSet() {
|
||||
mAt.ClrSet();
|
||||
}
|
||||
void ClrTgSet() {
|
||||
mTg.ClrSet();
|
||||
}
|
||||
u32 ChkCoSet() {
|
||||
return mCo.ChkSet();
|
||||
}
|
||||
u32 ChkAtSet() {
|
||||
return mAt.ChkSet();
|
||||
}
|
||||
u32 ChkTgSet() {
|
||||
return mTg.ChkSet();
|
||||
}
|
||||
|
||||
|
||||
bool ChkAtEffCounter() { return mAt.ChkEffCounter(); }
|
||||
bool ChkTgEffCounter() { return mTg.ChkEffCounter(); }
|
||||
void ClrAtEffCounter() { mAt.ClrEffCounter(); }
|
||||
void ClrTgEffCounter() { mTg.ClrEffCounter(); }
|
||||
void ClrCoEffCounter() { mCo.ClrEffCounter(); }
|
||||
void SetAtEffCounterTimer() { mAt.SetEffCounterTimer(); }
|
||||
void SetTgEffCounterTimer() { mTg.SetEffCounterTimer(); }
|
||||
void SubtractAtEffCounter() { mAt.SubtractEffCounter(); }
|
||||
void SubtractTgEffCounter() { mTg.SubtractEffCounter(); }
|
||||
void SubtractCoEffCounter() { mCo.SubtractEffCounter(); }
|
||||
|
||||
void SetTg_0x4C(u32 f) {
|
||||
mTg.Set_0x4C(f);
|
||||
}
|
||||
|
||||
void SetAtCallback(cCcD_HitCallback cb) {
|
||||
mAt.SetCallback(cb);
|
||||
}
|
||||
|
||||
u32 ChkTgNoAtHitInfSet() const {
|
||||
return mTg.MskSPrm(0x40);
|
||||
}
|
||||
u32 ChkAtNoTgHitInfSet() const {
|
||||
return mAt.MskSPrm(0x40);
|
||||
}
|
||||
u32 ChkCoNoCoHitInfSet() const {
|
||||
return mCo.MskSPrm(0x800);
|
||||
}
|
||||
|
||||
// At
|
||||
|
||||
u32 ChkAtNoMass() const {
|
||||
return mAt.MskSPrm(0x400);
|
||||
}
|
||||
u32 GetAtGrp() const {
|
||||
return mAt.MskSPrm(0x3E);
|
||||
}
|
||||
u32 ChkAtNoConHit() const {
|
||||
return mAt.MskSPrm(0x80);
|
||||
}
|
||||
u32 ChkAtStopNoConHit() const {
|
||||
return mAt.MskSPrm(0x200);
|
||||
}
|
||||
u32 ChkAtNoGaurd() const {
|
||||
return mAt.MskSPrm(0x200000);
|
||||
}
|
||||
|
||||
// Tg
|
||||
|
||||
u32 GetTgGrp() const {
|
||||
return mTg.MskSPrm(0x3E);
|
||||
}
|
||||
u32 ChkTgNoConHit() const {
|
||||
return mTg.MskSPrm(0x100);
|
||||
}
|
||||
u32 ChkTgStopNoConHit() const {
|
||||
return mTg.MskSPrm(0x100000);
|
||||
}
|
||||
u32 ChkTgShieldFrontRange() const {
|
||||
return mTg.MskSPrm(0x400);
|
||||
}
|
||||
|
||||
void SetTg_0x4B(u8 val) {
|
||||
mTg.Set_0x4B(val);
|
||||
}
|
||||
|
||||
// Co
|
||||
|
||||
u32 ChkCoSet2() const {
|
||||
return mCo.MskSPrm(0x800);
|
||||
}
|
||||
u32 ChkCoNoCamHit() const {
|
||||
return mCo.MskSPrm(0x4000);
|
||||
}
|
||||
u32 ChkCoSameActorHit() const {
|
||||
return mCo.MskSPrm(0x1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* SET HIT
|
||||
*/
|
||||
|
||||
// Actor Objs
|
||||
void SetAtHit(cCcD_Obj *other) {
|
||||
mAt.SetHitActor(other->GetAc());
|
||||
}
|
||||
void SetTgHit(cCcD_Obj *other) {
|
||||
mTg.SetHitActor(other->GetAc());
|
||||
}
|
||||
void SetCoHit(cCcD_Obj *other) {
|
||||
mCo.SetHitActor(other->GetAc());
|
||||
}
|
||||
|
||||
// Hit Positions
|
||||
void SetAtHitPos(mVec3_c &pos) {
|
||||
mAt.SetHitPos(pos);
|
||||
}
|
||||
void SetTgHitPos(mVec3_c &pos) {
|
||||
mTg.SetHitPos(pos);
|
||||
}
|
||||
|
||||
/**
|
||||
* SET SOURCES
|
||||
*/
|
||||
|
||||
void SetAtTgHitSrc(cCcD_Obj *tg) {
|
||||
mAt.SetTgHitSrc(tg->mTg.GetSrc());
|
||||
}
|
||||
void SetTgAtHitSrc(cCcD_Obj *at) {
|
||||
mTg.SetAtHitSrc(at->mAt.GetSrc());
|
||||
}
|
||||
void SetCoCoHitSrc(cCcD_Obj *co) {
|
||||
mCo.SetCoHitSrc(co->mCo.GetSrc());
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+60
-46
@@ -1,7 +1,20 @@
|
||||
#ifndef C_CC_S_H
|
||||
#define C_CC_S_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
/**
|
||||
* This still seems to be exist, but looks like was heavily revised.
|
||||
* No more virtual functions
|
||||
* a couple more entry arrays (a Matrix one and a model one)
|
||||
*
|
||||
* This file is largely here to support future changes?
|
||||
* - dCcS copies and pastes the content. Otherwise the ctor is weird
|
||||
*/
|
||||
|
||||
enum WeightType {
|
||||
WeightType_0 = 0,
|
||||
@@ -9,52 +22,53 @@ enum WeightType {
|
||||
WeightType_2 = 2,
|
||||
};
|
||||
|
||||
// class cCcS {
|
||||
// public:
|
||||
// /* 0x0000 */ cCcD_Obj *mpObjAt[0x100];
|
||||
// /* 0x0400 */ cCcD_Obj *mpObjTg[0x300];
|
||||
// /* 0x1000 */ cCcD_Obj *mpObjCo[0x100];
|
||||
// /* 0x1400 */ cCcD_Obj *mpObj[0x500];
|
||||
// /* 0x2800 */ u16 mObjAtCount;
|
||||
// /* 0x2802 */ u16 mObjTgCount;
|
||||
// /* 0x2804 */ u16 mObjCoCount;
|
||||
// /* 0x2806 */ u16 mObjCount;
|
||||
// /* 0x2808 */ cCcD_DivideArea mDivideArea;
|
||||
// /* 0x2848 vtable */
|
||||
class cCcS {
|
||||
public:
|
||||
/* 0x0000 */ cCcD_Obj *mpObjAt[0x200];
|
||||
/* 0x0800 */ cCcD_Obj *mpObjTg[0x300];
|
||||
/* 0x1400 */ cCcD_Obj *mpObjCo[0x200];
|
||||
/* 0x1c00 */ cCcD_Obj *mpObj[0x340];
|
||||
/* 0x2900 */ UNKTYPE *mpUnk[0x100];
|
||||
/* 0x2D00 */ u16 mObjAtCount;
|
||||
/* 0x2d02 */ u16 mObjTgCount;
|
||||
/* 0x2D04 */ u16 mObjCoCount;
|
||||
/* 0x2D06 */ u16 mObjCount;
|
||||
/* 0x2D08 */ u32 mUnkCount;
|
||||
/* 0x2D0C */ cCcD_DivideArea mDivideArea;
|
||||
/* 0x2D4C */ bool mbAreaSet;
|
||||
/* 0x2D50 */ mMtx_c mAreas[16][2]; // could be a structure?
|
||||
/* 0x3350 */ int mAreaCount;
|
||||
|
||||
// /* 80264A6C */ cCcS();
|
||||
// /* 80264A94 */ void Ct();
|
||||
// /* 80264B60 */ void Dt();
|
||||
// /* 80264B80 */ WeightType GetWt(u8) const;
|
||||
// /* 80264BA8 */ void Set(cCcD_Obj *);
|
||||
// /* 80264C5C */ void ClrCoHitInf();
|
||||
// /* 80264CF0 */ void ClrTgHitInf();
|
||||
// /* 80264D90 */ void ClrAtHitInf();
|
||||
// /* 80264E2C */ bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *);
|
||||
// /* 80264F40 */ void ChkAtTg();
|
||||
// /* 8026515C */ bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *);
|
||||
// /* 80265230 */ void ChkCo();
|
||||
// /* 802653A0 vt[2] */ virtual void CalcTgPlusDmg(cCcD_Obj *, cCcD_Obj *, cCcD_Stts *, cCcD_Stts *);
|
||||
// /* 802653C8 */ void SetAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *, cXyz *);
|
||||
// /* 802655E4 */ void SetCoCommonHitInf(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
|
||||
// /* 80265750 vt[3]*/ virtual void SetPosCorrect(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
|
||||
// /* 80265BB4 */ void CalcArea();
|
||||
// /* 80265CCC */ void Move();
|
||||
// /* 80265D30 */ void DrawClear();
|
||||
// /* 80265DF8 vt[4] */ virtual void
|
||||
// SetCoGObjInf(bool, bool, cCcD_GObjInf *, cCcD_GObjInf *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts *);
|
||||
// /* 80265DFC vt[5] */ virtual void
|
||||
// SetAtTgGObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, cCcD_GObjInf *, cCcD_GObjInf *, cCcD_Stts *, cCcD_Stts *,
|
||||
// cCcD_GStts *, cCcD_GStts *, cXyz *);
|
||||
// /* 80265E00 vt[6] */ virtual bool
|
||||
// ChkNoHitGAtTg(cCcD_GObjInf const *, cCcD_GObjInf const *, cCcD_GStts *, cCcD_GStts *);
|
||||
// /* 80265E08 vt[7] */ virtual bool
|
||||
// ChkAtTgHitAfterCross(bool, bool, cCcD_GObjInf const *, cCcD_GObjInf const *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *,
|
||||
// cCcD_GStts *);
|
||||
// /* 80265E10 vt[8] */ virtual bool ChkNoHitGCo(cCcD_Obj *, cCcD_Obj *);
|
||||
// /* 80030BDC vt[9] */ virtual ~cCcS() {}
|
||||
// /* 80265E18 vt[10] */ virtual void MoveAfterCheck();
|
||||
// /* 80265DF4 vt[11] */ virtual void SetCoGCorrectProc(cCcD_Obj *, cCcD_Obj *);
|
||||
// }; // Size = 0x284C
|
||||
cCcS() {}
|
||||
|
||||
void Ct();
|
||||
void Dt();
|
||||
|
||||
void Set(cCcD_Obj *);
|
||||
|
||||
void ChkCo(mVec3_c *, dAcObjBase_c *);
|
||||
bool fn_80357c90(mVec3_c *, mVec3_c *, u32, UNKTYPE *);
|
||||
|
||||
// WeightType GetWt(u8) const;
|
||||
// void ClrCoHitInf();
|
||||
// void ClrTgHitInf();
|
||||
// void ClrAtHitInf();
|
||||
// bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *);
|
||||
// void ChkAtTg();
|
||||
// bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *);
|
||||
// void CalcTgPlusDmg(cCcD_Obj *, cCcD_Obj *, cCcD_Stts *, cCcD_Stts *);
|
||||
// void SetAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *, cXyz *);
|
||||
// void SetCoCommonHitInf(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
|
||||
// void SetPosCorrect(cCcD_Obj *, cXyz *, cCcD_Obj *, cXyz *, f32);
|
||||
// void CalcArea();
|
||||
// void Move();
|
||||
// void DrawClear();
|
||||
// void SetCoGObjInf(bool, bool, cCcD_ObjInf *, cCcD_ObjInf *, cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts
|
||||
// *); void SetAtTgGObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, cCcD_ObjInf *, cCcD_ObjInf *, cCcD_Stts *,
|
||||
// cCcD_Stts *, cCcD_GStts *, cCcD_GStts *, cXyz *); bool ChkNoHitGAtTg(cCcD_ObjInf const *, cCcD_ObjInf const *,
|
||||
// cCcD_GStts *, cCcD_GStts *); bool ChkAtTgHitAfterCross(bool, bool, cCcD_ObjInf const *, cCcD_ObjInf const *,
|
||||
// cCcD_Stts *, cCcD_Stts *, cCcD_GStts *, cCcD_GStts *); bool ChkNoHitGCo(cCcD_Obj *, cCcD_Obj *); ~cCcS() {} void
|
||||
// MoveAfterCheck(); void SetCoGCorrectProc(cCcD_Obj *, cCcD_Obj *);
|
||||
};
|
||||
|
||||
#endif /* C_CC_S_H */
|
||||
|
||||
+48
-42
@@ -3,7 +3,8 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "math.h"
|
||||
#include "nw4r/math.h"
|
||||
#include "nw4r/math.h" // IWYU pragma: export
|
||||
#include "nw4r/types_nw4r.h"
|
||||
|
||||
class cM3dGAab;
|
||||
class cM3dGCps;
|
||||
@@ -19,64 +20,69 @@ struct cM3d_Range;
|
||||
extern const f32 G_CM3D_F_ABS_MIN;
|
||||
|
||||
bool cM3d_Len2dSqPntAndSegLine(f32, f32, f32, f32, f32, f32, f32 *, f32 *, f32 *);
|
||||
bool cM3d_Len3dSqPntAndSegLine(const cM3dGLin *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, f32 *, f32 *);
|
||||
f32 cM3d_SignedLenPlaAndPos(const cM3dGPla *, const nw4r::math::VEC3 *);
|
||||
bool cM3d_Len3dSqPntAndSegLine(const cM3dGLin &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *, f32 *, f32 *);
|
||||
f32 cM3d_SignedLenPlaAndPos(const cM3dGPla &, const nw4r::math::VEC3 *);
|
||||
void cM3d_CalcPla(const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, f32 *);
|
||||
int cM3d_Check_LinLin(const cM3dGLin *, const cM3dGLin *, f32 *, f32 *);
|
||||
bool cM3d_Cross_LinPla(const cM3dGLin *, const cM3dGPla *, nw4r::math::VEC3 *, bool, bool);
|
||||
int cM3d_Check_LinLin(const cM3dGLin &, const cM3dGLin *, f32 *, f32 *);
|
||||
bool cM3d_Cross_LinPla(const cM3dGLin &, const cM3dGPla *, nw4r::math::VEC3 *, bool, bool);
|
||||
bool cM3d_Cross_MinMaxBoxLine(const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *);
|
||||
bool cM3d_InclusionCheckPosIn3PosBox3d(
|
||||
const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, f32
|
||||
);
|
||||
bool cM3d_CrossX_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32);
|
||||
bool cM3d_CrossX_Tri(const cM3dGTri *, const nw4r::math::VEC3 *);
|
||||
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *);
|
||||
bool cM3d_CrossX_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32);
|
||||
bool cM3d_CrossX_Tri(const cM3dGTri &, const nw4r::math::VEC3 *);
|
||||
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *);
|
||||
bool cM3d_CrossY_Tri_Front(const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 *);
|
||||
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32 *);
|
||||
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32);
|
||||
bool cM3d_CrossY_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, const cM3d_Range *, f32 *);
|
||||
bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32);
|
||||
bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *);
|
||||
bool cM3d_CrossZ_Tri(const cM3dGTri *, const nw4r::math::VEC3 *, f32 *);
|
||||
bool cM3d_Cross_LinTri(const cM3dGLin *, const cM3dGTri *, nw4r::math::VEC3 *, bool, bool);
|
||||
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32 *);
|
||||
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32);
|
||||
bool cM3d_CrossY_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, const cM3d_Range *, f32 *);
|
||||
bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32);
|
||||
bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *);
|
||||
bool cM3d_CrossZ_Tri(const cM3dGTri &, const nw4r::math::VEC3 *, f32 *);
|
||||
bool cM3d_Cross_LinTri(const cM3dGLin &, const cM3dGTri &, nw4r::math::VEC3 *, bool, bool);
|
||||
bool cM3d_Cross_LinTri(
|
||||
const cM3dGLin *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, const cM3dGPla *,
|
||||
const cM3dGLin &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const cM3dGPla *,
|
||||
nw4r::math::VEC3 *, bool, bool
|
||||
);
|
||||
bool cM3d_Cross_LinTri_Easy(const cM3dGTri *, const nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_SphPnt(const cM3dGSph *, const nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_LinSph(const cM3dGLin *, const cM3dGSph *, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_SphPnt(const cM3dGSph &, const nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_LinSph(const cM3dGLin &, const cM3dGSph &, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_LinSph_CrossPos(const cM3dGSph &, const cM3dGLin &, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, f32 *);
|
||||
bool cM3d_Cross_CylSph(const cM3dGCyl *, const cM3dGSph *, nw4r::math::VEC3 *, f32 *);
|
||||
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *);
|
||||
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, f32 *, f32 *);
|
||||
bool cM3d_Cross_SphSph(const cM3dGSph *, const cM3dGSph *, nw4r::math::VEC3 *);
|
||||
void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph *, const cM3dGTri *, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_SphTri(const cM3dGSph *, const cM3dGTri *, nw4r::math::VEC3 *, f32 *, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CylCyl(const cM3dGCyl *, const cM3dGCyl *, f32 *);
|
||||
bool cM3d_Cross_CylCyl(const cM3dGCyl *, const cM3dGCyl *, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CylTri(const cM3dGCyl *, const cM3dGTri *, nw4r::math::VEC3 *);
|
||||
int cM3d_Cross_CylLin(const cM3dGCyl *, const cM3dGLin *, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
|
||||
int cM3d_Cross_CylPntPnt(const cM3dGCyl *, const nw4r::math::VEC3 *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CylPnt(const cM3dGCyl *, const nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, f32 *);
|
||||
bool cM3d_Cross_CylSph(const cM3dGCyl &, const cM3dGSph &, nw4r::math::VEC3 *, f32 *);
|
||||
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *);
|
||||
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, f32 *, f32 *);
|
||||
bool cM3d_Cross_SphSph(const cM3dGSph &, const cM3dGSph &, nw4r::math::VEC3 *);
|
||||
void cM3d_CalcSphVsTriCrossPoint(const cM3dGSph &, const cM3dGTri &, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_SphTri(const cM3dGSph &, const cM3dGTri &, nw4r::math::VEC3 *, f32 *, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CylCyl(const cM3dGCyl &, const cM3dGCyl &, f32 *);
|
||||
bool cM3d_Cross_CylCyl(const cM3dGCyl &, const cM3dGCyl &, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CylTri(const cM3dGCyl &, const cM3dGTri &, nw4r::math::VEC3 *);
|
||||
int cM3d_Cross_CylLin(const cM3dGCyl &, const cM3dGLin &, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
|
||||
int cM3d_Cross_CylPntPnt(const cM3dGCyl &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CylPnt(const cM3dGCyl &, const nw4r::math::VEC3 &);
|
||||
bool cM3d_Cross_CpsCps(const cM3dGCps &, const cM3dGCps &, nw4r::math::VEC3 *, f32 *, f32 *);
|
||||
bool cM3d_Cross_CpsCyl(const cM3dGCps &, const cM3dGCyl &, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CpsSph_CrossPos(const cM3dGCps &, const cM3dGSph &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CpsSph(const cM3dGCps &, const cM3dGSph &, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_TriTri(const cM3dGTri &, const cM3dGTri &, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CpsTri(const cM3dGCps &, cM3dGTri, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CpsTri(const cM3dGCps &, const cM3dGTri &, nw4r::math::VEC3 *);
|
||||
void cM3d_CalcVecZAngle(const nw4r::math::VEC3 &, mAng3_c *);
|
||||
void cM3d_PlaneCrossLineProcWork(f32, f32, f32, f32, f32, f32, f32, f32 *, f32 *);
|
||||
int cM3d_2PlaneCrossLine(const cM3dGPla &, const cM3dGPla &, cM3dGLin *);
|
||||
bool cM3d_3PlaneCrossPos(const cM3dGPla &, const cM3dGPla &, const cM3dGPla &, nw4r::math::VEC3 *);
|
||||
f32 cM3d_lineVsPosSuisenCross(const cM3dGLin *, const nw4r::math::VEC3 *, nw4r::math::VEC3 *);
|
||||
f32 cM3d_lineVsPosSuisenCross(const cM3dGLin &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *);
|
||||
f32 cM3d_lineVsPosSuisenCross(const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, const nw4r::math::VEC3 &, nw4r::math::VEC3 *);
|
||||
|
||||
bool fn_803354e0(cM3dGUnk *, cM3dGUnk *, nw4r::math::VEC3 *);
|
||||
bool fn_80336110(cM3dGCyl *, cM3dGUnk *, nw4r::math::VEC3 *);
|
||||
bool fn_803364e0(cM3dGCyl *, cM3dGUnk *, f32 *);
|
||||
bool fn_80336d90(cM3dGCps *, cM3dGUnk *, nw4r::math::VEC3 *);
|
||||
bool fn_80337690(cM3dGUnk *, cM3dGSph *, nw4r::math::VEC3 *);
|
||||
bool fn_80337780(cM3dGUnk *, cM3dGSph *, f32 *);
|
||||
bool cM3d_Cross_UnkTri(const cM3dGUnk &, cM3dGTri &, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CylUnk(const cM3dGCyl &, cM3dGUnk &, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_CylUnk(const cM3dGCyl &, cM3dGUnk &, f32 *);
|
||||
bool cM3d_Cross_CpsUnk(const cM3dGCps &, cM3dGUnk &, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_UnkSph(const cM3dGUnk &, cM3dGSph &, nw4r::math::VEC3 *);
|
||||
bool cM3d_Cross_UnkSph(const cM3dGUnk &, cM3dGSph &, f32 *);
|
||||
|
||||
bool cM3d_Normalize(nw4r::math::VEC3 *);
|
||||
void cM3d_Normalize_Ex(nw4r::math::VEC3 *);
|
||||
|
||||
inline bool cM3d_IsZero(f32 f) {
|
||||
return fabsf(f) < G_CM3D_F_ABS_MIN;
|
||||
@@ -89,9 +95,9 @@ inline bool cM3d_IsZero_inverted(f32 param_0) {
|
||||
|
||||
inline void
|
||||
cM3d_InDivPos1(const nw4r::math::VEC3 *pVecA, const nw4r::math::VEC3 *pVecB, f32 pF, nw4r::math::VEC3 *pOut) {
|
||||
nw4r::math::VEC3 tmp;
|
||||
VEC3Scale(&tmp, pVecB, pF);
|
||||
VEC3Add(pOut, &tmp, pVecA);
|
||||
nw4r::math::VEC3 tmp2;
|
||||
VEC3Scale(&tmp2, pVecB, pF);
|
||||
VEC3Add(pOut, &tmp2, pVecA);
|
||||
}
|
||||
inline void
|
||||
cM3d_InDivPos2(const nw4r::math::VEC3 *pVecA, const nw4r::math::VEC3 *pVecB, f32 pF, nw4r::math::VEC3 *pOut) {
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include "d/col/c/c_m3d.h"
|
||||
#include "d/col/c/c_m3d_g_lin.h"
|
||||
#include "d/col/c/c_m3d_g_sph.h"
|
||||
|
||||
#include "m/m_vec.h"
|
||||
|
||||
// Axis aligned bounding box
|
||||
class cM3dGAab {
|
||||
@@ -23,7 +23,6 @@ public:
|
||||
bool CrossY(const mVec3_c &) const;
|
||||
bool UnderPlaneYUnder(f32) const;
|
||||
bool TopPlaneYUnder(f32) const;
|
||||
void SetMinMax(const cM3dGAab &);
|
||||
void SetMin(const mVec3_c &min);
|
||||
void SetMax(const mVec3_c &max);
|
||||
void CalcCenter(mVec3_c &) const;
|
||||
@@ -32,6 +31,11 @@ public:
|
||||
void Set(const cM3dGSph &);
|
||||
bool Cross(const mVec3_c &) const;
|
||||
|
||||
void SetMinMax(const cM3dGAab &aab) {
|
||||
SetMin(aab.mMin);
|
||||
SetMax(aab.mMax);
|
||||
}
|
||||
|
||||
void SetMinMax(const mVec3_c &minMax) {
|
||||
SetMin(minMax);
|
||||
SetMax(minMax);
|
||||
@@ -46,6 +50,19 @@ public:
|
||||
mMax.x = -1000000000.0f;
|
||||
}
|
||||
|
||||
const mVec3_c &GetMax() const {
|
||||
return mMax;
|
||||
}
|
||||
mVec3_c &GetMax() {
|
||||
return mMax;
|
||||
}
|
||||
const mVec3_c &GetMin() const {
|
||||
return mMin;
|
||||
}
|
||||
mVec3_c &GetMin() {
|
||||
return mMin;
|
||||
}
|
||||
|
||||
const mVec3_c *GetMaxP(void) const {
|
||||
return &mMax;
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ public:
|
||||
void Set(const mVec3_c &, const mVec3_c &, f32);
|
||||
void SetR(f32 r);
|
||||
void Set_0x1C(f32);
|
||||
bool fn_80337f30(cM3dGUnk *, mVec3_c *);
|
||||
bool Cross(cM3dGUnk &, mVec3_c *);
|
||||
bool fn_80337f40(const mVec3_c &) const;
|
||||
|
||||
f32 GetR() const {
|
||||
|
||||
@@ -17,14 +17,23 @@ public:
|
||||
void SetH(f32);
|
||||
void SetR(f32);
|
||||
|
||||
bool fn_803380e0(cM3dGUnk *, mVec3_c *);
|
||||
bool fn_803380f0(cM3dGUnk *, f32 *);
|
||||
bool Cross(cM3dGUnk &, mVec3_c *);
|
||||
bool Cross(cM3dGUnk &, f32 *);
|
||||
bool Cross(const mVec3_c &) const;
|
||||
void Clamp(const mVec3_c &, mVec3_c &) const;
|
||||
|
||||
const mVec3_c &GetC() const {
|
||||
return mCenter;
|
||||
}
|
||||
mVec3_c &GetC() {
|
||||
return mCenter;
|
||||
}
|
||||
f32 GetH() const {
|
||||
return mHeight;
|
||||
}
|
||||
f32 GetR() const {
|
||||
return mRadius;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,14 +3,16 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/types_nw4r.h"
|
||||
|
||||
class cM3dGLin {
|
||||
public:
|
||||
typedef nw4r::math::VEC3 VEC3;
|
||||
typedef EGG::Vector3f Vector3f;
|
||||
|
||||
/* 0x00 */ mVec3_c mStart;
|
||||
/* 0x0C */ mVec3_c mEnd;
|
||||
// Needs to be mutable for cCcD_CpsAttr::GetPos and cCcD_CpsAttr::GetShapeAccess
|
||||
/* 0x00 */ mutable mVec3_c mStart;
|
||||
/* 0x0C */ mutable mVec3_c mEnd;
|
||||
|
||||
cM3dGLin() {}
|
||||
|
||||
@@ -32,34 +34,34 @@ public:
|
||||
mEnd = *pEnd;
|
||||
}
|
||||
|
||||
nw4r::math::VEC3 &GetStart() {
|
||||
mVec3_c &GetStart() {
|
||||
return mStart;
|
||||
}
|
||||
|
||||
const nw4r::math::VEC3 &GetStart() const {
|
||||
const mVec3_c &GetStart() const {
|
||||
return mStart;
|
||||
}
|
||||
|
||||
nw4r::math::VEC3 *GetStartP(void) {
|
||||
mVec3_c *GetStartP(void) {
|
||||
return &mStart;
|
||||
}
|
||||
const nw4r::math::VEC3 *GetStartP(void) const {
|
||||
const mVec3_c *GetStartP(void) const {
|
||||
return &mStart;
|
||||
}
|
||||
|
||||
nw4r::math::VEC3 &GetEnd() {
|
||||
mVec3_c &GetEnd() {
|
||||
return mEnd;
|
||||
}
|
||||
|
||||
const nw4r::math::VEC3 &GetEnd() const {
|
||||
const mVec3_c &GetEnd() const {
|
||||
return mEnd;
|
||||
}
|
||||
|
||||
nw4r::math::VEC3 *GetEndP(void) {
|
||||
mVec3_c *GetEndP(void) {
|
||||
return &mEnd;
|
||||
}
|
||||
|
||||
const nw4r::math::VEC3 *GetEndP(void) const {
|
||||
const mVec3_c *GetEndP(void) const {
|
||||
return &mEnd;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "d/col/c/c_m3d.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
// Plane with a normal
|
||||
@@ -36,6 +37,12 @@ public:
|
||||
const mVec3_c *GetNP() const {
|
||||
return &mNormal;
|
||||
}
|
||||
mVec3_c &GetN() {
|
||||
return mNormal;
|
||||
}
|
||||
const mVec3_c &GetN() const {
|
||||
return mNormal;
|
||||
}
|
||||
f32 GetD() const {
|
||||
return mD;
|
||||
}
|
||||
@@ -46,13 +53,13 @@ public:
|
||||
return ((-mNormal.x * param_1->x - mNormal.z * param_1->z) - mD) / mNormal.y;
|
||||
}
|
||||
|
||||
s32 GetAngleY() const {
|
||||
return cM::atan2s(mNormal.x, mNormal.z);
|
||||
}
|
||||
|
||||
f32 GetXZDist() const {
|
||||
return EGG::Math<f32>::sqrt(mNormal.x * mNormal.x + mNormal.z * mNormal.z);
|
||||
}
|
||||
|
||||
mAng GetAngleY() const {
|
||||
return cM::atan2s(mNormal.x, mNormal.z);
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -20,14 +20,17 @@ public:
|
||||
bool Cross(const cM3dGTri *, f32 *, mVec3_c *);
|
||||
void Clamp(const mVec3_c &, mVec3_c &) const;
|
||||
|
||||
bool fn_80338750(cM3dGUnk *, mVec3_c *);
|
||||
bool fn_80338760(cM3dGUnk *, f32 *);
|
||||
bool Cross(cM3dGUnk &, mVec3_c *);
|
||||
bool Cross(cM3dGUnk &, f32 *);
|
||||
|
||||
void SetRatio(f32);
|
||||
|
||||
const mVec3_c &GetC() const {
|
||||
return mCenter;
|
||||
}
|
||||
mVec3_c &GetC() {
|
||||
return mCenter;
|
||||
}
|
||||
|
||||
const f32 &GetR() const {
|
||||
return mRadius;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "d/col/c/c_m3d_g_pla.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
class cM3dGTri : public cM3dGPla {
|
||||
typedef nw4r::math::VEC3 VecType;
|
||||
@@ -12,13 +13,23 @@ public:
|
||||
/* 0x1C */ VecType mB;
|
||||
/* 0x28 */ VecType mC;
|
||||
|
||||
const mVec3_c &GetPntA() const {
|
||||
return *(mVec3_c *)&mA;
|
||||
}
|
||||
const mVec3_c &GetPntB() const {
|
||||
return *(mVec3_c *)&mB;
|
||||
}
|
||||
const mVec3_c &GetPntC() const {
|
||||
return *(mVec3_c *)&mC;
|
||||
}
|
||||
|
||||
cM3dGTri() {}
|
||||
void SetPos(const VecType *, const VecType *, const VecType *);
|
||||
|
||||
void SetBg(const VecType *, const VecType *, const VecType *, const cM3dGPla *pla);
|
||||
|
||||
bool cross(const cM3dGLin *lin, VecType *xyz, bool param_2, bool param_3) const {
|
||||
return cM3d_Cross_LinTri(lin, this, xyz, param_2, param_3);
|
||||
bool cross(const cM3dGLin &lin, VecType *xyz, bool param_2, bool param_3) const {
|
||||
return cM3d_Cross_LinTri(lin, *this, xyz, param_2, param_3);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -2,10 +2,11 @@
|
||||
#define C_M3D_G_UNK_H
|
||||
|
||||
#include "common.h"
|
||||
#include "d/col/c/c_m3d.h"
|
||||
#include "d/col/c/c_m3d_g_lin.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
|
||||
struct cM3dGCps;
|
||||
struct cM3dGCyl;
|
||||
struct cM3dGSph;
|
||||
@@ -16,8 +17,7 @@ public:
|
||||
/* 0x30 */ mMtx_c mInvMtx;
|
||||
/* 0x60 */ mVec3_c mMin;
|
||||
/* 0x6C */ mVec3_c mMax;
|
||||
/* 0x78 */ mVec3_c mField_0x78;
|
||||
/* 0x84 */ mVec3_c mField_0x84;
|
||||
/* 0x78 */ cM3dGLin mLin;
|
||||
/* 0x90 */ mVec3_c mField_0x90;
|
||||
/* 0x9C */ mVec3_c mField_0x9C;
|
||||
/* 0xA8 */ mVec3_c mField_0xA8;
|
||||
@@ -34,13 +34,13 @@ public:
|
||||
void Update();
|
||||
void GetStartEnd(mVec3_c &, mVec3_c &);
|
||||
|
||||
void fn_80338c30(cM3dGCps *, mVec3_c *);
|
||||
bool fn_80338c40(cM3dGUnk *, mVec3_c *);
|
||||
bool fn_80338ca0(/* TODO */);
|
||||
bool fn_80338cb0(cM3dGCyl *, mVec3_c *);
|
||||
bool fn_80338cc0(cM3dGCyl *, f32 *);
|
||||
bool fn_80338cd0(cM3dGSph *, mVec3_c *);
|
||||
bool fn_80338ce0(cM3dGSph *, f32 *);
|
||||
bool Cross(cM3dGCps &, mVec3_c *);
|
||||
bool Cross(cM3dGTri &, mVec3_c *);
|
||||
bool Cross(cM3dGUnk &, mVec3_c *);
|
||||
bool Cross(cM3dGCyl &, mVec3_c *);
|
||||
bool Cross(cM3dGCyl &, f32 *);
|
||||
bool Cross(cM3dGSph &, mVec3_c *);
|
||||
bool Cross(cM3dGSph &, f32 *);
|
||||
|
||||
void Set(const mMtx_c &);
|
||||
void Set(const mVec3_c &, const mAng &);
|
||||
|
||||
+59
-487
@@ -1,517 +1,89 @@
|
||||
#ifndef D_CC_D_H
|
||||
#define D_CC_D_H
|
||||
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/col/c/c_m3d_g_aab.h"
|
||||
#include "d/col/c/c_m3d_g_cps.h"
|
||||
#include "d/col/c/c_m3d_g_cyl.h"
|
||||
#include "d/col/c/c_m3d_g_sph.h"
|
||||
#include "d/col/c/c_m3d_g_unk.h"
|
||||
#include "f/f_base_id.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/c/c_m3d.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
// Largely modeled off
|
||||
// https://github.com/zeldaret/tp/blob/main/include/SSystem/SComponent/c_cc_d.h
|
||||
// https://github.com/zeldaret/tp/blob/main/include/d/cc/d_cc_d.h
|
||||
// - the SComponent/d split seems to not exist anymore in SS, so we'll just
|
||||
// go with the d names for this merger of the two
|
||||
struct dCcD_SrcCps {
|
||||
/* 0x00 */ cCcD_SrcGObj mObjInf;
|
||||
/* 0x44 */ cCcD_SrcCpsAttr mCpsInf;
|
||||
};
|
||||
|
||||
class dCcD_DivideInfo {
|
||||
private:
|
||||
/* 0x00 */ u32 mXDivInfo;
|
||||
/* 0x04 */ u32 mYDivInfo;
|
||||
/* 0x08 */ u32 mZDivInfo;
|
||||
/* 0x0C vtable */
|
||||
// Capsule
|
||||
class dCcD_Cps : public cCcD_Obj, public cCcD_CpsAttr {
|
||||
public:
|
||||
/* 80328120 */ dCcD_DivideInfo();
|
||||
/* 80328130 */ virtual ~dCcD_DivideInfo();
|
||||
// void Set(u32, u32, u32);
|
||||
// bool Chk(dCcD_DivideInfo const &) const;
|
||||
}; // Size = 0x10
|
||||
dCcD_Cps();
|
||||
virtual ~dCcD_Cps();
|
||||
|
||||
class dCcD_DivideArea : public cM3dGAab {
|
||||
private:
|
||||
/* 0x18 */ bool mXDiffIsZero;
|
||||
/* 0x1C */ f32 mScaledXDiff;
|
||||
/* 0x20 */ f32 mInvScaledXDiff;
|
||||
/* 0x24 */ bool mYDiffIsZero;
|
||||
/* 0x28 */ f32 mScaledYDiff;
|
||||
/* 0x2C */ f32 mInvScaledYDiff;
|
||||
/* 0x30 */ bool mZDiffIsZero;
|
||||
/* 0x34 */ f32 mScaledZDiff;
|
||||
/* 0x38 */ f32 mInvScaledZDiff;
|
||||
virtual cCcD_ShapeAttr *GetShapeAttr() override;
|
||||
|
||||
void Set(const dCcD_SrcCps &src);
|
||||
void unknownCalc();
|
||||
};
|
||||
|
||||
struct dCcD_SrcTri {
|
||||
/* 0x00 */ cCcD_SrcGObj mObjInf;
|
||||
};
|
||||
|
||||
class dCcD_Tri : public cCcD_Obj, public cCcD_TriAttr {
|
||||
public:
|
||||
/* vt at 0x3C */
|
||||
dCcD_DivideArea();
|
||||
virtual ~dCcD_DivideArea();
|
||||
/* 803281c0 */ void SetArea(cM3dGAab const &);
|
||||
/* 803282d0 */ void CalcDivideInfo(dCcD_DivideInfo *, cM3dGAab const &, u32);
|
||||
/* 80328470 */ void CalcDivideInfoOverArea(dCcD_DivideInfo *, cM3dGAab const &);
|
||||
}; // Size = 0x40
|
||||
dCcD_Tri();
|
||||
virtual ~dCcD_Tri();
|
||||
|
||||
class dCcD_GAtTgCoCommonBase {
|
||||
protected:
|
||||
/* 0x00 */ u32 field_0x00;
|
||||
/* 0x04 */ s8 mEffCounter;
|
||||
/* 0x08 */ dAcRef_c<dAcBase_c> mActor;
|
||||
/* 0x14 */ u32 field_0x14;
|
||||
virtual cCcD_ShapeAttr *GetShapeAttr() override;
|
||||
|
||||
void Set(const dCcD_SrcTri &src);
|
||||
};
|
||||
|
||||
struct dCcD_SrcCyl {
|
||||
/* 0x00 */ cCcD_SrcGObj mObjInf;
|
||||
/* 0x40 */ cCcD_SrcCylAttr mCylInf;
|
||||
};
|
||||
|
||||
// Cylinder
|
||||
class dCcD_Cyl : public cCcD_Obj, public cCcD_CylAttr {
|
||||
public:
|
||||
dCcD_GAtTgCoCommonBase();
|
||||
virtual ~dCcD_GAtTgCoCommonBase();
|
||||
dCcD_Cyl();
|
||||
virtual ~dCcD_Cyl();
|
||||
|
||||
void resetEffCounter() {
|
||||
mEffCounter = 0;
|
||||
}
|
||||
void resetField0x14() {
|
||||
field_0x14 = 0;
|
||||
}
|
||||
u32 getField0x14() {
|
||||
return field_0x14;
|
||||
}
|
||||
void decreaseCount();
|
||||
void unlink();
|
||||
dAcBase_c *getActor();
|
||||
void setActor(dAcBase_c *);
|
||||
virtual cCcD_ShapeAttr *GetShapeAttr() override;
|
||||
void Set(const dCcD_SrcCyl &src);
|
||||
void setCenter(const mVec3_c &);
|
||||
void moveCenter(const mVec3_c &);
|
||||
};
|
||||
|
||||
struct dCcD_SrcGAtTgCoCommonBase {
|
||||
/* 0x0 */ u32 mGFlag;
|
||||
}; // Size: 0x4
|
||||
|
||||
struct dCcD_SrcGObjAt {
|
||||
/* 0x00 */ dCcD_SrcGAtTgCoCommonBase base;
|
||||
/* 0x04 */ u32 field_0x04;
|
||||
/* 0x08 */ u32 field_0x08;
|
||||
/* 0x0C */ u8 mSe; // Sound Effect ID
|
||||
/* 0x0D */ u8 mHitMark; // Hit Mark particle ID
|
||||
/* 0x0E */ u8 mSpl;
|
||||
/* 0x0F */ u8 mMtrl;
|
||||
/* 0x10 */ u16 field_0x10;
|
||||
/* 0x12 */ s16 field_0x12;
|
||||
struct dCcD_SrcSph {
|
||||
/* 0x00 */ cCcD_SrcGObj mObjInf;
|
||||
/* 0x40 */ cCcD_SrcSphAttr mSphInf;
|
||||
};
|
||||
|
||||
struct dCcD_SrcGObjTg {
|
||||
/* 0x00 */ dCcD_SrcGAtTgCoCommonBase base;
|
||||
/* 0x04 */ u32 field_0x04;
|
||||
/* 0x08 */ u16 field_0x08;
|
||||
/* 0x10 */ u16 field_0x0A;
|
||||
/* 0x0C */ u16 field_0x0C;
|
||||
/* 0x0E */ u16 field_0x0E;
|
||||
};
|
||||
|
||||
struct dCcD_SrcGObjCo {
|
||||
/* 0x0 */ dCcD_SrcGAtTgCoCommonBase mBase;
|
||||
};
|
||||
|
||||
struct dCcD_SrcGObjInf {
|
||||
/* 0x00 */ dCcD_SrcGObjAt mGObjAt;
|
||||
/* 0x14 */ dCcD_SrcGObjTg mGObjTg;
|
||||
/* 0x24 */ dCcD_SrcGObjCo mGObjCo;
|
||||
};
|
||||
|
||||
class dCcD_GObjAt : public dCcD_GAtTgCoCommonBase {
|
||||
private:
|
||||
/* 0x1C */ dCcD_SrcGObjAt mSrc;
|
||||
/* 0x30 */ mVec3_c mHitPos;
|
||||
/* 0x3C */ mVec3_c mVec;
|
||||
/* 0x48 */ mVec3_c mRVec;
|
||||
/* 0x54 */ u8 field_0x4C[0x58 - 0x54];
|
||||
/* 0x58 */ u32 field_0x58;
|
||||
|
||||
// Sphere
|
||||
class dCcD_Sph : public cCcD_Obj, public cCcD_SphAttr {
|
||||
public:
|
||||
dCcD_GObjAt();
|
||||
virtual ~dCcD_GObjAt();
|
||||
dCcD_Sph();
|
||||
virtual ~dCcD_Sph();
|
||||
|
||||
void clearFlag() {
|
||||
mSrc.field_0x04 = mSrc.field_0x04 & 0xFFFFFFFE;
|
||||
}
|
||||
mVec3_c *GetHitPosP() {
|
||||
return &mHitPos;
|
||||
}
|
||||
void SetSomeVec(const mVec3_c &p) {
|
||||
mVec = p;
|
||||
}
|
||||
mVec3_c *GetSomeVec() {
|
||||
return &mVec;
|
||||
}
|
||||
void init(const dCcD_SrcGObjAt *);
|
||||
void setSomeAtFlags(u32 flags);
|
||||
void adjustHitPos(f32 dx, f32 dz);
|
||||
virtual cCcD_ShapeAttr *GetShapeAttr() override;
|
||||
void Set(const dCcD_SrcSph &src);
|
||||
void setCenter(const mVec3_c &);
|
||||
void moveCenter(const mVec3_c &);
|
||||
void setCenterAndAtVec(const mVec3_c &, const mVec3_c &);
|
||||
};
|
||||
|
||||
class dCcD_GObjTg : public dCcD_GAtTgCoCommonBase {
|
||||
private:
|
||||
/* 0x1C */ dCcD_SrcGObjTg mSrc;
|
||||
/* 0x2C */ u8 field_0x2C[0x38 - 0x2C];
|
||||
/* 0x38 */ mVec3_c mHitPos;
|
||||
/* 0x44 */ u32 field_0x44;
|
||||
/* 0x48 */ u16 field_0x48;
|
||||
/* 0x4A */ u8 field_0x4A;
|
||||
/* 0x4B */ u8 field_0x4B;
|
||||
/* 0x4C */ u32 field_0x4C;
|
||||
/* 0x50 */ u32 field_0x50;
|
||||
/* 0x54 */ u32 field_0x54;
|
||||
/* 0x58 */ u32 field_0x58;
|
||||
/* 0x5C */ u8 field_0x5C[0x6C - 0x5C];
|
||||
/* 0x6C */ mVec3_c field_0x6C;
|
||||
/* 0x78 */ u32 field_0x78;
|
||||
|
||||
public:
|
||||
dCcD_GObjTg();
|
||||
virtual ~dCcD_GObjTg();
|
||||
void clearFlag() {
|
||||
mSrc.field_0x04 = mSrc.field_0x04 & 0xFFFFFFFE;
|
||||
}
|
||||
void setFlag(u32 f) {
|
||||
mSrc.field_0x04 |= f;
|
||||
}
|
||||
void set0x4C(u32 val) {
|
||||
field_0x4C = val;
|
||||
}
|
||||
void setSrcFlag(u32 flag) {
|
||||
mSrc.base.mGFlag = flag;
|
||||
}
|
||||
void setSrc0x0A(u32 flag) {
|
||||
mSrc.field_0x0A = flag;
|
||||
}
|
||||
u32 get0x58() {
|
||||
return field_0x58;
|
||||
}
|
||||
void init(const dCcD_SrcGObjTg *);
|
||||
void adjustHitPos(f32 dx, f32 dz);
|
||||
struct dCcD_SrcUnk {
|
||||
/* 0x00 */ cCcD_SrcGObj mObjInf;
|
||||
/* 0x40 */ cCcD_SrcUnkAttr mUnkInf;
|
||||
};
|
||||
|
||||
class dCcD_GObjCo : public dCcD_GAtTgCoCommonBase {
|
||||
private:
|
||||
/* 0x1C */ dCcD_SrcGObjCo mSrc;
|
||||
/* 0x20 */ u32 field_0x20;
|
||||
/* 0x24 */ u16 field_0x24;
|
||||
/* 0x28 */ u32 field_0x28;
|
||||
|
||||
class dCcD_Unk : public cCcD_Obj, public cCcD_UnkAttr {
|
||||
public:
|
||||
dCcD_GObjCo();
|
||||
virtual ~dCcD_GObjCo();
|
||||
void clearFlag() {
|
||||
mSrc.mBase.mGFlag = mSrc.mBase.mGFlag & 0xFFFFFFFE;
|
||||
}
|
||||
void setFlag(u32 f) {
|
||||
mSrc.mBase.mGFlag |= f;
|
||||
}
|
||||
void init(const dCcD_SrcGObjCo *);
|
||||
void setSomeAtFlags(u32 flags);
|
||||
void adjustHitPos(f32 dx, f32 dz);
|
||||
dCcD_Unk();
|
||||
virtual ~dCcD_Unk();
|
||||
|
||||
void SetGFlag(u32 flag) {
|
||||
mSrc.mBase.mGFlag = flag;
|
||||
}
|
||||
};
|
||||
virtual cCcD_ShapeAttr *GetShapeAttr() override;
|
||||
|
||||
class dCcD_ShapeAttr {
|
||||
public:
|
||||
/* 0x00 */ u8 UNK_0x00[0x18 - 0x00];
|
||||
/* 0x18 */ dCcD_DivideInfo field_0x18;
|
||||
|
||||
dCcD_ShapeAttr();
|
||||
|
||||
/* vt 0x08 */ virtual ~dCcD_ShapeAttr();
|
||||
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C();
|
||||
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10();
|
||||
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() = 0;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() = 0;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() = 0;
|
||||
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() = 0;
|
||||
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() = 0;
|
||||
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28(); // 0x80329110
|
||||
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() = 0;
|
||||
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() = 0;
|
||||
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() = 0;
|
||||
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() = 0;
|
||||
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() = 0;
|
||||
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter(); // 0x80329120
|
||||
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() = 0;
|
||||
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() = 0;
|
||||
/* vt 0x4C */ virtual void getShapeAccess(); // 0x80329090
|
||||
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() = 0;
|
||||
/* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54(); // 0x803290F0
|
||||
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() = 0;
|
||||
|
||||
static mVec3_c m_virtual_center;
|
||||
};
|
||||
|
||||
// This is in dAcObjBase_c @ 0x1c0
|
||||
struct UnkCCDStruct {
|
||||
u32 field_0x00;
|
||||
u32 field_0x04;
|
||||
u32 field_0x08;
|
||||
u32 field_0x0C;
|
||||
/* 0x10 */ mVec3_c field_0x10;
|
||||
/* 0x1C */ mVec3_c field_0x1C;
|
||||
/* 0x28 */ mVec3_c posIncrements;
|
||||
dAcBase_c *field_0x34;
|
||||
s32 field_0x38;
|
||||
|
||||
UnkCCDStruct(dAcBase_c *);
|
||||
|
||||
void postExecute();
|
||||
void reset();
|
||||
fBaseID_e getId();
|
||||
u32 getSomething(int);
|
||||
|
||||
void setField0x38ToMagicValue() {
|
||||
field_0x38 = 0xD;
|
||||
}
|
||||
|
||||
void setField0x38(s32 val) {
|
||||
field_0x38 = val;
|
||||
}
|
||||
};
|
||||
|
||||
// Object Info
|
||||
class dCcD_GObjInf {
|
||||
protected:
|
||||
/* 0x000 */ dCcD_GObjAt mGObjAt;
|
||||
/* 0x05C */ dCcD_GObjTg mGObjTg;
|
||||
/* 0x0D8 */ dCcD_GObjCo mGObjCo;
|
||||
/* 0x104 */ UnkCCDStruct *field_0x104;
|
||||
/* 0x108 */ u32 field_0x108;
|
||||
|
||||
public:
|
||||
dCcD_GObjInf();
|
||||
/* vt 0x08 */ virtual ~dCcD_GObjInf();
|
||||
/* vt 0x0C */ virtual void *dCcD_GObjInf_0x0C() = 0;
|
||||
/* vt 0x10 */ virtual void dCcD_GObjInf_0x10(); // 0x80328d30
|
||||
|
||||
void clear();
|
||||
void init(const dCcD_SrcGObjInf &src);
|
||||
static bool weirdConditionCheck(dAcBase_c *ac, u32);
|
||||
|
||||
inline void initUnk(UnkCCDStruct &src) {
|
||||
field_0x104 = &src;
|
||||
}
|
||||
|
||||
inline void clearCoFlag() {
|
||||
mGObjCo.clearFlag();
|
||||
}
|
||||
|
||||
void setTgCoFlag(u32 f) {
|
||||
mGObjTg.setFlag(f);
|
||||
mGObjCo.setFlag(f);
|
||||
}
|
||||
|
||||
inline void setSomeDefendValue(u32 val) {
|
||||
mGObjTg.set0x4C(val);
|
||||
}
|
||||
|
||||
inline void setAtVec(const mVec3_c &p) {
|
||||
mGObjAt.SetSomeVec(p);
|
||||
}
|
||||
|
||||
inline void setTgFlag(u32 flag) {
|
||||
mGObjTg.setSrcFlag(flag);
|
||||
}
|
||||
|
||||
inline mVec3_c *getAtVec() {
|
||||
return mGObjAt.GetSomeVec();
|
||||
}
|
||||
|
||||
bool someInteractCheck() {
|
||||
return ((mGObjTg.getField0x14() & 1) != 0 && mGObjTg.getActor() != nullptr);
|
||||
}
|
||||
|
||||
void setTgField0x0A(u32 val) {
|
||||
mGObjTg.setSrc0x0A(val);
|
||||
}
|
||||
|
||||
void ResetAtHit();
|
||||
void ResetTgHit();
|
||||
void ResetCoHit();
|
||||
|
||||
mVec3_c *GetAtHitPosP();
|
||||
mVec3_c *GetAtHitPosP2();
|
||||
|
||||
dAcBase_c *GetAtActor();
|
||||
bool CheckCollidedMask(u32 mask);
|
||||
dAcBase_c *GetTgActor();
|
||||
dAcBase_c *GetCoActor();
|
||||
|
||||
void adjustHitPos(f32 dx, f32 dz);
|
||||
};
|
||||
|
||||
struct dCcD_SrcCylAttr {
|
||||
public:
|
||||
/* 0x00 */ f32 mRadius;
|
||||
/* 0x04 */ f32 mHeight;
|
||||
}; // Size = 0x8
|
||||
|
||||
struct dCcD_SrcSphAttr {
|
||||
/* 0x00 */ f32 mRadius;
|
||||
}; // Size = 0x4
|
||||
|
||||
struct dCcD_SrcAabbAttr {
|
||||
/* 0x00 */ f32 minX, minY, minZ, maxX, maxY, maxZ;
|
||||
}; // Size = 0x18
|
||||
|
||||
struct dCcD_SrcUnk1Attr {};
|
||||
|
||||
class cM3dGUnk1 {
|
||||
public:
|
||||
/* 0x00 */ cM3dGCps mCps;
|
||||
/* 0x28 */ mVec3_c mVirtualCenter;
|
||||
cM3dGUnk1();
|
||||
};
|
||||
|
||||
class cM3dGUnk2 {
|
||||
public:
|
||||
};
|
||||
|
||||
// Unk1
|
||||
class dCcD_ShapeAttr1 : public dCcD_ShapeAttr, public cM3dGUnk1 {
|
||||
public:
|
||||
dCcD_ShapeAttr1();
|
||||
|
||||
void init(const dCcD_SrcUnk1Attr &);
|
||||
|
||||
/* vt 0x08 */ virtual ~dCcD_ShapeAttr1();
|
||||
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
|
||||
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
|
||||
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
|
||||
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
|
||||
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
|
||||
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
|
||||
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
|
||||
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
|
||||
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
|
||||
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
|
||||
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
|
||||
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
|
||||
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
|
||||
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
|
||||
/* vt 0x4C */ virtual void getShapeAccess() override;
|
||||
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
|
||||
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
|
||||
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
|
||||
};
|
||||
|
||||
// Unk1
|
||||
class dCcD_ShapeAttr2 : public dCcD_ShapeAttr, public cM3dGUnk2 {
|
||||
public:
|
||||
dCcD_ShapeAttr2();
|
||||
|
||||
/* vt 0x08 */ virtual ~dCcD_ShapeAttr2();
|
||||
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
|
||||
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
|
||||
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
|
||||
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
|
||||
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
|
||||
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
|
||||
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
|
||||
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
|
||||
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
|
||||
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
|
||||
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
|
||||
// /* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
|
||||
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
|
||||
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
|
||||
/* vt 0x4C */ virtual void getShapeAccess() override;
|
||||
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
|
||||
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
|
||||
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
|
||||
};
|
||||
|
||||
// Aabb
|
||||
class dCcD_ShapeAttr5 : public dCcD_ShapeAttr, public cM3dGUnk {
|
||||
public:
|
||||
dCcD_ShapeAttr5();
|
||||
|
||||
void init(const dCcD_SrcAabbAttr &);
|
||||
|
||||
/* vt 0x08 */ virtual ~dCcD_ShapeAttr5();
|
||||
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
|
||||
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
|
||||
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
|
||||
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
|
||||
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
|
||||
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
|
||||
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
|
||||
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
|
||||
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
|
||||
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
|
||||
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
|
||||
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
|
||||
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
|
||||
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
|
||||
// /* vt 0x4C */ virtual void getShapeAccess() override;
|
||||
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
|
||||
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
|
||||
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
|
||||
};
|
||||
|
||||
// Cyl
|
||||
class dCcD_ShapeAttr3 : public dCcD_ShapeAttr, public cM3dGCyl {
|
||||
public:
|
||||
dCcD_ShapeAttr3();
|
||||
|
||||
void init(const dCcD_SrcCylAttr &);
|
||||
|
||||
/* vt 0x08 */ virtual ~dCcD_ShapeAttr3();
|
||||
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
|
||||
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
|
||||
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
|
||||
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
|
||||
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
|
||||
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
|
||||
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
|
||||
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
|
||||
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
|
||||
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
|
||||
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
|
||||
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
|
||||
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
|
||||
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
|
||||
/* vt 0x4C */ virtual void getShapeAccess() override;
|
||||
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
|
||||
// /* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
|
||||
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
|
||||
};
|
||||
|
||||
// Sph
|
||||
class dCcD_ShapeAttr4 : public dCcD_ShapeAttr, public cM3dGSph {
|
||||
public:
|
||||
dCcD_ShapeAttr4();
|
||||
|
||||
void init(const dCcD_SrcSphAttr &);
|
||||
|
||||
/* vt 0x08 */ virtual ~dCcD_ShapeAttr4();
|
||||
/* vt 0x0C */ virtual void dCcD_ShapeAttr_0x0C() override;
|
||||
/* vt 0x10 */ virtual void dCcD_ShapeAttr_0x10() override;
|
||||
/* vt 0x14 */ virtual void dCcD_ShapeAttr_0x14() override;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x18() override;
|
||||
/* vt 0x18 */ virtual void dCcD_ShapeAttr_0x1C() override;
|
||||
/* vt 0x20 */ virtual void dCcD_ShapeAttr_0x20() override;
|
||||
/* vt 0x24 */ virtual void dCcD_ShapeAttr_0x24() override;
|
||||
/* vt 0x28 */ virtual void dCcD_ShapeAttr_0x28() override;
|
||||
/* vt 0x2C */ virtual void dCcD_ShapeAttr_0x2C() override;
|
||||
/* vt 0x30 */ virtual void dCcD_ShapeAttr_0x30() override;
|
||||
/* vt 0x34 */ virtual void dCcD_ShapeAttr_0x34() override;
|
||||
/* vt 0x38 */ virtual void dCcD_ShapeAttr_0x38() override;
|
||||
/* vt 0x3C */ virtual void dCcD_ShapeAttr_0x3C() override;
|
||||
/* vt 0x40 */ virtual mVec3_c *getVirtualCenter() override;
|
||||
/* vt 0x44 */ virtual void dCcD_ShapeAttr_0x44() override;
|
||||
/* vt 0x48 */ virtual void dCcD_ShapeAttr_0x48() override;
|
||||
/* vt 0x4C */ virtual void getShapeAccess() override;
|
||||
/* vt 0x50 */ virtual void dCcD_ShapeAttr_0x50() override;
|
||||
/* vt 0x54 */ virtual void dCcD_ShapeAttr_0x54() override;
|
||||
/* vt 0x58 */ virtual void dCcD_ShapeAttr_0x58() override;
|
||||
void Set(const dCcD_SrcUnk &src);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
typedef void (*dCcMassS_ObjCallback)(dAcObjBase_c *, mVec3_c *, u32);
|
||||
|
||||
class dCcMassS_Obj {
|
||||
private:
|
||||
/* 0x00 */ cCcD_Obj *mpObj;
|
||||
/* 0x04 */ u8 mPriority;
|
||||
/* 0x08 */ dCcMassS_ObjCallback mpCallback;
|
||||
/* 0x0C */ cCcD_DivideInfo mDivideInfo;
|
||||
/* 0x1C vtable*/
|
||||
|
||||
public:
|
||||
dCcMassS_Obj();
|
||||
virtual ~dCcMassS_Obj();
|
||||
void Set(cCcD_Obj *p_obj, u8 priority, dCcMassS_ObjCallback callback);
|
||||
void Clear();
|
||||
|
||||
cCcD_Obj *GetObj() {
|
||||
return mpObj;
|
||||
}
|
||||
u8 GetPriority() const {
|
||||
return mPriority;
|
||||
}
|
||||
dCcMassS_ObjCallback GetCallback() const {
|
||||
return mpCallback;
|
||||
}
|
||||
cCcD_DivideInfo &GetDivideInfo() {
|
||||
return mDivideInfo;
|
||||
}
|
||||
};
|
||||
|
||||
class dCcMassS_HitInf {
|
||||
private:
|
||||
/* 0x00 */ cCcD_Obj *mpArea;
|
||||
/* 0x04 */ cCcD_Obj *mpAtObj;
|
||||
/* 0x08 */ cCcD_Obj *mpCoObj;
|
||||
/* 0x0C */ f32 mCoHitLen;
|
||||
/* 0x10 vtable */
|
||||
public:
|
||||
dCcMassS_HitInf();
|
||||
virtual ~dCcMassS_HitInf();
|
||||
|
||||
void ClearPointer();
|
||||
void SetAreaHitObj(cCcD_Obj *obj) {
|
||||
mpArea = obj;
|
||||
}
|
||||
void SetCoHitObj(cCcD_Obj *obj) {
|
||||
mpCoObj = obj;
|
||||
}
|
||||
void SetAtHitObj(cCcD_Obj *obj) {
|
||||
mpAtObj = obj;
|
||||
}
|
||||
void SetCoHitLen(f32 len) {
|
||||
mCoHitLen = len;
|
||||
}
|
||||
cCcD_Obj *GetAtHitObj() const {
|
||||
return mpAtObj;
|
||||
}
|
||||
};
|
||||
|
||||
class dCcMassS_Mng {
|
||||
public:
|
||||
/* 0x0000 */ cCcD_DivideArea mDivideArea;
|
||||
/* 0x0040 */ s32 mMassObjCount;
|
||||
/* 0x0044 */ dCcMassS_Obj mMassObjs[20];
|
||||
/* 0x02C4 */ s32 mMassAreaCount;
|
||||
/* 0x02C8 */ dCcMassS_Obj mMassAreas[5];
|
||||
/* 0x0368 */ cCcD_CylAttr mCylAttr;
|
||||
/* 0x03A8 */ u8 field_0x3A8;
|
||||
/* 0x03A9 */ u8 field_0x3A9;
|
||||
/* 0x03AA */ u8 field_0x3AA;
|
||||
/* 0x03AB */ u8 mResultCam;
|
||||
/* 0x03AC */ Vec mCamTopPos;
|
||||
/* 0x03B8 */ f32 mCamTopDist;
|
||||
/* 0x03BC */ Vec mCamBottomPos;
|
||||
/* 0x03C8 */ f32 mCamBottomDist;
|
||||
/* 0x03CC */ cCcD_CpsAttr mCpsAttr;
|
||||
/* 0x042C */ cCcD_DivideInfo mDivideInfo;
|
||||
/* 0x043C vtable */
|
||||
|
||||
public:
|
||||
dCcMassS_Mng();
|
||||
virtual ~dCcMassS_Mng();
|
||||
|
||||
void Ct();
|
||||
|
||||
void SetAttr(f32 radius, f32 height, u8 param_2, u8 param_3);
|
||||
void Prepare();
|
||||
u32 Chk(mVec3_c *p_xyz, dAcObjBase_c **p_actor, dCcMassS_HitInf *p_hitInf);
|
||||
void Clear();
|
||||
|
||||
// Not original names, but made distinct for clarity (original was just one `Set)
|
||||
void SetObj(cCcD_Obj *p_obj, u8 priority);
|
||||
void SetArea(cCcD_Obj *p_obj, u8 priority, dCcMassS_ObjCallback callback);
|
||||
|
||||
// void SetCam(cM3dGCps const &cps);
|
||||
// u8 GetResultCam() const;
|
||||
// void GetCamTopPos(Vec *p_out);
|
||||
};
|
||||
@@ -1,13 +0,0 @@
|
||||
#ifndef TOSORT_D_CC_MGR_H
|
||||
#define TOSORT_D_CC_MGR_H
|
||||
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
|
||||
class ColliderManager {
|
||||
public:
|
||||
static ColliderManager *getColliderManager();
|
||||
|
||||
void addCollider(dCcD_GObjInf *collider);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,78 @@
|
||||
#include "common.h"
|
||||
#include "d/col/c/c_cc_d.h"
|
||||
#include "d/col/cc/d_cc_mass_s.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_mtx.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
struct mMtxPair {
|
||||
mMtx_c mMtx;
|
||||
mMtx_c mInv;
|
||||
};
|
||||
|
||||
class dCcS {
|
||||
private:
|
||||
/* 0x0000 */ cCcD_Obj *mpObjAt[0x200];
|
||||
/* 0x0800 */ cCcD_Obj *mpObjTg[0x300];
|
||||
/* 0x1400 */ cCcD_Obj *mpObjCo[0x200];
|
||||
/* 0x1c00 */ cCcD_Obj *mpObj[0x340];
|
||||
/* 0x2900 */ UNKTYPE *mpUnk[0x100];
|
||||
/* 0x2D00 */ u16 mObjAtCount;
|
||||
/* 0x2d02 */ u16 mObjTgCount;
|
||||
/* 0x2D04 */ u16 mObjCoCount;
|
||||
/* 0x2D06 */ u16 mObjCount;
|
||||
/* 0x2D08 */ u32 mUnkCount;
|
||||
/* 0x2D0C */ cCcD_DivideArea mDivideArea;
|
||||
/* 0x2D4C */ bool mbAreaSet;
|
||||
/* 0x2D50 */ mMtxPair mAreas[16]; // could be a structure?
|
||||
/* 0x3350 */ int mAreaCount;
|
||||
/* 0x3354*/ dCcMassS_Mng mMassMng;
|
||||
|
||||
public:
|
||||
dCcS();
|
||||
virtual ~dCcS();
|
||||
|
||||
// This is a remnant of cCcS, which dCcS::Ct calls. Idk the correct layout
|
||||
void Ct_cCcS();
|
||||
|
||||
void Ct();
|
||||
void Dt();
|
||||
|
||||
static bool ChkRemoveActor(dAcObjBase_c *pActor);
|
||||
static bool ChkNoHitAtTg(cCcD_Obj *, cCcD_Obj *);
|
||||
static bool ChkAtTgCommonHitInf(cCcD_Obj *, cCcD_Obj *);
|
||||
void ChkAtTg();
|
||||
|
||||
static bool ChkNoHitCo(cCcD_Obj *, cCcD_Obj *);
|
||||
static void SetCoCommonHitInf(cCcD_Obj *, mVec3_c *, cCcD_Obj *, mVec3_c *, f32);
|
||||
void ChkCo();
|
||||
|
||||
static bool ChkSheildFrontRange(cCcD_Obj *, cCcD_Obj *);
|
||||
static bool ChkShield(cCcD_Obj *, cCcD_Obj *, cCcD_ShieldChkCallback *);
|
||||
static bool ChkAtTgHitAfterCross(bool, bool, cCcD_Obj *, cCcD_Obj *);
|
||||
static void SetCoObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *);
|
||||
static void SetPosCorrect(cCcD_Obj *, mVec3_c *, cCcD_Obj *, mVec3_c *, f32);
|
||||
static void CalcParticleAngle(cCcD_Obj *, cCcD_Obj *, mAng3_c *, bool);
|
||||
static void fn_80356fd0(mVec3_c *, cCcD_Obj *, cCcD_Obj *);
|
||||
static u32 ProcAtTgHitmark(cCcD_Obj *, cCcD_Obj *, mVec3_c *, u32, mVec3_c *);
|
||||
static void SetAtTgObjInf(bool, bool, cCcD_Obj *, cCcD_Obj *, mVec3_c *, bool);
|
||||
|
||||
bool ChkCamera(mVec3_c &, mVec3_c &, dAcObjBase_c *, dAcObjBase_c *, dAcObjBase_c *, f32);
|
||||
bool
|
||||
ChkCameraPoint(const mVec3_c &, const mVec3_c &, mVec3_c &, dAcObjBase_c *, dAcObjBase_c *, dAcObjBase_c *, f32);
|
||||
|
||||
bool ChkCo(const mVec3_c &, dAcObjBase_c *);
|
||||
bool fn_80357c90(const mVec3_c &, const mVec3_c &, u32, UNKTYPE **);
|
||||
void Set(cCcD_Obj *);
|
||||
void MoveAfterCheck();
|
||||
void RemoveDeadObj();
|
||||
void CalcArea();
|
||||
void Move();
|
||||
void MassClear();
|
||||
void SetArea(mMtx_c *);
|
||||
void ClearArea();
|
||||
void AdjustHitPos();
|
||||
|
||||
static dCcS *GetInstance();
|
||||
static dCcS *sInstance;
|
||||
};
|
||||
@@ -1,89 +0,0 @@
|
||||
#ifndef D_CC_SHAPE_COLLIDERS_H
|
||||
#define D_CC_SHAPE_COLLIDERS_H
|
||||
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "m/m_vec.h"
|
||||
|
||||
struct dCcD_SrcUnk {
|
||||
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
|
||||
/* 0x44 */ dCcD_SrcUnk1Attr mUnk1Inf;
|
||||
}; // Size: ???
|
||||
|
||||
class dCcD_Unk1 : public dCcD_GObjInf, public dCcD_ShapeAttr1 {
|
||||
public:
|
||||
dCcD_Unk1();
|
||||
virtual ~dCcD_Unk1();
|
||||
|
||||
virtual void *dCcD_GObjInf_0x0C() override;
|
||||
|
||||
void init(const dCcD_SrcUnk &src);
|
||||
void unknownCalc();
|
||||
};
|
||||
|
||||
struct dCcD_SrcEmpty {
|
||||
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
|
||||
}; // Size: 0x40
|
||||
|
||||
// Not sure what this is, the init function
|
||||
// doesn't call the shape initializer
|
||||
class dCcD_Empty : public dCcD_GObjInf, public dCcD_ShapeAttr2 {
|
||||
public:
|
||||
dCcD_Empty();
|
||||
virtual ~dCcD_Empty();
|
||||
|
||||
virtual void *dCcD_GObjInf_0x0C() override;
|
||||
|
||||
void init(const dCcD_SrcEmpty &src);
|
||||
};
|
||||
|
||||
struct dCcD_SrcCyl {
|
||||
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
|
||||
/* 0x40 */ dCcD_SrcCylAttr mCylAttr;
|
||||
}; // Size: 0x44
|
||||
|
||||
// Cylinder
|
||||
class dCcD_Cyl : public dCcD_GObjInf, public dCcD_ShapeAttr3 {
|
||||
public:
|
||||
dCcD_Cyl();
|
||||
virtual ~dCcD_Cyl();
|
||||
|
||||
virtual void *dCcD_GObjInf_0x0C() override;
|
||||
void init(const dCcD_SrcCyl &src);
|
||||
void setCenter(const mVec3_c &);
|
||||
void moveCenter(const mVec3_c &);
|
||||
};
|
||||
|
||||
struct dCcD_SrcSph {
|
||||
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
|
||||
/* 0x40 */ dCcD_SrcSphAttr mSphAttr;
|
||||
}; // Size: 0x44
|
||||
|
||||
// Sphere
|
||||
class dCcD_Sph : public dCcD_GObjInf, public dCcD_ShapeAttr4 {
|
||||
public:
|
||||
dCcD_Sph();
|
||||
virtual ~dCcD_Sph();
|
||||
|
||||
virtual void *dCcD_GObjInf_0x0C() override;
|
||||
void init(const dCcD_SrcSph &src);
|
||||
void setCenter(const mVec3_c &);
|
||||
void moveCenter(const mVec3_c &);
|
||||
void setCenterAndAtVec(const mVec3_c &, const mVec3_c &);
|
||||
};
|
||||
|
||||
struct dCcD_SrcAabb {
|
||||
/* 0x00 */ dCcD_SrcGObjInf mObjInf;
|
||||
/* 0x40 */ dCcD_SrcAabbAttr mAabbAttr;
|
||||
}; // Size: 0x58
|
||||
|
||||
class dCcD_Aabb : public dCcD_GObjInf, public dCcD_ShapeAttr5 {
|
||||
public:
|
||||
dCcD_Aabb();
|
||||
virtual ~dCcD_Aabb();
|
||||
|
||||
virtual void *dCcD_GObjInf_0x0C() override;
|
||||
|
||||
void init(const dCcD_SrcAabb &src);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,9 @@
|
||||
#include "m/m3d/m_shadow.h"
|
||||
|
||||
// This is unofficial, idk if this is close, but this is a common shadow extension.
|
||||
//
|
||||
class dShadowCircle_c : public m3d::mShadowCircle_c {
|
||||
public:
|
||||
dShadowCircle_c() {}
|
||||
virtual ~dShadowCircle_c() {}
|
||||
};
|
||||
@@ -2,7 +2,7 @@
|
||||
#define D_T_REACTION_H
|
||||
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/cc/d_cc_shape_colliders.h"
|
||||
#include "d/col/cc/d_cc_d.h"
|
||||
#include "s/s_State.hpp"
|
||||
#include "s/s_StateMgr.hpp"
|
||||
#include "toBeSorted/dowsing_target.h"
|
||||
@@ -36,7 +36,7 @@ private:
|
||||
return params & 0xFF;
|
||||
}
|
||||
|
||||
int getParam0x08() {
|
||||
u32 getParam0x08() {
|
||||
return (params >> 8) & 0xFF;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define EGG_MATH_H
|
||||
|
||||
#include "common.h"
|
||||
#include "math.h"
|
||||
|
||||
namespace EGG {
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
#include "egg/math/eggQuat.h"
|
||||
#include "egg/math/eggVector.h"
|
||||
|
||||
|
||||
namespace EGG {
|
||||
|
||||
struct Matrix34f {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef M_ANGLE_H
|
||||
#define M_ANGLE_H
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "common.h"
|
||||
#include "nw4r/math/math_triangular.h"
|
||||
|
||||
@@ -9,6 +10,10 @@ struct mAng {
|
||||
mAng(s16 s) : mVal(s) {}
|
||||
mAng(const mAng &other) : mVal(other.mVal) {}
|
||||
|
||||
static mAng atan2s(f32 a, f32 b) {
|
||||
return mAng(cM::atan2s(a, b));
|
||||
}
|
||||
|
||||
operator s16() const {
|
||||
return mVal;
|
||||
}
|
||||
@@ -25,6 +30,10 @@ struct mAng {
|
||||
mVal += other.mVal;
|
||||
return *this;
|
||||
}
|
||||
mAng &operator-=(const mAng &other) {
|
||||
mVal -= other.mVal;
|
||||
return *this;
|
||||
}
|
||||
|
||||
s32 step(s16 target, s32 steps, s16 max, s16 min);
|
||||
|
||||
|
||||
+18
-42
@@ -7,9 +7,9 @@
|
||||
#include "egg/math/eggMatrix.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/nw4r_types.h"
|
||||
#include "nw4r/types_nw4r.h"
|
||||
|
||||
class mMtx_c {
|
||||
class mMtx_c : public EGG::Matrix34f {
|
||||
typedef f32 (*MtxRef)[4];
|
||||
typedef const f32 (*MtxRefConst)[4];
|
||||
|
||||
@@ -17,16 +17,6 @@ public:
|
||||
mMtx_c(){};
|
||||
mMtx_c(f32 xx, f32 xy, f32 xz, f32 xw, f32 yx, f32 yy, f32 yz, f32 yw, f32 zx, f32 zy, f32 zz, f32 zw);
|
||||
|
||||
// not sure if this breaks anything but we need a matrix type
|
||||
// with an inline copy assignment operator
|
||||
void set(const mMtx_c &r) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 4; j++) {
|
||||
m[i][j] = r.m[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
operator MtxRef() {
|
||||
return (MtxRef)(this);
|
||||
}
|
||||
@@ -36,15 +26,9 @@ public:
|
||||
operator nw4r::math::MTX34 *() {
|
||||
return (nw4r::math::MTX34 *)(this);
|
||||
}
|
||||
operator EGG::Matrix34f *() {
|
||||
return (EGG::Matrix34f *)(this);
|
||||
}
|
||||
operator nw4r::math::MTX34 &() {
|
||||
return *(nw4r::math::MTX34 *)(this);
|
||||
}
|
||||
operator EGG::Matrix34f &() {
|
||||
return *(EGG::Matrix34f *)(this);
|
||||
}
|
||||
|
||||
void XrotS(const mAng &angle); ///< Generates a rotation matrix for the X axis with the given angle.
|
||||
void XrotM(const mAng &angle); ///< Rotates the matrix on the X axis by the given angle.
|
||||
@@ -53,15 +37,23 @@ public:
|
||||
void ZrotS(const mAng &angle); ///< Generates a rotation matrix for the Z axis with the given angle.
|
||||
void ZrotM(const mAng &angle); ///< Rotates the matrix on the Z axis by the given angle.
|
||||
|
||||
void ZXYrotS(mAng xRot, mAng yRot,
|
||||
mAng zRot); ///< Generates the matrix on the Y, X and Z axes by the given angles.
|
||||
void ZXYrotM(mAng xRot, mAng yRot,
|
||||
mAng zRot); ///< Rotates the matrix on the Y, X and Z axes by the given angles.
|
||||
void XYZrotS(mAng xRot, mAng yRot,
|
||||
mAng zRot); ///< Generates the matrix on the Z, Y and X axes by the given angles.
|
||||
void ZXYrotS(
|
||||
const mAng &xRot, const mAng &yRot,
|
||||
const mAng &zRot
|
||||
); ///< Generates the matrix on the Y, X and Z axes by the given angles.
|
||||
void ZXYrotM(
|
||||
const mAng &xRot, const mAng &yRot,
|
||||
const mAng &zRot
|
||||
); ///< Rotates the matrix on the Y, X and Z axes by the given angles.
|
||||
void XYZrotS(
|
||||
const mAng &xRot, const mAng &yRot,
|
||||
const mAng &zRot
|
||||
); ///< Generates the matrix on the Z, Y and X axes by the given angles.
|
||||
|
||||
void XYZrotM(mAng xRot, mAng yRot,
|
||||
mAng zRot); ///< Rotates the matrix on the Z, Y and X axes by the given angles.
|
||||
void XYZrotM(
|
||||
const mAng &xRot, const mAng &yRot,
|
||||
const mAng &zRot
|
||||
); ///< Rotates the matrix on the Z, Y and X axes by the given angles.
|
||||
|
||||
void toRot(mAng3_c &out) const; ///< Converts the matrix to a rotation vector.
|
||||
|
||||
@@ -71,22 +63,6 @@ public:
|
||||
void rot(int, int); // does some werrd operation to rotate the matrix
|
||||
bool quatRelated();
|
||||
|
||||
void SetTranslation(const mVec3_c &t) {
|
||||
m[0][3] = t.x;
|
||||
m[1][3] = t.y;
|
||||
m[2][3] = t.z;
|
||||
}
|
||||
|
||||
public:
|
||||
union {
|
||||
f32 m[3][4];
|
||||
struct {
|
||||
f32 xx, xy, xz, xw;
|
||||
f32 yx, yy, yz, yw;
|
||||
f32 zx, zy, zz, zw;
|
||||
};
|
||||
};
|
||||
|
||||
public:
|
||||
static mMtx_c Identity;
|
||||
};
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
#ifndef M_VEC_H
|
||||
#define M_VEC_H
|
||||
|
||||
#include "c/c_math.h"
|
||||
#include "common.h"
|
||||
#include "egg/math/eggVector.h"
|
||||
#include "m/m_angle.h"
|
||||
#include "nw4r/types_nw4r.h"
|
||||
|
||||
class mAng;
|
||||
|
||||
class mVec3_c : public EGG::Vector3f {
|
||||
public:
|
||||
@@ -148,6 +152,12 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
mVec3_c operator-(f32 f) const {
|
||||
return mVec3_c(x - f, y - f, z - f);
|
||||
}
|
||||
mVec3_c operator+(f32 f) const {
|
||||
return mVec3_c(x + f, y + f, z + f);
|
||||
}
|
||||
mVec3_c &operator-=(f32 f) {
|
||||
x -= f;
|
||||
y -= f;
|
||||
@@ -207,6 +217,17 @@ public:
|
||||
|
||||
void rotY(const mAng &angle);
|
||||
|
||||
// ???
|
||||
s32 getAngleY() const {
|
||||
return mAng(cM::atan2s(x, z));
|
||||
}
|
||||
|
||||
void CopyTo(nw4r::math::VEC3 *p) {
|
||||
p->x = x;
|
||||
p->y = y;
|
||||
p->z = z;
|
||||
}
|
||||
|
||||
static mVec3_c Zero;
|
||||
static mVec3_c Ex;
|
||||
static mVec3_c Ey;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#ifndef NW4R_MATH_ARITHMETIC_H
|
||||
#define NW4R_MATH_ARITHMETIC_H
|
||||
|
||||
#include "math.h"
|
||||
#include "nw4r/types_nw4r.h" // IWYU pragma: export
|
||||
#include "rvl/OS.h" // IWYU pragma: export
|
||||
|
||||
@@ -1,189 +0,0 @@
|
||||
#ifndef NW4R_TYPES_H
|
||||
#define NW4R_TYPES_H
|
||||
|
||||
namespace nw4r {
|
||||
namespace ut {
|
||||
template <typename T>
|
||||
struct TextWriterBase;
|
||||
template <typename T>
|
||||
struct TagProcessorBase;
|
||||
|
||||
struct Color;
|
||||
struct FileStream;
|
||||
|
||||
namespace detail {
|
||||
struct RuntimeTypeInfo;
|
||||
}
|
||||
} // namespace ut
|
||||
|
||||
namespace ef {
|
||||
struct DrawOrder;
|
||||
struct DrawInfo;
|
||||
struct DrawStrategy;
|
||||
struct DrawStrategyImpl;
|
||||
struct DrawStrategyBuilder;
|
||||
struct Effect;
|
||||
struct EffectSystem;
|
||||
struct EffectProject;
|
||||
struct Emitter;
|
||||
struct EmitterDrawSetting;
|
||||
struct EmitFormBuilder;
|
||||
struct ResEmitter;
|
||||
struct EmitterResource;
|
||||
struct EmitterForm;
|
||||
struct EmitterInheritSetting;
|
||||
struct Particle;
|
||||
struct ParticleManager;
|
||||
struct MemoryManager;
|
||||
struct MemoryManagerBase;
|
||||
} // namespace ef
|
||||
|
||||
namespace math {
|
||||
class VEC2;
|
||||
class VEC3;
|
||||
class MTX33;
|
||||
class MTX34;
|
||||
class AABB;
|
||||
class FRUSTUM;
|
||||
} // namespace math
|
||||
|
||||
namespace snd {
|
||||
struct FxBase;
|
||||
struct SoundPlayer;
|
||||
struct SoundHandle;
|
||||
struct SeqSoundHandle;
|
||||
struct SoundArchive;
|
||||
struct SoundArchivePlayer;
|
||||
struct Sound3DActor;
|
||||
struct Sound3DListener;
|
||||
struct Sound3DManager;
|
||||
struct SoundHandle;
|
||||
struct StrmSoundHandle;
|
||||
struct WaveSoundHandle;
|
||||
|
||||
namespace detail {
|
||||
struct BasicSound;
|
||||
struct BasicPlayer;
|
||||
struct ChannelManager;
|
||||
struct SeqSound;
|
||||
struct SeqPlayer;
|
||||
struct MmlParser;
|
||||
struct MmlSeqTrack;
|
||||
struct SeqTrack;
|
||||
struct SeqTrackAllocator;
|
||||
template <typename T>
|
||||
struct SoundInstanceManager;
|
||||
struct StrmBufferPool;
|
||||
struct StrmSound;
|
||||
struct NoteOnCallback;
|
||||
struct PlayerHeap;
|
||||
struct SoundArchiveFileReader;
|
||||
struct SoundThread;
|
||||
struct WaveSound;
|
||||
struct StrmPlayer;
|
||||
struct WsdPlayer;
|
||||
} // namespace detail
|
||||
} // namespace snd
|
||||
|
||||
namespace g3d {
|
||||
struct AnmObjVis;
|
||||
struct AnmObjVisNode;
|
||||
struct AnmObjVisOR;
|
||||
struct AnmObjVisRes;
|
||||
struct AnmObj;
|
||||
struct AnmObjChr;
|
||||
struct FuncObjCalcWorld;
|
||||
struct AnmScn;
|
||||
struct AnmScnRes;
|
||||
struct CameraAnmResult;
|
||||
struct Draw1Mat1ShpSwap;
|
||||
struct DrawResMdlReplacement;
|
||||
struct FogAnmResult;
|
||||
struct ResFile;
|
||||
struct ResMdl;
|
||||
struct ResPltt;
|
||||
struct ResTex;
|
||||
struct ResTexSrt;
|
||||
struct ResMat;
|
||||
struct ResTexPlttInfo;
|
||||
struct ResShp;
|
||||
struct ResFog;
|
||||
struct ResAnmChr;
|
||||
struct ResAnmVis;
|
||||
struct ResAnmClr;
|
||||
struct ResAnmTexPat;
|
||||
struct ResAnmTexSrt;
|
||||
struct ResAnmShp;
|
||||
struct ResAnmScn;
|
||||
struct ResAnmFog;
|
||||
struct ResAnmCamera;
|
||||
struct ResVtxPos;
|
||||
struct ResVtxNrm;
|
||||
struct ResVtxClr;
|
||||
struct ResVtxTexCoord;
|
||||
struct ClrAnmResult;
|
||||
struct TexPatAnmResult;
|
||||
struct TexSrtAnmResult;
|
||||
struct ScnMdl1Mat1Shp;
|
||||
struct TexSrt;
|
||||
struct TexSrtTypedef;
|
||||
struct LightObj;
|
||||
struct LightAnmResult;
|
||||
struct LightSet;
|
||||
struct LightSetting;
|
||||
struct LightSetData;
|
||||
struct AmbLightObj;
|
||||
struct AmbLightAnmResult;
|
||||
struct Fog;
|
||||
struct ScnRoot;
|
||||
struct ScnProc;
|
||||
struct ScnLeaf;
|
||||
struct ScnObj;
|
||||
struct ScnRfl;
|
||||
struct ScnGroup;
|
||||
struct ScnMdlSimple;
|
||||
struct ScnMdl;
|
||||
struct IScnObjGather;
|
||||
struct IScnObjCallback;
|
||||
|
||||
namespace G3DState {
|
||||
struct IndMtxOp;
|
||||
}
|
||||
} // namespace g3d
|
||||
|
||||
namespace lyt {
|
||||
struct Size;
|
||||
|
||||
namespace detail {
|
||||
struct PaneBase;
|
||||
struct TexCoordAry;
|
||||
} // namespace detail
|
||||
|
||||
namespace res {
|
||||
struct Group;
|
||||
struct Pane;
|
||||
struct Bounding;
|
||||
struct AnimationBlock;
|
||||
struct BinaryFileHeader;
|
||||
} // namespace res
|
||||
|
||||
struct Group;
|
||||
struct GroupContainer;
|
||||
struct Pane;
|
||||
struct DrawInfo;
|
||||
struct AnimResource;
|
||||
struct AnimTransform;
|
||||
struct AnimTransformBasic;
|
||||
struct AnimationLink;
|
||||
struct ResourceAccessor;
|
||||
struct ArcResourceAccessor;
|
||||
struct FontRefLink;
|
||||
struct Material;
|
||||
struct Layout;
|
||||
struct Bounding;
|
||||
struct ResBlockSet;
|
||||
struct TexMap;
|
||||
} // namespace lyt
|
||||
} // namespace nw4r
|
||||
|
||||
#endif
|
||||
@@ -1,5 +1,6 @@
|
||||
#ifndef NW4R_TYPES_H
|
||||
#define NW4R_TYPES_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define NW4R_BYTEORDER_BIG 0xFEFF
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
#ifndef RVL_SDK_OS_ERROR_H
|
||||
#define RVL_SDK_OS_ERROR_H
|
||||
|
||||
#include "__va_arg.h"
|
||||
#include "common.h"
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// Forward declarations
|
||||
typedef struct OSContext;
|
||||
typedef struct OSContext OSContext;
|
||||
|
||||
#define OSError(...) OSPanic(__FILE__, __LINE__, __VA_ARGS__)
|
||||
#define OSAssert(exp, ...) \
|
||||
|
||||
@@ -25,10 +25,8 @@
|
||||
mStateMgr.getStateID(); \
|
||||
}
|
||||
|
||||
#define UI_STATE_MGR_DECLARE(class_name) \
|
||||
sFStateMgr_c<class_name, sStateMethodUsr_FI_c> mStateMgr;
|
||||
#define UI_STATE_MGR_DECLARE(class_name) sFStateMgr_c<class_name, sStateMethodUsr_FI_c> mStateMgr;
|
||||
|
||||
#define STATE_MGR(class_name) \
|
||||
sFStateMgr_c<class_name, sStateMethodUsr_FI_c>
|
||||
#define STATE_MGR(class_name) sFStateMgr_c<class_name, sStateMethodUsr_FI_c>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -18,6 +18,8 @@ public:
|
||||
mpOwner = owner;
|
||||
}
|
||||
|
||||
void remove(bool);
|
||||
|
||||
private:
|
||||
u8 field_0x20[0x28 - 0x20];
|
||||
/* 0x28 */ dBase_c *mpOwner;
|
||||
|
||||
Reference in New Issue
Block a user