-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMenu.cpp
More file actions
120 lines (94 loc) · 3.23 KB
/
Copy pathMenu.cpp
File metadata and controls
120 lines (94 loc) · 3.23 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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include "Menu.h"
Menu::Menu(SDL_Renderer *menu_renderer, SDL_Event *menu_event, int menu_width, int menu_height, bool *isRun) :
menu_renderer(menu_renderer), menu_event(menu_event), menu_width(menu_width), menu_height(menu_height), menu_isRun(isRun)
{
next_game_state = MENU;
// ===== this should be where you put the render =====
render_init();
}
Menu::~Menu()
{
menu_renderer = NULL;
menu_event = NULL;
// ===== render_clean =====
render_clean();
}
void Menu::render(){
SDL_RenderClear(menu_renderer);
// ===== rendering stuffs go here =====
render_render();
SDL_RenderPresent(menu_renderer);
}
void Menu::handle(){
if (menu_event->type == SDL_QUIT){
*menu_isRun = false;
}
if (menu_event->type == SDL_KEYDOWN && menu_event->key.keysym.sym == SDLK_SPACE){
next_game_state = TETRIS;
}
if (menu_event->type == SDL_KEYDOWN && menu_event->key.keysym.sym == SDLK_ESCAPE){
*menu_isRun = false;
}
// ===== render_handle out-renderings logics , using the signal from renderings bool vars =====
render_handle_out();
// ===== render_handle in-renderings logics , handling renderings ' selves signals for render =====
render_handle_in();
}
void Menu::update(){
}
bool Menu::onEnter(){
std::cout << "\n===== Menu State =====\n";
return true;
}
bool Menu::onExit(){
std::cout << "\n===== Menu Out~s =====\n";
return true;
}
// ===== render function =====
void Menu::render_init(){
bg = new image("pic/fl01.jpg", menu_renderer);
Start = new textBox_ColorChange("START", "pic/font/gamer.ttf", { 150,0,20 }, { 250, 150, 0 }, 60, menu_renderer, menu_event, 430, 200);
start_note = new textBox("1 space bar 1", "pic/font/gamer.ttf", { 100, 100, 100 }, 20, menu_renderer);
Exit = new textBox_ColorChange("EXIT", "pic/font/gamer.ttf", { 150, 0, 20 }, { 250, 150, 0 }, 60, menu_renderer, menu_event, 430, 300);
exit_note = new textBox("1 escape 1", "pic/font/gamer.ttf", { 100, 100, 100 }, 20, menu_renderer);
title_add1 = new textBox("another", "pic/font/gamer.ttf", { 200, 200, 200 }, 20,menu_renderer);
title = new textBox("TETRIS", "pic/font/gamer.ttf", { 250, 10, 50 }, 70, menu_renderer);
title_add2 = new textBox("game", "pic/font/gamer.ttf", { 200, 200, 200 }, 20, menu_renderer);
bubb = new bubble(menu_renderer);
VGU = new textBox("VGU", "pic/font/gamer.ttf", { 250, 150, 50 },30, menu_renderer);
}
// ----- handle -----
void Menu::render_handle_in(){
Start->handle();
Exit->handle();
}
void Menu::render_handle_out(){
if (Start->isClick() && Start->isPointed){
next_game_state = TETRIS;
}
if (Exit->isClick() && Exit->isPointed){
*menu_isRun = false;
}
}
void Menu::render_render(){
bg->draw(0,50, menu_width -150, menu_height+50);
Start->render(430, 200);
start_note->render(430, 260);
Exit->render(430, 300);
exit_note->render(430, 360);
title_add1->render(title->dst.x, 10);
title->render(150, 30);
title_add2->render(title->dst.x + title->src.w - title_add2->src.w, 93);
bubb->render();
VGU->render(640-VGU->src.w-10,480-VGU->src.h-10);
}
void Menu::render_clean(){
delete bg;
delete Start;
delete start_note;
delete Exit;
delete exit_note;
delete title_add1;
delete title;
delete title_add2;
}