OPTPiX SpriteStudio SDK
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
ssplayer_cellmap.h
1 #ifndef __SSPLAYER_CELLMAP__
2 #define __SSPLAYER_CELLMAP__
3 
4 
5 
6 class SsAnimeDecoder;
7 class SsCelMapLinker;
8 
11 {
12  SsCell* cell;
17 
18  SsCellValue() :
19  cell(0) ,
20  texture(0)
21  {}
22 };
23 
25 {
26 public:
27  SsCellMap* cellMap;
28  ISSTexture* tex;
29 
30  std::map<SsString,SsCell*> CellDic;
31 
32 public:
34  : cellMap(0) , tex(0)
35  {}
36 
37  SsCelMapLinker(SsCellMap* cellmap ,SsString filePath )
38  {
39 
40  cellMap = cellmap;
41  size_t num = cellMap->cells.size();
42  for ( size_t i = 0 ; i < num ; i++ )
43  {
44  CellDic[cellMap->cells[i]->name] = cellMap->cells[i];
45  }
46 
47  if (!SSTextureFactory::isExist() )
48  {
49  puts( "SSTextureFactory not created yet." );
50  throw;
51  }
52 
53  tex = SSTextureFactory::create();
54  SsString fullpath = filePath + cellmap->imagePath;
55 
56  if ( !tex->Load( fullpath.c_str() ) )
57  {
58  delete tex;
59  tex = 0;
60  }
61 
62  }
63 
64  virtual ~SsCelMapLinker()
65  {
66  CellDic.clear();
67 
68  if ( tex )
69  delete tex;
70  }
71 
72  SsCell* findCell( const SsString& name ){ return CellDic[name]; }
73 
74 };
75 
76 //プロジェクト全体で保持しているセルマップ
77 //現在はprojectのセルマップの列挙とssaeの列挙は同一
79 {
80 private:
81  //同名セルマップは上書き
82  std::map<SsString,SsCelMapLinker*> CellMapDic;
83  std::vector<SsCelMapLinker*> CellMapList;//添え字参照用
84 
85  typedef std::map<SsString,SsCelMapLinker*>::iterator CellMapDicItr;
86  SsString CellMapPath;
87 
88 private:
89  void add(SsCellMap* cellmap);
90 
91 public:
92  SsCellMapList(){}
93  virtual ~SsCellMapList()
94  {
95  for ( CellMapDicItr itr = CellMapDic.begin() ; itr != CellMapDic.end() ; itr ++)
96  {
97  delete itr->second;
98  }
99  CellMapDic.clear();
100  }
101 
102  void clear();
103  size_t size(){ return CellMapList.size(); }
104 
105  void setCellMapPath( const SsString& filepath );
106 
107  //projectとanimepackからアニメーションの再生に必要なセルマップのリストを作成する
108  //アニメパックのセルリストに登載されている順にセルマップを読み込みインデックス化する
109  //SsProjectを介してセルを検索しているのはセルがそこにアレイで確保されているから
110  //もし既に読み込み済みだったりする場合は、アニメパックのセルID順にセルマップを登録すればいい
111  void set(SsProject* proj , SsAnimePack* animepack );
112 
113  SsCelMapLinker* getCellMapLink( const SsString& name );
114  SsCelMapLinker* getCellMapLink( int index )
115  {
116  return CellMapList[index];
117  }
118 
119 
120 };
121 
122 void calcUvs( SsCellValue* cellv );
123 
124 #endif