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
This commit is contained in:
geckosoft
2010-11-10 05:57:21 +01:00
committed by Bob
parent 22e61a5700
commit ebca421856
9 changed files with 69 additions and 44 deletions

View File

@@ -210,6 +210,8 @@
<Compile Include="ObjectCreator.cs" />
<Compile Include="Network\SyncReport.cs" />
<Compile Include="Traits\BaseBuilding.cs" />
<Compile Include="Server\IServerExtension.cs" />
<Compile Include="Server\NullServerExtension.cs" />
<Compile Include="Traits\EditorAppearance.cs" />
<Compile Include="Traits\ValidateOrder.cs" />
<Compile Include="Traits\Scale.cs" />

View File

@@ -1,18 +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 OpenRA.Traits;
namespace OpenRA.Traits
{
/* tag trait for "bases": mcv/fact */
public class BaseBuildingInfo : TraitInfo<BaseBuilding> { }
public class BaseBuilding { }
}

View File

@@ -241,4 +241,6 @@ namespace OpenRA.Traits
string[] TargetTypes { get; }
IEnumerable<int2> TargetableCells( Actor self );
}
public interface INotifyKeyPress { bool KeyPressed(Actor self, KeyInput e); }
}

View File

@@ -136,11 +136,12 @@ namespace OpenRA.Widgets
return true;
}
if (e.KeyChar == '\b' || e.KeyChar == (char)127)
{
GotoNextBase();
return true;
}
bool handled = false;
foreach (var t in world.WorldActor.TraitsImplementing<INotifyKeyPress>())
handled = (t.KeyPressed(world.WorldActor, e)) ? true : handled;
if (handled) return true;
if (e.KeyChar == 'a')
{
@@ -157,24 +158,6 @@ namespace OpenRA.Widgets
world.OrderGenerator = new GenericSelectTarget(world.Selection.Actors, "AttackMove", "attackmove");
}
public void GotoNextBase()
{
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);
}
IEnumerable<Actor> SelectActorsInBox(World world, float2 a, float2 b)
{
return world.FindUnits(a, b)

View File

@@ -0,0 +1,8 @@
using OpenRA.Traits;
namespace OpenRA.Mods.RA
{
/* tag trait for "bases": mcv/fact */
public class BaseBuildingInfo : TraitInfo<BaseBuilding> { }
public class BaseBuilding { }
}

View File

@@ -82,6 +82,7 @@
<Compile Include="Activities\Wait.cs" />
<Compile Include="AttackBase.cs" />
<Compile Include="AttackMove.cs" />
<Compile Include="BaseBuilding.cs" />
<Compile Include="Buildable.cs" />
<Compile Include="Buildings\BibLayer.cs" />
<Compile Include="Buildings\Building.cs" />
@@ -288,6 +289,7 @@
<Compile Include="NullLoadScreen.cs" />
<Compile Include="Activities\IdleAnimation.cs" />
<Compile Include="IdleAnimation.cs" />
<Compile Include="World\GotoNextBase.cs" />
<Compile Include="World\SmudgeLayer.cs" />
<Compile Include="Scripting\Media.cs" />
<Compile Include="OpenWidgetAtGameStart.cs" />

View File

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

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

View File

@@ -227,6 +227,7 @@ World:
ReturnToLobby: yes
EndMessage: The game will end in {0} seconds.
ValidateOrder:
GotoNextBase:
MINP:
Mine: