From: <vo...@us...> - 2008-10-19 08:02:30
|
Revision: 887 http://opde.svn.sourceforge.net/opde/?rev=887&view=rev Author: volca Date: 2008-10-19 08:02:20 +0000 (Sun, 19 Oct 2008) Log Message: ----------- A sane default value for the startingpoint object id Modified Paths: -------------- trunk/src/main/GamePlayState.cpp Modified: trunk/src/main/GamePlayState.cpp =================================================================== --- trunk/src/main/GamePlayState.cpp 2008-10-19 07:58:58 UTC (rev 886) +++ trunk/src/main/GamePlayState.cpp 2008-10-19 08:02:20 UTC (rev 887) @@ -99,6 +99,8 @@ mPortalOverlay = OverlayManager::getSingleton().getByName("Opde/OpdeDebugOverlay"); mShadows = true; + + StartingPointObjID = 0; } GamePlayState::~GamePlayState() { @@ -448,7 +450,7 @@ void GamePlayState::onLinkPlayerFactoryMsg(const LinkChangeMsg& msg) { switch (msg.change) { - case PROP_ADDED : { + case LNK_ADDED : { LOG_INFO("GamePlayState: Found StartingPoint"); // get the Link ref. LinkPtr l = mPlayerFactoryRelation->getLink(msg.linkID); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-11-20 09:48:56
|
Revision: 988 http://opde.svn.sourceforge.net/opde/?rev=988&view=rev Author: volca Date: 2008-11-20 09:48:51 +0000 (Thu, 20 Nov 2008) Log Message: ----------- Extra debug timers displayed Modified Paths: -------------- trunk/src/main/GamePlayState.cpp Modified: trunk/src/main/GamePlayState.cpp =================================================================== --- trunk/src/main/GamePlayState.cpp 2008-11-20 09:46:29 UTC (rev 987) +++ trunk/src/main/GamePlayState.cpp 2008-11-20 09:48:51 UTC (rev 988) @@ -1,485 +1,504 @@ -/****************************************************************************** - * - * This file is part of openDarkEngine project - * Copyright (C) 2005-2006 openDarkEngine team - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id$ - * - *****************************************************************************/ - -#include "config.h" - -#include "GamePlayState.h" -#include "OIS.h" -#include "GameStateManager.h" - -#include "GameLoadState.h" -#include "logger.h" -#include "integers.h" - -#include "DarkCamera.h" - -#include <OgreRenderWindow.h> -#include <OgreOverlayElement.h> -#include <OgreStringConverter.h> - -using namespace Ogre; -using namespace OIS; - -namespace Opde { - - template<> GamePlayState* Singleton<GamePlayState>::ms_Singleton = 0; - - GamePlayState::GamePlayState() : mSceneMgr(NULL), mToLoadScreen(true), mDebugOverlay(NULL) { - /// Register as a command listener, so we can load different levels - Opde::ConsoleBackend::getSingleton().registerCommandListener("load", dynamic_cast<ConsoleCommandListener*>(this)); - Opde::ConsoleBackend::getSingleton().setCommandHint("load", "Loads a specified mission file"); - Opde::ConsoleBackend::getSingleton().registerCommandListener("fps", dynamic_cast<ConsoleCommandListener*>(this)); - Opde::ConsoleBackend::getSingleton().setCommandHint("fps", "Dump FPS stats"); - - mRotateSpeed = 36; - mMoveSpeed = 50; - mRotateYFactor = 1; - - mShadows = false; - mSceneDisplay = false; - - // Try to remap the parameters with those listed in the configuration - mConfigService = GET_SERVICE(ConfigService); - - if (mConfigService->hasParam("move_speed")) - mMoveSpeed = mConfigService->getParam("move_speed").toFloat(); - - if (mConfigService->hasParam("mouse_speed")) - mRotateSpeed = mConfigService->getParam("mouse_speed").toFloat(); - - if (mConfigService->hasParam("mouse_invert")) - mRotateYFactor = mConfigService->getParam("mouse_invert").toFloat(); - - mTranslateVector = Vector3::ZERO; - mRotX = 0; - mRotY = 0; - - mForward = false; - mBackward = false; - mLeft = false; - mRight = false; - - mScreenShot = false; - mSceneDisplay = false; - mPortalDisplay = false; - mDebug = false; - - mSceneDetailIndex = 0; - mNumScreenShots = 0; - - mRoot = Ogre::Root::getSingletonPtr(); - mOverlayMgr = OverlayManager::getSingletonPtr(); - - mConsole = new ConsoleFrontend(); - mConsole->setActive(false); - - mDebugOverlay = OverlayManager::getSingleton().getByName("Opde/DebugOverlay"); - - // Portal stats overlay - mPortalOverlay = OverlayManager::getSingleton().getByName("Opde/OpdeDebugOverlay"); - - mShadows = true; - - StartingPointObjID = 0; - } - - GamePlayState::~GamePlayState() { - delete mConsole; - } - - void GamePlayState::start() { - LOG_INFO("GamePlayState: Starting"); - PropertyServicePtr ps = GET_SERVICE(PropertyService); - PropertyGroup* posPG = ps->getPropertyGroup("Position"); - - if (posPG == NULL) - OPDE_EXCEPT("Could not get Position property group. Not defined. Fatal", "GamePlayState::start"); - - LOG_DEBUG("Starting Point object id : %d", StartingPointObjID); - - DVariant spoint; - posPG->get(StartingPointObjID, "position", spoint); - - Vector3 StartingPoint(0,0,0); - - if (spoint.type() == DVariant::DV_VECTOR) - StartingPoint = spoint.toVector(); - - LOG_DEBUG("Starting Point position : %f %f %f", StartingPoint.x, StartingPoint.y, StartingPoint.z); - -// std::string tmp = PropertyGroup->get(StartingPointObjID, "SymName").toString(); - mSceneMgr = mRoot->getSceneManager( "DarkSceneManager" ); - RenderServicePtr renderSrv = GET_SERVICE(RenderService); - - mCamera = renderSrv->getDefaultCamera(); - mViewport = renderSrv->getDefaultViewport(); - mWindow = renderSrv->getRenderWindow(); - - mSceneMgr->clearSpecialCaseRenderQueues(); - mSceneMgr->setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE); - - mCamera->setNearClipDistance(0.5); - mCamera->setFarClipDistance(4000); - - // Also change position, and set Quake-type orientation - ViewPoint vp = mSceneMgr->getSuggestedViewpoint(true); - mCamera->setPosition(vp.position); - - if (StartingPointObjID != 0) - mCamera->setPosition(StartingPoint); - - mCamera->pitch(Degree(90)); - mCamera->rotate(vp.orientation); - - // Don't yaw along variable axis, causes leaning - mCamera->setFixedYawAxis(true, Vector3::UNIT_Z); - - - // Thiefy FOV - mCamera->setFOVy(Degree(70)); - - if (mConfigService->hasParam("debug")) { - if (mConfigService->getParam("debug") == true) { - // debug overlay - mDebugOverlay->show(); - - // Portal stats overlay - mPortalOverlay->show(); - - mDebug = true; - } - } - - // hidden as default - mConsole->setActive(false); - - mWindow->resetStatistics(); - - mToLoadScreen = false; - - LOG_INFO("GamePlayState: Started"); - } - - void GamePlayState::exit() { - LOG_INFO("GamePlayState: Exiting"); - - // mConsole->setActive(false); - - mPortalOverlay->hide(); - mDebugOverlay->hide(); - mConsole->setActive(false); - mConsole->update(1); // to hide the console while exiting - - if (mToLoadScreen) { - pushState(GameLoadState::getSingletonPtr()); - mToLoadScreen = false; - } - - LOG_INFO("GamePlayState: Exited"); - } - - void GamePlayState::suspend() { - LOG_INFO("GamePlayState: Suspend?!"); - mToLoadScreen = false; - } - - void GamePlayState::resume() { - LOG_INFO("GamePlayState: Resume?!"); - mToLoadScreen = false; - } - - void GamePlayState::update(unsigned long timePassed) { - if (timePassed == 0) { - mMoveScale = 0.1f; - mRotScale = 0.1f; - } else { - mMoveScale = mMoveSpeed * timePassed / 1000.0f; - mRotScale = mRotateSpeed * timePassed / 1000.0f; - } - - // Quick hack. Let the camera move: - if (mForward) - mTranslateVector.z = -mMoveScale; - - if (mBackward) - mTranslateVector.z = mMoveScale; - - if (mLeft) - mTranslateVector.x = -mMoveScale; - - if (mRight) - mTranslateVector.x = mMoveScale; - - mCamera->yaw(mRotX * mRotScale); - mCamera->pitch(mRotY * mRotScale); - mCamera->moveRelative(mTranslateVector); - - mTranslateVector = Vector3::ZERO; - mRotX = 0; - mRotY = 0; - - if (mSceneDisplay) { - mSceneDetailIndex = (mSceneDetailIndex+1)%2 ; // I Do not need points for now - switch(mSceneDetailIndex) { - case 0 : mCamera->setPolygonMode(PM_SOLID) ; break ; - case 1 : mCamera->setPolygonMode(PM_WIREFRAME) ; break ; - //case 2 : mCamera->setPolygonMode(PM_POINTS) ; break ; - } - mSceneDisplay = false; - } - - if (mPortalDisplay) { - // reuse - mSceneMgr->getOption("ShowPortals", &mPortalDisplay); - mPortalDisplay = !mPortalDisplay; - mSceneMgr->setOption("ShowPortals", &mPortalDisplay); - - mPortalDisplay = false; - } - - if (mScreenShot) { - char tmp[20]; - sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots); - RenderWindow* w = Ogre::Root::getSingleton().getAutoCreatedWindow(); - - w->writeContentsToFile(tmp); - - mScreenShot = false; - } - - mConsole->update(timePassed); - - if (mDebug) { - // update stats when necessary - try { - - // Temporary: Debug Overlay - static String currFps = "Current FPS: "; - static String avgFps = "Average FPS: "; - static String bestFps = "Best FPS: "; - static String worstFps = "Worst FPS: "; - static String tris = "Triangle Count: "; - static String batches = "Batch Count: "; - - OverlayElement* guiAvg = OverlayManager::getSingleton().getOverlayElement("Opde/AverageFps"); - OverlayElement* guiCurr = OverlayManager::getSingleton().getOverlayElement("Opde/CurrFps"); - OverlayElement* guiBest = OverlayManager::getSingleton().getOverlayElement("Opde/BestFps"); - OverlayElement* guiWorst = OverlayManager::getSingleton().getOverlayElement("Opde/WorstFps"); - - const RenderTarget::FrameStats& stats = mWindow->getStatistics(); - - guiAvg->setCaption(avgFps + StringConverter::toString(stats.avgFPS)); - guiCurr->setCaption(currFps + StringConverter::toString(stats.lastFPS)); - guiBest->setCaption(bestFps + StringConverter::toString(stats.bestFPS) - +" "+StringConverter::toString(stats.bestFrameTime)+" ms"); - guiWorst->setCaption(worstFps + StringConverter::toString(stats.worstFPS) - +" "+StringConverter::toString(stats.worstFrameTime)+" ms"); - - OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement("Opde/NumTris"); - guiTris->setCaption(tris + StringConverter::toString(stats.triangleCount)); - - OverlayElement* guiBatches = OverlayManager::getSingleton().getOverlayElement("Opde/NumBatches"); - guiBatches->setCaption(batches + StringConverter::toString(stats.batchCount)); - - // OverlayElement* guiDbg = OverlayManager::getSingleton().getOverlayElement("Core/DebugText"); - } - catch(...) - { - // ignore - } - - // update the portal statistics - try { - // Volca: I've disabled the timing reports, they need a patch of SM to work - OverlayElement* guibc = OverlayManager::getSingleton().getOverlayElement("Opde/BackCulls"); - OverlayElement* guiep = OverlayManager::getSingleton().getOverlayElement("Opde/EvalPorts"); - OverlayElement* guirc = OverlayManager::getSingleton().getOverlayElement("Opde/RendCells"); - OverlayElement* guitt = OverlayManager::getSingleton().getOverlayElement("Opde/TravTime"); - OverlayElement* guisr = OverlayManager::getSingleton().getOverlayElement("Opde/StaticRenderTime"); - - // Temporary: Debug Overlay - static String sbc = "Backface culls: "; - static String sep = "Evaluated portals: "; - static String src = "Rendered cells: "; - static String stt = "Traversal Time: "; - static String ssr = "Static Build Time: "; - - uint bculls = 0, eports = 0, rendc = 0, travtm = 0; - - unsigned long statbt; - - mSceneMgr->getOption("BackfaceCulls", &bculls); - - // mSceneMgr->getOption("CellsRendered", &rendc); - mSceneMgr->getOption("EvaluatedPortals", &eports); - // mSceneMgr->getOption("TraversalTime", &travtm); - mSceneMgr->getOption("StaticBuildTime", &statbt); - - travtm = static_cast<DarkCamera*>(mCamera)->getTraversalTime(); - rendc = static_cast<DarkCamera*>(mCamera)->getVisibleCellCount(); - - guibc->setCaption(sbc + StringConverter::toString(bculls)); - guiep->setCaption(sep + StringConverter::toString(eports)); - guirc->setCaption(src + StringConverter::toString(rendc)); - guitt->setCaption(stt + StringConverter::toString(travtm) + " ms"); - guisr->setCaption(ssr + StringConverter::toString(statbt) + " ms"); - } - catch(...) - { - // ignore - } - } - } - - bool GamePlayState::keyPressed( const OIS::KeyEvent &e ) { - if( e.key == KC_F12 ) { - mConsole->setActive(!mConsole->isActive()); - return true; - } - - if (!mConsole->injectKeyPress(e)) { - if(e.key == KC_W) { - mForward = true; - return true; - } else if(e.key == KC_S) { - mBackward = true; - return true; - } else if(e.key == KC_A) { - mLeft = true; - return true; - } else if(e.key == KC_D) { - mRight = true; - return true; - } else if (e.key == KC_SYSRQ || e.key == KC_F5) { - mScreenShot = true; - return true; - } else if (e.key == KC_O) { - mSceneDisplay = true; - return true; - } else if (e.key == KC_P) { - mPortalDisplay = true; - return true; - } else return true; - } else { - return true; - }; - } - - bool GamePlayState::keyReleased( const OIS::KeyEvent &e ) { - if (!mConsole->isActive()) { - if(e.key == KC_W) { - mForward = false; - return true; - } else if(e.key == KC_S) { - mBackward = false; - return true; - } else if(e.key == KC_A) { - mLeft = false; - return true; - } else if(e.key == KC_D) { - mRight = false; - return true; - } else if( e.key == KC_ESCAPE ) { - requestTermination(); - return true; - } else if (e.key == KC_I) { - mShadows = !mShadows; - - if (mShadows) - mSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_MODULATIVE); - else - mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE); - } - - return true; - } else return true; - } - - bool GamePlayState::mouseMoved( const OIS::MouseEvent &e ) { - mRotX -= Degree( e.state.X.rel * 20.00); - // use Y axis invert - mRotY -= Degree( e.state.Y.rel * 20.00 * mRotateYFactor); - return false; - } - - bool GamePlayState::mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id ) { - return false; - } - - bool GamePlayState::mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id ) { - return false; - } - - void GamePlayState::commandExecuted(std::string command, std::string parameters) { - std::cerr << "command " << command << " " << parameters << std::endl; - - if (command == "load") { - // specify the mission file to load by the load state, then switch to the load state - mConfigService->setParam("mission", parameters); - mToLoadScreen = true; - popState(); - } else if (command == "fps") { - const RenderTarget::FrameStats& stats = mWindow->getStatistics(); - - LOG_INFO("Average FPS : %10.2f", stats.avgFPS); - LOG_INFO("Last FPS : %10.2f", stats.lastFPS); - LOG_INFO("Worst FPS : %10.2f", stats.worstFPS); - } - } - - void GamePlayState::onLinkPlayerFactoryMsg(const LinkChangeMsg& msg) { - switch (msg.change) { - case LNK_ADDED : { - LOG_INFO("GamePlayState: Found StartingPoint"); - // get the Link ref. - LinkPtr l = mPlayerFactoryRelation->getLink(msg.linkID); - StartingPointObjID = l->src(); - break; - } - } - } - - void GamePlayState::bootstrapFinished() { - mLinkService = GET_SERVICE(LinkService); - Relation::ListenerPtr metaPropCallback = - new ClassCallback<LinkChangeMsg, GamePlayState>(this, &GamePlayState::onLinkPlayerFactoryMsg); - - mPlayerFactoryRelation = mLinkService->getRelation("PlayerFactory"); - - if (mPlayerFactoryRelation.isNull()) - OPDE_EXCEPT("MetaProp relation not found. Fatal.", "InheritService::init"); - - mPlayerFactoryListenerID = mPlayerFactoryRelation->registerListener(metaPropCallback); - LOG_INFO("GamePlayState::bootstrapFinished() - done"); - } - - GamePlayState& GamePlayState::getSingleton() { - assert(ms_Singleton); return *ms_Singleton; - } - - GamePlayState* GamePlayState::getSingletonPtr() { - return ms_Singleton; - } - -} - +/****************************************************************************** + * + * This file is part of openDarkEngine project + * Copyright (C) 2005-2006 openDarkEngine team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * $Id$ + * + *****************************************************************************/ + +#include "config.h" + +#include "GamePlayState.h" +#include "OIS.h" +#include "GameStateManager.h" + +#include "GameLoadState.h" +#include "logger.h" +#include "integers.h" + +#include "DarkCamera.h" + +#include <OgreRenderWindow.h> +#include <OgreOverlayElement.h> +#include <OgreStringConverter.h> + +using namespace Ogre; +using namespace OIS; + +namespace Opde { + + template<> GamePlayState* Singleton<GamePlayState>::ms_Singleton = 0; + + GamePlayState::GamePlayState() : mSceneMgr(NULL), mToLoadScreen(true), mDebugOverlay(NULL) { + /// Register as a command listener, so we can load different levels + Opde::ConsoleBackend::getSingleton().registerCommandListener("load", dynamic_cast<ConsoleCommandListener*>(this)); + Opde::ConsoleBackend::getSingleton().setCommandHint("load", "Loads a specified mission file"); + Opde::ConsoleBackend::getSingleton().registerCommandListener("fps", dynamic_cast<ConsoleCommandListener*>(this)); + Opde::ConsoleBackend::getSingleton().setCommandHint("fps", "Dump FPS stats"); + + mRotateSpeed = 36; + mMoveSpeed = 50; + mRotateYFactor = 1; + + mShadows = false; + mSceneDisplay = false; + + // Try to remap the parameters with those listed in the configuration + mConfigService = GET_SERVICE(ConfigService); + + if (mConfigService->hasParam("move_speed")) + mMoveSpeed = mConfigService->getParam("move_speed").toFloat(); + + if (mConfigService->hasParam("mouse_speed")) + mRotateSpeed = mConfigService->getParam("mouse_speed").toFloat(); + + if (mConfigService->hasParam("mouse_invert")) + mRotateYFactor = mConfigService->getParam("mouse_invert").toFloat(); + + mTranslateVector = Vector3::ZERO; + mRotX = 0; + mRotY = 0; + + mForward = false; + mBackward = false; + mLeft = false; + mRight = false; + + mScreenShot = false; + mSceneDisplay = false; + mPortalDisplay = false; + mDebug = false; + + mSceneDetailIndex = 0; + mNumScreenShots = 0; + + mRoot = Ogre::Root::getSingletonPtr(); + mOverlayMgr = OverlayManager::getSingletonPtr(); + + mConsole = new ConsoleFrontend(); + mConsole->setActive(false); + + mDebugOverlay = OverlayManager::getSingleton().getByName("Opde/DebugOverlay"); + + // Portal stats overlay + mPortalOverlay = OverlayManager::getSingleton().getByName("Opde/OpdeDebugOverlay"); + + mShadows = true; + + StartingPointObjID = 0; + } + + GamePlayState::~GamePlayState() { + delete mConsole; + } + + void GamePlayState::start() { + LOG_INFO("GamePlayState: Starting"); + PropertyServicePtr ps = GET_SERVICE(PropertyService); + PropertyGroup* posPG = ps->getPropertyGroup("Position"); + + if (posPG == NULL) + OPDE_EXCEPT("Could not get Position property group. Not defined. Fatal", "GamePlayState::start"); + + LOG_DEBUG("Starting Point object id : %d", StartingPointObjID); + + DVariant spoint; + posPG->get(StartingPointObjID, "position", spoint); + + // Medsci1.mis position with some damn bad performance under GL + // Vector3 StartingPoint(-8.41809, -163.39, 1.3465); + + if (spoint.type() == DVariant::DV_VECTOR) + StartingPoint = spoint.toVector(); + + LOG_DEBUG("Starting Point position : %f %f %f", StartingPoint.x, StartingPoint.y, StartingPoint.z); + +// std::string tmp = PropertyGroup->get(StartingPointObjID, "SymName").toString(); + mSceneMgr = mRoot->getSceneManager( "DarkSceneManager" ); + RenderServicePtr renderSrv = GET_SERVICE(RenderService); + + mCamera = renderSrv->getDefaultCamera(); + mViewport = renderSrv->getDefaultViewport(); + mWindow = renderSrv->getRenderWindow(); + + mSceneMgr->clearSpecialCaseRenderQueues(); + mSceneMgr->setSpecialCaseRenderQueueMode(SceneManager::SCRQM_EXCLUDE); + + mCamera->setNearClipDistance(0.5); + mCamera->setFarClipDistance(4000); + + // Also change position, and set Quake-type orientation + ViewPoint vp = mSceneMgr->getSuggestedViewpoint(true); + mCamera->setPosition(vp.position); + + if (StartingPointObjID != 0) + mCamera->setPosition(StartingPoint); + + mCamera->pitch(Degree(90)); + mCamera->rotate(vp.orientation); + + // Don't yaw along variable axis, causes leaning + mCamera->setFixedYawAxis(true, Vector3::UNIT_Z); + + // Medsci1.mis Direction with some damn bad performance (in combination with the pos above) + // mCamera->setDirection(-0.398078, 0.825408, -0.400297); + + // Thiefy FOV + mCamera->setFOVy(Degree(70)); + + if (mConfigService->hasParam("debug")) { + if (mConfigService->getParam("debug") == true) { + // debug overlay + mDebugOverlay->show(); + + // Portal stats overlay + mPortalOverlay->show(); + + mDebug = true; + } + } + + // hidden as default + mConsole->setActive(false); + + mWindow->resetStatistics(); + + mToLoadScreen = false; + + LOG_INFO("GamePlayState: Started"); + } + + void GamePlayState::exit() { + LOG_INFO("GamePlayState: Exiting"); + + // mConsole->setActive(false); + + // Debugging pos/dir writes. For performance profiling + // std::cerr << mCamera->getPosition() << std::endl; + // std::cerr << mCamera->getDirection() << std::endl; + + mPortalOverlay->hide(); + mDebugOverlay->hide(); + mConsole->setActive(false); + mConsole->update(1); // to hide the console while exiting + + if (mToLoadScreen) { + pushState(GameLoadState::getSingletonPtr()); + mToLoadScreen = false; + } + + LOG_INFO("GamePlayState: Exited"); + } + + void GamePlayState::suspend() { + LOG_INFO("GamePlayState: Suspend?!"); + mToLoadScreen = false; + } + + void GamePlayState::resume() { + LOG_INFO("GamePlayState: Resume?!"); + mToLoadScreen = false; + } + + void GamePlayState::update(unsigned long timePassed) { + if (timePassed == 0) { + mMoveScale = 0.1f; + mRotScale = 0.1f; + } else { + mMoveScale = mMoveSpeed * timePassed / 1000.0f; + mRotScale = mRotateSpeed * timePassed / 1000.0f; + } + + // Quick hack. Let the camera move: + if (mForward) + mTranslateVector.z = -mMoveScale; + + if (mBackward) + mTranslateVector.z = mMoveScale; + + if (mLeft) + mTranslateVector.x = -mMoveScale; + + if (mRight) + mTranslateVector.x = mMoveScale; + + mCamera->yaw(mRotX * mRotScale); + mCamera->pitch(mRotY * mRotScale); + mCamera->moveRelative(mTranslateVector); + + mTranslateVector = Vector3::ZERO; + mRotX = 0; + mRotY = 0; + + if (mSceneDisplay) { + mSceneDetailIndex = (mSceneDetailIndex+1)%2 ; // I Do not need points for now + switch(mSceneDetailIndex) { + case 0 : mCamera->setPolygonMode(PM_SOLID) ; break ; + case 1 : mCamera->setPolygonMode(PM_WIREFRAME) ; break ; + //case 2 : mCamera->setPolygonMode(PM_POINTS) ; break ; + } + mSceneDisplay = false; + } + + if (mPortalDisplay) { + // reuse + mSceneMgr->getOption("ShowPortals", &mPortalDisplay); + mPortalDisplay = !mPortalDisplay; + mSceneMgr->setOption("ShowPortals", &mPortalDisplay); + + mPortalDisplay = false; + } + + if (mScreenShot) { + char tmp[20]; + sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots); + RenderWindow* w = Ogre::Root::getSingleton().getAutoCreatedWindow(); + + w->writeContentsToFile(tmp); + + mScreenShot = false; + } + + mConsole->update(timePassed); + + if (mDebug) { + // update stats when necessary + try { + + // Temporary: Debug Overlay + static String currFps = "Current FPS: "; + static String avgFps = "Average FPS: "; + static String bestFps = "Best FPS: "; + static String worstFps = "Worst FPS: "; + static String tris = "Triangle Count: "; + static String batches = "Batch Count: "; + + OverlayElement* guiAvg = OverlayManager::getSingleton().getOverlayElement("Opde/AverageFps"); + OverlayElement* guiCurr = OverlayManager::getSingleton().getOverlayElement("Opde/CurrFps"); + OverlayElement* guiBest = OverlayManager::getSingleton().getOverlayElement("Opde/BestFps"); + OverlayElement* guiWorst = OverlayManager::getSingleton().getOverlayElement("Opde/WorstFps"); + + const RenderTarget::FrameStats& stats = mWindow->getStatistics(); + + guiAvg->setCaption(avgFps + StringConverter::toString(stats.avgFPS)); + guiCurr->setCaption(currFps + StringConverter::toString(stats.lastFPS)); + guiBest->setCaption(bestFps + StringConverter::toString(stats.bestFPS) + +" "+StringConverter::toString(stats.bestFrameTime)+" ms"); + guiWorst->setCaption(worstFps + StringConverter::toString(stats.worstFPS) + +" "+StringConverter::toString(stats.worstFrameTime)+" ms"); + + OverlayElement* guiTris = OverlayManager::getSingleton().getOverlayElement("Opde/NumTris"); + guiTris->setCaption(tris + StringConverter::toString(stats.triangleCount)); + + OverlayElement* guiBatches = OverlayManager::getSingleton().getOverlayElement("Opde/NumBatches"); + guiBatches->setCaption(batches + StringConverter::toString(stats.batchCount)); + + // OverlayElement* guiDbg = OverlayManager::getSingleton().getOverlayElement("Core/DebugText"); + } + catch(...) + { + // ignore + } + + // update the portal statistics + try { + // Volca: I've disabled the timing reports, they need a patch of SM to work + OverlayElement* guibc = OverlayManager::getSingleton().getOverlayElement("Opde/BackCulls"); + OverlayElement* guiep = OverlayManager::getSingleton().getOverlayElement("Opde/EvalPorts"); + OverlayElement* guirc = OverlayManager::getSingleton().getOverlayElement("Opde/RendCells"); + OverlayElement* guitt = OverlayManager::getSingleton().getOverlayElement("Opde/TravTime"); + OverlayElement* guisr = OverlayManager::getSingleton().getOverlayElement("Opde/StaticRenderTime"); + OverlayElement* guivo = OverlayManager::getSingleton().getOverlayElement("Opde/VisibleObjectsTime"); + OverlayElement* guill = OverlayManager::getSingleton().getOverlayElement("Opde/LightListTime"); + OverlayElement* guisg = OverlayManager::getSingleton().getOverlayElement("Opde/SceneGraphTime"); + + // Temporary: Debug Overlay + static String sbc = "Backface culls: "; + static String sep = "Evaluated portals: "; + static String src = "Rendered cells: "; + static String stt = "Traversal Time: "; + static String ssr = "Static Build Time: "; + static String vot = "Visible obj. Time: "; + static String llt = "Light list. Time: "; + static String sgt = "Scene graph Time: "; + + uint bculls = 0, eports = 0, rendc = 0, travtm = 0; + + unsigned long statbt, fvot, lltime, sgtime; + + mSceneMgr->getOption("BackfaceCulls", &bculls); + + // mSceneMgr->getOption("CellsRendered", &rendc); + mSceneMgr->getOption("EvaluatedPortals", &eports); + // mSceneMgr->getOption("TraversalTime", &travtm); + mSceneMgr->getOption("StaticBuildTime", &statbt); + mSceneMgr->getOption("FindVisibleObjectsTime", &fvot); + mSceneMgr->getOption("LightListTime", &lltime); + mSceneMgr->getOption("SceneGraphTime", &sgtime); + + travtm = static_cast<DarkCamera*>(mCamera)->getTraversalTime(); + rendc = static_cast<DarkCamera*>(mCamera)->getVisibleCellCount(); + + guibc->setCaption(sbc + StringConverter::toString(bculls)); + guiep->setCaption(sep + StringConverter::toString(eports)); + guirc->setCaption(src + StringConverter::toString(rendc)); + guitt->setCaption(stt + StringConverter::toString(travtm) + " ms"); + guisr->setCaption(ssr + StringConverter::toString(statbt) + " ms"); + guivo->setCaption(vot + StringConverter::toString(fvot) + " ms"); + guill->setCaption(llt + StringConverter::toString(lltime) + " ms"); + guisg->setCaption(sgt + StringConverter::toString(sgtime) + " ms"); + } + catch(...) + { + // ignore + } + } + } + + bool GamePlayState::keyPressed( const OIS::KeyEvent &e ) { + if( e.key == KC_F12 ) { + mConsole->setActive(!mConsole->isActive()); + return true; + } + + if (!mConsole->injectKeyPress(e)) { + if(e.key == KC_W) { + mForward = true; + return true; + } else if(e.key == KC_S) { + mBackward = true; + return true; + } else if(e.key == KC_A) { + mLeft = true; + return true; + } else if(e.key == KC_D) { + mRight = true; + return true; + } else if (e.key == KC_SYSRQ || e.key == KC_F5) { + mScreenShot = true; + return true; + } else if (e.key == KC_O) { + mSceneDisplay = true; + return true; + } else if (e.key == KC_P) { + mPortalDisplay = true; + return true; + } else return true; + } else { + return true; + }; + } + + bool GamePlayState::keyReleased( const OIS::KeyEvent &e ) { + if (!mConsole->isActive()) { + if(e.key == KC_W) { + mForward = false; + return true; + } else if(e.key == KC_S) { + mBackward = false; + return true; + } else if(e.key == KC_A) { + mLeft = false; + return true; + } else if(e.key == KC_D) { + mRight = false; + return true; + } else if( e.key == KC_ESCAPE ) { + requestTermination(); + return true; + } else if (e.key == KC_I) { + mShadows = !mShadows; + + if (mShadows) + mSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_MODULATIVE); + else + mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE); + } + + return true; + } else return true; + } + + bool GamePlayState::mouseMoved( const OIS::MouseEvent &e ) { + mRotX -= Degree( e.state.X.rel * 20.00); + // use Y axis invert + mRotY -= Degree( e.state.Y.rel * 20.00 * mRotateYFactor); + return false; + } + + bool GamePlayState::mousePressed( const OIS::MouseEvent &e, OIS::MouseButtonID id ) { + return false; + } + + bool GamePlayState::mouseReleased( const OIS::MouseEvent &e, OIS::MouseButtonID id ) { + return false; + } + + void GamePlayState::commandExecuted(std::string command, std::string parameters) { + std::cerr << "command " << command << " " << parameters << std::endl; + + if (command == "load") { + // specify the mission file to load by the load state, then switch to the load state + mConfigService->setParam("mission", parameters); + mToLoadScreen = true; + popState(); + } else if (command == "fps") { + const RenderTarget::FrameStats& stats = mWindow->getStatistics(); + + LOG_INFO("Average FPS : %10.2f", stats.avgFPS); + LOG_INFO("Last FPS : %10.2f", stats.lastFPS); + LOG_INFO("Worst FPS : %10.2f", stats.worstFPS); + } + } + + void GamePlayState::onLinkPlayerFactoryMsg(const LinkChangeMsg& msg) { + switch (msg.change) { + case LNK_ADDED : { + LOG_INFO("GamePlayState: Found StartingPoint"); + // get the Link ref. + LinkPtr l = mPlayerFactoryRelation->getLink(msg.linkID); + StartingPointObjID = l->src(); + break; + } + } + } + + void GamePlayState::bootstrapFinished() { + mLinkService = GET_SERVICE(LinkService); + Relation::ListenerPtr metaPropCallback = + new ClassCallback<LinkChangeMsg, GamePlayState>(this, &GamePlayState::onLinkPlayerFactoryMsg); + + mPlayerFactoryRelation = mLinkService->getRelation("PlayerFactory"); + + if (mPlayerFactoryRelation.isNull()) + OPDE_EXCEPT("MetaProp relation not found. Fatal.", "InheritService::init"); + + mPlayerFactoryListenerID = mPlayerFactoryRelation->registerListener(metaPropCallback); + LOG_INFO("GamePlayState::bootstrapFinished() - done"); + } + + GamePlayState& GamePlayState::getSingleton() { + assert(ms_Singleton); return *ms_Singleton; + } + + GamePlayState* GamePlayState::getSingletonPtr() { + return ms_Singleton; + } + +} + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2009-02-19 18:09:43
|
Revision: 1143 http://opde.svn.sourceforge.net/opde/?rev=1143&view=rev Author: volca Date: 2009-02-19 18:09:34 +0000 (Thu, 19 Feb 2009) Log Message: ----------- some changes to the testing code Modified Paths: -------------- trunk/src/main/GamePlayState.cpp Modified: trunk/src/main/GamePlayState.cpp =================================================================== --- trunk/src/main/GamePlayState.cpp 2009-02-19 18:07:41 UTC (rev 1142) +++ trunk/src/main/GamePlayState.cpp 2009-02-19 18:09:34 UTC (rev 1143) @@ -191,19 +191,27 @@ mSceneMgr->setAmbientLight(ColourValue(1, 1, 1)); TextureAtlas* ta = mDrawService->createAtlas(); + TextureAtlas* ta1 = mDrawService->createAtlas(); + DrawSource* ds = ta->createDrawSource("access.pcx", "General"); // testing what happens when a font is loaded (e.g. where it segv's) + mDrawService->setFontPalette(Ogre::ManualFonFileLoader::ePT_PCX, "fontpal.pcx", "General"); FontDrawSource* fds = mDrawService->loadFont(ta, "fonts/MAINFONT.FON" , "General"); FontDrawSource* fds1 = mDrawService->loadFont(ta, "fonts/MAINAA.FON" , "General"); + FontDrawSource* fds2 = mDrawService->loadFont(ta1, "fonts/keyfonta.FON" , "General"); ta->build(); + ta1->build(); RenderedLabel* rl = mDrawService->createRenderedLabel(fds, "OpenDarkEngine test"); RenderedLabel* rl2 = mDrawService->createRenderedLabel(fds1, "TEST 2"); - rl->setPosition(50, 100); - rl2->setPosition(50, 120); + RenderedLabel* rl3 = mDrawService->createRenderedLabel(fds2, "OpenDarkEngine test 0123456789"); + rl->setPosition(250, 100); + rl2->setPosition(250, 120); + rl3->setPosition(250, 140); rl->setZOrder(2); rl2->setZOrder(2); + rl3->setZOrder(2); mRi = mDrawService->createRenderedImage(ds); @@ -215,6 +223,7 @@ dsh->addDrawOperation(mRi); dsh->addDrawOperation(rl); dsh->addDrawOperation(rl2); + dsh->addDrawOperation(rl3); dsh->setVisible(true); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2009-02-23 20:42:29
|
Revision: 1147 http://opde.svn.sourceforge.net/opde/?rev=1147&view=rev Author: volca Date: 2009-02-23 20:42:24 +0000 (Mon, 23 Feb 2009) Log Message: ----------- oops. Testing code-commented Modified Paths: -------------- trunk/src/main/GamePlayState.cpp Modified: trunk/src/main/GamePlayState.cpp =================================================================== --- trunk/src/main/GamePlayState.cpp 2009-02-23 17:05:20 UTC (rev 1146) +++ trunk/src/main/GamePlayState.cpp 2009-02-23 20:42:24 UTC (rev 1147) @@ -495,8 +495,9 @@ bool GamePlayState::mouseMoved( const OIS::MouseEvent &e ) { // mRi->setPosition(e.state.X.abs, e.state.Y.abs); - mRl1->setPosition(e.state.X.abs, e.state.Y.abs); + /*mRl1->setPosition(e.state.X.abs, e.state.Y.abs); mRl2->setPosition(e.state.X.abs, e.state.Y.abs + 12); + */ mRotX -= Degree( e.state.X.rel * 20.00); // use Y axis invert This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-11-20 09:53:59
|
Revision: 989 http://opde.svn.sourceforge.net/opde/?rev=989&view=rev Author: volca Date: 2008-11-20 09:53:54 +0000 (Thu, 20 Nov 2008) Log Message: ----------- oops. removed too much. fixed StartingPoint Modified Paths: -------------- trunk/src/main/GamePlayState.cpp Modified: trunk/src/main/GamePlayState.cpp =================================================================== --- trunk/src/main/GamePlayState.cpp 2008-11-20 09:48:51 UTC (rev 988) +++ trunk/src/main/GamePlayState.cpp 2008-11-20 09:53:54 UTC (rev 989) @@ -121,7 +121,8 @@ posPG->get(StartingPointObjID, "position", spoint); // Medsci1.mis position with some damn bad performance under GL - // Vector3 StartingPoint(-8.41809, -163.39, 1.3465); + //Vector3 StartingPoint(-8.41809, -163.39, 1.3465); + Vector3 StartingPoint(0,0,0); if (spoint.type() == DVariant::DV_VECTOR) StartingPoint = spoint.toVector(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-11-20 14:05:12
|
Revision: 994 http://opde.svn.sourceforge.net/opde/?rev=994&view=rev Author: volca Date: 2008-11-20 14:05:04 +0000 (Thu, 20 Nov 2008) Log Message: ----------- update the light counts Modified Paths: -------------- trunk/src/main/GamePlayState.cpp Modified: trunk/src/main/GamePlayState.cpp =================================================================== --- trunk/src/main/GamePlayState.cpp 2008-11-20 14:04:24 UTC (rev 993) +++ trunk/src/main/GamePlayState.cpp 2008-11-20 14:05:04 UTC (rev 994) @@ -326,6 +326,7 @@ OverlayElement* guisr = OverlayManager::getSingleton().getOverlayElement("Opde/StaticRenderTime"); OverlayElement* guivo = OverlayManager::getSingleton().getOverlayElement("Opde/VisibleObjectsTime"); OverlayElement* guill = OverlayManager::getSingleton().getOverlayElement("Opde/LightListTime"); + OverlayElement* guilc = OverlayManager::getSingleton().getOverlayElement("Opde/LightCount"); OverlayElement* guisg = OverlayManager::getSingleton().getOverlayElement("Opde/SceneGraphTime"); // Temporary: Debug Overlay @@ -336,11 +337,12 @@ static String ssr = "Static Build Time: "; static String vot = "Visible obj. Time: "; static String llt = "Light list. Time: "; + static String lcs = "Light count : "; static String sgt = "Scene graph Time: "; uint bculls = 0, eports = 0, rendc = 0, travtm = 0; - unsigned long statbt, fvot, lltime, sgtime; + unsigned long statbt, fvot, lltime, sgtime, lcnt; mSceneMgr->getOption("BackfaceCulls", &bculls); @@ -350,6 +352,7 @@ mSceneMgr->getOption("StaticBuildTime", &statbt); mSceneMgr->getOption("FindVisibleObjectsTime", &fvot); mSceneMgr->getOption("LightListTime", &lltime); + mSceneMgr->getOption("LightCount", &lcnt); mSceneMgr->getOption("SceneGraphTime", &sgtime); travtm = static_cast<DarkCamera*>(mCamera)->getTraversalTime(); @@ -362,6 +365,7 @@ guisr->setCaption(ssr + StringConverter::toString(statbt) + " ms"); guivo->setCaption(vot + StringConverter::toString(fvot) + " ms"); guill->setCaption(llt + StringConverter::toString(lltime) + " ms"); + guilc->setCaption(lcs + StringConverter::toString(lcnt)); guisg->setCaption(sgt + StringConverter::toString(sgtime) + " ms"); } catch(...) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <vo...@us...> - 2008-12-22 09:36:22
|
Revision: 1043 http://opde.svn.sourceforge.net/opde/?rev=1043&view=rev Author: volca Date: 2008-12-22 09:36:19 +0000 (Mon, 22 Dec 2008) Log Message: ----------- + Manual building changes + Overview graph now pretty complete + every .dot graph now built automatically Modified Paths: -------------- trunk/src/main/GamePlayState.cpp Modified: trunk/src/main/GamePlayState.cpp =================================================================== --- trunk/src/main/GamePlayState.cpp 2008-12-21 21:30:22 UTC (rev 1042) +++ trunk/src/main/GamePlayState.cpp 2008-12-22 09:36:19 UTC (rev 1043) @@ -160,7 +160,7 @@ // mCamera->setDirection(-0.398078, 0.825408, -0.400297); // Thiefy FOV - mCamera->setFOVy(Degree(60) * mCamera->getAspectRatio()); + mCamera->setFOVy(Degree(60)); // * mCamera->getAspectRatio() if (mConfigService->hasParam("debug")) { if (mConfigService->getParam("debug") == true) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pa...@us...> - 2009-09-24 04:52:49
|
Revision: 1285 http://opde.svn.sourceforge.net/opde/?rev=1285&view=rev Author: patryn Date: 2009-09-24 04:52:42 +0000 (Thu, 24 Sep 2009) Log Message: ----------- Changed the console activation key due to WinNT debug feature. http://support.microsoft.com/kb/q130667/ Modified Paths: -------------- trunk/src/main/GamePlayState.cpp Modified: trunk/src/main/GamePlayState.cpp =================================================================== --- trunk/src/main/GamePlayState.cpp 2009-09-22 12:48:53 UTC (rev 1284) +++ trunk/src/main/GamePlayState.cpp 2009-09-24 04:52:42 UTC (rev 1285) @@ -430,7 +430,7 @@ } bool GamePlayState::keyPressed( const OIS::KeyEvent &e ) { - if( e.key == KC_F12 ) { + if( e.key == KC_F10 ) { mConsole->setActive(!mConsole->isActive()); return true; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |