Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/network/src/orxonox/tools/Timer.h @ 1494

Last change on this file since 1494 was 1494, checked in by rgrieder, 16 years ago
  • set the svn:eol-style property to all files so, that where ever you check out, you'll get the right line endings (had to change every file with mixed endings to windows in order to set the property)
  • Property svn:eol-style set to native
File size: 7.2 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29/*!
30    @file Timer.h
31    @brief Definition and Implementation of the Timer class.
32
33    The Timer is a callback-object, calling a given function after a given time-interval.
34
35    Usage:
36    header.h:
37        class ClassName
38        {
39            public:
40                ClassName();
41                void functionName();
42                Timer<ClassName> myTimer;
43        };
44
45    source.cc:
46        include "core/Executor.h"
47
48        ClassName::ClassName()
49        {
50            myTimer.setTimer(interval_in_seconds, bLoop, this, createExecutor(createFunctor(&ClassName::functionName)));
51        }
52
53        void ClassName::functionName()
54        {
55            whateveryouwant();
56            something(else);
57        }
58*/
59
60#ifndef _Timer_H__
61#define _Timer_H__
62
63#include "OrxonoxPrereqs.h"
64#include "core/CorePrereqs.h"
65#include "core/Tickable.h"
66
67namespace orxonox
68{
69    class StaticTimer;
70    void delay(float delay, const std::string& command);
71    void killdelays();
72    void executeDelayedCommand(StaticTimer* timer, const std::string& command);
73
74    //! TimerBase is the parent of the Timer class.
75    class _OrxonoxExport TimerBase : public Tickable
76    {
77        public:
78            ~TimerBase();
79
80            void run() const;
81
82            /** @brief Starts the Timer: Function-call after 'interval' seconds. */
83            inline void startTimer()
84                { this->bActive_ = true; this->time_ = this->interval_; }
85            /** @brief Stops the Timer. */
86            inline void stopTimer()
87                { this->bActive_ = false; this->time_ = this->interval_; }
88            /** @brief Pauses the Timer - it will continue with the actual state if you unpause it. */
89            inline void pauseTimer()
90                { this->bActive_ = false; }
91            /** @brief Unpauses the Timer - continues with the given state. */
92            inline void unpauseTimer()
93                { this->bActive_ = true; }
94            /** @brief Returns true if the Timer is active (= not stoped, not paused). @return True = Time is active */
95            inline bool isActive() const
96                { return this->bActive_; }
97            /** @brief Gives the Timer some extra time. @param time The amount of extra time in seconds */
98            inline void addTime(float time)
99                { this->time_ += time; }
100            /** @brief Decreases the remaining time of the Timer. @param time The amount of time to remove */
101            inline void removeTime(float time)
102                { this->time_ -= time; }
103            /** @brief Sets the interval of the Timer. @param interval The interval */
104            inline void setInterval(float interval)
105                { this->interval_ = interval; }
106            /** @brief Sets bLoop to a given value. @param bLoop True = loop */
107            inline void setLoop(bool bLoop)
108                { this->bLoop_ = bLoop; }
109
110            void tick(float dt);
111
112        protected:
113            TimerBase();
114
115            Executor* executor_; //!< The executor of the function that should be called when the time expires
116
117            float interval_;     //!< The time-interval in seconds
118            bool bLoop_;         //!< If true, the function gets called every 'interval' seconds
119            bool bActive_;       //!< If true, the Timer ticks and calls the function if the time's up
120
121            float time_;         //!< Internal variable, counting the time till the next function-call
122    };
123
124    //! The Timer is a callback-object, calling a given function after a given time-interval.
125    template <class T = BaseObject>
126    class Timer : public TimerBase
127    {
128        public:
129            Timer() {}
130
131            /**
132                @brief Constructor: Initializes the Timer with given values.
133                @param interval The timer-interval in seconds
134                @param bLoop If true, the function gets called every 'interval' seconds
135                @param object The object owning the timer and the function
136                @param exeuctor A executor of the function to call
137            */
138            Timer(float interval, bool bLoop, T* object, ExecutorMember<T>* exeuctor)
139            {
140                this->setTimer(interval, bLoop, object, exeuctor);
141            }
142
143            /**
144                @brief Initializes the Timer with given values.
145                @param interval The timer-interval in seconds
146                @param bLoop If true, the function gets called every 'interval' seconds
147                @param object The object owning the timer and the function
148                @param exeuctor A executor of the function to call
149            */
150            void setTimer(float interval, bool bLoop, T* object, ExecutorMember<T>* executor)
151            {
152                this->interval_ = interval;
153                this->bLoop_ = bLoop;
154                executor->setObject(object);
155                this->executor_ = (Executor*)executor;
156                this->bActive_ = true;
157
158                this->time_ = interval;
159            }
160    };
161
162    //! The StaticTimer is a callback-object, calling a static function after a given time-interval.
163    class StaticTimer : public TimerBase
164    {
165        public:
166            StaticTimer() {}
167
168            /**
169                @brief Constructor: Initializes the Timer with given values.
170                @param interval The timer-interval in seconds
171                @param bLoop If true, the function gets called every 'interval' seconds
172                @param exeuctor A executor of the function to call
173            */
174            StaticTimer(float interval, bool bLoop, ExecutorStatic* executor)
175            {
176                this->setTimer(interval, bLoop, executor);
177            }
178
179            /**
180                @brief Initializes the Timer with given values.
181                @param interval The timer-interval in seconds
182                @param bLoop If true, the function gets called every 'interval' seconds
183                @param object The object owning the timer and the function
184                @param executor A executor of the function to call
185            */
186            void setTimer(float interval, bool bLoop, ExecutorStatic* executor)
187            {
188                this->interval_ = interval;
189                this->bLoop_ = bLoop;
190                this->executor_ = (Executor*)executor;
191                this->bActive_ = true;
192
193                this->time_ = interval;
194            }
195    };
196
197}
198
199#endif /* _Timer_H__ */
Note: See TracBrowser for help on using the repository browser.