//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/mover.h                          $
// $Revision:: 10                                                             $
//   $Author:: Markd                                                          $
//     $Date:: 9/28/98 9:12p                                                  $
//
// Copyright (C) 1997 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/mover.h                               $
// 
// 10    9/28/98 9:12p Markd
// Put in archive and unarchive functions
// 
// 9     4/05/98 2:00a Jimdose
// added moveflags
// 
// 8     3/23/98 1:33p Jimdose
// Revamped event and command system
// 
// 7     3/02/98 8:49p Jimdose
// Changed CLASS_PROTOTYPE to only take the classname
// 
// 6     2/16/98 2:13p Jimdose
// Changed EVENT_MOVER_MOVEDONE to EVENT_MOVEDONE so that physics can delay the
// movedone events
// Removed unused variables
// 
// 5     2/03/98 10:45a Jimdose
// Updated to work with Quake 2 engine
// Made changeover from hackthinker to events
// 
// 3     10/27/97 2:59p Jimdose
// Removed dependency on quakedef.h
// 
// 2     9/26/97 5:23p Jimdose
// Added standard Ritual headers
//
// DESCRIPTION:
// Base class for any object that needs to move to specific locations over a
// period of time.  This class is kept separate from most entities to keep
// class size down for objects that don't need such behavior.
// 

#ifndef __MOVER_H__
#define __MOVER_H__

#include "g_local.h"
#include "entity.h"
#include "trigger.h"

class Mover : public Trigger
	{
	private:
		Vector				finaldest;
		Vector				angledest;
		Event					endevent;
		int					moveflags;

	public:
		CLASS_PROTOTYPE( Mover );

		void					MoveDone( Event *ev );
		void					MoveTo( Vector tdest, Vector angdest, float tspeed, Event &event );
		void					LinearInterpolate( Vector tdest, Vector angdest, float time, Event &event );
	   virtual void      Archive( Archiver &arc );
      virtual void      Unarchive( Archiver &arc );
	};

inline void Mover::Archive
	(
	Archiver &arc
	)
   {
   Trigger::Archive( arc );

   arc.WriteVector( finaldest );
   arc.WriteVector( angledest );
   arc.WriteEvent( endevent );
   arc.WriteInteger( moveflags );
   }

inline void Mover::Unarchive
	(
	Archiver &arc
	)
   {
   Trigger::Unarchive( arc );

   arc.ReadVector( &finaldest );
   arc.ReadVector( &angledest );
   arc.ReadEvent( &endevent );
   arc.ReadInteger( &moveflags );
   }

#endif
