add Effect.ChangeLighting(red, green, blue, ambient) to Lua API

This commit is contained in:
Matthias Mailänder
2015-07-08 14:18:05 +02:00
parent 2fe98905a0
commit 25d14d87e1
2 changed files with 28 additions and 3 deletions

View File

@@ -9,6 +9,7 @@
#endregion #endregion
using System.Collections.Generic; using System.Collections.Generic;
using Eluant;
using OpenRA.Mods.Common.Traits; using OpenRA.Mods.Common.Traits;
using OpenRA.Scripting; using OpenRA.Scripting;
@@ -18,11 +19,13 @@ namespace OpenRA.Mods.Common.Scripting
public class EffectGlobal : ScriptGlobal public class EffectGlobal : ScriptGlobal
{ {
readonly IEnumerable<FlashPaletteEffect> fpes; readonly IEnumerable<FlashPaletteEffect> fpes;
readonly GlobalLightingPaletteEffect lighting;
public EffectGlobal(ScriptContext context) public EffectGlobal(ScriptContext context)
: base(context) : base(context)
{ {
fpes = context.World.WorldActor.TraitsImplementing<FlashPaletteEffect>(); fpes = context.World.WorldActor.TraitsImplementing<FlashPaletteEffect>();
lighting = context.World.WorldActor.TraitOrDefault<GlobalLightingPaletteEffect>();
} }
[Desc("Controls the `FlashPaletteEffect` trait.")] [Desc("Controls the `FlashPaletteEffect` trait.")]
@@ -32,5 +35,17 @@ namespace OpenRA.Mods.Common.Scripting
if (fpe.Info.Type == type) if (fpe.Info.Type == type)
fpe.Enable(ticks); fpe.Enable(ticks);
} }
[Desc("Dynamically adjusts the `GlobalLightingPaletteEffect` trait.")]
public void ChangeLighting(double red, double green, double blue, double ambient)
{
if (lighting == null)
throw new LuaException("GlobalLightingPaletteEffect needs to be added to the World actor first.");
lighting.Red = (float)red;
lighting.Green = (float)green;
lighting.Blue = (float)blue;
lighting.Ambient = (float)ambient;
}
} }
} }

View File

@@ -36,9 +36,19 @@ namespace OpenRA.Mods.Common.Traits
{ {
readonly GlobalLightingPaletteEffectInfo info; readonly GlobalLightingPaletteEffectInfo info;
public float Red;
public float Green;
public float Blue;
public float Ambient;
public GlobalLightingPaletteEffect(GlobalLightingPaletteEffectInfo info) public GlobalLightingPaletteEffect(GlobalLightingPaletteEffectInfo info)
{ {
this.info = info; this.info = info;
Red = info.Red;
Green = info.Green;
Blue = info.Blue;
Ambient = info.Ambient;
} }
public void AdjustPalette(IReadOnlyDictionary<string, MutablePalette> palettes) public void AdjustPalette(IReadOnlyDictionary<string, MutablePalette> palettes)
@@ -56,9 +66,9 @@ namespace OpenRA.Mods.Common.Traits
for (var x = 0; x < Palette.Size; x++) for (var x = 0; x < Palette.Size; x++)
{ {
var from = palette.GetColor(x); var from = palette.GetColor(x);
var red = (int)(from.R * info.Ambient * info.Red).Clamp(0, 255); var red = (int)(from.R * Ambient * Red).Clamp(0, 255);
var green = (int)(from.G * info.Ambient * info.Green).Clamp(0, 255); var green = (int)(from.G * Ambient * Green).Clamp(0, 255);
var blue = (int)(from.B * info.Ambient * info.Blue).Clamp(0, 255); var blue = (int)(from.B * Ambient * Blue).Clamp(0, 255);
palette.SetColor(x, Color.FromArgb(from.A, red, green, blue)); palette.SetColor(x, Color.FromArgb(from.A, red, green, blue));
} }
} }