//===========================================================================//
// File:	ppc.cc                                                              //
// Project: BattleTech                         										  //
// Contents: Particle Projection Cannon                                      //
//---------------------------------------------------------------------------//
//   Date    Who  Modification                                               //
// --------  ---  ---------------------------------------------------------- //
// 11/13/95  JM  Initial coding.                                             //
//---------------------------------------------------------------------------//
// Copyright (C) 1995, Virtual World Entertainment, Inc. All Rights reserved //
//                   	PROPRIETARY AND CONFIDENTIAL                         //
//===========================================================================//

#include <bt.hpp>
#pragma hdrstop

#if !defined (PPC_HPP)
#	include <ppc.hpp>
#endif

#if !defined(BTPLAYER_HPP)
#	include <btplayer.hpp>
#endif

#if !defined(BTMSSN_HPP)
#	include <btmssn.hpp>
#endif

//#############################################################################
// Shared Data Support
//
PPC::SharedData
	PPC::DefaultData(
		PPC::ClassDerivations,
		PPC::MessageHandlers,
		PPC::AttributeIndex,
		PPC::StateCount
	);

Derivation
	PPC::ClassDerivations(
		Emitter::ClassDerivations,
		"PPC"
	);

//#############################################################################
// Model Data Support
//

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
void
	PPC::FireWeapon()
{
	Check(this);

	Emitter::FireWeapon();


	return;

	#if 0
	Check(this);

	Mech *mech = GetEntity();
	Check(mech);

	BTPlayer *bt_player = Cast_Object(
		BTPlayer*,
		mech->GetPlayerLink()
	);
	Check(bt_player);
	Enumeration experienceLevel = bt_player->GetExperienceLevel();

	if (experienceLevel == BTMission::NoviceMode)
	{
		return;
	}

	if (targetWithinRange)
	{
		Damage energy_damage(damageData);
		energy_damage.damageType = Damage::EnergyDamageType;
		energy_damage.damageAmount = 0.0f;

		Mech *mech = GetEntity();
		Check(mech);

		SendDamage(
			mech->targetReticle.targetEntity,
			energy_damage
		);
	}
	#endif
}
//#############################################################################
// Constructer/Destructor Support
//

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
PPC::PPC(
	Mech 					*owner,
	int					subsystem_ID,
	SubsystemResource	*subsystem_resource,
	SharedData			&shared_data
):
	Emitter(owner, subsystem_ID, subsystem_resource, shared_data)
{


}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
PPC::~PPC()
{

}


//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Create Streamed Subsystem
//
Logical
	PPC::CreateStreamedSubsystem(
		ResourceFile					*resource_file,
		NotationFile					*model_file,
		const char						*model_name,
		const char						*subsystem_name,
		SubsystemResource				*subsystem_resource,
		NotationFile					*subsystem_file,
		const ResourceDirectories	*directories,
		int 								passes
	)
{
	if (
		!Emitter::CreateStreamedSubsystem(
			resource_file,
			model_file,
			model_name,
			subsystem_name,
			subsystem_resource,
			subsystem_file,
			directories,
			passes
		)
	)
	{
		return False;
	}

	subsystem_resource->subsystemModelSize = sizeof(*subsystem_resource);
	subsystem_resource->classID = RegisteredClass::PPCClassID;

	return True;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//
Logical
	PPC::TestInstance() const
{
	return IsDerivedFrom(ClassDerivations);
}

