OROCHI
 
Loading...
Searching...
No Matches
GxCollision::GxObject Class Reference

Collision基本オブジェクトクラス More...

#include <GxCollision.h>

Inheritance diagram for GxCollision::GxObject:
Collaboration diagram for GxCollision::GxObject:

Public Member Functions

初期化
 GxObject (void)
 デフォルトコンストラクタ
 
 ~GxObject (void) override
 デストラクタ
 
アクセサ
constexpr GxShapegetShape (void) const
 GXオブジェクト形状の取得
 
constexpr COLLISION_SHAPE getShapeType (void) const
 オブジェクト形状タイプの取得
 
constexpr GxCollision::GxWorldgetRegisterWorld (void) const
 登録したワールドのアドレスを取得
 
constexpr void setRegisterWorld (GxCollision::GxWorld *pWorld)
 登録したワールドのアドレスを設定
 
GX_FORCE_INLINE const GxMatrixAffinegetMatrixAddress0 (void) const
 マトリクス0のアドレス取得
 
GX_FORCE_INLINE const GxMatrixAffinegetMatrixAddress1 (void) const
 マトリクス1のアドレス取得
 
GX_FORCE_INLINE void setMatrixAddress0 (const GxMatrixAffine *pMatrix)
 マトリクス0のアドレス設定
 
GX_FORCE_INLINE void setMatrixAddress1 (const GxMatrixAffine *pMatrix)
 マトリクス1のアドレス設定
 
GX_FORCE_INLINE GxMatrixAffine getMatrix0 (void) const
 マトリクス0の取得
 
GX_FORCE_INLINE GxMatrixAffine getMatrix1 (void) const
 マトリクス1の取得
 
GX_FORCE_INLINE const GxVector3getOffset0 (void) const
 オフセット0の取得
 
GX_FORCE_INLINE const GxVector3getOffset1 (void) const
 オフセット1の取得
 
GX_FORCE_INLINE void setOffset0 (const GxVector3 &offset)
 オフセット0の設定
 
GX_FORCE_INLINE void setOffset1 (const GxVector3 &offset)
 オフセット1の設定
 
GX_FORCE_INLINE const GxQuaterniongetQuaternion (void)
 回転の取得
 
GX_FORCE_INLINE void setQuaternion (const GxQuaternion &quaternion)
 回転の設定
 
GX_FORCE_INLINE b32 getActiveFlag (u32 flag) const
 アクティブフラグ取得
 
constexpr u32 getActiveFlagAll (void) const
 全アクティブフラグ取得
 
GX_FORCE_INLINE void setActiveFlag (u32 flag, b32 value)
 アクティブフラグ設定
 
GX_FORCE_INLINE b32 isActive (void) const
 アクティブかどうか取得
 
void setActive (b32 active)
 アクティブかどうか設定
 
GX_FORCE_INLINE b32 isActiveOld (void) const
 
constexpr GxUnitBasegetUnit (void) const
 ユニット取得
 
GX_FORCE_INLINE void setUnit (GxUnitBase *pUnit)
 ユニット設定
 
constexpr u32 getId (void) const
 ID取得
 
constexpr void setId (u32 id)
 ID設定
 
constexpr s32 getMaterial (void) const
 マテリアルの取得
 
constexpr void setMaterial (s32 material)
 マテリアルの設定
 
constexpr u32 getCheckFlag (void) const
 チェックフラグの取得
 
constexpr void setCheckFlag (u32 flag)
 チェックフラグの設定
 
constexpr void onCheckFlag (u32 flag)
 チェックフラグの有効化
 
constexpr void offCheckFlag (u32 flag)
 チェックフラグの無効化
 
グループ・マスク関連
Note
衝突判定の早期回避のためのBulletの仕組みです。

isNeedCheck()より先に行われ、 (objA._group & objB._mask) && (objA._mask & objB._group) == false の場合は詳細計算を省き、早期終了します。

_groupには1ビットのみを立て、_maskは複数ビットたたせる事で制御すると 間違いにくいかと思います。

_group/_mask, _checkFlag共GxObject単位で設定されることに注意してください。 メッシュ形状の三角形単位でのフラグチェックに関しては isHitCheckFlagTrimesh()のコメントを参照してください。

_group/_maskと_checkFlagとの違い 1: _maskと_groupによる判定はBullet内で行われる。 _checkFlagによる判定はGxPhysics内で行われる。 2: isHitCheckFlag()よりも早く呼ばれるため、 グループ・マスクを利用したほうが速度が改善する。 3: フラグはvirtualなisHitCheckFlag()で判定される。

constexpr s16 getGroup (void) const
 グループの取得
 
constexpr s16 getMask (void) const
 マスクの取得
 
void setGroupMask (s16 group, s16 mask)
 グループ・マスク設定
 
b32 setSphereRadius (f32 radius)
 球の半径変更
 
b32 setMultisphereRadius (f32 radius0, f32 radius1)
 マルチ球の半径変更
 
b32 setCapsuleRadius (f32 radius)
 カプセルの半径変更
 
b32 setBoxExtent (const GxVector3 &extent)
 箱のサイズ変更
 
b32 setCylinderExtent (const f32 radius, const f32 heightHalf)
 円柱のサイズ変更
 
b32 transformMeshVertex (const GxMatrixAffine &matrix)
 メッシュ頂点の変形
 
void getCenterPosition (GxVector3 &centerPosition)
 中心位置の取得
 
const GxMatrixAffine getCenterMatrix (void)
 中心のマトリクスを取得
 
f32 getRadiusMin (void)
 最小半径の取得
 
const GxVector3 getNormal (const GxVector3 &position)
 法線の取得
 
GX_FORCE_INLINE btCollisionObject * getBulletCollisionObject (void)
 BULLETコリジョンオブジェクトの取得
 
constexpr btCollisionShape * getBulletCollisionShape (void) const
 BULLET形状の取得
 
GX_FORCE_INLINE void getPropertyActiveOld (void *const pValue)
 前回のアクティブを取得
 
GX_FORCE_INLINE void getPropertyActive (void *const pValue)
 アクティブを取得
 
constexpr void setPropertyActiveOld (const void *const)
 前回のアクティブを設定
 
GX_FORCE_INLINE void setPropertyActive (const void *const pValue)
 アクティブを設定
 
constexpr void setCollision (GxCollision *pCollision)
 親コリジョンの設定
 
constexpr GxCollisiongetCollision (void) const
 親コリジョンの取得
 
- Public Member Functions inherited from GxClassBase
constexpr GxClassBase (void)
 コンストラクタ
 
constexpr GxClassBase (const GxClassBase &base)
 コピーコンストラクタ
 
 ~GxClassBase (void) override
 デストラクタ
 
- Public Member Functions inherited from GxClassBaseRoot
constexpr GxClassBaseRoot (void)
 コンストラクタ
 
constexpr GxClassBaseRoot (const GxClassBaseRoot &)
 コピーコンストラクタ
 
virtual ~GxClassBaseRoot (void)
 デストラクタ
 
constexpr GxClassBaseRootoperator= (const GxClassBaseRoot &)
 代入演算子
 
virtual GxRttigetRtti (void) const =0
 Rttiの取得
 
virtual GX_FORCE_INLINE const GxTypedObjectgetDefaultObject (void)
 デフォルトオブジェクトを取得
 
GX_FORCE_INLINE b32 isDefaultObject (void)
 デフォルトオブジェクト判定
 

定義

enum  {
  ACTIVE_FLAG_ACTIVE = (1UL << 0) , ACTIVE_FLAG_ACTIVE_OLD = (1UL << 1) , ACTIVE_FLAG_REQUEST_REGISTER = (1UL << 2) , ACTIVE_FLAG_REQUEST_BAN = (1UL << 3) ,
  ACTIVE_FLAG_REQUEST_DELETE = (1UL << 4)
}
 アクティブフラグ定義 More...
 
static constexpr u32 CHECK_FLAG_ALL = 0x7fffffff
 全フラグ定数
 

メンバ変数

btCollisionShape * _pBtShape
 BULLET用形状
 

操作

virtual void prepareCheck (void)
 当たり判定チェック前準備
 
virtual void update (void)
 オブジェクト位置の更新
 
void addOffset (const GxVector3 &offset)
 オフセット加算
 
virtual b32 isNeedCheck (GxObject *pCollisionObject)
 お互いの当たり判定が必要かどうか
 
virtual b32 isHitCheckFlag (u32 targetFlag)
 チェックフラグからあたり判定が必要かを調べる
 
virtual b32 isHitCheckFlagTrimesh (u32 triangleIndex, u32 targetFlag)
 メッシュ形状の三角形単位で、チェックフラグから当たり判定が必要かを調べる
 
virtual GX_FORCE_INLINE void initializeActiveOn (void)
 アクティブON時のパラメタ初期化
 
virtual GX_FORCE_INLINE void initializeActiveOff (void)
 アクティブOFF時のパラメタ初期化
 
virtual GX_FORCE_INLINE void initializeUpdate (void)
 更新前のパラメタ初期化(1フレームに複数回呼ばれる可能性もある)
 
virtual b32 createSphere (b32 active, u32 id, const GxMatrixAffine *pMatrix, const GxVector3 &offset, const GxShapeSphere &sphere)
 球の作成
 
virtual b32 createBox (b32 active, u32 id, const GxMatrixAffine *pMatrix, const GxVector3 &offset, const GxShapeBox &box)
 ボックスの作成
 
virtual b32 createMultisphere (b32 active, u32 id, const GxMatrixAffine *pMatrix0, const GxVector3 &offset0, const GxMatrixAffine *pMatrix1, const GxVector3 &offset1, const GxShapeMultisphere &multisphere)
 マルチ球の作成
 
virtual b32 createCylinder (b32 active, u32 id, const GxMatrixAffine *pMatrix, const GxVector3 &offset, const GxShapeCylinder &cylinder)
 円柱の作成
 
virtual b32 createCapsule (b32 active, u32 id, const GxMatrixAffine *pMatrix, const GxVector3 &offset, const GxShapeCapsule &capsule)
 カプセルの作成
 
virtual b32 createMesh (b32 active, const GxMatrixAffine *pMatrix, const GxVector3 &offset, const GxShapeTrimesh &trimesh, btTriangleIndexVertexArray *pVertex, b32 isCompress, GxVector3 *pAabbMin=nullptr, GxVector3 *pAabbMax=nullptr)
 メッシュの作成
 
virtual b32 createMesh (b32 active, const GxMatrixAffine *pMatrix, const GxVector3 &offset, const GxShapeTrimesh &trimesh, btBvhTriangleMeshShape *pBtTrimeshShape)
 メッシュの作成(外部からBULLET用のシェイプを取得)
 
void resetBulletShape (btCollisionShape *pBtShapeNew)
 Bullet形状を再設定
 
GX_FORCE_INLINE void updateActiveFlag (void)
 アクティブフラグ更新
 
virtual void initialize (b32 active, u32 id, const GxMatrixAffine *pMatrix0, const GxVector3 &offset0, const GxMatrixAffine *pMatrix1, const GxVector3 &offset1)
 オブジェクトの初期化
 
GX_FORCE_INLINE void updateUnitPointer (void)
 ユニットポインタの更新
 

Additional Inherited Members

- Static Public Member Functions inherited from GxClassBaseRoot
static GX_FORCE_INLINE GxRtti__getStaticRtti (void)
 Rttiの取得
 

Detailed Description

Collision基本オブジェクトクラス

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

アクティブフラグ定義

Enumerator
ACTIVE_FLAG_ACTIVE 

オブジェクトがアクティブ状態かどうか

ACTIVE_FLAG_ACTIVE_OLD 

オブジェクトがアクティブ状態だったかどうか

ACTIVE_FLAG_REQUEST_REGISTER 

アクティブフラグON登録待ち

ACTIVE_FLAG_REQUEST_BAN 

アクティブフラグOFF登録待ち

ACTIVE_FLAG_REQUEST_DELETE 

オブジェクト削除待ち

Member Function Documentation

◆ addOffset()

void GxCollision::GxObject::addOffset ( const GxVector3 & offset)

オフセット加算

Parameters
offset[in] オフセット

◆ createBox()

b32 GxCollision::GxObject::createBox ( b32 active,
u32 id,
const GxMatrixAffine * pMatrix,
const GxVector3 & offset,
const GxShapeBox & box )
virtual

ボックスの作成

Parameters
active[in] 登録後すぐアクティブにするかどうか
id[in] 当たりID
pMatrix[in] 引っ付けるマトリクス
offset[in] マトリクスからのオフセット
box[in] ボックス形状
Returns
成功ならtrue
Here is the call graph for this function:

◆ createCapsule()

b32 GxCollision::GxObject::createCapsule ( b32 active,
u32 id,
const GxMatrixAffine * pMatrix,
const GxVector3 & offset,
const GxShapeCapsule & capsule )
virtual

カプセルの作成

Parameters
active[in] 登録後すぐアクティブにするかどうか
id[in] 当たりID
pMatrix[in] 引っ付けるマトリクス
offset[in] マトリクスからのオフセット
capsule[in] カプセル形状
Returns
成功ならtrue
Here is the call graph for this function:

◆ createCylinder()

b32 GxCollision::GxObject::createCylinder ( b32 active,
u32 id,
const GxMatrixAffine * pMatrix,
const GxVector3 & offset,
const GxShapeCylinder & cylinder )
virtual

円柱の作成

Parameters
active[in] 登録後すぐアクティブにするかどうか
id[in] 当たりID
pMatrix[in] 引っ付けるマトリクス
offset[in] マトリクスからのオフセット
cylinder[in] 円柱形状
Returns
成功ならtrue
Here is the call graph for this function:

◆ createMesh() [1/2]

b32 GxCollision::GxObject::createMesh ( b32 active,
const GxMatrixAffine * pMatrix,
const GxVector3 & offset,
const GxShapeTrimesh & trimesh,
btBvhTriangleMeshShape * pBtTrimeshShape )
virtual

メッシュの作成(外部からBULLET用のシェイプを取得)

Parameters
active[in] 登録後すぐアクティブにするかどうか
pMatrix[in] セットする位置と向き。
offset[in] マトリクスからのオフセット
trimesh[in] 三角形メッシュ形状
pBtTrimeshShape[in] 外部で作成したBULLETのメッシュシェイプ
Returns
成功ならtrue
Here is the call graph for this function:

◆ createMesh() [2/2]

b32 GxCollision::GxObject::createMesh ( b32 active,
const GxMatrixAffine * pMatrix,
const GxVector3 & offset,
const GxShapeTrimesh & trimesh,
btTriangleIndexVertexArray * pVertex,
b32 isCompress,
GxVector3 * pAabbMin = nullptr,
GxVector3 * pAabbMax = nullptr )
virtual

メッシュの作成

Parameters
active[in] 登録後すぐアクティブにするかどうか
pMatrix[in] セットする位置と向き。
offset[in] マトリクスからのオフセット
trimesh[in] 三角形メッシュ形状
pVertex[in] 背景メッシュ作成に必要な頂点情報
isCompress[in] 圧縮するかどうか(s-fukuda考察:AABBの量子化を行うかどうか。高速化すると思うが、サイズがでかいと誤差もでかくなるんじゃないかと思う。)
pAabbMin[in] メッシュを囲むAABBボックスの最小値
pAabbMax[in] メッシュを囲むAABBボックスの最大値
Returns
成功ならtrue
Here is the call graph for this function:

◆ createMultisphere()

b32 GxCollision::GxObject::createMultisphere ( b32 active,
u32 id,
const GxMatrixAffine * pMatrix0,
const GxVector3 & offset0,
const GxMatrixAffine * pMatrix1,
const GxVector3 & offset1,
const GxShapeMultisphere & multisphere )
virtual

マルチ球の作成

Parameters
active[in] 登録後すぐアクティブにするかどうか
id[in] 当たりID
pMatrix0[in] 引っ付けるマトリクス0番
offset0[in] マトリクス0番からのオフセット
pMatrix1[in] 引っ付けるマトリクス1番
offset1[in] マトリクス1番からのオフセット
multisphere[in] マルチ球形状
Returns
成功ならtrue
Here is the call graph for this function:

◆ createSphere()

b32 GxCollision::GxObject::createSphere ( b32 active,
u32 id,
const GxMatrixAffine * pMatrix,
const GxVector3 & offset,
const GxShapeSphere & sphere )
virtual

球の作成

Parameters
active[in] 登録後すぐアクティブにするかどうか
id[in] 当たりID
pMatrix[in] 引っ付けるマトリクス
offset[in] マトリクスからのオフセット
sphere[in] 球の形状
Returns
成功ならtrue
Here is the call graph for this function:

◆ getCenterMatrix()

const GxMatrixAffine GxCollision::GxObject::getCenterMatrix ( void )

中心のマトリクスを取得

Returns
中心位置をポジションとするマトリクス
Here is the call graph for this function:

◆ getCenterPosition()

void GxCollision::GxObject::getCenterPosition ( GxVector3 & centerPosition)

中心位置の取得

Parameters
centerPosition[out] 中心位置
Here is the call graph for this function:
Here is the caller graph for this function:

◆ getNormal()

const GxVector3 GxCollision::GxObject::getNormal ( const GxVector3 & position)

法線の取得

Parameters
position[in] 物体の表面位置
Returns
法線

◆ getRadiusMin()

f32 GxCollision::GxObject::getRadiusMin ( void )

最小半径の取得

Returns
最小半径
Here is the call graph for this function:

◆ initialize()

void GxCollision::GxObject::initialize ( b32 active,
u32 id,
const GxMatrixAffine * pMatrix0,
const GxVector3 & offset0,
const GxMatrixAffine * pMatrix1,
const GxVector3 & offset1 )
protectedvirtual

オブジェクトの初期化

Parameters
active[in] アクティブにするかどうか
id[in] 当たりID
pMatrix0[in] 当たりを引っ付けるマトリクス0
offset0[in] 当たりを引っ付けるオフセット0
pMatrix1[in] 当たりを引っ付けるマトリクス1
offset1[in] 当たりを引っ付けるオフセット1

Reimplemented in GxAdjustHit::GxObject, and GxAttackHit::GxObject.

Here is the call graph for this function:

◆ initializeActiveOff()

virtual GX_FORCE_INLINE void GxCollision::GxObject::initializeActiveOff ( void )
inlinevirtual

アクティブOFF時のパラメタ初期化

Reimplemented in GxAdjustHit::GxObject, and GxAttackHit::GxObject.

Here is the caller graph for this function:

◆ initializeActiveOn()

virtual GX_FORCE_INLINE void GxCollision::GxObject::initializeActiveOn ( void )
inlinevirtual

アクティブON時のパラメタ初期化

Reimplemented in GxAdjustHit::GxObject.

Here is the caller graph for this function:

◆ initializeUpdate()

virtual GX_FORCE_INLINE void GxCollision::GxObject::initializeUpdate ( void )
inlinevirtual

更新前のパラメタ初期化(1フレームに複数回呼ばれる可能性もある)

Reimplemented in GxAdjustHit::GxObject, and GxAttackHit::GxObject.

◆ isHitCheckFlag()

b32 GxCollision::GxObject::isHitCheckFlag ( u32 targetFlag)
virtual

チェックフラグからあたり判定が必要かを調べる

Parameters
targetFlag[in] 調べる相手のフラグ
Returns
当たり判定が必要ならtrue

◆ isHitCheckFlagTrimesh()

b32 GxCollision::GxObject::isHitCheckFlagTrimesh ( u32 triangleIndex,
u32 targetFlag )
virtual

メッシュ形状の三角形単位で、チェックフラグから当たり判定が必要かを調べる

Parameters
triangleIndex[in] 自形状の調べる三角形のindex
targetFlag[in] 調べる相手のフラグ
Returns
当たり判定が必要ならtrue

◆ isNeedCheck()

b32 GxCollision::GxObject::isNeedCheck ( GxCollision::GxObject * pCollisionObject)
virtual

お互いの当たり判定が必要かどうか

Parameters
pCollisionObject[in] 判定相手
Returns
当たり判定が必要ならtrue

Reimplemented in GxAdjustHit::GxObject, GxAttackHit::GxObject, and GxEventHit::GxObject.

Here is the call graph for this function:

◆ resetBulletShape()

void GxCollision::GxObject::resetBulletShape ( btCollisionShape * pBtShapeNew)

Bullet形状を再設定

Parameters
pBtShapeNew[in] 新しいBullet形状
Here is the call graph for this function:

◆ setActive()

void GxCollision::GxObject::setActive ( b32 active)

アクティブかどうか設定

Parameters
active[in] アクティブならtrue
Here is the caller graph for this function:

◆ setBoxExtent()

b32 GxCollision::GxObject::setBoxExtent ( const GxVector3 & extent)

箱のサイズ変更

Parameters
extent[in] 箱のサイズ(extent*2が箱の幅、高さ、奥行きになる)
Returns
変形成功ならtrue
Here is the call graph for this function:

◆ setCapsuleRadius()

b32 GxCollision::GxObject::setCapsuleRadius ( f32 radius)

カプセルの半径変更

Parameters
radius[in] 半径
Returns
変形成功ならtrue
Here is the call graph for this function:

◆ setCylinderExtent()

b32 GxCollision::GxObject::setCylinderExtent ( const f32 radius,
const f32 heightHalf )

円柱のサイズ変更

Parameters
radius[in] 円柱半径
heightHalf[in] 円柱高さの半分
Returns
変形成功ならtrue
Here is the call graph for this function:

◆ setGroupMask()

void GxCollision::GxObject::setGroupMask ( s16 group,
s16 mask )

グループ・マスク設定

Parameters
group[in] グループ(自分)
mask[in] マスク(当たる相手)

◆ setMultisphereRadius()

b32 GxCollision::GxObject::setMultisphereRadius ( f32 radius0,
f32 radius1 )

マルチ球の半径変更

Parameters
radius0[in] 半径0
radius1[in] 半径1
Returns
変形成功ならtrue
Here is the call graph for this function:

◆ setSphereRadius()

b32 GxCollision::GxObject::setSphereRadius ( f32 radius)

球の半径変更

Parameters
radius[in] 半径
Returns
変形成功ならtrue
Here is the call graph for this function:

◆ transformMeshVertex()

b32 GxCollision::GxObject::transformMeshVertex ( const GxMatrixAffine & matrix)

メッシュ頂点の変形

Parameters
matrix[in] 頂点を変形させるマトリクス
Returns
変形成功ならtrue
Here is the call graph for this function:

◆ update()

void GxCollision::GxObject::update ( void )
virtual

オブジェクト位置の更新

Reimplemented in GxAttackHit::GxObject.

Here is the call graph for this function:

The documentation for this class was generated from the following files: