dvander@564: /** dvander@564: * vim: set ts=4 : dvander@564: * =============================================================== dvander@564: * SourceMod, Copyright (C) 2004-2007 AlliedModders LLC. dvander@564: * All rights reserved. dvander@564: * =============================================================== dvander@564: * dvander@564: * This file is part of the SourceMod/SourcePawn SDK. This file may only be dvander@564: * used or modified under the Terms and Conditions of its License Agreement, dvander@564: * which is found in public/licenses/LICENSE.txt. As of this notice, derivative dvander@564: * works must be licensed under the GNU General Public License (version 2 or dvander@564: * greater). A copy of the GPL is included under public/licenses/GPL.txt. dvander@564: * dvander@564: * To view the latest information, see: http://www.sourcemod.net/license.php dvander@564: * dvander@564: * Version: $Id$ dvander@564: */ dvander@564: dvander@564: #ifndef _INCLUDE_SOURCEMOD_TIMER_SYSTEM_H_ dvander@564: #define _INCLUDE_SOURCEMOD_TIMER_SYSTEM_H_ dvander@564: faluco@620: /** faluco@620: * @file ITimerSystem.h faluco@620: * @brief Contains functions for creating and managing timers. faluco@620: */ faluco@620: faluco@620: dvander@564: #include faluco@587: #include dvander@564: faluco@587: #define SMINTERFACE_TIMERSYS_NAME "ITimerSys" faluco@587: #define SMINTERFACE_TIMERSYS_VERSION 1 dvander@564: dvander@564: namespace SourceMod dvander@564: { dvander@564: class ITimer; dvander@564: dvander@564: /** dvander@564: * @brief Event callbacks for when a timer is executed. dvander@564: */ dvander@564: class ITimedEvent dvander@564: { dvander@564: public: dvander@564: /** dvander@564: * @brief Called when a timer is executed. dvander@564: * dvander@564: * @param pTimer Pointer to the timer instance. dvander@564: * @param pData Private pointer passed from host. faluco@587: * @return Pl_Stop to stop timer, Pl_Continue to continue. dvander@564: */ dvander@564: virtual ResultType OnTimer(ITimer *pTimer, void *pData) =0; dvander@564: dvander@564: /** dvander@564: * @brief Called when the timer has been killed. dvander@564: * dvander@564: * @param pTimer Pointer to the timer instance. dvander@564: * @param pData Private data pointer passed from host. dvander@564: */ faluco@587: virtual void OnTimerEnd(ITimer *pTimer, void *pData) =0; dvander@564: }; dvander@564: dvander@1108: #define TIMER_FLAG_REPEAT (1<<0) /**< Timer will repeat until stopped */ dvander@1108: #define TIMER_FLAG_NO_MAPCHANGE (1<<1) /**< Timer will not carry over mapchanges */ dvander@564: dvander@564: class ITimerSystem : public SMInterface dvander@564: { dvander@564: public: dvander@564: const char *GetInterfaceName() dvander@564: { dvander@564: return SMINTERFACE_TIMERSYS_NAME; dvander@564: } dvander@564: unsigned int GetInterfaceVersion() dvander@564: { dvander@564: return SMINTERFACE_TIMERSYS_VERSION; dvander@564: } dvander@564: public: dvander@564: /** dvander@564: * @brief Creates a timed event. dvander@564: * dvander@564: * @param pCallbacks Pointer to ITimedEvent callbacks. dvander@564: * @param fInterval Interval, in seconds, of the timed event to occur. dvander@564: * The smallest allowed interval is 0.1 seconds. dvander@564: * @param pData Private data to pass on to the timer. dvander@564: * @param flags Extra flags to pass on to the timer. dvander@564: * @return An ITimer pointer on success, NULL on failure. dvander@564: */ dvander@564: virtual ITimer *CreateTimer(ITimedEvent *pCallbacks, dvander@564: float fInterval, dvander@564: void *pData, dvander@564: int flags) =0; dvander@564: dvander@564: /** dvander@564: * @brief Kills a timer. dvander@564: * dvander@564: * @param pTimer Pointer to the ITimer structure. dvander@564: * @return dvander@564: */ dvander@564: virtual void KillTimer(ITimer *pTimer) =0; dvander@564: dvander@564: /** dvander@564: * @brief Arbitrarily fires a timer. If the timer is not a repeating dvander@564: * timer, this will also kill the timer. dvander@564: * dvander@564: * @param pTimer Pointer to the ITimer structure. dvander@564: * @param delayExec If true, and the timer is repeating, the dvander@564: * next execution will be delayed by its interval. dvander@564: * @return dvander@564: */ dvander@564: virtual void FireTimerOnce(ITimer *pTimer, bool delayExec=false) =0; dvander@564: }; dvander@564: } dvander@564: dvander@564: #endif //_INCLUDE_SOURCEMOD_TIMER_SYSTEM_H_