Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 663 was 646, checked in by landauf, 17 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
RevLine 
[496]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.
[640]6    float dt is the time since the last frame in seconds.
[496]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
[384]13#ifndef _Tickable_H__
14#define _Tickable_H__
15
[496]16#include "../core/CoreIncludes.h"
17#include "OgreFrameListener.h"
[384]18
19namespace orxonox
20{
[496]21    class TickFrameListener; // Forward declaration
[384]22
[496]23    //! The Tickable interface provides a tick(dt) function, that gets called every frame.
[384]24    class Tickable : virtual public OrxonoxClass
25    {
26        public:
[496]27            /**
28                @brief Gets called every frame.
[640]29                @param dt The time since the last frame in seconds
[496]30            */
[384]31            virtual void tick(float dt) = 0;
32
33        protected:
[496]34            /**
35                @brief Constructor: Registers the object in the Tickable-list
36            */
[384]37            Tickable() { RegisterRootObject(Tickable); }
38    };
39
[496]40    //! The TickFrameListener calls the tick(dt) function of all Tickables every frame.
[384]41    class TickFrameListener : public Ogre::FrameListener
42    {
43        private:
[496]44            /** @brief Gets called before a frame gets rendered. */
[384]45            bool frameStarted(const Ogre::FrameEvent &evt)
46            {
[496]47                // Iterate through all Tickables and call their tick(dt) function
[646]48                for (Iterator<Tickable> it = ObjectList<Tickable>::start(); it; )
49                    (it++)->tick(evt.timeSinceLastFrame);
[384]50
51                return FrameListener::frameStarted(evt);
52            }
53    };
54}
55
56#endif
Note: See TracBrowser for help on using the repository browser.