-
Notifications
You must be signed in to change notification settings - Fork 0
/
Button.cpp
87 lines (72 loc) · 2.22 KB
/
Button.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
#include "Button.h"
using namespace std;
Button::Button(Global_variables_container* GVC, string text)
{
m_GVC = GVC;
m_sprite = new Animated_sprite(GVC, "sprites/interface/button.bmp", 2);
m_text = new Text(GVC, text, 53 - text.size());
m_sprite->set_animation(false);
m_function = F_QUIT;
m_is_clicked = false;
}
Button::~Button()
{
delete m_sprite;
delete m_text;
}
void Button::display()
{ //on affiche le sprite puis le texte
this->update();
m_sprite->display();
m_text->display();
}
void Button::set_pos(int x, int y)
{ //change la position du bouton
m_sprite->set_pos(x, y);
m_text->set_pos(x, y);
}
void Button::update()
{
if(this->under_cursor())
{ //si le curseur est sur le bouton
m_text->change_text("SAME", true); //on souligne son texte
}
else
{ //si le curseur est hors du bouton
m_text->change_text("SAME", false); //le texte n'est plus souligné
if(m_is_clicked)
{ //et si le bouton était en état de click, il ne l'est plus
m_is_clicked = false;
m_sprite->reset_animation();
}
}
}
void Button::click(int up_or_down)
{
if(this->under_cursor())
{ //si le bouton est sous le curseur lors du click
m_is_clicked = (up_or_down == DOWN); //vrai si le click est enffoncé
m_sprite->skip_phase(1); //on inverse son état visuel (comme il n'y a que 2 images possibles elles s'inversent d'elles même)
}
if(up_or_down == UP){m_sprite->reset_animation();}
}
void Button::rework(int new_function, string new_text, int new_text_size)
{
m_function = new_function;
m_text->change_text(new_text, false, 0, 0, 0, new_text_size);
}
bool Button::under_cursor()
{ //renvoit vrai si le curseur est sur le bouton
return (m_GVC->get_cursor_pos(X) < m_sprite->get_border(RIGHT) and
m_GVC->get_cursor_pos(X) > m_sprite->get_border(LEFT) and
m_GVC->get_cursor_pos(Y) < m_sprite->get_border(BOTTOM) and
m_GVC->get_cursor_pos(Y) > m_sprite->get_border(TOP));
}
bool Button::is_clicked()
{
return m_is_clicked;
}
int Button::get_function()
{
return m_function;
}