]> git.localhorst.tv Git - blank.git/blob - src/app/ChatState.cpp
remove self on player controller destruct
[blank.git] / src / app / ChatState.cpp
1 #include "ChatState.hpp"
2
3 #include "Environment.hpp"
4 #include "../io/event.hpp"
5
6 #include <iostream>
7
8
9 namespace blank {
10
11 ChatState::ChatState(Environment &env, State &parent, Responder &responder)
12 : env(env)
13 , parent(parent)
14 , responder(responder)
15 , input(env.assets.small_ui_font) {
16         input.Position(glm::vec3(25.0f, -25.0f, -1.0f), Gravity::SOUTH_WEST, Gravity::SOUTH_WEST);
17         input.Width(env.viewport.Width() - 50.0f);
18         input.Foreground(glm::vec4(1.0f));
19         input.Background(glm::vec4(0.5f));
20 }
21
22 void ChatState::OnResume() {
23         OnResize(env.viewport);
24         input.Clear();
25         input.Focus(env.viewport);
26 }
27
28 void ChatState::OnPause() {
29         input.Blur();
30 }
31
32 void ChatState::OnResize(Viewport &viewport) {
33         input.Width(viewport.Width() - 50.0f);
34 }
35
36
37 void ChatState::Handle(const SDL_Event &e) {
38         switch (e.type) {
39                 case SDL_KEYDOWN:
40                         switch (e.key.keysym.sym) {
41                                 case SDLK_ESCAPE:
42                                         Quit();
43                                         break;
44                                 case SDLK_KP_ENTER:
45                                 case SDLK_RETURN:
46                                         responder.OnLineSubmit(input.GetInput());
47                                         Quit();
48                                         break;
49
50                                 case SDLK_BACKSPACE:
51                                         input.Backspace();
52                                         break;
53                                 case SDLK_DELETE:
54                                         input.Delete();
55                                         break;
56
57                                 case SDLK_LEFT:
58                                         input.MoveBackward();
59                                         break;
60                                 case SDLK_RIGHT:
61                                         input.MoveForward();
62                                         break;
63
64                                 case SDLK_HOME:
65                                         input.MoveBegin();
66                                         break;
67                                 case SDLK_END:
68                                         input.MoveEnd();
69                                         break;
70
71                                 default:
72                                         break;
73                         }
74                         break;
75
76                 case SDL_QUIT:
77                         env.state.PopAll();
78                         break;
79
80                 case SDL_TEXTINPUT:
81                         input.Handle(e.text);
82                         break;
83
84                 case SDL_TEXTEDITING:
85                         std::cout << e << std::endl;
86                         input.Handle(e.edit);
87                         break;
88
89                 default:
90                         break;
91         }
92 }
93
94 void ChatState::Quit() {
95         env.state.PopUntil(this);
96 }
97
98 void ChatState::Update(int dt) {
99         parent.Update(dt);
100 }
101
102 void ChatState::Render(Viewport &viewport) {
103         parent.Render(viewport);
104         input.Render(viewport);
105 }
106
107 }