You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

234 lines
3.9 KiB
C++

//
// G A M E.O.N.E - LOW LEVEL LIB V1.0
// Copyright (C) 2001 LEVEL ONE ENTERTAINMENT,
// Licensed under the terms of LGPL.
//:---------------------------------------------------------------------------
//:Description
//
// FRAMEWORK util timer, wait class
//
// CTimer
// CWait
//
#ifndef _CTIMER_H
#define _CTIMER_H
/************************************************************************/
// CWait
// Ablauftimer mit manuellen Reset
/************************************************************************/
class CWait
{
public:
CWait()
{
Set(0.0f);
m_pause = false;
}
CWait(float wait)
{
Set(wait);
m_pause = false;
}
/************************************************************************/
/* Action(delta)... liefert true wenn timer abgelaufen */
/************************************************************************/
bool Action(float delta )
{
if( m_time <= 0.0f )
{
return true; // timer trigger
}
if( m_pause ) return false;
m_time -= delta;
if( m_time <= 0.0f ){
m_time = 0.0f;
return true;
}
return false;
}
bool IsActive()
{
return (m_time > 0.0f ) ? true : false;
}
void Set(float wait)
{
m_wait = m_time = wait; // Timer WAIT setzen
}
void Reset()
{
m_time = m_wait; // wait neu setzen
}
void Load(float ntime)
{
m_time = ntime; // wert setzen
}
void Stop()
{
m_pause = true;
}
void Start()
{
m_pause = false;
}
void Pause()
{
m_pause = !m_pause;
}
float TimeLeft()
{
return m_time;
}
float Time()
{
return m_wait - m_time;
}
float Frac()
{
if( m_wait > 0.0f ) return m_time / m_wait;
return 0.0f;
}
bool operator >=(float v ) { return m_time >= v; }
bool operator <=(float v ) { return m_time <= v; }
bool operator <(float v ) { return m_time < v; }
bool operator >(float v ) { return m_time > v; }
bool operator ==(float v ) { return m_time == v; }
private:
float m_time; // aktuelle zeit, 0 = abgelaufen
float m_wait; // Load Wert, gesetzt durch Set()
bool m_pause; // wenn true f<>r timer stop
};
/************************************************************************/
/* Periodischer Timer, resetet sich nach ablauf */
/************************************************************************/
class CTimer
{
public:
/************************************************************************/
/* Construction */
/************************************************************************/
CTimer()
{
Set(0);
m_pause = false;
}
CTimer(float wait)
{
Set(wait);
m_pause = false;
}
/************************************************************************/
/* Action(delta)... liefert true wenn timer abgelaufen */
/************************************************************************/
bool Action(float delta )
{
if( m_pause ) return false;
m_time -= delta;
if( m_time < 0.0f )
{
m_time += m_wait;
m_count ++;
return true; // timer trigger
}
else
return false;
}
/************************************************************************/
/* Attribute */
/************************************************************************/
void Set(float wait)
{
m_time = m_wait = wait; // Timer WAIT setzen
}
void Load(float ntime)
{
m_time = ntime; // wert setzen
}
void Reset()
{
m_time = m_wait; // wait neu setzen
m_count = 0;
}
void Stop()
{
m_pause = true;
}
void Start()
{
m_pause = false;
}
void Pause()
{
m_pause = !m_pause;
}
int GetCount()
{
return m_count;
}
operator int ()
{
return m_count;
}
float TimeLeft()
{
return m_time;
}
float Time()
{
return m_wait - m_time;
}
float Frac()
{
if( m_wait > 0.0f ) return m_time / m_wait;
return 0.0f;
}
private:
float m_time;
float m_wait;
int m_count;
bool m_pause;
};
#endif // _CTIMER_H