summaryrefslogtreecommitdiff
path: root/scene.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene.cpp')
-rw-r--r--scene.cpp90
1 files changed, 66 insertions, 24 deletions
diff --git a/scene.cpp b/scene.cpp
index f7db5c4..e179a3b 100644
--- a/scene.cpp
+++ b/scene.cpp
@@ -56,6 +56,9 @@ Scene::Scene() {
font->FaceSize(10);
GUI::init();
+
+ console = new ConsoleWindow();
+ console->hide();
}
Scene::~Scene() {
@@ -64,6 +67,7 @@ Scene::~Scene() {
if(terrain)
delete terrain;
delete font;
+ delete console;
}
void Scene::lookat() {
@@ -143,11 +147,18 @@ void Scene::events() {
running = false;
break;
case SDL_KEYDOWN:
+ if(console->showing() && event.key.keysym.sym != 124) {
+ CEGUI::System::getSingleton().injectKeyDown(event.key.keysym.scancode);
+ if(CEGUI::System::getSingleton().injectChar(event.key.keysym.unicode))
+ break;
+ }
switch(event.key.keysym.sym) {
case SDLK_ESCAPE:
if(tool) {
delete tool;
tool = NULL;
+ } else if(console->showing()) {
+ console->hide();
} else
running = false;
break;
@@ -171,15 +182,35 @@ void Scene::events() {
break;
case SDLK_TAB:
dialog = !dialog && tool;
+ if(tool) {
+ if(dialog)
+ tool->gui_show();
+ else
+ tool->gui_hide();
+ }
break;
case SDLK_1:
if(tool) delete tool;
tool = new RaiseTool(terrain);
break;
+ case 124:
+ if(console->showing()) {
+ console->hide();
+ dialog = false;
+ } else {
+ console->show();
+ dialog = true;
+ }
+ break;
default:
break;
}
break;
+ case SDL_KEYUP:
+ if(console->showing() && event.key.keysym.sym != 124) {
+ CEGUI::System::getSingleton().injectKeyUp(event.key.keysym.scancode);
+ }
+ break;
case SDL_MOUSEBUTTONDOWN:
switch(event.button.button) {
case SDL_BUTTON_LEFT:
@@ -259,28 +290,30 @@ void Scene::render() {
float forward = 0;
float right = 0;
bool moved = false;
- if(keystate[SDLK_w]) {
- moved = true;
- forward++;
- }
- if(keystate[SDLK_s]) {
- moved = true;
- forward--;
- }
- if(keystate[SDLK_a]) {
- moved = true;
- right--;
- }
- if(keystate[SDLK_d]) {
- moved = true;
- right++;
- }
- if(keystate[SDLK_q])
- pos.y -= 0.002*steps*(keystate[SDLK_LSHIFT]?10:1);
- if(keystate[SDLK_e])
- pos.y += 0.002*steps*(keystate[SDLK_LSHIFT]?10:1);
- if(moved && (forward || right)) {
- move(forward, right, steps*(keystate[SDLK_LSHIFT]?10:1));
+ if(!dialog) {
+ if(keystate[SDLK_w]) {
+ moved = true;
+ forward++;
+ }
+ if(keystate[SDLK_s]) {
+ moved = true;
+ forward--;
+ }
+ if(keystate[SDLK_a]) {
+ moved = true;
+ right--;
+ }
+ if(keystate[SDLK_d]) {
+ moved = true;
+ right++;
+ }
+ if(keystate[SDLK_q])
+ pos.y -= 0.002*steps*(keystate[SDLK_LSHIFT]?10:1);
+ if(keystate[SDLK_e])
+ pos.y += 0.002*steps*(keystate[SDLK_LSHIFT]?10:1);
+ if(moved && (forward || right)) {
+ move(forward, right, steps*(keystate[SDLK_LSHIFT]?10:1));
+ }
}
std::string move_str;
@@ -464,8 +497,17 @@ void Scene::render() {
font->Render(selected->str().c_str());
}*/
- if(dialog && tool)
- tool->render_gui();
+ GUI::pre_render();
+
+ if(tool && dialog) {
+ tool->gui_update();
+ }
+
+ if(console->showing()) {
+ console->update();
+ }
+
+ GUI::render();
SDL_GL_SwapBuffers();
}