//-----------------------------------------------------------------------------------
//
//   Torque Network Library - ZAP example multiplayer vector graphics space game
//   Copyright (C) 2004 GarageGames.com, Inc.
//   For more information see http://www.opentnl.org
//
//   This program is free software; you can redistribute it and/or modify
//   it under the terms of the GNU General Public License as published by
//   the Free Software Foundation; either version 2 of the License, or
//   (at your option) any later version.
//
//   For use in products that are not compatible with the terms of the GNU 
//   General Public License, alternative licensing options are available 
//   from GarageGames.com.
//
//   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 General Public License for more details.
//
//   You should have received a copy of the GNU General Public License
//   along with this program; if not, write to the Free Software
//   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
//------------------------------------------------------------------------------------

#ifndef _TIMER_H_
#define _TIMER_H_

#include "tnlTypes.h"
using namespace TNL;

namespace Zap
{

class Timer
{
   U32 mPeriod;
   U32 mCurrentCounter;
public:
   Timer(U32 period = 0)
   {
      mCurrentCounter = mPeriod = period;
   }

   bool update(U32 timeDelta)
   {
      if(!mCurrentCounter)
         return false;

      if(timeDelta >= mCurrentCounter)
      {
         mCurrentCounter = 0;
         return true;
      }
      mCurrentCounter -= timeDelta;
      return false;
   }

   U32 getCurrent()
   {
      return mCurrentCounter;
   }

   F32 getFraction()
   {
      if(!mPeriod)
         return 1;
      return 1 - (mCurrentCounter / F32(mPeriod));
   }

   void reset()
   {
      mCurrentCounter = mPeriod;
   }

   void reset(U32 newCounter, U32 newPeriod = 0)
   {
      if(!newPeriod)
         newPeriod = newCounter;
      mCurrentCounter = newCounter;
      mPeriod = newPeriod;
   }
};


};

#endif
