SDXFrameWork 0.09 SDXFrameWork

- Main Page
- Related Pages
- Classes

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 }
SDX::IFont
Font,BmpFont等のインターフェース.
Definition: IFont.h:9
SDX::IFont::DrawExtend
virtual bool DrawExtend(const Point &座標, double X軸拡大率, double Y軸拡大率, Color 色, VariadicStream 描画する文字列) const =0
拡大率を指定して文字を描画.
SDX::ImagePack::GetWidth
int GetWidth() const
最大幅を取得.
Definition: ImagePack.h:107
SDX::Point
点を表す図形クラス.
Definition: Shape.h:129
SDX::SpFrame
IFrameスプライト.
Definition: Sprite.h:205
SDX::File
入出力可能なテキストかバイナリファイルを表すクラス.
Definition: File.h:28
SDX::SpFont::Draw
void Draw(const Point &座標, bool Cameraフラグ) override
ISpriteを描画する.
Definition: Sprite.h:171
SDX::FileMode::Read
読込のみ
SDX::Camera::Now
static Camera * Now()
アクティブなカメラを取得.
Definition: Camera.h:54
SDX::SpMap
マップチップスプライト.
Definition: Sprite.h:252
SDX::File::GetCsvS
std::vector< std::vector< std::string > > GetCsvS()
カンマ区切りのCSVファイルを一括読込.
Definition: File.h:291
SDX::SpAnime::Draw
void Draw(const Point &座標, bool Cameraフラグ) override
ISpriteを描画する.
Definition: Sprite.h:111
SDX::SpAnime
Animeスプライト.
Definition: Sprite.h:91
SDX::ISprite
2Dモデルに貼り付けるスプライトを表す抽象クラス.
Definition: ISprite.h:14
SDX::Image
画像データを表すクラス.
Definition: Image.h:38
SDX::Color
色を表すクラス.
Definition: Color.h:7
SDX::Camera::GetZoom
double GetZoom()
拡大率を取得.
Definition: Camera.h:126
SDX::Image::GetHeight
int GetHeight() const
高さを取得.
Definition: Image.h:248
SDX::Image::GetWidth
int GetWidth() const
幅を取得.
Definition: Image.h:242
SDX::SpImageS
ImagePackスプライト.
Definition: Sprite.h:40
SDX::SpImage::Draw
void Draw(const Point &座標, bool Cameraフラグ) override
ISpriteを描画する.
Definition: Sprite.h:18
SDX::SpAnime::AnimeUpdate
void AnimeUpdate() override
説明.
Definition: Sprite.h:106
SDX::ISprite::SetZoom
void SetZoom(double X拡大率, double Y拡大率)
表示倍率を設定.
Definition: ISprite.h:56
SDX::ImagePack::GetHeight
int GetHeight() const
最大高さを取得.
Definition: ImagePack.h:113
SDX::Anime
Imageをまとめてコマ送りアニメとして表すクラス.
Definition: Anime.h:28
SDX::SpMap::Draw
void Draw(const Point &座標, bool カメラ有りフラグ) override
ISpriteを描画する.
Definition: Sprite.h:288
SDX::Anime::Player::Update
bool Update(double 経過フレーム=1)
カウンタの更新.
Definition: Anime.h:49
SDX::SpImageS::Draw
void Draw(const Point &座標, bool Cameraフラグ) override
ISpriteを描画する.
Definition: Sprite.h:60
SDX::Anime::Player
Animeの再生情報を管理するクラス.
Definition: Anime.h:35
SDX::ImagePack
複数のImageをまとめるクラス.
Definition: ImagePack.h:9
SDX::SpImage
Imageスプライト.
Definition: Sprite.h:8
SDX::SpFont
Fontスプライト.
Definition: Sprite.h:142
SDX::Anime::Player::GetFrame
Image * GetFrame()
現在のコマ番号を取得.
Definition: Anime.h:85
SDX::Image::DrawRotateAxis
bool DrawRotateAxis(const Point &座標, const Point &回転軸座標, double 拡大率, double 角度, bool 反転フラグ=false) const
回転軸、角度、拡大率を指定して描画.
Definition: Image.h:197
SDX::IFrame
描画用枠のインターフェース.
Definition: BmpFrame.h:12
SDX::SpFrame::Draw
void Draw(const Point &座標, bool Cameraフラグ) override
ISpriteを描画する.
Definition: Sprite.h:219