dvander@564: /** dvander@564: * vim: set ts=4 : ds@1330: * ============================================================================= dvander@1226: * SourceMod dvander@1226: * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved. ds@1330: * ============================================================================= dvander@564: * ds@1330: * This program is free software; you can redistribute it and/or modify it under ds@1330: * the terms of the GNU General Public License, version 3.0, as published by the ds@1330: * Free Software Foundation. dvander@564: * ds@1330: * This program is distributed in the hope that it will be useful, but WITHOUT ds@1330: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ds@1330: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more ds@1330: * details. dvander@1226: * ds@1330: * You should have received a copy of the GNU General Public License along with ds@1330: * this program. If not, see . dvander@1226: * ds@1330: * As a special exception, AlliedModders LLC gives you permission to link the ds@1330: * code of this program (as well as its derivative works) to "Half-Life 2," the ds@1330: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software ds@1330: * by the Valve Corporation. You must obey the GNU General Public License in ds@1330: * all respects for all other code used. Additionally, AlliedModders LLC grants ds@1330: * this exception to all derivative works. AlliedModders LLC defines further ds@1330: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), ds@1330: * or . 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@1407: typedef float (*SM_TIMELEFT_FUNCTION)(); dvander@1407: 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@1407: #define TIMER_FLAG_BEFORE_MAP_END (1<<2) /**< Timer will fire seconds before map end. dvander@1407: This flag is cannot be used with REPEAT, dvander@1407: and TIMER_FLAG_NO_MAPCHANGE is implied. dvander@1407: */ 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@1407: * @return An ITimer pointer on success, NULL on dvander@1407: * 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@1407: * next execution will be delayed by its dvander@1407: * interval. dvander@564: * @return dvander@564: */ dvander@564: virtual void FireTimerOnce(ITimer *pTimer, bool delayExec=false) =0; dvander@1407: dvander@1407: /** dvander@1407: * @brief Sets the function which is used to find the time left in the map. dvander@1407: * dvander@1407: * @param fn Function that returns the time left in seconds. dvander@1407: * @return The previous SM_TIMELEFT_FUNCTION pointer. dvander@1407: */ dvander@1407: virtual SM_TIMELEFT_FUNCTION SetTimeLeftFunction(SM_TIMELEFT_FUNCTION fn) =0; dvander@564: }; dvander@564: } dvander@564: dvander@564: #endif //_INCLUDE_SOURCEMOD_TIMER_SYSTEM_H_ dvander@1407: