// // 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