add Effect.ChangeLighting(red, green, blue, ambient) to Lua API
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user