GotoNextBase dies in a fire; INotifyKeyPress dies

This commit is contained in:
Chris Forbes
2011-03-13 11:42:17 +13:00
parent 3c41efea04
commit 116ef15fdb
6 changed files with 22 additions and 50 deletions

View File

@@ -229,7 +229,6 @@ namespace OpenRA.Traits
bool TargetableBy(Actor self, Actor byActor); bool TargetableBy(Actor self, Actor byActor);
} }
public interface INotifyKeyPress { bool KeyPressed(Actor self, KeyInput e); }
public interface INotifyStanceChanged { void StanceChanged(Actor self, Player a, Player b, public interface INotifyStanceChanged { void StanceChanged(Actor self, Player a, Player b,
Stance oldStance, Stance newStance); } Stance oldStance, Stance newStance); }
} }

View File

@@ -134,9 +134,6 @@ namespace OpenRA.Widgets
bool handled = false; bool handled = false;
foreach (var t in world.WorldActor.TraitsImplementing<INotifyKeyPress>())
handled = (t.KeyPressed(world.WorldActor, e)) ? true : handled;
if (handled) return true; if (handled) return true;
} }
return false; return false;

View File

@@ -43,6 +43,9 @@ namespace OpenRA.Mods.RA.Widgets
if (e.Modifiers == Modifiers.None) if (e.Modifiers == Modifiers.None)
{ {
if (e.KeyChar == '\b' || e.KeyChar == (char)127)
return CycleBases();
if (e.KeyChar == AttackMoveKey) if (e.KeyChar == AttackMoveKey)
return PerformAttackMove(); return PerformAttackMove();
@@ -95,5 +98,24 @@ namespace OpenRA.Mods.RA.Widgets
PerformKeyboardOrderOnSelection(a => new Order("Unload", a, false)); PerformKeyboardOrderOnSelection(a => new Order("Unload", a, false));
return true; return true;
} }
bool CycleBases()
{
var bases = World.Queries.OwnedBy[World.LocalPlayer].WithTrait<BaseBuilding>().ToArray();
if (!bases.Any()) return true;
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);
return true;
}
} }
} }

View File

@@ -1,44 +0,0 @@
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);
}
}
}

View File

@@ -151,7 +151,6 @@ World:
WaterChance: 0 WaterChance: 0
PathFinder: PathFinder:
ValidateOrder: ValidateOrder:
GotoNextBase:
CRATE: CRATE:
Tooltip: Tooltip:

View File

@@ -195,7 +195,6 @@ World:
Shroud: Shroud:
PathFinder: PathFinder:
ValidateOrder: ValidateOrder:
GotoNextBase:
MINP: MINP:
Mine: Mine: