OROCHI
 
Loading...
Searching...
No Matches
GxResMotionSequence.h
Go to the documentation of this file.
1//===========================================================================
11//===========================================================================
12#pragma once
13
14GX_MOTION_NAMESPACE_BEGIN()
15
16//===========================================================================
18//===========================================================================
20{
21 //-------------------------------------------------------------
23 //-------------------------------------------------------------
25public:
26 // RTTI宣言
27 GX_RTTI_RESOURCE_NAME( GxResMotionSequence, GxResBase, "モーションシーケンスリソース");
28 // GxClassBaseReference継承禁止処理
30
31
32 static constexpr u32 SEQUENCE_LINE_MAX = GxMath::VALUE_32; // GxModMotionSequence::Play::_seqがu32なので
33
35 static constexpr u32 LINE_INDEX_ERROR = 0xffffffff;
36
39 {
40 //-----------------------------------------------------------
42 //-----------------------------------------------------------
44 public:
46 GxFileHeader(void) : _frameMax(0), _lineCount(0), _offsetTableOffset(0){}
47
49 //-----------------------------------------------------------
51 //-----------------------------------------------------------
53
55 constexpr u32 getFrameMax(void) const { return _frameMax; }
57 constexpr u32 getLineMax(void) const { return _lineMax; }
59 constexpr u32 getLineCount(void) const { return _lineCount; }
61 constexpr u32 getOffsetTableOffset(void) const { return _offsetTableOffset; }
62
64#if GX_DEVELOP
65 //-----------------------------------------------------------
67 //-----------------------------------------------------------
69
71 constexpr void setFrameMax(u32 frameMax){ _frameMax = frameMax; }
73 constexpr void setLineMax(u32 lineMax){ _lineMax = lineMax; }
75 constexpr void setLineCount(u32 lineCount){ _lineCount = lineCount; }
77 constexpr void setOffsetTableOffset(u32 offsetTableOffset){ _offsetTableOffset = offsetTableOffset; }
78
80#endif
81 //-----------------------------------------------------------
83 //-----------------------------------------------------------
85 private:
86 u32 _frameMax;
87 u32 _lineMax;
88 u32 _lineCount;
89 u32 _offsetTableOffset;
90
92 };
93
96 {
97 //-----------------------------------------------------------
99 //-----------------------------------------------------------
101 public:
103 GxDataHeader(void) : _lineNumber(0), _param(0), _dataSize(0) {}
104
106 //-----------------------------------------------------------
108 //-----------------------------------------------------------
110
112 constexpr u32 getLineNumber(void) const { return _lineNumber; }
114 constexpr u32 getParam(void) const { return _param; }
116 constexpr u32 getParam0(void) const { return _param0; }
118 constexpr u32 getParam1(void) const { return _param1; }
120 constexpr u32 getParam2(void) const { return _param2; }
122 constexpr u32 getParam3(void) const { return _param3; }
124 constexpr u32 getDataSize(void) const { return _dataSize; }
125
127#if GX_DEVELOP
128 //-----------------------------------------------------------
130 //-----------------------------------------------------------
132
134 constexpr void setLineNumber(u32 lineNumber){ _lineNumber = lineNumber; }
136 constexpr void setParam(u32 param){ _param = param; }
138 constexpr void setDataSize(u32 dataSize){ _dataSize = dataSize; }
139
141#endif //GX_DEVELOP
142 //-----------------------------------------------------------
144 //-----------------------------------------------------------
146 private:
147 u32 _lineNumber;
148
149 union
150 {
151 u32 _param;
152 struct
153 {
154#if GX_BITFIELD_LITTLEENDIAN
155 u32 _param0 : 8;
156 u32 _param1 : 8;
157 u32 _param2 : 8;
158 u32 _param3 : 8;
159#else //GX_BITFIELD_LITTLEENDIAN
160 u32 _param3 : 8;
161 u32 _param2 : 8;
162 u32 _param1 : 8;
163 u32 _param0 : 8;
164#endif // !GX_BITFIELD_LITTLEENDIAN
165 };
166 };
167 u32 _dataSize;
168
170 };
171
173 //-----------------------------------------------------------
175 //-----------------------------------------------------------
177
181 void cleanup(void) override;
182
184 //-----------------------------------------------------------
186 //-----------------------------------------------------------
188
190 constexpr u32 getFrameMax(void) const { if( !_pFileHeader ){ return 0; } return _pFileHeader->getFrameMax(); }
192 constexpr u32 getLineMax(void) const { if (!_pFileHeader){ return 0; } return _pFileHeader->getLineMax(); }
194 constexpr u32 getLineCount(void) const { if( !_pFileHeader ){ return 0; } return _pFileHeader->getLineCount(); }
196 const GxDataHeader* getDataHeader(u32 lineIndex) const;
198 const s32* getDataAddress(u32 lineIndex) const;
199
201 //-----------------------------------------------------------
203 //-----------------------------------------------------------
205protected:
207 b32 load(GxStream& stream, u32 dataSize);
208#if GX_DEVELOP
210 b32 save(GxStream& out);
211#endif //GX_DEVELOP
212
214 //-----------------------------------------------------------
216 //-----------------------------------------------------------
218
219 void* _pBuffer;
222 u32 const * _pOffsetTable;
223
225};
226
227#if GX_DEVELOP
228
229//===========================================================================
231//===========================================================================
232class GxResMotionSequenceXml : public GxResMotionSequence
233{
234 //-------------------------------------------------------------
236 //-------------------------------------------------------------
238public:
239 // RTTI宣言
240 GX_RTTI_RESOURCE_NAME(GxResMotionSequenceXml, GxResMotionSequence, "モーションシーケンスXML");
241 // GxClassBaseReference継承禁止処理
242 GX_PROHIBIT_CLASS_BASE_REFERENCE(GxResMotionSequenceXml)
243
244
245 struct GxLineData : public GxClassBase
246 {
247 //-------------------------------------------------------------
249 //-------------------------------------------------------------
251 public:
252 // RTTI宣言
253 GX_RTTI_CLASS(GxResMotionSequenceXml::GxLineData, GxClassBase)
254
255
256 //-----------------------------------------------------------
258 //-----------------------------------------------------------
260
262 GxLineData(void);
263
265 ~GxLineData(void) override;
266
268 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index = 0);
269
271 //-----------------------------------------------------------
273 //-----------------------------------------------------------
275
277 constexpr u32 getFrameMax(void) const { return _frameMax; }
278
280 constexpr u32 getFrameCount(void) const { return _frameMax + 1; }
281
283 void setFrameMax(u32 frameMax);
284
286 GX_FORCE_INLINE void setFrameCount(u32 frameCount) { if (frameCount) { setFrameMax(frameCount - 1); } else { setFrameMax(0); } }
287
289 void getSequence(void* pValue, u32 index);
290
292 void setSequence(const void* pValue, u32 index);
294 void switchSequence(u32 index);
295
297 void clear(void);
298
300 constexpr void setLineNumber(u32 lineNumber) { _lineNumber = lineNumber; }
301
303 constexpr u32 getLineNumber(void) const { return _lineNumber; }
304
306 constexpr u32 getParam(void) { return _param; }
307
309 constexpr void setParam0(void* pValue) { _param0 = *static_cast<u32*>(pValue); }
311 constexpr void setParam1(void* pValue) { _param1 = *static_cast<u32*>(pValue); }
313 constexpr void setParam2(void* pValue) { _param2 = *static_cast<u32*>(pValue); }
315 constexpr void setParam3(void* pValue) { _param3 = *static_cast<u32*>(pValue); }
316
318 constexpr void getParam0(const void* pValue) { *static_cast<u32*>(const_cast<void*>(pValue)) = _param0; }
320 constexpr void getParam1(const void* pValue) { *static_cast<u32*>(const_cast<void*>(pValue)) = _param1; }
322 constexpr void getParam2(const void* pValue) { *static_cast<u32*>(const_cast<void*>(pValue)) = _param2; }
324 constexpr void getParam3(const void* pValue) { *static_cast<u32*>(const_cast<void*>(pValue)) = _param3; }
325
326#if MOVE_SEQNAME_TO_SEQUENCEXML
328 GX_FORCE_INLINE GxString getSequenceName(void) { return _seqName; }
330 GX_FORCE_INLINE void setSequenceName(GX_CSTR name) { _seqName = name; }
331#endif //MOVE_SEQNAME_TO_SEQUENCEXML
332
334 u32 calcSequenceSize(void);
335
337 constexpr u32 getSequenceSize(void) const { return _dataSize; }
338
340 s32* writeSequence(s32* pBuffer);
341#if GX_DEVELOP
343 constexpr void clearData(void) { _pData = nullptr; _frameMax = 0; }
344#endif //GX_DEVELOP
345
347 //-----------------------------------------------------------
349 //-----------------------------------------------------------
351 private:
352 u32 _frameMax;
353 u32 _lineNumber;
354
355 union
356 {
357 u32 _param;
358 struct
359 {
360#if GX_BITFIELD_LITTLEENDIAN
361 u32 _param0 : 8;
362 u32 _param1 : 8;
363 u32 _param2 : 8;
364 u32 _param3 : 8;
365#else //GX_BITFIELD_LITTLEENDIAN
366 u32 _param3 : 8;
367 u32 _param2 : 8;
368 u32 _param1 : 8;
369 u32 _param0 : 8;
370#endif // !GX_BITFIELD_LITTLEENDIAN
371 };
372 };
373 b32* _pData;
374 u32 _dataSize;
375
376#if MOVE_SEQNAME_TO_SEQUENCEXML
377 GxString _seqName;
378#endif //MOVE_SEQNAME_TO_SEQUENCEXML
379
381 };
382
384 //-----------------------------------------------------------
386 //-----------------------------------------------------------
388
390 GxResMotionSequenceXml(void);
391
393 void cleanup(void) override;
394
396 //-----------------------------------------------------------
398 //-----------------------------------------------------------
400
402 void setFrameMax(u32 frameMax);
403
405 constexpr u32 getFrameMax(void) const { return _frameMax; }
406
408 GxLineData* getLineData(u32 lineNumber);
409
411 b32 getSequence(u32 lineNumber, u32 frame);
412
414 void setSequence(u32 lineNumber, u32 frame, b32 value);
416 void switchSequence(u32 lineNumber, u32 frame);
417
419 void setPropertyLineData(const void* const pValue, u32 index);
421 void getPropertyLineData(void* const pValue, u32 index);
423 constexpr void setPropertyLineDataCount(u32 /*count*/) {}
425 GX_FORCE_INLINE u32 getPropertyLineDataCount(void) { return getGxSysResource()->getMotionSequenceLineMax(); }
426
428 //-----------------------------------------------------------
430 //-----------------------------------------------------------
432
434 u32 calcLineCount(void);
435
437 u32 calcFileSize(u32 lineCount);
438
440 void* buildFinalizedData(void* pBufferTop, u32 lineCount);
441
442protected:
444 b32 load(GxStream& in, u32 dataSize);
446 b32 save(GxStream& out);
447
449 b32 finalize(void);
450private:
452 void convertToDynamic(void);
453
455 //-----------------------------------------------------------
457 //-----------------------------------------------------------
459private:
460 GxLineData _data[SEQUENCE_LINE_MAX];
461 GxLineData** _ppDataArray;
462 GxArray _dataSurplus;
463 u32 _frameMax;
464
466};
467
468#endif // GX_DEVELOP
469
470GX_MOTION_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
void GxTypedObject
その他
Definition GxDefine.h:213
配列クラス
Definition GxArray.h:18
オブジェクト基底クラス
Definition GxBase.h:88
算術演算クラス
Definition GxMath.h:84
プロパティクラス
Definition GxProperty.h:48
リソース基底クラス
Definition GxResBase.h:23
モーションシーケンスリソース
Definition GxResMotionSequence.h:20
u32 const * _pOffsetTable
オフセットテーブル
Definition GxResMotionSequence.h:222
void * _pBuffer
finalizedデータ
Definition GxResMotionSequence.h:219
GxFileHeader const * _pFileHeader
シーケンスヘッダ
Definition GxResMotionSequence.h:221
constexpr u32 getLineMax(void) const
最大ライン数を取得
Definition GxResMotionSequence.h:192
b32 load(GxStream &stream, u32 dataSize)
リソースのロード
Definition GxResMotionSequence.cpp:53
u32 _bufferSize
finalizedデータサイズ
Definition GxResMotionSequence.h:220
constexpr u32 getLineCount(void) const
ライン数取得
Definition GxResMotionSequence.h:194
void cleanup(void) override
デストラクタ代行
Definition GxResMotionSequence.cpp:39
constexpr u32 getFrameMax(void) const
最大フレーム数取得
Definition GxResMotionSequence.h:190
static constexpr u32 SEQUENCE_LINE_MAX
最大ライン数
Definition GxResMotionSequence.h:32
実行時型情報クラス
Definition GxRtti.h:154
ストリーム基礎クラス
Definition GxStream.h:20
constexpr u32 getMotionSequenceLineMax(void) const
モーションシーケンスのラインの最大数を取得
Definition GxSysResource.h:1508
シーケンスデータヘッダ
Definition GxResMotionSequence.h:96
constexpr u32 getDataSize(void) const
データ個数を取得
Definition GxResMotionSequence.h:124
constexpr u32 getParam1(void) const
パラメータ1を取得
Definition GxResMotionSequence.h:118
constexpr u32 getParam0(void) const
パラメータ0を取得
Definition GxResMotionSequence.h:116
u32 _param1
パラメータ1
Definition GxResMotionSequence.h:162
u32 _param3
パラメータ3
Definition GxResMotionSequence.h:160
u32 _param0
パラメータ0
Definition GxResMotionSequence.h:163
constexpr u32 getParam2(void) const
パラメータ2を取得
Definition GxResMotionSequence.h:120
constexpr u32 getParam(void) const
パラメータを取得
Definition GxResMotionSequence.h:114
GxDataHeader(void)
デフォルトコンストラクタ
Definition GxResMotionSequence.h:103
u32 _param
パラメータ
Definition GxResMotionSequence.h:151
constexpr u32 getLineNumber(void) const
ライン番号を取得
Definition GxResMotionSequence.h:112
u32 _param2
パラメータ2
Definition GxResMotionSequence.h:161
constexpr u32 getParam3(void) const
パラメータ3を取得
Definition GxResMotionSequence.h:122
ファイルヘッダ
Definition GxResMotionSequence.h:39
constexpr u32 getOffsetTableOffset(void) const
オフセットテーブルへのオフセットを取得する
Definition GxResMotionSequence.h:61
constexpr u32 getFrameMax(void) const
最大フレーム数を取得する
Definition GxResMotionSequence.h:55
GxFileHeader(void)
コンストラクタ
Definition GxResMotionSequence.h:46
constexpr u32 getLineCount(void) const
ライン数を取得する
Definition GxResMotionSequence.h:59
constexpr u32 getLineMax(void) const
最大ライン数を取得する
Definition GxResMotionSequence.h:57
文字列型クラス
Definition GxString.h:18
32bitブーリアン
Definition GxDefine.h:173