OROCHI
 
Loading...
Searching...
No Matches
GxToolSoftbodyCollision.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13#if GX_EDITOR
14
15GX_UTILITY_NAMESPACE_BEGIN()
16//===========================================================================
18//===========================================================================
19class GxToolSoftbodyCollision : public GxToolResourceEditBase
20{
21 //-----------------------------------------------------------
23 //-----------------------------------------------------------
25public:
26 // RTTI宣言
27 GX_RTTI_CLASS_NAME_ICON(GxToolSoftbodyCollision, GxToolResourceEditBase, "ソフトボディコリジョン編集", GxRtti::ICON_TYPE::UTILITY)
28 // 参照クラス用禁止宣言
29 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxToolSoftbodyCollision)
30
31
32 enum
33 {
34 TOOL_POSITION_X = 40,
35 TOOL_POSITION_Y = 2,
36 TOOL_WIDTH = 273,
37 TOOL_HEIGHT = 720 - TOOL_POSITION_Y * 2,
38 TOOL_SPLIT_Y = 316,
39 TOOLDATAFORM_SPLIT_Y = 140,
40 LINE_2_SPLIT_Y = 20 + 16 * 2,
41 LINE_4_SPLIT_Y = 20 + 16 * 4,
42 FORM_WIDTH = 100,
43 FORM_HEIGHT = 100,
44 };
45
47 enum GTC_TOOLFLAG
48 {
49 GTC_TOOLFLAG_RENDER = ( 1 << 0 ),
50 GTC_TOOLFLAG_RENDER_ONLY_SELECTED_COLLISION_DATA = ( 1 << 1 ),
51 GTC_TOOLFLAG_SAMEUNIT = ( 1 << 2 ),
52
53 GTC_TOOLFLAG_DEFAULT = ( GTC_TOOLFLAG_RENDER )
54 };
55
56 class GxFormToolData;
57 class GxFormCollisionData;
58 class GxUnitCollision;
59 class GxUnitSimulation;
60
62 //-----------------------------------------------------------
64 //-----------------------------------------------------------
66
68 GxToolSoftbodyCollision(void);
69
71 b32 initialize(void) override;
73 void cleanup(void) override;
74
76 //-----------------------------------------------------------
78 //-----------------------------------------------------------
80
82 void update(void) override;
84 void setResource(GxResBase* pResrouce) override;
85
87 void createUnitCollision(void);
89 void createUnitSimulation(void);
90
92 void renderCollisionData(void);
93
95 //-----------------------------------------------------------
97 //-----------------------------------------------------------
99
101 void setResourceModelCollision(GxResModel* pResourceModelCollision);
103 void setResourceModelSimulation(GxResModel* pResourceModelSimulation);
105 void setResourceMotionCollision(GxResMotionPackage* pResourceMotion);
107 void setResourceMotionSimulation(GxResMotionPackage* pResourceMotion);
109 void setResourceSimulation(GxResSoftbodySimulationXml* pResourceSimulation);
110
112 virtual const GxRtti& getCreateModelRttiCollision(void);
114 virtual const GxRtti& getCreateModelRttiSimulation(void);
115
117 constexpr void getPropertyResourceModelCollision(void* const pValue) { *static_cast<GxResModel**>(pValue) = _pResourceModelCollision; }
119 GX_FORCE_INLINE void setPropertyResourceModelCollision(const void* const pValue) { GxResModel * pResourceModelCollision = *static_cast<GxResModel**>(const_cast<void*>(pValue)); setResourceModelCollision( pResourceModelCollision ); }
120
122 constexpr void getPropertyResourceMotionCollision(void* const pValue) { *static_cast<GxResMotionPackage**>(pValue) = _pResourceMotionCollision; }
124 GX_FORCE_INLINE void setPropertyResourceMotionCollision(const void* const pValue) { GxResMotionPackage * pResourceMotion = *static_cast<GxResMotionPackage**>(const_cast<void*>(pValue)); setResourceMotionCollision( pResourceMotion ); }
125
127 constexpr void getPropertyResourceModelSimulation(void* const pValue) { *static_cast<GxResModel**>(pValue) = _pResourceModelSimulation; }
129 GX_FORCE_INLINE void setPropertyResourceModelSimulation(const void* const pValue) { GxResModel * pResourceModelSimulation = *static_cast<GxResModel**>(const_cast<void*>(pValue)); setResourceModelSimulation( pResourceModelSimulation ); }
130
132 constexpr void getPropertyResourceMotionSimulation(void* const pValue) { *static_cast<GxResMotionPackage**>(pValue) = _pResourceMotionSimulation; }
134 GX_FORCE_INLINE void setPropertyResourceMotionSimulation(const void* const pValue) { GxResMotionPackage * pResourceMotion = *static_cast<GxResMotionPackage**>(const_cast<void*>(pValue)); setResourceMotionSimulation( pResourceMotion ); }
135
137 constexpr void getPropertyResourceSimulation(void* const pValue) { *static_cast<GxResSoftbodySimulationXml**>(pValue) = _pResourceSimulation; }
139 GX_FORCE_INLINE void setPropertyResourceSimulation(const void* const pValue) { GxResSoftbodySimulationXml* pResource = *static_cast<GxResSoftbodySimulationXml**>(const_cast<void*>(pValue)); setResourceSimulation( pResource ); }
140
142 void getPropertyTable(GxPropertyTable* pPropertyTable);
143
145 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index = 0);
146
148 constexpr GxResSoftbodyCollisionXml* getResourceCollisionXml(void) { return static_cast<GxResSoftbodyCollisionXml*>(getResource()); }
150 GX_FORCE_INLINE const GxResSoftbodyCollisionXml* getResourceCollisionXml(void) const { return static_cast<const GxResSoftbodyCollisionXml*>(getResource()); }
151
153 constexpr GxResSoftbodySimulationXml* getResourceSimulation(void) const { return _pResourceSimulation; }
154
156 constexpr GxUnitCollision* getUnitCollision(void) const { return _pUnitCollision; }
158 constexpr GxUnitSimulation* getUnitSimulation(void) const { return _pUnitSimulation; }
159
161 constexpr GxResSoftbodyCollisionXml::GxSoftbodyCollisionData* getCollisionDataCurrent(void) const { return _pCollisionDataCurrent; }
163 constexpr void setCollisionDataCurrent(GxResSoftbodyCollisionXml::GxSoftbodyCollisionData* pCollisionData) { _pCollisionDataCurrent = pCollisionData; }
164
166 GX_FORCE_INLINE b32 isToolDebugRendering(void) const { return /*_isToolDebugRendering &&*/ isDataRendering(); }
168 GX_FORCE_INLINE void setToolDebugRendering(b32 on) { ( _isToolDebugRendering = on) ? ( _toolFlag |= GTC_TOOLFLAG_RENDER ) : ( _toolFlag &= ~GTC_TOOLFLAG_RENDER ); }
169
171 GX_FORCE_INLINE b32 isDataRendering(void) const { return ( _toolFlag & GTC_TOOLFLAG_RENDER ) ? true : false; }
173 GX_FORCE_INLINE b32 isSelectedCollisionDataRendering(void) const { return ( _toolFlag & GTC_TOOLFLAG_RENDER_ONLY_SELECTED_COLLISION_DATA ) ? true : false; }
175 GX_FORCE_INLINE b32 isSameUnit(void) const { return ( _toolFlag & GTC_TOOLFLAG_SAMEUNIT ) ? true : false; }
177 GX_FORCE_INLINE void setSameUnit(b32 on) { on ? ( _toolFlag |= GTC_TOOLFLAG_SAMEUNIT ) : ( _toolFlag &= ~GTC_TOOLFLAG_SAMEUNIT ); }
178
180 //-----------------------------------------------------------
182 //-----------------------------------------------------------
184protected:
185 GxGuiSplitter* _pSplitter;
186 GxFormToolData* _pFormToolData;
187 GxFormCollisionData* _pFormCollisionData;
188
189 GxUnitCollision* _pUnitCollision;
190 GxUnitSimulation* _pUnitSimulation;
191 GxResModel* _pResourceModelCollision;
192 GxResModel* _pResourceModelSimulation;
193 GxResMotionPackage* _pResourceMotionCollision;
194 GxResMotionPackage* _pResourceMotionSimulation;
195 GxResSoftbodySimulationXml* _pResourceSimulation;
196
197 GxResSoftbodyCollisionXml::GxSoftbodyCollisionData* _pCollisionDataCurrent;
198
199 b32 _isToolDebugRendering;
200 u32 _toolFlag;
201
203};
204
205//===========================================================================
207//===========================================================================
208class GxToolSoftbodyCollision::GxFormToolData : public GxGuiForm
209{
210 //-----------------------------------------------------------
212 //-----------------------------------------------------------
214public:
215 // RTTI定義
216 GX_RTTI_CLASS(GxToolSoftbodyCollision::GxFormToolData, GxGuiForm)
217 // ClassBaseReference 継承クラス用禁止宣言
219
220
221 //-----------------------------------------------------------
223 //-----------------------------------------------------------
225
227 GxFormToolData(void) : _pSplitter(nullptr), _pFormToolData(nullptr), _pFormModelDataCollision(nullptr), _pFormModelDataSimulation(nullptr), _pFormButton(nullptr), _pTool(nullptr){}
229 GxFormToolData(GxToolSoftbodyCollision * pTool);
230
232 b32 initialize(void) override;
233
235 //-----------------------------------------------------------
237 //-----------------------------------------------------------
239
241 void update(void) override;
243 void onSize(const GxSize& size) override;
244
246 void createCollision(void);
248 void deleteCollision(void);
250 virtual void initializeCollision(GxResSoftbodyCollisionXml::GxSoftbodyCollisionData* pCollisionDatra);
251
253 void testCollision(void);
254
256 void toggleModuleDebugRenderingCollision(void);
258 void toggleModuleDebugRenderingSimulation(void);
259
261 void toggleToolDebugRendering(void);
262
264 void toggleToolDebugSameUnit(void);
265
267 //-----------------------------------------------------------
269 //-----------------------------------------------------------
271
273 void setPropertyTableFormToolData(void);
275 void setPropertyTableFormModelDataCollision(GxToolSoftbodyCollision::GxUnitCollision* pUnitSimulation);
277 void setPropertyTableFormModelDataSimulation(GxToolSoftbodyCollision::GxUnitSimulation* pUnitSimulation);
279 void setPropertyTableFormButton(b32 isSameUnit);
280
282 constexpr GxResSoftbodyCollisionXml* getResourceCollisionXml(void) { return static_cast<GxResSoftbodyCollisionXml*>(_pTool->getResource()); }
284 GX_FORCE_INLINE const GxResSoftbodyCollisionXml* getResourceCollisionXml(void) const { return static_cast<GxResSoftbodyCollisionXml*>(_pTool->getResource()); }
285
287 constexpr GxResSoftbodySimulation* getResourceSimulation(void) const { return _pTool->getResourceSimulation(); }
288
290 constexpr GxUnitCollision* getUnitCollision(void) const { return _pTool->getUnitCollision(); }
292 constexpr GxUnitSimulation* getUnitSimulation(void) const { return _pTool->getUnitSimulation(); }
293
295 constexpr GxResSoftbodyCollisionXml::GxSoftbodyCollisionData* getCollisionDataCurrent(void) const { return _pTool->getCollisionDataCurrent(); }
297 GX_FORCE_INLINE void setCollisionDataCurrent(GxResSoftbodyCollisionXml::GxSoftbodyCollisionData * pCollisionData) { return _pTool->setCollisionDataCurrent( pCollisionData ); }
298
300 void addShareParameter(void);
301
303 constexpr void getWindForce(void* const pValue) const { *static_cast<f32*>(pValue) = _windForce;}
305 constexpr void setWindForce(const void* const pValue) { _windForce = *static_cast<f32*>(const_cast<void*>(pValue)); }
306
308 constexpr void getWindDirectionX(void* const pValue) const { *static_cast<f32*>(pValue) = _windDirectionX; }
310 constexpr void setWindDirectionX(const void* const pValue) { _windDirectionX = *static_cast<f32*>(const_cast<void*>(pValue)); }
311
313 constexpr void getWindDirectionY(void* const pValue) const { *static_cast<f32*>(pValue) = _windDirectionY; }
315 constexpr void setWindDirectionY(const void* const pValue) { _windDirectionY = *static_cast<f32*>(const_cast<void*>(pValue)); }
316
318 constexpr void getWindDirectionZ(void* const pValue) const { *static_cast<f32*>(pValue) = _windDirectionZ; }
320 constexpr void setWindDirectionZ(const void* const pValue) { _windDirectionZ = *static_cast<f32*>(const_cast<void*>(pValue)); }
321
323 constexpr void getGravityForce(void* const pValue) const { *static_cast<f32*>(pValue) = _gravityForce; }
325 constexpr void setGravityForce(const void* const pValue) { _gravityForce = *static_cast<f32*>(const_cast<void*>(pValue)); }
326
328 constexpr void getGravityDirectionX(void* const pValue) const { *static_cast<f32*>(pValue) = _gravityDirectionX; }
330 constexpr void setGravityDirectionX(const void* const pValue) { _gravityDirectionX = *static_cast<f32*>(const_cast<void*>(pValue)); }
331
333 constexpr void getGravityDirectionY(void* const pValue) const { *static_cast<f32*>(pValue) = _gravityDirectionY;}
335 constexpr void setGravityDirectionY(const void* const pValue) { _gravityDirectionY = *static_cast<f32*>(const_cast<void*>(pValue)); }
336
338 constexpr void getGravityDirectionZ(void* const pValue) const { *static_cast<f32*>(pValue) = _gravityDirectionZ; }
340 constexpr void setGravityDirectionZ(const void* const pValue) { _gravityDirectionZ = *static_cast<f32*>(const_cast<void*>(pValue)); }
341
343 //-----------------------------------------------------------
345 //-----------------------------------------------------------
347protected:
348 GxGuiSplitter* _pSplitter;
349 GxGuiFormProperty* _pFormToolData;
350 GxGuiFormProperty* _pFormModelDataCollision;
351 GxGuiFormProperty* _pFormModelDataSimulation;
352 GxGuiFormProperty* _pFormButton;
353 GxToolSoftbodyCollision* _pTool;
354 b32 _isSameUnitOld;
355
356 static f32 _windForce;
357 static f32 _windDirectionX;
358 static f32 _windDirectionY;
359 static f32 _windDirectionZ;
360 static f32 _gravityForce;
361 static f32 _gravityDirectionX;
362 static f32 _gravityDirectionY;
363 static f32 _gravityDirectionZ;
364
366};
367
368//===========================================================================
370//===========================================================================
371class GxToolSoftbodyCollision::GxFormCollisionData : public GxGuiForm
372{
373 //-----------------------------------------------------------
375 //-----------------------------------------------------------
377public:
378 // RTTI定義
379 GX_RTTI_CLASS(GxToolSoftbodyCollision::GxFormCollisionData, GxGuiForm)
380 // ClassBaseReference継承クラス用禁止宣言
381 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxFormCollisionData)
382
383
384 //-----------------------------------------------------------
386 //-----------------------------------------------------------
388
390 GxFormCollisionData(void) : _pSplitter(nullptr), _pFormCollisionData(nullptr), _pTool(nullptr){}
392 GxFormCollisionData(GxToolSoftbodyCollision* pTool);
393
395 b32 initialize(void) override;
396
398 //-----------------------------------------------------------
400 //-----------------------------------------------------------
402
404 void update(void) override;
406 void onSize(const GxSize& size) override;
407
409 //-----------------------------------------------------------
411 //-----------------------------------------------------------
413
415 constexpr void getCollisionCount(void* const pValue){ *static_cast<u32*>(pValue) = getResourceCollisionXml()->getCollisionDataCount(); }
417 GX_FORCE_INLINE void setCollisionCount(const void* const /*pValue*/) {}
418
420 constexpr void getCollisionIndex(void* const pValue){ *static_cast<u32*>(pValue) = _collisionIndex; }
422
426 void setCollisionIndex(const void* const pValue);
427
429 void setPropertyTableFormCollisionData(void);
431 void setPropertyTableFormCollisionDataDetail(GxPropertyTable& referenceOutputPropertyTable);
432
434 constexpr GxResSoftbodyCollisionXml* getResourceCollisionXml(void){ return static_cast<GxResSoftbodyCollisionXml*>(_pTool->getResource()); }
436 GX_FORCE_INLINE const GxResSoftbodyCollisionXml* getResourceCollisionXml(void) const { return static_cast<GxResSoftbodyCollisionXml*>(_pTool->getResource()); }
437
439 constexpr GxResSoftbodySimulation* getResourceSimulation(void) const { return _pTool->getResourceSimulation(); }
440
442 constexpr GxUnitCollision* getUnitCollision(void) const { return _pTool->getUnitCollision(); }
444 constexpr GxUnitSimulation* getUnitSimulation(void) const { return _pTool->getUnitSimulation(); }
445
447 constexpr u32 getCollisionCount(void) const { return getResourceCollisionXml()->getCollisionDataCount(); }
448
450 constexpr u32 getCollisionIndex(void) const { return _collisionIndex; }
452 constexpr void setCollisionIndex(u32 index) { _collisionIndex = index; }
453
455 constexpr GxResSoftbodyCollision::OBJECT_TYPE getCollisionType(void) const { return _collisionType; }
457 constexpr void setCollisionType(GxResSoftbodyCollision::OBJECT_TYPE type) { _collisionType = type; }
458
460 constexpr GxResSoftbodyCollisionXml::GxSoftbodyCollisionData* getCollisionDataCurrent(void) const { return _pTool->getCollisionDataCurrent(); }
462 constexpr void setCollisionDataCurrent(GxResSoftbodyCollisionXml::GxSoftbodyCollisionData* pCollisionData) { return _pTool->setCollisionDataCurrent( pCollisionData ); }
463
465 //-----------------------------------------------------------
467 //-----------------------------------------------------------
469private:
470 GxGuiSplitter* _pSplitter;
471 GxGuiFormProperty* _pFormCollisionData;
472 GxToolSoftbodyCollision* _pTool;
473 u32 _collisionIndex;
475
477};
478
479//===========================================================================
481//===========================================================================
482class GxToolSoftbodyCollision::GxUnitCollision : public GxUnitModel
483{
484 //-----------------------------------------------------------
486 //-----------------------------------------------------------
488public:
489 // RTTI定義
490 GX_RTTI_CLASS(GxToolSoftbodyCollision::GxUnitCollision, GxUnitModel)
491
492
493 //-----------------------------------------------------------
495 //-----------------------------------------------------------
497
499 GxUnitCollision(void);
501 ~GxUnitCollision(void) override;
502
504 //-----------------------------------------------------------
506 //-----------------------------------------------------------
508
510 void asyncUpdate(void) override;
511
513 virtual void setupSimulation(GxResSoftbodySimulation* pResourceSimulation, GxResSoftbodyCollisionXml* pResourceCollision);
515 void setupCollision(GxResSoftbodyCollisionXml* pResourceXml);
517 void cleanupSimulation(void);
518
520 b32 createMotion(GxResMotionPackage* pResource);
522 GX_FORCE_INLINE virtual GxMotionPlayer* allocateMotion(void) { return GX_NEW GxMotionPlayer; }
523
525 //-----------------------------------------------------------
527 //-----------------------------------------------------------
529
531 GX_FORCE_INLINE b32 isModuleDebugRenderingSimulation(void) const { return getModule<GxModUnitSoftbody>()->isDevelopRenderSimulation(); }
533 GX_FORCE_INLINE void setModuleDebugRenderingSimulation(b32 isDraw) { getModule<GxModUnitSoftbody>()->setIsDevelopRenderSimulation( isDraw ); }
535 constexpr u32 getModuleDebugRenderingCollision(void) const { return getModule<GxModUnitSoftbody>()->isDevelopRenderCollision(); }
537 constexpr void setModuleDebugRenderingCollision(u32 mode) { getModule<GxModUnitSoftbody>()->setIsDevelopRenderCollision( (GxUnitSoftbodyCollision::DEVELOP_RENDER_MODE)(mode) ); }
538
540 constexpr GxMotionPlayer* getMotion(void) const { return _pMotion; }
541
543 constexpr GxUnitSoftbodyCollision* getCollision(void) const { return getModule<GxModUnitSoftbody>()->getCollision(); }
544
546 //-----------------------------------------------------------
548 //-----------------------------------------------------------
550protected:
551 GxMotionPlayer* _pMotion;
552
554};
555
556//===========================================================================
558//===========================================================================
559class GxToolSoftbodyCollision::GxUnitSimulation : public GxUnitModel
560{
561 //-----------------------------------------------------------
563 //-----------------------------------------------------------
565public:
566 // RTTI定義
567 GX_RTTI_CLASS(GxToolSoftbodyCollision::GxUnitSimulation, GxUnitModel)
568
569
570 //-----------------------------------------------------------
572 //-----------------------------------------------------------
574
576 GxUnitSimulation(void);
578 ~GxUnitSimulation(void) override;
579
581 //-----------------------------------------------------------
583 //-----------------------------------------------------------
585
587 void asyncUpdate(void) override;
588
590 virtual void setupSimulation(GxResSoftbodySimulation* pResource);
592 void cleanupSimulation(void);
593
595 b32 createMotion(GxResMotionPackage* pResource);
597 GX_FORCE_INLINE virtual GxMotionPlayer* allocateMotion(void) { return GX_NEW GxMotionPlayer; }
598
600 //-----------------------------------------------------------
602 //-----------------------------------------------------------
604
606 GX_FORCE_INLINE b32 isModuleDebugRendering(void) const { return getModule<GxModUnitSoftbody>()->isDevelopRenderSimulation(); }
608 GX_FORCE_INLINE void setModuleDebugRendering(b32 isDraw) { getModule<GxModUnitSoftbody>()->setIsDevelopRenderSimulation( isDraw ); }
609
611 constexpr GxMotionPlayer* getMotion(void) const { return _pMotion; }
612
614 GX_FORCE_INLINE void setCollision(GxUnitSoftbodyCollision* pCollision) { return getModule<GxModUnitSoftbody>()->setCollisionToSimulation( pCollision ); }
615
617 //-----------------------------------------------------------
619 //-----------------------------------------------------------
621protected:
622 GxMotionPlayer* _pMotion;
623
625};
626
627GX_UTILITY_NAMESPACE_END()
628#endif //GX_EDITOR
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
void GxTypedObject
その他
Definition GxDefine.h:213
モーション再生クラス
Definition GxMotionPlayer.h:22
プロパティクラス
Definition GxProperty.h:48
プロパティテーブルクラス
Definition GxProperty.h:1641
リソース基底クラス
Definition GxResBase.h:23
モデルリソースクラス
Definition GxResModel.h:20
モーションパッケージリソース
Definition GxResMotionPackage.h:20
OBJECT_TYPE
オブジェクトタイプ
Definition GxResSoftbodyCollision.h:31
モデル対応物理シミュレーション統合リソースクラス
Definition GxResSoftbodySimulation.h:18
実行時型情報クラス
Definition GxRtti.h:154
T * getModule(void) const
モジュールを取得
Definition GxUnitBase.h:246
void asyncUpdate(void) override
並列更新
Definition GxUnitLocate.cpp:122
モデルクラス
Definition GxUnitModel.h:19
クロスシミュレーション用コリジョンクラス
Definition GxUnitSoftbodyCollision.h:18
サイズ
Definition GxStruct.h:730
32bitブーリアン
Definition GxDefine.h:173