public/ITimerSystem.h
author David Anderson <dvander@alliedmods.net>
Sat Jul 14 01:55:15 2007 +0000 (2007-07-14)
changeset 1108 fafe809b16ca
parent 620 e329c942cb00
child 1226 478550a4d5ec
permissions -rw-r--r--
added amb622, TIMER_FLAG_NO_MAPCHANGE
dvander@564
     1
/**
dvander@564
     2
 * vim: set ts=4 :
dvander@564
     3
 * ===============================================================
dvander@564
     4
 * SourceMod, Copyright (C) 2004-2007 AlliedModders LLC. 
dvander@564
     5
 * All rights reserved.
dvander@564
     6
 * ===============================================================
dvander@564
     7
 *
dvander@564
     8
 *  This file is part of the SourceMod/SourcePawn SDK.  This file may only be 
dvander@564
     9
 * used or modified under the Terms and Conditions of its License Agreement, 
dvander@564
    10
 * which is found in public/licenses/LICENSE.txt.  As of this notice, derivative 
dvander@564
    11
 * works must be licensed under the GNU General Public License (version 2 or 
dvander@564
    12
 * greater).  A copy of the GPL is included under public/licenses/GPL.txt.
dvander@564
    13
 * 
dvander@564
    14
 * To view the latest information, see: http://www.sourcemod.net/license.php
dvander@564
    15
 *
dvander@564
    16
 * Version: $Id$
dvander@564
    17
 */
dvander@564
    18
dvander@564
    19
#ifndef _INCLUDE_SOURCEMOD_TIMER_SYSTEM_H_
dvander@564
    20
#define _INCLUDE_SOURCEMOD_TIMER_SYSTEM_H_
dvander@564
    21
faluco@620
    22
/**
faluco@620
    23
 * @file ITimerSystem.h
faluco@620
    24
 * @brief Contains functions for creating and managing timers.
faluco@620
    25
 */
faluco@620
    26
faluco@620
    27
dvander@564
    28
#include <IShareSys.h>
faluco@587
    29
#include <IForwardSys.h>
dvander@564
    30
faluco@587
    31
#define SMINTERFACE_TIMERSYS_NAME		"ITimerSys"
faluco@587
    32
#define SMINTERFACE_TIMERSYS_VERSION	1
dvander@564
    33
dvander@564
    34
namespace SourceMod
dvander@564
    35
{
dvander@564
    36
	class ITimer;
dvander@564
    37
dvander@564
    38
	/**
dvander@564
    39
	 * @brief Event callbacks for when a timer is executed.
dvander@564
    40
	 */
dvander@564
    41
	class ITimedEvent
dvander@564
    42
	{
dvander@564
    43
	public:
dvander@564
    44
		/**
dvander@564
    45
		 * @brief Called when a timer is executed.
dvander@564
    46
		 *
dvander@564
    47
		 * @param pTimer		Pointer to the timer instance.
dvander@564
    48
		 * @param pData			Private pointer passed from host.
faluco@587
    49
		 * @return				Pl_Stop to stop timer, Pl_Continue to continue.
dvander@564
    50
		 */
dvander@564
    51
		virtual ResultType OnTimer(ITimer *pTimer, void *pData) =0;
dvander@564
    52
dvander@564
    53
		/**
dvander@564
    54
		 * @brief Called when the timer has been killed.
dvander@564
    55
		 *
dvander@564
    56
		 * @param pTimer		Pointer to the timer instance.
dvander@564
    57
		 * @param pData			Private data pointer passed from host.
dvander@564
    58
		 */
faluco@587
    59
		virtual void OnTimerEnd(ITimer *pTimer, void *pData) =0;
dvander@564
    60
	};
dvander@564
    61
dvander@1108
    62
	#define TIMER_FLAG_REPEAT			(1<<0)		/**< Timer will repeat until stopped */
dvander@1108
    63
	#define TIMER_FLAG_NO_MAPCHANGE		(1<<1)		/**< Timer will not carry over mapchanges */
dvander@564
    64
dvander@564
    65
	class ITimerSystem : public SMInterface
dvander@564
    66
	{
dvander@564
    67
	public:
dvander@564
    68
		const char *GetInterfaceName()
dvander@564
    69
		{
dvander@564
    70
			return SMINTERFACE_TIMERSYS_NAME;
dvander@564
    71
		}
dvander@564
    72
		unsigned int GetInterfaceVersion()
dvander@564
    73
		{
dvander@564
    74
			return SMINTERFACE_TIMERSYS_VERSION;
dvander@564
    75
		}
dvander@564
    76
	public:
dvander@564
    77
		/**
dvander@564
    78
		 * @brief Creates a timed event.
dvander@564
    79
		 *
dvander@564
    80
		 * @param pCallbacks		Pointer to ITimedEvent callbacks.
dvander@564
    81
		 * @param fInterval			Interval, in seconds, of the timed event to occur.
dvander@564
    82
		 *							The smallest allowed interval is 0.1 seconds.
dvander@564
    83
		 * @param pData				Private data to pass on to the timer.
dvander@564
    84
		 * @param flags				Extra flags to pass on to the timer.
dvander@564
    85
		 * @return					An ITimer pointer on success, NULL on failure.
dvander@564
    86
		 */
dvander@564
    87
		virtual ITimer *CreateTimer(ITimedEvent *pCallbacks, 
dvander@564
    88
										 float fInterval, 
dvander@564
    89
										 void *pData,
dvander@564
    90
										 int flags) =0;
dvander@564
    91
dvander@564
    92
		/**
dvander@564
    93
		 * @brief Kills a timer.
dvander@564
    94
		 *
dvander@564
    95
		 * @param pTimer			Pointer to the ITimer structure.
dvander@564
    96
		 * @return
dvander@564
    97
		 */
dvander@564
    98
		virtual void KillTimer(ITimer *pTimer) =0;
dvander@564
    99
dvander@564
   100
		/**
dvander@564
   101
		 * @brief Arbitrarily fires a timer.  If the timer is not a repeating 
dvander@564
   102
		 * timer, this will also kill the timer.
dvander@564
   103
		 *
dvander@564
   104
		 * @param pTimer			Pointer to the ITimer structure.
dvander@564
   105
		 * @param delayExec			If true, and the timer is repeating, the
dvander@564
   106
		 *							next execution will be delayed by its interval.
dvander@564
   107
		 * @return
dvander@564
   108
		 */
dvander@564
   109
		virtual void FireTimerOnce(ITimer *pTimer, bool delayExec=false) =0;
dvander@564
   110
	};
dvander@564
   111
}
dvander@564
   112
dvander@564
   113
#endif //_INCLUDE_SOURCEMOD_TIMER_SYSTEM_H_