From 55e76bdaafa1e2a94fbd717335c1c7bd8c8fc156 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Mon, 18 Apr 2011 19:35:48 +0200 Subject: Basic tool implementation. --- scene.cpp | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) (limited to 'scene.cpp') 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(); } -- cgit v1.2.3