SDXFrameWork  0.11
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 {
13  class Camera
14  {
15  //●影響があるクラスと関数
16  //[Renderer/Screen]
17  //SetClip
18  //[Drawing]
19  //Line
20  //Rect
21  //Circle
22  //Oval
23  //Polygon
24  //Triangle
25  //Pixel
26  //[Image]
27  //Draw~6種
28  //
29  //●間接的に影響
30  //[Font]
31  //Imageを利用
32  //[BmpFrame]
33  //Imageを利用
34  //[Shape]
35  //Drawingを利用
36  //[Sprite]
37  //ImageやDrawingを利用
38  private:
39  double angle;
40  std::unique_ptr<MOTION::IMotion> motion;
41 
42  static Camera* active;
43  public:
46  double zoom;
47 
50  Camera(const Point &座標, double 拡大率) :
51  position(座標),
52  forcus(座標),
53  zoom(拡大率),
54  angle(0)
55  {}
56 
58  static Camera* Get()
59  {
60  return active;
61  }
62 
64  static void Set(Camera *アクティブにするCamera = nullptr)
65  {
66  active = アクティブにするCamera;
67  }
68 
70  void SetMotion( std::unique_ptr<MOTION::IMotion> 移動パターン)
71  {
72  motion = std::move(移動パターン);
73  }
74 
76  void Update()
77  {
78  if (motion)
79  {
80  motion->Update(&position);
81  }
82  }
83 
85  double TransX(double X座標変換前) const
86  {
87  return forcus.x + (X座標変換前 - position.x) * zoom;
88  }
89 
91  double TransY(double Y座標変換前) const
92  {
93  return forcus.y + (Y座標変換前 - position.y) * zoom;
94  }
95 
97  Point Trans(const Point &変換前座標) const
98  {
99  return{ TransX(変換前座標.x) , TransY(変換前座標.y) };
100  }
101 
103  SDL_Rect TransRect(const SDL_Rect &変換前矩形) const
104  {
105  return{ (int)TransX(変換前矩形.x), (int)TransY(変換前矩形.y), (int)(変換前矩形.w * zoom), (int)(変換前矩形.h *zoom) };
106  }
107  };
108 }
double y
座標
Definition: Point.h:26
void Update()
モーションに応じてカメラ位置の更新.
Definition: Camera.h:76
Point position
中心の位置
Definition: Camera.h:44
SDL_Rect TransRect(const SDL_Rect &変換前矩形) const
領域を画面上のどこに相当するか変換.
Definition: Camera.h:103
点を表す図形クラス.
Definition: Point.h:22
double TransX(double X座標変換前) const
カメラの位置と拡大率に応じてX座標を変換.
Definition: Camera.h:85
double TransY(double Y座標変換前) const
カメラの位置と拡大率に応じてY座標を変換.
Definition: Camera.h:91
void SetMotion(std::unique_ptr< MOTION::IMotion > 移動パターン)
カメラの移動モーションを設定.
Definition: Camera.h:70
static Camera * Get()
現在アクティブなカメラを取得.
Definition: Camera.h:58
double zoom
拡大率、マイナスになると描画が狂う
Definition: Camera.h:46
double x
座標
Definition: Point.h:25
2D用に座標変換を行うカメラを表すクラス.
Definition: Camera.h:13
static void Set(Camera *アクティブにするCamera=nullptr)
現在アクティブなカメラを設定.
Definition: Camera.h:64
Point Trans(const Point &変換前座標) const
座標を画面上のどこに表示されるか変換.
Definition: Camera.h:97
Camera(const Point &座標, double 拡大率)
カメラの作成.
Definition: Camera.h:50
Point forcus
Screen上の座標positonがWindow上のforcusに来るように補正をかける
Definition: Camera.h:45