public/ITimerSystem.h
author Borja Ferrer <faluco@alliedmods.net>
Thu Mar 15 22:32:45 2007 +0000 (2007-03-15)
changeset 620 e329c942cb00
parent 587 e9f3bbe8ba5d
child 1108 fafe809b16ca
permissions -rw-r--r--
some doxygen fixes
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@564
    62
	#define TIMER_FLAG_REPEAT		(1<<0)
dvander@564
    63
dvander@564
    64
	class ITimerSystem : public SMInterface
dvander@564
    65
	{
dvander@564
    66
	public:
dvander@564
    67
		const char *GetInterfaceName()
dvander@564
    68
		{
dvander@564
    69
			return SMINTERFACE_TIMERSYS_NAME;
dvander@564
    70
		}
dvander@564
    71
		unsigned int GetInterfaceVersion()
dvander@564
    72
		{
dvander@564
    73
			return SMINTERFACE_TIMERSYS_VERSION;
dvander@564
    74
		}
dvander@564
    75
	public:
dvander@564
    76
		/**
dvander@564
    77
		 * @brief Creates a timed event.
dvander@564
    78
		 *
dvander@564
    79
		 * @param pCallbacks		Pointer to ITimedEvent callbacks.
dvander@564
    80
		 * @param fInterval			Interval, in seconds, of the timed event to occur.
dvander@564
    81
		 *							The smallest allowed interval is 0.1 seconds.
dvander@564
    82
		 * @param pData				Private data to pass on to the timer.
dvander@564
    83
		 * @param flags				Extra flags to pass on to the timer.
dvander@564
    84
		 * @return					An ITimer pointer on success, NULL on failure.
dvander@564
    85
		 */
dvander@564
    86
		virtual ITimer *CreateTimer(ITimedEvent *pCallbacks, 
dvander@564
    87
										 float fInterval, 
dvander@564
    88
										 void *pData,
dvander@564
    89
										 int flags) =0;
dvander@564
    90
dvander@564
    91
		/**
dvander@564
    92
		 * @brief Kills a timer.
dvander@564
    93
		 *
dvander@564
    94
		 * @param pTimer			Pointer to the ITimer structure.
dvander@564
    95
		 * @return
dvander@564
    96
		 */
dvander@564
    97
		virtual void KillTimer(ITimer *pTimer) =0;
dvander@564
    98
dvander@564
    99
		/**
dvander@564
   100
		 * @brief Arbitrarily fires a timer.  If the timer is not a repeating 
dvander@564
   101
		 * timer, this will also kill the timer.
dvander@564
   102
		 *
dvander@564
   103
		 * @param pTimer			Pointer to the ITimer structure.
dvander@564
   104
		 * @param delayExec			If true, and the timer is repeating, the
dvander@564
   105
		 *							next execution will be delayed by its interval.
dvander@564
   106
		 * @return
dvander@564
   107
		 */
dvander@564
   108
		virtual void FireTimerOnce(ITimer *pTimer, bool delayExec=false) =0;
dvander@564
   109
	};
dvander@564
   110
}
dvander@564
   111
dvander@564
   112
#endif //_INCLUDE_SOURCEMOD_TIMER_SYSTEM_H_