OPTPiX SpriteStudio SDK
Loading...
Searching...
No Matches
ssplayer_effect.h
Go to the documentation of this file.
1#ifndef __SSPLAYER_EFFECT__
2#define __SSPLAYER_EFFECT__
3
5#include "MersenneTwister.h"
6#include "ssplayer_cellmap.h"
7#include "ssplayer_effect.h"
8
9#include <memory>
10
11// PFMEM_TEST
12#define SPRITESTUDIO6SDK_PFMEM_TEST ( 1 )
13
14namespace spritestudio6
15{
16
17class SsEffectModel;
18class SsRenderEffectBase;
19class SsEffectNode;
20
21struct SsPartState;
22class SsEffectRenderAtom;
23class SsCell;
24
25class SsEffectBehavior;
26class SsEffectRenderer;
27
28
37
38
46
47
48
49//--------------------------------------------------------------------------
50//
51//--------------------------------------------------------------------------
53{
54public:
56 float rotation;
58
64
65 float _lifetime; //オブジェクトの最大生存時間
66 float _exsitTime; //存在した時間
67 float _life; //寿命 = 0で死
68
69 bool undead;
70
71 float alpha;
72
73public:
74
76 parent(0),
77 m_isInit(false),
78 m_isLive(true),
79 _lifetime(10.0f),
80 _life(1.0f),
81 rotation(0),
82 position(0,0,0),
83 scale(1.0f,1.0f),
84 m_isCreateChild(false)
85 {
86 }
87
89 data = refdata;
90 setParent(_p);
91
92 _lifetime = 0;
93 position = SsVector3(0,0,0);
94 scale = SsVector2(0,0);
95 rotation = 0.0f;
96 }
97
99
102
103 bool isInit(){ return m_isInit; }
104
105 virtual void Initialize()
106 {
107 parent = 0;
108 m_isInit = false;
109 m_isLive = true;
110 _lifetime = 10.0f;
111 _life = 1.0f;
112 rotation = 0;
113 position = SsVector3(0,0,0);
114 scale = SsVector2(1,1);
115 m_isCreateChild = false;
116 m_isInit = false;
117 }
118 virtual bool genarate( SsEffectRenderer* render ){ SPRITESTUDIO6SDK_NOUSE_ARGUMENT(render); return true; }
119
120 virtual void update(float delta){ SPRITESTUDIO6SDK_NOUSE_ARGUMENT(delta); }
121 virtual void draw(SsEffectRenderer* render){ SPRITESTUDIO6SDK_NOUSE_ARGUMENT(render); }
122
123 virtual void debugdraw(){}
124
126 {
127 return position;
128 }
129
130 void setPosistion( float x , float y , float z )
131 {
132 position.x = x;
133 position.y = y;
134 position.z = z;
135 }
136
137 void setScale( float x , float y )
138 {
139 scale.x = x;
140 scale.y = y;
141 }
142 void setRotation( float z )
143 {
144#ifdef _WIN32
145
146 rotation = (float)( std::fmod( z , 360 ) ) ;
147#else
148 rotation = fmod( z , 360 ) ;
149
150#endif
151
152 }
153
154 float getRotation() const { return rotation; }
155 SsVector2 getScale() const { return scale; }
156 virtual void count(){}
157
158};
159
160class SsEffectDrawBatch;
179
180
181//--------------------------------------------------------------------------
182//パーティクル生成能力を持つオブジェクト
183//--------------------------------------------------------------------------
185{
186public:
187 unsigned int myseed;
189 //エミッターパラメータ
190
191 //パーティクルパラメータ
193
194 std::unique_ptr<CMersenneTwister> MT;
195
196 //以前からの移植
198 int delay;
199 float interval;
201 float frame;
203 int burst;
204
206
209
210
213
214
215public:
216
218
219
220public:
222 {
223 if ( !MT ) MT.reset( new CMersenneTwister() );
224
226 delay = 0;
227 interval = 0;
228 intervalleft = 0;
229 frame = 0;
230 frameDelta = 0;
231 particleCount = 0;
232 _exsitTime = 0;
233
234 generate_ok = true;
235
236 param_particle = 0;
238
239 }
240
242 MT()
243 {
244 }
246 data = refdata;
247 parent = _p;
249 }
250
252 {
253 MT.reset();
254 }
256 void setMySeed( unsigned int seed );
257 void TrushRandom(int loop)
258 {
259 for ( int i = 0 ; i < loop ; i++ )
260 (MT.get())->genrand_uint32();
261 }
262
263 virtual void Initialize();
264 virtual bool genarate( SsEffectRenderer* render );
265
266 virtual void update(float delta);
267 virtual void count(){ particleCount = 0 ; }
268
269};
270
271
272
273
274
275//--------------------------------------------------------------------------
276//パーティクルオブジェクト
277//--------------------------------------------------------------------------
279{
280public:
282
283 float size;
286
287 SsVector2 _baseEmiterPosition; //もしかしてもう使ってないかも
288 SsVector2 _backposition; //force計算前のポジション
289 SsVector2 _position; //描画用ポジション
290
295
299
303
304
305 float speed; //現在持っている速度
309
312// SsVector2 _orggravity;
313
318
319 SsVector2 _execforce; //処理中の力 最終的には単位当たりの力に変換
320
321
322
323
324public:
326 {
327
329
330 _position = SsVector2(0,0);
333 _rotation = 0;
334 _size = SsVector2( 1.0f , 1.0f );
335 _startsize = SsVector2( 1.0f , 1.0f );
336 _divsize = SsVector2( 0.0f , 0.0f );
337 _force = SsVector2(0,0);
338 _gravity = SsVector2(0,0);
339 _radialAccel = 0;
341 _color = SsU8Color(255,255,255,255) ;
343 _exsitTime = 0;
344 _execforce = SsVector2(0,0);
345 parentEmitter = 0;
346 dispCell = 0;
347 }
348
349
350
353 data = refdata;
354 parent = _p;
356 }
357
360
361 //生成フェーズ
362 virtual void Initialize();
363
364 virtual bool genarate( SsEffectRenderer* render );
365
366 virtual void update(float delta);
367 virtual void draw(SsEffectRenderer* render);
368
369
370 virtual void count()
371 {
372 if ( parentEmitter )
373 parentEmitter->particleCount++;
374 }
375 virtual void updateDelta(float delta);
376 virtual void updateForce(float delta);
377};
378
379
380
381
382//-------------------------------------------------------------
383// 画面に存在できるパーティクルバッファのサイズを指定します。
384// 画面に存在できるエミッタバッファのサイズを指定します。
385//
386// 1つのパーツに対してこれらのバッファが生成されます。
387// パーツ単位で画面に生成できる最大数になります。
388//
389// パーティクルにエミッターを付加した場合に複数のエミッターが同時に作成され
390// エミッターバッファが消費されます。
391//
392// アプリケーションの仕様に合わせて数を調整してください。
393// パーツ単位でバッファを作成するので、バッファ数を多く設定すると
394// アニメーション初期化時にバッファ確保の時間が長くなります。
395// 再生するアニメーションにエフェクトパーツがない場合は初期化が行われなわれないので負荷は発生しません。
396//SpriteStudio本体の設定
397constexpr auto SSEFFECTRENDER_EMMITER_MAX = 1024;
398constexpr auto SSEFFECTRENDER_PARTICLE_MAX = 4096;
399// constexpr auto SSEFFECTRENDER_EMMITER_MAX = 256;
400// constexpr auto SSEFFECTRENDER_PARTICLE_MAX = 2048;
401//-------------------------------------------------------------
402constexpr auto SSEFFECTRENDER_BACTH_MAX = 256;
403
404
405
406//--------------------------------------------------------------------------
407//エフェクトの描画処理メイン
408//--------------------------------------------------------------------------
410{
411private:
412 SsEffectModel* effectData;
413
414
415 bool m_isPlay;
416 bool m_isPause;
417 bool m_isLoop;
418 u32 mySeed;
419
420
421 SsVector3 layoutPosition;
422
423 SsCellMapList* curCellMapManager;
424
425
426#if SPRITESTUDIO6SDK_PFMEM_TEST
429
431
432
433 int em_pool_count;
434 int pa_pool_count;
435 int dpr_pool_count;
436#endif
437
438public:
439 //アップデート物のリスト
440 std::unique_ptr<SsEffectRenderAtom> render_root;
441
447
448
449 std::vector<SsEffectRenderAtom*> updatelist;
450 std::vector<SsEffectRenderAtom*> createlist;
451
452 std::list<SsEffectDrawBatch*> drawBatchList;
453
454
455public:
457 effectData(0)
458 ,parentState(0)
459 ,mySeed(0)
460 ,render_root()
462 ,m_isLoop(false)
464 ,em_pool_count(0)
465 ,pa_pool_count(0)
466 ,dpr_pool_count(0)
467 ,usePreMultiTexture(true)
468 ,renderTexture(false)
469 ,frameDelta(0)
470#endif
471 {}
472
473
474 virtual ~SsEffectRenderer();
475
476 void clearUpdateList();
477
478
479public:
480
481
482 void setSeed( u32 seed ){ mySeed = seed; }
483 virtual void update(float delta);
484 virtual void draw();
485 virtual void reload();
486
487 //操作
488 void play();
489 void stop();
490 void pause();
491 void setLoop(bool flag);
492 bool getPlayStatus(void); //追加
493
495 if (effectData)
496 {
497 if ( effectData->fps == 0 ) return 30;
498
499 return effectData->fps;
500 }
501 return 30;
502 }
503
505 {
506 return effectData;
507 }
508
509 //データセット
511 stop();
513 effectData = data;
514 }
515 void setParentAnimeState( SsPartState* state ){ parentState = state; }
516
517 SsEffectRenderAtom* CreateAtom( unsigned int seed , SsEffectRenderAtom* parent , SsEffectNode* node );
518
519 void setCellmapManager( SsCellMapList* plist ) { curCellMapManager = plist; }
520
522
524
525
526};
527
528
529} // namespace spritestudio6
530
531#endif
Definition MersenneTwister.h:43
Definition ssplayer_cellmap.h:63
Definition SsEffectBehavior.h:17
Definition ssplayer_effect.h:162
SsCellValue * dispCell
Definition ssplayer_effect.h:165
int priority
Definition ssplayer_effect.h:164
std::list< SsEffectRenderAtom * > drawlist
Definition ssplayer_effect.h:169
SsEffectNode * targetNode
Definition ssplayer_effect.h:166
~SsEffectDrawBatch()
Definition ssplayer_effect.h:173
SsEffectDrawBatch()
Definition ssplayer_effect.h:172
SsRenderBlendType::_enum blendType
Definition ssplayer_effect.h:168
Definition ssloader_ssee.h:116
Definition ssloader_ssee.h:82
Definition ssplayer_effect.h:53
void setPosistion(float x, float y, float z)
Definition ssplayer_effect.h:130
virtual void count()
Definition ssplayer_effect.h:156
float rotation
Definition ssplayer_effect.h:56
float getRotation() const
Definition ssplayer_effect.h:154
bool isInit()
Definition ssplayer_effect.h:103
bool undead
Definition ssplayer_effect.h:69
SsEffectRenderAtom * parent
Definition ssplayer_effect.h:59
virtual bool genarate(SsEffectRenderer *render)
Definition ssplayer_effect.h:118
SsVector2 getScale() const
Definition ssplayer_effect.h:155
void setScale(float x, float y)
Definition ssplayer_effect.h:137
SsVector2 scale
Definition ssplayer_effect.h:57
virtual ~SsEffectRenderAtom()
Definition ssplayer_effect.h:98
bool m_isCreateChild
Definition ssplayer_effect.h:63
virtual void debugdraw()
Definition ssplayer_effect.h:123
bool m_isInit
Definition ssplayer_effect.h:62
bool m_isLive
Definition ssplayer_effect.h:61
SsVector3 getPosition() const
Definition ssplayer_effect.h:125
SsRenderType::_enum getMyType()
Definition ssplayer_effect.h:101
void setParent(SsEffectRenderAtom *_p)
Definition ssplayer_effect.h:100
SsEffectRenderAtom(SsEffectNode *refdata, SsEffectRenderAtom *_p)
Definition ssplayer_effect.h:88
float alpha
Definition ssplayer_effect.h:71
SsEffectRenderAtom()
Definition ssplayer_effect.h:75
SsEffectNode * data
Definition ssplayer_effect.h:60
float _life
Definition ssplayer_effect.h:67
virtual void draw(SsEffectRenderer *render)
Definition ssplayer_effect.h:121
void setRotation(float z)
Definition ssplayer_effect.h:142
virtual void update(float delta)
Definition ssplayer_effect.h:120
float _lifetime
Definition ssplayer_effect.h:65
virtual void Initialize()
Definition ssplayer_effect.h:105
SsVector3 position
Definition ssplayer_effect.h:55
float _exsitTime
Definition ssplayer_effect.h:66
Definition ssplayer_effect.h:185
int maxParticle
Definition ssplayer_effect.h:197
int burst
Definition ssplayer_effect.h:203
SsEffectRenderEmitter(SsEffectNode *refdata, SsEffectRenderAtom *_p)
Definition ssplayer_effect.h:245
virtual void count()
Definition ssplayer_effect.h:267
SsEffectDrawBatch * myBatchList
Definition ssplayer_effect.h:217
SsRenderType::_enum getMyType()
Definition ssplayer_effect.h:255
virtual void update(float delta)
Definition ssplayer_effect.cpp:331
float intervalleft
Definition ssplayer_effect.h:200
float frame
Definition ssplayer_effect.h:201
int delay
Definition ssplayer_effect.h:198
bool generate_ok
Definition ssplayer_effect.h:211
float interval
Definition ssplayer_effect.h:199
virtual bool genarate(SsEffectRenderer *render)
Definition ssplayer_effect.cpp:283
SsEffectRenderEmitter()
Definition ssplayer_effect.h:241
void InitParameter()
Definition ssplayer_effect.h:221
SsEffectNode * param_particle
Definition ssplayer_effect.h:192
EmmiterType::_enum type
Definition ssplayer_effect.h:205
virtual ~SsEffectRenderEmitter()
Definition ssplayer_effect.h:251
unsigned int myseed
Definition ssplayer_effect.h:187
SsString MyName
Definition ssplayer_effect.h:207
virtual void Initialize()
Definition ssplayer_effect.cpp:251
void TrushRandom(int loop)
Definition ssplayer_effect.h:257
std::unique_ptr< CMersenneTwister > MT
Definition ssplayer_effect.h:194
size_t particleCount
Definition ssplayer_effect.h:208
SsCellValue dispCell
Definition ssplayer_effect.h:188
int drawPriority
Definition ssplayer_effect.h:212
float frameDelta
Definition ssplayer_effect.h:202
void setMySeed(unsigned int seed)
Definition ssplayer_effect.cpp:237
Definition ssplayer_effect.h:279
SsVector2 _size
Definition ssplayer_effect.h:296
SsU8Color _endcolor
Definition ssplayer_effect.h:302
SsVector2 _execforce
Definition ssplayer_effect.h:319
float direction
Definition ssplayer_effect.h:316
SsEffectBehavior * refBehavior
Definition ssplayer_effect.h:285
float _rotationAddDst
Definition ssplayer_effect.h:293
float _rotationAddOrg
Definition ssplayer_effect.h:294
virtual void updateForce(float delta)
Definition ssplayer_effect.cpp:511
float _rotation
Definition ssplayer_effect.h:291
float _rotationAdd
Definition ssplayer_effect.h:292
virtual void draw(SsEffectRenderer *render)
Definition ssplayer_effect.cpp:536
virtual void updateDelta(float delta)
Definition ssplayer_effect.cpp:478
virtual void update(float delta)
Definition ssplayer_effect.cpp:437
SsEffectRenderParticle(SsEffectNode *refdata, SsEffectRenderAtom *_p)
Definition ssplayer_effect.h:352
float lastspeed
Definition ssplayer_effect.h:307
SsU8Color _startcolor
Definition ssplayer_effect.h:301
SsVector2 _baseEmiterPosition
Definition ssplayer_effect.h:287
void InitParameter()
Definition ssplayer_effect.h:325
float firstspeed
Definition ssplayer_effect.h:306
float _radialAccel
Definition ssplayer_effect.h:314
virtual ~SsEffectRenderParticle()
Definition ssplayer_effect.h:358
float speed
Definition ssplayer_effect.h:305
SsRenderType::_enum getMyType()
Definition ssplayer_effect.h:359
SsCellValue * dispCell
Definition ssplayer_effect.h:281
SsVector2 _position
Definition ssplayer_effect.h:289
SsVector2 _startsize
Definition ssplayer_effect.h:297
SsVector2 _gravity
Definition ssplayer_effect.h:311
SsU8Color _color
Definition ssplayer_effect.h:300
virtual bool genarate(SsEffectRenderer *render)
Definition ssplayer_effect.cpp:404
virtual void count()
Definition ssplayer_effect.h:370
bool isTurnDirection
Definition ssplayer_effect.h:317
SsEffectRenderParticle()
Definition ssplayer_effect.h:351
virtual void Initialize()
Definition ssplayer_effect.cpp:366
SsVector2 _force
Definition ssplayer_effect.h:310
SsVector2 vector
Definition ssplayer_effect.h:308
SsVector2 _backposition
Definition ssplayer_effect.h:288
float _tangentialAccel
Definition ssplayer_effect.h:315
SsEffectRenderEmitter * parentEmitter
Definition ssplayer_effect.h:284
SsVector2 _divsize
Definition ssplayer_effect.h:298
float size
Definition ssplayer_effect.h:283
Definition ssplayer_effect.h:410
int getCurrentFPS()
Definition ssplayer_effect.h:494
void setEffectData(SsEffectModel *data)
Definition ssplayer_effect.h:510
std::unique_ptr< SsEffectRenderAtom > render_root
Definition ssplayer_effect.h:440
SsEffectRenderer()
Definition ssplayer_effect.h:456
SsEffectRenderAtom * CreateAtom(unsigned int seed, SsEffectRenderAtom *parent, SsEffectNode *node)
Definition ssplayer_effect.cpp:105
bool getPlayStatus(void)
Definition ssplayer_effect.cpp:828
void setParentAnimeState(SsPartState *state)
Definition ssplayer_effect.h:515
void clearUpdateList()
Definition ssplayer_effect.cpp:728
virtual void update(float delta)
Definition ssplayer_effect.cpp:597
SsPartState * parentState
Definition ssplayer_effect.h:446
bool usePreMultiTexture
Definition ssplayer_effect.h:442
std::list< SsEffectDrawBatch * > drawBatchList
Definition ssplayer_effect.h:452
float frameDelta
Definition ssplayer_effect.h:445
void stop()
Definition ssplayer_effect.cpp:809
bool renderTexture
Definition ssplayer_effect.h:444
u32 parentAnimeStartFrame
Definition ssplayer_effect.h:443
virtual void reload()
Definition ssplayer_effect.cpp:764
virtual void draw()
Definition ssplayer_effect.cpp:671
void setLoop(bool flag)
Definition ssplayer_effect.cpp:821
std::vector< SsEffectRenderAtom * > createlist
Definition ssplayer_effect.h:450
void play()
Definition ssplayer_effect.cpp:799
virtual ~SsEffectRenderer()
Definition ssplayer_effect.cpp:717
void setCellmapManager(SsCellMapList *plist)
Definition ssplayer_effect.h:519
std::vector< SsEffectRenderAtom * > updatelist
Definition ssplayer_effect.h:449
void pause()
Definition ssplayer_effect.cpp:815
SsEffectDrawBatch * findBatchListSub(SsEffectNode *n)
Definition ssplayer_effect.cpp:66
void setSeed(u32 seed)
Definition ssplayer_effect.h:482
SsEffectModel * getEffectData()
Definition ssplayer_effect.h:504
SsEffectDrawBatch * findBatchList(SsEffectNode *n)
Definition ssplayer_effect.cpp:82
GLdouble n
Definition glad.h:4564
GLint y
Definition glad.h:1965
GLdouble GLdouble z
Definition glad.h:2301
GLboolean * data
Definition glad.h:2049
GLdouble x
Definition glad.h:2847
Definition ssplayer_effect.h:40
_enum
Definition ssplayer_effect.h:41
@ EmmiterTypeNormal
Definition ssplayer_effect.h:42
@ EmmiterTypeRibbon
Definition ssplayer_effect.h:43
_enum
Definition sstypes.h:702
Definition ssplayer_effect.h:30
_enum
Definition ssplayer_effect.h:31
@ BaseNode
Definition ssplayer_effect.h:32
@ EmmiterNode
Definition ssplayer_effect.h:33
@ ParticleNode
Definition ssplayer_effect.h:34
Definition ISsEffectRender.h:5
unsigned int u32
Definition sstypes.h:200
constexpr auto SSEFFECTRENDER_EMMITER_MAX
Definition ssplayer_effect.h:397
SsPoint2 SsVector2
Definition sstypes.h:198
SsPoint3 SsVector3
Definition sstypes.h:199
SsTColor< u8 > SsU8Color
Definition sstypes.h:332
constexpr auto SSEFFECTRENDER_PARTICLE_MAX
Definition ssplayer_effect.h:398
std::string SsString
Definition sstypes.h:30
constexpr auto SSEFFECTRENDER_BACTH_MAX
Definition ssplayer_effect.h:402
#define SPRITESTUDIO6SDK_NOUSE_ARGUMENT(_name_)
Definition sshTask.h:15
#define SPRITESTUDIO6SDK_PFMEM_TEST
Definition ssplayer_effect.h:12
パーツが使用するセルの情報
Definition ssplayer_cellmap.h:16
パーツの状態を保持するクラスです。
Definition ssplayer_PartState.h:23