SDXFrameWork  0.09
SDXFrameWork
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
Model.h
1 #pragma once//©SDXFramework http://sourceforge.jp/projects/dxframework/
2 #include<Framework/Sprite.h>
3 #include<Framework/Shape.h>
4 #include<Framework/Camera.h>
5 #include<memory>
6 
7 namespace SDX
8 {
9 
12 class IModel
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  IShape &iShape;
24  ISprite &iSprite;
25 
26  IModel(IShape &図形,ISprite &描画方法):
27  iShape(図形),
28  iSprite(描画方法)
29  {};
30  virtual ~IModel(){};
31 
32 
35  {
36  return isRemove;
37  }
38 
40  virtual void Update(){}
41 
43  void SetShadowSize(double 影の表示倍率)
44  {
45  shadowSize = 影の表示倍率;
46  }
47 
49  void SetIsCamera(bool カメラ利用フラグ)
50  {
51  isCamera = カメラ利用フラグ;
52  }
53 
55  virtual void Draw()
56  {
57  if( iSprite.GetColor() == Color::White )
58  {
59  iSprite.Draw({ GetX(), GetY()}, isCamera && Camera::Now());
60  }
61  else
62  {
63  Screen::SetBright(iSprite.GetColor());
64  Screen::SetBlendMode( BlendMode::Alpha , iSprite.GetColor().GetAlpha() );
65  iSprite.Draw({ GetX(), GetY() }, isCamera && Camera::Now());
66  Screen::SetBlendMode(BlendMode::NoBlend, 0);
67  Screen::SetBright(Color::White);
68  }
69 
70  //当たり判定を表示するならコメントアウト解除
71  //shape.get()->Draw(Color::Red,128,Camera::Now() );
72  }
73 
75  void DrawShadow( double X座標ずれ , double Y座標ずれ )
76  {
77  if( shadowSize <= 0 ) return;
78 
79  X座標ずれ *= shadowSize;
80  Y座標ずれ *= shadowSize;
81 
82  double zoomX = iSprite.zoomX;
83  double zoomY = iSprite.zoomY;
84  iSprite.zoomX *= shadowSize;
85  iSprite.zoomY *= shadowSize;
86  iSprite.Draw({ GetX() + X座標ずれ, GetY() + Y座標ずれ }, isCamera && Camera::Now());
87  iSprite.zoomX = zoomX;
88  iSprite.zoomY = zoomY;
89  }
90 
92  void AnimeUpdate()
93  {
94  iSprite.AnimeUpdate();
95  }
96 
98  void Move(double X移動量 , double Y移動量)
99  {
100  iShape.Move(X移動量, Y移動量);
101  }
102 
104  void MovePolar(double 距離 , double 角度)
105  {
106  iShape.Move(距離 * cos(角度), 距離 * sin(角度));
107  }
108 
110  void SetPos(double X座標 , double Y座標)
111  {
112  iShape.SetPos(X座標, Y座標);
113  }
114 
116  void SetZoom(double 拡大率 )
117  {
118  MultiZoom(拡大率 / zoomX, 拡大率 / zoomY);
119  }
120 
122  void SetZoom(double X拡大率, double Y拡大率)
123  {
124  MultiZoom(X拡大率 / zoomX, Y拡大率 / zoomY);
125  }
126 
128  void MultiZoom(double 倍率)
129  {
130  MultiZoom(倍率,倍率);
131  }
132 
134  void MultiZoom(double X倍率 , double Y倍率)
135  {
136  iShape.MultiZoom(X倍率 , Y倍率);
137  zoomX *= X倍率;
138  zoomY *= Y倍率;
139 
140  iSprite.MultiZoom(X倍率, Y倍率);
141  }
142 
144  void Rotate( double 回転角度 )
145  {
146  this->angle += 回転角度;
147  iSprite.Rotate(回転角度);
148  }
149 
151  double GetAngle()
152  {
153  return angle;
154  }
155 
157  void SetAngle( double 角度 )
158  {
159  iSprite.Rotate( 角度 - this->angle);
160  this->angle = 角度;
161  }
162 
164  void SetColor( Color 描画色)
165  {
166  iSprite.SetColor(描画色);
167  }
168 
170  double GetZoomX()
171  {
172  return zoomX;
173  }
174 
176  double GetZoomY()
177  {
178  return zoomY;
179  }
180 
182  double GetX() const
183  {
184  return iShape.GetX();
185  }
186 
188  double GetY() const
189  {
190  return iShape.GetY();
191  }
192 
194  bool Hit( IModel *判定を行うModel)
195  {
196  return iShape.Hit( &判定を行うModel->iShape);
197  }
198 
200  bool Hit( IShape *判定を行うShape)
201  {
202  return iShape.Hit(判定を行うShape);
203  }
204 
206  bool Hit( Camera *座標変換に使うCamera = nullptr)
207  {
208  Point pt;
209 
210  if (座標変換に使うCamera)
211  {
212  pt.x = 座標変換に使うCamera->TransX(Input::mouse.x + 座標変換に使うCamera->GetCenterX());
213  pt.y = 座標変換に使うCamera->TransY(Input::mouse.y + 座標変換に使うCamera->GetCenterY());
214  }else{
215  pt.x = Input::mouse.x;
216  pt.y = Input::mouse.y;
217  }
218 
219  return iShape.Hit(&pt);
220  }
221 
223  template <class T>
224  double GetDirect(T* 比較対象)
225  {
226  return atan2( 比較対象->GetY() - GetY(), 比較対象->GetX() - GetX());
227  }
228 
230  template <class T>
231  double GetDistance(T* 比較対象)
232  {
233  const double xd = this->GetX() - 比較対象->GetX();
234  const double yd = this->GetY() - 比較対象->GetY();
235 
236  return sqrt( xd * xd + yd * yd );
237  }
238 
239 };
240 
242 template <class TShape,class TSprite>
243 class Model : public IModel
244 {
245  public:
246  TShape shape;
247  TSprite sprite;
248 
249  Model(TShape &&図形と位置,TSprite &&描画方法):
250  IModel(shape,sprite),
251  shape(図形と位置),
252  sprite(描画方法)
253  {}
254 };
255 
256 }
static bool SetBlendMode(BlendMode ブレンドモード, int 設定値)
ブレンド描画のモードを設定.
Definition: Screen.h:132
void SetColor(Color 描画色)
色をまとめて変更する、透明度も含む.
Definition: Model.h:164
Modelの基本クラス.
Definition: Model.h:243
bool GetRemoveFlag()
消滅フラグの取得.
Definition: Model.h:34
bool Hit(IModel *判定を行うModel)
Modelとの衝突判定.
Definition: Model.h:194
virtual void Draw()
描画する.
Definition: Model.h:55
void AnimeUpdate()
アニメーションを更新する.
Definition: Model.h:92
virtual double GetY() const =0
Y座標を取得.
static bool SetBright(Color 輝度)
描画輝度を設定.
Definition: Screen.h:149
double GetY() const
Y座標を取得.
Definition: Model.h:188
void DrawShadow(double X座標ずれ, double Y座標ずれ)
影を描画する.
Definition: Model.h:75
void Rotate(double 回転する角度)
回転させる.
Definition: ISprite.h:118
bool Hit(IShape *判定を行うShape)
Shapeとの衝突判定.
Definition: Model.h:200
点を表す図形クラス.
Definition: Shape.h:129
位置情報を持つ図形の抽象クラス.
Definition: IShape .h:18
double GetZoomY()
縦方向の拡大率を取得.
Definition: Model.h:176
virtual void AnimeUpdate()
説明.
Definition: ISprite.h:136
double GetAngle()
角度を取得する.
Definition: Model.h:151
bool Hit(Camera *座標変換に使うCamera=nullptr)
マウスカーソルとの衝突判定.
Definition: Model.h:206
static Camera * Now()
アクティブなカメラを取得.
Definition: Camera.h:54
void SetIsCamera(bool カメラ利用フラグ)
描画にカメラを使うか設定.
Definition: Model.h:49
void MultiZoom(double X倍率, double Y倍率)
縦横別で拡大率を掛ける.
Definition: Model.h:134
2Dモデルに貼り付けるスプライトを表す抽象クラス.
Definition: ISprite.h:14
void SetColor(Color 描画色)
透明度を0~255で設定.
Definition: ISprite.h:130
void SetShadowSize(double 影の表示倍率)
影の大きさを設定.
Definition: Model.h:43
virtual void Draw(const Point &座標, bool カメラフラグ)=0
ISpriteを描画する.
double GetZoomX()
横方向の拡大率を取得.
Definition: Model.h:170
色を表すクラス.
Definition: Color.h:7
virtual void Update()
更新処理を行う.
Definition: Model.h:40
virtual bool Hit(const IShape *IShape) const =0
衝突判定.
void Rotate(double 回転角度)
回転させる.
Definition: Model.h:144
void SetZoom(double 拡大率)
拡大率を設定する.
Definition: Model.h:116
virtual double GetX() const =0
X座標を取得.
void Move(double X移動量, double Y移動量)
相対座標で移動.
Definition: Model.h:98
void MovePolar(double 距離, double 角度)
極座標で移動.
Definition: Model.h:104
2D用に座標変換を行うカメラを表すクラス.
Definition: Camera.h:16
void SetZoom(double X拡大率, double Y拡大率)
縦横別で拡大率を設定する.
Definition: Model.h:122
void SetAngle(double 角度)
角度を設定する.
Definition: Model.h:157
ShapeとSpriteをまとめて、2Dモデルを表すクラス.
Definition: Model.h:12
void MultiZoom(double 倍率)
拡大率を掛け算する.
Definition: ISprite.h:63
virtual void SetPos(double X座標, double Y座標)=0
指定座標に移動.
int GetAlpha() const
透明度を取得.
Definition: Color.h:43
Color GetColor()
描画色を取得.
Definition: ISprite.h:124
double GetX() const
X座標を取得.
Definition: Model.h:182
void SetPos(double X座標, double Y座標)
指定座標に移動.
Definition: Model.h:110
virtual void Move(double X移動量, double Y移動量)=0
相対座標で移動.
double GetDistance(T *比較対象)
対象との相対座標を取得.
Definition: Model.h:231
void MultiZoom(double 倍率)
拡大率を掛け算する.
Definition: IShape .h:113
double GetDirect(T *比較対象)
対象との角度を取得.
Definition: Model.h:224
void MultiZoom(double 倍率)
拡大率を掛ける.
Definition: Model.h:128