OPTPiX SpriteStudio SDK
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
sstypes.h
1 #ifndef __SSTYPES__
2 #define __SSTYPES__
3 
4 #include <string>
5 #include <vector>
6 #include <math.h>
7 #include <algorithm>
8 
9 //===============================================================
10 //Macros
11 //===============================================================
12 #define SS_DECLARE_ENUM_STRING_DEF(type) \
13  SsString __EnumToString_( type::_enum n );\
14  void __StringToEnum_( SsString n , type::_enum& out);\
15 
16 
17 
18 
19 //===============================================================
20 // Declare Type
21 //===============================================================
22 
23 //文字列の設定
24 typedef std::string SsString;
25 
26 
27 
29 struct SsPoint2
30 {
31 public:
32  float x;
33  float y;
34 
35 public:
36  SsPoint2( float _x , float _y )
37  {
38  x = _x ; y = _y;
39  }
40  SsPoint2() : x(0) , y(0){}
41 
42  static float distance_sq(const SsPoint2 & l, const SsPoint2 & r)
43  {
44  float x = l.x - r.x;
45  float y = l.y - r.y;
46  float sq = x * x + y * y;
47  return sq;
48  }
49 
50  static float distance(const SsPoint2 & l, const SsPoint2 & r)
51  {
52  return sqrt( distance_sq(l, r) );
53  }
54 
55  SsPoint2 operator +( const SsPoint2& r) const
56  {
57  return SsPoint2(x + r.x, y + r.y);
58  }
59 
60  SsPoint2 operator -( const SsPoint2& r) const
61  {
62  return SsPoint2(x - r.x, y - r.y);
63  }
64 
65  SsPoint2 operator *( float r) const
66  {
67  return SsPoint2(x * r, y * r);
68  }
69 
70  SsPoint2 operator /( float r) const
71  {
72  return SsPoint2(x / r, y / r);
73  }
74 
75 };
76 
78 struct SsPoint3
79 {
80 public:
81  float x;
82  float y;
83  float z;
84 
85 public:
86  SsPoint3( float _x , float _y , float _z)
87  {
88  x = _x ; y = _y;z = _z;
89  }
90  SsPoint3() : x(0) , y(0) ,z(0){}
91 };
92 
93 typedef SsPoint2 SsVector2;
94 typedef SsPoint3 SsVector3;
95 typedef unsigned int u32;
96 typedef unsigned char u8;
97 
98 
99 
100 
102 template <typename T>
103 class SsTRect
104 {
105 public:
106  T x, y, w, h;
107 
108  SsTRect(): x(0), y(0), w(0), h(0) {}
109  SsTRect(T ax, T ay, T aw, T ah): x(ax), y(ay), w(aw), h(ah) {}
110  SsTRect(const SsTRect& r): x(r.x), y(r.y), w(r.w), h(r.h) {}
111 
112  bool operator ==(const SsTRect& r) const {return x == r.x && y == r.y && w == r.w && h == r.h;}
113  bool operator !=(const SsTRect& r) const {return !(*this == r);}
114 private:
115 };
116 
117 
118 typedef SsTRect<int> SsIRect;
119 
120 
122 template <typename T>
123 class SsTColor
124 {
125 public:
126  T r, g, b, a;
127 
128  SsTColor(): r(0), g(0), b(0), a(0) {}
129  SsTColor(T ar, T ag, T ab, T aa): r(ar), g(ag), b(ab), a(aa) {}
130  SsTColor(const SsTColor& s): r(s.r), g(s.g), b(s.b), a(s.a) {}
131 
132  void fromARGB(u32 c);
133  void fromBGRA(u32 c);
134 
135  u32 toARGB() const;
136 
137  bool operator ==(const SsTColor& rhs) const
138  {
139  return r == rhs.r
140  && g == rhs.g
141  && b == rhs.b
142  && a == rhs.a;
143  }
144 
145 private:
146 };
147 
148 
150 template<> inline SsTColor<float>::SsTColor(): r(0.5f), g(0.5f), b(0.5f), a(1.f) {}
151 template<> inline void SsTColor<float>::fromARGB(u32 c)
152 {
153  a = (float)(c >> 24) / 255.f;
154  r = (float)((c >> 16) & 0xff) / 255.f;
155  g = (float)((c >> 8) & 0xff) / 255.f;
156  b = (float)(c & 0xff) / 255.f;
157 }
158 template<> inline void SsTColor<float>::fromBGRA(u32 c)
159 {
160  b = (float)(c >> 24) / 255.f;
161  g = (float)((c >> 16) & 0xff) / 255.f;
162  r = (float)((c >> 8) & 0xff) / 255.f;
163  a = (float)(c & 0xff) / 255.f;
164 }
165 template<> inline u32 SsTColor<float>::toARGB() const
166 {
167  u32 c = (u8)(a * 255) << 24 | (u8)(r * 255) << 16 | (u8)(g * 255) << 8 | (u8)(b * 255);
168  return c;
169 }
170 
171 
172 
173 
174 template<> inline SsTColor<u32>::SsTColor(): r(255), g(255), b(255), a(255) {}
175 template<> inline void SsTColor<u32>::fromARGB(u32 c)
176 {
177  a = (c >> 24);
178  r = ((c >> 16) & 0xff);
179  g = ((c >> 8) & 0xff);
180  b = (c & 0xff);
181 }
182 template<> inline void SsTColor<u32>::fromBGRA(u32 c)
183 {
184  b = (c >> 24) ;
185  g = ((c >> 16) & 0xff) ;
186  r = ((c >> 8) & 0xff) ;
187  a = (c & 0xff) ;
188 }
189 template<> inline u32 SsTColor<u32>::toARGB() const
190 {
191  u32 c = (u8)(a) << 24 | (u8)(r) << 16 | (u8)(g) << 8 | (u8)(b);
192  return c;
193 }
194 
196 typedef SsTColor<float> SsFColor;
197 
198 
200 typedef SsTColor<u32> SsColor;
201 
202 
203 struct ToLower {
204  char operator()(char c) { return tolower(c); }
205 };
207 inline void ConvertStringToSsColor( const std::string& str , SsColor& out)
208 {
209  char *endptr;
210  unsigned long x;
211 
212  std::string temp = "0x";
213  temp+=str;
214 
215  transform(temp.begin(), temp.end(), temp.begin(), ToLower());
216  x = strtoul(temp.c_str(), &endptr, 16);
217  out.fromARGB( x );
218 }
219 
220 
221 
223 class SsCurve
224 {
225 public:
226  float startTime;
227  float startValue;
228  float endTime;
229  float endValue;
230 
231  float startKeyTime;
232  float endKeyTime;
233 
235 
236  SsCurve() : startTime(0.f), startValue(0.f), endTime(0.f), endValue(0.f), startKeyTime(0.f), endKeyTime(0.f){}
237  ~SsCurve(){}
238 
239 };
240 
241 
242 
243 //---------------------------------------------------------------
245 namespace SsPartsSortMode
246 {
247  enum _enum
248  {
249  invalid = -1,
251  z,
252  num
253  };
254 };
255 SS_DECLARE_ENUM_STRING_DEF( SsPartsSortMode );
256 
257 //---------------------------------------------------------------
259 namespace SsPartType
260 {
261  enum _enum
262  {
263  invalid = -1,
268  num
269  };
270 };
271 SS_DECLARE_ENUM_STRING_DEF( SsPartType );
272 
273 
274 //---------------------------------------------------------------
276 namespace SsBoundsType
277 {
278  enum _enum
279  {
280  invalid = -1,
287  num
288  };
289 };
290 SS_DECLARE_ENUM_STRING_DEF( SsBoundsType );
291 
292 
293 //---------------------------------------------------------------
295 namespace SsInheritType
296 {
297  enum _enum
298  {
299  invalid = -1,
301  self,
302  num
303  };
304 };
305 SS_DECLARE_ENUM_STRING_DEF( SsInheritType );
306 
307 //---------------------------------------------------------------
309 namespace SsBlendType
310 {
311  enum _enum{
312  invalid=-1,
313  mix,
314  mul,
315  add,
316  sub,
317  num
318  };
319 };
320 SS_DECLARE_ENUM_STRING_DEF( SsBlendType );
321 
322 
324 namespace SsColorBlendTarget
325 {
326  enum _enum{
327  invalid = -1,
330  num
331  };
332 };
333 SS_DECLARE_ENUM_STRING_DEF( SsColorBlendTarget );
334 
335 
336 
338 namespace SsInterpolationType
339 {
340  enum _enum
341  {
342  invalid = -1,
349  num,
350  };
351 };
352 SS_DECLARE_ENUM_STRING_DEF( SsInterpolationType );
353 
354 
356 namespace SsTexWrapMode
357 {
358  enum _enum
359  {
360  invalid = -1,
365  };
366 };
367 
368 SS_DECLARE_ENUM_STRING_DEF(SsTexWrapMode);
369 
371 namespace SsTexFilterMode
372 {
373  enum _enum
374  {
375  invalid = -1,
378  num
379  };
380 };
381 SS_DECLARE_ENUM_STRING_DEF(SsTexFilterMode);
382 
383 
384 
385 
387 namespace SsAttributeKind
388 {
389  enum _enum
390  {
391  invalid=-1,
392  cell=0,
424  num,
425  };
426 };
427 
428 
429 SS_DECLARE_ENUM_STRING_DEF(SsAttributeKind);
430 
431 namespace SsKeyValueType
432 {
433  enum _enum
434  {
435  _unkown = -1,
436  _bool = 0,
437  _float,
438  _int,
439  _string,
440  _cellmap,
441  _vertexAnime,
442  _colorAnime,
443  _userData,
444  };
445 };
446 
447 
450 {
451  SsColor rgba;
452  float rate;
453 
455 
456 };
457 
458 
461 {
463  SsPoint2& getOffsets(int index){ return offsets[index];}
464 };
465 
466 
467 
468 
469 class ISSTexture;
470 class SsCell;
471 
472 
473 
476 {
477  SsColorBlendTarget::_enum target; //ブレンドの適用方法 単色(全体) , 頂点単位
478  SsBlendType::_enum blendType; //ブレンド種別 (mix 乗算 加算 減算)
479  SsColorBlendValue color; //単色。全体の場合に使用されるカラー値
480  SsColorBlendValue colors[4]; //頂点単位の場合使用されるカラー値
481 
482  SsColorBlendValue& getColors(int index){ return colors[index];}
483  int getTargetToInt(){ return (int)target;}
484  int getBlendTypeToInt(){ return (int)blendType;}
485  SsColorAnime() :
486  target( SsColorBlendTarget::invalid ) ,
487  blendType( SsBlendType::invalid ){}
488 
489 };
490 
491 //参照セル値
492 struct SsRefCell
493 {
494  int mapid;
495  std::string name;
496 
497 
498 };
500 {
501 public:
502  bool useInteger;
503  bool usePoint;
504  bool useRect;
505  bool useString;
506 
507  int integer;
510  SsString string;
511 
512  SsUserDataAnime() :
513  useInteger(false),
514  usePoint(false),
515  useRect(false),
516  useString(false){}
517 };
518 
520 {
521 public:
522  bool infinity;
523  bool reverse;
524  bool pingpong;
525  bool independent;
526  int loopNum;
527  SsString startLabel;
528  int startOffset;
529  SsString endLabel;
530  int endOffset;
531  float speed;
532 
533 
534  //テンポラリ <-エディタ用計算値の可能性もあるので後で整理
535  int curKeyframe; //この値があるキーフレーム値 (計算値)
536  float liveFrame; //再生時間の累積
537 
538  SsInstanceAttr():
539  infinity( false ),
540  reverse( false ),
541  pingpong( false ),
542  independent( false ),
543  loopNum( 1 ),
544  startLabel("_start"),
545  startOffset(0),
546  endLabel("_end"),
547  endOffset(0),
548  curKeyframe( 0 ),
549  speed(1.0f)
550  {}
551 
552 };
553 
554 
555 #endif