priority-based selection

This commit is contained in:
Chris Forbes
2009-11-26 21:07:27 +13:00
parent 1948e16a3f
commit 54074de6cf
6 changed files with 94 additions and 17 deletions

View File

@@ -65,12 +65,8 @@ namespace OpenRa.Game
{
if (!(orderGenerator is PlaceBuilding))
{
if (dragStart != xy)
orderGenerator = new UnitOrderGenerator(
Game.SelectUnitsInBox(Game.CellSize * dragStart, Game.CellSize * xy));
else
orderGenerator = new UnitOrderGenerator(
Game.SelectUnitOrBuilding(Game.CellSize * xy));
orderGenerator = new UnitOrderGenerator(
Game.SelectActorsInBox(Game.CellSize * dragStart, Game.CellSize * xy));
var voicedUnit = ((UnitOrderGenerator)orderGenerator).selection
.Select(a => a.traits.GetOrDefault<Mobile>())
@@ -114,7 +110,7 @@ namespace OpenRa.Game
.Select(a => CursorForOrderString( a.OrderString, a.Subject, a.TargetLocation ))
.FirstOrDefault(a => a != null) : null;
return c ?? (Game.SelectUnitOrBuilding(Game.CellSize * dragEnd).Any() ? Cursor.Select : Cursor.Default);
return c ?? (Game.SelectActorsInBox(Game.CellSize * dragEnd, Game.CellSize * dragEnd).Any() ? Cursor.Select : Cursor.Default);
}
Cursor CursorForOrderString( string s, Actor a, int2 location )

View File

@@ -262,15 +262,14 @@ namespace OpenRa.Game
yield return new int2(i, j);
}
public static IEnumerable<Actor> SelectUnitsInBox(float2 a, float2 b)
public static IEnumerable<Actor> SelectActorsInBox(float2 a, float2 b)
{
return FindUnits(a, b).Where(x => x.Owner == LocalPlayer && x.traits.Contains<Traits.Unit>());
}
public static IEnumerable<Actor> SelectUnitOrBuilding(float2 a)
{
var q = FindUnits(a, a);
return q.Where(x => x.traits.Contains<Traits.Unit>()).Concat(q).Take(1);
return FindUnits(a, b)
.GroupBy(x => (x.Owner == LocalPlayer) ? x.unitInfo.SelectionPriority : 0)
.OrderByDescending(g => g.Key)
.Select( g => g.AsEnumerable() )
.DefaultIfEmpty( new Actor[] {} )
.FirstOrDefault();
}
public static int GetDistanceToBase(int2 b, Player p)

View File

@@ -52,6 +52,7 @@ namespace OpenRa.Game.GameRules
public readonly int Recoil = 0;
public readonly string SecondaryAnim = null;
public readonly bool MuzzleFlash = false;
public readonly int SelectionPriority = 10;
public UnitInfo(string name) { Name = name; }

View File

@@ -80,7 +80,7 @@ namespace OpenRa.Game.Graphics
lineRenderer.DrawLine(a + b + c, a + c, Color.White, Color.White);
lineRenderer.DrawLine(a, a + c, Color.White, Color.White);
foreach (var u in Game.SelectUnitsInBox(selbox.Value.First, selbox.Value.Second))
foreach (var u in Game.SelectActorsInBox(selbox.Value.First, selbox.Value.Second))
DrawSelectionBox(u, Color.Yellow, false);
}

View File

@@ -46,127 +46,168 @@ Description=Forward Command Post
Traits=Building, RenderBuilding
Dimensions=2,2
Footprint=xx xx
SelectionPriority=3
[V01]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V02]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V03]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V04]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V05]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V06]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V07]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V08]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V09]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V10]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V11]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V12]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V13]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V14]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V15]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V16]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V17]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V18]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V19]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V20]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V21]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V22]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V23]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V24]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V25]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V26]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V27]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V28]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V29]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V30]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V31]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V32]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V33]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V34]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V35]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V36]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[V37]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=3
[BARL]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=0
[BRL3]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=0
[MISS]
Traits=Building, RenderBuilding
Image=FCOM
SelectionPriority=0

View File

@@ -35,19 +35,23 @@ Traits=Unit, Mobile, Turreted, AttackTurreted, RenderUnitTurreted
Description=Radar Jammer
Traits=Unit, Mobile, RenderUnitSpinner
PrimaryOffset=0,4,0,-6
SelectionPriority=3
[MGG]
Description=Mobile Gap Generator
Traits=Unit, Mobile, RenderUnitSpinner
PrimaryOffset=0,6,0,-3
SelectionPriority=3
[ARTY]
Description=Artillery
Traits=Unit, Mobile, AttackBase, RenderUnit
[HARV]
Description=Ore Truck
Traits=Harvester, Unit, Mobile, RenderUnit
SelectionPriority=7
[MCV]
Description=Mobile Construction Vehicle
Traits=Unit, Mobile, McvDeploy, RenderUnit
SelectionPriority=3
[JEEP]
Description=Ranger
Traits=Unit, Mobile, Turreted, AttackTurreted, RenderUnitTurreted
@@ -199,16 +203,19 @@ Description=Iron Curtain
Traits=Building, RenderBuilding
Dimensions=2,2
Footprint=xx xx
SelectionPriority=3
[ATEK]
Description=Allied Tech Center
Traits=Building, RenderBuilding
Dimensions=2,2
Footprint=xx xx
SelectionPriority=3
[PDOX]
Description=Chronosphere
Traits=Building, RenderBuilding
Dimensions=2,2
Footprint=xx xx
SelectionPriority=3
[WEAP]
Description=War Factory
Traits=Building, RenderWarFactory, RallyPoint, Production
@@ -216,111 +223,132 @@ Dimensions=3,2
Footprint=xxx xxx
Produces=Vehicle
RallyPoint=1,3
SelectionPriority=3
[SYRD]
Description=Shipyard
Traits=Building, RenderBuilding, ProductionSurround
Dimensions=3,3
Footprint=xxx xxx xxx
Produces=Ship
SelectionPriority=3
[SPEN]
Description=Sub Pen
Traits=Building, RenderBuilding, ProductionSurround
Dimensions=3,3
Footprint=xxx xxx xxx
Produces=Ship
SelectionPriority=3
[PBOX]
Description=Pillbox
Traits=Building, RenderBuilding
Dimensions=1,1
Footprint=x
SelectionPriority=3
[HBOX]
Description=Camo Pillbox
Traits=Building, RenderBuilding
Dimensions=1,1
Footprint=x
SelectionPriority=3
[TSLA]
Description=Tesla Coil
Traits=Building, RenderBuilding
Dimensions=1,2
Footprint=_ x
SelectionPriority=3
[GUN]
Description=Turret
Traits=Building, Turreted, RenderBuildingTurreted
Dimensions=1,1
Footprint=x
SelectionPriority=3
[AGUN]
Description=AA Gun
Traits=Building, Turreted, RenderBuildingTurreted
Dimensions=1,2
Footprint=_ x
SelectionPriority=3
[FTUR]
Description=Flame Turret
Traits=Building, RenderBuilding
Dimensions=1,1
Footprint=x
SelectionPriority=3
[FACT]
Description=Construction Yard
Traits=Building, RenderBuilding
Dimensions=3,3
Footprint=xxx xxx xxx
Produces=Building,Defense
SelectionPriority=3
[PROC]
Description=Ore Refinery
Traits=Building, RenderBuilding, AcceptsOre
Dimensions=3,3
Footprint=_x_ xxx x==
SelectionPriority=3
[SILO]
Description=Silo
Traits=Building, RenderBuildingOre
Dimensions=1,1
Footprint=x
SelectionPriority=3
[HPAD]
Description=Helipad
Traits=Building, RenderBuilding, Production
Dimensions=2,2
Footprint=xx xx
Produces=Plane
SelectionPriority=3
[DOME]
Description=Radar Dome
Traits=Building, RenderBuilding
Dimensions=2,2
Footprint=xx xx
SelectionPriority=3
[GAP]
Description=Gap Generator
Traits=Building, RenderBuilding
Dimensions=1,2
Footprint=_ x
SelectionPriority=3
[SAM]
Description=SAM Site
Traits=Building, Turreted, RenderBuildingTurreted
Dimensions=2,1
Footprint=xx
SelectionPriority=3
[MSLO]
Description=Missile Silo
Traits=Building, RenderBuilding
Dimensions=2,1
Footprint=xx
SelectionPriority=3
[AFLD]
Description=Airstrip
Traits=Building, RenderBuilding, Production
Dimensions=3,2
Footprint=xxx xxx
Produces=Plane
SelectionPriority=3
[POWR]
Description=Power Plant
Traits=Building, RenderBuilding
Dimensions=2,2
Footprint=xx xx
SelectionPriority=3
[APWR]
Description=Advanced Power Plant
Traits=Building, RenderBuilding
Dimensions=3,3
Footprint=___ xxx xxx
SelectionPriority=3
[STEK]
Description=Soviet Tech Center
Traits=Building, RenderBuilding
Dimensions=3,2
Footprint=xxx xxx
SelectionPriority=3
[BARR]
Description=Soviet Barracks
Traits=Building, RenderBuilding, RallyPoint, Production
@@ -328,6 +356,7 @@ Dimensions=2,2
Footprint=xx xx
Produces=Infantry
RallyPoint=1,3
SelectionPriority=3
[TENT]
Description=Allied Barracks
Traits=Building, RenderBuilding, RallyPoint, Production
@@ -335,48 +364,59 @@ Dimensions=2,2
Footprint=xx xx
Produces=Infantry
RallyPoint=1,3
SelectionPriority=3
[KENN]
Description=Kennel
Traits=Building, RenderBuilding, RallyPoint, Production
Dimensions=1,1
Footprint=x
RallyPoint=1,2
SelectionPriority=3
[FIX]
Description=Service Depot
Traits=Building, RenderBuilding
Dimensions=3,3
Footprint=_x_ xxx _x_
SelectionPriority=3
[FACF]
Description=Fake Construction Yard
Traits=Building, RenderBuilding
Dimensions=3,3
Footprint=xxx xxx xxx
SelectionPriority=3
[WEAF]
Description=Fake War Factory
Traits=Building, RenderWarFactory
Dimensions=3,2
Footprint=xxx xxx
SelectionPriority=3
[SYRF]
Description=Fake Shipyard
Traits=Building, RenderBuilding
Dimensions=3,3
Footprint=xxx xxx xxx
SelectionPriority=3
[SPEF]
Description=Fake Sub Pen
Traits=Building, RenderBuilding
Dimensions=3,3
Footprint=xxx xxx xxx
SelectionPriority=3
[DOMF]
Description=Fake Radar Dome
Traits=Building, RenderBuilding
Dimensions=2,2
Footprint=xx xx
SelectionPriority=3
;[SBAG]
;Description=Sandbags
;SelectionPriority=3
;[BRIK]
;Description=Concrete Wall
;SelectionPriority=3
;[FENC]
;Description=Wire Fence
;SelectionPriority=3