OROCHI
 
Loading...
Searching...
No Matches
GxSysCollision.h
Go to the documentation of this file.
1//===========================================================================
12//===========================================================================
13#pragma once
14
16
17// 前方宣言
20
21//===========================================================================
23//===========================================================================
25{
26 //-------------------------------------------------------------
28 //-------------------------------------------------------------
30public:
31 GX_RTTI_ABSTRACT_CLASS( GxSysCollision, GxSysCollisionBase )
32 // ClassBase継承クラス用禁止宣言
34
35
36 static constexpr u32 CHECK_FLAG_ALL = 0xffffffffUL;
38 static constexpr u32 DEFAULT_MESH_MAX = GxMath::VALUE_8;
40 static constexpr u32 DEFAULT_TASK_MAX = GxMath::VALUE_128;
42 static constexpr u32 DEFAULT_OBJECT_MAX = GxMath::VALUE_8;
44 static constexpr u32 DEFAULT_EVENT_MAX = GxMath::VALUE_64;
46 static constexpr u32 DEFAULT_MESH_CONTACT_MAX = GxMath::VALUE_16;
48 static constexpr u32 DEFAULT_MESH_POLYGON_MAX = 0x4000;
49
51 //-----------------------------------------------------------
53 //-----------------------------------------------------------
55
57 GxSysCollision(void);
59 ~GxSysCollision(void) override {}
60
62 b32 initialize(const GxClassBase* pInitialInformation) override;
64 void terminate(void) override;
65
67 //-----------------------------------------------------------
69 //-----------------------------------------------------------
71
73 void update(void) override;
74
76 static void* allocateMemoryBullet( size_t size );
78 static void* allocateMemoryAlignedBullet( size_t size, s32 alignment );
80 static void freeMemoryBullet( void* pAddress );
81
83 b32 addWorld(GxCollision::GxWorld* pWorld);
84
86 b32 checkWorld(GxCollision::GxWorld* pCheckWorld);
87
89 void eraseWorld(GxCollision::GxWorld* pSearchWorld);
90
92 void eraseAllWorld(void);
93
95 GxCollision::GxWorld* getWorld(u32 index);
96
98 GX_FORCE_INLINE virtual GxBackgroundHit::GxWorld* getBackgroundHitWorld( void ) { return nullptr; }
100 GX_FORCE_INLINE virtual GxObjectHit::GxWorld* getObjectHitWorld( void ) { return nullptr; }
102 GX_FORCE_INLINE virtual GxEventHit::GxWorld* getEventHitWorld( void ) { return nullptr; }
104 GX_FORCE_INLINE virtual GxAttackHit::GxWorld* getAttackHitWorld( void ) { return nullptr; }
105
109 b32 resetAllBulletWorld( void );
110
115 virtual GxCollision::GxObject* createObjectFromResource(GxResCollisionObject* pRes, GxCollision* pCollision, GxUnitModelBase* pModel, const GxMatrixAffine* pMatrix, u32 index, u32 id);
116
120 GX_FORCE_INLINE virtual u32 getCollisionObjectResVersion( void ) { return 0; }
121
123 static b32 checkSegmentVsObject(GxCollision::GxRayResult& rayResult, GxCollision::GxObject* pObject, const GxVector3& position0, const GxVector3& position1, u32 checkFlag = 0xffffffff);
124
126 static b32 checkCapsuleVsObject(GxCollision::GxRayResult& rayResult, GxCollision::GxObject* pObject, const GxVector3& position0, const GxVector3& position1, f32 radius, u32 checkFlag = 0xffffffff);
127
129 virtual b32 checkFloor(GxCollision::GxRayResult& rayResult, const GxVector3& position, const f32 marginLower = 100.f, const f32 marginUpper = 100.f, GxBackgroundHit::GxConditionInformationBackgroundHit* pCondition = nullptr);
130
132 b32 raycastBackgroundHit(const GxVector3& position0, const GxVector3& position1, GxVector3* pHitPosition = nullptr, GxVector3* pNormal = nullptr) override;
133
134#if GX_DEVELOP
136 constexpr void setDevelopDrawTrimeshRange(f32 range) { _developDrawTrimeshRange = range; }
138 constexpr f32 getdevelopDrawTrimeshRange(void) const { return _developDrawTrimeshRange; }
139
141 void setAllocatorDevelop(b32 usesDevelop);
142
148 virtual GxCollisionExtraData* createExtraData(u32 collisionType);
149#endif // GX_DEVELOP
150
152 //-----------------------------------------------------------
154 //-----------------------------------------------------------
156
158 constexpr void setOnRadian(f32 radian) { _onRadian = radian; }
159
161 constexpr f32 getOnRadian(void) const { return _onRadian; }
162
164 GX_FORCE_INLINE b32 isOnNormal(const GxVector3& normal) const { return GxVector3::isSameDirectionLessThan(GxVector3::AXIS_Y, normal, _onRadian); }
165
167 GX_FORCE_INLINE b32 isCeilingNormal(const GxVector3& normal) const { return GxVector3::isSameDirectionLessThan(-GxVector3::AXIS_Y, normal, _onRadian); }
168
170 GX_FORCE_INLINE void getPropertyWorld(void* const pValue, u32 index) { *static_cast<GxCollision::GxWorld**>(pValue) = getWorld(index); }
172 constexpr void setPropertyWorld(const void* const /*pValue*/, u32 /*index*/) {}
174 constexpr u32 getPropertyWorldCount(void) const { return _pListWorld->getCount(); }
176 constexpr void setPropertyWorldCount(u32 /*count*/) {}
177
178 // 上に乗れる角度取得
179 constexpr void getPropertyOnRadian(void* const pValue) { *static_cast<f32*>(pValue) = RADIAN_TO_DEGREE(_onRadian); }
180 // 上に乗れる角度設定
181 constexpr void setPropertyOnRadian(const void* const pValue) { _onRadian = DEGREE_TO_RADIAN(*static_cast<f32*>(const_cast<void*>(pValue))); }
182
184 //-----------------------------------------------------------
186 //-----------------------------------------------------------
188private:
189 GxArrayClassBase* _pListWorld;
190 f32 _onRadian;
191
192#if GX_DEVELOP
193 f32 _developDrawTrimeshRange;
194
195 static GxAllocatorList::ALLOCATOR_TYPE _allocatorType;
196#endif // GX_DEVELOP
197
199};
200
201//===========================================================================
203//===========================================================================
205{
206 //-------------------------------------------------------------
208 //-------------------------------------------------------------
210public:
211 // RTTI宣言
212 GX_RTTI_CLASS_NAME(GxCollisionExtraData, GxClassBase, "コリジョン拡張データ")
213
214
215 //-----------------------------------------------------------
217 //-----------------------------------------------------------
219
221 GxCollisionExtraData(void) : _checkFlag( GxSysCollision::CHECK_FLAG_ALL ) {}
222
224 //-----------------------------------------------------------
226 //-----------------------------------------------------------
228
229#if GX_DEVELOP
231 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index = 0);
232#endif // GX_DEVELOP
233
235 // note:テンプレート化できないか
236 virtual void copyValue( const GxCollisionExtraData* const pData );
237
239 //-----------------------------------------------------------
241 //-----------------------------------------------------------
243
245
247};
248
249//===========================================================================
251//===========================================================================
253{
254 //-------------------------------------------------------------
256 //-------------------------------------------------------------
258public:
259 // RTTI宣言
260 GX_RTTI_CLASS_NAME(GxCollisionExtraDataAttack, GxCollisionExtraData, "攻撃あたりデータ")
261
262
263 //-----------------------------------------------------------
265 //-----------------------------------------------------------
267
270 : _power(0.f)
271 , _attackDirectType(GxAttackHit::GxObject::ATTACK_DIRECT::MANUAL)
272 , _priority(0)
273 , _damageGroup(0)
274 {}
275
277 //-----------------------------------------------------------
279 //-----------------------------------------------------------
281
283 void copyValue( const GxCollisionExtraData* const pData ) override;
284
286 //-----------------------------------------------------------
288 //-----------------------------------------------------------
290public:
291 f32 _power;
295
297};
298
299// アクセスインターフェイス
300GX_FORCE_INLINE GxSysCollision* getGxSysCollision(void) { return static_cast<GxSysCollision*>(getGxSysCollisionBase()); }
301
302GX_PHYSICS_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
void GxTypedObject
その他
Definition GxDefine.h:213
#define GX_PHYSICS_NAMESPACE_BEGIN()
ネームスペースマクロ
Definition GxPhysics.h:28
GX_FORCE_INLINE GxSysCollisionBase * getGxSysCollisionBase(void)
アクセスインターフェース
Definition GxSysCollisionBase.h:93
ALLOCATOR_TYPE
アロケータ定義
Definition GxAllocator.h:355
配列クラス
Definition GxArrayClassBase.h:18
ATTACK_DIRECT
攻撃ベクトルの方向
Definition GxAttackHit.h:301
オブジェクトあたりワールドクラス
Definition GxAttackHit.h:198
オブジェクトあたりクラス
Definition GxAttackHit.h:20
判定条件
Definition GxBackgroundHit.h:308
背景あたりワールドクラス
Definition GxBackgroundHit.h:150
オブジェクト基底クラス
Definition GxBase.h:88
Collision基本オブジェクトクラス
Definition GxCollision.h:489
Collision基本ワールドクラス
Definition GxCollision.h:236
コリジョン拡張データ:攻撃あたり
Definition GxSysCollision.h:253
u32 _damageGroup
ダメージグループ
Definition GxSysCollision.h:294
f32 _power
攻撃力 or ダメージ値(タイプにより変わる)
Definition GxSysCollision.h:291
s32 _priority
ダメージ側優先度(小さいほうが優先)
Definition GxSysCollision.h:293
GxAttackHit::GxObject::ATTACK_DIRECT _attackDirectType
攻撃方向の種類
Definition GxSysCollision.h:292
void copyValue(const GxCollisionExtraData *const pData) override
値代入用関数
Definition GxSysCollision.cpp:796
コリジョン拡張データ
Definition GxSysCollision.h:205
u32 _checkFlag
チェックフラグ(必要なら継承先クラスでcreateGui()をオーバーライドしてください)
Definition GxSysCollision.h:244
virtual void copyValue(const GxCollisionExtraData *const pData)
値代入用関数
Definition GxSysCollision.cpp:774
コリジョン基本クラス
Definition GxCollision.h:20
イベントあたりワールドクラス
Definition GxEventHit.h:106
算術演算クラス
Definition GxMath.h:84
オブジェクトあたりワールドクラス
Definition GxObjectHit.h:100
プロパティクラス
Definition GxProperty.h:48
コリジョンリソースクラス
Definition GxResCollisionObject.h:23
実行時型情報クラス
Definition GxRtti.h:154
コリジョンシステムクラス
Definition GxSysCollisionBase.h:53
コリジョンシステムクラス
Definition GxSysCollision.h:25
constexpr void setPropertyWorld(const void *const, u32)
ワールド設定
Definition GxSysCollision.h:172
virtual GX_FORCE_INLINE GxAttackHit::GxWorld * getAttackHitWorld(void)
攻撃あたりワールド取得
Definition GxSysCollision.h:104
virtual GX_FORCE_INLINE GxBackgroundHit::GxWorld * getBackgroundHitWorld(void)
背景あたりワールド取得
Definition GxSysCollision.h:98
constexpr void setOnRadian(f32 radian)
上に乗れる角度の設定(0度が平坦)
Definition GxSysCollision.h:158
virtual GX_FORCE_INLINE GxEventHit::GxWorld * getEventHitWorld(void)
イベントあたりワールド取得
Definition GxSysCollision.h:102
virtual GX_FORCE_INLINE u32 getCollisionObjectResVersion(void)
Definition GxSysCollision.h:120
GX_FORCE_INLINE void getPropertyWorld(void *const pValue, u32 index)
ワールド取得
Definition GxSysCollision.h:170
constexpr f32 getOnRadian(void) const
上に乗れる角度の取得
Definition GxSysCollision.h:161
GX_FORCE_INLINE b32 isCeilingNormal(const GxVector3 &normal) const
天井の角度か判定
Definition GxSysCollision.h:167
GX_FORCE_INLINE b32 isOnNormal(const GxVector3 &normal) const
上に乗れる角度か判定
Definition GxSysCollision.h:164
constexpr void setPropertyWorldCount(u32)
ワールド数設定
Definition GxSysCollision.h:176
virtual GX_FORCE_INLINE GxObjectHit::GxWorld * getObjectHitWorld(void)
オブジェクトあたりワールド取得
Definition GxSysCollision.h:100
constexpr u32 getPropertyWorldCount(void) const
ワールド数取得
Definition GxSysCollision.h:174
モデル基礎クラス
Definition GxUnitModelBase.h:19
レイ判定情報
Definition GxCollision.h:945
アフィン変換行列(行優先)
Definition GxMatrix.h:330
3次元ベクトル
Definition GxVector.h:245
static const GxVector3 AXIS_Y
(0, 1, 0)
Definition GxVector.h:262
static GX_FORCE_INLINE b32 isSameDirectionLessThan(const GxVector3 &vector0, const GxVector3 &vector1, f32 limitRadian=PI/2.0f)
ベクトルが同じ方向を向いているか(ラジアン指定/指定値より小さければ(==は含まない)同じ方向)
Definition GxVector.inl:2445
32bitブーリアン
Definition GxDefine.h:173