summaryrefslogtreecommitdiff
path: root/scene.cpp
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2011-04-18 19:35:48 +0200
committerJon Bergli Heier <snakebite@jvnv.net>2011-04-18 19:35:48 +0200
commit55e76bdaafa1e2a94fbd717335c1c7bd8c8fc156 (patch)
treecb9e0b4a9dd9f069098fead2f1b0fd0dd7311a62 /scene.cpp
parent0986cf8f33df8926dd8da67f98ed18f696141313 (diff)
Basic tool implementation.
Diffstat (limited to 'scene.cpp')
-rw-r--r--scene.cpp36
1 files changed, 24 insertions, 12 deletions
diff --git a/scene.cpp b/scene.cpp
index f994627..6cb6cc7 100644
--- a/scene.cpp
+++ b/scene.cpp
@@ -22,6 +22,7 @@ Scene::Scene() {
do_select = false;
show_selection = false;
dialog = false;
+ tool = NULL;
/* setup shader programs */
GLVertexShader terrain_vertex("shaders/terrain_vertex.glsl");
@@ -63,14 +64,15 @@ Scene::Scene() {
font = new FTTextureFont("fonts/VeraMono.ttf");
font->FaceSize(10);
- gui = new GUI();
+ GUI::init();
}
Scene::~Scene() {
+ if(tool)
+ delete tool;
if(qt)
delete qt;
delete font;
- delete gui;
}
void Scene::lookat() {
@@ -144,6 +146,9 @@ void Scene::update() {
void Scene::events() {
SDL_Event event;
while(SDL_PollEvent(&event)) {
+ if(tool && !dialog && tool->handle_event(event, selected))
+ continue;
+
switch(event.type) {
case SDL_QUIT:
running = false;
@@ -151,7 +156,11 @@ void Scene::events() {
case SDL_KEYDOWN:
switch(event.key.keysym.sym) {
case SDLK_ESCAPE:
- running = false;
+ if(tool) {
+ delete tool;
+ tool = NULL;
+ } else
+ running = false;
break;
case SDLK_g:
grid = !grid;
@@ -169,7 +178,12 @@ void Scene::events() {
update();
break;
case SDLK_TAB:
- dialog = !dialog;
+ dialog = !dialog && tool;
+ break;
+ case SDLK_1:
+ if(tool) delete tool;
+ tool = new RaiseTool(qt);
+ break;
default:
break;
}
@@ -206,16 +220,10 @@ void Scene::events() {
case SDL_BUTTON_WHEELUP:
if(dialog)
CEGUI::System::getSingleton().injectMouseWheelChange(1);
- else
- qt->raise(selected.x, selected.z, gui->radius_sb->getScrollPosition(), gui->focus_sb->getScrollPosition(),
- gui->strength_sb->getScrollPosition());
break;
case SDL_BUTTON_WHEELDOWN:
if(dialog)
CEGUI::System::getSingleton().injectMouseWheelChange(-1);
- else
- qt->raise(selected.x, selected.z, gui->radius_sb->getScrollPosition(), gui->focus_sb->getScrollPosition(),
- -gui->strength_sb->getScrollPosition());
break;
}
break;
@@ -413,14 +421,18 @@ void Scene::render() {
font->Render(move_str.c_str());
glTranslatef(0, -height, 0);
font->Render(selected.str().c_str());
+ if(tool) {
+ glTranslatef(0, -height, 0);
+ font->Render((boost::format("Tool: %s") % tool->get_name()).str().c_str());
+ }
/*if(selected) {
glTranslatef(0, height, 0);
//font->Render((boost::format("(%s %s %s %s)") % selected->a->str() % selected->b->str() % selected->c->str() % selected->d->str()).str().c_str());
font->Render(selected->str().c_str());
}*/
- if(dialog)
- gui->render();
+ if(dialog && tool)
+ tool->render_gui();
SDL_GL_SwapBuffers();
}