OROCHI
 
Loading...
Searching...
No Matches
GxUnitCharacterBase.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12GX_CHARACTER_NAMESPACE_BEGIN()
13
14class GxFlock;
15
16//===========================================================================
18//===========================================================================
20{
21 //-----------------------------------------------------------
23 //-----------------------------------------------------------
25public:
26 // RTTI定義
27 GX_RTTI_CLASS_NAME_ICON(GxUnitCharacterBase, GxUnitMotion, "キャラクタ基礎", GxRtti::ICON_TYPE::UNIT_PLAYER)
28 // GxClassBaseReference継承クラス用禁止宣言
30
31
32 static constexpr u32 DERIVED_CLASS_MAX = GxMath::VALUE_256;
34 static constexpr u32 ACTION_STATUS_ALL = 0xFFFFF000;
36 static constexpr u32 ACTION_STATUS_SHIFT = 0x1000;
38 static constexpr u32 ACTION_NUMBER_MAX = GxMath::VALUE_4;
39
41 class GxAction : public GxClassBase
42 {
43 //-----------------------------------------------------------
45 //-----------------------------------------------------------
47 public:
48 // RTTI定義
49 GX_RTTI_CLASS(GxAction, GxClassBase)
51 static const f32 INVALID_TIME;
52
54 //-----------------------------------------------------------
56 //-----------------------------------------------------------
58 private:
60 GxAction(void) : _time(0.f){}
61 public:
63 GxAction(u32 number0, u32 number1 = 0, u32 number2 = 0, u32 number3 = 0);
65 GX_FORCE_INLINE b32 operator == (const GxAction& action) const { return _number == action._number; }
66
68 //-----------------------------------------------------------
70 //-----------------------------------------------------------
72
73 union
74 {
75 u32 _number;
76 struct
77 {
78#if GX_BITFIELD_LITTLEENDIAN
79 u32 _number0 : 8;
80 u32 _number1 : 8;
81 u32 _number2 : 8;
82 u32 _number3 : 8;
83#else //GX_BITFIELD_LITTLEENDIAN
84 u32 _number3 : 8;
85 u32 _number2 : 8;
86 u32 _number1 : 8;
87 u32 _number0 : 8;
88#endif // !GX_BITFIELD_LITTLEENDIAN
89 };
90 };
91 f32 _time;
93
95 };
96
98 static constexpr s32 INVALID_PLAYER_NUMBER = -1;
100 static constexpr u32 INVALID_SOUND_CHAR_ID = 0xFFFFFFFF;
101
103 //-----------------------------------------------------------
105 //-----------------------------------------------------------
107
111 void cleanup(void) override;
112
114 //-----------------------------------------------------------
116 //-----------------------------------------------------------
118protected:
120 b32 setup(void) override;
122 void preAsyncUpdate(void) override;
123
124public:
126 void kill(void) override;
127
129 GX_FORCE_INLINE virtual void backgroundHitCallback(void) {}
131 GX_FORCE_INLINE virtual void objectHitCallback(void) {}
133 virtual void attackHitCallback(GxAttackHit::GxObject* pObject);
135 GX_FORCE_INLINE virtual void attackHitCallbackAttack(GxAttackHit::GxObject* /*pObject*/) {}
137 GX_FORCE_INLINE virtual void attackHitCallbackDamage(GxAttackHit::GxObject* /*pObject*/) {}
139 GX_FORCE_INLINE virtual void eventHitCallback(GxEventHit::GxObject* /*pObject*/) {};
140
142 void setPad(b32 flag);
144 void setPadNo(GxSysInput::DEVICE device, b32 changeForceFlag = true);
145
146protected:
148 virtual void updateInitialize(void);
150 GX_FORCE_INLINE virtual void updateInitializeActionChange(void){}
152 virtual void updateThink(void);
154 virtual void updateThinkControl(void);
156 GX_FORCE_INLINE virtual void updateThinkAI(void){};
158 GX_FORCE_INLINE virtual void updateAction(void){};
159
160#if GX_DEVELOP
162 void developRender(void) override;
164 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index = 0);
166 void iconRender(void) override;
168 void addUnitOwnProperty(GxPropertyTable& propertyTable) override;
169#endif // GX_DEVELOP
170
171private:
173 void updatePadValue(void);
175 GxVector3 getAnalogStickWorldVector(f32 rateX, f32 rateY) const;
176
178 //-----------------------------------------------------------
180 //-----------------------------------------------------------
182public:
184 GX_FORCE_INLINE const GxAction& getAction(void) const { return _action; }
186 void setAction(u32 action0, u32 action1 = 0, u32 action2 = 0, u32 action3 = 0);
188 GX_FORCE_INLINE void setAction(const GxAction& action){ _action = action; }
190 constexpr u32 getActionStatus(void) const { return _actionStatus; }
192 constexpr void setActionStatus(u32 actionStatus){ _actionStatus = actionStatus; }
194 GX_FORCE_INLINE b32 isActionStatus(u32 actionStatus) const { return _actionStatus == actionStatus; }
196 GX_FORCE_INLINE b32 isActionStatusBit(u32 actionStatus) const { return (_actionStatus & actionStatus) ? true : false; }
197
199 constexpr s32 getPlayerNumber(void) const { return _playerNumber; }
201 constexpr void setPlayerNumber(s32 number){ _playerNumber = number; }
203 constexpr GxPad* getPad(void) const { return _pPad; }
205 b32 isPad(void) const { return _pPad ? true : false; }
207 constexpr GxUnitCameraBase* getCamera(void) const { return _pCamera; }
209 constexpr void setCamera(GxUnitCameraBase* pCamera){ _pCamera = pCamera; }
211 GX_FORCE_INLINE GxVector3 getPadWorldVectorLeft(void) const { return _padWorldVectorLeft; }
213 GX_FORCE_INLINE GxVector3 getPadWorldVectorRight(void) const { return _padWorldVectorRight; }
214
216 GX_FORCE_INLINE const GxVector3& getMoveDirect(void) const { return _moveDirect; }
218 GX_FORCE_INLINE void setMoveDirect(const GxVector3& direct){ _moveDirect = direct; }
220 constexpr f32 getMoveSpeed(void) const { return _moveSpeed; }
222 constexpr void setMoveSpeed(f32 speed){ _moveSpeed = speed; }
224 constexpr f32 getRotateSpeed(void) const { return _rotateSpeed; }
226 constexpr void setRotateSpeed(f32 speed){ _rotateSpeed = speed; }
228 constexpr GxUnitCharacterBase* getMoveTarget(void) const { return _pMoveTarget; }
230 constexpr void setMoveTarget(GxUnitCharacterBase* pUnit){ _pMoveTarget = pUnit; }
232 GX_FORCE_INLINE f32 getMoveTargetDistance(void) const { return (_pMoveTarget->getLocalPosition() - getLocalPosition()).getLength(); }
234 constexpr GxFlock* getFlock(void) const { return _pFlock; }
236 constexpr void setFlock(GxFlock* pFlock){ _pFlock = pFlock; }
238 void setLeader(void);
240 GX_FORCE_INLINE GxVector3 getOldPosition(void) const { return _oldPosition; }
241
243 const GxVector3 getDirectVectorX(void) const;
245 const GxVector3 getDirectVectorZ(void) const;
247 GX_FORCE_INLINE f32 getDistance(GxUnitCharacterBase* pUnit) const { return (pUnit->getLocalPosition() - getLocalPosition()).getLength(); }
249 GX_FORCE_INLINE f32 getDistanceV(GxUnitCharacterBase* pUnit) const { return GxMath::getAbs(pUnit->getLocalPosition()._y - getLocalPosition()._y); }
251 GX_FORCE_INLINE f32 getDistanceH(GxUnitCharacterBase* pUnit) const { return (GxVector2(pUnit->getLocalPosition()._x, pUnit->getLocalPosition()._z) - GxVector2(getLocalPosition()._x, getLocalPosition()._z)).getLength(); }
253 GX_FORCE_INLINE f32 getAngleV(GxUnitCharacterBase* pUnit) const { return GxVector3::getAngle(pUnit->getLocalPosition() - getLocalPosition(), GxVector3(pUnit->getLocalPosition()._x, getLocalPosition()._y, pUnit->getLocalPosition()._z) - getLocalPosition()); }
255 GX_FORCE_INLINE f32 getAngleH(GxUnitCharacterBase* pUnit) const { return GxVector3::getAngle(getDirectVectorZ(), GxVector3(pUnit->getLocalPosition()._x, getLocalPosition()._y, pUnit->getLocalPosition()._z) - getLocalPosition()); }
256
258 constexpr f32 getLifeMax(void) const { return _lifeMax; }
260 constexpr void setLifeMax(f32 lifeMax){ _lifeMax = lifeMax; }
262 constexpr void addLifeMax(f32 add){ _lifeMax += add; }
264 constexpr f32 getLife(void) const { return _life; }
266 GX_FORCE_INLINE void setLife(f32 life){ _life = GxMath::getMin(life, _lifeMax); }
268 GX_FORCE_INLINE void addLife(f32 add){ _life = GxMath::getMin(_life + add, _lifeMax); }
270 constexpr f32 getLifeRate(void) const { return (_lifeMax == 0.0f) ? 0.0f : (_life / _lifeMax); }
271
273 //-----------------------------------------------------------
275 //-----------------------------------------------------------
277protected:
280
281protected:
285private:
286 s32 _playerNumber;
287 GxPad* _pPad;
288 GxUnitCameraBase* _pCamera;
289
290 GxVector3 _moveDirect;
291 f32 _moveSpeed;
292 f32 _rotateSpeed;
293 GxUnitCharacterBase* _pMoveTarget;
294
295 GxFlock* _pFlock;
296 GxVector3 _oldPosition;
297
298 f32 _lifeMax;
299 f32 _life;
300
301protected:
303
304#if GX_DEVELOP
305 GxVector3 _developRenderPosition;
306#endif // GX_DEVELOP
307};
308
309GX_CHARACTER_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
GX_FORCE_INLINE b32 operator==(const GxColor color0, const GxColor color1)
Definition GxColor.inl:274
void GxTypedObject
その他
Definition GxDefine.h:213
イベントあたりオブジェクトクラス
Definition GxAttackHit.h:264
オブジェクト基底クラス
Definition GxBase.h:88
イベントあたりオブジェクトクラス
Definition GxEventHit.h:155
群集
Definition GxFlock.h:18
算術演算クラス
Definition GxMath.h:84
static GX_FORCE_INLINE T getAbs(const T value)
絶対値
Definition GxMath.h:168
static GX_FORCE_INLINE T getMin(const T value0, const T value1)
小さいほうを取得
Definition GxMath.h:172
パッドクラス
Definition GxInputPad.h:25
プロパティクラス
Definition GxProperty.h:48
プロパティテーブルクラス
Definition GxProperty.h:1641
実行時型情報クラス
Definition GxRtti.h:154
@ UNIT_PLAYER
プレイヤーユニット
DEVICE
デバイス定義
Definition GxSysInput.h:229
カメラ基礎クラス
Definition GxUnitCameraBase.h:20
アクション構造体
Definition GxUnitCharacterBase.h:42
u32 _number3
アクション番号3
Definition GxUnitCharacterBase.h:84
u32 _number2
アクション番号2
Definition GxUnitCharacterBase.h:85
u32 _number
アクション番号
Definition GxUnitCharacterBase.h:75
f32 _time
アクションの制限時間
Definition GxUnitCharacterBase.h:91
u32 _number1
アクション番号1
Definition GxUnitCharacterBase.h:86
b32 _initializeFlag
初期化フラグ
Definition GxUnitCharacterBase.h:92
u32 _number0
アクション番号0
Definition GxUnitCharacterBase.h:87
キャラクター基礎ユニット
Definition GxUnitCharacterBase.h:20
virtual GX_FORCE_INLINE void attackHitCallbackAttack(GxAttackHit::GxObject *)
攻撃当たり攻撃側コールバック
Definition GxUnitCharacterBase.h:135
virtual GX_FORCE_INLINE void updateThinkAI(void)
AI思考処理
Definition GxUnitCharacterBase.h:156
GX_FORCE_INLINE f32 getDistanceH(GxUnitCharacterBase *pUnit) const
指定ユニットまでの水平距離を取得
Definition GxUnitCharacterBase.h:251
constexpr void addLifeMax(f32 add)
最大体力の増加
Definition GxUnitCharacterBase.h:262
f32 _padMarginRatio
パッド入力のマージン比率
Definition GxUnitCharacterBase.h:284
GX_FORCE_INLINE b32 isActionStatusBit(u32 actionStatus) const
アクション状態ビット判定
Definition GxUnitCharacterBase.h:196
u32 _actionStatus
アクション状態
Definition GxUnitCharacterBase.h:279
virtual GX_FORCE_INLINE void updateAction(void)
行動決定処理
Definition GxUnitCharacterBase.h:158
GX_FORCE_INLINE f32 getDistance(GxUnitCharacterBase *pUnit) const
指定ユニットまでの距離を取得
Definition GxUnitCharacterBase.h:247
b32 isPad(void) const
パッド処理かどうか
Definition GxUnitCharacterBase.h:205
constexpr GxUnitCameraBase * getCamera(void) const
カメラを取得
Definition GxUnitCharacterBase.h:207
GX_FORCE_INLINE GxVector3 getPadWorldVectorRight(void) const
ワールド座標上でのアナログ入力値(右)を取得
Definition GxUnitCharacterBase.h:213
GX_FORCE_INLINE GxVector3 getPadWorldVectorLeft(void) const
ワールド座標上でのアナログ入力値(左)を取得
Definition GxUnitCharacterBase.h:211
constexpr void setMoveTarget(GxUnitCharacterBase *pUnit)
移動ターゲットを設定
Definition GxUnitCharacterBase.h:230
constexpr GxUnitCharacterBase * getMoveTarget(void) const
移動ターゲットを取得
Definition GxUnitCharacterBase.h:228
constexpr GxPad * getPad(void) const
パッド取得
Definition GxUnitCharacterBase.h:203
GX_FORCE_INLINE void setAction(const GxAction &action)
アクション設定
Definition GxUnitCharacterBase.h:188
GxAction _action
アクション
Definition GxUnitCharacterBase.h:278
constexpr void setPlayerNumber(s32 number)
プレイヤー番号を設定
Definition GxUnitCharacterBase.h:201
GX_FORCE_INLINE f32 getAngleV(GxUnitCharacterBase *pUnit) const
指定ユニットとの垂直角度を取得
Definition GxUnitCharacterBase.h:253
constexpr GxFlock * getFlock(void) const
群集を取得
Definition GxUnitCharacterBase.h:234
constexpr void setFlock(GxFlock *pFlock)
群集を設定
Definition GxUnitCharacterBase.h:236
GX_FORCE_INLINE void addLife(f32 add)
体力の増加
Definition GxUnitCharacterBase.h:268
virtual GX_FORCE_INLINE void objectHitCallback(void)
オブジェクト当たりコールバック
Definition GxUnitCharacterBase.h:131
constexpr f32 getMoveSpeed(void) const
移動速度を取得
Definition GxUnitCharacterBase.h:220
constexpr f32 getLifeMax(void) const
最大体力取得
Definition GxUnitCharacterBase.h:258
GX_FORCE_INLINE f32 getAngleH(GxUnitCharacterBase *pUnit) const
指定ユニットとの水平角度を取得
Definition GxUnitCharacterBase.h:255
GxVector3 _padWorldVectorRight
ワールド座標上でのアナログ入力値(右)
Definition GxUnitCharacterBase.h:283
GX_FORCE_INLINE const GxAction & getAction(void) const
アクション設定
Definition GxUnitCharacterBase.h:184
constexpr void setCamera(GxUnitCameraBase *pCamera)
カメラを設定
Definition GxUnitCharacterBase.h:209
constexpr u32 getActionStatus(void) const
アクション状態取得
Definition GxUnitCharacterBase.h:190
GxSysSoundBase::GxObjMotionData _objMotionSound
モーション連動用
Definition GxUnitCharacterBase.h:302
virtual GX_FORCE_INLINE void updateInitializeActionChange(void)
アクション切り替わり時の初期化
Definition GxUnitCharacterBase.h:150
GX_FORCE_INLINE void setLife(f32 life)
体力の設定
Definition GxUnitCharacterBase.h:266
virtual GX_FORCE_INLINE void attackHitCallbackDamage(GxAttackHit::GxObject *)
攻撃当たりダメージ側コールバック
Definition GxUnitCharacterBase.h:137
GX_FORCE_INLINE const GxVector3 & getMoveDirect(void) const
移動方向を取得
Definition GxUnitCharacterBase.h:216
GxVector3 _padWorldVectorLeft
ワールド座標上でのアナログ入力値(左)
Definition GxUnitCharacterBase.h:282
constexpr void setRotateSpeed(f32 speed)
回転速度を設定
Definition GxUnitCharacterBase.h:226
GX_FORCE_INLINE b32 isActionStatus(u32 actionStatus) const
アクション状態判定
Definition GxUnitCharacterBase.h:194
virtual GX_FORCE_INLINE void eventHitCallback(GxEventHit::GxObject *)
イベント当たりコールバック
Definition GxUnitCharacterBase.h:139
GX_FORCE_INLINE GxVector3 getOldPosition(void) const
前フレームの位置を取得
Definition GxUnitCharacterBase.h:240
constexpr void setLifeMax(f32 lifeMax)
最大体力の設定
Definition GxUnitCharacterBase.h:260
constexpr void setActionStatus(u32 actionStatus)
アクション状態設定
Definition GxUnitCharacterBase.h:192
GX_FORCE_INLINE void setMoveDirect(const GxVector3 &direct)
移動方向を設定
Definition GxUnitCharacterBase.h:218
GX_FORCE_INLINE f32 getDistanceV(GxUnitCharacterBase *pUnit) const
指定ユニットまでの垂直距離を取得
Definition GxUnitCharacterBase.h:249
constexpr f32 getLife(void) const
体力取得
Definition GxUnitCharacterBase.h:264
constexpr s32 getPlayerNumber(void) const
プレイヤー番号を取得
Definition GxUnitCharacterBase.h:199
virtual GX_FORCE_INLINE void backgroundHitCallback(void)
背景当たりコールバック
Definition GxUnitCharacterBase.h:129
constexpr f32 getLifeRate(void) const
残り体力比率取得
Definition GxUnitCharacterBase.h:270
GX_FORCE_INLINE f32 getMoveTargetDistance(void) const
移動ターゲットへの距離を取得
Definition GxUnitCharacterBase.h:232
constexpr f32 getRotateSpeed(void) const
回転速度を取得
Definition GxUnitCharacterBase.h:224
constexpr void setMoveSpeed(f32 speed)
移動速度を設定
Definition GxUnitCharacterBase.h:222
GX_FORCE_INLINE const GxVector3 & getLocalPosition(void) const
ローカル位置の取得
Definition GxUnitLocate.h:179
モーションユニット
Definition GxUnitMotion.h:20
モーションデータ定義
Definition GxSysSoundBase.h:109
2次元ベクトル
Definition GxVector.h:34
3次元ベクトル
Definition GxVector.h:245
f32 _z
Z値
Definition GxVector.h:572
static GX_FORCE_INLINE f32 getAngle(const GxVector3 &vector0, const GxVector3 &vector1)
角度差を取得(符号なし radian)
Definition GxVector.inl:2190
f32 _y
Y値
Definition GxVector.h:571
f32 _x
X値
Definition GxVector.h:570
32bitブーリアン
Definition GxDefine.h:173