SDXFrameWork  0.13
SDXFrameWork
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
Camera.h
1 //Copyright © 2014 SDXFramework
2 //[License]GNU Affero General Public License, version 3
3 //[Contact]http://sourceforge.jp/projects/dxframework/
4 #pragma once
5 #include <Multimedia/SDX.h>
6 #include <Utility/IMotion.h>
7 
8 namespace SDX
9 {
12  class Camera
13  {
14  //●影響があるクラスと関数
15  //[Renderer/Screen]
16  //SetClip
17  //[Drawing]
18  //Line
19  //Rect
20  //Circle
21  //Oval
22  //Polygon
23  //Triangle
24  //Pixel
25  //[Image]
26  //Draw~6種
27  //
28  //●間接的に影響
29  //[Font]
30  //Imageを利用
31  //[BmpFrame]
32  //Imageを利用
33  //[Shape]
34  //Drawingを利用
35  //[Sprite]
36  //ImageやDrawingを利用
37  private:
38  double angle;
39  std::unique_ptr<MOTION::IMotion> motion;
40 
41  static Camera* active;
42  public:
45  double zoom;
46 
49  Camera(const Point &座標, double 拡大率) :
50  position(座標),
51  forcus(座標),
52  zoom(拡大率),
53  angle(0)
54  {}
55 
57  static Camera* Get()
58  {
59  return active;
60  }
61 
63  static void Set(Camera *アクティブにするCamera = nullptr)
64  {
65  active = アクティブにするCamera;
66  }
67 
69  void SetMotion( std::unique_ptr<MOTION::IMotion> 移動パターン)
70  {
71  motion = std::move(移動パターン);
72  }
73 
75  void Update()
76  {
77  if (motion)
78  {
79  motion->Update(&position);
80  }
81  }
82 
84  double TransX(double X座標変換前) const
85  {
86  return forcus.x + (X座標変換前 - position.x) * zoom;
87  }
88 
90  double TransY(double Y座標変換前) const
91  {
92  return forcus.y + (Y座標変換前 - position.y) * zoom;
93  }
94 
96  Point Trans(const Point &変換前座標) const
97  {
98  return{ TransX(変換前座標.x) , TransY(変換前座標.y) };
99  }
100 
102  SDL_Rect TransRect(const SDL_Rect &変換前矩形) const
103  {
104  return{ (int)TransX(変換前矩形.x), (int)TransY(変換前矩形.y), (int)(変換前矩形.w * zoom), (int)(変換前矩形.h *zoom) };
105  }
106  };
107 }
double y
座標
Definition: Point.h:26
void Update()
モーションに応じてカメラ位置の更新.
Definition: Camera.h:75
Point position
中心の位置
Definition: Camera.h:43
SDL_Rect TransRect(const SDL_Rect &変換前矩形) const
領域を画面上のどこに相当するか変換.
Definition: Camera.h:102
点を表す図形クラス.
Definition: Point.h:22
double TransX(double X座標変換前) const
カメラの位置と拡大率に応じてX座標を変換.
Definition: Camera.h:84
double TransY(double Y座標変換前) const
カメラの位置と拡大率に応じてY座標を変換.
Definition: Camera.h:90
void SetMotion(std::unique_ptr< MOTION::IMotion > 移動パターン)
カメラの移動モーションを設定.
Definition: Camera.h:69
static Camera * Get()
現在アクティブなカメラを取得.
Definition: Camera.h:57
double zoom
拡大率、マイナスになると描画が狂う
Definition: Camera.h:45
double x
座標
Definition: Point.h:25
2D用に座標変換を行うカメラを表すクラス.
Definition: Camera.h:12
static void Set(Camera *アクティブにするCamera=nullptr)
現在アクティブなカメラを設定.
Definition: Camera.h:63
Point Trans(const Point &変換前座標) const
座標を画面上のどこに表示されるか変換.
Definition: Camera.h:96
Camera(const Point &座標, double 拡大率)
カメラの作成.
Definition: Camera.h:49
Point forcus
Screen上の座標positonがWindow上のforcusに来るように補正をかける
Definition: Camera.h:44