OROCHI
 
Loading...
Searching...
No Matches
GxCollision.h
Go to the documentation of this file.
1//===========================================================================
12//===========================================================================
13#pragma once
14
16//===========================================================================
18//===========================================================================
20{
21 //-------------------------------------------------------------
23 //-------------------------------------------------------------
25public:
26 // RTTI定義
27 GX_RTTI_CLASS( GxCollision, GxClassBase)
28 // new, delete定義
29 GX_OPERATOR_NEW_DELETE( GxAllocatorList::ALLOCATOR_TYPE::PHYSICS )
30 // GxClassBase継承クラス用禁止宣言
32
33 class GxWorld;
34 class GxObject;
35
37 enum class COLLISION_SHAPE
38 {
39 ERROR_ = -1,
40 SPHERE = 0,
41 BOX,
42 CYLINDER,
43 MULTISPHERE,
44 TRIMESH,
45 PLANE,
46 RAY,
47 BEAM,
48 CAPSULE,
49 CONVEX,
50 COMPOUND,
51 WHEEL,
52 MAX,
53 };
54#if GX_DEVELOP
56 GX_ENUM_TABLE_COUNT(COLLISION_SHAPE, 7)
57#endif //GX_DEVELOP
58
59 struct GxRayCallback;
60 struct GxConvexCallback;
61 class GxConditionInformation;
62 struct GxRayResult;
63
65 typedef void (GxClassBaseRoot::* COLLISION_CALLBACK)(void);
66
68 static const f32 BULLET_MARGIN;
69
71 //-------------------------------------------------------------
73 //-------------------------------------------------------------
75
77 GxCollision(void);
78
80 ~GxCollision(void) override;
81
83 //-----------------------------------------------------------
85 //-----------------------------------------------------------
87
89 void clearList(void);
90
92 virtual GxObject* allocObject(void);
93
95 virtual GxObject* createSphere(b32 active, u32 id, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeSphere& sphere);
97 virtual GxObject* createBox(b32 active, u32 id, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeBox& box);
99 virtual GxObject* createMultisphere(b32 active, u32 id, const GxMatrixAffine* pMatrix0, const GxVector3& offset0, const GxMatrixAffine* pMatrix1, const GxVector3& offset1, const GxShapeMultisphere& multisphere);
101 virtual GxObject* createCylinder(b32 active, u32 id, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeCylinder& cylinder);
103 virtual GxObject* createCapsule(b32 active, u32 id, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeCapsule& capsule);
104
106 virtual GxObject* createMesh(u32 index, b32 active, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeTrimesh& trimesh, btTriangleIndexVertexArray* pVertex, b32 isCompress = true, GxVector3* pAabbMin = nullptr, GxVector3* pAabbMax = nullptr);
108 virtual GxObject* createMesh(u32 index, b32 active, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeTrimesh& trimesh, btBvhTriangleMeshShape* pTrimeshShape);
109
111 GxObject* getObject(u32 index);
112
114 virtual void deleteObject( GxObject* pObject );
115
117 virtual void detachObject( GxObject* pObject );
118
120 virtual void initialize(GxWorld* pRegistWorld, GxUnitBase* pUnit, GxCollision::COLLISION_CALLBACK pCallback, u32 threadIndex);
121
123 virtual void prepareCheck(void);
124
126 virtual void update(void);
127
129 constexpr GxWorld* getWorld(void) const { return _pRegisterWorld; }
130protected:
132 constexpr void setWorldNull(void) { _pRegisterWorld = nullptr; }
133public:
135 constexpr GxUnitBase* getUnit(void) const { return _pUnit; }
136
138 GX_FORCE_INLINE virtual void initializeActiveOn(void) {}
139
141 GX_FORCE_INLINE virtual void initializeActiveOff(void) {}
142
144 GX_FORCE_INLINE virtual void initializeUpdate(void) {}
145
147 virtual void executePostCheckCallback(void);
148
149#if GX_DEVELOP
151 virtual void developDrawObject(const GxColor& color = GxColor::WHITE, PRIMITIVE_FILL_MODE fillMode = PRIMITIVE_FILL_MODE::WIRE);
152#endif //GX_DEVELOP
153
154protected:
156 virtual GxObject* addObject(void);
157
159 //-----------------------------------------------------------
161 //-----------------------------------------------------------
163public:
165 GX_FORCE_INLINE void setHitCallback(GxCollision::COLLISION_CALLBACK pCallback) { _pCallback = pCallback; }
166
168 GX_FORCE_INLINE b32 isActive(void) const { return _active; }
169
171 void setActive(b32 active);
172
174 constexpr u32 getObjectCount(void) const { return _listObject.getCount(); }
175
176#if GX_DEVELOP
178 constexpr u32 getActiveObjectCount( void ) const { return _activeObjectCount; }
180 constexpr u32 getMeshTriangleCount( void ) const { return _meshTriangleCount; }
182 GX_FORCE_INLINE void setUnitName(GX_CSTR name) { _unitName = name; }
184 GX_FORCE_INLINE GX_CSTR getUnitName(void) { return _unitName.getString(); }
185#endif // GX_DEVELOP
186
188 GX_FORCE_INLINE void getPropertyActive(void* const pValue) { *static_cast<b32*>(pValue) = _active; }
190 GX_FORCE_INLINE void setPropertyActive(const void* const pValue) { setActive( *static_cast<b32*>(const_cast<void*>(pValue))); }
191
193 GX_FORCE_INLINE void getPropertyObject(void* const pValue, u32 index){ *static_cast<GxObject**>(pValue) = getObject(index); }
195 constexpr void setPropertyObject(const void* const /*pValue*/, u32 /*index*/) {}
197 constexpr u32 getPropertyObjectCount(void) const { return getObjectCount(); }
199 constexpr void setPropertyObjectCount(u32 /*count*/) {}
200
201protected:
203 GX_FORCE_INLINE void setOffsetAdjustVector(const GxVector3& offset){ _offsetAdjustVector = offset; }
205 GX_FORCE_INLINE GxVector3 getOffsetAdjustVector(void){ return _offsetAdjustVector; }
206
208 //-----------------------------------------------------------
210 //-----------------------------------------------------------
212protected:
214 COLLISION_CALLBACK _pCallback;
215
216#if GX_DEVELOP
217 u32 _activeObjectCount;
218 u32 _meshTriangleCount;
219 GxString _unitName;
220#endif // GX_DEVELOP
221
223
224private:
225 GxUnitBase* _pUnit;
226 b32 _active;
227 GxVector3 _offsetAdjustVector;
228
230};
231
232//===========================================================================
234//===========================================================================
236{
237 //-------------------------------------------------------------
239 //-------------------------------------------------------------
241public:
242 // RTTI定義
243 GX_RTTI_CLASS( GxCollision::GxWorld, GxClassBase )
244 // new, delete定義
245 GX_OPERATOR_NEW_DELETE( GxAllocatorList::ALLOCATOR_TYPE::PHYSICS )
246 // GxClassBase継承クラス用禁止宣言
248
249
250 static constexpr u32 COLLISION_ALGORITHM_NUM = GxMath::VALUE_2;
252 static constexpr u32 GX_COLLISION_DEFAULT_STACK_ALLOCATOR_SIZE = GxMath::VALUE_64K;
257
259 //-----------------------------------------------------------
261 //-----------------------------------------------------------
263
265 GxWorld(void);
266
268 ~GxWorld(void) override;
269
271 //-----------------------------------------------------------
273 //-----------------------------------------------------------
275
277 virtual b32 alloc(u32 meshCount, const GxVector3& worldAabbMin, const GxVector3& worldAabbMax, u16 maxHandles,
278 u32 stackAllocatorSize = GX_COLLISION_DEFAULT_STACK_ALLOCATOR_SIZE,
279 u32 maxPersistentManifoldPoolSize = GX_COLLISION_DEFAULT_MAX_PERSISTENT_MANIFOLD_POOL_SIZE,
280 u32 maxCollisionAlgorithmPoolSize = GX_COLLISION_DEFAULT_MAX_COLLISION_ALGORITHM_POOL_SIZE);
281
282private:
284 void free(void);
285
286public:
288 virtual void prepareCheck(void);
289
292 virtual void check(void);
293
296 // note:旧update()
297 virtual void preBulletUpdate(void);
298
301 // note:旧hit()
302 GX_FORCE_INLINE virtual void postBulletUpdate(void) {}
303
305 // note:旧adjust()
306 virtual void executePostCheckCallback(void);
307
309 GX_FORCE_INLINE virtual void postCheck( void ){}
310
312 static void customNearCallback(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo);
313
314 //---- この関数はGxPhysics外では使用しないでください ----------
316 virtual void registerObject(GxCollision::GxObject* pObject);
318 void banObject(GxCollision::GxObject* pObject);
319 //---- ここまで
320
322 void addClass( u32 threadIndex, GxCollision* pObject );
324 void detachClass(GxCollision* pCollision);
325
327 void detachObjectFromBullet( GxObject* pObject );
328
330 constexpr btCollisionWorld* getBulletWorld( void ) const { return _pBulletWorld; }
331
334 b32 createBulletWorld( void );
335
340 b32 deleteBulletWorld( void );
341
343 void freeMesh(void);
344
346 b32 addMesh(u32 index, GxCollision::GxObject* pMesh);
347
350
355 virtual GxCollision::GxRayCallback* createRayCallback(const btVector3& rayFrom, const btVector3& rayEnd, GxConditionInformation* pConditionInfo);
356
358 b32 checkRayClosestVsWorld(GxCollision::GxRayResult& rayResult, const GxVector3& startPosition, const GxVector3& endPosition, GxConditionInformation* pConditionInfo = nullptr);
359
361 b32 checkRayClosestVsSingle(GxCollision::GxRayResult& rayResult, GxObject* pTargetObject, const GxVector3& startPosition, const GxVector3& endPosition, GxConditionInformation* pConditionInfo = nullptr);
362
367 virtual GxCollision::GxConvexCallback* createConvexCallback(const btVector3& checkFrom, const btVector3& checkEnd, GxConditionInformation* pConditionInfo);
368
372 b32 checkCapsuleClosestVsWorld(GxCollision::GxRayResult& rayResult, const GxVector3& startPosition, const GxVector3& endPosition, f32 radius, GxConditionInformation* pConditionInfo = nullptr);
373
377 b32 checkCapsuleClosestVsSingle(GxCollision::GxRayResult& rayResult, GxObject* pTargetObject, const GxVector3& startPosition, const GxVector3& endPosition, f32 radius, GxConditionInformation* pConditionInfo = nullptr);
378
379private:
381 void freeListClass(void);
383 void clearListClass(void);
384
386 //-----------------------------------------------------------
388 //-----------------------------------------------------------
390public:
392 GX_FORCE_INLINE void setActive(b32 active) { _active = active; }
394 GX_FORCE_INLINE b32 isActive(void) { return _active; }
395
396#if GX_DEVELOP
397 // 名前の設定
398 GX_FORCE_INLINE void setName( GX_CSTR name ) { _name = name; }
399 // 名前の取得
400 constexpr GX_CSTR getName( void ) const { return _name.getString(); }
401#endif // GX_DEVELOP
402
404 b32 setMeshCount(u32 count);
405
407 GxCollision::GxObject* getMesh(u32 index);
408
410 constexpr u32 getMeshCount(void) const { return _meshCount; }
411
413 u32 getActiveMeshCount(void);
414
416 constexpr u32 getListClassCount(void) const { return _listClassCount; }
418 b32 setListClassCount(u32 count);
420 constexpr GxArrayClassBase* getListClass(u32 index) const { return index >= _listClassCount ? nullptr : _ppCollisionList[index]; }
421
423 constexpr u32 getCollisionCount(void) const { return _collisionList.getCount(); }
425 GX_FORCE_INLINE GxArrayClassBase* getCollisionList( void ) { return &_collisionList; }
426
427#if GX_DEVELOP
429 constexpr u32 getObjectCount(void) const { return _objectCount; }
431 constexpr u32 getActiveObjectCount( void ) const { return _activeObjectCount; }
433 constexpr u32 getMeshTriangleCount( void ) const { return _meshTriangleCount; }
434#endif // GX_DEVELOP
435
436protected:
438 GX_FORCE_INLINE void getPropertyList(void* const pValue, u32 index) { *static_cast<GxArrayClassBase**>(pValue) = getListClass(index); }
440 GX_FORCE_INLINE void setPropertyList(const void* const /*pValue*/, u32 /*index*/) {}
442 GX_FORCE_INLINE void setPropertyListClassCount(u32 count) { setListClassCount(count); }
443
445 //-----------------------------------------------------------
447 //-----------------------------------------------------------
449protected:
451
455 btCollisionConfiguration* _pBulletConfiguration;
456 btCollisionDispatcher* _pBulletDispatcher;
457 btAxisSweep3* _pBulletBroadphase;
458 btCollisionWorld* _pBulletWorld;
460
467
468private:
469 GxCollision::GxObject** _ppMesh;
470 u32 _meshCount;
471
472#if GX_DEVELOP
473 GxString _name;
474 u32 _objectCount;
475 u32 _activeObjectCount;
476 u32 _meshTriangleCount;
477#endif // GX_DEVELOP
478
479 GxCriticalSection _bulletWorldCriticalSection;
480 GxCriticalSection _collisionListCriticalSection;
481
483};
484
485//===========================================================================
487//===========================================================================
489{
490 //-------------------------------------------------------------
492 //-------------------------------------------------------------
494public:
495 // RTTI定義
496 GX_RTTI_CLASS(GxCollision::GxObject, GxClassBase )
497 // new, delete定義
498 GX_OPERATOR_NEW_DELETE( GxAllocatorList::ALLOCATOR_TYPE::PHYSICS )
499 // GxClassBase継承クラス用禁止宣言
501
502
503 enum
504 {
505 ACTIVE_FLAG_ACTIVE = (1UL << 0),
510 };
511
513 static constexpr u32 CHECK_FLAG_ALL = 0x7fffffff;
514
516 //-----------------------------------------------------------
518 //-----------------------------------------------------------
520
522 GxObject(void);
524 ~GxObject(void) override;
525
527 //-----------------------------------------------------------
529 //-----------------------------------------------------------
531
533 virtual void prepareCheck(void);
534
536 virtual void update(void);
537
539 void addOffset(const GxVector3& offset);
540
542 virtual b32 isNeedCheck(GxObject* pCollisionObject);
543
545 virtual b32 isHitCheckFlag(u32 targetFlag);
546
548 virtual b32 isHitCheckFlagTrimesh(u32 triangleIndex, u32 targetFlag);
549
551 GX_FORCE_INLINE virtual void initializeActiveOn(void) {}
552
554 GX_FORCE_INLINE virtual void initializeActiveOff(void) {}
555
557 GX_FORCE_INLINE virtual void initializeUpdate(void) {}
558
560 virtual b32 createSphere(b32 active, u32 id, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeSphere& sphere);
561
563 virtual b32 createBox(b32 active, u32 id, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeBox& box);
564
566 virtual b32 createMultisphere(b32 active, u32 id, const GxMatrixAffine* pMatrix0, const GxVector3& offset0, const GxMatrixAffine* pMatrix1, const GxVector3& offset1, const GxShapeMultisphere& multisphere);
567
569 virtual b32 createCylinder(b32 active, u32 id, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeCylinder& cylinder);
570
572 virtual b32 createCapsule(b32 active, u32 id, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeCapsule& capsule);
573
575 virtual b32 createMesh(b32 active, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeTrimesh& trimesh, btTriangleIndexVertexArray* pVertex, b32 isCompress, GxVector3* pAabbMin = nullptr, GxVector3* pAabbMax = nullptr);
577 virtual b32 createMesh(b32 active, const GxMatrixAffine* pMatrix, const GxVector3& offset, const GxShapeTrimesh& trimesh, btBvhTriangleMeshShape* pBtTrimeshShape);
578
580 void resetBulletShape(btCollisionShape* pBtShapeNew);
581
582#if GX_DEVELOP
584 virtual void developDraw(const GxColor& color, PRIMITIVE_FILL_MODE fillMode = PRIMITIVE_FILL_MODE::WIRE);
585
587 virtual void developDrawTrimesh(GxShapeTrimesh* pTrimesh, const GxColor& color, PRIMITIVE_FILL_MODE fillMode = PRIMITIVE_FILL_MODE::WIRE);
588#endif // GX_DEVELOP
589
590protected:
593
595 virtual void initialize(b32 active, u32 id, const GxMatrixAffine* pMatrix0, const GxVector3& offset0, const GxMatrixAffine* pMatrix1, const GxVector3& offset1);
596
598 GX_FORCE_INLINE void updateUnitPointer(void) { GX_UPDATE_UNIT_POINTER(_pUnit); }
599
601 //-----------------------------------------------------------
603 //-----------------------------------------------------------
605public:
607 constexpr GxShape* getShape(void) const { return _pShape; }
609 constexpr COLLISION_SHAPE getShapeType(void) const { return _shapeType; }
610
612 constexpr GxCollision::GxWorld* getRegisterWorld(void) const { return _pRegisterWorld; }
614 constexpr void setRegisterWorld(GxCollision::GxWorld* pWorld) { _pRegisterWorld = pWorld; }
615
617 GX_FORCE_INLINE const GxMatrixAffine* getMatrixAddress0(void) const { return _pMatrix0; }
619 GX_FORCE_INLINE const GxMatrixAffine* getMatrixAddress1(void) const { return _pMatrix1; }
621 GX_FORCE_INLINE void setMatrixAddress0(const GxMatrixAffine* pMatrix) { _pMatrix0 = pMatrix; }
623 GX_FORCE_INLINE void setMatrixAddress1(const GxMatrixAffine* pMatrix) { _pMatrix1 = pMatrix; }
624
626 GX_FORCE_INLINE GxMatrixAffine getMatrix0(void) const { if( _pMatrix0 ) { return *_pMatrix0; } return GxMatrixAffine::IDENTITY; }
628 GX_FORCE_INLINE GxMatrixAffine getMatrix1(void) const { if( _pMatrix1 ) { return *_pMatrix1; } return GxMatrixAffine::IDENTITY; }
629
631 GX_FORCE_INLINE const GxVector3& getOffset0(void) const { return _offset0; }
633 GX_FORCE_INLINE const GxVector3& getOffset1(void) const { return _offset1; }
635 GX_FORCE_INLINE void setOffset0(const GxVector3& offset) { _offset0 = offset; }
637 GX_FORCE_INLINE void setOffset1(const GxVector3& offset) { _offset1 = offset; }
638
640 GX_FORCE_INLINE const GxQuaternion& getQuaternion(void) { return _quaternion; }
642 GX_FORCE_INLINE void setQuaternion(const GxQuaternion& quaternion) { _quaternion = quaternion; _rotateMatrix.setRotate(_quaternion); }
643
645 GX_FORCE_INLINE b32 getActiveFlag(u32 flag) const { return (_activeFlag & flag) ? true : false; }
647 constexpr u32 getActiveFlagAll(void) const { return _activeFlag; }
649 GX_FORCE_INLINE void setActiveFlag(u32 flag, b32 value) { _activeFlag = (value) ? (_activeFlag | flag) : (_activeFlag & ~flag); }
650
652 GX_FORCE_INLINE b32 isActive(void) const { return getActiveFlag(ACTIVE_FLAG_ACTIVE); }
654 void setActive(b32 active);
655
656 GX_FORCE_INLINE b32 isActiveOld(void) const { return getActiveFlag(ACTIVE_FLAG_ACTIVE_OLD); }
657
659 constexpr GxUnitBase* getUnit(void) const { return _pUnit; }
661 GX_FORCE_INLINE void setUnit(GxUnitBase* pUnit) { _pUnit = pUnit; }
662
664 constexpr u32 getId(void) const { return _id; }
666 constexpr void setId(u32 id) { _id = id; }
667
669 constexpr s32 getMaterial(void) const { return _material; }
671 constexpr void setMaterial(s32 material) { _material = material; }
672
674 constexpr u32 getCheckFlag(void) const { return _checkFlag; }
676 constexpr void setCheckFlag(u32 flag) { _checkFlag = flag; }
678 constexpr void onCheckFlag(u32 flag) { _checkFlag |= flag; }
680 constexpr void offCheckFlag(u32 flag) { _checkFlag &= ~flag; }
681
682 //-----------------------------------------------------------
703 //-----------------------------------------------------------
704
706 constexpr s16 getGroup( void ) const { return _group; }
708 constexpr s16 getMask( void ) const { return _mask; }
710 void setGroupMask( s16 group, s16 mask );
711
713 b32 setSphereRadius(f32 radius);
714
716 b32 setMultisphereRadius(f32 radius0, f32 radius1);
717
719 b32 setCapsuleRadius(f32 radius);
720
722 b32 setBoxExtent(const GxVector3& extent);
723
725 b32 setCylinderExtent(const f32 radius, const f32 heightHalf );
726
729
731 void getCenterPosition( GxVector3& centerPosition );
732
735
737 f32 getRadiusMin(void);
738
740 const GxVector3 getNormal(const GxVector3& position);
741
743 GX_FORCE_INLINE btCollisionObject* getBulletCollisionObject(void) { return &_btObject; }
745 constexpr btCollisionShape* getBulletCollisionShape(void) const { return _pBtShape; }
746
748 GX_FORCE_INLINE void getPropertyActiveOld(void* const pValue) { *static_cast<b32*>(pValue) = getActiveFlag(ACTIVE_FLAG_ACTIVE_OLD); }
750 GX_FORCE_INLINE void getPropertyActive(void* const pValue) { *static_cast<b32*>(pValue) = getActiveFlag(ACTIVE_FLAG_ACTIVE); }
751
753 constexpr void setPropertyActiveOld(const void* const /*pValue*/) {}
755 GX_FORCE_INLINE void setPropertyActive(const void* const pValue) { setActive(*static_cast<b32*>(const_cast<void*>(pValue))); }
756
758 constexpr void setCollision(GxCollision* pCollision) { _pCollision = pCollision; }
759
761 constexpr GxCollision* getCollision(void) const { return _pCollision; }
762
764 //-----------------------------------------------------------
766 //-----------------------------------------------------------
768protected:
769 btCollisionShape* _pBtShape;
770
771private:
772 btCollisionObject _btObject;
773 GxCollision::GxWorld* _pRegisterWorld;
774 GxUnitBase* _pUnit;
775 GxShape* _pShape;
776 COLLISION_SHAPE _shapeType;
777 b32 _isOwnsBtShape;
778
779 const GxMatrixAffine* _pMatrix0;
780 const GxMatrixAffine* _pMatrix1;
781 GxVector3 _offset0;
782 GxVector3 _offset1;
783 GxQuaternion _quaternion;
784 GxMatrixAffine _rotateMatrix;
785 u32 _activeFlag;
786 u32 _id;
787 u32 _checkFlag;
788 s32 _material;
789 GxCollision* _pCollision;
790
791 // note:グループとマスクについて
792 // BulletがBroadPhaseで利用するフラグ。
793 // _maskには当たる相手の_groupを指定する。
794 // _checkFlagはcustomNearCallback()でのフラグ判定なので、それより先に行われる。
795 // メモ:Bulletのワールドへの登録時に設定するので、再設定にはbanとregisterが必要。
796 s16 _group;
797 s16 _mask;
798
800};
801
802//===========================================================================
803// 判定条件
804//===========================================================================
806{
807 //-------------------------------------------------------------
809 //-------------------------------------------------------------
811public:
812 // RTTI定義
814 // new, delete定義
815 GX_OPERATOR_NEW_DELETE( GxAllocatorList::ALLOCATOR_TYPE::PHYSICS )
816
817
818 //-----------------------------------------------------------
820 //-----------------------------------------------------------
822
824 GxConditionInformation(void) : _mask(-1), _checkFlag(0xffffffff) {}
825
827 //-----------------------------------------------------------
829 //-----------------------------------------------------------
831
832 // グループとマスクついては
833 // GxCollision::GxObject::setGroupMask()
834 // のコメントを参照してください。
835 s16 _mask;
837
839};
840
841//===========================================================================
846//===========================================================================
847struct GxCollision::GxRayCallback : public btCollisionWorld::ClosestRayResultCallback
848{
849 //-----------------------------------------------------------
851 //-----------------------------------------------------------
853public:
855 GxRayCallback( const btVector3& rayFromWorld, const btVector3& rayToWorld, GxConditionInformation* pConditionInfo )
856 : ClosestRayResultCallback(rayFromWorld, rayToWorld)
857 , _pConditionInfo( pConditionInfo )
858 , _triangleIndex(0)
859 {}
860
862 //-----------------------------------------------------------
864 //-----------------------------------------------------------
866
872 bool needsCollision(btBroadphaseProxy* pProxy) const override;
873
877 btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace) override;
878
880 //-----------------------------------------------------------
882 //-----------------------------------------------------------
884
887
889};
890
891//===========================================================================
896//===========================================================================
897struct GxCollision::GxConvexCallback : public btCollisionWorld::ClosestConvexResultCallback
898{
899 //-----------------------------------------------------------
901 //-----------------------------------------------------------
903public:
905 GxConvexCallback( const btVector3& rayFromWorld, const btVector3& rayToWorld, GxConditionInformation* pConditionInfo )
906 : ClosestConvexResultCallback(rayFromWorld, rayToWorld)
907 , _pConditionInfo( pConditionInfo )
908 , _triangleIndex(0)
909 {}
910
912 //-----------------------------------------------------------
914 //-----------------------------------------------------------
916
922 bool needsCollision(btBroadphaseProxy* pProxy) const override;
923
927 btScalar addSingleResult(btCollisionWorld::LocalConvexResult& convexResult, bool normalInWorldSpace) override;
928
930 //-----------------------------------------------------------
932 //-----------------------------------------------------------
934
937
939};
940
941//===========================================================================
943//===========================================================================
945{
946 //-----------------------------------------------------------
948 //-----------------------------------------------------------
950public:
955 , _pObject(nullptr)
956 , _triangleIndex(-1)
957 , _checkFlag(0)
958 , _fraction( 0.f )
959 , _hasHit( false )
960 {}
962 virtual ~GxRayResult(void) {};
963
965 const GxRayResult& operator = (const GxRayResult& rayResult)
966 {
967 _position = rayResult._position;
968 _normal = rayResult._normal;
969 _pObject = rayResult._pObject;
970 _triangleIndex = rayResult._triangleIndex;
971 _checkFlag = rayResult._checkFlag;
972 _fraction = rayResult._fraction;
973 _hasHit = rayResult._hasHit;
974 return *this;
975 }
976
978 //-----------------------------------------------------------
980 //-----------------------------------------------------------
982
984 void setResult(GxCollision::GxRayCallback& resultCallback);
986 void setResult(GxCollision::GxConvexCallback& resultCallback);
987
989 //-----------------------------------------------------------
991 //-----------------------------------------------------------
993public:
999 // 値域は0.f<= _fraction <= 1.f
1000 //
1001 // レイチェックの場合は _pos = start + _fraction * (end - start)
1002 //
1003 // カプセルチェックの場合は
1004 // start + _fraction * (end - start)
1005 // に球を置くと_posに接するような最小の値が_fractionとなる。
1008
1010};
1011
1012GX_PHYSICS_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
@ MAX
定義数
@ ZERO
全て 0 で初期化
#define GX_PHYSICS_NAMESPACE_BEGIN()
ネームスペースマクロ
Definition GxPhysics.h:28
PRIMITIVE_FILL_MODE
塗りつぶしモード
Definition GxPrimitive.h:31
@ WIRE
ワイヤーフレーム
@ PHYSICS
物理エンジン
配列クラス
Definition GxArrayClassBase.h:18
constexpr u32 getCount(void) const
配列数を取得
Definition GxArrayClassBase.h:109
オブジェクト基底クラス
Definition GxBase.h:88
基底クラス
Definition GxBase.h:51
Definition GxCollision.h:806
u32 _checkFlag
チェックフラグ
Definition GxCollision.h:836
s16 _mask
マスク
Definition GxCollision.h:835
Collision基本オブジェクトクラス
Definition GxCollision.h:489
constexpr void setCollision(GxCollision *pCollision)
親コリジョンの設定
Definition GxCollision.h:758
virtual b32 createSphere(b32 active, u32 id, const GxMatrixAffine *pMatrix, const GxVector3 &offset, const GxShapeSphere &sphere)
球の作成
Definition GxCollision.cpp:1834
GX_FORCE_INLINE GxMatrixAffine getMatrix0(void) const
マトリクス0の取得
Definition GxCollision.h:626
constexpr GxCollision::GxWorld * getRegisterWorld(void) const
登録したワールドのアドレスを取得
Definition GxCollision.h:612
virtual GX_FORCE_INLINE void initializeUpdate(void)
更新前のパラメタ初期化(1フレームに複数回呼ばれる可能性もある)
Definition GxCollision.h:557
virtual b32 isHitCheckFlagTrimesh(u32 triangleIndex, u32 targetFlag)
メッシュ形状の三角形単位で、チェックフラグから当たり判定が必要かを調べる
Definition GxCollision.cpp:1789
GX_FORCE_INLINE b32 isActive(void) const
アクティブかどうか取得
Definition GxCollision.h:652
GX_FORCE_INLINE const GxMatrixAffine * getMatrixAddress1(void) const
マトリクス1のアドレス取得
Definition GxCollision.h:619
b32 setCylinderExtent(const f32 radius, const f32 heightHalf)
円柱のサイズ変更
Definition GxCollision.cpp:2282
const GxMatrixAffine getCenterMatrix(void)
中心のマトリクスを取得
Definition GxCollision.cpp:2437
~GxObject(void) override
デストラクタ
Definition GxCollision.cpp:1479
virtual GX_FORCE_INLINE void initializeActiveOff(void)
アクティブOFF時のパラメタ初期化
Definition GxCollision.h:554
b32 transformMeshVertex(const GxMatrixAffine &matrix)
メッシュ頂点の変形
Definition GxCollision.cpp:2311
constexpr void setMaterial(s32 material)
マテリアルの設定
Definition GxCollision.h:671
constexpr u32 getActiveFlagAll(void) const
全アクティブフラグ取得
Definition GxCollision.h:647
static constexpr u32 CHECK_FLAG_ALL
全フラグ定数
Definition GxCollision.h:513
void addOffset(const GxVector3 &offset)
オフセット加算
Definition GxCollision.cpp:1732
virtual void initialize(b32 active, u32 id, const GxMatrixAffine *pMatrix0, const GxVector3 &offset0, const GxMatrixAffine *pMatrix1, const GxVector3 &offset1)
オブジェクトの初期化
Definition GxCollision.cpp:2114
GX_FORCE_INLINE void setUnit(GxUnitBase *pUnit)
ユニット設定
Definition GxCollision.h:661
f32 getRadiusMin(void)
最小半径の取得
Definition GxCollision.cpp:2520
GX_FORCE_INLINE void updateActiveFlag(void)
アクティブフラグ更新
Definition GxCollision.h:592
const GxVector3 getNormal(const GxVector3 &position)
法線の取得
Definition GxCollision.cpp:2608
constexpr s32 getMaterial(void) const
マテリアルの取得
Definition GxCollision.h:669
GX_FORCE_INLINE void setActiveFlag(u32 flag, b32 value)
アクティブフラグ設定
Definition GxCollision.h:649
constexpr u32 getCheckFlag(void) const
チェックフラグの取得
Definition GxCollision.h:674
virtual b32 isNeedCheck(GxObject *pCollisionObject)
お互いの当たり判定が必要かどうか
Definition GxCollision.cpp:1743
GX_FORCE_INLINE const GxVector3 & getOffset0(void) const
オフセット0の取得
Definition GxCollision.h:631
GX_FORCE_INLINE const GxVector3 & getOffset1(void) const
オフセット1の取得
Definition GxCollision.h:633
constexpr void offCheckFlag(u32 flag)
チェックフラグの無効化
Definition GxCollision.h:680
GX_FORCE_INLINE void setMatrixAddress0(const GxMatrixAffine *pMatrix)
マトリクス0のアドレス設定
Definition GxCollision.h:621
virtual GX_FORCE_INLINE void initializeActiveOn(void)
アクティブON時のパラメタ初期化
Definition GxCollision.h:551
virtual b32 createCylinder(b32 active, u32 id, const GxMatrixAffine *pMatrix, const GxVector3 &offset, const GxShapeCylinder &cylinder)
円柱の作成
Definition GxCollision.cpp:1952
constexpr void setPropertyActiveOld(const void *const)
前回のアクティブを設定
Definition GxCollision.h:753
virtual void prepareCheck(void)
当たり判定チェック前準備
Definition GxCollision.cpp:1518
GX_FORCE_INLINE GxMatrixAffine getMatrix1(void) const
マトリクス1の取得
Definition GxCollision.h:628
GX_FORCE_INLINE btCollisionObject * getBulletCollisionObject(void)
BULLETコリジョンオブジェクトの取得
Definition GxCollision.h:743
constexpr void setId(u32 id)
ID設定
Definition GxCollision.h:666
b32 setMultisphereRadius(f32 radius0, f32 radius1)
マルチ球の半径変更
Definition GxCollision.cpp:2184
btCollisionShape * _pBtShape
BULLET用形状
Definition GxCollision.h:769
virtual b32 createMultisphere(b32 active, u32 id, const GxMatrixAffine *pMatrix0, const GxVector3 &offset0, const GxMatrixAffine *pMatrix1, const GxVector3 &offset1, const GxShapeMultisphere &multisphere)
マルチ球の作成
Definition GxCollision.cpp:1911
GX_FORCE_INLINE void setQuaternion(const GxQuaternion &quaternion)
回転の設定
Definition GxCollision.h:642
virtual b32 createCapsule(b32 active, u32 id, const GxMatrixAffine *pMatrix, const GxVector3 &offset, const GxShapeCapsule &capsule)
カプセルの作成
Definition GxCollision.cpp:1989
virtual b32 isHitCheckFlag(u32 targetFlag)
チェックフラグからあたり判定が必要かを調べる
Definition GxCollision.cpp:1777
constexpr s16 getMask(void) const
マスクの取得
Definition GxCollision.h:708
b32 setBoxExtent(const GxVector3 &extent)
箱のサイズ変更
Definition GxCollision.cpp:2251
constexpr GxShape * getShape(void) const
GXオブジェクト形状の取得
Definition GxCollision.h:607
constexpr btCollisionShape * getBulletCollisionShape(void) const
BULLET形状の取得
Definition GxCollision.h:745
@ ACTIVE_FLAG_REQUEST_REGISTER
アクティブフラグON登録待ち
Definition GxCollision.h:507
@ ACTIVE_FLAG_ACTIVE
オブジェクトがアクティブ状態かどうか
Definition GxCollision.h:505
@ ACTIVE_FLAG_REQUEST_DELETE
オブジェクト削除待ち
Definition GxCollision.h:509
@ ACTIVE_FLAG_ACTIVE_OLD
オブジェクトがアクティブ状態だったかどうか
Definition GxCollision.h:506
@ ACTIVE_FLAG_REQUEST_BAN
アクティブフラグOFF登録待ち
Definition GxCollision.h:508
void setGroupMask(s16 group, s16 mask)
グループ・マスク設定
Definition GxCollision.cpp:1813
constexpr void setRegisterWorld(GxCollision::GxWorld *pWorld)
登録したワールドのアドレスを設定
Definition GxCollision.h:614
constexpr void onCheckFlag(u32 flag)
チェックフラグの有効化
Definition GxCollision.h:678
GX_FORCE_INLINE const GxQuaternion & getQuaternion(void)
回転の取得
Definition GxCollision.h:640
GX_FORCE_INLINE b32 getActiveFlag(u32 flag) const
アクティブフラグ取得
Definition GxCollision.h:645
constexpr u32 getId(void) const
ID取得
Definition GxCollision.h:664
GX_FORCE_INLINE const GxMatrixAffine * getMatrixAddress0(void) const
マトリクス0のアドレス取得
Definition GxCollision.h:617
GX_FORCE_INLINE void setPropertyActive(const void *const pValue)
アクティブを設定
Definition GxCollision.h:755
void setActive(b32 active)
アクティブかどうか設定
Definition GxCollision.cpp:1709
GX_FORCE_INLINE void setMatrixAddress1(const GxMatrixAffine *pMatrix)
マトリクス1のアドレス設定
Definition GxCollision.h:623
constexpr GxUnitBase * getUnit(void) const
ユニット取得
Definition GxCollision.h:659
b32 setCapsuleRadius(f32 radius)
カプセルの半径変更
Definition GxCollision.cpp:2218
constexpr void setCheckFlag(u32 flag)
チェックフラグの設定
Definition GxCollision.h:676
GX_FORCE_INLINE void updateUnitPointer(void)
ユニットポインタの更新
Definition GxCollision.h:598
void getCenterPosition(GxVector3 &centerPosition)
中心位置の取得
Definition GxCollision.cpp:2358
b32 setSphereRadius(f32 radius)
球の半径変更
Definition GxCollision.cpp:2152
GX_FORCE_INLINE void getPropertyActive(void *const pValue)
アクティブを取得
Definition GxCollision.h:750
GX_FORCE_INLINE void setOffset0(const GxVector3 &offset)
オフセット0の設定
Definition GxCollision.h:635
constexpr COLLISION_SHAPE getShapeType(void) const
オブジェクト形状タイプの取得
Definition GxCollision.h:609
GX_FORCE_INLINE void getPropertyActiveOld(void *const pValue)
前回のアクティブを取得
Definition GxCollision.h:748
virtual void update(void)
オブジェクト位置の更新
Definition GxCollision.cpp:1542
constexpr GxCollision * getCollision(void) const
親コリジョンの取得
Definition GxCollision.h:761
GxObject(void)
デフォルトコンストラクタ
Definition GxCollision.cpp:1455
virtual b32 createBox(b32 active, u32 id, const GxMatrixAffine *pMatrix, const GxVector3 &offset, const GxShapeBox &box)
ボックスの作成
Definition GxCollision.cpp:1871
GX_FORCE_INLINE void setOffset1(const GxVector3 &offset)
オフセット1の設定
Definition GxCollision.h:637
void resetBulletShape(btCollisionShape *pBtShapeNew)
Bullet形状を再設定
Definition GxCollision.cpp:2623
constexpr s16 getGroup(void) const
グループの取得
Definition GxCollision.h:706
virtual b32 createMesh(b32 active, const GxMatrixAffine *pMatrix, const GxVector3 &offset, const GxShapeTrimesh &trimesh, btTriangleIndexVertexArray *pVertex, b32 isCompress, GxVector3 *pAabbMin=nullptr, GxVector3 *pAabbMax=nullptr)
メッシュの作成
Definition GxCollision.cpp:2035
Collision基本ワールドクラス
Definition GxCollision.h:236
GX_FORCE_INLINE void setActive(b32 active)
アクティブ設定
Definition GxCollision.h:392
b32 checkCapsuleClosestVsSingle(GxCollision::GxRayResult &rayResult, GxObject *pTargetObject, const GxVector3 &startPosition, const GxVector3 &endPosition, f32 radius, GxConditionInformation *pConditionInfo=nullptr)
Definition GxCollision.cpp:1378
GxCollision::GxObject * getMesh(u32 index)
メッシュアドレスの取得
Definition GxCollision.cpp:1146
static constexpr u32 COLLISION_ALGORITHM_NUM
アルゴリズム個数
Definition GxCollision.h:250
virtual GxCollision::GxRayCallback * createRayCallback(const btVector3 &rayFrom, const btVector3 &rayEnd, GxConditionInformation *pConditionInfo)
Definition GxCollision.cpp:1188
b32 _active
処理を実行するかフラグ
Definition GxCollision.h:450
virtual void registerObject(GxCollision::GxObject *pObject)
ワールドにオブジェクトを登録する
Definition GxCollision.cpp:838
b32 setListClassCount(u32 count)
リスト個数設定
Definition GxCollision.cpp:767
u32 _btMaxPersistentManifoldPoolSize
Bulletのマニフォールドの最大プールサイズ
Definition GxCollision.h:465
u32 _btMaxCollisionAlgorithmPoolSize
Bulletのコリジョンアルゴリズム最大プールサイズ
Definition GxCollision.h:466
GxArrayClassBase _collisionList
Collisionクラスを記憶するリスト
Definition GxCollision.h:454
GxVector3 _worldAabbMax
ワールドAABBのMax
Definition GxCollision.h:462
u16 _maxHandles
当たり判定オブジェクト個数
Definition GxCollision.h:463
static void customNearCallback(btBroadphasePair &collisionPair, btCollisionDispatcher &dispatcher, const btDispatcherInfo &dispatchInfo)
近距離当たり判定コールバック(BULLETで用意されたものをオーバーライド)
Definition GxCollision.cpp:741
GX_FORCE_INLINE void setPropertyListClassCount(u32 count)
リスト個数設定
Definition GxCollision.h:442
b32 addMesh(u32 index, GxCollision::GxObject *pMesh)
背景当たりをリストに追加
Definition GxCollision.cpp:1088
void addClass(u32 threadIndex, GxCollision *pObject)
クラス登録
Definition GxCollision.cpp:882
b32 deleteBulletWorld(void)
Definition GxCollision.cpp:1015
b32 eraseMesh(GxCollision::GxObject *pMesh)
メッシュをリストから削除(アドレス指定版)
Definition GxCollision.cpp:1115
GX_FORCE_INLINE b32 isActive(void)
アクティブか判定
Definition GxCollision.h:394
b32 checkRayClosestVsSingle(GxCollision::GxRayResult &rayResult, GxObject *pTargetObject, const GxVector3 &startPosition, const GxVector3 &endPosition, GxConditionInformation *pConditionInfo=nullptr)
指定オブジェクトとのレイチェック
Definition GxCollision.cpp:1247
btCollisionAlgorithmCreateFunc * _pBulletAlgorithmCreateFunction[COLLISION_ALGORITHM_NUM]
BULLET判定用アルゴリズム
Definition GxCollision.h:459
u32 _btStackAllocatorSize
Bulletのスタックアロケーターサイズ
Definition GxCollision.h:464
GxVector3 _worldAabbMin
ワールドAABBのMin
Definition GxCollision.h:461
b32 createBulletWorld(void)
Definition GxCollision.cpp:958
virtual void check(void)
Definition GxCollision.cpp:664
virtual GxCollision::GxConvexCallback * createConvexCallback(const btVector3 &checkFrom, const btVector3 &checkEnd, GxConditionInformation *pConditionInfo)
Definition GxCollision.cpp:1304
constexpr u32 getCollisionCount(void) const
登録コリジョンの個数を取得
Definition GxCollision.h:423
constexpr btCollisionWorld * getBulletWorld(void) const
Bulletワールドを取得
Definition GxCollision.h:330
btCollisionConfiguration * _pBulletConfiguration
BULLET当たり設定
Definition GxCollision.h:455
constexpr u32 getListClassCount(void) const
リスト個数取得
Definition GxCollision.h:416
virtual void preBulletUpdate(void)
Definition GxCollision.cpp:692
virtual GX_FORCE_INLINE void postBulletUpdate(void)
Definition GxCollision.h:302
constexpr GxArrayClassBase * getListClass(u32 index) const
リストの取得
Definition GxCollision.h:420
GX_FORCE_INLINE void getPropertyList(void *const pValue, u32 index)
再生クラスアドレスの取得
Definition GxCollision.h:438
static constexpr u32 GX_COLLISION_DEFAULT_MAX_COLLISION_ALGORITHM_POOL_SIZE
コリジョンのコリジョンアルゴリズム用最大プールサイズデフォルト値
Definition GxCollision.h:256
GxArrayClassBase ** _ppCollisionList
AddされたCollisionクラスをスレッド毎に記憶するリスト
Definition GxCollision.h:453
void freeMesh(void)
メッシュリストの解放
Definition GxCollision.cpp:1075
virtual void prepareCheck(void)
当たり判定チェック前準備
Definition GxCollision.cpp:636
btCollisionDispatcher * _pBulletDispatcher
BULLET当たり判定用
Definition GxCollision.h:456
GX_FORCE_INLINE GxArrayClassBase * getCollisionList(void)
登録コリジョンリストを取得
Definition GxCollision.h:425
btAxisSweep3 * _pBulletBroadphase
BULLETブロードフェイズ処理用
Definition GxCollision.h:457
virtual b32 alloc(u32 meshCount, const GxVector3 &worldAabbMin, const GxVector3 &worldAabbMax, u16 maxHandles, u32 stackAllocatorSize=GX_COLLISION_DEFAULT_STACK_ALLOCATOR_SIZE, u32 maxPersistentManifoldPoolSize=GX_COLLISION_DEFAULT_MAX_PERSISTENT_MANIFOLD_POOL_SIZE, u32 maxCollisionAlgorithmPoolSize=GX_COLLISION_DEFAULT_MAX_COLLISION_ALGORITHM_POOL_SIZE)
ワールドのメモリ確保
Definition GxCollision.cpp:582
b32 setMeshCount(u32 count)
メッシュ登録個数設定
Definition GxCollision.cpp:1046
virtual void executePostCheckCallback(void)
chekc後コールバックを実行
Definition GxCollision.cpp:724
u32 getActiveMeshCount(void)
アクティブな個数の取得
Definition GxCollision.cpp:1163
void detachObjectFromBullet(GxObject *pObject)
Bulletワールドからデタッチ
Definition GxCollision.cpp:943
static constexpr u32 GX_COLLISION_DEFAULT_MAX_PERSISTENT_MANIFOLD_POOL_SIZE
コリジョンの汎用的な最大プールサイズデフォルト値
Definition GxCollision.h:254
void banObject(GxCollision::GxObject *pObject)
ワールドからオブジェクトを登録解除する
Definition GxCollision.cpp:860
static constexpr u32 GX_COLLISION_DEFAULT_STACK_ALLOCATOR_SIZE
コリジョンのスタックアロケーターサイズデフォルト値
Definition GxCollision.h:252
GX_FORCE_INLINE void setPropertyList(const void *const, u32)
再生クラスアドレスの設定
Definition GxCollision.h:440
btCollisionWorld * _pBulletWorld
BULLETコリジョンワールド
Definition GxCollision.h:458
u32 _listClassCount
リストの個数
Definition GxCollision.h:452
virtual GX_FORCE_INLINE void postCheck(void)
check後処理
Definition GxCollision.h:309
b32 checkRayClosestVsWorld(GxCollision::GxRayResult &rayResult, const GxVector3 &startPosition, const GxVector3 &endPosition, GxConditionInformation *pConditionInfo=nullptr)
登録されている全オブジェクトとのレイチェック(最も近い交差点)
Definition GxCollision.cpp:1201
b32 checkCapsuleClosestVsWorld(GxCollision::GxRayResult &rayResult, const GxVector3 &startPosition, const GxVector3 &endPosition, f32 radius, GxConditionInformation *pConditionInfo=nullptr)
Definition GxCollision.cpp:1319
void detachClass(GxCollision *pCollision)
クラス削除
Definition GxCollision.cpp:904
constexpr u32 getMeshCount(void) const
メッシュオブジェクト個数の取得
Definition GxCollision.h:410
コリジョン基本クラス
Definition GxCollision.h:20
constexpr void setPropertyObjectCount(u32)
当たりオブジェクト数を設定
Definition GxCollision.h:199
virtual GX_FORCE_INLINE void initializeActiveOff(void)
アクティブOFF時のパラメタ初期化
Definition GxCollision.h:141
GX_FORCE_INLINE GxVector3 getOffsetAdjustVector(void)
押返しベクトルのオフセットを取得
Definition GxCollision.h:205
GX_FORCE_INLINE void getPropertyActive(void *const pValue)
アクティブを取得
Definition GxCollision.h:188
constexpr u32 getObjectCount(void) const
登録オブジェクトの個数を取得
Definition GxCollision.h:174
GX_FORCE_INLINE b32 isActive(void) const
アクティブ判定
Definition GxCollision.h:168
GxArrayClassBase _listObject
オブジェクトのリスト
Definition GxCollision.h:222
GxWorld * _pRegisterWorld
親ワールド
Definition GxCollision.h:213
COLLISION_SHAPE
コリジョン形状
Definition GxCollision.h:38
constexpr GxWorld * getWorld(void) const
登録ワールドの取得
Definition GxCollision.h:129
static const f32 BULLET_MARGIN
Bulletのマージン値
Definition GxCollision.h:68
constexpr GxUnitBase * getUnit(void) const
登録ユニットの取得
Definition GxCollision.h:135
constexpr void setWorldNull(void)
登録ワールドの削除
Definition GxCollision.h:132
GX_FORCE_INLINE void getPropertyObject(void *const pValue, u32 index)
当たりオブジェクトを取得
Definition GxCollision.h:193
virtual GX_FORCE_INLINE void initializeActiveOn(void)
アクティブON時のパラメタ初期化
Definition GxCollision.h:138
GX_FORCE_INLINE void setHitCallback(GxCollision::COLLISION_CALLBACK pCallback)
コールバックを設定
Definition GxCollision.h:165
virtual GX_FORCE_INLINE void initializeUpdate(void)
更新前のパラメタ初期化
Definition GxCollision.h:144
GX_FORCE_INLINE void setPropertyActive(const void *const pValue)
アクティブを設定
Definition GxCollision.h:190
void(GxClassBaseRoot::*) COLLISION_CALLBACK(void)
コールバック定義
Definition GxCollision.h:65
constexpr u32 getPropertyObjectCount(void) const
当たりオブジェクト数を取得
Definition GxCollision.h:197
COLLISION_CALLBACK _pCallback
補正用コールバック
Definition GxCollision.h:214
GX_FORCE_INLINE void setOffsetAdjustVector(const GxVector3 &offset)
押返しベクトルのオフセットを設定
Definition GxCollision.h:203
constexpr void setPropertyObject(const void *const, u32)
当たりオブジェクトを設定
Definition GxCollision.h:195
クリティカルセクションクラス
Definition GxThread.h:20
算術演算クラス
Definition GxMath.h:84
箱形状クラス
Definition GxShape.h:333
カプセル形状クラス
Definition GxShape.h:707
円柱形状クラス
Definition GxShape.h:634
形状基礎クラス
Definition GxShape.h:45
マルチ球形状クラス
Definition GxShape.h:776
球形状クラス
Definition GxShape.h:240
三角メッシュ形状クラス
Definition GxShape.h:912
ユニット基礎クラス
Definition GxUnitBase.h:45
Definition GxCollision.h:898
GxConvexCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, GxConditionInformation *pConditionInfo)
コンストラクタ
Definition GxCollision.h:905
u32 _triangleIndex
メッシュ形状とヒットしたときのヒットした三角形index
Definition GxCollision.h:936
btScalar addSingleResult(btCollisionWorld::LocalConvexResult &convexResult, bool normalInWorldSpace) override
Definition GxCollision.cpp:2863
GxConditionInformation * _pConditionInfo
レイチェック判定条件構造体
Definition GxCollision.h:935
bool needsCollision(btBroadphaseProxy *pProxy) const override
Definition GxCollision.cpp:2830
Definition GxCollision.h:848
u32 _triangleIndex
メッシュ形状とヒットしたときのヒットした三角形index
Definition GxCollision.h:886
GxRayCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, GxConditionInformation *pConditionInfo)
コンストラクタ
Definition GxCollision.h:855
bool needsCollision(btBroadphaseProxy *pProxy) const override
Definition GxCollision.cpp:2755
btScalar addSingleResult(btCollisionWorld::LocalRayResult &rayResult, bool normalInWorldSpace) override
Definition GxCollision.cpp:2789
GxConditionInformation * _pConditionInfo
レイチェック判定条件構造体
Definition GxCollision.h:885
レイ判定情報
Definition GxCollision.h:945
const GxRayResult & operator=(const GxRayResult &rayResult)
代入
Definition GxCollision.h:965
GxVector3 _position
交差位置
Definition GxCollision.h:994
virtual ~GxRayResult(void)
デストラクタ
Definition GxCollision.h:962
f32 _fraction
交差位置の割合
Definition GxCollision.h:1006
b32 _hasHit
ヒットしたかどうか
Definition GxCollision.h:1007
GxCollision::GxObject * _pObject
交差オブジェクト
Definition GxCollision.h:996
GxVector3 _normal
交差面法線
Definition GxCollision.h:995
GxRayResult(void)
コンストラクタ
Definition GxCollision.h:952
s32 _triangleIndex
交差したメッシュのインデックス
Definition GxCollision.h:997
void setResult(GxCollision::GxRayCallback &resultCallback)
ヒット結果の設定
Definition GxCollision.cpp:2913
u32 _checkFlag
チェックフラグ
Definition GxCollision.h:998
Definition GxColor.h:21
static const GxColor WHITE
Definition GxColor.h:37
アフィン変換行列(行優先)
Definition GxMatrix.h:330
static const GxMatrixAffine IDENTITY
単位行列
Definition GxMatrix.h:341
GX_FORCE_INLINE void setRotate(const GxQuaternion &quaternion)
回転行列を設定
Definition GxMatrix.inl:2257
クォータニオン
Definition GxQuaternion.h:19
文字列型クラス
Definition GxString.h:18
3次元ベクトル
Definition GxVector.h:245
32bitブーリアン
Definition GxDefine.h:173