-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcamera.cpp
More file actions
105 lines (88 loc) · 2.04 KB
/
camera.cpp
File metadata and controls
105 lines (88 loc) · 2.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include "camera.h"
Camera::Camera(sf::Vector2f newPosition, sf::Vector2f newSize, float newScale): position{newPosition}, size{newSize}, scale{newScale} {}
Camera::~Camera()
{
delete hook;
}
void Camera::render(std::vector<Object *> *objects, sf::RenderTarget &target)
{
sf::RenderStates states;
sf::Transform transform;
transform.translate(-position);
transform.scale({scale, scale}, position + size / 2.f);
states.transform = transform;
for (auto i_objects{objects->begin()}; i_objects != objects->end(); i_objects++) {
target.draw(**i_objects, states);
}
}
void Camera::draw(sf::Drawable *drawing, sf::RenderTarget &target)
{
sf::RenderStates states;
sf::Transform transform;
transform.translate(-position);
transform.scale({scale, scale}, position + size / 2.f);
states.transform = transform;
target.draw(*drawing, states);
}
void Camera::move(sf::Vector2f vector)
{
position += vector;
}
sf::Vector2f Camera::getPosition()
{
return position;
}
void Camera::setPosition(sf::Vector2f newPosition)
{
position = newPosition;
}
float Camera::getScale()
{
return scale;
}
void Camera::setScale(float newScale)
{
scale = newScale;
}
void Camera::update(sf::Vector2f mousePos)
{
if (tracked == nullptr) {
mousePosition = localToWorld(mousePos);
if (hook != nullptr) {
position = *hook + position - mousePosition;
}
} else {
position = tracked->getPos() - size / 2.f;
}
}
void Camera::setHook(sf::Vector2f mousePos)
{
hook = new sf::Vector2f(localToWorld(mousePos));
}
void Camera::resetHook()
{
hook = nullptr;
}
sf::Vector2f Camera::localToWorld(sf::Vector2f pos)
{
return position + (size - (size / scale)) / 2.f + pos / scale;
}
void Camera::setTracked(Object *newTracked)
{
tracked = newTracked;
}
void Camera::resetTracked()
{
tracked = nullptr;
}
bool Camera::isTracking()
{
if (tracked == nullptr) {
return false;
}
return true;
}
Object *Camera::getTracker()
{
return tracked;
}