]> git.localhorst.tv Git - blank.git/blob - src/shared/states.cpp
b9a48b09a94ab53840070e13b173628bd223d214
[blank.git] / src / shared / states.cpp
1 #include "ChatState.hpp"
2 #include "MessageState.hpp"
3 #include "ProgressState.hpp"
4
5 #include "../app/Environment.hpp"
6 #include "../io/event.hpp"
7
8 #include <iostream>
9
10
11 namespace blank {
12
13 ChatState::ChatState(Environment &env, State &parent, Responder &responder)
14 : env(env)
15 , parent(parent)
16 , responder(responder)
17 , input(env.assets.small_ui_font) {
18         input.Position(glm::vec3(25.0f, -25.0f, -1.0f), Gravity::SOUTH_WEST, Gravity::SOUTH_WEST);
19         input.Width(env.viewport.Width() - 50.0f);
20         input.Foreground(glm::vec4(1.0f));
21         input.Background(glm::vec4(0.5f));
22 }
23
24 void ChatState::OnResume() {
25         OnResize(env.viewport);
26         input.Clear();
27         input.Focus(env.viewport);
28 }
29
30 void ChatState::OnPause() {
31         input.Blur();
32 }
33
34 void ChatState::OnResize(Viewport &viewport) {
35         input.Width(viewport.Width() - 50.0f);
36 }
37
38
39 void ChatState::Handle(const SDL_Event &e) {
40         switch (e.type) {
41                 case SDL_KEYDOWN:
42                         switch (e.key.keysym.sym) {
43                                 case SDLK_ESCAPE:
44                                         Quit();
45                                         break;
46                                 case SDLK_KP_ENTER:
47                                 case SDLK_RETURN:
48                                         responder.OnLineSubmit(input.GetInput());
49                                         Quit();
50                                         break;
51
52                                 case SDLK_BACKSPACE:
53                                         input.Backspace();
54                                         break;
55                                 case SDLK_DELETE:
56                                         input.Delete();
57                                         break;
58
59                                 case SDLK_LEFT:
60                                         input.MoveBackward();
61                                         break;
62                                 case SDLK_RIGHT:
63                                         input.MoveForward();
64                                         break;
65
66                                 case SDLK_HOME:
67                                         input.MoveBegin();
68                                         break;
69                                 case SDLK_END:
70                                         input.MoveEnd();
71                                         break;
72
73                                 default:
74                                         break;
75                         }
76                         break;
77
78                 case SDL_QUIT:
79                         env.state.PopAll();
80                         break;
81
82                 case SDL_TEXTINPUT:
83                         input.Handle(e.text);
84                         break;
85
86                 case SDL_TEXTEDITING:
87                         std::cout << e << std::endl;
88                         input.Handle(e.edit);
89                         break;
90
91                 default:
92                         break;
93         }
94 }
95
96 void ChatState::Quit() {
97         env.state.PopUntil(this);
98 }
99
100 void ChatState::Update(int dt) {
101         parent.Update(dt);
102 }
103
104 void ChatState::Render(Viewport &viewport) {
105         parent.Render(viewport);
106         input.Render(viewport);
107 }
108
109
110 MessageState::MessageState(Environment &env)
111 : env(env) {
112         message.Position(glm::vec3(0.0f), Gravity::CENTER);
113         message.Hide();
114         press_key.Position(glm::vec3(0.0f, env.assets.large_ui_font.LineSkip(), 0.0f), Gravity::CENTER);
115         press_key.Set(env.assets.small_ui_font, "press any key to continue");
116         press_key.Show();
117 }
118
119 void MessageState::SetMessage(const char *msg) {
120         message.Set(env.assets.large_ui_font, msg);
121         message.Show();
122 }
123
124 void MessageState::ClearMessage() {
125         message.Hide();
126 }
127
128 void MessageState::Handle(const SDL_Event &e) {
129         if (e.type == SDL_KEYDOWN) {
130                 env.state.Pop();
131         }
132 }
133
134 void MessageState::Update(int dt) {
135
136 }
137
138 void MessageState::Render(Viewport &viewport) {
139         if (message.Visible()) {
140                 message.Render(viewport);
141         }
142         if (press_key.Visible()) {
143                 press_key.Render(viewport);
144         }
145 }
146
147
148 ProgressState::ProgressState(Environment &env, const char *tpl)
149 : env(env)
150 , progress(env.assets.large_ui_font) {
151         progress.Position(glm::vec3(0.0f), Gravity::CENTER);
152         progress.Template(tpl);
153 }
154
155 void ProgressState::SetProgress(int value, int total) {
156         progress.Update(value, total);
157 }
158
159 void ProgressState::Handle(const SDL_Event &e) {
160         if (e.type == SDL_QUIT) {
161                 env.state.PopAll();
162         }
163 }
164
165 void ProgressState::Render(Viewport &viewport) {
166         progress.Render(viewport);
167 }
168
169 }