OROCHI
 
Loading...
Searching...
No Matches
GxUnitSoftbodyCollision.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(GxUnitSoftbodyCollision, GxUnitBase, "ソフトボディコリジョン")
26 // ClassBaseReference継承クラス用禁止宣言
28
29#if GX_DEVELOP
31 enum class DEVELOP_RENDER_MODE
32 {
33 NONE,
34 FILL,
35 WIRE,
36 MAX,
37 };
39 GX_ENUM_TABLE_MAX(DEVELOP_RENDER_MODE)
40#endif // GX_DEVELOP
41
42 class GxHitBase;
43 class GxHitSphere;
44 class GxHitCapsule;
45 class GxHitCapsule2;
46 class GxHitCapsule3;
47
49 //-----------------------------------------------------------
51 //-----------------------------------------------------------
53
56
58 b32 initialize(GxResSoftbodyCollision* pResource, GxUnitModelBase* pParentModel);
59
61 //-----------------------------------------------------------
63 //-----------------------------------------------------------
65
67 void cleanup(void) override;
68protected:
70 void postAsyncUpdate(void) override;
72 void render(void) override;
73
74public:
76 virtual b32 check(s32 jointIndex, const GxVector3 & position, f32 updateRatio, f32 updateRatioOld, GxVector3& direct, GxVector3& normal, f32 radius);
77
79 //-----------------------------------------------------------
81 //-----------------------------------------------------------
83
85 constexpr u32 getCollisionDataCount(void) const { return _collisionDataCount; }
87 constexpr GxHitBase** getCollisionData(void) const { return _ppCollisionData; }
89 GxHitBase* getCollisionDataFromID(u32 id);
91 constexpr GxUnitModelBase* getParentModel(void) const { return _pParentModel; }
92
93#if GX_DEVELOP
95 virtual void developRender(void);
96
98 constexpr DEVELOP_RENDER_MODE getDevelopRenderMode(void) const { return _developRenderMode; }
100 constexpr void setDevelopRenderMode(DEVELOP_RENDER_MODE mode) { _developRenderMode = mode; }
101#endif // GX_DEVELOP
102
104 //-----------------------------------------------------------
106 //-----------------------------------------------------------
108protected:
112
113#if GX_DEVELOP
114 DEVELOP_RENDER_MODE _developRenderMode;
115#endif // GX_DEVELOP
116
118};
119
120//===========================================================================
122//===========================================================================
123class GxUnitSoftbodyCollision::GxHitBase : public gx::core::GxClassBase
124{
125 //-----------------------------------------------------------
127 //-----------------------------------------------------------
129public:
130 // RTTI宣言
131 GX_RTTI_ABSTRACT_CLASS(GxUnitSoftbodyCollision::GxHitBase, gx::core::GxClassBase)
132
133 // デフォルトコンストラクタ
134 GxHitBase(void);
135
137 //-----------------------------------------------------------
139 //-----------------------------------------------------------
141
144
146
151 virtual void update(GxUnitModelBase* pPrentModel) = 0;
152
154
158 virtual b32 check(s32 jointIndex, const GxVector3& position, f32 updateRatio, f32 updateRatioOld, GxVector3& direct, GxVector3& normal, f32 radius) = 0;
159
161 b32 startAnalyse (s32 targetJointIndex);
162
164 b32 executeAnalyse(GxUnitModelBase::GxJoint* pNow, s32 targetJointIndex);
165
167 //-----------------------------------------------------------
169 //-----------------------------------------------------------
171
180 u32 _id;
181
183};
184
185//===========================================================================
187//===========================================================================
189{
190 //-----------------------------------------------------------
192 //-----------------------------------------------------------
194public:
195 // RTTI宣言
196 GX_RTTI_CLASS(GxHitSphere, GxHitBase)
197
198 // デフォルトコンストラクタ
200
202 //-----------------------------------------------------------
204 //-----------------------------------------------------------
206
210 void update(GxUnitModelBase* pParentModel) override;
212 b32 check(s32 jointIndex, const GxVector3& position, f32 updateRatio, f32 updateRatioOld, GxVector3& direct, GxVector3& normal, f32 radius) override;
213
215 //-----------------------------------------------------------
217 //-----------------------------------------------------------
219
222
224};
225
226//===========================================================================
228//===========================================================================
230{
231 //-----------------------------------------------------------
233 //-----------------------------------------------------------
235public:
236 // RTTI宣言
237 GX_RTTI_CLASS(GxHitCapsule, GxHitBase)
238
239 // デフォルトコンストラクタ
241
243 //-----------------------------------------------------------
245 //-----------------------------------------------------------
247
251 void update(GxUnitModelBase* pParentModel) override;
253 b32 check(s32 jointIndex, const GxVector3& position, f32 updateRatio, f32 updateRatioOld, GxVector3& direct, GxVector3& normal, f32 radius) override;
254
256 //-----------------------------------------------------------
258 //-----------------------------------------------------------
260
262 u32 _jointIndex[2];
269
271};
272
273//===========================================================================
275//===========================================================================
277{
278 //-----------------------------------------------------------
280 //-----------------------------------------------------------
282public:
283 // RTTI宣言
284 GX_RTTI_CLASS(GxHitCapsule2, GxHitCapsule)
285
286 // デフォルトコンストラクタ
288
290 //-----------------------------------------------------------
292 //-----------------------------------------------------------
294
298 void update(GxUnitModelBase* pParentModel) override;
300 b32 check(s32 jointIndex,const GxVector3& position, f32 updateRatio, f32 updateRatioOld, GxVector3& direct, GxVector3& normal, f32 radius) override;
301
303 //-----------------------------------------------------------
305 //-----------------------------------------------------------
307
308 f32 _r2;
309
311};
312
313//===========================================================================
315//===========================================================================
317{
318 //-----------------------------------------------------------
320 //-----------------------------------------------------------
322public:
323 // RTTI宣言
324 GX_RTTI_CLASS(GxHitCapsule3, GxHitCapsule)
325
326 // デフォルトコンストラクタ
328
330 //-----------------------------------------------------------
332 //-----------------------------------------------------------
334
337
339 //-----------------------------------------------------------
341 //-----------------------------------------------------------
343
344#if GX_DEVELOP
345 GxMatrixAffine _debugDrawMatrix;
346#endif //GX_DEVELOP
347
349};
350
351GX_UTILITY_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
@ MAX
定義数
@ NONE
何もしない
@ WIRE
ワイヤーフレーム
@ FILL
面で描画する
コリジョンデータクラス
Definition GxResSoftbodyCollision.h:56
OPERATION_TYPE
衝突時の振る舞い
Definition GxResSoftbodyCollision.h:71
static constexpr u32 HIT_JOINT_MAX
特定ジョイントのみにあたる機能を利用時に設定できるジョイント数
Definition GxResSoftbodyCollision.h:66
モデル対応コリジョンリソースクラス
Definition GxResSoftbodyCollision.h:18
OBJECT_TYPE
オブジェクトタイプ
Definition GxResSoftbodyCollision.h:31
@ CAPSULE3
カプセル(無限平面用)
@ CAPSULE2
カプセル(両端の半径が異なる)
ユニット基礎クラス
Definition GxUnitBase.h:45
virtual b32 setup(void)
セットアップ(初回にasyncUpdate前に一回呼ばれる)
Definition GxUnitBase.cpp:92
モデル基礎クラス
Definition GxUnitModelBase.h:19
クロスシミュレーション用コリジョンクラス : 基礎形状クラス
Definition GxUnitSoftbodyCollision.h:124
b32 startAnalyse(s32 targetJointIndex)
質点についているジョイントから自身と当たれるかどうか解析
Definition GxUnitSoftbodyCollision.cpp:384
GxUnitModelBase * _pParentModel
親モデル
Definition GxUnitSoftbodyCollision.h:172
s32 _hitJointIndex[GxResSoftbodyCollision::GxSoftbodyCollisionData::HIT_JOINT_MAX]
ヒット判定をするジョイント(↑がtrueの場合のみ有効で-1は無効値)
Definition GxUnitSoftbodyCollision.h:179
GxVector3 _spherePosition
外接球中心 / 球ではそのまま使う
Definition GxUnitSoftbodyCollision.h:176
GxVector3 _spherePositionOld
外接球中心 / 球ではそのまま使う
Definition GxUnitSoftbodyCollision.h:177
virtual b32 check(s32 jointIndex, const GxVector3 &position, f32 updateRatio, f32 updateRatioOld, GxVector3 &direct, GxVector3 &normal, f32 radius)=0
チェック
f32 _sphereRadius
外接球半径 / 球ではそのまま使う
Definition GxUnitSoftbodyCollision.h:175
GxResSoftbodyCollision::OBJECT_TYPE _objectType
オブジェクトタイプ
Definition GxUnitSoftbodyCollision.h:173
b32 _enable
有効/無効
Definition GxUnitSoftbodyCollision.h:174
GxResSoftbodyCollision::GxSoftbodyCollisionData::OPERATION_TYPE _hitOperationType
衝突時の振る舞い
Definition GxUnitSoftbodyCollision.h:178
virtual void update(GxUnitModelBase *pPrentModel)=0
更新
b32 executeAnalyse(GxUnitModelBase::GxJoint *pNow, s32 targetJointIndex)
質点についているジョイントから自身と当たれるかどうか解析開始
Definition GxUnitSoftbodyCollision.cpp:353
u32 _id
任意ID
Definition GxUnitSoftbodyCollision.h:180
クロスシミュレーション用コリジョンクラス : カプセル 2 形状クラス
Definition GxUnitSoftbodyCollision.h:277
f32 _r2
カプセル半径 2
Definition GxUnitSoftbodyCollision.h:308
b32 check(s32 jointIndex, const GxVector3 &position, f32 updateRatio, f32 updateRatioOld, GxVector3 &direct, GxVector3 &normal, f32 radius) override
チェック
Definition GxUnitSoftbodyCollision.cpp:768
void update(GxUnitModelBase *pParentModel) override
更新
Definition GxUnitSoftbodyCollision.cpp:753
クロスシミュレーション用コリジョンクラス : カプセル 3 形状クラス
Definition GxUnitSoftbodyCollision.h:317
クロスシミュレーション用コリジョンクラス : カプセル形状クラス
Definition GxUnitSoftbodyCollision.h:230
void update(GxUnitModelBase *pParentModel) override
更新
Definition GxUnitSoftbodyCollision.cpp:559
GxVector3 _offset[2]
端ボーンからのオフセット
Definition GxUnitSoftbodyCollision.h:263
u32 _jointIndex[2]
両端点が参照するボーン番号
Definition GxUnitSoftbodyCollision.h:262
f32 _radius
カプセル半径
Definition GxUnitSoftbodyCollision.h:261
GxVector3 _vector
Definition GxUnitSoftbodyCollision.h:266
GxVector3 _position[2]
両端点
Definition GxUnitSoftbodyCollision.h:264
b32 check(s32 jointIndex, const GxVector3 &position, f32 updateRatio, f32 updateRatioOld, GxVector3 &direct, GxVector3 &normal, f32 radius) override
チェック
Definition GxUnitSoftbodyCollision.cpp:610
GxVector3 _positionOld[2]
旧両端点
Definition GxUnitSoftbodyCollision.h:265
GxVector3 _vectorOld
旧芯、旧芯
Definition GxUnitSoftbodyCollision.h:267
f32 _radiusOld
旧外接球半径
Definition GxUnitSoftbodyCollision.h:268
クロスシミュレーション用コリジョンクラス : 球形状クラス
Definition GxUnitSoftbodyCollision.h:189
u32 _jointIndex
端点が参照するボーン番号
Definition GxUnitSoftbodyCollision.h:220
b32 check(s32 jointIndex, const GxVector3 &position, f32 updateRatio, f32 updateRatioOld, GxVector3 &direct, GxVector3 &normal, f32 radius) override
チェック
Definition GxUnitSoftbodyCollision.cpp:486
void update(GxUnitModelBase *pParentModel) override
更新
Definition GxUnitSoftbodyCollision.cpp:451
GxVector3 _offset
端ボーンからのオフセット
Definition GxUnitSoftbodyCollision.h:221
クロスシミュレーション用コリジョンクラス
Definition GxUnitSoftbodyCollision.h:18
u32 _collisionDataCount
あたり総数
Definition GxUnitSoftbodyCollision.h:109
constexpr GxUnitModelBase * getParentModel(void) const
コリジョンを付与するモデル取得
Definition GxUnitSoftbodyCollision.h:91
GxHitBase ** _ppCollisionData
あたりデータ
Definition GxUnitSoftbodyCollision.h:110
GxUnitModelBase * _pParentModel
あたりをつけるモデル
Definition GxUnitSoftbodyCollision.h:111
constexpr u32 getCollisionDataCount(void) const
データ総数取得
Definition GxUnitSoftbodyCollision.h:85
constexpr GxHitBase ** getCollisionData(void) const
データ取得
Definition GxUnitSoftbodyCollision.h:87
アフィン変換行列(行優先)
Definition GxMatrix.h:330
関節構造体
Definition GxUnitModelBase.h:795
3次元ベクトル
Definition GxVector.h:245
32bitブーリアン
Definition GxDefine.h:173