From: <sv...@ww...> - 2006-11-01 21:04:26
|
Author: stormbringer Date: 2006-11-01 13:04:20 -0800 (Wed, 01 Nov 2006) New Revision: 2003 Modified: trunk/csp/cspsim/GameScreen.cpp trunk/csp/cspsim/SConscript trunk/csp/cspsim/StateStack.h trunk/csp/cspsim/VirtualScene.cpp trunk/csp/cspsim/VirtualScene.h Log: Introduce GUI system Browse at: https://www.zerobar.net/viewcvs/viewcvs.cgi?view=rev&rev=2003 Modified: trunk/csp/cspsim/GameScreen.cpp =================================================================== --- trunk/csp/cspsim/GameScreen.cpp 2006-11-01 21:02:07 UTC (rev 2002) +++ trunk/csp/cspsim/GameScreen.cpp 2006-11-01 21:04:20 UTC (rev 2003) @@ -35,6 +35,8 @@ #include <csp/cspsim/views/CameraAgent.h> #include <csp/cspsim/views/CameraCommand.h> #include <csp/cspsim/views/View.h> +#include <csp/cspsim/wf/WindowManager.h> +#include <csp/cspsim/windows/QuitResume.h> #include <csp/csplib/util/FileUtility.h> #include <csp/csplib/util/Log.h> @@ -287,7 +289,11 @@ } void GameScreen::on_Quit() { - CSPSim::theSim->quit(); + wf::WindowManager* manager = CSPSim::theSim->getScene()->getWindowManager(); + if(!manager->windowIsOpen<windows::QuitResume>()) { + Ref<wf::Window> quitResumeWindow = new windows::QuitResume; + manager->show(quitResumeWindow.get()); + } } void GameScreen::on_Pause() { Modified: trunk/csp/cspsim/SConscript =================================================================== --- trunk/csp/cspsim/SConscript 2006-11-01 21:02:07 UTC (rev 2002) +++ trunk/csp/cspsim/SConscript 2006-11-01 21:04:20 UTC (rev 2003) @@ -371,6 +371,21 @@ 'views/InternalView.h', 'views/View.cpp', 'views/View.h', + + 'wf/Button.cpp', + 'wf/Button.h', + 'wf/Control.cpp', + 'wf/Control.h', + 'wf/Window.cpp', + 'wf/Window.h', + 'wf/WindowManager.cpp', + 'wf/WindowManager.h', + + 'wf/themes/Default.cpp', + 'wf/themes/Default.h', + + 'windows/QuitResume.cpp', + 'windows/QuitResume.h', ], deps = ['csplib', 'opengl', 'osg', 'sdl', 'sound']) Modified: trunk/csp/cspsim/StateStack.h =================================================================== --- trunk/csp/cspsim/StateStack.h 2006-11-01 21:02:07 UTC (rev 2002) +++ trunk/csp/cspsim/StateStack.h 2006-11-01 21:04:20 UTC (rev 2003) @@ -34,6 +34,10 @@ #include <map> #include <vector> +#ifdef _WIN32 +#include <assert.h> +#endif + CSP_NAMESPACE // This class duplicates some of the code in osg::State to track cumulative Modified: trunk/csp/cspsim/VirtualScene.cpp =================================================================== --- trunk/csp/cspsim/VirtualScene.cpp 2006-11-01 21:02:07 UTC (rev 2002) +++ trunk/csp/cspsim/VirtualScene.cpp 2006-11-01 21:04:20 UTC (rev 2003) @@ -50,6 +50,8 @@ #include <csp/cspsim/theater/FeatureGroup.h> #include <csp/cspsim/theater/FeatureSceneGroup.h> +#include <csp/cspsim/wf/WindowManager.h> + #include <csp/csplib/util/Log.h> #include <csp/csplib/data/Types.h> #include <csp/csplib/util/Math.h> @@ -444,6 +446,7 @@ createFarView(); createNearView(); createInfoView(); + createWindowView(); } osgUtil::SceneView *VirtualScene::makeSceneView(unsigned mask) { @@ -504,6 +507,22 @@ m_InfoView->setSceneData(m_InfoGroup.get()); } +wf::WindowManager* VirtualScene::getWindowManager() { + return m_WindowManager.get(); +} + +void VirtualScene::createWindowView() { + m_WindowView = makeSceneView(0); + m_WindowView->getRenderStage()->setClearMask(GL_DEPTH_BUFFER_BIT); + + // eye, center, up + osg::Matrix view_matrix; + view_matrix.makeLookAt(osg::Vec3(0, -200, 0.0), osg::Vec3(0.0, 0.0, 0.0), osg::Vec3(0, 0, 1)); + m_WindowView->setViewMatrix(view_matrix); + + m_WindowManager = new wf::WindowManager(m_WindowView.get()); +} + void VirtualScene::buildScene() { CSPLOG(INFO, APP) << "VirtualScene::buildScene() "; @@ -660,12 +679,19 @@ m_InfoView->draw(); } +void VirtualScene::drawWindowView() { + m_WindowView->update(); + m_WindowView->cull(); + m_WindowView->draw(); +} + int VirtualScene::drawScene() { CSPLOG(DEBUG, APP) << "VirtualScene::drawScene()..."; drawVeryFarView(); drawFarView(); drawNearView(); drawInfoView(); + drawWindowView(); if (m_Terrain.valid()) m_Terrain->endDraw(); return 1; } @@ -1019,6 +1045,9 @@ } bool VirtualScene::pick(int x, int y) { + if(m_WindowManager->pick(x, y)) + return true; + if (m_NearObjectGroup->getNumChildren() > 0) { assert(m_NearObjectGroup->getNumChildren() == 1); osg::Vec3 var_near; Modified: trunk/csp/cspsim/VirtualScene.h =================================================================== --- trunk/csp/cspsim/VirtualScene.h 2006-11-01 21:02:07 UTC (rev 2002) +++ trunk/csp/cspsim/VirtualScene.h 2006-11-01 21:04:20 UTC (rev 2003) @@ -53,6 +53,9 @@ class FeatureGroup; class Sky; +namespace wf { + class WindowManager; +} /** * The purpose of this simple class is to provide a new opengl context id @@ -150,6 +153,8 @@ bool pick(int x, int y); + wf::WindowManager* getWindowManager(); + void drawPlayerInterface(); osg::Group *getInfoGroup(); @@ -181,11 +186,13 @@ void createFarView(); void createNearView(); void createInfoView(); + void createWindowView(); void drawVeryFarView(); void drawFarView(); void drawNearView(); void drawInfoView(); + void drawWindowView(); protected: void _updateFog(Vector3 const &lookPos, Vector3 const &eyePos); @@ -196,6 +203,7 @@ osg::ref_ptr<osgUtil::SceneView> m_NearView; osg::ref_ptr<osgUtil::SceneView> m_FarView; osg::ref_ptr<osgUtil::SceneView> m_VeryFarView; + osg::ref_ptr<osgUtil::SceneView> m_WindowView; osg::ref_ptr<osg::State> m_GlobalState; osg::ref_ptr<osg::StateSet> m_GlobalStateSet; @@ -203,6 +211,8 @@ osg::ref_ptr<osg::FrameStamp> m_FrameStamp; Ref<ContextIDFactory> m_ContextIDFactory; + + Ref<wf::WindowManager> m_WindowManager; float m_ViewDistance; float m_ViewAngle; |