Repository navigation
Expand file tree
/
Copy pathUI_T.cpp
More file actions
96 lines (93 loc) · 2.74 KB
/
Copy pathUI_T.cpp
File metadata and controls
96 lines (93 loc) · 2.74 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
#include "UI_T.h"
#include "Utils.h"
#include "data/DataCenter.h"
#include "data/ImageCenter.h"
#include "data/FontCenter.h"
#include <algorithm>
#include <allegro5/allegro_primitives.h>
#include <allegro5/allegro_ttf.h>
#include "shapes/Point.h"
#include "shapes/Rectangle.h"
int UI::update() {
DataCenter *DC = DataCenter::get_instance();
const Point &mouse = DC->mouse;
switch (state) {
case STATE::HALT: {
for (size_t i = 0; i < button_items.size(); ++i) {
auto &[bitmap, p] = button_items[i];
int w = al_get_bitmap_width(bitmap);
int h = al_get_bitmap_height(bitmap);
// hover on a shop tower item
if (DC->mouse_state[1] && !DC->prev_mouse_state[1] && mouse.overlap(Rectangle{p.x, p.y, p.x+w, p.y+h})) {
on_item = i;
// debug_log("<UI> state: change to SELECT\n");
state = STATE::SELECT;
break;
} else {
on_item = -1;
}
}
break;
} case STATE::SELECT: {
auto &[bitmap, p] = button_items[on_item];
int w = al_get_bitmap_width(bitmap);
int h = al_get_bitmap_height(bitmap);
if (!mouse.overlap(Rectangle{p.x, p.y, p.x+w, p.y+h})) {
on_item = -1;
// debug_log("<UI> state: change to HALT\n");
state = STATE::HALT;
break;
} else if (!DC->mouse_state[1] && DC->prev_mouse_state[1]) {
// debug_log("<UI> state: change to HALT\n");
state = STATE::HALT;
return on_item;
}
break;
} default : {
on_item = -1;
break;
}
}
return -1;
}
void UI::draw() {
// DataCenter *DC = DataCenter::get_instance();
// FontCenter *FC = FontCenter::get_instance();
// const Point &mouse = DC->mouse;
// draw button
if(intro){
ImageCenter *IC = ImageCenter::get_instance();
ALLEGRO_COLOR tint_color = al_map_rgba_f(0.7,0.7,0.7,0.7);
ALLEGRO_BITMAP *bitmap = IC->get("./assets/image/instruction/introduction.png");
al_draw_tinted_bitmap(bitmap, tint_color,0,0,0);
}
if(easter){
ImageCenter *IC = ImageCenter::get_instance();
ALLEGRO_COLOR tint_color = al_map_rgba_f(0.5,0.5,0.5,0.5);
ALLEGRO_BITMAP *bitmap = IC->get("./assets/image/easter_egg.png");
al_draw_tinted_bitmap(bitmap, tint_color,0,0,0);
}
for(auto &[bitmap, p] : button_items) {
// int w = al_get_bitmap_width(bitmap);
// int h = al_get_bitmap_height(bitmap);
al_draw_bitmap(bitmap, p.x, p.y, 0);
// al_draw_rectangle(
// p.x - 1, p.y - 1,
// p.x + w + 1, p.y + h + 1,
// al_map_rgb(0, 0, 0), 1);
}
switch(state) {
case STATE::HALT: {
break;
} case STATE::SELECT: {
auto &[bitmap, p] = button_items[on_item];
int w = al_get_bitmap_width(bitmap);
int h = al_get_bitmap_height(bitmap);
// Create a semitransparent mask covered on the hovered tower.
al_draw_filled_rectangle(p.x, p.y, p.x + w, p.y + h, al_map_rgba(50, 50, 50, 64));
break;
} default : {
break;
}
}
}