/**
 *
 * Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
 */

class UDKVehicleWheel extends SVehicleWheel
	native;

/** if set, this wheel should use material specific effects defined by the UDKVehicle that owns it */
var bool bUseMaterialSpecificEffects;

/** old particle component left when switching materials so that it doesn't get abruptly cut off */
var ParticleSystemComponent OldWheelParticleComp;

/** if non-zero, only activate the wheel effect when SpinVel's sign is the same as this property */
var float EffectDesiredSpinDir;

/** If true, when vehicle dies, turn off this wheel. */
var bool bDisableWheelOnDeath;

/** 
  * Called to update wheel particle effect if bUseMaterialSpecificEffects=true and material being driven on changes.
  * Passed in NewTemplate is selected from the OwnerVehicle's WheelParticleEffects array 
  */
event SetParticleEffect(UDKVehicle OwnerVehicle, ParticleSystem NewTemplate)
{
	// if another old component is still playing, its time to die is up, kill it
	if (OldWheelParticleComp != None)
	{
		OwnerVehicle.DetachComponent(OldWheelParticleComp);
	}
	// copy the current component
	OldWheelParticleComp = WheelParticleComp;
	WheelParticleComp = new(self) WheelPSCClass(OldWheelParticleComp);

	// set the particle effect on the new component and attach it
	WheelParticleComp.SetTemplate(NewTemplate);
	OwnerVehicle.AttachComponent(WheelParticleComp);

	// set the old one to die out and notify us when it does
	if (OldWheelParticleComp.Template == None)
	{
		OwnerVehicle.DetachComponent(OldWheelParticleComp);
		OldWheelParticleComp = None;
	}
	else
	{
		OldWheelParticleComp.OnSystemFinished = OldEffectFinished;
		OldWheelParticleComp.DeactivateSystem();
	}
}

/**  
  * Called when OldWheelParticleComponent is finished
  */
function OldEffectFinished(ParticleSystemComponent PSystem)
{
	PSystem.Owner.DetachComponent(PSystem);
	if (PSystem == OldWheelParticleComp)
	{
		OldWheelParticleComp = None;
	}
}

cpptext
{
	/** @return whether this wheel should have a particle component attached to it */
	virtual UBOOL WantsParticleComponent();
}

defaultproperties
{
	WheelPSCClass=class'UDKParticleSystemComponent'
	bCollidesPawns=TRUE
}
