#ifndef __MOVECAPTURE_H__
#define __MOVECAPTURE_H__

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

class EXPORT_FROM_DLL MoveCapture : public TriggerUse
{
private:
	str outputvar;
	int lastvalue; // used to minimize the number of times the output is updated
	float usedebounce; // keep player from popping right back out
public:
	CLASS_PROTOTYPE( MoveCapture );
	MoveCapture();

	EntityPtr usingplayer; // pointer to current user

	virtual void Use( Event *ev );
	virtual void Activate( Event *ev );
	virtual void CaptureMovement( usercmd_t *ucmd );
	virtual void Deactivate( void );
	virtual void SetMCVariable( int newvalue );

	virtual void Archive( Archiver &arc );
	virtual void Unarchive( Archiver &arc );
};

inline EXPORT_FROM_DLL void MoveCapture::Archive( Archiver &arc )
{
	TriggerUse::Archive( arc );

	arc.WriteString( outputvar );
	arc.WriteInteger( lastvalue );
	arc.WriteFloat( usedebounce );
	arc.WriteSafePointer( usingplayer );
}

inline EXPORT_FROM_DLL void MoveCapture::Unarchive( Archiver &arc )
{
	TriggerUse::Unarchive( arc );

	arc.ReadString( &outputvar );
	arc.ReadInteger( &lastvalue );
	arc.ReadFloat( &usedebounce );
	arc.ReadSafePointer( &usingplayer );
}

template class EXPORT_FROM_DLL SafePtr<MoveCapture>;
typedef SafePtr<MoveCapture> MoveCapturePtr;

#endif