//===========================================================================//
// File:	runner.hh                                                           //
// Project: Red Planet                                                       //
// Contents: Runner Implementation for Martian football                      //
//---------------------------------------------------------------------------//
//   Date    Who  Modification                                               //
// --------  ---  ---------------------------------------------------------- //
// 05/09/95  JM   Initial coding.                                            //
//---------------------------------------------------------------------------//
// Copyright (C) 1995, Virtual World Entertainment, Inc.                     //
// All Rights reserved worldwide                                             //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL               //
//===========================================================================//
#if !defined(RUNNER_HPP)
#	define RUNNER_HPP

#	if !defined(RPPLAYER_HPP)
#		include <rpplayer.hpp>
#	endif

	//##########################################################################
	//###########################    Runner     ################################
	//##########################################################################
class Runner:
		public RPPlayer
	{
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Shared Data support
	//
	public:
		static Derivation ClassDerivations;
		static SharedData DefaultData;
	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Message Support
	//
	private:
		static const HandlerEntry MessageHandlerEntries[];

	protected:
		static MessageHandlerSet MessageHandlers;

	public:
		void
			ScoreZoneReplyMessageHandler(ScoreZone__ReplyMessage *message);
		void
			ScoreMessageHandler(ScoreMessage *message);
		void
			VehicleDeadMessageHandler(VehicleDeadMessage *message);
		void
			DropZoneReplyMessageHandler(DropZone__ReplyMessage *message);


	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Model Support
	//
	public:

		typedef void
			(Runner::*Performance)(Scalar time_slice);

		void
			SetPerformance(Performance performance)
			{
				Check(this);
				activePerformance = (Simulation::Performance)performance;
			}

		Time
			dropZonePenaltyOver;
		Scalar
			scoreMultiplier;

	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	// Construction and Destruction
	//
	public:
		Runner(
			MakeMessage *creation_message,
			SharedData &shared_data = DefaultData
		);
		~Runner() {}

		Logical
      	TestInstance() const;

		static Runner*
			Make(MakeMessage *creation_message);

		void
			AddOffensivePlayer(OffensivePlayer &offensive_player);

	};

#endif
