SDXFrameWork  0.04
SDXFrameWork
 全て クラス ネームスペース 関数 変数 ページ
Model.h
1 #pragma once
2 #include<Framework/Sprite.h>
3 #include<Framework/Shape.h>
4 #include<Framework/Camera.h>
5 #include<Framework/SpriteDerived.h>
6 #include<memory>
7 
8 namespace SDX
9 {
11 class Model
13 {
14 private:
15  double zoomX = 1;
16  double zoomY = 1;
17  double angle = 0;
18  double shadowSize;
19  bool isCamera = true;
20 protected:
21  bool isRemove = false;
22 public:
23  std::vector<std::shared_ptr<Sprite>> sprites;
24  std::unique_ptr<Shape> shape;
25 
26  Model( Shape *shape , Sprite *sprite ):
27  shadowSize(1),
28  shape(shape)
29  {
30  if( sprite )sprites.emplace_back(sprite);
31  }
32 
33 
36  {
37  return isRemove;
38  }
39 
41  virtual void Update()
42  {
43 
44  }
45 
47  void SetIsCamera(bool カメラ利用フラグ)
48  {
49  isCamera = カメラ利用フラグ;
50  }
51 
52  void Add(Sprite* 追加スプライト)
53  {
54  if (追加スプライト)sprites.emplace_back(追加スプライト);
55  }
56 
58  virtual void Draw() const
59  {
60  for( auto it : sprites )
61  {
62  if( !it->isVisible ) continue;
63  if( !it->isAllway && it->isActive ) continue;
64 
65  if( it->GetColor() == Color::White )
66  {
67  it->Draw( GetX() , GetY() , isCamera && Camera::Now() );
68  }
69  else
70  {
71  Screen::SetBright(it->GetColor());
72  Screen::SetBlendMode( BlendMode::Alpha , it->GetColor().GetAlpha() );
73  it->Draw( GetX() , GetY() , isCamera && Camera::Now() );
74  Screen::SetBlendMode(BlendMode::NoBlend, 0);
75  Screen::SetBright(Color::White);
76  }
77  }
78  }
79 
81  void DrawShadow( double X座標ずれ , double Y座標ずれ )
82  {
83  if( shadowSize <= 0 ) return;
84 
85  X座標ずれ *= shadowSize;
86  Y座標ずれ *= shadowSize;
87 
88  for( auto it : sprites )
89  {
90  if( !it->isVisible ) continue;
91  if( !it->isAllway && it->isActive ) continue;
92 
93  if( it->GetColor().GetAlpha() <= 255 )
94  {
95  double zoomX = it->zoomX;
96  double zoomY = it->zoomY;
97  it->zoomX *= shadowSize;
98  it->zoomY *= shadowSize;
99  it->Draw( GetX() + X座標ずれ , GetY() + Y座標ずれ , isCamera && Camera::Now() );
100  it->zoomX = zoomX;
101  it->zoomY = zoomY;
102  }
103  }
104 
105  }
106 
108  void AnimeUpdate()
109  {
110  for(auto it: sprites )
111  {
112  it->AnimeUpdate();
113  }
114  }
115 
117  void Move(double X移動量 , double Y移動量)
118  {
119  shape->Move(X移動量, Y移動量);
120  }
121 
123  void MovePolar(double 距離 , double 方向)
124  {
125  shape->Move(距離 * cos(方向), 距離 * sin(方向));
126  }
127 
129  void SetPos(double X座標 , double Y座標)
130  {
131  shape->SetPos(X座標, Y座標);
132  }
133 
135  void SetZoom(double 拡大率 )
136  {
137  MultiZoom(拡大率 / zoomX, 拡大率 / zoomY);
138  }
139 
141  void SetZoom(double X拡大率, double Y拡大率)
142  {
143  MultiZoom(X拡大率 / zoomX, Y拡大率 / zoomY);
144  }
145 
147  void MultiZoom(double 倍率)
148  {
149  MultiZoom(倍率,倍率);
150  }
151 
153  void MultiZoom(double X倍率 , double Y倍率)
154  {
155  shape->MultiZoom(X倍率 , Y倍率);
156 
157  for (auto it : sprites)
158  {
159  it->MultiZoom(X倍率, Y倍率);
160  }
161 
162  zoomX *= X倍率;
163  zoomY *= Y倍率;
164  }
165 
167  void Rotate( double 回転角度 )
168  {
169  this->angle += 回転角度;
170 
171  for( auto it : sprites )
172  {
173  it->Rotate(回転角度);
174  }
175  }
176 
178  double GetAngle()
179  {
180  return angle;
181  }
182 
184  void SetAngle( double 角度 )
185  {
186  for( auto it : sprites )
187  {
188  it->Rotate( 角度 - this->angle);
189  }
190  this->angle = 角度;
191  }
192 
194  void SetColor( Color 描画色)
195  {
196  for (auto it : sprites)
197  {
198  it->SetColor(描画色);
199  }
200  }
201 
203  double GetZoomX()
204  {
205  return zoomX;
206  }
207 
209  double GetZoomY()
210  {
211  return zoomY;
212  }
213 
215  double GetX() const
216  {
217  return shape->GetX();
218  }
219 
221  double GetY() const
222  {
223  return shape->GetY();
224  }
225 
227  bool Hit( Model *model)
228  {
229  return shape->Hit(model->shape.get());
230  }
231 
233  bool Hit( Shape *shape)
234  {
235  return this->shape->Hit(shape);
236  }
237 
239  bool Hit( Camera *camera = nullptr)
240  {
241  Point pt;
242 
243  if( camera )
244  {
245  pt.x = camera->TransX( Input::mouse.x + camera->GetCenterX() );
246  pt.y = camera->TransY( Input::mouse.y + camera->GetCenterY() );
247  }else{
248  pt.x = Input::mouse.x;
249  pt.y = Input::mouse.y;
250  }
251 
252  return shape->Hit(&pt);
253  }
254 
256  template <class T>
257  double GetDirect(T* 比較対象)
258  {
259  return atan2( 比較対象->GetY() - this->GetY(), 比較対象->GetX() - this->GetX());
260  }
261 
263  template <class T>
264  double GetDistance(T* 比較対象)
265  {
266  const double xd = this->GetX() - 比較対象->GetX();
267  const double yd = this->GetY() - 比較対象->GetY();
268 
269  return sqrt( xd * xd + yd * yd );
270  }
271 };
272 }
static bool SetBlendMode(BlendMode ブレンドモード, int 設定値)
ブレンド描画のモードを設定.
Definition: Screen.h:189
ShapeとSpriteをまとめて、2Dモデルを表すクラス.
Definition: Model.h:12
void MultiZoom(double X倍率, double Y倍率)
縦横別で拡大率を掛ける.
Definition: Model.h:153
void SetAngle(double 角度)
角度を設定する.
Definition: Model.h:184
void AnimeUpdate()
アニメーションを更新する.
Definition: Model.h:108
void MovePolar(double 距離, double 方向)
極座標で移動.
Definition: Model.h:123
static bool SetBright(Color 輝度)
描画輝度を設定.
Definition: Screen.h:211
virtual void Update()
更新処理を行う.
Definition: Model.h:41
点を表す図形クラス.
Definition: Shape.h:284
double GetZoomX()
横方向の拡大率を取得.
Definition: Model.h:203
static Camera * Now()
アクティブなカメラを取得.
Definition: Camera.h:54
void SetColor(Color 描画色)
色をまとめて変更する、透明度も含む.
Definition: Model.h:194
bool Hit(Camera *camera=nullptr)
マウスカーソルとの衝突判定.
Definition: Model.h:239
void SetZoom(double 拡大率)
拡大率を設定する.
Definition: Model.h:135
void SetZoom(double X拡大率, double Y拡大率)
縦横別で拡大率を設定する.
Definition: Model.h:141
色を表すクラス.
Definition: Color.h:7
double GetAngle()
角度を取得する.
Definition: Model.h:178
double GetY() const
Y座標を取得.
Definition: Model.h:221
void SetIsCamera(bool カメラ利用フラグ)
描画にカメラを使うか設定.
Definition: Model.h:47
virtual bool Hit(const Shape *shape) const =0
衝突判定.
void Move(double X移動量, double Y移動量)
相対座標で移動.
Definition: Model.h:117
double GetDistance(T *比較対象)
対象との相対座標を取得.
Definition: Model.h:264
double GetZoomY()
縦方向の拡大率を取得.
Definition: Model.h:209
bool Hit(Model *model)
Modelとの衝突判定.
Definition: Model.h:227
void Rotate(double 回転角度)
回転させる.
Definition: Model.h:167
bool Hit(Shape *shape)
Shapeとの衝突判定.
Definition: Model.h:233
void MultiZoom(double 倍率)
拡大率を掛ける.
Definition: Model.h:147
double GetX() const
X座標を取得.
Definition: Model.h:215
bool GetRemoveFlag()
消滅フラグの取得.
Definition: Model.h:35
2D用に座標変換を行うカメラを表すクラス.
Definition: Camera.h:16
void DrawShadow(double X座標ずれ, double Y座標ずれ)
影を描画する.
Definition: Model.h:81
2Dモデルに貼り付けるスプライトを表す抽象クラス.
Definition: Sprite.h:15
double GetDirect(T *比較対象)
対象との角度を取得.
Definition: Model.h:257
位置情報を持つ図形の抽象クラス.
Definition: Shape.h:16
void SetPos(double X座標, double Y座標)
指定座標に移動.
Definition: Model.h:129
virtual void Draw() const
描画する.
Definition: Model.h:58