TutorialApplication.h
#ifndef TUTORIALAPPLICATION_H #define TUTORIALAPPLICATION_H #include "BaseApplication.h" class TutorialApplication : public BaseApplication { public: TutorialApplication(); virtual ~TutorialApplication(); protected: virtual void createScene(); virtual bool frameRenderingQueued(const Ogre::FrameEvent& fe); private: bool processUnbufferedInput(const Ogre::FrameEvent& fe); }; #endif /* TUTORIALAPPLICATION_H */
TutorialApplication.cpp
#include "TutorialApplication.h" TutorialApplication::TutorialApplication() { } TutorialApplication::~TutorialApplication() { } void TutorialApplication::createScene() { mSceneMgr->setAmbientLight(Ogre::ColourValue(.25, .25, .25)); Ogre::Light* pointLight = mSceneMgr->createLight("PointLight"); pointLight->setType(Ogre::Light::LT_POINT); pointLight->setPosition(250, 150, 250); pointLight->setDiffuseColour(Ogre::ColourValue::White); pointLight->setSpecularColour(Ogre::ColourValue::White); Ogre::Entity* ninjaEntity = mSceneMgr->createEntity("ninja.mesh"); Ogre::SceneNode* ninjaNode = mSceneMgr->getRootSceneNode()->createChildSceneNode( "NinjaNode"); ninjaNode->attachObject(ninjaEntity); } bool TutorialApplication::frameRenderingQueued(const Ogre::FrameEvent& fe) { bool ret = BaseApplication::frameRenderingQueued(fe); if (!processUnbufferedInput(fe)) return false; return ret; } bool TutorialApplication::processUnbufferedInput(const Ogre::FrameEvent& fe) { static bool mouseDownLastFrame = false; static Ogre::Real toggleTimer = 0.0; static Ogre::Real rotate = .13; static Ogre::Real move = 250; // First toggle method bool leftMouseDown = mMouse->getMouseState().buttonDown(OIS::MB_Left); if (leftMouseDown && !mouseDownLastFrame) { Ogre::Light* light = mSceneMgr->getLight("PointLight"); light->setVisible(!light->isVisible()); } mouseDownLastFrame = leftMouseDown; // Second toggle method toggleTimer -= fe.timeSinceLastFrame; if ((toggleTimer < 0) && mMouse->getMouseState().buttonDown(OIS::MB_Right)) { toggleTimer = .5; Ogre::Light* light = mSceneMgr->getLight("PointLight"); light->setVisible(!light->isVisible()); } // Moving the Ninja Ogre::Vector3 dirVec = Ogre::Vector3::ZERO; if (mKeyboard->isKeyDown(OIS::KC_I)) dirVec.z -= move; if (mKeyboard->isKeyDown(OIS::KC_K)) dirVec.z += move; if (mKeyboard->isKeyDown(OIS::KC_U)) dirVec.y += move; if (mKeyboard->isKeyDown(OIS::KC_O)) dirVec.y -= move; if (mKeyboard->isKeyDown(OIS::KC_J)) { if (mKeyboard->isKeyDown(OIS::KC_LSHIFT)) mSceneMgr->getSceneNode("NinjaNode")->yaw(Ogre::Degree(5 * rotate)); else dirVec.x -= move; } if (mKeyboard->isKeyDown(OIS::KC_L)) { if (mKeyboard->isKeyDown(OIS::KC_LSHIFT)) mSceneMgr->getSceneNode("NinjaNode")->yaw(Ogre::Degree(-5 * rotate)); else dirVec.x += move; } mSceneMgr->getSceneNode("NinjaNode")->translate( dirVec * fe.timeSinceLastFrame, Ogre::Node::TS_LOCAL); return true; } #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 #define WIN32_LEAN_AND_MEAN #include "windows.h" #endif #ifdef __cplusplus extern "C" { #endif #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT) #else int main(int argc, char *argv[]) #endif { // Create application object TutorialApplication app; try { app.go(); } catch(Ogre::Exception& e) { #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_OK | MB_ICONERROR | MB_TASKMODAL); #else std::cerr << "An exception has occurred: " << e.getFullDescription().c_str() << std::endl; #endif } return 0; } #ifdef __cplusplus } #endif