Improve semantics of selection cursor, plus free perf.
This commit is contained in:
@@ -105,7 +105,7 @@ namespace OpenRA
|
|||||||
return mods.Aggregate(sprites, (m, p) => p.ModifyRender(this, m));
|
return mods.Aggregate(sprites, (m, p) => p.ModifyRender(this, m));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Order Order( int2 xy, MouseInput mi )
|
public Order Order( int2 xy, MouseInput mi, Actor underCursor )
|
||||||
{
|
{
|
||||||
if (Owner != World.LocalPlayer)
|
if (Owner != World.LocalPlayer)
|
||||||
return null;
|
return null;
|
||||||
@@ -115,11 +115,6 @@ namespace OpenRA
|
|||||||
|
|
||||||
if (Destroyed)
|
if (Destroyed)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
var underCursor = World.FindUnitsAtMouse(mi.Location)
|
|
||||||
.Where(a => a.Info.Traits.Contains<TargetableInfo>())
|
|
||||||
.OrderByDescending(a => a.Info.Traits.Contains<SelectableInfo>() ? a.Info.Traits.Get<SelectableInfo>().Priority : int.MinValue)
|
|
||||||
.FirstOrDefault();
|
|
||||||
|
|
||||||
return TraitsImplementing<IIssueOrder>()
|
return TraitsImplementing<IIssueOrder>()
|
||||||
.OrderByDescending( x => x.OrderPriority( this, xy, mi, underCursor ) )
|
.OrderByDescending( x => x.OrderPriority( this, xy, mi, underCursor ) )
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ namespace OpenRA.Orders
|
|||||||
class UnitOrderGenerator : IOrderGenerator
|
class UnitOrderGenerator : IOrderGenerator
|
||||||
{
|
{
|
||||||
public IEnumerable<Order> Order( World world, int2 xy, MouseInput mi )
|
public IEnumerable<Order> Order( World world, int2 xy, MouseInput mi )
|
||||||
{
|
{
|
||||||
var orders = world.Selection.Actors
|
var orders = world.Selection.Actors
|
||||||
.Select(a => a.Order(xy, mi))
|
.Select(a => a.Order(xy, mi, UnderCursor(world, mi)))
|
||||||
.Where(o => o != null)
|
.Where(o => o != null)
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|
||||||
@@ -55,17 +55,26 @@ namespace OpenRA.Orders
|
|||||||
Game.Renderer.Flush();
|
Game.Renderer.Flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetCursor( World world, int2 xy, MouseInput mi )
|
public Actor UnderCursor(World world, MouseInput mi)
|
||||||
{
|
{
|
||||||
|
return world.FindUnitsAtMouse(mi.Location)
|
||||||
|
.Where(a => a.Info.Traits.Contains<TargetableInfo>())
|
||||||
|
.OrderByDescending(a => a.Info.Traits.Contains<SelectableInfo>() ? a.Info.Traits.Get<SelectableInfo>().Priority : int.MinValue)
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetCursor( World world, int2 xy, MouseInput mi )
|
||||||
|
{
|
||||||
|
if (mi.Modifiers.HasModifier(Modifiers.Shift) || !world.Selection.Actors.Any())
|
||||||
|
if (UnderCursor(world, mi) != null)
|
||||||
|
return "select";
|
||||||
|
|
||||||
var c = Order(world, xy, mi)
|
var c = Order(world, xy, mi)
|
||||||
.Select(o => o.Subject.TraitsImplementing<IOrderCursor>()
|
.Select(o => o.Subject.TraitsImplementing<IOrderCursor>()
|
||||||
.Select(pc => pc.CursorForOrder(o.Subject, o)).FirstOrDefault(a => a != null))
|
.Select(pc => pc.CursorForOrder(o.Subject, o)).FirstOrDefault(a => a != null))
|
||||||
.FirstOrDefault(a => a != null);
|
.FirstOrDefault(a => a != null);
|
||||||
|
|
||||||
return c ??
|
return c ?? "default";
|
||||||
(world.FindUnitsAtMouse(mi.Location)
|
|
||||||
.Any(a => a.Info.Traits.Contains<SelectableInfo>())
|
|
||||||
? "select" : "default");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user