OPTPiX SpriteStudio SDK
Loading...
Searching...
No Matches
ssplayer_effect2.h
Go to the documentation of this file.
1#ifndef __SSEFFECTRENDER_V3__
2#define __SSEFFECTRENDER_V3__
3
4
5#include "xorshift32.h"
6
7//SsVectorなど
8//#include "SsUtility.h"
9
10//#include "ISSEffectRender.h"
11
12#include <memory>
13#include <utility>
14
15// MEMO: コンパイル設定
16#define SPRITESTUDIO6SDK_LOOP_TYPE1 (0)
17#define SPRITESTUDIO6SDK_LOOP_TYPE2 (0)
18#define SPRITESTUDIO6SDK_LOOP_TYPE3 (1)
19
20namespace spritestudio6
21{
22
23class SsEffectModel;
24class SsRenderEffectBase;
25class SsEffectNode;
26struct SsPartState;
27class SsEffectRenderAtom;
28class SsCell;
29
30
31constexpr auto SEED_MAGIC = 7573;
32constexpr auto LIFE_EXTEND_SCALE = 8;
33constexpr auto LIFE_EXTEND_MIN = 64;
34
35
37{
38 float time;
39 float value;
40};
41
42
43//v3.1
45{
46 int id;
47 int cycle;
48 int exist;
49 int born;
50 long stime;
51 long endtime;
52
53 inline void Cleanup()
54 {
55 id = 0;
56 cycle = 0;
57 exist = 0;
58 born = 0;
59 stime = 0;
60 endtime = 0;
61 }
62};
63
64
65//v3.1
67{
68 int uid;
69 int life;
70 int cycle;
71};
72
73//最終描画用データ
75{
76 int id;
77 int pid;
78 int stime; //生成された開始時間
80
81 //描画用ワーク
82 float x;
83 float y;
84 float rot;
85 float direc;
86
89};
90
91
92#if 0
93//リングバッファだが実はもういらないかも
94template<class mytype>
95class particleRingBuffer
96{
97protected:
98
99 mytype* ar;
100 int* realIndex;
101 size_t bufsize;
102
103
104public:
105 particleRingBuffer() {
106 resize(16);
107 }
108 particleRingBuffer(size_t size)
109 {
110 resize(size);
111 }
112 virtual ~particleRingBuffer()
113 {
114 delete[] ar;
115 delete[] realIndex;
116 }
117
118 void clear() {
119 memset(ar, 0, sizeof(mytype) *(bufsize + 1));
120 memset(realIndex, 0, sizeof(int) *(bufsize + 1));
121 }
122
123 void store(int index, mytype* t)
124 {
125 ar[index % bufsize] = *t;
126 realIndex[index % bufsize] = index;
127 }
128
129 void resize( size_t size )
130 {
131 bufsize = size*2;
132 ar = new mytype[bufsize +1];
133 realIndex = new int[bufsize + 1];
134 clear();
135 }
136
137 mytype& load(int index)
138 {
139 return ar[index % bufsize];
140 }
141
142 int loadRealIndex(int index)
143 {
144 return realIndex[index];
145 }
146 size_t getBufsize() { return bufsize; }
147
148};
149
150#endif
151
152
153//エミッターが持つパラメータ
154//エディタやファイルから入力される
156{
157 int life;
159 int emitnum; //一度に排出される個数
160 int emitmax; //最大排出数
161 int particleLife; //生成されるパーティクルの寿命
162 int particleLife2; //寿命最大値
163 bool Infinite; //無限発生
164
169
170
171 //テスト用デフォルト
173
174};
175
176
177//パーティクルが持つパラメータ
178//エディタやファイルから入力される
180{
181
183
184 SsU8Color startcolor; //スタート時のカラー
185 SsU8Color endcolor; //終了時のカラー
186
187 //初速
188 float speed; //初速
189 float speed2; //初速最大値
190
191
192 float angle; //向いてる角度
193 float angleVariance;//変差
194
197
198
202
204 float rotation;
206
209
213
217
221
225
230
236
237 float delay;
238
242
246
250
253
256
257
259};
260
261
262//エミッタ動作クラス
264{
265public:
267
268
270
274
275
278
279 //生成用のリングバッファ
280 std::vector<emitPattern> _emitpattern;
281 std::vector<int> _offsetPattern;
282 std::unique_ptr<std::vector<particleExistSt>> particleExistList;
283
284 //事前計算バッファ
285 //particleLifeSt* particleList;
287
289 std::unique_ptr<std::vector<unsigned long>> seedList;
290
292// SsEffectEmitter* _child;
294
296
297 SsCell* refCell; //描画用セル
298 SsEffectBehavior* refData; //データ更新用
299
302
303 int uid;
304
305public:
307// particleList(0),
308 _parentIndex(-1),
309 seedList(),
310 particleListBufferSize(180*100), //生成出来るパーティクルの最大値
311 _emitpattern(0),
313 globaltime(0),
314 seedOffset(0)
315 {
317 }
319 {
320 particleExistList.reset();
321 seedList.reset();
322 }
323
324 void setSeedOffset( int offset ) {
326 }
327
328// const particleLifeSt* getParticleDataFromID(int id) { return &particleList[id]; }
329
330#if SPRITESTUDIO6SDK_LOOP_TYPE3
331
332 int getParticleIDMax() { return (int)(_offsetPattern.size()); }
333
335 void updateEmitter( double time , int slide );
336
337#else
338
339 int getParticleIDMax() { return particleIdMax; }
340 const particleLifeSt* getParticleDataFromID(int id);
341#endif
342
343
344 int getTimeLength() { return emitter.life + ( emitter.particleLife + emitter.particleLife2); }
345
346 //現在時間から産出される位置を求める
347 //time変数から求められる式とする
348 void updateParticle(float time, particleDrawData* p, bool recalc = false );
349
350 //パーティクルの発生間隔を事前計算する
351 //ここで出力が確定する
352
353 void precalculate2();
354
355};
356
357
359{
360public:
361
362 //エフェクトのパラメータデータ
364
365 //Modelに記載されているエミッタのリスト
366 std::vector<std::unique_ptr<SsEffectEmitter>> emmiterList;
367
368 //MEMO: updateListは、更新用でemitterListの内容への参照なのでスマートポインタ化しない(所有権を保持しない)
369 std::vector<SsEffectEmitter*> updateList;
370
371 //ランダムシード
373
376
377 float nowFrame;
380
382
383 bool Infinite; //無限に発生出来るかどうか
384
386
388
392
394
396
398public:
399
400
401protected:
402 void particleDraw(SsEffectEmitter* e , double t , SsEffectEmitter* parent = 0 , particleDrawData* plp = 0 );
403 void initEmitter( SsEffectEmitter* e , SsEffectNode* node);
404
405 void clearEmitterList();
406
407public:
410 {
412 }
413
414 virtual void play(){ m_isPause = false;m_isPlay=true; }
415 virtual void stop(){ m_isPlay = false;}
416 virtual void pause(){m_isPause = true;m_isPlay=false;}
417 virtual void setLoop(bool flag){ m_isLoop = flag; }
418 virtual bool isplay(){return m_isPlay;}
419 virtual bool ispause(){return m_isPause;}
420 virtual bool isloop(){return m_isLoop;}
421
422 virtual void setEffectData(SsEffectModel* data);
423
424
425 virtual void setSeed( u32 seed )
426 {
427 mySeed = seed * SEED_MAGIC;
428 }
429
430
431 virtual void setFrame( float frame )
432 {
433 nowFrame = frame;
434 }
435
436 virtual float getFrame(){ return nowFrame; }
437
438 virtual void update();
439 virtual void draw();
440
441 virtual void reload();
442
443 virtual size_t getEffectTimeLength();
444
445// virtual int getVersion(){ return EFFECTRENDERVERSION_V2; }
446
447 virtual void setParentAnimeState( SsPartState* state ){ parentState = state; }
448
449 virtual int getCurrentFPS();
450
452
453 bool getPlayStatus(void){
454 return(m_isPlay);
455 }
456
457 void drawSprite(
458 SsCellValue* dispCell,
459 SsVector2 _position,
460 SsVector2 _size,
461 float _rotation,
462 float direction,
463 SsFColor _color,
465 );
466
467
468 void setSeedOffset( int offset ) {
469 if ( effectData->isLockRandSeed )
470 {
471 seedOffset = 0;
472 }else{
474 }
475 }
476
477 virtual bool isInfinity(){ return Infinite; }
478 virtual bool isWarning(){ return _isWarningData; }
479
480};
481
482} // namespace spritestudio6
483
484#endif
パーツに使用される画素の矩形範囲を示した構造です。
Definition ssloader_ssce.h:14
Definition ssplayer_cellmap.h:63
Definition SsEffectBehavior.h:17
Definition ssplayer_effect2.h:264
const particleExistSt * getParticleDataFromID(int id)
Definition ssplayer_effect2.cpp:520
SsEffectEmitter * _parent
Definition ssplayer_effect2.h:293
particleParameter particle
Definition ssplayer_effect2.h:272
emitterParameter emitter
Definition ssplayer_effect2.h:271
std::vector< int > _offsetPattern
Definition ssplayer_effect2.h:281
int _parentIndex
Definition ssplayer_effect2.h:295
size_t particleListBufferSize
Definition ssplayer_effect2.h:288
int uid
Definition ssplayer_effect2.h:303
std::unique_ptr< std::vector< unsigned long > > seedList
Definition ssplayer_effect2.h:289
int getTimeLength()
Definition ssplayer_effect2.h:344
std::unique_ptr< std::vector< particleExistSt > > particleExistList
Definition ssplayer_effect2.h:282
SsCellValue dispCell
Definition ssplayer_effect2.h:266
void precalculate2()
Definition ssplayer_effect2.cpp:371
void setSeedOffset(int offset)
Definition ssplayer_effect2.h:324
int priority
Definition ssplayer_effect2.h:269
std::vector< emitPattern > _emitpattern
Definition ssplayer_effect2.h:280
size_t globaltime
Definition ssplayer_effect2.h:300
int getParticleIDMax()
Definition ssplayer_effect2.h:332
int seedOffset
Definition ssplayer_effect2.h:277
int particleIdMax
Definition ssplayer_effect2.h:286
int emitterSeed
Definition ssplayer_effect2.h:276
SsEffectEmitter()
Definition ssplayer_effect2.h:306
xorshift32 rand
Definition ssplayer_effect2.h:273
SsVector2 position
Definition ssplayer_effect2.h:291
size_t seedTableLen
Definition ssplayer_effect2.h:301
SsCell * refCell
Definition ssplayer_effect2.h:297
void updateParticle(float time, particleDrawData *p, bool recalc=false)
Definition ssplayer_effect2.cpp:47
virtual ~SsEffectEmitter()
Definition ssplayer_effect2.h:318
SsEffectBehavior * refData
Definition ssplayer_effect2.h:298
void updateEmitter(double time, int slide)
Definition ssplayer_effect2.cpp:455
Definition ssloader_ssee.h:116
Definition ssloader_ssee.h:82
void setSeedOffset(int offset)
Definition ssplayer_effect2.h:468
virtual void setEffectData(SsEffectModel *data)
Definition ssplayer_effect2.cpp:737
bool getPlayStatus(void)
Definition ssplayer_effect2.h:453
std::vector< SsEffectEmitter * > updateList
Definition ssplayer_effect2.h:369
std::vector< std::unique_ptr< SsEffectEmitter > > emmiterList
Definition ssplayer_effect2.h:366
virtual void draw()
Definition ssplayer_effect2.cpp:768
size_t effectTimeLength
Definition ssplayer_effect2.h:381
SsVector2 layoutScale
Definition ssplayer_effect2.h:375
bool m_isPlay
Definition ssplayer_effect2.h:389
SsCellMapList * curCellMapManager
Definition ssplayer_effect2.h:395
void setCellmapManager(SsCellMapList *plist)
Definition ssplayer_effect2.h:451
virtual void setFrame(float frame)
Definition ssplayer_effect2.h:431
SsVector3 layoutPosition
Definition ssplayer_effect2.h:374
bool m_isLoop
Definition ssplayer_effect2.h:391
virtual bool isWarning()
Definition ssplayer_effect2.h:478
void particleDraw(SsEffectEmitter *e, double t, SsEffectEmitter *parent=0, particleDrawData *plp=0)
Definition ssplayer_effect2.cpp:600
virtual ~SsEffectRenderV2()
Definition ssplayer_effect2.h:409
SsEffectModel * effectData
Definition ssplayer_effect2.h:363
void drawSprite(SsCellValue *dispCell, SsVector2 _position, SsVector2 _size, float _rotation, float direction, SsFColor _color, SsRenderBlendType::_enum blendType)
Definition ssplayer_effect2.cpp:527
int seedOffset
Definition ssplayer_effect2.h:393
SsPartState * parentState
Definition ssplayer_effect2.h:385
virtual size_t getEffectTimeLength()
Definition ssplayer_effect2.cpp:958
bool isIntFrame
Definition ssplayer_effect2.h:387
virtual void setParentAnimeState(SsPartState *state)
Definition ssplayer_effect2.h:447
float secondNowFrame
Definition ssplayer_effect2.h:379
virtual int getCurrentFPS()
Definition ssplayer_effect2.cpp:965
u32 mySeed
Definition ssplayer_effect2.h:372
virtual void reload()
Definition ssplayer_effect2.cpp:829
virtual float getFrame()
Definition ssplayer_effect2.h:436
virtual bool isInfinity()
Definition ssplayer_effect2.h:477
virtual bool isloop()
Definition ssplayer_effect2.h:420
virtual void setSeed(u32 seed)
Definition ssplayer_effect2.h:425
SsEffectRenderV2()
Definition ssplayer_effect2.h:408
void clearEmitterList()
Definition ssplayer_effect2.cpp:723
virtual void setLoop(bool flag)
Definition ssplayer_effect2.h:417
virtual bool ispause()
Definition ssplayer_effect2.h:419
bool Infinite
Definition ssplayer_effect2.h:383
float targetFrame
Definition ssplayer_effect2.h:378
float nowFrame
Definition ssplayer_effect2.h:377
bool _isWarningData
セルマップのリスト(アニメデコーダーからもらう
Definition ssplayer_effect2.h:397
virtual void pause()
Definition ssplayer_effect2.h:416
virtual void play()
Definition ssplayer_effect2.h:414
bool m_isPause
Definition ssplayer_effect2.h:390
void initEmitter(SsEffectEmitter *e, SsEffectNode *node)
Definition ssplayer_effect2.cpp:680
virtual void update()
Definition ssplayer_effect2.cpp:746
virtual void stop()
Definition ssplayer_effect2.h:415
virtual bool isplay()
Definition ssplayer_effect2.h:418
Definition xorshift32.h:17
GLintptr offset
Definition glad.h:3305
GLboolean * data
Definition glad.h:2049
GLuint index
Definition glad.h:3345
GLsizeiptr size
Definition glad.h:3302
GLdouble t
Definition glad.h:2397
_enum
Definition sstypes.h:702
Definition ISsEffectRender.h:5
unsigned int u32
Definition sstypes.h:200
constexpr auto SEED_MAGIC
Definition ssplayer_effect2.h:31
SsPoint2 SsVector2
Definition sstypes.h:198
SsPoint3 SsVector3
Definition sstypes.h:199
SsTColor< u8 > SsU8Color
Definition sstypes.h:332
SsTColor< float > SsFColor
floatでのカラー値定義
Definition sstypes.h:325
constexpr auto LIFE_EXTEND_MIN
Definition ssplayer_effect2.h:33
constexpr auto LIFE_EXTEND_SCALE
Definition ssplayer_effect2.h:32
パーツが使用するセルの情報
Definition ssplayer_cellmap.h:16
パーツの状態を保持するクラスです。
Definition ssplayer_PartState.h:23
Definition ssplayer_effect2.h:37
float time
Definition ssplayer_effect2.h:38
float value
Definition ssplayer_effect2.h:39
Definition ssplayer_effect2.h:67
int cycle
Definition ssplayer_effect2.h:70
int life
Definition ssplayer_effect2.h:69
int uid
Definition ssplayer_effect2.h:68
Definition ssplayer_effect2.h:156
bool Infinite
Definition ssplayer_effect2.h:163
int loopLen
Definition ssplayer_effect2.h:167
int loopStart
Definition ssplayer_effect2.h:165
int emitmax
Definition ssplayer_effect2.h:160
int interval
Definition ssplayer_effect2.h:158
int life
Definition ssplayer_effect2.h:157
int emitnum
Definition ssplayer_effect2.h:159
int loopGen
Definition ssplayer_effect2.h:168
int particleLife
Definition ssplayer_effect2.h:161
int particleLife2
Definition ssplayer_effect2.h:162
int loopEnd
Definition ssplayer_effect2.h:166
emitterParameter()
Definition ssplayer_effect2.h:172
Definition ssplayer_effect2.h:75
int pid
Definition ssplayer_effect2.h:77
int stime
Definition ssplayer_effect2.h:78
float y
Definition ssplayer_effect2.h:83
float x
Definition ssplayer_effect2.h:82
int id
Definition ssplayer_effect2.h:76
float direc
Definition ssplayer_effect2.h:85
float rot
Definition ssplayer_effect2.h:84
SsU8Color color
Definition ssplayer_effect2.h:87
SsVector2 scale
Definition ssplayer_effect2.h:88
int lifetime
Definition ssplayer_effect2.h:79
Definition ssplayer_effect2.h:45
int id
Definition ssplayer_effect2.h:46
long endtime
Definition ssplayer_effect2.h:51
int cycle
Definition ssplayer_effect2.h:47
void Cleanup()
Definition ssplayer_effect2.h:53
int born
Definition ssplayer_effect2.h:49
long stime
Definition ssplayer_effect2.h:50
int exist
Definition ssplayer_effect2.h:48
Definition ssplayer_effect2.h:180
float transscaleFactor
Definition ssplayer_effect2.h:234
float alphaFade2
Definition ssplayer_effect2.h:245
bool useTurnDirec
Definition ssplayer_effect2.h:251
SsVector2 transscale
Definition ssplayer_effect2.h:232
float speed
Definition ssplayer_effect2.h:188
float angleVariance
Definition ssplayer_effect2.h:193
SsU8Color startcolor
Definition ssplayer_effect2.h:184
bool useColor
Definition ssplayer_effect2.h:218
float endLifeTimePer
Definition ssplayer_effect2.h:212
SsVector2 gravityPos
Definition ssplayer_effect2.h:240
float rotation2
Definition ssplayer_effect2.h:205
float rotationAdd2
Definition ssplayer_effect2.h:208
SsVector2 offset
Definition ssplayer_effect2.h:200
float tangentialAccel
Definition ssplayer_effect2.h:215
bool userOverrideRSeed
Definition ssplayer_effect2.h:254
bool useTanAccel
Definition ssplayer_effect2.h:214
SsU8Color transColor2
Definition ssplayer_effect2.h:224
bool useRotation
Definition ssplayer_effect2.h:203
SsU8Color transColor
Definition ssplayer_effect2.h:223
float tangentialAccel2
Definition ssplayer_effect2.h:216
bool useRotationTrans
Definition ssplayer_effect2.h:210
SsVector2 scaleRange
Definition ssplayer_effect2.h:227
bool usePGravity
Definition ssplayer_effect2.h:239
float rotation
Definition ssplayer_effect2.h:204
float angle
Definition ssplayer_effect2.h:192
float speed2
Definition ssplayer_effect2.h:189
float direcRotAdd
Definition ssplayer_effect2.h:252
SsVector2 transscaleRange
Definition ssplayer_effect2.h:233
SsU8Color initColor2
Definition ssplayer_effect2.h:220
bool useTransColor
Definition ssplayer_effect2.h:222
SsVector2 gravity
Definition ssplayer_effect2.h:196
float gravityPower
Definition ssplayer_effect2.h:241
float rotationFactor
Definition ssplayer_effect2.h:211
bool useTransScale
Definition ssplayer_effect2.h:231
SsVector2 scale
Definition ssplayer_effect2.h:182
float rotationAdd
Definition ssplayer_effect2.h:207
bool useOffset
Definition ssplayer_effect2.h:199
float delay
Definition ssplayer_effect2.h:237
bool useTransSpeed
Definition ssplayer_effect2.h:247
bool useInitScale
Definition ssplayer_effect2.h:226
int overrideRSeed
Definition ssplayer_effect2.h:255
SsU8Color initColor
Definition ssplayer_effect2.h:219
bool useGravity
Definition ssplayer_effect2.h:195
float transSpeed
Definition ssplayer_effect2.h:248
SsVector2 offset2
Definition ssplayer_effect2.h:201
float scaleFactor2
Definition ssplayer_effect2.h:229
SsU8Color endcolor
Definition ssplayer_effect2.h:185
float transscaleFactor2
Definition ssplayer_effect2.h:235
particleParameter()
Definition ssplayer_effect2.h:258
float scaleFactor
Definition ssplayer_effect2.h:228
float alphaFade
Definition ssplayer_effect2.h:244
float transSpeed2
Definition ssplayer_effect2.h:249
bool useAlphaFade
Definition ssplayer_effect2.h:243