OPTPiX SpriteStudio SDK
Loading...
Searching...
No Matches
ssplayer_animedecode.h
Go to the documentation of this file.
1#ifndef __SSPLAYER_ANIMEDECODE__
2#define __SSPLAYER_ANIMEDECODE__
3
6
7
8#include "ssplayer_types.h"
9#include "ssplayer_cellmap.h"
10#include "ssplayer_PartState.h"
11#include "ssplayer_macro.h"
12#include "ssplayer_mesh.h"
13
14#include <memory>
15
16//きれいな頂点変形に対応する場合は1にする。
17//4ポリゴンで変形します。
18//0の場合はZ型の2ポリゴンで変形します。
19#define SPRITESTUDIO6SDK_USE_TRIANGLE_FIN (1)
20
21namespace spritestudio6
22{
23
24
25 //パーツとアニメを関連付ける
26 typedef std::pair<SsPart*,SsPartAnime*> SsPartAndAnime;
27
28
29 //パーツのソート順
31 {
32 public:
33 bool operator()(const SsPartState* lhs, const SsPartState* rhs) const
34 {
35 if (lhs->prio == rhs->prio)
36 return lhs->index < rhs->index;
37 return lhs->prio < rhs->prio;
38 }
39 };
40
41
42
44 {
45 public:
46
47 private:
48
50 SsProject* project;
51
53 std::vector<SsPartAndAnime> partAnime;
54 std::vector<SsPartAndAnime> setupPartAnime;
55
57 std::map<SsString,SsPartAnime*> partAnimeDic;
58 std::map<SsString, SsPartAnime*>setupPartAnimeDic;
59
60 std::unique_ptr<SsCellMapList> curCellMapManager;
61
62 std::unique_ptr<std::vector<SsPartState>> partState;
63
64 std::list<SsPartState*> sortList;
65 std::list<SsPartState*> partStatesMask_;
66 std::vector<SsPartState*> maskIndexList;
67
68
69 int seedOffset; //エフェクトのシードへ影響
70 float nowPlatTime;
71 float nowPlatTimeOld; //前のフレームで再生した時間
72 float frameDelta;
73 int curAnimeStartFrame;
74 int curAnimeEndFrame;
75 int curAnimeTotalFrame;
76 int curAnimeFPS;
77 SsAnimation* curAnimation;
78 bool instancePartsHide;
79 bool maskFuncFlag; //マスク機能(初期化、描画)を有効にするか?インスタンスパーツ内のマスク対応
80 bool maskParentSetting; //親のマスク対象
81 SsSequence* curSequence;
82
83 size_t stateNum;
84
85 std::unique_ptr<SsMeshAnimator> meshAnimator;
86 SsModel* myModel;
87
88 void* custom_data;
89
90 private:
91 void updateState( int nowTime , SsPart* part , SsPartAnime* part_anime , SsPartState* state );
92 void updateInstance( int nowTime , SsPart* part , SsPartAnime* part_anime , SsPartState* state );
93 void updateEffect( float frameDelta , int nowTime , SsPart* part , SsPartAnime* part_anime , SsPartState* state );
94
95
96 void updateMatrix(SsPart* part , SsPartAnime* anime , SsPartState* state);
97
98 void updateVertices(SsPart* part , SsPartAnime* anime , SsPartState* state);
99
100 int CalcAnimeLabel2Frame(const SsString& str, int offset, SsAnimation* Animation );
101 int findAnimetionLabel(const SsString& str, SsAnimation* Animation);
102 bool getFirstCell(SsPart* part, SsCellValue& out);
103
104
105 public:
108 {
109 //念のため解放(スマートポインタなので実用上問題ないはずだが明示性として)
110 curCellMapManager.reset();
111 partState.reset();
112 meshAnimator.reset();
113 }
114
115 virtual void update( float frameDelta = 1.0f );
116 virtual void draw();
117
118 void setAnimation( SsModel* model , SsAnimation* anime , SsCellMapList* cellmap , SsProject* sspj=0 );
119 // void setAnimation(SsModel* model, SsAnimation* anime, SsAnimePack *animepack , SsCellMapList* cellmap, SsProject* sspj = 0);
120 void setSequence( SsSequence* sequence , SsProject* sspj=0 );
121
122 void setPlayFrame( float time ) { nowPlatTime = time; }
123 int getAnimeStartFrame() { return curAnimeStartFrame; }
124 int getAnimeEndFrame() { return curAnimeEndFrame; }
125 int getAnimeTotalFrame() { return curAnimeTotalFrame; }
126 int getAnimeFPS() { return curAnimeFPS; }
127
128 int getSequenceItemCount() { return (int)(curSequence->list.size()); }
129 SsSequenceItem* getSequenceItem( int iIndex ) { return curSequence->list[iIndex]; }
130
131 size_t getStateNum() { return stateNum; }
132 std::vector<SsPartState>& getPartState() { return *(partState.get()); }
133 SsModel* getMyModel(){return myModel;}
134
135 std::list<SsPartState*>& getPartSortList(){return sortList;}
136 std::vector<SsPartAndAnime>& getPartAnime(){ return partAnime; }
137
138 template<typename mytype> int SsGetKeyValue( SsPart* part, int time , SsAttribute* attr , mytype& value );
139 template<typename mytype> void SsInterpolationValue( int time , const SsKeyframe* leftkey , const SsKeyframe* rightkey , mytype& v );
140 void SsInterpolationValue( int time , const SsKeyframe* leftkey , const SsKeyframe* rightkey , SsCellValue& v );
141 void SsInterpolationValue( int time , const SsKeyframe* leftkey , const SsKeyframe* rightkey , SsPartsColorAnime& v );
142 void SsInterpolationValue( int time , const SsKeyframe* leftkey , const SsKeyframe* rightkey , SsColorAnime& v );
143 void SsInterpolationValue( int time , const SsKeyframe* leftkey , const SsKeyframe* rightkey , SsShaderAnime& v );
144 void SsInterpolationValue( int time , const SsKeyframe* leftkey , const SsKeyframe* rightkey , SsVertexAnime& v );
145 void SsInterpolationValue( int time , const SsKeyframe* leftkey , const SsKeyframe* rightkey , SsSignalAttr& v );
146 void SsInterpolationValue( int time , const SsKeyframe* leftkey , const SsKeyframe* rightkey , SsInstanceAttr& v );
147 void SsInterpolationValue( int time , const SsKeyframe* leftkey , const SsKeyframe* rightkey , SsEffectAttr& v );
148 void SsInterpolationValue( int time , const SsKeyframe* leftkey , const SsKeyframe* rightkey , SsDeformAttr& v );
149
150
151 void setInstancePartsHide(bool hide){
152 instancePartsHide = hide;
153 }
154 void restart();
155 void reset();
156
157 void setSeedOffset(int a ){ seedOffset = a; }
158 int getSeedOffset(){ return seedOffset; }
159
160 void setMaskFuncFlag(bool flg); //マスク用ステンシルバッファの初期化を行うか
161 void setMaskParentSetting(bool flg); //親のマスク対象を設定する
162 bool getMaskParentSetting(void) { return maskParentSetting; }; //設定された親のマスク対象を取得する
163
164 void setCustomData(void* d) {custom_data=d;}
165 void* getCustomData(){ return custom_data;}
166
167 };
168
169
170} // namespace spritestudio6
171
172#endif
Definition ssloader_ssae.h:335
int SsGetKeyValue(SsPart *part, int time, SsAttribute *attr, mytype &value)
Definition ssplayer_animedecode.cpp:709
int getSequenceItemCount()
Definition ssplayer_animedecode.h:128
int getAnimeStartFrame()
Definition ssplayer_animedecode.h:123
bool getMaskParentSetting(void)
Definition ssplayer_animedecode.h:162
void setMaskFuncFlag(bool flg)
Definition ssplayer_animedecode.cpp:1487
virtual ~SsAnimeDecoder()
Definition ssplayer_animedecode.h:107
void reset()
Definition ssplayer_animedecode.cpp:56
int getSeedOffset()
Definition ssplayer_animedecode.h:158
void setSeedOffset(int a)
Definition ssplayer_animedecode.h:157
virtual void update(float frameDelta=1.0f)
Definition ssplayer_animedecode.cpp:1504
SsSequenceItem * getSequenceItem(int iIndex)
Definition ssplayer_animedecode.h:129
SsModel * getMyModel()
Definition ssplayer_animedecode.h:133
void restart()
Definition ssplayer_animedecode.cpp:72
void setCustomData(void *d)
Definition ssplayer_animedecode.h:164
int getAnimeTotalFrame()
Definition ssplayer_animedecode.h:125
SsAnimeDecoder()
Definition ssplayer_animedecode.cpp:37
std::vector< SsPartAndAnime > & getPartAnime()
Definition ssplayer_animedecode.h:136
int getAnimeEndFrame()
Definition ssplayer_animedecode.h:124
std::list< SsPartState * > & getPartSortList()
Definition ssplayer_animedecode.h:135
int getAnimeFPS()
Definition ssplayer_animedecode.h:126
void setPlayFrame(float time)
Definition ssplayer_animedecode.h:122
void setInstancePartsHide(bool hide)
Definition ssplayer_animedecode.h:151
void * getCustomData()
Definition ssplayer_animedecode.h:165
void setSequence(SsSequence *sequence, SsProject *sspj=0)
Definition ssplayer_animedecode.cpp:291
std::vector< SsPartState > & getPartState()
Definition ssplayer_animedecode.h:132
void setMaskParentSetting(bool flg)
Definition ssplayer_animedecode.cpp:1495
void SsInterpolationValue(int time, const SsKeyframe *leftkey, const SsKeyframe *rightkey, mytype &v)
Definition ssplayer_animedecode.cpp:678
size_t getStateNum()
Definition ssplayer_animedecode.h:131
virtual void draw()
Definition ssplayer_animedecode.cpp:1592
void setAnimation(SsModel *model, SsAnimation *anime, SsCellMapList *cellmap, SsProject *sspj=0)
Definition ssplayer_animedecode.cpp:123
Definition ssattribute.h:51
Definition ssplayer_cellmap.h:63
Definition sstypes.h:951
Definition sstypes.h:756
Definition sstypes.h:866
Definition ssattribute.h:17
Definition ssloader_ssae.h:258
Definition ssloader_ssae.h:295
Definition ssloader_ssae.h:59
Definition ssplayer_animedecode.h:31
bool operator()(const SsPartState *lhs, const SsPartState *rhs) const
Definition ssplayer_animedecode.h:33
Definition ssloader_sspj.h:97
Definition ssloader_ssqe.h:41
Definition ssloader_ssqe.h:19
Definition sstypes.h:855
GLfloat value
Definition glad.h:2667
GLintptr offset
Definition glad.h:3305
GLdouble v
Definition glad.h:2712
GLboolean GLboolean GLboolean GLboolean a
Definition glad.h:3632
Definition ISsEffectRender.h:5
std::pair< SsPart *, SsPartAnime * > SsPartAndAnime
Definition ssplayer_animedecode.h:26
std::string SsString
Definition sstypes.h:30
パーツが使用するセルの情報
Definition ssplayer_cellmap.h:16
カラーブレンド使用時のブレンドタイプとカラー値
Definition sstypes.h:650
パーツの状態を保持するクラスです。
Definition ssplayer_PartState.h:23
int prio
優先度
Definition ssplayer_PartState.h:42
int index
Definition ssplayer_PartState.h:24
パーツカラー使用時のブレンドタイプとカラー値
Definition sstypes.h:633
シェーダー使用時のシェーダータイプとシェーダー値
Definition sstypes.h:667
頂点変形キーの4頂点変形値
Definition sstypes.h:619