//===========================================================================//
// File:	btcnsl.hpp                                                          //
// Project: BattleTech           Brick: Console                               //
// Contents: BT->Console network messages (player score/damage/kill feed)     //
//---------------------------------------------------------------------------//
// Copyright (C) 1995, Virtual World Entertainment, Inc. All Rights reserved //
//                      PROPRIETARY AND CONFIDENTIAL                         //
//===========================================================================//
//
// RECONSTRUCTED.  The surviving BTCNSL.CPP implements these classes but its
// header (BTCNSL.HPP) was lost.  The class names, member layout and
// constructor signatures here are recovered verbatim from BTCNSL.CPP; they
// all derive from NetworkClient::Message (MUNGA/NETWORK.h) exactly as the
// Red Planet analog (RP/RPCNSL.h) does.
//
// The recovered btplayer.cpp refers to two of these messages by the Red Planet
// placeholder names the decompiler emitted (...VTVDamaged / ...VTVScoreUpdate);
// the typedefs at the bottom map those to the real BT (Mech) classes so the
// reconstructed bodies compile unchanged.
//
#if !defined(BTCNSL_HPP)
#	define BTCNSL_HPP

#	if !defined(CONSOLE_HPP)
#		include <console.hpp>		// NetworkClient::Message, HostID, ConsoleClientID
#	endif

	//~~~~~~~~~~~~~~~~~~~~~~~~~ Console Message IDs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	//
	// Stream IDs for the BT->console feed (values mirror the RP layout; the exact
	// numbers are not load-bearing for the reconstruction -- they only need to be
	// distinct stream tags).
	//
	enum
	{
		ConsolePlayerMechKilledMessageID			= 2,
		ConsolePlayerMechScoreUpdateMessageID		= 3,
		ConsoleBTTeamScoreUpdateMessageID			= 4,
		ConsolePlayerMechDamagedMessageID			= 5,
		ConsolePlayerMechDeathWithoutHonorMessageID	= 6
	};

	//~~~~~~~~~~~~~~~~~~ ConsolePlayerMechKilledMessage ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	class ConsolePlayerMechKilledMessage:
		public NetworkClient::Message
	{
	public:
		ConsolePlayerMechKilledMessage(
			HostID player_host_ID,
			HostID killer_host_ID
		);

		HostID	GetPlayerHostID()	{ return playerHostID; }
		HostID	GetKillerHostID()	{ return killerHostID; }

	private:
		HostID	playerHostID;
		HostID	killerHostID;
	};

	//~~~~~~~~~~~~~~~~~~ ConsolePlayerMechScoreUpdateMessage ~~~~~~~~~~~~~~~~~~~~~~~~
	class ConsolePlayerMechScoreUpdateMessage:
		public NetworkClient::Message
	{
	public:
		ConsolePlayerMechScoreUpdateMessage(
			HostID player_host_ID,
			int score
		);

		HostID	GetPlayerHostID()	{ return playerHostID; }
		int		GetPlayerScore()	{ return playerScore; }

	private:
		HostID	playerHostID;
		int		playerScore;
	};

	//~~~~~~~~~~~~~~~~~~ ConsoleBTTeamScoreUpdateMessage ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	class ConsoleBTTeamScoreUpdateMessage:
		public NetworkClient::Message
	{
	public:
		ConsoleBTTeamScoreUpdateMessage(
			int team_ID,
			int score
		);

		int		GetTeamID()		{ return teamID; }
		int		GetTeamScore()	{ return teamScore; }

	private:
		int		teamID;
		int		teamScore;
	};

	//~~~~~~~~~~~~~~~~~~ ConsolePlayerMechDamagedMessage ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	class ConsolePlayerMechDamagedMessage:
		public NetworkClient::Message
	{
	public:
		ConsolePlayerMechDamagedMessage(
			HostID	player_host_ID,
			HostID	damager_host_ID,
			int		loss,
			int		damage_zone_index,
			Logical	damage_zone_destroyed,
			int		points_transfered,
			int		weapon_index
		);

		HostID	GetPlayerHostID()		{ return playerHostID; }
		HostID	GetDamagerHostID()		{ return damagerHostID; }
		int		GetDamageLoss()			{ return damageLoss; }
		int		GetPointsTransfered()	{ return pointsTransfered; }
		int		GetDamageZoneIndex()	{ return damageZoneIndex; }
		Logical	GetDamageZoneDestroyed(){ return damageZoneDestroyed; }
		int		GetWeaponIndex()		{ return weaponIndex; }

	private:
		HostID	playerHostID;
		HostID	damagerHostID;
		int		damageLoss;
		int		pointsTransfered;
		int		damageZoneIndex;
		Logical	damageZoneDestroyed;
		int		weaponIndex;
	};

	//~~~~~~~~~~~~~~~ ConsolePlayerMechDeathWithoutHonorMessage ~~~~~~~~~~~~~~~~~~~~~
	class ConsolePlayerMechDeathWithoutHonorMessage:
		public NetworkClient::Message
	{
	public:
		ConsolePlayerMechDeathWithoutHonorMessage(
			HostID player_host_ID
		);

		HostID	GetPlayerHostID()	{ return playerHostID; }

	private:
		HostID	playerHostID;
	};

	//~~~~~~~~~~~~~~~~~~~~~~ decompiler placeholder aliases ~~~~~~~~~~~~~~~~~~~~~~~~~~
	// btplayer.cpp (recovered) names these two by the Red Planet form.
	typedef ConsolePlayerMechDamagedMessage		ConsolePlayerVTVDamagedMessage;
	typedef ConsolePlayerMechScoreUpdateMessage	ConsolePlayerVTVScoreUpdateMessage;

#endif
