Add ScreenMap.ActorsAt(MouseInput) overload.

This commit is contained in:
Paul Chote
2013-09-27 17:58:44 +12:00
parent 0b560bfc6e
commit 1ca9c90565
6 changed files with 11 additions and 6 deletions

View File

@@ -19,7 +19,7 @@ namespace OpenRA.Orders
{ {
public IEnumerable<Order> Order(World world, CPos xy, MouseInput mi) public IEnumerable<Order> Order(World world, CPos xy, MouseInput mi)
{ {
var underCursor = world.ScreenMap.ActorsAt(Game.viewport.ViewToWorldPx(mi.Location)) var underCursor = world.ScreenMap.ActorsAt(mi)
.Where(a => !world.FogObscures(a) && a.HasTrait<ITargetable>()) .Where(a => !world.FogObscures(a) && a.HasTrait<ITargetable>())
.OrderByDescending(a => a.Info.SelectionPriority()) .OrderByDescending(a => a.Info.SelectionPriority())
.FirstOrDefault(); .FirstOrDefault();
@@ -60,7 +60,7 @@ namespace OpenRA.Orders
public string GetCursor(World world, CPos xy, MouseInput mi) public string GetCursor(World world, CPos xy, MouseInput mi)
{ {
var useSelect = false; var useSelect = false;
var underCursor = world.ScreenMap.ActorsAt(Game.viewport.ViewToWorldPx(mi.Location)) var underCursor = world.ScreenMap.ActorsAt(mi)
.Where(a => !world.FogObscures(a) && a.HasTrait<ITargetable>()) .Where(a => !world.FogObscures(a) && a.HasTrait<ITargetable>())
.OrderByDescending(a => a.Info.SelectionPriority()) .OrderByDescending(a => a.Info.SelectionPriority())
.FirstOrDefault(); .FirstOrDefault();

View File

@@ -127,6 +127,11 @@ namespace OpenRA.Traits
.Select(kv => kv.Key); .Select(kv => kv.Key);
} }
public IEnumerable<Actor> ActorsAt(MouseInput mi)
{
return ActorsAt(worldRenderer.Viewport.ViewToWorldPx(mi.Location));
}
public IEnumerable<Actor> ActorsInBox(int2 a, int2 b) public IEnumerable<Actor> ActorsInBox(int2 a, int2 b)
{ {
return ActorsInBox(Rectangle.FromLTRB(Math.Min(a.X, b.X), Math.Min(a.Y, b.Y), Math.Max(a.X, b.X), Math.Max(a.Y, b.Y))); return ActorsInBox(Rectangle.FromLTRB(Math.Min(a.X, b.X), Math.Min(a.Y, b.Y), Math.Max(a.X, b.X), Math.Max(a.Y, b.Y)));

View File

@@ -88,7 +88,7 @@ namespace OpenRA.Mods.RA
static IEnumerable<Actor> FriendlyGuardableUnits(World world, MouseInput mi) static IEnumerable<Actor> FriendlyGuardableUnits(World world, MouseInput mi)
{ {
return world.ScreenMap.ActorsAt(Game.viewport.ViewToWorldPx(mi.Location)) return world.ScreenMap.ActorsAt(mi)
.Where(a => !world.FogObscures(a) && !a.IsDead() && .Where(a => !world.FogObscures(a) && !a.IsDead() &&
a.AppearsFriendlyTo(world.LocalPlayer.PlayerActor) && a.AppearsFriendlyTo(world.LocalPlayer.PlayerActor) &&
a.HasTrait<Guardable>()); a.HasTrait<Guardable>());

View File

@@ -133,7 +133,7 @@ namespace OpenRA.Mods.RA
yield break; yield break;
} }
var underCursor = world.ScreenMap.ActorsAt(Game.viewport.ViewToWorldPx(mi.Location)) var underCursor = world.ScreenMap.ActorsAt(mi)
.Where(a => !world.FogObscures(a)) .Where(a => !world.FogObscures(a))
.OrderByDescending(a => a.Info.Traits.Contains<SelectableInfo>() .OrderByDescending(a => a.Info.Traits.Contains<SelectableInfo>()
? a.Info.Traits.Get<SelectableInfo>().Priority : int.MinValue) ? a.Info.Traits.Get<SelectableInfo>().Priority : int.MinValue)

View File

@@ -39,7 +39,7 @@ namespace OpenRA.Mods.RA.Orders
{ {
if (mi.Button == MouseButton.Left) if (mi.Button == MouseButton.Left)
{ {
var underCursor = world.ScreenMap.ActorsAt(Game.viewport.ViewToWorldPx(mi.Location)) var underCursor = world.ScreenMap.ActorsAt(mi)
.Where(a => a.Owner == world.LocalPlayer && a.HasTrait<T>()).FirstOrDefault(); .Where(a => a.Owner == world.LocalPlayer && a.HasTrait<T>()).FirstOrDefault();
if (underCursor != null) if (underCursor != null)

View File

@@ -30,7 +30,7 @@ namespace OpenRA.Mods.RA.Orders
{ {
if (mi.Button == MouseButton.Left) if (mi.Button == MouseButton.Left)
{ {
var underCursor = world.ScreenMap.ActorsAt(Game.viewport.ViewToWorldPx(mi.Location)) var underCursor = world.ScreenMap.ActorsAt(mi)
.Where(a => !world.FogObscures(a) && a.AppearsFriendlyTo(world.LocalPlayer.PlayerActor) && a.HasTrait<RepairableBuilding>()).FirstOrDefault(); .Where(a => !world.FogObscures(a) && a.AppearsFriendlyTo(world.LocalPlayer.PlayerActor) && a.HasTrait<RepairableBuilding>()).FirstOrDefault();
if (underCursor == null) if (underCursor == null)