OROCHI
 
Loading...
Searching...
No Matches
GxToolCollisionSet.h
Go to the documentation of this file.
1//===========================================================================
11//===========================================================================
12#pragma once
13
14#if GX_EDITOR
15
17
19
20//===========================================================================
22//===========================================================================
23/* GUI内訳
24
25 ┏━GxToolCollisionSet━━━━━━━━━━━━━━━━━━━━━┓
26 ┃ ┃
27 ┃┌─GxGuiSplitter ───────┬─────────────┐┃
28 ┃│┏━GxGuiSplitter ━━━━━┓・┏━GxGuiFormProperty ━┓│┃
29 ┃│┃┌GxGuiTab _pTab────┐┃・┃ ┃│┃
30 ┃│┃│GxFormUnitInformation │┃・┃ ┃│┃
31 ┃│┃│GxGuiFormProperty │┃・┃ ┃│┃
32 ┃│┃└───────────┘┃・┃ ┃│┃
33 ┃│┣・・・・・・・・・・・・・┫・┃ ┃│┃
34 ┃│┃┌GxFormCollisionData ─┐┃・┃ ┃│┃
35 ┃│┃│ │┃・┃ ┃│┃
36 ┃│┃└───────────┘┃・┃ ┃│┃
37 ┃│┗━━━━━━━━━━━━━┛・┗━━━━━━━━━━━┛│┃
38 ┃└───────────────┴─────────────┘┃
39 ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
40*/
41class GxToolCollisionSet : public GxToolResourceEditBase
42{
43 //-----------------------------------------------------------
45 //-----------------------------------------------------------
47public:
48 // RTTI宣言
49 GX_RTTI_CLASS_NAME_ICON(GxToolCollisionSet, GxToolResourceEditBase, "オブジェクトコリジョン編集", GxRtti::ICON_TYPE::PHYSICS)
50 // ClassBaseReference継承クラス用禁止宣言
51 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxToolCollisionSet)
52
53
54 enum
55 {
56 FORM_POSITION_X = 100,
57 FORM_POSITION_Y = 50,
58 FORM_WIDTH = 500,
59 FORM_HEIGHT = 450,
60 BUTTON_OFFSET_Y = 0,
61 BUTTON_WIDTH = 40,
62 BUTTON_HEIGHT = 40,
63 INFO_FORM_WIDTH = 100,
64 INFO_FORM_HEIGHT = 100,
65 INFO_SPLIT_POSITION_X = 280,
66 INFO_SPLIT_POSITION_Y = 160,
67 };
68
70 enum DISPLAY
71 {
72 DISPLAY_ONLY_SELECTED = (0x01 << 0),
73 DISPLAY_BACKGROUND_HIT = (0x01 << 1),
74 DISPLAY_OBJECT_HIT = (0x01 << 2),
75 DISPLAY_EVENT_HIT = (0x01 << 3),
76 DISPLAY_ATTACK_HIT = (0x01 << 4),
77 DISPLAY_DYNAMICS = (0x01 << 5),
78 DISPLAY_DEFAULT = DISPLAY_ONLY_SELECTED | DISPLAY_BACKGROUND_HIT | DISPLAY_OBJECT_HIT | DISPLAY_EVENT_HIT | DISPLAY_ATTACK_HIT | DISPLAY_DYNAMICS,
79 DISPLAY_FLAG_ALL = 0x7fffffff,
80 };
81
82 class GxFormUnitInformation;
83 class GxFormCollisionData;
84
86 //-----------------------------------------------------------
88 //-----------------------------------------------------------
90
92 GxToolCollisionSet(void);
93
95 b32 initialize(void) override;
96
98 void cleanup( void ) override;
99
101 //-----------------------------------------------------------
103 //-----------------------------------------------------------
105
107 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index = 0);
108
110 void update(void) override;
111
112protected:
114 void createUnitModel(void);
116 void resetModelFormProperty(void);
117
119 //-----------------------------------------------------------
121 //-----------------------------------------------------------
123public:
125 void setFormCollisionObject( GxGuiFormProperty* pForm );
126
128 void setResource(GxResBase* pRes) override;
129
131 constexpr GxResModel* getResourceModel(void) const { return _pResModel; }
133 void setResourceModel(GxResModel* pResModel);
134
136 constexpr void getPropertyResModel(void* const pValue) { *static_cast<GxResModel**>(pValue) = _pResModel; }
138 void setPropertyResModel(const void* const pValue);
140 void getPropertyTable(GxPropertyTable* pPropertyTable);
141
143 constexpr GxUnitModel* getUnitModel( void ) const { return _pUnitModel; }
145 GX_FORCE_INLINE b32 isDisplay(DISPLAY display) const { return (_displayFlag & display) ? true : false; }
146
148 GX_FORCE_INLINE virtual const GxRtti& getCreateModelRtti(void) { return GxUnitModel::GX_RTTI; }
149
150protected:
152 constexpr GxGuiTab* getGuiTab( void ) const { return _pTab; }
153
155 //-----------------------------------------------------------
157 //-----------------------------------------------------------
159private:
160 GxResModel* _pResModel;
161 GxUnitModel* _pUnitModel;
162
163 u32 _displayFlag;
164
165 GxFormCollisionData* _pFormCollision;
166 GxGuiSplitter* _pSplitter;
167 GxGuiTab* _pTab;
168 GxGuiFormProperty* _pFormModel;
169
171};
172
173//===========================================================================
175//===========================================================================
176class GxToolCollisionSet::GxFormUnitInformation : public GxGuiForm
177{
178 //-----------------------------------------------------------
180 //-----------------------------------------------------------
182public:
183 // RTTI定義
184 GX_RTTI_CLASS(GxToolCollisionSet::GxFormUnitInformation, GxGuiForm)
185 // ClassBaseReference継承クラス用禁止宣言
186 GX_PROHIBIT_CLASS_BASE_REFERENCE( GxFormUnitInformation )
187
188
189 static constexpr u32 SELECT_COLOR_R = 0x00;
191 static constexpr u32 SELECT_COLOR_G = 0x00;
193 static constexpr u32 SELECT_COLOR_B = 0xff;
194
196 //-----------------------------------------------------------
198 //-----------------------------------------------------------
200
202 GxFormUnitInformation( GxToolCollisionSet* pTool );
203private:
205 GxFormUnitInformation(void) : _pFormUnitProperty(nullptr), _pTool(nullptr) {}
206
207public:
209 b32 initialize( void ) override;
210
212 //-----------------------------------------------------------
214 //-----------------------------------------------------------
216
218 virtual void setPopupMenu(const GxPoint2& position);
219
220protected:
222 void onSize(const GxSize& size) override;
223
225 void onDraw( void ) override;
226
228 void onClick(const GxPoint2& position, u32 button) override;
229
231 //-----------------------------------------------------------
233 //-----------------------------------------------------------
235private:
236 GxGuiFormProperty* _pFormUnitProperty;
237
238 GxHandle _handle;
239 GxToolCollisionSet* _pTool;
240
242};
243
244//===========================================================================
246//===========================================================================
247class GxToolCollisionSet::GxFormCollisionData : public GxGuiForm
248{
249 //-----------------------------------------------------------
251 //-----------------------------------------------------------
253public:
254 // RTTI定義
255 GX_RTTI_CLASS(GxToolCollisionSet::GxFormCollisionData, GxGuiForm)
256 // ClassBaseReference継承クラス用禁止宣言
257 GX_PROHIBIT_CLASS_BASE_REFERENCE( GxFormCollisionData )
258
259
260 //-----------------------------------------------------------
262 //-----------------------------------------------------------
264
266 GxFormCollisionData( GxToolCollisionSet* pTool );
267
268private:
270 GxFormCollisionData(void) : _pTableObject(nullptr), _pFormCollisionObject(nullptr), _pCurrentObjectData(nullptr), _pTool(nullptr) {}
271
272public:
274 b32 initialize( void ) override;
275
277 //-----------------------------------------------------------
279 //-----------------------------------------------------------
281
283 void onToolResourceReset( void );
284
286 virtual void createCollisionObject(void);
287
289 virtual void deleteCollisionObject(void);
290
292 virtual void copyCollisionObject(void);
293
294protected:
296 void update(void) override;
297
299 void onSize(const GxSize& size) override;
300
302 void onDraw(void) override;
304 void drawSingleObject(GxResCollisionObject::GxObjectData* pObject);
305
307 void onClick(const GxPoint2& position, u32 button) override;
308
310 virtual void setPopupMenu(const GxPoint2& position);
311
312public:
314 constexpr GxResCollisionObject::GxObjectData* getCurrentObjectData( void ) const { return _pCurrentObjectData; }
315
317 virtual void createObjectPropertyTable( GxResCollisionObject::GxObjectData& data, GxPropertyTable& table );
318
320 virtual void createPropertyTableShape( const GxCollision::COLLISION_SHAPE shapeType, GxPropertyTable& table );
322 virtual void createPropertyTableShapeDynamics( const GxCollision::COLLISION_SHAPE shapeType, GxPropertyTable& table );
323
325 virtual void createPropertyTableCollision( const GxResCollisionObject::COLLISION_TYPE collisionType, GxPropertyTable& table );
326
327private:
329 void createPropertyTableSphere(GxPropertyTable& table );
331 void createPropertyTableBox(GxPropertyTable& table );
333 void createPropertyTableCylinder(GxPropertyTable& table );
335 void createPropertyTableCapsule(GxPropertyTable& table );
337 void createPropertyTableMultiSphereDoubleJoint(GxPropertyTable& table );
339 void createPropertyTableWheel(GxPropertyTable& table );
340
342 void updateShape( void );
344 void updateShapeTopBottom( void );
346 void updateShapeOthers( void );
347
349 void updateShapeCapsule( void );
351 void updateShapeTopBottomCapsule( void );
353 void updateShapeOthersCapsule( void );
354
356 //-----------------------------------------------------------
358 //-----------------------------------------------------------
360private:
361 GxGuiPropertyTable* _pTableObject;
362 GxGuiFormProperty* _pFormCollisionObject;
363
364 GxResCollisionObject::COLLISION_TYPE _collisionTypeOld;
365 GxCollision::COLLISION_SHAPE _shapeTypeOld;
366
367 //---- カプセル形状更新用
368 GxVector3 _shapeTopOld;
369 GxVector3 _shapeBottomOld;
370 f32 _shapeHeightOld;
371 f32 _capsuleRadiusOld;
372 GxVector3 _offsetOld;
373 GxQuaternion _radianOld;
374
375 GxResCollisionObject::GxObjectData* _pCurrentObjectData;
376
377 GxToolCollisionSet* _pTool;
378
380};
381
382GX_PHYSICS_NAMESPACE_END()
383#endif // GX_EDITOR
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
void GxTypedObject
その他
Definition GxDefine.h:213
#define GX_PHYSICS_NAMESPACE_BEGIN()
ネームスペースマクロ
Definition GxPhysics.h:28
コリジョン拡張データ
Definition GxSysCollision.h:205
COLLISION_SHAPE
コリジョン形状
Definition GxCollision.h:38
プロパティクラス
Definition GxProperty.h:48
プロパティテーブルクラス
Definition GxProperty.h:1641
リソース基底クラス
Definition GxResBase.h:23
Definition GxResCollisionObject.h:113
COLLISION_TYPE
コリジョンの種類:リソース保存されることに注意
Definition GxResCollisionObject.h:36
モデルリソースクラス
Definition GxResModel.h:20
実行時型情報クラス
Definition GxRtti.h:154
モデルクラス
Definition GxUnitModel.h:19
座標
Definition GxStruct.h:867
クォータニオン
Definition GxQuaternion.h:19
サイズ
Definition GxStruct.h:730
3次元ベクトル
Definition GxVector.h:245
32bitブーリアン
Definition GxDefine.h:173