OROCHI
 
Loading...
Searching...
No Matches
GxModUnitSoftbody.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(GxModUnitSoftbody, GxModUnitBase)
26 // ClassBase継承クラス用禁止宣言
28
29
30 //-----------------------------------------------------------
32 //-----------------------------------------------------------
34public:
38 ~GxModUnitSoftbody(void) override;
39
41 //-----------------------------------------------------------
43 //-----------------------------------------------------------
45public:
47 virtual u32 initialize(
48 GxUnitModelBase* pModelSimulation,
49 GxResSoftbodySimulation* pResourceSimulation,
50 u32 unitProcessNumberSimulation = USBS_DEFAULT_UNIT_PROCESS_NUMBER_SIMULATION,
51 u32 unitListNumberSimulation = USBS_DEFAULT_UNIT_LIST_NUMBER_SIMULATION,
52 GxUnitModelBase* pModelCollision = nullptr,
53 GxResSoftbodyCollision* pResourceCollision = nullptr,
54 u32 unitProcessNumberCollision = USBS_DEFAULT_UNIT_PROCESS_NUMBER_SIMULATION-1,
55 u32 unitListNumberCollision = USBS_DEFAULT_UNIT_LIST_NUMBER_SIMULATION-1,
56 GxRtti& chainUnitRtti = GxUnitChainModel::GX_RTTI,
57 GxRtti& clothUnitRtti = GxUnitClothModel::GX_RTTI
58 );
59
61 b32 setupCollision(
62 GxUnitModelBase* pModelCollision,
63 GxResSoftbodyCollision* pResourceCollision,
64 u32 unitProcessNumberCollision = USBS_DEFAULT_UNIT_PROCESS_NUMBER_SIMULATION - 1,
65 u32 unitListNumberCollision = USBS_DEFAULT_UNIT_LIST_NUMBER_SIMULATION - 1
66 );
67
69 virtual void cleanup(void);
70
72
78 void updateLocalMatrixFromWorldMatrix(void);
79
80#if SOFTBODY_USE_REPLAY
84 GX_FORCE_INLINE void startReplayingData(u32 replayNumber = 0, b32 isRepeat = false) { if (_pUnitSimulation) _pUnitSimulation->startReplayingData(replayNumber, isRepeat); }
86 GX_FORCE_INLINE void endReplayingData(void) { if (_pUnitSimulation) _pUnitSimulation->endReplayingData(); }
87
91 GX_FORCE_INLINE void startWritingReplayData(u32 replayNumber = 0, u32 saveFrame = 0xFFFFFFFF) { if (_pUnitSimulation) _pUnitSimulation->startWritingReplayData(replayNumber, saveFrame); }
93 GX_FORCE_INLINE void endWritingReplayData(void) { if (_pUnitSimulation) _pUnitSimulation->endWritingReplayData(); }
94#endif // SOFTBODY_USE_REPLAY
95
97 //-----------------------------------------------------------
99 //-----------------------------------------------------------
101
103 GX_FORCE_INLINE b32 isSetup(void) const { return _isSetup; }
104
106 constexpr u32 getChainCount(void) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->getChainCount() ) : ( 0 ); }
107
109 constexpr GxUnitChainModel* getChainUnit(u32 index) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->getChainUnit(index) ) : ( nullptr ); }
111 constexpr GxUnitChainModel* getChainUnitFromID(u32 id) const { return (_pUnitSimulation) ? (_pUnitSimulation->getChainUnitFromID(id)) : (nullptr); }
112
114 constexpr u32 getClothCount(void) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->getClothCount() ) : ( 0 ); }
115
117 constexpr GxUnitClothModel* getClothUnit(u32 index) const { return (_pUnitSimulation) ? (_pUnitSimulation->getClothUnit(index)) : (nullptr); }
119 constexpr GxUnitClothModel* getClothUnitFromID(u32 id) const { return (_pUnitSimulation) ? (_pUnitSimulation->getClothUnitFromID(id)) : (nullptr); }
120
122 GX_FORCE_INLINE b32 isSimulation(void) const { return _pUnitSimulation ? _pUnitSimulation->isSimulation() : static_cast<b32>(false); }
124
128 GX_FORCE_INLINE void setIsSimulation(b32 enable) { if( _pUnitSimulation ) _pUnitSimulation->setIsSimulation( enable ); }
129
131 GX_FORCE_INLINE b32 isInterpolateToMotion(void) const { return _pUnitSimulation ? _pUnitSimulation->isInterpolateToMotion() : static_cast<b32>(false); }
132
134 constexpr void forceDisableSimulation(void){ if( _pUnitSimulation ) _pUnitSimulation->forceDisableSimulation(); }
135
137 constexpr f32 getInterpolateTime(void) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->getInterpolateTime() ) : 0.0f; }
139 constexpr void setInterpolateTime(f32 time) { if( _pUnitSimulation ) _pUnitSimulation->setInterpolateTime( time ); }
140
142 GX_FORCE_INLINE b32 isMotionGravity(void) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->isMotionGravity() ) : static_cast<b32>(false); }
144 GX_FORCE_INLINE void setIsMotionGravity(b32 enable) { if( _pUnitSimulation ) _pUnitSimulation->setIsMotionGravity(enable); }
146
153 GX_FORCE_INLINE void setMotionGravity(b32 enable, f32 gravityForce, const GxVector3& gravityDirection = -GxVector3::AXIS_Y) { if( _pUnitSimulation ) _pUnitSimulation->setMotionGravity(enable, gravityForce, gravityDirection); }
154
156 GX_FORCE_INLINE b32 isUpdateAllMatrix(void) const { return _pUnitSimulation ? _pUnitSimulation->isUpdateAllMatrix() : static_cast<b32>(false); }
158
163 GX_FORCE_INLINE void setIsUpdateAllMatrix(b32 is) { if( _pUnitSimulation ) _pUnitSimulation->setIsUpdateAllMatrix( is ); }
164
166 GX_FORCE_INLINE GxVector3 getGravity(void) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->getGravity() ) : ( GxVector3::ZERO ); }
168 GX_FORCE_INLINE void setGravity(const GxVector3& gravity) { if( _pUnitSimulation ) _pUnitSimulation->setGravity(gravity); }
170 constexpr f32 getGravityForce(void) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->getGravityForce() ) : ( 0.0f ); }
172 constexpr void setGravityForce(f32 force) { if( _pUnitSimulation ) _pUnitSimulation->setGravityForce(force); }
174 GX_FORCE_INLINE const GxVector3& getGravityDirection(void) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->getGravityDirection() ) : ( GxVector3::ZERO ); }
176 GX_FORCE_INLINE void setGravityDirection(const GxVector3& direction) { if( _pUnitSimulation ) _pUnitSimulation->setGravityDirection(direction); }
177
179 GX_FORCE_INLINE GxVector3 getWind(void) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->getWind() ) : ( GxVector3::ZERO ); }
181 GX_FORCE_INLINE void setWind(const GxVector3& wind) { if( _pUnitSimulation ) _pUnitSimulation->setWind(wind); }
183 constexpr f32 getWindForce(void) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->getWindForce() ) : ( 0.0f ); }
185 constexpr void setWindForce(f32 force) { if( _pUnitSimulation ) _pUnitSimulation->setWindForce(force); }
187 GX_FORCE_INLINE const GxVector3& getWindDirection(void) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->getWindDirection() ) : ( GxVector3::ZERO ); }
189 GX_FORCE_INLINE void setWindDirection(const GxVector3& direction) { if( _pUnitSimulation ) _pUnitSimulation->setWindDirection(direction); }
190
192
195 constexpr GxUnitSoftbodyCollision* getCollisionFromSimulation(void) const { return ( _pUnitSimulation ) ? ( _pUnitSimulation->getCollision() ) : ( nullptr ); }
197
201 GX_FORCE_INLINE void setCollisionToSimulation(GxUnitSoftbodyCollision* pCollision) { if( _pUnitSimulation ) _pUnitSimulation->setCollision(pCollision); setCollision( pCollision ); }
202
204
207 constexpr GxUnitSoftbodyCollision* getCollision(void) const { return _pUnitCollision; }
209
212 GX_FORCE_INLINE void setCollision(GxUnitSoftbodyCollision* pCollision) { GX_UPDATE_UNIT_POINTER( _pUnitCollision ); GX_SAFE_KILL( _pUnitCollision ); _pUnitCollision = pCollision; _pUnitCollision->addReference(); }
213
214#if GX_DEVELOP
216 GX_FORCE_INLINE b32 isDevelopRenderSimulation(void) const { return _pUnitSimulation ? _pUnitSimulation->isDevelopRender() : static_cast<b32>(false); }
218 GX_FORCE_INLINE void setIsDevelopRenderSimulation(b32 is) { if( _pUnitSimulation ) _pUnitSimulation->setDevelopRender( is ); }
220 GX_FORCE_INLINE void setIsDevelopRenderMassPoint(b32 is) { if(_pUnitSimulation) _pUnitSimulation->setDevelopRenderMassPoint(is); }
222 GX_FORCE_INLINE void setIsForceDevelopRender(b32 is) { if(_pUnitSimulation) _pUnitSimulation->setForceDevelopRender(is); }
223
225 constexpr u32 isDevelopRenderCollision(void) const { return static_cast<s32>(_pUnitCollision ? _pUnitCollision->getDevelopRenderMode() : GxUnitSoftbodyCollision::DEVELOP_RENDER_MODE::NONE); }
227 constexpr void setIsDevelopRenderCollision(GxUnitSoftbodyCollision::DEVELOP_RENDER_MODE mode) { if( _pUnitCollision ) _pUnitCollision->setDevelopRenderMode(mode); }
228
230 constexpr void getPropertyEnable(void* const pValue) { if( _pUnitSimulation ) *static_cast<b32*>(pValue) = _pUnitSimulation->isSimulation(); }
232 constexpr void setPropertyEnable(const void* const pValue) { if( _pUnitSimulation ) _pUnitSimulation->setIsSimulation( *static_cast<b32*>(const_cast<void*>(pValue))); }
233
235 constexpr void getPropertyVisibleSimulation(void* const pValue) { if( _pUnitSimulation ) *static_cast<b32*>(pValue) = _pUnitSimulation->isDevelopRender(); }
237 constexpr void setPropertyVisibleSimulation(const void* const pValue) { if( _pUnitSimulation ) _pUnitSimulation->setDevelopRender( *static_cast<b32*>(const_cast<void*>(pValue))); }
238
240 constexpr void getPropertyVisibleCollision(void* const pValue) { if( _pUnitCollision ) *static_cast<b32*>(pValue) = (GxUnitSoftbodyCollision::DEVELOP_RENDER_MODE::NONE==_pUnitCollision->getDevelopRenderMode()) ? false : true; }
242 constexpr void setPropertyVisibleCollision(const void* const pValue) { if( _pUnitCollision ) _pUnitCollision->setDevelopRenderMode( (0==*static_cast<b32*>(const_cast<void*>(pValue)))?GxUnitSoftbodyCollision::DEVELOP_RENDER_MODE::NONE:GxUnitSoftbodyCollision::DEVELOP_RENDER_MODE::WIRE ); }
243#endif // GX_DEVELOP
244
246 //-----------------------------------------------------------
248 //-----------------------------------------------------------
250protected:
252
257
259};
260
261GX_UTILITY_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
virtual s32 addReference(void)
参照カウンタを加算
Definition GxBase.cpp:303
ユニットモジュール基礎クラス
Definition GxModUnitBase.h:22
モデル対応シミュレーション、コリジョン統合モジュールクラス
Definition GxModUnitSoftbody.h:18
constexpr void setWindForce(f32 force)
風力設定
Definition GxModUnitSoftbody.h:185
GX_FORCE_INLINE GxVector3 getWind(void) const
風取得
Definition GxModUnitSoftbody.h:179
constexpr f32 getInterpolateTime(void) const
補間時間の取得(シミュレーション→モーションの補間にかける時間)
Definition GxModUnitSoftbody.h:137
GxUnitSoftbodyCollision * _pUnitCollision
コリジョンユニット
Definition GxModUnitSoftbody.h:256
GX_FORCE_INLINE void setCollisionToSimulation(GxUnitSoftbodyCollision *pCollision)
コリジョンの設定
Definition GxModUnitSoftbody.h:201
GX_FORCE_INLINE void setIsSimulation(b32 enable)
有効/無効の設定
Definition GxModUnitSoftbody.h:128
constexpr GxUnitChainModel * getChainUnitFromID(u32 id) const
指定番号の鎖ユニット取得
Definition GxModUnitSoftbody.h:111
GX_FORCE_INLINE const GxVector3 & getGravityDirection(void) const
重力取得(方向のみ)
Definition GxModUnitSoftbody.h:174
GX_FORCE_INLINE b32 isSimulation(void) const
有効判定
Definition GxModUnitSoftbody.h:122
constexpr GxUnitSoftbodyCollision * getCollisionFromSimulation(void) const
コリジョンの取得
Definition GxModUnitSoftbody.h:195
GX_FORCE_INLINE void setGravityDirection(const GxVector3 &direction)
重力設定(方向のみ)
Definition GxModUnitSoftbody.h:176
GX_FORCE_INLINE void setCollision(GxUnitSoftbodyCollision *pCollision)
コリジョンの設定
Definition GxModUnitSoftbody.h:212
GX_FORCE_INLINE b32 isSetup(void) const
セットアップ済みか
Definition GxModUnitSoftbody.h:103
GX_FORCE_INLINE const GxVector3 & getWindDirection(void) const
風向取得
Definition GxModUnitSoftbody.h:187
constexpr void setGravityForce(f32 force)
重力設定(大きさのみ)
Definition GxModUnitSoftbody.h:172
GX_FORCE_INLINE void setIsMotionGravity(b32 enable)
重力を修正してモーションへ収束させるか設定
Definition GxModUnitSoftbody.h:144
GxUnitModelBase * _pParentModelCollision
コリジョン付与するモデル
Definition GxModUnitSoftbody.h:254
constexpr void forceDisableSimulation(void)
シミュレーションを強制終了してモーションへ(補間しない)
Definition GxModUnitSoftbody.h:134
GX_FORCE_INLINE GxVector3 getGravity(void) const
重力取得
Definition GxModUnitSoftbody.h:166
GX_FORCE_INLINE void setGravity(const GxVector3 &gravity)
重力設定
Definition GxModUnitSoftbody.h:168
constexpr GxUnitChainModel * getChainUnit(u32 index) const
指定番号の鎖ユニット取得
Definition GxModUnitSoftbody.h:109
GxUnitSoftbodySimulation * _pUnitSimulation
シミュレーションユニット
Definition GxModUnitSoftbody.h:255
constexpr GxUnitSoftbodyCollision * getCollision(void) const
コリジョンの取得
Definition GxModUnitSoftbody.h:207
GX_FORCE_INLINE void setWind(const GxVector3 &wind)
風設定
Definition GxModUnitSoftbody.h:181
GX_FORCE_INLINE b32 isInterpolateToMotion(void) const
シミュレーションからモーションへ補間している状態か判定
Definition GxModUnitSoftbody.h:131
constexpr void setInterpolateTime(f32 time)
補間時間の設定(シミュレーション→モーションの補間にかける時間)
Definition GxModUnitSoftbody.h:139
GxUnitModelBase * _pParentModelSimulation
シミュレートするモデル
Definition GxModUnitSoftbody.h:253
constexpr u32 getChainCount(void) const
鎖ユニットの個数取得
Definition GxModUnitSoftbody.h:106
constexpr f32 getWindForce(void) const
風力取得
Definition GxModUnitSoftbody.h:183
constexpr GxUnitClothModel * getClothUnitFromID(u32 id) const
指定番号の布ユニット取得
Definition GxModUnitSoftbody.h:119
constexpr GxUnitClothModel * getClothUnit(u32 index) const
指定番号の布ユニット取得
Definition GxModUnitSoftbody.h:117
GX_FORCE_INLINE void setIsUpdateAllMatrix(b32 is)
すべての行列を更新するフラグ設定
Definition GxModUnitSoftbody.h:163
GX_FORCE_INLINE void setWindDirection(const GxVector3 &direction)
風向設定
Definition GxModUnitSoftbody.h:189
GX_FORCE_INLINE b32 isUpdateAllMatrix(void) const
すべての行列を更新するフラグ判定
Definition GxModUnitSoftbody.h:156
constexpr f32 getGravityForce(void) const
重力取得(大きさのみ)
Definition GxModUnitSoftbody.h:170
constexpr u32 getClothCount(void) const
布ユニットの個数取得
Definition GxModUnitSoftbody.h:114
GX_FORCE_INLINE void setMotionGravity(b32 enable, f32 gravityForce, const GxVector3 &gravityDirection=-GxVector3::AXIS_Y)
重力を修正してモーションへ収束させるか設定 - パラメータ変更込み
Definition GxModUnitSoftbody.h:153
GX_FORCE_INLINE b32 isMotionGravity(void) const
重力を修正してモーションへ収束させているか判定
Definition GxModUnitSoftbody.h:142
b32 _isSetup
セットアップ済みフラグ
Definition GxModUnitSoftbody.h:251
モデル対応コリジョンリソースクラス
Definition GxResSoftbodyCollision.h:18
モデル対応物理シミュレーション統合リソースクラス
Definition GxResSoftbodySimulation.h:18
実行時型情報クラス
Definition GxRtti.h:154
モデルベース鎖クラス
Definition GxUnitChainModel.h:18
モデルベース布クラス
Definition GxUnitClothModel.h:18
モデル基礎クラス
Definition GxUnitModelBase.h:19
クロスシミュレーション用コリジョンクラス
Definition GxUnitSoftbodyCollision.h:18
モデル対応シミュレーション統合ユニットクラス
Definition GxUnitSoftbodySimulation.h:24
3次元ベクトル
Definition GxVector.h:245
static const GxVector3 ZERO
(0, 0, 0)
Definition GxVector.h:256
static const GxVector3 AXIS_Y
(0, 1, 0)
Definition GxVector.h:262
32bitブーリアン
Definition GxDefine.h:173