class DynamicLight : Actor native
{
	enum EArgs
	{
	   LIGHT_RED = 0,
	   LIGHT_GREEN = 1,
	   LIGHT_BLUE = 2,
	   LIGHT_INTENSITY = 3,
	   LIGHT_SECONDARY_INTENSITY = 4,
	   LIGHT_SCALE = 3,
	};

	enum ELightType
	{
		PointLight,
		PulseLight,
		FlickerLight,
		RandomFlickerLight,
		SectorLight,
		SpotLight,
		ColorPulseLight,
		ColorFlickerLight, 
		RandomColorFlickerLight
	};
	
	Default
	{
		Height 0;
		Radius 0.1;
		FloatBobPhase 0;
		RenderRadius -1;
		+NOBLOCKMAP
		+NOGRAVITY
		+FIXMAPTHINGPOS
		+INVISIBLE
	}
}


class PointLight : DynamicLight
{
	Default
	{
		DynamicLight.Type "Point";
	}
}

class PointLightPulse : PointLight
{
	Default
	{
		DynamicLight.Type "Pulse";
	}
}

class PointLightFlicker : PointLight
{
	Default
	{
		DynamicLight.Type "Flicker";
	}
}

class SectorPointLight : PointLight
{
	Default
	{
		DynamicLight.Type "Sector";
	}
}

class PointLightFlickerRandom : PointLight
{
	Default
	{
		DynamicLight.Type "RandomFlicker";
	}
}

// MISSILEMORE and MISSILEEVENMORE are used by the lights for additive and subtractive lights

class PointLightAdditive : PointLight
{
	Default
	{
		+MISSILEMORE
	}
}

class PointLightPulseAdditive : PointLightPulse
{
	Default
	{
		+MISSILEMORE
	}
}

class PointLightFlickerAdditive : PointLightFlicker
{
	Default
	{
		+MISSILEMORE
	}
}

class SectorPointLightAdditive : SectorPointLight
{
	Default
	{
		+MISSILEMORE
	}
}

class PointLightFlickerRandomAdditive :PointLightFlickerRandom
{
	Default
	{
		+MISSILEMORE
	}
}

class PointLightSubtractive : PointLight
{
	Default
	{
		+MISSILEEVENMORE
	}
}

class PointLightPulseSubtractive : PointLightPulse
{
	Default
	{
		+MISSILEEVENMORE
	}
}

class PointLightFlickerSubtractive : PointLightFlicker
{
	Default
	{
		+MISSILEEVENMORE
	}
}

class SectorPointLightSubtractive : SectorPointLight
{
	Default
	{
		+MISSILEEVENMORE
	}
}

class PointLightFlickerRandomSubtractive : PointLightFlickerRandom
{
	Default
	{
		+MISSILEEVENMORE
	}
}

class PointLightAttenuated : PointLight
{
	Default
	{
		+INCOMBAT
	}
}

class PointLightPulseAttenuated : PointLightPulse
{
	Default
	{
		+INCOMBAT
	}
}

class PointLightFlickerAttenuated : PointLightFlicker
{
	Default
	{
		+INCOMBAT
	}
}

class SectorPointLightAttenuated : SectorPointLight
{
	Default
	{
		+INCOMBAT
	}
}

class PointLightFlickerRandomAttenuated :PointLightFlickerRandom
{
	Default
	{
		+INCOMBAT
	}
}


class VavoomLight : DynamicLight 
{
	Default
	{
		DynamicLight.Type "Point";
	}
	
	override void BeginPlay ()
	{
		if (CurSector) AddZ(-CurSector.floorplane.ZatPoint(pos.XY), false); // z is absolute for Vavoom lights
		Super.BeginPlay();
	}
}

class VavoomLightWhite : VavoomLight
{
	override void BeginPlay ()
	{
		args[LIGHT_INTENSITY] = args[0] * 4;
		args[LIGHT_RED] = 128;
		args[LIGHT_GREEN] = 128;
		args[LIGHT_BLUE] = 128;

		Super.BeginPlay();
	}
}

class VavoomLightColor : VavoomLight
{
	override void BeginPlay ()
	{
		int radius = args[0] * 4;
		args[LIGHT_RED] = args[1] >> 1;
		args[LIGHT_GREEN] = args[2] >> 1;
		args[LIGHT_BLUE] = args[3] >> 1;
		args[LIGHT_INTENSITY] = radius;
		Super.BeginPlay();
	}
}


