Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/FICN/src/orxonox/objects/Tickable.h @ 646

Last change on this file since 646 was 646, checked in by landauf, 16 years ago
  • added very bad collision detection (presentation hack :D)
  • added explosions
  • fixed bug in ParticleInterface (it tried to delete SceneManager)

AND:

  • fixed one of the most amazing bugs ever! (the game crashed when I deleted an object through a timer-function. because the timer-functions is called by an iterator, the iterator indirectly delted its object. by overloading the (it++) operator, i was able to solve this problem)
File size: 1.8 KB
Line 
1/*!
2    @file Tickable.h
3    @brief Definition of the Tickable interface.
4
5    The Tickable interface provides a tick(dt) function, that gets called every frame.
6    float dt is the time since the last frame in seconds.
7
8    Attention:
9    Classes derived from a Tickable that want to have a tick(dt) function on their part, MUST call the
10    parent::tick(dt) function explicit in their implementation of tick(dt) because it's a virtual function.
11*/
12
13#ifndef _Tickable_H__
14#define _Tickable_H__
15
16#include "../core/CoreIncludes.h"
17#include "OgreFrameListener.h"
18
19namespace orxonox
20{
21    class TickFrameListener; // Forward declaration
22
23    //! The Tickable interface provides a tick(dt) function, that gets called every frame.
24    class Tickable : virtual public OrxonoxClass
25    {
26        public:
27            /**
28                @brief Gets called every frame.
29                @param dt The time since the last frame in seconds
30            */
31            virtual void tick(float dt) = 0;
32
33        protected:
34            /**
35                @brief Constructor: Registers the object in the Tickable-list
36            */
37            Tickable() { RegisterRootObject(Tickable); }
38    };
39
40    //! The TickFrameListener calls the tick(dt) function of all Tickables every frame.
41    class TickFrameListener : public Ogre::FrameListener
42    {
43        private:
44            /** @brief Gets called before a frame gets rendered. */
45            bool frameStarted(const Ogre::FrameEvent &evt)
46            {
47                // Iterate through all Tickables and call their tick(dt) function
48                for (Iterator<Tickable> it = ObjectList<Tickable>::start(); it; )
49                    (it++)->tick(evt.timeSinceLastFrame);
50
51                return FrameListener::frameStarted(evt);
52            }
53    };
54}
55
56#endif
Note: See TracBrowser for help on using the repository browser.