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