source: GTP/trunk/Lib/Illum/IBRBillboardCloudTrees/OGRE/src/OBAOgreFrameListener.cpp @ 731

Revision 731, 4.9 KB checked in by igarcia, 18 years ago (diff)
Line 
1
2#include "OBAOgreFrameListener.h"
3
4namespace OBA
5{
6
7OgreFrameListener::OgreFrameListener(Ogre::RenderWindow *win, bool useBufferedInputKeys, bool useBufferedInputMouse)
8{
9        mWindow = win;
10
11        mDefaultOgreFrameListenerMode = new OBA::OgreFrameListenerMode(win,this->getNumFrameListenerModes());
12        mDefaultOgreFrameListenerMode->chooseSceneManager();
13        mDefaultOgreFrameListenerMode->createCamera();
14        mDefaultOgreFrameListenerMode->createViewports();
15        mDefaultOgreFrameListenerMode->createScene();
16        this->addFrameListenerMode(mDefaultOgreFrameListenerMode);
17
18        mInputTypeSwitchingOn = useBufferedInputKeys || useBufferedInputMouse;
19        mUseBufferedInputKeys = useBufferedInputKeys;
20        mUseBufferedInputMouse = useBufferedInputMouse;
21
22        if (mInputTypeSwitchingOn)
23        {
24                mEventProcessor = new Ogre::EventProcessor();
25                mEventProcessor->initialise(win);
26                mEventProcessor->startProcessingEvents();
27                mEventProcessor->addKeyListener(this);
28                mInputDevice = mEventProcessor->getInputReader();
29
30        }
31    else
32    {
33                mInputDevice = Ogre::PlatformManager::getSingleton().createInputReader();
34        mInputDevice->initialise(win,true, true);
35    }
36
37}
38
39OgreFrameListener::~OgreFrameListener()
40{
41                for (unsigned int iOgreFrameListenerMode = 0; iOgreFrameListenerMode < this->getNumFrameListenerModes(); iOgreFrameListenerMode++)
42                {
43                        this->removeFrameListenerMode(iOgreFrameListenerMode);         
44                }
45                if (mInputTypeSwitchingOn)
46                {
47                        if (mEventProcessor)
48                        {
49                                delete mEventProcessor;
50                        }
51                }
52        else
53        {
54                        // Gametools -- BUG: 06/04/2006
55                        //if (mInputDevice)
56                        //{
57                        //      Ogre::PlatformManager::getSingleton().destroyInputReader( mInputDevice );
58                        //}
59                        //delete mInputDevice;
60        }
61}
62
63bool OgreFrameListener::frameStarted(const Ogre::FrameEvent& evt)
64{           
65        if (!mInputTypeSwitchingOn)
66    {
67        mInputDevice->capture();
68    }
69
70        if ( !mUseBufferedInputMouse || !mUseBufferedInputKeys)
71        {
72                // one of the input modes is immediate, so setup what is needed for immediate mouse/key movement
73                if (mTimeUntilNextToggle >= 0)
74                {
75                        mTimeUntilNextToggle -= evt.timeSinceLastFrame;
76                }
77        }
78
79    if (mUseBufferedInputKeys)
80    {
81        // no need to do any processing here, it is handled by event processor and
82                // you get the results as KeyEvents
83    }
84    else
85    {
86        if (processUnbufferedKeyInput(evt) == false)
87                {
88                        return false;
89                }
90    }
91
92        mWindow->setDebugText("P: " + mDefaultOgreFrameListenerMode->getSceneManager()->getName() + " -- " + Ogre::StringConverter::toString(mTimeUntilNextToggle));
93
94        return mDefaultOgreFrameListenerMode->frameStarted(evt,mInputDevice);
95}
96
97bool OgreFrameListener::processUnbufferedKeyInput(const Ogre::FrameEvent& evt)
98{
99        if( mInputDevice->isKeyDown(Ogre::KC_ESCAPE) )
100    {           
101        return false;
102    }
103
104        if (mInputDevice->isKeyDown(Ogre::KC_TAB) && mTimeUntilNextToggle <= 0)
105    {           
106                mCurrentOgreFrameListenerMode = (mCurrentOgreFrameListenerMode+1) % this->getNumFrameListenerModes();           
107                this->setEnabledFrameListenerMode(mCurrentOgreFrameListenerMode);
108                mWindow->setDebugText("P: " + mDefaultOgreFrameListenerMode->getSceneManager()->getName());
109
110                mTimeUntilNextToggle = 0.25;
111    }
112
113    // Return true to continue rendering
114    return true;
115}
116bool OgreFrameListener::frameEnded(const Ogre::FrameEvent& evt)
117{
118        return mDefaultOgreFrameListenerMode->frameEnded(evt);
119}
120
121void OgreFrameListener::keyClicked(Ogre::KeyEvent* e)
122{
123        if (e->getKeyChar() == 'm')
124        {
125                mDefaultOgreFrameListenerMode->switchMouseMode();
126        }
127        else if (e->getKeyChar() == 'k')
128        {
129                mDefaultOgreFrameListenerMode->switchKeyMode();
130        }
131
132}
133
134void OgreFrameListener::keyPressed(Ogre::KeyEvent* e)
135{
136}
137
138void OgreFrameListener::keyReleased(Ogre::KeyEvent* e)
139{
140}
141
142void OgreFrameListener::addFrameListenerMode(OgreFrameListenerMode *ogreFrameListenerMode)
143{
144        mOgreFrameListenerModeList.push_back(ogreFrameListenerMode);
145}
146
147void OgreFrameListener::removeFrameListenerMode(unsigned int iOgreFrameListenerMode)
148{
149        OgreFrameListenerMode *ogreFrameListenerMode = mOgreFrameListenerModeList[iOgreFrameListenerMode];
150        mOgreFrameListenerModeList.erase(mOgreFrameListenerModeList.begin()+iOgreFrameListenerMode);
151        delete ogreFrameListenerMode;
152}
153
154void OgreFrameListener::setEnabledFrameListenerMode(unsigned int iOgreFrameListenerMode)
155{
156        mDefaultOgreFrameListenerMode = getFrameListenerMode(iOgreFrameListenerMode);
157        Ogre::Root::getSingleton()._setCurrentSceneManager(mDefaultOgreFrameListenerMode->getSceneManager());
158        mWindow->removeAllViewports();
159        mWindow->addViewport(mDefaultOgreFrameListenerMode->getCamera());
160}
161
162OgreFrameListenerMode* OgreFrameListener::getFrameListenerMode(unsigned int iOgreFrameListenerMode)
163{
164        return mOgreFrameListenerModeList[iOgreFrameListenerMode];
165}
166
167OgreFrameListenerMode* OgreFrameListener::getEnabledFrameListenerMode()
168{
169        return mDefaultOgreFrameListenerMode;
170}
171
172unsigned int OgreFrameListener::getNumFrameListenerModes()
173{
174        return mOgreFrameListenerModeList.size();
175}
176
177}
Note: See TracBrowser for help on using the repository browser.