// ***************************************************************************
//
// Reality - The Matrix Online Server Emulator
// Copyright (C) 2006-2010 Rajko Stojadinovic
// http://mxoemu.info
//
// ---------------------------------------------------------------------------
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
//
// ---------------------------------------------------------------------------
//
// ***************************************************************************
#ifndef MXOSIM_TIMER_H
#define MXOSIM_TIMER_H
#include
#include
/**
* This is a very simple timer that can be used to schedule different
* events to happen over certain periods of time. The timer period is
* limited to about 60000 units, no matter what units - the timer
* does not make any assumptions about that.
*/
class Timer
{
uint16 Interval;
uint16 Current;
public:
/**
* Initialize the timer so that it ticks with specified period.
* If interval is 0, timer is disabled.
*/
Timer ()
{ Current = 0; }
/// Check if timer is enabled
bool Enabled () const
{ return Interval != 0; }
/// Disable timer: there's no way to enable it other than using SetInterval()
void Disable ()
{ Interval = 0; }
/**
* Change timer interval
*/
void SetInterval (uint16 interval)
{ Interval = interval; Current = 0; }
/**
* Tell the timer that a certain interval of time has passed.
* @arg delta
* Delta time that have passed since last call to this function.
* @return
* Number of timer pulses that have passed.
*/
uint Tick (uint delta)
{
Current += delta;
if (!Interval || Current < Interval)
return 0;
div_t d = div (Current, Interval);
Current = d.rem;
return d.quot;
}
/**
* Reset the timer so that next event will happen
* after Interval ticks.
*/
void Reset ()
{ Current = 0; }
};
inline uint32 getTime()
{
return (uint32)time(NULL);
}
float getFloatTime();
uint32 getMSTime();
#endif