SDXFrameWork  0.09
SDXFrameWork
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
Sprite.h
1 #pragma once//©SDXFramework http://sourceforge.jp/projects/dxframework/
2 #include <Framework/ISprite.h>
3 
4 namespace SDX
5 {
8 class SpImage : public ISprite
9 {
10 private:
11  const Image *image;
12 
13 public:
14  SpImage(const Image *描画Image ):
15  image(描画Image)
16  {}
17 
18  void Draw(const Point &座標, bool Cameraフラグ) override
19  {
20  if ( Cameraフラグ )
21  {
22  image->DrawRotateAxis(Camera::Now()->Trans({ 座標.x + gapX, 座標.y+gapY}),
23  { axisX + image->GetWidth() / 2, axisY + image->GetHeight() / 2 },
24  zoomX * Camera::Now()->GetZoom() ,
25  zoomY * Camera::Now()->GetZoom() ,
26  angle , isTurn);
27  }else{
28  image->DrawRotateAxis( { 座標.x + gapX, 座標.y + gapY},
29  { axisX + image->GetHeight() / 2,
30  axisY + image->GetHeight() / 2 },
31  zoomX ,
32  zoomY ,
33  angle , isTurn);
34  }
35  }
36 };
37 
40 class SpImageS : public ISprite
41 {
42 private:
43  const ImagePack *imageS;
44  int index = 0;
45 public:
46  SpImageS(const ImagePack *描画ImagePack ):
47  imageS(描画ImagePack)
48  {}
49 
50  void SetIndex(int コマ番号)
51  {
52  index = コマ番号;
53  }
54 
55  int GetIndex()
56  {
57  return index;
58  }
59 
60  void Draw(const Point &座標, bool Cameraフラグ) override
61  {
62  const auto image = imageS->operator[](index);
63 
64  if ( Cameraフラグ )
65  {
66  image->DrawRotateAxis
67  (
68  Camera::Now()->Trans({ 座標.x + gapX ,座標.y + gapY}),
69  { axisX + image->GetWidth() / 2,axisY + image->GetHeight() / 2 },
70  zoomX * Camera::Now()->GetZoom() ,
71  zoomY * Camera::Now()->GetZoom() ,
72  angle ,
73  isTurn
74  );
75  }else{
76  image->DrawRotateAxis
77  (
78  { 座標.x + gapX, 座標.y + gapY },
79  { axisX + image->GetHeight() / 2, axisY + image->GetHeight() / 2 },
80  zoomX ,
81  zoomY ,
82  angle ,
83  isTurn
84  );
85  }
86  }
87 };
88 
91 class SpAnime : public ISprite
92 {
93 private:
94  const Anime *anime;
95  Anime::Player counter;
96  double aniSpeed;
97 
98 public:
99 
100  SpAnime(const Anime *描画Anime , double 再生速度 = 1) :
101  anime( 描画Anime ),
102  counter( 描画Anime ),
103  aniSpeed( 再生速度 )
104  {}
105 
106  void AnimeUpdate() override
107  {
108  counter.Update( aniSpeed );
109  }
110 
111  void Draw(const Point &座標, bool Cameraフラグ) override
112  {
113  if( Cameraフラグ )
114  {
115  counter.GetFrame()->DrawRotateAxis
116  (
117  Camera::Now()->Trans({ 座標.x + gapX, 座標.y + gapY }),
118  { axisX + anime->GetWidth() / 2, axisY + anime->GetHeight() / 2 },
119  zoomX * Camera::Now()->GetZoom() ,
120  zoomY * Camera::Now()->GetZoom(),
121  angle ,
122  isTurn
123  );
124  }
125  else
126  {
127  counter.GetFrame()->DrawRotateAxis
128  (
129  { 座標.x + gapX, 座標.y + gapY },
130  { axisX + anime->GetWidth() / 2, axisY + anime->GetHeight() / 2 },
131  zoomX ,
132  zoomY ,
133  angle ,
134  isTurn
135  );
136  }
137  }
138 };
139 
142 class SpFont : public ISprite
143 {
144 private:
145  const IFont *font;
146  std::string& refStr;
147  std::string str;
148  bool isReference;
149  Color rgb;
150 
151 public:
152  SpFont(const IFont *フォント , Color 描画色 , double 縦倍率 , double 横倍率,const char* 描画する文字列 ):
153  font(フォント),
154  rgb(描画色),
155  str( 描画する文字列 ),
156  refStr( str ),
157  isReference(false)
158  {
159  this->SetZoom(縦倍率,横倍率);
160  }
161 
162  SpFont(const IFont *フォント , Color 描画色 , double 縦倍率 , double 横倍率, std::string& 参照する文字列 ):
163  font(フォント),
164  rgb(描画色),
165  refStr( 参照する文字列 ),
166  isReference(true)
167  {
168  this->SetZoom(縦倍率,横倍率);
169  }
170 
171  void Draw(const Point &座標, bool Cameraフラグ) override
172  {
173  if( Cameraフラグ )
174  {
175  font->DrawExtend
176  (
177  Camera::Now()->Trans({ 座標.x + gapX, 座標.y + gapY }),
178  zoomX * Camera::Now()->GetZoom() ,
179  zoomY * Camera::Now()->GetZoom() ,
180  rgb ,
181  refStr.c_str()
182  );
183  }
184  else
185  {
186  font->DrawExtend
187  (
188  { 座標.x + gapX, 座標.y + gapY },
189  zoomX,
190  zoomY,
191  rgb,
192  refStr.c_str()
193  );
194  }
195  }
196 
197  void SetText( const char* 表示する文字 )
198  {
199  refStr = 表示する文字;
200  }
201 };
202 
205 class SpFrame : public ISprite
206 {
207 private:
208  const IFrame *bmpFrame;
209  double width;
210  double height;
211 
212 public:
213  SpFrame(const IFrame *描画する枠 , double 幅 , double 高さ ):
214  bmpFrame( 描画する枠),
215  width( 幅 ),
216  height( 高さ )
217  {}
218 
219  void Draw(const Point &座標, bool Cameraフラグ) override
220  {
221  if( Cameraフラグ )
222  {
223  const Point 左上 = Camera::Now()->Trans({ 座標.x + gapX, 座標.y + gapY });
224 
225  bmpFrame->Draw
226  (
227  {
228  左上.x,
229  左上.y,
230  width * zoomX * Camera::Now()->GetZoom(),
231  height * zoomY * Camera::Now()->GetZoom()
232  }
233  );
234  }
235  else
236  {
237  bmpFrame->Draw
238  (
239  {
240  座標.x + gapX,
241  座標.y + gapY,
242  width * zoomX,
243  height * zoomY
244  }
245  );
246  }
247  }
248 };
249 
252 class SpMap : public ISprite
253 {
254 private:
255  ImagePack &chip;
256  int width;
257  int height;
258  int rotate;
259  std::vector< std::vector<int> > data;
260 public:
261 
262  SpMap( ImagePack& マップチップ , const char* ファイル名 , int 幅 , int 高さ , int 角度):
263  width(幅),
264  height(高さ),
265  rotate(角度),
266  chip(マップチップ)
267  {
268  File csvFile( ファイル名 , FileMode::Read );
269 
270  data.resize( 幅 );
271 
272  for(int a=0 ; a<幅 ;++a)
273  {
274  data[a].resize( 高さ );
275  }
276 
277  auto lineS = csvFile.GetCsvS();
278 
279  for(int a = 0 ; a < 高さ ; ++a )
280  {
281  for( int b = 0 ; b < 幅 ; ++b)
282  {
283  data[b][a] = atoi( lineS[a][b].c_str() );
284  }
285  }
286  }
287 
288  void Draw(const Point &座標, bool カメラ有りフラグ) override
289  {
290  const int chipW = chip.GetWidth();
291  const int chipH = chip.GetHeight();
292 
293  if( カメラ有りフラグ )
294  {
295  const int baseY = int(Camera::Now()->TransY( 座標.y ));
296  const int baseX = int(Camera::Now()->TransX( 座標.x ));
297 
298  double posXA;
299  double posYA;
300  double posXB;
301  double posYB;
302 
303  for(int a=0 ; a<width ; ++a )
304  {
305  posXA = baseX + chipW * a * Camera::Now()->GetZoom();
306  posXB = baseX + chipW * (a+1) * Camera::Now()->GetZoom();
307 
308  for(int b=0 ; b<height ; ++b )
309  {
310  posYA = baseY + chipH * b * Camera::Now()->GetZoom();
311  posYB = baseY + chipH * (b+1) * Camera::Now()->GetZoom();
312  const int no = data[a][b];
313  if( no == 0 ) continue;
314  chip[no]->DrawExtend({ posXA, posYA }, { posXB, posYB });
315  }
316  }
317  }else{
318  for(int a=0 ; a<width ; ++a )
319  {
320  for(int b=0 ; b<height ; ++b )
321  {
322  const int no = data[a][b];
323  if( no == 0 ) continue;
324  chip[no]->Draw({ 座標.x + a*chipW, 座標.y + b*chipH });
325  }
326  }
327  }
328  }
329 
330 };
331 
332 }
Font,BmpFont等のインターフェース.
Definition: IFont.h:9
virtual bool DrawExtend(const Point &座標, double X軸拡大率, double Y軸拡大率, Color 色, VariadicStream 描画する文字列) const =0
拡大率を指定して文字を描画.
int GetWidth() const
最大幅を取得.
Definition: ImagePack.h:107
点を表す図形クラス.
Definition: Shape.h:129
IFrameスプライト.
Definition: Sprite.h:205
入出力可能なテキストかバイナリファイルを表すクラス.
Definition: File.h:28
void Draw(const Point &座標, bool Cameraフラグ) override
ISpriteを描画する.
Definition: Sprite.h:171
読込のみ
static Camera * Now()
アクティブなカメラを取得.
Definition: Camera.h:54
マップチップスプライト.
Definition: Sprite.h:252
std::vector< std::vector< std::string > > GetCsvS()
カンマ区切りのCSVファイルを一括読込.
Definition: File.h:291
void Draw(const Point &座標, bool Cameraフラグ) override
ISpriteを描画する.
Definition: Sprite.h:111
Animeスプライト.
Definition: Sprite.h:91
2Dモデルに貼り付けるスプライトを表す抽象クラス.
Definition: ISprite.h:14
画像データを表すクラス.
Definition: Image.h:38
色を表すクラス.
Definition: Color.h:7
double GetZoom()
拡大率を取得.
Definition: Camera.h:126
int GetHeight() const
高さを取得.
Definition: Image.h:248
int GetWidth() const
幅を取得.
Definition: Image.h:242
ImagePackスプライト.
Definition: Sprite.h:40
void Draw(const Point &座標, bool Cameraフラグ) override
ISpriteを描画する.
Definition: Sprite.h:18
void AnimeUpdate() override
説明.
Definition: Sprite.h:106
void SetZoom(double X拡大率, double Y拡大率)
表示倍率を設定.
Definition: ISprite.h:56
int GetHeight() const
最大高さを取得.
Definition: ImagePack.h:113
Imageをまとめてコマ送りアニメとして表すクラス.
Definition: Anime.h:28
void Draw(const Point &座標, bool カメラ有りフラグ) override
ISpriteを描画する.
Definition: Sprite.h:288
bool Update(double 経過フレーム=1)
カウンタの更新.
Definition: Anime.h:49
void Draw(const Point &座標, bool Cameraフラグ) override
ISpriteを描画する.
Definition: Sprite.h:60
Animeの再生情報を管理するクラス.
Definition: Anime.h:35
複数のImageをまとめるクラス.
Definition: ImagePack.h:9
Imageスプライト.
Definition: Sprite.h:8
Fontスプライト.
Definition: Sprite.h:142
Image * GetFrame()
現在のコマ番号を取得.
Definition: Anime.h:85
bool DrawRotateAxis(const Point &座標, const Point &回転軸座標, double 拡大率, double 角度, bool 反転フラグ=false) const
回転軸、角度、拡大率を指定して描画.
Definition: Image.h:197
描画用枠のインターフェース.
Definition: BmpFrame.h:12
void Draw(const Point &座標, bool Cameraフラグ) override
ISpriteを描画する.
Definition: Sprite.h:219