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

Revision 721, 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                if (mInputTypeSwitchingOn)
42                {
43                        if (mEventProcessor)
44                        {
45                                delete mEventProcessor;
46                        }
47                }
48        else
49        {
50                        if (mInputDevice)
51                        {
52                                Ogre::PlatformManager::getSingleton().destroyInputReader( mInputDevice );
53                        }
54        }
55
56                for (unsigned int iOgreFrameListenerMode = 0; iOgreFrameListenerMode < this->getNumFrameListenerModes(); iOgreFrameListenerMode++)
57                {
58                        OBA::OgreFrameListenerMode *ogreFrameListenerMode = this->getFrameListenerMode(iOgreFrameListenerMode);
59                        this->removeFrameListenerMode(iOgreFrameListenerMode);
60                        delete ogreFrameListenerMode;
61                }
62}
63
64bool OgreFrameListener::frameStarted(const Ogre::FrameEvent& evt)
65{           
66        if (!mInputTypeSwitchingOn)
67    {
68        mInputDevice->capture();
69    }
70
71        if ( !mUseBufferedInputMouse || !mUseBufferedInputKeys)
72        {
73                // one of the input modes is immediate, so setup what is needed for immediate mouse/key movement
74                if (mTimeUntilNextToggle >= 0)
75                {
76                        mTimeUntilNextToggle -= evt.timeSinceLastFrame;
77                }
78        }
79
80    if (mUseBufferedInputKeys)
81    {
82        // no need to do any processing here, it is handled by event processor and
83                // you get the results as KeyEvents
84    }
85    else
86    {
87        if (processUnbufferedKeyInput(evt) == false)
88                {
89                        return false;
90                }
91    }
92
93        return mDefaultOgreFrameListenerMode->frameStarted(evt,mInputDevice);
94}
95
96bool OgreFrameListener::processUnbufferedKeyInput(const Ogre::FrameEvent& evt)
97{
98        if( mInputDevice->isKeyDown(Ogre::KC_ESCAPE) )
99    {           
100        return false;
101    }
102
103        if (mInputDevice->isKeyDown(Ogre::KC_TAB) && mTimeUntilNextToggle <= 0)
104    {           
105                mCurrentOgreFrameListenerMode = (mCurrentOgreFrameListenerMode+1) % this->getNumFrameListenerModes();           
106                this->setEnabledFrameListenerMode(mCurrentOgreFrameListenerMode);
107                mWindow->setDebugText("P: " + mDefaultOgreFrameListenerMode->getSceneManager()->getName());
108
109                mTimeUntilNextToggle = 1;
110    }
111
112    // Return true to continue rendering
113    return true;
114}
115bool OgreFrameListener::frameEnded(const Ogre::FrameEvent& evt)
116{
117        return mDefaultOgreFrameListenerMode->frameEnded(evt);
118}
119
120void OgreFrameListener::keyClicked(Ogre::KeyEvent* e)
121{
122        if (e->getKeyChar() == 'm')
123        {
124                mDefaultOgreFrameListenerMode->switchMouseMode();
125        }
126        else if (e->getKeyChar() == 'k')
127        {
128                mDefaultOgreFrameListenerMode->switchKeyMode();
129        }
130
131}
132
133void OgreFrameListener::keyPressed(Ogre::KeyEvent* e)
134{
135}
136
137void OgreFrameListener::keyReleased(Ogre::KeyEvent* e)
138{
139}
140
141void OgreFrameListener::addFrameListenerMode(OgreFrameListenerMode *ogreFrameListenerMode)
142{
143        mOgreFrameListenerModeList.push_back(ogreFrameListenerMode);
144}
145
146void OgreFrameListener::removeFrameListenerMode(unsigned int iOgreFrameListenerMode)
147{
148        OgreFrameListenerMode *ogreFrameListenerMode = mOgreFrameListenerModeList[iOgreFrameListenerMode];
149        mOgreFrameListenerModeList.erase(mOgreFrameListenerModeList.begin()+iOgreFrameListenerMode);
150        delete ogreFrameListenerMode;
151}
152
153void OgreFrameListener::setEnabledFrameListenerMode(unsigned int iOgreFrameListenerMode)
154{
155        mDefaultOgreFrameListenerMode = getFrameListenerMode(iOgreFrameListenerMode);
156        Ogre::Root::getSingleton()._setCurrentSceneManager(mDefaultOgreFrameListenerMode->getSceneManager());
157        mWindow->removeAllViewports();
158        mWindow->addViewport(mDefaultOgreFrameListenerMode->getCamera());
159}
160
161OgreFrameListenerMode* OgreFrameListener::getFrameListenerMode(unsigned int iOgreFrameListenerMode)
162{
163        return mOgreFrameListenerModeList[iOgreFrameListenerMode];
164}
165
166OgreFrameListenerMode* OgreFrameListener::getEnabledFrameListenerMode()
167{
168        return mDefaultOgreFrameListenerMode;
169}
170
171unsigned int OgreFrameListener::getNumFrameListenerModes()
172{
173        return mOgreFrameListenerModeList.size();
174}
175
176}
Note: See TracBrowser for help on using the repository browser.