-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHook.cpp
97 lines (80 loc) · 2.23 KB
/
Hook.cpp
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
#include <iostream>
#include "Hook.hpp"
#include "Resources.hpp"
//#include "ResourceManager.hpp"
Hook::Hook(){
simple = true;
size = 20;
}
Hook::Hook(float w){
simple = true;
size = w;
}
Hook::Hook(float w, sf::Vector2f orig, sf::Vector2f dest) {
simple = true;
size = w;
origin = orig;
destiny = dest;
}
float Hook::getAngle(){
return getAngle(origin, destiny);
}
float Hook::getWidth() const {
return size;
}
sf::Vector2f Hook::getDestiny() const{
return destiny;
}
sf::Vector2f Hook::getOrigin() const{
return origin;
}
void Hook::setWidth(float value) {
size = value;
}
void Hook::setDestiny(const sf::Vector2f &value){
destiny = value;
}
void Hook::setOrigin(const sf::Vector2f &value){
origin = value;
}
void Hook::setTexture(std::string path) {
path = path;
texture = Resources::chain;
simple = false;
_end.setTexture(Resources::endHook);
_end.setOrigin(_end.getLocalBounds().width/2,
_end.getLocalBounds().height/2);
}
bool Hook::makeTextureRepeteable(){
if(texture.getSize().x <= 0) return false;
else texture.setRepeated(true);
return true;
}
void Hook::draw(sf::RenderTarget * window){
if(simple) {
sf::Vertex line[] = { origin, destiny };
window->draw(line, 2, sf::Lines);
}
else {
sprite.setTexture(texture);
makeTextureRepeteable();
if(texture.isRepeated()){
sprite.setTextureRect(sf::IntRect(0,0,getModule(destiny,origin),texture.getSize().y));
}
sprite.setScale(getModule(destiny,origin)/sprite.getLocalBounds().width,
size/sprite.getLocalBounds().height);
sprite.setOrigin(0, sprite.getLocalBounds().height/2);
sprite.setPosition(origin);
//godoy knows
sprite.setRotation(getAngle(origin,destiny));
window->draw(sprite);
_end.setPosition(destiny);
window->draw(_end);
}
}
float Hook::getAngle(sf::Vector2f &orig, sf::Vector2f &des) {
return std::atan2(des.y - orig.y, des.x - orig.x)*180/(M_PI);
}
float Hook::getModule(sf::Vector2f &orig, sf::Vector2f &des) {
return std::sqrt(std::pow(std::abs(des.x-orig.x), 2) + std::pow(std::abs(des.y-orig.y), 2));
}