Files
OpenRA/OpenRA.Mods.RA/World/GotoNextBase.cs
geckosoft ebca421856 Moved: BaseBuilding out of core => RA
Implemented: INotifyKeyPress for World traits (to respond on key pressed)
Moved: GotoNextBase (backspace key) out of core => RA
Added: GotoNextBase trait to both RA & CNC
2010-11-13 17:01:35 +13:00

45 lines
974 B
C#

using System.Linq;
using OpenRA.Traits;
namespace OpenRA.Mods.RA
{
public class GotoNextBaseInfo : TraitInfo<GotoNextBase>
{
}
public class GotoNextBase : INotifyKeyPress
{
public bool KeyPressed(Actor self, KeyInput e)
{
if (self.World.LocalPlayer == null) return false;
if (e.KeyChar == '\b' || e.KeyChar == (char)127)
{
CycleBases(self.World);
return true;
}
return false;
}
public static void CycleBases(World world)
{
var bases = world.Queries.OwnedBy[world.LocalPlayer].WithTrait<BaseBuilding>().ToArray();
if (!bases.Any()) return;
var next = bases
.Select(b => b.Actor)
.SkipWhile(b => !world.Selection.Actors.Contains(b))
.Skip(1)
.FirstOrDefault();
if (next == null)
next = bases.Select(b => b.Actor).First();
world.Selection.Combine(world, new Actor[] { next }, false, true);
Game.viewport.Center(world.Selection.Actors);
}
}
}