SDXFrameWork  0.07
SDXFrameWork
 全て クラス ネームスペース 関数 変数 列挙型 列挙型の値 ページ
Model.h
1 #pragma once//☀SDXFramework
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 {
12 class Model
13 {
14 private:
15  double zoomX = 1;
16  double zoomY = 1;
17  double angle = 0;
18  double shadowSize = 1;
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  shape(shape)
28  {
29  if( sprite ) sprites.emplace_back(sprite);
30  }
31 
32 
35  {
36  return isRemove;
37  }
38 
40  virtual void Update()
41  {
42 
43  }
44 
46  void SetShadowSize(double 影の表示倍率)
47  {
48  shadowSize = 影の表示倍率;
49  }
50 
52  void SetIsCamera(bool カメラ利用フラグ)
53  {
54  isCamera = カメラ利用フラグ;
55  }
56 
57  void Add(Sprite* 追加するスプライト)
58  {
59  if (追加するスプライト)sprites.emplace_back(追加するスプライト);
60  }
61 
63  virtual void Draw() const
64  {
65  for( auto it : sprites )
66  {
67  if( !it->isVisible ) continue;
68  if( !it->isAllway && it->isActive ) continue;
69 
70  if( it->GetColor() == Color::White )
71  {
72  it->Draw( GetX() , GetY() , isCamera && Camera::Now() );
73  }
74  else
75  {
76  Screen::SetBright(it->GetColor());
77  Screen::SetBlendMode( BlendMode::Alpha , it->GetColor().GetAlpha() );
78  it->Draw( GetX() , GetY() , isCamera && Camera::Now() );
79  Screen::SetBlendMode(BlendMode::NoBlend, 0);
80  Screen::SetBright(Color::White);
81  }
82  }
83 
84  //当たり判定を表示するならコメントアウト解除
85  //shape.get()->Draw(Color::Red,128,Camera::Now() );
86  }
87 
89  void DrawShadow( double X座標ずれ , double Y座標ずれ )
90  {
91  if( shadowSize <= 0 ) return;
92 
93  X座標ずれ *= shadowSize;
94  Y座標ずれ *= shadowSize;
95 
96  for( auto it : sprites )
97  {
98  if( !it->isVisible ) continue;
99  if( !it->isAllway && it->isActive ) continue;
100 
101  if( it->GetColor().GetAlpha() <= 255 )
102  {
103  double zoomX = it->zoomX;
104  double zoomY = it->zoomY;
105  it->zoomX *= shadowSize;
106  it->zoomY *= shadowSize;
107  it->Draw( GetX() + X座標ずれ , GetY() + Y座標ずれ , isCamera && Camera::Now() );
108  it->zoomX = zoomX;
109  it->zoomY = zoomY;
110  }
111  }
112 
113  }
114 
116  void AnimeUpdate()
117  {
118  for(auto it: sprites )
119  {
120  it->AnimeUpdate();
121  }
122  }
123 
125  void Move(double X移動量 , double Y移動量)
126  {
127  shape->Move(X移動量, Y移動量);
128  }
129 
131  void MovePolar(double 距離 , double 角度)
132  {
133  shape->Move(距離 * cos(角度), 距離 * sin(角度));
134  }
135 
137  void SetPos(double X座標 , double Y座標)
138  {
139  shape->SetPos(X座標, Y座標);
140  }
141 
143  void SetZoom(double 拡大率 )
144  {
145  MultiZoom(拡大率 / zoomX, 拡大率 / zoomY);
146  }
147 
149  void SetZoom(double X拡大率, double Y拡大率)
150  {
151  MultiZoom(X拡大率 / zoomX, Y拡大率 / zoomY);
152  }
153 
155  void MultiZoom(double 倍率)
156  {
157  MultiZoom(倍率,倍率);
158  }
159 
161  void MultiZoom(double X倍率 , double Y倍率)
162  {
163  shape->MultiZoom(X倍率 , Y倍率);
164 
165  for (auto it : sprites)
166  {
167  it->MultiZoom(X倍率, Y倍率);
168  }
169 
170  zoomX *= X倍率;
171  zoomY *= Y倍率;
172  }
173 
175  void Rotate( double 回転角度 )
176  {
177  this->angle += 回転角度;
178 
179  for( auto it : sprites )
180  {
181  it->Rotate(回転角度);
182  }
183  }
184 
186  double GetAngle()
187  {
188  return angle;
189  }
190 
192  void SetAngle( double 角度 )
193  {
194  for( auto it : sprites )
195  {
196  it->Rotate( 角度 - this->angle);
197  }
198  this->angle = 角度;
199  }
200 
202  void SetColor( Color 描画色)
203  {
204  for (auto it : sprites)
205  {
206  it->SetColor(描画色);
207  }
208  }
209 
211  double GetZoomX()
212  {
213  return zoomX;
214  }
215 
217  double GetZoomY()
218  {
219  return zoomY;
220  }
221 
223  double GetX() const
224  {
225  return shape->GetX();
226  }
227 
229  double GetY() const
230  {
231  return shape->GetY();
232  }
233 
235  bool Hit( Model *判定を行うModel)
236  {
237  return shape->Hit(判定を行うModel->shape.get());
238  }
239 
241  bool Hit( Shape *判定を行うShape)
242  {
243  return shape->Hit(判定を行うShape);
244  }
245 
247  bool Hit( Camera *座標変換に使うCamera = nullptr)
248  {
249  Point pt;
250 
251  if (座標変換に使うCamera)
252  {
253  pt.x = 座標変換に使うCamera->TransX(Input::mouse.x + 座標変換に使うCamera->GetCenterX());
254  pt.y = 座標変換に使うCamera->TransY(Input::mouse.y + 座標変換に使うCamera->GetCenterY());
255  }else{
256  pt.x = Input::mouse.x;
257  pt.y = Input::mouse.y;
258  }
259 
260  return shape->Hit(&pt);
261  }
262 
264  template <class T>
265  double GetDirect(T* 比較対象)
266  {
267  return atan2( 比較対象->GetY() - GetY(), 比較対象->GetX() - GetX());
268  }
269 
271  template <class T>
272  double GetDistance(T* 比較対象)
273  {
274  const double xd = this->GetX() - 比較対象->GetX();
275  const double yd = this->GetY() - 比較対象->GetY();
276 
277  return sqrt( xd * xd + yd * yd );
278  }
279 };
280 }
static bool SetBlendMode(BlendMode ブレンドモード, int 設定値)
ブレンド描画のモードを設定.
Definition: Screen.h:136
ShapeとSpriteをまとめて、2Dモデルを表すクラス.
Definition: Model.h:12
void MultiZoom(double X倍率, double Y倍率)
縦横別で拡大率を掛ける.
Definition: Model.h:161
virtual void Move(double X移動量, double Y移動量)=0
相対座標で移動.
void SetAngle(double 角度)
角度を設定する.
Definition: Model.h:192
void AnimeUpdate()
アニメーションを更新する.
Definition: Model.h:116
static bool SetBright(Color 輝度)
描画輝度を設定.
Definition: Screen.h:153
void MovePolar(double 距離, double 角度)
極座標で移動.
Definition: Model.h:131
virtual void Update()
更新処理を行う.
Definition: Model.h:40
点を表す図形クラス.
Definition: Shape.h:284
bool Hit(Camera *座標変換に使うCamera=nullptr)
マウスカーソルとの衝突判定.
Definition: Model.h:247
bool Hit(Shape *判定を行うShape)
Shapeとの衝突判定.
Definition: Model.h:241
double GetZoomX()
横方向の拡大率を取得.
Definition: Model.h:211
static Camera * Now()
アクティブなカメラを取得.
Definition: Camera.h:54
void SetColor(Color 描画色)
色をまとめて変更する、透明度も含む.
Definition: Model.h:202
bool Hit(Model *判定を行うModel)
Modelとの衝突判定.
Definition: Model.h:235
void SetZoom(double 拡大率)
拡大率を設定する.
Definition: Model.h:143
void MultiZoom(double 倍率)
拡大率を掛け算する.
Definition: Shape.h:111
void SetZoom(double X拡大率, double Y拡大率)
縦横別で拡大率を設定する.
Definition: Model.h:149
色を表すクラス.
Definition: Color.h:7
double GetAngle()
角度を取得する.
Definition: Model.h:186
double GetY() const
Y座標を取得.
Definition: Model.h:229
void SetIsCamera(bool カメラ利用フラグ)
描画にカメラを使うか設定.
Definition: Model.h:52
virtual bool Hit(const Shape *shape) const =0
衝突判定.
void Move(double X移動量, double Y移動量)
相対座標で移動.
Definition: Model.h:125
double GetDistance(T *比較対象)
対象との相対座標を取得.
Definition: Model.h:272
double GetZoomY()
縦方向の拡大率を取得.
Definition: Model.h:217
void Rotate(double 回転角度)
回転させる.
Definition: Model.h:175
void MultiZoom(double 倍率)
拡大率を掛ける.
Definition: Model.h:155
double GetX() const
X座標を取得.
Definition: Model.h:223
bool GetRemoveFlag()
消滅フラグの取得.
Definition: Model.h:34
2D用に座標変換を行うカメラを表すクラス.
Definition: Camera.h:16
void DrawShadow(double X座標ずれ, double Y座標ずれ)
影を描画する.
Definition: Model.h:89
2Dモデルに貼り付けるスプライトを表す抽象クラス.
Definition: Sprite.h:15
double GetDirect(T *比較対象)
対象との角度を取得.
Definition: Model.h:265
virtual double GetX() const =0
X座標を取得.
virtual void SetPos(double X座標, double Y座標)=0
指定座標に移動.
位置情報を持つ図形の抽象クラス.
Definition: Shape.h:16
virtual double GetY() const =0
Y座標を取得.
void SetShadowSize(double 影の表示倍率)
影の大きさを設定.
Definition: Model.h:46
void SetPos(double X座標, double Y座標)
指定座標に移動.
Definition: Model.h:137
virtual void Draw() const
描画する.
Definition: Model.h:63