SDXFrameWork 0.09 SDXFrameWork

- Main Page
- Related Pages
- Classes

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
34 bool GetRemoveFlag()
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 }
SDX::Screen::SetBlendMode
static bool SetBlendMode(BlendMode ブレンドモード, int 設定値)
ブレンド描画のモードを設定.
Definition: Screen.h:132
SDX::IModel::SetColor
void SetColor(Color 描画色)
色をまとめて変更する、透明度も含む.
Definition: Model.h:164
SDX::Model
Modelの基本クラス.
Definition: Model.h:243
SDX::IModel::GetRemoveFlag
bool GetRemoveFlag()
消滅フラグの取得.
Definition: Model.h:34
SDX::IModel::Hit
bool Hit(IModel *判定を行うModel)
Modelとの衝突判定.
Definition: Model.h:194
SDX::IModel::Draw
virtual void Draw()
描画する.
Definition: Model.h:55
SDX::IModel::AnimeUpdate
void AnimeUpdate()
アニメーションを更新する.
Definition: Model.h:92
SDX::IShape::GetY
virtual double GetY() const =0
Y座標を取得.
SDX::Screen::SetBright
static bool SetBright(Color 輝度)
描画輝度を設定.
Definition: Screen.h:149
SDX::IModel::GetY
double GetY() const
Y座標を取得.
Definition: Model.h:188
SDX::IModel::DrawShadow
void DrawShadow(double X座標ずれ, double Y座標ずれ)
影を描画する.
Definition: Model.h:75
SDX::ISprite::Rotate
void Rotate(double 回転する角度)
回転させる.
Definition: ISprite.h:118
SDX::IModel::Hit
bool Hit(IShape *判定を行うShape)
Shapeとの衝突判定.
Definition: Model.h:200
SDX::Point
点を表す図形クラス.
Definition: Shape.h:129
SDX::IShape
位置情報を持つ図形の抽象クラス.
Definition: IShape .h:18
SDX::IModel::GetZoomY
double GetZoomY()
縦方向の拡大率を取得.
Definition: Model.h:176
SDX::ISprite::AnimeUpdate
virtual void AnimeUpdate()
説明.
Definition: ISprite.h:136
SDX::IModel::GetAngle
double GetAngle()
角度を取得する.
Definition: Model.h:151
SDX::IModel::Hit
bool Hit(Camera *座標変換に使うCamera=nullptr)
マウスカーソルとの衝突判定.
Definition: Model.h:206
SDX::Camera::Now
static Camera * Now()
アクティブなカメラを取得.
Definition: Camera.h:54
SDX::IModel::SetIsCamera
void SetIsCamera(bool カメラ利用フラグ)
描画にカメラを使うか設定.
Definition: Model.h:49
SDX::IModel::MultiZoom
void MultiZoom(double X倍率, double Y倍率)
縦横別で拡大率を掛ける.
Definition: Model.h:134
SDX::ISprite
2Dモデルに貼り付けるスプライトを表す抽象クラス.
Definition: ISprite.h:14
SDX::ISprite::SetColor
void SetColor(Color 描画色)
透明度を0～255で設定.
Definition: ISprite.h:130
SDX::IModel::SetShadowSize
void SetShadowSize(double 影の表示倍率)
影の大きさを設定.
Definition: Model.h:43
SDX::ISprite::Draw
virtual void Draw(const Point &座標, bool カメラフラグ)=0
ISpriteを描画する.
SDX::IModel::GetZoomX
double GetZoomX()
横方向の拡大率を取得.
Definition: Model.h:170
SDX::Color
色を表すクラス.
Definition: Color.h:7
SDX::IModel::Update
virtual void Update()
更新処理を行う.
Definition: Model.h:40
SDX::IShape::Hit
virtual bool Hit(const IShape *IShape) const =0
衝突判定.
SDX::IModel::Rotate
void Rotate(double 回転角度)
回転させる.
Definition: Model.h:144
SDX::IModel::SetZoom
void SetZoom(double 拡大率)
拡大率を設定する.
Definition: Model.h:116
SDX::IShape::GetX
virtual double GetX() const =0
X座標を取得.
SDX::IModel::Move
void Move(double X移動量, double Y移動量)
相対座標で移動.
Definition: Model.h:98
SDX::IModel::MovePolar
void MovePolar(double 距離, double 角度)
極座標で移動.
Definition: Model.h:104
SDX::Camera
2D用に座標変換を行うカメラを表すクラス.
Definition: Camera.h:16
SDX::IModel::SetZoom
void SetZoom(double X拡大率, double Y拡大率)
縦横別で拡大率を設定する.
Definition: Model.h:122
SDX::IModel::SetAngle
void SetAngle(double 角度)
角度を設定する.
Definition: Model.h:157
SDX::IModel
ShapeとSpriteをまとめて、2Dモデルを表すクラス.
Definition: Model.h:12
SDX::ISprite::MultiZoom
void MultiZoom(double 倍率)
拡大率を掛け算する.
Definition: ISprite.h:63
SDX::IShape::SetPos
virtual void SetPos(double X座標, double Y座標)=0
指定座標に移動.
SDX::Color::GetAlpha
int GetAlpha() const
透明度を取得.
Definition: Color.h:43
SDX::ISprite::GetColor
Color GetColor()
描画色を取得.
Definition: ISprite.h:124
SDX::IModel::GetX
double GetX() const
X座標を取得.
Definition: Model.h:182
SDX::IModel::SetPos
void SetPos(double X座標, double Y座標)
指定座標に移動.
Definition: Model.h:110
SDX::IShape::Move
virtual void Move(double X移動量, double Y移動量)=0
相対座標で移動.
SDX::IModel::GetDistance
double GetDistance(T *比較対象)
対象との相対座標を取得.
Definition: Model.h:231
SDX::IShape::MultiZoom
void MultiZoom(double 倍率)
拡大率を掛け算する.
Definition: IShape .h:113
SDX::IModel::GetDirect
double GetDirect(T *比較対象)
対象との角度を取得.
Definition: Model.h:224
SDX::IModel::MultiZoom
void MultiZoom(double 倍率)
拡大率を掛ける.
Definition: Model.h:128