Merge pull request #312 from elijah-thomas774/d_a_e_ks

dAcEKs_c
This commit is contained in:
Elijah Thomas
2026-05-28 14:32:52 -04:00
committed by GitHub
26 changed files with 3724 additions and 209 deletions
+1
View File
@@ -12,6 +12,7 @@ s16 offsetPos(mVec3_c &target, const mVec3_c &v1, s16 angle, const mVec3_c &v2);
void addCalcPos2(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep);
f32 addCalcPosXZ(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f32 minStep);
f32 addCalcPos(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f32 minStep);
bool chasePos(mVec3_c &, mVec3_c &, f32);
bool chasePosXZ(mVec3_c &, mVec3_c &, f32);
// made up name
-4
View File
@@ -91,10 +91,6 @@ public:
return mHeldResFile;
}
inline bool hasvt_0x1C0() const {
return vt_0x1C0() != nullptr;
}
inline bool isAffectedByStaminaPotion() const {
return FileManager::GetInstance()->hasStaminaPotionNormal() && getRidingActorType() != RIDING_BOAT;
}
+280 -1
View File
@@ -1,14 +1,35 @@
#ifndef D_A_E_KS_H
#define D_A_E_KS_H
#include "common.h"
#include "d/a/d_a_base.h"
#include "d/a/e/d_a_en_base.h"
#include "d/col/bg/d_bg_s_acch.h"
#include "d/col/cc/d_cc_d.h"
#include "d/d_light_env.h"
#include "m/m3d/m_anmtexpat.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
#include "toBeSorted/d_emitter.h"
#include "toBeSorted/d_path.h"
#include "toBeSorted/time_area_mgr.h"
class dTgKiesuTag_c;
class dAcEKs_c : public dAcEnBase_c {
public:
dAcEKs_c() : mStateMgr(*this) {}
virtual ~dAcEKs_c() {}
virtual int doDelete() override;
virtual int draw() override;
virtual bool createHeap() override;
virtual int actorCreate() override;
virtual int actorPostCreate() override;
virtual int actorExecute() override;
virtual bool restorePosRotFromCopy() override;
STATE_FUNC_DECLARE(dAcEKs_c, Wait);
STATE_FUNC_DECLARE(dAcEKs_c, WakeUp);
STATE_FUNC_DECLARE(dAcEKs_c, ReturnToWait);
@@ -24,8 +45,266 @@ public:
STATE_FUNC_DECLARE(dAcEKs_c, WindBlow);
STATE_FUNC_DECLARE(dAcEKs_c, PathMove);
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcEKs_c);
STATE_MGR_DEFINE_UTIL_ISSTATE(dAcEKs_c);
enum Type_e {
EKS_NORMAL,
EKS_FIRE,
EKS_ELECTRIC,
EKS_CURSED,
};
enum StartingStateParam_e {
EKS_STARTSTATE_Move = 0,
EKS_STARTSTATE_Wait = 1,
EKS_STARTSTATE_PathMove = 2,
};
enum State_e {
EKS_STATE_Move = 0,
EKS_STATE_Wait = 1,
EKS_STATE_PathMove = 2,
EKS_STATE_WakeUp = 4,
EKS_STATE_ReturnToWait = 5,
EKS_STATE_Chase = 6,
EKS_STATE_ChaseAttack = 7,
EKS_STATE_Fighting = 8,
EKS_STATE_AttackReady = 9,
EKS_STATE_Attack = 10,
EKS_STATE_Damage = 11,
EKS_STATE_Stun = 12,
EKS_STATE_WindBlow = 13,
};
enum AnmTexPat_e {
EKS_TEXPAT_BLINK1,
EKS_TEXPAT_BLINK2,
EKS_TEXPAT_BLINK3,
};
public:
void linkKiesuTag(dTgKiesuTag_c *pTgKs);
void setStartingState();
void setIdleState();
void fn_155_A60();
f32 getLineCrossYRange(const mVec3_c &pos, f32 range);
void kill(bool dropItem);
void chaseTargetY(f32, f32);
void playBlinkAnm();
void soundSqueak();
void soundStun();
void fn_155_1430();
void fn_155_1470();
// Move impl?
void fn_155_1C80();
/* 0 -> blink_1, 1 -> blink_2, 2 -> blink_3*/
void setBlink(u8 blink);
void setBlinkChecked(u8 blink);
void fn_155_2270();
/* p1 = 0 -> just LineCross return check, 1 -> increment field_0xDCB till 10 then return check*/
bool fn_155_29D0(s32 p1);
bool fn_155_2B80(bool b, s32 p1);
bool fn_155_2D60(bool b, s32 p1);
bool fn_155_2EA0();
bool isOutsideRange();
bool isNotWaitingNorDamage();
bool isTargeted();
bool checkWallCross();
void adjustTargetGnd();
void adjustTargetRoof();
bool ChkHit();
void fn_155_3460();
void fn_155_3480();
bool transitionToNextState();
void setAnim(char *, f32, f32, f32);
void fn_155_3720(f32, f32);
void fn_155_3750(u8 state);
void fn_155_37A0();
void fn_155_37F0();
void fn_155_3840();
void fn_155_3890();
void on_lbl_155_bss_389();
/* 0: Checks states to set AC_PROP_0x1 - 1: Unset AC_PROP_0x1*/
void fn_155_3900(s32 p0);
void setPitchYawToPoint(const mVec3_c &pnt);
void fn_155_3BD0(const mVec3_c &);
void fn_155_3BE0(const mVec3_c &);
void clampRotationX();
bool checkPathPntParam(u32 param);
void fn_155_3E30();
void fn_155_3E90();
void fn_155_3EC0();
/* Some Timestone Check */
bool fn_155_3EF0();
void fn_155_3F50();
private:
/* 0x??? */ STATE_MGR_DECLARE(dAcEKs_c);
/* 0x378 */ dAcRef_c<dTgKiesuTag_c> mTgRef;
/* 0x384 */ nw4r::g3d::ResFile mResFile;
/* 0x388 */ d3d::AnmMdlWrapper mMdl;
/* 0x3F8 */ m3d::anmTexPat_c mAnmTexPat;
/* 0x324 */ dShadowCircle_c mShadow;
/* 0x42C */ dBgS_AcchCir mAcchCir;
/* 0x488 */ dBgS_ObjAcch mAcch;
/* 0x838 */ dCcD_Sph mSph;
/* 0x988 */ STATE_MGR_DECLARE(dAcEKs_c);
/* 0x9C4 */ dEmitter_c mEmitter1;
/* 0x9F8 */ dEmitter_c mEmitter2;
/* 0xA2C */ dWaterEffect_c mWaterEmitter;
/* 0xA74 */ ActorOnRail_Ext mRail;
/* 0xAA8 */ TimeAreaStruct mTimeArea;
/* 0xAB4 */ mMtx_c mCenterWorldMtx;
/* 0xAE4 */ mMtx_c field_0xAE4;
/* 0xB14 */ mVec3_c mPnts[10];
/* 0xB8C */ mVec3_c field_0xB8C;
/* 0xB98 */ mVec3_c field_0xB98;
/* 0xBA4 */ mVec3_c field_0xBA4;
/* 0xBB0 */ mVec3_c mTargetPos;
/* 0xBBC */ mVec3_c field_0xBBC;
/* 0xBC8 */ mVec3_c field_0xBC8;
/* 0xBD4 */ mVec3_c field_0xBD4;
/* 0xBE0 */ mVec3_c field_0xBE0;
/* 0xBEC */ mVec3_c field_0xBEC;
/* 0xBF8 */ mVec3_c field_0xBF8;
/* 0xC04 */ mVec3_c field_0xC04;
/* 0xC10 */ mVec3_c field_0xC10;
/* 0xC1C */ mVec3_c field_0xC1C;
/* 0xC28 */ mVec3_c field_0xC28;
/* 0xC34 */ mAng mPitch_0xC34;
/* 0xC36 */ mAng mYaw_0xC36;
/* 0xC38 */ u8 _0xC38[0xC3C - 0xC38];
/* 0xC3C */ f32 field_0xC3C;
/* 0xC40 */ f32 field_0xC40;
/* 0xC44 */ f32 field_0xC44;
/* 0xC48 */ f32 field_0xC48;
/* 0xC4C */ u8 _0xC4C[0xC70 - 0xC4C];
/* 0xC70 */ f32 field_0xC70;
/* 0xC74 */ u8 _0xC74[0xC90 - 0xC74];
/* 0xC90 */ f32 field_0xC90;
/* 0xC94 */ u8 _0xC94[0xCE0 - 0xC94];
/* 0xCE0 */ f32 field_0xCE0;
/* 0xCE4 */ f32 field_0xCE4;
/* 0xCE8 */ u8 _0xCE8[0xCF8 - 0xCE8];
/* 0xCF8 */ f32 field_0xCF8;
/* 0xCFC */ f32 field_0xCFC;
/* 0xD00 */ f32 field_0xD00;
/* 0xD04 */ f32 field_0xD04;
/* 0xD08 */ f32 field_0xD08;
/* 0xD0C */ f32 field_0xD0C;
/* 0xD10 */ f32 field_0xD10;
/* 0xD14 */ f32 field_0xD14;
/* 0xD18 */ f32 field_0xD18;
/* 0xD1C */ f32 field_0xD1C;
/* 0xD20 */ f32 field_0xD20;
/* 0xD24 */ f32 field_0xD24;
/* 0xD28 */ f32 field_0xD28;
/* 0xD2C */ u32 mCenterNode;
/* 0xD30 */ u8 field_0xD30;
/* 0xD31 */ u8 field_0xD31;
/* 0xD32 */ u16 mTimer;
/* 0xD34 */ u8 _0xD34[0xD4A - 0xD34];
/* 0xD4A */ s16 field_0xD4A;
/* 0xD4C */ s16 field_0xD4C;
/* 0xD4E */ s16 field_0xD4E;
/* 0xD50 */ s16 field_0xD50;
/* 0xD52 */ s16 field_0xD52;
/* 0xD54 */ s16 field_0xD54;
/* 0xD56 */ s16 field_0xD56;
/* 0xD58 */ s16 field_0xD58;
/* 0xD5A */ s16 field_0xD5A;
/* 0xD5C */ s16 field_0xD5C;
/* 0xD5E */ s16 field_0xD5E;
/* 0xD60 */ s16 field_0xD60;
/* 0xD62 */ s16 field_0xD62;
/* 0xD64 */ s16 field_0xD64;
/* 0xD66 */ s16 field_0xD66;
/* 0xD68 */ s16 field_0xD68;
/* 0xD6A */ s16 field_0xD6A;
/* 0xD6C */ s16 field_0xD6C;
/* 0xD6E */ s16 field_0xD6E;
/* 0xD70 */ s16 field_0xD70;
/* 0xD72 */ s16 field_0xD72;
/* 0xD74 */ s16 field_0xD74;
/* 0xD76 */ s16 field_0xD76;
/* 0xD78 */ s16 mBlinkTimer;
/* 0xD7A */ u16 field_0xD7A;
/* 0xD7C */ s16 field_0xD7C;
/* 0xD7E */ s16 mSqueakSoundTimer;
/* 0xD80 */ s16 mStunSoundTimer;
/* 0xD82 */ s16 field_0xD82;
/* 0xD84 */ s16 field_0xD84;
/* 0xD86 */ s16 field_0xD86;
/* 0xD88 */ s16 field_0xD88;
/* 0xD8A */ s16 field_0xD8A;
/* 0xD8C */ s16 field_0xD8C;
/* 0xD8E */ u16 field_0xD8E;
/* 0xD90 */ s16 field_0xD90;
/* 0xD92 */ s16 field_0xD92;
/* 0xD94 */ s16 field_0xD94;
/* 0xD96 */ s16 field_0xD96;
/* 0xD98 */ s16 field_0xD98;
/* 0xD9A */ s16 field_0xD9A;
/* 0xD9C */ s16 field_0xD9C;
/* 0xD9E */ s16 field_0xD9E;
/* 0xDA0 */ s16 field_0xDA0;
/* 0xDA2 */ s16 field_0xDA2;
/* 0xDA4 */ u8 field_0xDA4;
/* 0xDA5 */ u8 field_0xDA5;
/* 0xDA6 */ u8 field_0xDA6;
/* 0xDA7 */ u8 field_0xDA7;
/* 0xDA8 */ u8 field_0xDA8;
/* 0xDA9 */ u8 field_0xDA9;
/* 0xDAA */ u8 field_0xDAA;
/* 0xDAB */ u8 field_0xDAB;
/* 0xDAC */ u8 field_0xDAC;
/* 0xDAD */ u8 field_0xDAD;
/* 0xDAE */ u8 field_0xDAE;
/* 0xDAF */ u8 field_0xDAF;
/* 0xDB0 */ u8 field_0xDB0;
/* 0xDB1 */ u8 field_0xDB1;
/* 0xDB2 */ u8 field_0xDB2;
/* 0xDB3 */ u8 field_0xDB3;
/* 0xDB4 */ u8 field_0xDB4;
/* 0xDB5 */ u8 field_0xDB5;
/* 0xDB6 */ u8 field_0xDB6;
/* 0xDB7 */ u8 field_0xDB7;
/* 0xDB8 */ u8 field_0xDB8;
/* 0xDB9 */ u8 field_0xDB9;
/* 0xDBA */ u8 field_0xDBA;
/* 0xDBB */ u8 field_0xDBB;
/* 0xDBC */ u8 mType;
/* 0xDBD */ u8 field_0xDBD;
/* 0xDBE */ u8 field_0xDBE;
/* 0xDBF */ u8 field_0xDBF;
/* 0xDC0 */ u8 mCurrentAnmTexPat; // blink
/* 0xDC1 */ u8 field_0xDC1;
/* 0xDC2 */ u8 mCurrentState;
/* 0xDC3 */ u8 mNextState;
/* 0xDC4 */ u8 field_0xDC4;
/* 0xDC5 */ u8 field_0xDC5;
/* 0xDC6 */ u8 field_0xDC6;
/* 0xDC7 */ u8 mStartingState;
/* 0xDC8 */ u8 field_0xDC8;
/* 0xDC9 */ u8 field_0xDC9;
/* 0xDCA */ u8 field_0xDCA;
/* 0xDCB */ u8 field_0xDCB;
/* 0xDCC */ u8 field_0xDCC;
/* 0xDCD */ u8 field_0xDCD;
/* 0xDCE */ u8 field_0xDCE;
/* 0xDCF */ u8 field_0xDCF;
/* 0xDD0 */ u8 field_0xDD0;
/* 0xDD4 */ LIGHT_INFLUENCE mLightInfluence;
// Controlled by dTgKiesuTag_c
static bool lbl_155_bss_388;
static bool lbl_155_bss_389;
};
#endif
+14 -5
View File
@@ -51,12 +51,14 @@ public:
/* 0x33C */ u32 mInteractionFlags;
/* 0x340 */ u16 field_0x338;
/* 0x342 */ u16 mHealth;
/* 0x344 */ u8 _344[0x358 - 0x344];
/* 0x344 */ u8 _0x344[0x346 - 0x344];
/* 0x346 */ u8 field_0x346;
/* 0x347 */ u8 _0x347[0x358 - 0x347];
/* 0x358 */ mVec3_c mFinalBlowPosition;
/* 0x364 */ u8 _364[0x374 - 0x364];
/* 0x364 */ u8 _0x364[0x374 - 0x364];
/* 0x374 */ dAcEnData *mpEnemyData;
bool checkInteractionFlags(u32 mask) {
bool checkInteractionFlags(u32 mask) const {
return mInteractionFlags & mask;
}
void setInteractionFlags(u32 flag) {
@@ -65,9 +67,15 @@ public:
void resetInteractionFlags(u32 flag) {
mInteractionFlags &= ~flag;
}
void setFinalBlowPosition(const mVec3_c &v) {
mFinalBlowPosition = v;
}
dAcBomb_c *getBombWithinRadius(f32 radius); // fn_8002f700
void playDeathEffect0(const mVec3_c &pos, const mVec3_c *pScale, bool skipKill);
void playDeathEffect1(const mVec3_c &pos, const mVec3_c *pScale, bool skipKill);
// Deals with dealing damage to Enemy
// Returns a value 0-13 (similar to mStts rank?)
int fn_8002FDE0(cCcD_Obj &mCc, u16 *pTgOut);
@@ -75,9 +83,10 @@ public:
// Returns 0-3 based on collision
int fn_800301b0(const mVec3_c &pos, mAng ang, bool, f32);
void fn_80030400(m3d::mdl_c &, u8, bool, u8);
void fn_800306d0();
bool fn_80030570(m3d::mdl_c &, u8, f32); // lighting related
void fn_800306D0();
void fn_80030700();
dAcObjBase_c *targetPlayerOrScrapper(f32 biasToScrapper);
static void fn_80030980(m3d::mdl_c &, s32, bool markDirty);
void fn_80030c20(u32 flags, f32, f32, f32, f32);
+3
View File
@@ -101,6 +101,9 @@ public:
mVec3_c &getStartingPosition() {
return mStartingPos;
}
const mVec3_c &getStartingPos() const {
return mStartingPos;
}
void setStartingPosition(const mVec3_c &v) {
mStartingPos = v;
}
+17 -1
View File
@@ -680,6 +680,10 @@ public:
mSrc.mInfo.field_0x2 |= val;
}
void Set_0x50(u32 val) {
field_0x50 = val;
}
public:
/* 0x1C */ cCcD_SrcGObjTg mSrc;
/* 0x2C */ mVec3_c mAtHitDir;
@@ -809,7 +813,7 @@ public:
bool ChkTgBit23() const;
bool ChkTgBit24() const;
bool ChkTgBit25() const;
u16 GetTgSoundID() const;
s32 GetTgSoundID() const;
s16 GetTg_0x6A() const;
bool ChkTgBit8() const;
u8 GetTg_0x4A() const;
@@ -1082,6 +1086,9 @@ public:
void OnTgInfo_0x2(u16 val) {
mTg.OnInfo_0x2(val);
}
void SetTg_0x50(u16 val) {
mTg.Set_0x50(val);
}
void SetTg_0x40000000() {
mTg.OnSPrm(0x40000000);
}
@@ -1108,9 +1115,18 @@ public:
void ClrCo_0x400() {
mCo.OffSPrm(0x400);
}
void OnCo_0x8000() {
mCo.OnSPrm(0x8000);
}
void ClrCo_0x8000() {
mCo.OffSPrm(0x8000);
}
void SetCo_0x400() {
mCo.OnSPrm(0x400);
}
void SetCo_0x8000() {
mCo.OnSPrm(0x8000);
}
void SetCo_0x40000000() {
mCo.OnSPrm(0x40000000);
}
+5 -3
View File
@@ -250,7 +250,9 @@ public:
/* vt 0x1BC */ virtual UNKWORD vt_0x1BC() {
return 0;
}
/* vt 0x1C0 */ virtual void *vt_0x1C0() const {
// I believe this can only return the Beetle Actor in-flight (not on hand)
/* vt 0x1C0 */ virtual dAcObjBase_c *getBeetleInFlight() const {
return nullptr;
}
/* vt 0x1C4 */ virtual UNKWORD getActorInActorRef1() {
@@ -648,8 +650,8 @@ public:
return mSpecificAttackDirection;
}
inline bool hasvt_0x1C0() const {
return vt_0x1C0() != nullptr;
inline bool isBeetleInFlight() const {
return getBeetleInFlight() != nullptr;
}
static s32 getCurrentSwordTypeInline() {
+2
View File
@@ -25,6 +25,8 @@ bool swapStockItems(s32 slot1, s32 slot2);
void sortStock();
bool tryDropItem(f32 chance);
#define ITEM_CHECK_SLOT_NONE 60
u16 itemCheckFindItemSlot(ITEM_ID item);
+102 -1
View File
@@ -1,9 +1,16 @@
#ifndef D_T_KS_H
#define D_T_KS_H
#include "d/a/d_a_base.h"
#include "d/t/d_tg.h"
#include "m/m_angle.h"
#include "m/m_mtx.h"
#include "m/m_vec.h"
#include "s/s_State.hpp"
#include "toBeSorted/d_path.h"
#include "toBeSorted/time_area_mgr.h"
class dAcEKs_c;
class dTgKiesuTag_c : public dTg_c {
public:
dTgKiesuTag_c() : mStateMgr(*this) {}
@@ -17,8 +24,102 @@ public:
STATE_FUNC_DECLARE(dTgKiesuTag_c, ControlPathMove);
STATE_FUNC_DECLARE(dTgKiesuTag_c, DoNothing);
/* fn_154_8B0 */
mVec3_c &getSpawnKsPosition();
void incrementField_0x456() {
field_0x456++;
}
void setField_0x47A() {
field_0x47A = true;
}
private:
/* 0x??? */ STATE_MGR_DECLARE(dTgKiesuTag_c);
/* 0x0FC */ STATE_MGR_DECLARE(dTgKiesuTag_c);
/* 0x138 */ dAcRef_c<dAcEKs_c> mKsRefs[16];
/* 0x1F8 */ mMtx_c mAreaMtx;
/* 0x228 */ ActorOnRail_Ext mRail;
/* 0x25C */ TimeAreaStruct mTimeArea;
/* 0x268 */ mMtx_c field_0x268;
/* 0x298 */ u8 _0x298[0x31C - 0x298];
/* 0x31C */ mVec3_c field_0x31C;
/* 0x328 */ mVec3_c field_0x328;
/* 0x334 */ mVec3_c field_0x334;
/* 0x340 */ mVec3_c field_0x340;
/* 0x34C */ mVec3_c field_0x34C;
/* 0x358 */ u8 _0x358[0x37C - 0x358];
/* 0x37C */ mVec3_c mTargetPosition;
/* 0x388 */ mVec3_c mSpawnKsPosition;
/* 0x394 */ u8 _0x394[0x3A0 - 0x394];
/* 0x3A0 */ mAng3_c mSpawnKsAngle;
/* 0x3A8 */ mAng3_c field_0x3A8;
/* 0x3AC */ mAng field_0x3AC; // pitch
/* 0x3AE */ mAng field_0x3AE; // yaw
/* 0x3B0 */ u8 _0x3B0[0x3B4 - 0x3B0];
/* 0x3B4 */ f32 field_0x3B4;
/* 0x3B8 */ f32 field_0x3B8; // Y pos offset
/* 0x3BC */ f32 field_0x3BC; // X/Z scale
/* 0x3C0 */ f32 field_0x3C0; // Y scale
/* 0x3C4 */ u8 _0x3C4[0x3D8 - 0x3C4];
/* 0x3D8 */ f32 field_0x3D8; // Y scale
/* 0x3DC */ f32 field_0x3DC; // X/Z scale
/* 0x3E0 */ u8 _0x3E0[0x3EC - 0x3E0];
/* 0x3EC */ mVec3_c field_0x3EC;
/* 0x3F8 */ u8 _0x3F8[0x448 - 0x3F8];
/* 0x448 */ s16 field_0x448;
// Related to Control?
/* 0x44A */ s16 mNumKsControl;
/* 0x44C */ s16 field_0x44C;
/* 0x44E */ s16 field_0x44E;
/* 0x450 */ s16 field_0x450;
// Related to ControlFighting?
/* 0x452 */ s16 field_0x452;
/* 0x454 */ s16 field_0x454;
/* 0x456 */ s16 field_0x456;
/* 0x458 */ s16 field_0x458;
/* 0x45A */ s16 field_0x45A;
/* 0x45C */ s16 field_0x45C;
/* 0x45E */ s16 field_0x45E;
/* 0x460 */ s16 field_0x460;
/* 0x462 */ s16 mMaxKsToLink;
/* 0x464 */ u8 _0x464[0x468 - 0x464];
/* 0x468 */ s16 field_0x468;
/* 0x46A */ s16 field_0x46A;
/* 0x46C */ s16 mNumKsAlive;
/* 0x46E */ s16 field435_0x46e;
/* 0x470 */ u8 _0x470[0x474 - 0x470];
/* 0x474 */ bool field_0x474;
/* 0x475 */ u8 _0x475[0x47A - 0x475];
/* 0x47A */ bool field_0x47A;
/* 0x47E */ bool mbAllKsActive;
/* 0x48A */ u8 field_0x48A; // Related to getting spawnPos/ Type?
/* 0x48E */ u8 mNumKsActive;
};
#endif
+3
View File
@@ -92,6 +92,9 @@ public:
u32 getFromParams(u8 shift, u32 mask) {
return (mParams >> shift) & mask;
}
f32 getFromParams(u8 shift, u32 mask, f32 scale) {
return ((mParams >> shift) & mask) * scale;
}
public:
fBase_c();
+20 -14
View File
@@ -59,6 +59,11 @@ public:
return mpPathPtr->pointCount;
}
s32 getLastPointIdx() const {
s32 pnt = getNumPoints() - 1;
return pnt >= 0 ? pnt : 0;
}
bool initWithPathId(s32 pathId, s32 roomId, bool pathSubtype);
bool initWithPathIndex(s32 pathIndex, s32 roomId, bool pathSubtype);
@@ -118,18 +123,6 @@ public:
return mSegmentTime;
}
bool CheckFlag(u32 flag) const {
return (mFlags & flag) != 0;
}
void ClearFlag(u32 flag) {
mFlags &= ~flag;
}
void SetFlag(u32 flag) {
mFlags |= flag;
}
const mVec3_c &getPosition() const {
return mPosition;
}
@@ -138,22 +131,35 @@ public:
mSpeed = speed;
}
f32 getSpeed() const {
return mSpeed;
}
void getDirection(mVec3_c &result) {
mPath.getDirection(mSegmentIndex, mSegmentTime, result);
}
const mVec3_c *getPoint(s32 idx) const {
return reinterpret_cast<const mVec3_c *>(mPath.getPoint(idx));
}
bool checkFlag(u32 flags) const {
return (mFlags & flags) != 0;
}
void offFlag(u32 flags) {
void unsetFlag(u32 flags) {
mFlags &= ~flags;
}
void onFlag(u32 flags) {
void setFlag(u32 flags) {
mFlags |= flags;
}
const dPath_c &getPath() const {
return mPath;
}
s32 getNextPointIndex2() const;
private:
s32 getNextPointIndex(s32 point) const;
s32 getNextPointIndex() const;