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
34 bool GetRemoveFlag()
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 }
SDX::Screen::SetBlendMode
static bool SetBlendMode(BlendMode ブレンドモード, int 設定値)
ブレンド描画のモードを設定.
Definition: Screen.h:136
SDX::Model
ShapeとSpriteをまとめて、2Dモデルを表すクラス.
Definition: Model.h:12
SDX::Model::MultiZoom
void MultiZoom(double X倍率, double Y倍率)
縦横別で拡大率を掛ける.
Definition: Model.h:161
SDX::Shape::Move
virtual void Move(double X移動量, double Y移動量)=0
相対座標で移動.
SDX::Model::SetAngle
void SetAngle(double 角度)
角度を設定する.
Definition: Model.h:192
SDX::Model::AnimeUpdate
void AnimeUpdate()
アニメーションを更新する.
Definition: Model.h:116
SDX::Screen::SetBright
static bool SetBright(Color 輝度)
描画輝度を設定.
Definition: Screen.h:153
SDX::Model::MovePolar
void MovePolar(double 距離, double 角度)
極座標で移動.
Definition: Model.h:131
SDX::Model::Update
virtual void Update()
更新処理を行う.
Definition: Model.h:40
SDX::Point
点を表す図形クラス.
Definition: Shape.h:284
SDX::Model::Hit
bool Hit(Camera *座標変換に使うCamera=nullptr)
マウスカーソルとの衝突判定.
Definition: Model.h:247
SDX::Model::Hit
bool Hit(Shape *判定を行うShape)
Shapeとの衝突判定.
Definition: Model.h:241
SDX::Model::GetZoomX
double GetZoomX()
横方向の拡大率を取得.
Definition: Model.h:211
SDX::Camera::Now
static Camera * Now()
アクティブなカメラを取得.
Definition: Camera.h:54
SDX::Model::SetColor
void SetColor(Color 描画色)
色をまとめて変更する、透明度も含む.
Definition: Model.h:202
SDX::Model::Hit
bool Hit(Model *判定を行うModel)
Modelとの衝突判定.
Definition: Model.h:235
SDX::Model::SetZoom
void SetZoom(double 拡大率)
拡大率を設定する.
Definition: Model.h:143
SDX::Shape::MultiZoom
void MultiZoom(double 倍率)
拡大率を掛け算する.
Definition: Shape.h:111
SDX::Model::SetZoom
void SetZoom(double X拡大率, double Y拡大率)
縦横別で拡大率を設定する.
Definition: Model.h:149
SDX::Color
色を表すクラス.
Definition: Color.h:7
SDX::Model::GetAngle
double GetAngle()
角度を取得する.
Definition: Model.h:186
SDX::Model::GetY
double GetY() const
Y座標を取得.
Definition: Model.h:229
SDX::Model::SetIsCamera
void SetIsCamera(bool カメラ利用フラグ)
描画にカメラを使うか設定.
Definition: Model.h:52
SDX::Shape::Hit
virtual bool Hit(const Shape *shape) const =0
衝突判定.
SDX::Model::Move
void Move(double X移動量, double Y移動量)
相対座標で移動.
Definition: Model.h:125
SDX::Model::GetDistance
double GetDistance(T *比較対象)
対象との相対座標を取得.
Definition: Model.h:272
SDX::Model::GetZoomY
double GetZoomY()
縦方向の拡大率を取得.
Definition: Model.h:217
SDX::Model::Rotate
void Rotate(double 回転角度)
回転させる.
Definition: Model.h:175
SDX::Model::MultiZoom
void MultiZoom(double 倍率)
拡大率を掛ける.
Definition: Model.h:155
SDX::Model::GetX
double GetX() const
X座標を取得.
Definition: Model.h:223
SDX::Model::GetRemoveFlag
bool GetRemoveFlag()
消滅フラグの取得.
Definition: Model.h:34
SDX::Camera
2D用に座標変換を行うカメラを表すクラス.
Definition: Camera.h:16
SDX::Model::DrawShadow
void DrawShadow(double X座標ずれ, double Y座標ずれ)
影を描画する.
Definition: Model.h:89
SDX::Sprite
2Dモデルに貼り付けるスプライトを表す抽象クラス.
Definition: Sprite.h:15
SDX::Model::GetDirect
double GetDirect(T *比較対象)
対象との角度を取得.
Definition: Model.h:265
SDX::Shape::GetX
virtual double GetX() const =0
X座標を取得.
SDX::Shape::SetPos
virtual void SetPos(double X座標, double Y座標)=0
指定座標に移動.
SDX::Shape
位置情報を持つ図形の抽象クラス.
Definition: Shape.h:16
SDX::Shape::GetY
virtual double GetY() const =0
Y座標を取得.
SDX::Model::SetShadowSize
void SetShadowSize(double 影の表示倍率)
影の大きさを設定.
Definition: Model.h:46
SDX::Model::SetPos
void SetPos(double X座標, double Y座標)
指定座標に移動.
Definition: Model.h:137
SDX::Model::Draw
virtual void Draw() const
描画する.
Definition: Model.h:63