Add support for TS-style tinted target flashes.
This commit is contained in:
@@ -64,10 +64,10 @@ namespace OpenRA.Mods.Common.Traits
|
||||
if (tick / 4 < captorOwners.Count && tick % 4 == 0)
|
||||
{
|
||||
var captorOwner = captorOwners[tick / 4];
|
||||
self.World.Add(new FlashTarget(self, captorOwner));
|
||||
self.World.Add(new FlashTarget(self, captorOwner.Color));
|
||||
foreach (var captor in captors)
|
||||
if (captor.Owner == captorOwner)
|
||||
self.World.Add(new FlashTarget(captor, captorOwner));
|
||||
self.World.Add(new FlashTarget(captor, captorOwner.Color));
|
||||
}
|
||||
|
||||
if (++tick >= Info.Interval)
|
||||
|
||||
@@ -179,7 +179,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
self.ChangeOwner(captor.Owner);
|
||||
|
||||
if (self.Owner == self.World.LocalPlayer)
|
||||
w.Add(new FlashTarget(self));
|
||||
w.Add(new FlashTarget(self, Color.White));
|
||||
|
||||
var pc = captor.Info.TraitInfoOrDefault<ProximityCaptorInfo>();
|
||||
foreach (var t in self.TraitsImplementing<INotifyCapture>())
|
||||
|
||||
@@ -10,10 +10,13 @@
|
||||
#endregion
|
||||
|
||||
using OpenRA.Mods.Common.Effects;
|
||||
using OpenRA.Primitives;
|
||||
using OpenRA.Traits;
|
||||
|
||||
namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
public enum ActorFlashType { Overlay, Tint }
|
||||
|
||||
[Desc("Renders an effect at the order target locations.")]
|
||||
public class OrderEffectsInfo : TraitInfo
|
||||
{
|
||||
@@ -28,6 +31,24 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[Desc("The palette to use.")]
|
||||
public readonly string TerrainFlashPalette;
|
||||
|
||||
[Desc("The type of effect to apply to targeted (frozen) actors. Accepts values Overlay and Tint.")]
|
||||
public readonly ActorFlashType ActorFlashType = ActorFlashType.Overlay;
|
||||
|
||||
[Desc("The overlay color to display when ActorFlashType is Overlay.")]
|
||||
public readonly Color ActorFlashOverlayColor = Color.White;
|
||||
|
||||
[Desc("The overlay transparency to display when ActorFlashType is Overlay.")]
|
||||
public readonly float ActorFlashOverlayAlpha = 0.5f;
|
||||
|
||||
[Desc("The tint to apply when ActorFlashType is Tint.")]
|
||||
public readonly float3 ActorFlashTint = new float3(1.4f, 1.4f, 1.4f);
|
||||
|
||||
[Desc("Number of times to flash (frozen) actors.")]
|
||||
public readonly int ActorFlashCount = 2;
|
||||
|
||||
[Desc("Number of ticks between (frozen) actor flashes.")]
|
||||
public readonly int ActorFlashInterval = 2;
|
||||
|
||||
public override object Create(ActorInitializer init)
|
||||
{
|
||||
return new OrderEffects(this);
|
||||
@@ -47,13 +68,25 @@ namespace OpenRA.Mods.Common.Traits
|
||||
{
|
||||
if (target.Type == TargetType.Actor)
|
||||
{
|
||||
world.AddFrameEndTask(w => w.Add(new FlashTarget(target.Actor)));
|
||||
if (info.ActorFlashType == ActorFlashType.Overlay)
|
||||
world.AddFrameEndTask(w => w.Add(new FlashTarget(
|
||||
target.Actor, info.ActorFlashOverlayColor, info.ActorFlashOverlayAlpha,
|
||||
info.ActorFlashCount, info.ActorFlashInterval)));
|
||||
else
|
||||
world.AddFrameEndTask(w => w.Add(new FlashTarget(
|
||||
target.Actor, info.ActorFlashTint,
|
||||
info.ActorFlashCount, info.ActorFlashInterval)));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (target.Type == TargetType.FrozenActor)
|
||||
{
|
||||
target.FrozenActor.Flash();
|
||||
if (info.ActorFlashType == ActorFlashType.Overlay)
|
||||
target.FrozenActor.Flash(info.ActorFlashOverlayColor, info.ActorFlashOverlayAlpha);
|
||||
else
|
||||
target.FrozenActor.Flash(info.ActorFlashTint);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user