dvander@592: /**
dvander@1231: * vim: set ts=4 :
ds@1330: * =============================================================================
dvander@1231: * SourceMod
dvander@1231: * Copyright (C) 2004-2007 AlliedModders LLC. All rights reserved.
ds@1330: * =============================================================================
dvander@1231: *
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@1231: *
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@1231: *
ds@1330: * You should have received a copy of the GNU General Public License along with
ds@1330: * this program. If not, see .
dvander@1231: *
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@1231: *
dvander@1231: * Version: $Id$
dvander@1231: */
dvander@592:
dvander@592: #ifndef _INCLUDE_SOURCEMOD_CTIMERSYS_H_
dvander@592: #define _INCLUDE_SOURCEMOD_CTIMERSYS_H_
dvander@592:
dvander@592: #include "ShareSys.h"
dvander@592: #include
dvander@592: #include
dvander@592: #include
dvander@592: #include "sourcemm_api.h"
dvander@592:
dvander@592: using namespace SourceHook;
dvander@592: using namespace SourceMod;
dvander@592:
dvander@592: typedef List TimerList;
dvander@592: typedef List::iterator TimerIter;
dvander@592:
dvander@592: class SourceMod::ITimer
dvander@592: {
dvander@592: public:
dvander@592: void Initialize(ITimedEvent *pCallbacks, float fInterval, float fToExec, void *pData, int flags);
dvander@592: ITimedEvent *m_Listener;
dvander@592: void *m_pData;
dvander@592: float m_Interval;
dvander@1714: double m_ToExec;
dvander@592: int m_Flags;
dvander@592: bool m_InExec;
dvander@592: bool m_KillMe;
dvander@592: };
dvander@592:
dvander@616: class TimerSystem :
dvander@592: public ITimerSystem,
dvander@592: public SMGlobalClass
dvander@592: {
faluco@641: public:
dvander@1408: TimerSystem();
faluco@641: ~TimerSystem();
dvander@592: public: //SMGlobalClass
dvander@592: void OnSourceModAllInitialized();
dvander@1412: void OnSourceModLevelEnd();
dvander@1414: void OnSourceModGameInitialized();
dvander@1412: void OnSourceModShutdown();
dvander@592: public: //ITimerSystem
dvander@592: ITimer *CreateTimer(ITimedEvent *pCallbacks, float fInterval, void *pData, int flags);
dvander@592: void KillTimer(ITimer *pTimer);
dvander@592: void FireTimerOnce(ITimer *pTimer, bool delayExec=false);
dvander@1415: void MapTimeLeftChanged();
dvander@1414: IMapTimer *SetMapTimer(IMapTimer *pTimer);
dvander@1415: float GetTickedTime();
dvander@1459: void NotifyOfGameStart(float offset /* = 0.0f */);
dvander@1459: bool GetMapTimeLeft(float *pTime);
dvander@592: public:
dvander@592: void RunFrame();
dvander@1721: void RemoveMapChangeTimers();
dvander@1412: void GameFrame(bool simulating);
dvander@1414: IMapTimer *GetMapTimer();
dvander@592: private:
dvander@592: List m_SingleTimers;
dvander@592: List m_LoopTimers;
dvander@592: CStack m_FreeTimers;
dvander@1414: IMapTimer *m_pMapTimer;
dvander@1412:
dvander@1412: /* This is stuff for our manual ticking escapades. */
dvander@1412: bool m_bHasMapTickedYet; /** Has the map ticked yet? */
dvander@1462: bool m_bHasMapSimulatedYet; /** Has the map simulated yet? */
dvander@1412: float m_fLastTickedTime; /** Last time that the game currently gave
dvander@1412: us while ticking.
dvander@1412: */
dvander@1412:
dvander@1412: IForward *m_pOnGameFrame;
dvander@1459: IForward *m_pOnMapTimeLeftChanged;
dvander@592: };
dvander@592:
dvander@1371: time_t GetAdjustedTime(time_t *buf = NULL);
dvander@1371:
dvander@1714: extern const double *g_pUniversalTime;
dvander@616: extern TimerSystem g_Timers;
dvander@1459: extern int g_TimeLeftMode;
dvander@592:
dvander@592: #endif //_INCLUDE_SOURCEMOD_CTIMERSYS_H_
dvander@1407: