OROCHI
 
Loading...
Searching...
No Matches
GxModUnitRagdoll.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_UTILITY_NAMESPACE_BEGIN()
14//===========================================================================
16//===========================================================================
18{
19 //-----------------------------------------------------------
21 //-----------------------------------------------------------
23public:
24 // RTTI宣言
25 GX_RTTI_CLASS_NAME(GxModUnitRagdoll, GxModUnitBase, "RAGDOLL MODULE");
26 // new, delete定義
27 GX_OPERATOR_NEW_DELETE( GxAllocatorList::ALLOCATOR_TYPE::PHYSICS );
28
46
49 {
51 u32 _bodyNumber[2];
52 GxVector3 _rotateAxis[2];
53 GxVector3 _offset[2];
54 f32 _low;
55 f32 _high;
56 f32 _twist;
57 };
58
67
69 //-----------------------------------------------------------
71 //-----------------------------------------------------------
73public:
75 GxModUnitRagdoll(void);
77 ~GxModUnitRagdoll(void) override;
78
80 //-----------------------------------------------------------
82 //-----------------------------------------------------------
84public:
86 void initialize(GxDynamics::GxWorld* pWorld, GxDynamics::DYNAMICS_CALLBACK pCallback, GxRagdollCondition* pCondition);
87
89
94 void initialize(GxDynamics::GxWorld* pWorld, GxDynamics::DYNAMICS_CALLBACK pCallback, const GxResRagdoll* pResRagdoll);
95
96
98
101 static GxRagdollBodyCondition* createBodyCondition(const GxResRagdoll* pResRagdoll);
102
104
107 static GxRagdollJointCondition* createJointCondition(const GxResRagdoll* pResRagdoll);
108
110
114 void reset(void);
115
117
120 virtual void cleanup(void);
121
123
127 virtual void ragdollCallback(void);
128
130
134 void applyForce(const GxVector3& force, const GxVector3& pos, s32 index = 0);
135
137
141 void applyImpulse(const GxVector3& impulse, const GxVector3& position, s32 index = 0);
142
144
147 GX_FORCE_INLINE virtual GxDynamics* createDynamicsModule(void) { return GX_NEW GxDynamics(); }
148
149#if GX_DEVELOP
151 GX_FORCE_INLINE virtual void developRender(void) {}
153 GX_FORCE_INLINE void healthyResetter(void) { reset(); }
154#endif //GX_DEVELOP
155
157 //-----------------------------------------------------------
159 //-----------------------------------------------------------
161public:
163 GX_FORCE_INLINE static const GxRtti& getOwnerDerivedRtti(void) { return GxUnitModelBase::GX_RTTI; }
164
166 constexpr GxDynamics* getRagdoll(void) const { return _pRagdoll; }
168 constexpr GxDynamics::GxWorld* getRagdollWorld(void) const { return _pOwnerWorld; }
169
171 GX_FORCE_INLINE b32 isActive(void) const { return _isActive; }
173 GX_FORCE_INLINE void setActive(b32 isActive) { if( isActive ) reset(); _isActive = isActive; _pRagdoll->setActiveAll(_isActive); }
174
176
179 GX_FORCE_INLINE virtual b32 isRagdollSleeping(void) const { return false; }
180
181#if GX_DEVELOP
183 GX_FORCE_INLINE b32 isDevelopRender(void) const { return _isVisibleDevelop; }
185 GX_FORCE_INLINE void setDevelopRender(b32 enable) { _isVisibleDevelop = enable; }
186
188 constexpr void getBodyMatrix(void* const pValue, u32 index) { *(static_cast<GxMatrixAffine**>(pValue)) = _pBodyMatrix+index; }
190 GX_FORCE_INLINE void setBodyMatrix(const void* const pValue, u32 index) { *(_pBodyMatrix + index) = **(static_cast<GxMatrixAffine **>(const_cast<void*>(pValue))); }
191
193 constexpr u32 getBodyCount(void) const { return _bodyCount; }
195 constexpr void setBodyCount(u32 count){ _bodyCount = count; }
196#endif // GX_DEVELOP
197
199 //-----------------------------------------------------------
201 //-----------------------------------------------------------
203protected:
207
212
215
216#if GX_DEVELOP
217 b32 _isVisibleDevelop;
218#endif // GX_DEVELOP
219
221};
222
223#if PLATFORM_BULLET_SUPPORT
224//===========================================================================
226//===========================================================================
227class GxModUnitRagdollBullet : public GxModUnitRagdoll
228{
229 //-----------------------------------------------------------
231 //-----------------------------------------------------------
233public:
234 // RTTI宣言
235 GX_RTTI_CLASS(GxModUnitRagdollBullet, GxModUnitRagdoll);
236
238 //-----------------------------------------------------------
240 //-----------------------------------------------------------
242public:
244 GxModUnitRagdollBullet(void) {}
246 ~GxModUnitRagdollBullet(void) override {}
247
249 //-----------------------------------------------------------
251 //-----------------------------------------------------------
253public:
255 GX_FORCE_INLINE GxDynamics* createDynamicsModule(void) override { return GX_NEW GxDynamicsBullet(); }
256#if GX_DEVELOP
258 void developRender(void) override;
259#endif //GX_DEVELOP
260
262 //-----------------------------------------------------------
264 //-----------------------------------------------------------
266
268
271 b32 isRagdollSleeping(void) const override;
272
274};
275#endif //PLATFORM_BULLET_SUPPORT
276
277#if PLATFORM_PHYSX_SUPPORT
278//===========================================================================
280//===========================================================================
281class GxModUnitRagdollPhysX : public GxModUnitRagdoll
282{
283 //-----------------------------------------------------------
285 //-----------------------------------------------------------
287public:
288 // RTTI 宣言
289 GX_RTTI_CLASS(GxModUnitRagdollPhysX, GxModUnitRagdoll);
290
292 //-----------------------------------------------------------
294 //-----------------------------------------------------------
296public:
298 GxModUnitRagdollPhysX(void) {}
300 ~GxModUnitRagdollPhysX(void) override {}
301
303 //-----------------------------------------------------------
305 //-----------------------------------------------------------
307public:
309 GX_FORCE_INLINE virtual GxDynamics* createDynamicsModule(void) { return GX_NEW GxDynamicsPhysX(); }
310#if GX_DEVELOP
312 void developRender(void) override;
313#endif //GX_DEVELOP
314
316 //-----------------------------------------------------------
318 //-----------------------------------------------------------
320
322
325 b32 isRagdollSleeping(void) const override;
326
328};
329#endif //PLATFORM_PHYSX_SUPPORT
330
331GX_UTILITY_NAMESPACE_END()
@ PHYSICS
物理エンジン
GxDynamics 拘束クラス
Definition GxDynamics.h:783
GxDynamics基本オブジェクトクラス
Definition GxDynamics.h:519
GxDynamics 基本ワールドクラス
Definition GxDynamics.h:272
物理演算クラス
Definition GxDynamics.h:27
void(GxClassBaseRoot::*) DYNAMICS_CALLBACK(void)
後処理用コールバック
Definition GxDynamics.h:97
ユニットモジュール基礎クラス
Definition GxModUnitBase.h:22
ラグドールモジュールクラス
Definition GxModUnitRagdoll.h:18
GX_FORCE_INLINE b32 isActive(void) const
アクティブフラグ判定
Definition GxModUnitRagdoll.h:171
constexpr GxDynamics::GxWorld * getRagdollWorld(void) const
ラグドール所属ワールド取得
Definition GxModUnitRagdoll.h:168
GxDynamics * _pRagdoll
物理モジュール
Definition GxModUnitRagdoll.h:208
GxDynamics::GxConstraint ** _ppJointParts
関節ポインタ群
Definition GxModUnitRagdoll.h:211
u32 _bodyCount
剛体個数
Definition GxModUnitRagdoll.h:205
u32 _jointCount
関節個数
Definition GxModUnitRagdoll.h:206
GxMatrixAffine * _pBodyMatrix
剛体用保持行列群
Definition GxModUnitRagdoll.h:213
constexpr GxDynamics * getRagdoll(void) const
ラグドール本体取得
Definition GxModUnitRagdoll.h:166
static GX_FORCE_INLINE const GxRtti & getOwnerDerivedRtti(void)
所持者に必要な継承RTTIを取得
Definition GxModUnitRagdoll.h:163
u32 * _pJointIndex
剛体指定関節インデックス群
Definition GxModUnitRagdoll.h:214
GxDynamics::GxObject ** _ppBodyParts
剛体ポインタ群
Definition GxModUnitRagdoll.h:210
GX_FORCE_INLINE void setActive(b32 isActive)
アクティブフラグ設定
Definition GxModUnitRagdoll.h:173
virtual GX_FORCE_INLINE b32 isRagdollSleeping(void) const
ラグドール剛体の状態判定
Definition GxModUnitRagdoll.h:179
GxDynamics::GxWorld * _pOwnerWorld
所属する物理ワールド
Definition GxModUnitRagdoll.h:209
b32 _isActive
状態変数
Definition GxModUnitRagdoll.h:204
virtual GX_FORCE_INLINE GxDynamics * createDynamicsModule(void)
剛体作成関数
Definition GxModUnitRagdoll.h:147
ラグドールリソースクラス
Definition GxResRagdoll.h:18
実行時型情報クラス
Definition GxRtti.h:154
アフィン変換行列(行優先)
Definition GxMatrix.h:330
剛体データ構造体
Definition GxModUnitRagdoll.h:31
f32 _angularDamping
角速度の減衰
Definition GxModUnitRagdoll.h:41
GxVector3 _length
軸長
Definition GxModUnitRagdoll.h:36
GxVector3 _offset
関節からのオフセット
Definition GxModUnitRagdoll.h:33
f32 _linearVelocityThreshold
線形速度の非アクティブ化閾値
Definition GxModUnitRagdoll.h:42
f32 _friction
摩擦係数
Definition GxModUnitRagdoll.h:38
f32 _mass
重さ
Definition GxModUnitRagdoll.h:37
f32 _linearDamping
線形速度の減衰
Definition GxModUnitRagdoll.h:40
f32 _angularVelocityThreshold
角速度の非アクティブ化閾値
Definition GxModUnitRagdoll.h:43
u32 _jointNumber
貼り付けるモデルの関節番号
Definition GxModUnitRagdoll.h:32
GxVector3 _rotate
剛体の初期姿勢
Definition GxModUnitRagdoll.h:34
GxVector3 _inertiaScale
各剛体の回転しにくさ
Definition GxModUnitRagdoll.h:44
f32 _deactivationTime
非アクティブになるまでの時間
Definition GxModUnitRagdoll.h:39
全体構造体
Definition GxModUnitRagdoll.h:61
GxRagdollBodyCondition * _pBodyCondition
剛体ポインタ
Definition GxModUnitRagdoll.h:64
GxRagdollJointCondition * _pJointCondition
関節ポインタ
Definition GxModUnitRagdoll.h:65
u32 _jointCount
関節数
Definition GxModUnitRagdoll.h:63
u32 _bodyCount
剛体数
Definition GxModUnitRagdoll.h:62
関節(コンストレイント)データ構造体
Definition GxModUnitRagdoll.h:49
f32 _low
最小回転角度 // 円錐ネジリの場合は円錐の開き角度 軸回転
Definition GxModUnitRagdoll.h:54
b32 _isHinge
ヒンジ型フラグ
Definition GxModUnitRagdoll.h:50
f32 _twist
ヒンジでは未使用 // ネジリ最大角度
Definition GxModUnitRagdoll.h:56
f32 _high
最大回転角度 // 円錐ネジリの場合は円錐の開き角度 軸とねじり軸に垂直な軸の回転
Definition GxModUnitRagdoll.h:55
3次元ベクトル
Definition GxVector.h:245
32bitブーリアン
Definition GxDefine.h:173