// I'd like this to be a sort of multi-purpose actor for the chopper.
// It can be set up to use any combination of pre-made take-off / landing anims.
class ChopperProp extends Decoration;

var() enum NameEn
{
	Land_London,
	Leave_London,
	Leave_Manor,
	Crash_Manor,
	StrafingRun_Land,
	Do_Nothing
} ChopperAnim,ChopperTriggeredAnim;

var bool bTriggered,bClientTriggered; // Only Trigger Once.

// shadow variables
var Projector Shadow;
var ShadowProjector PlayerShadow;
var globalconfig bool bBlobShadow;
var Effect_ShadowController RealtimeShadow;

replication
{
	// Variables the server should send to the client.
	reliable if( bNetDirty && (Role==ROLE_Authority) )
		bTriggered;
}

simulated function PostBeginPlay()
{
	if( Level.NetMode==NM_DedicatedServer )
		Return;

	// decide which type of shadow to spawn
	if( !Class'KFPawn'.Default.bRealtimeShadows )
	{
		PlayerShadow = Spawn(class'ShadowProjector',Self,'',Location);
		PlayerShadow.ShadowActor = self;
		PlayerShadow.bBlobShadow = bBlobShadow;
		PlayerShadow.LightDirection = Normal(vect(1,1,3));
		PlayerShadow.LightDistance = 320;
		PlayerShadow.MaxTraceDistance = 350;
		PlayerShadow.InitShadow();
	}
	else
	{
		RealtimeShadow = Spawn(class'Effect_ShadowController',self,'',Location);
		RealtimeShadow.Initialize();
	}
}

simulated function PostNetBeginPlay()
{
	if( bTriggered )
		PlayChopperAnim(ChopperTriggeredAnim);
	else PlayChopperAnim(ChopperAnim);
	bClientTriggered = bTriggered;
	bNetNotify = True;
}

simulated function PostNetReceive()
{
	if( bClientTriggered==bTriggered )
		Return;
	if( bTriggered )
		PlayChopperAnim(ChopperTriggeredAnim);
	else PlayChopperAnim(ChopperAnim);
	bClientTriggered = bTriggered;
}

simulated function PlayChopperAnim( NameEn ChAnim )
{
	if( Level.NetMode==NM_DedicatedServer )
		Return;

	// Starting Anim.
	Switch( ChAnim )
	{
		Case Land_London:
			PlayAnim('Land_London');
			Break;
		Case Leave_London:
			PlayAnim('Leave_London');
			Break;
		Case Crash_Manor:
			PlayAnim('Crash_Manor');
			Break;
		Case StrafingRun_Land:
			PlayAnim('StrafingRun_Land');
			Break;
	}
}

function FireRockets() // And the point of this function is (it isnt even in sync with the mesh)?
{
	local vector Start;
	local rotator Dir;
	local Projectile P;

	Start = Location;
	Dir = Rotation;

	P = Spawn(class'KFMod.LawProj',,, Start, Dir);
}

function RemoveChopper()
{
	bHidden = true;
} 

// Triggered / Secondary Anim
function Trigger( actor Other, pawn EventInstigator )
{
	if (bTriggered)
		return;

	NetUpdateTime = Level.TimeSeconds - 1;
	PlayChopperAnim(ChopperTriggeredAnim);
	bTriggered = true;
}

simulated function Destroyed()
{
	if( PlayerShadow != None )
		PlayerShadow.Destroy();
	if(RealtimeShadow !=none)
		RealtimeShadow.Destroy();
	Super.Destroyed();
}

function Reset()
{
	bTriggered = False;
	NetUpdateTime = Level.TimeSeconds - 1;
	PlayChopperAnim(ChopperAnim);
}

defaultproperties
{
	bStatic=False
	bStasis=False
	Mesh=SkeletalMesh'Chopper'
	DrawScale=2.500000
	RemoteRole=ROLE_SimulatedProxy
	bNoDelete=True
	NetUpdateFrequency=0.5
	bSkipActorPropertyReplication=True
	bAlwaysRelevant=True
}
