reinstate range circles; IRenderSelection allows arb. plugging in of these things

This commit is contained in:
Chris Forbes
2010-07-24 18:48:24 +12:00
committed by Paul Chote
parent 2254e48f65
commit f2bfa8e2ee
8 changed files with 72 additions and 40 deletions

View File

@@ -1,48 +0,0 @@
#region Copyright & License Information
/*
* Copyright 2007-2010 The OpenRA Developers (see AUTHORS)
* This file is part of OpenRA, which is free software. It is made
* available to you under the terms of the GNU General Public License
* as published by the Free Software Foundation. For more information,
* see LICENSE.
*/
#endregion
using System.Linq;
namespace OpenRA.Traits
{
class DetectCloakedInfo : TraitInfo<DetectCloaked>
{
public readonly int Interval = 12; // ~.5s
public readonly float DecloakTime = 2f; // 2s
public readonly int Range = 5;
public readonly bool AffectOwnUnits = true;
}
class DetectCloaked : ITick
{
[Sync] int ticks;
public void Tick(Actor self)
{
if (--ticks <= 0)
{
var info = self.Info.Traits.Get<DetectCloakedInfo>();
ticks = info.Interval;
var toDecloak = self.World.FindUnitsInCircle(self.CenterLocation, info.Range * Game.CellSize)
.Where(a => a.traits.Contains<Cloak>());
if (!info.AffectOwnUnits)
toDecloak = toDecloak.Where(a => self.Owner.Stances[a.Owner] != Stance.Ally);
foreach (var a in toDecloak)
a.traits.Get<Cloak>().Decloak((int)(25 * info.DecloakTime));
}
}
}
class RenderRangeCircleInfo : TraitInfo<RenderRangeCircle> { }
class RenderRangeCircle { }
}

View File

@@ -166,6 +166,8 @@ namespace OpenRA.Traits
public interface IVictoryConditions { }
public interface IBlocksBullets { }
public interface IRenderSelection { void Render(Actor self); }
public struct Target // a target: either an actor, or a fixed location.
{
Actor actor;