class DynamicLight : Actor native { native double SpotInnerAngle; native double SpotOuterAngle; property SpotInnerAngle: SpotInnerAngle; property SpotOuterAngle: SpotOuterAngle; 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, DummyLight, 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"; } } // DYNAMICLIGHT.ADDITIVE and DYNAMICLIGHT.SUBTRACTIVE are used by the lights for additive and subtractive lights class PointLightAdditive : PointLight { Default { +DYNAMICLIGHT.ADDITIVE } } class PointLightPulseAdditive : PointLightPulse { Default { +DYNAMICLIGHT.ADDITIVE } } class PointLightFlickerAdditive : PointLightFlicker { Default { +DYNAMICLIGHT.ADDITIVE } } class SectorPointLightAdditive : SectorPointLight { Default { +DYNAMICLIGHT.ADDITIVE } } class PointLightFlickerRandomAdditive :PointLightFlickerRandom { Default { +DYNAMICLIGHT.ADDITIVE } } class PointLightSubtractive : PointLight { Default { +DYNAMICLIGHT.SUBTRACTIVE } } class PointLightPulseSubtractive : PointLightPulse { Default { +DYNAMICLIGHT.SUBTRACTIVE } } class PointLightFlickerSubtractive : PointLightFlicker { Default { +DYNAMICLIGHT.SUBTRACTIVE } } class SectorPointLightSubtractive : SectorPointLight { Default { +DYNAMICLIGHT.SUBTRACTIVE } } class PointLightFlickerRandomSubtractive : PointLightFlickerRandom { Default { +DYNAMICLIGHT.SUBTRACTIVE } } class PointLightAttenuated : PointLight { Default { +DYNAMICLIGHT.ATTENUATE } } class PointLightPulseAttenuated : PointLightPulse { Default { +DYNAMICLIGHT.ATTENUATE } } class PointLightFlickerAttenuated : PointLightFlicker { Default { +DYNAMICLIGHT.ATTENUATE } } class SectorPointLightAttenuated : SectorPointLight { Default { +DYNAMICLIGHT.ATTENUATE } } class PointLightFlickerRandomAttenuated :PointLightFlickerRandom { Default { +DYNAMICLIGHT.ATTENUATE } } class SpotLight : DynamicLight { Default { DynamicLight.Type "Point"; +DYNAMICLIGHT.SPOT } } class SpotLightPulse : SpotLight { Default { DynamicLight.Type "Pulse"; } } class SpotLightFlicker : SpotLight { Default { DynamicLight.Type "Flicker"; } } class SectorSpotLight : SpotLight { Default { DynamicLight.Type "Sector"; } } class SpotLightFlickerRandom : SpotLight { Default { DynamicLight.Type "RandomFlicker"; } } 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(); } }