/**
 *	ParticleModuleUberLTISIVCLILIRSSBLIRR
 *
 *	Uber-module replacing the following classes:
 *		LT   - Lifetime
 *		IS   - Initial Size
 *		IV   - Initial Velocity
 *		CL   - Color over Life
 *      IL   - Initial Location
 *		IR   - Initial Rotation
 *		SSBL - Scale Size By Life
 *		IRR  - Initial Rotation Rate
 *
 * Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
 */
 
class ParticleModuleUberLTISIVCLILIRSSBLIRR extends ParticleModuleUberBase
	native(Particle)
	editinlinenew
	collapsecategories
	hidecategories(Object);

//------------------------------------------------------------------------------------------------
// Members
//------------------------------------------------------------------------------------------------
/** Lifetime - Gives the lifetime of the particles												*/
var(Lifetime)	export noclear		rawdistributionfloat		Lifetime;	

/** Size - Gives the size of the particles														*/
var(Size)		export noclear		rawdistributionvector		StartSize;

/** StartVelociy - Gives the start velocity of the particles									*/
var(Velocity)	export noclear		rawdistributionvector		StartVelocity;
/** StartRadialVelociy - Gives the start radial velocity of the particles						*/
var(Velocity)	export noclear		rawdistributionfloat		StartVelocityRadial;

/** ColorOverLife - Gives the color to apply to the particles									*/
var(Color)		export noclear		rawdistributionvector		ColorOverLife;
/** AlphaOverLife - Gives the alpha to apply to the particles									*/
var(Color)		export noclear		rawdistributionfloat		AlphaOverLife;

/** StartLocation - Gives the start location of particles										*/
var(Location)	export noclear		rawdistributionvector		StartLocation;

/** StartRotation - Gives the rotation of particles in turns (1 = 360 degrees)					*/
var(Rotation)	export noclear		rawdistributionfloat		StartRotation;

/** SizeLifeMultiplier - Size scale factor														*/
var(Size)		export noclear		rawdistributionvector		SizeLifeMultiplier;
/** MultiplyX - If TRUE, scale along the X size axis											*/
var(Size)							bool					SizeMultiplyX;
/** MultiplyY - If TRUE, scale along the Y size axis											*/
var(Size)							bool					SizeMultiplyY;
/** MultiplyZ - If TRUE, scale along the Z size axis											*/
var(Size)							bool					SizeMultiplyZ;

/** StartRotationRate - Gives the rotation rate of particles in turns per second				*/
var(Rotation)	export noclear		rawdistributionfloat		StartRotationRate;

//------------------------------------------------------------------------------------------------
// C++ Text
//------------------------------------------------------------------------------------------------
cpptext
{
	/** Copy the contents of the modules to the UberModule								*/
	virtual	UBOOL				ConvertToUberModule(UParticleEmitter* InputEmitter);

	/** Spawn - called when spawning particles											*/
	virtual void				Spawn(FParticleEmitterInstance* Owner, INT Offset, FLOAT SpawnTime);
	/** Update - called when updating particles											*/
	virtual void				Update(FParticleEmitterInstance* Owner, INT Offset, FLOAT DeltaTime);
}

//------------------------------------------------------------------------------------------------
// Default Properties
//------------------------------------------------------------------------------------------------
defaultproperties
{
	bSpawnModule=true
	bUpdateModule=true

	// Lifetime
	Begin Object Class=DistributionFloatUniform Name=DistributionLifetime
		Min=1
		Max=1
	End Object
	Lifetime=(Distribution=DistributionLifetime)
	
	// Size
	Begin Object Class=DistributionVectorUniform Name=DistributionStartSize
		Min=(X=1,Y=1,Z=1)
		Max=(X=1,Y=1,Z=1)
	End Object
	StartSize=(Distribution=DistributionStartSize)
	
	// Velocity
	Begin Object Class=DistributionVectorUniform Name=DistributionStartVelocity
		Min=(X=0,Y=0,Z=0)
		Max=(X=0,Y=0,Z=10)
	End Object
	StartVelocity=(Distribution=DistributionStartVelocity)
	
	Begin Object Class=DistributionFloatUniform Name=DistributionStartVelocityRadial
	End Object
	StartVelocityRadial=(Distribution=DistributionStartVelocityRadial)
	
	// ColorOverLife
	Begin Object Class=DistributionVectorConstantCurve Name=DistributionColorOverLife
	End Object
	ColorOverLife=(Distribution=DistributionColorOverLife)

	Begin Object Class=DistributionFloatConstant Name=DistributionAlphaOverLife
		Constant=255.9f;
	End Object
	AlphaOverLife=(Distribution=DistributionAlphaOverLife)

	// Location
	Begin Object Class=DistributionVectorUniform Name=DistributionStartLocation
	End Object
	StartLocation=(Distribution=DistributionStartLocation)

	// Rotation
	Begin Object Class=DistributionFloatUniform Name=DistributionStartRotation
		Min=0.0
		Max=1.0
	End Object
	StartRotation=(Distribution=DistributionStartRotation)

	// SizeMultipleLife
	SizeMultiplyX=true
	SizeMultiplyY=true
	SizeMultiplyZ=true

	Begin Object Class=DistributionVectorConstant Name=DistributionLifeMultiplier
		Constant=(X=1,Y=1,Z=1)
	End Object
	SizeLifeMultiplier=(Distribution=DistributionLifeMultiplier)
	
	// RotationRate
	Begin Object Class=DistributionFloatConstant Name=DistributionStartRotationRate
	End Object
	StartRotationRate=(Distribution=DistributionStartRotationRate)

	// RequiredModules
 	RequiredModules(0)=ParticleModuleLifetime
	RequiredModules(1)=ParticleModuleSize
	RequiredModules(2)=ParticleModuleVelocity
	RequiredModules(3)=ParticleModuleColorOverLife
	RequiredModules(4)=ParticleModuleLocation
	RequiredModules(5)=ParticleModuleRotation
	RequiredModules(6)=ParticleModuleSizeMultiplyLife
	RequiredModules(7)=ParticleModuleRotationRate
}