Merge pull request #3648 from pchote/frozen-fog-rework

Rework frozen actors to support tooltips and orders
This commit is contained in:
Matthias Mailänder
2013-08-12 04:19:21 -07:00
62 changed files with 991 additions and 495 deletions

View File

@@ -14,11 +14,12 @@ using System.Linq;
using OpenRA.FileFormats;
using OpenRA.GameRules;
using OpenRA.Graphics;
using OpenRA.Orders;
using OpenRA.Traits;
namespace OpenRA.Widgets
{
public enum WorldTooltipType { None, Unexplored, Actor }
public enum WorldTooltipType { None, Unexplored, Actor, FrozenActor }
public class ViewportControllerWidget : Widget
{
@@ -28,6 +29,7 @@ namespace OpenRA.Widgets
public WorldTooltipType TooltipType { get; private set; }
public IToolTip ActorTooltip { get; private set; }
public FrozenActor FrozenActorTooltip { get; private set; }
public int EdgeScrollThreshold = 15;
public int EdgeCornerScrollThreshold = 35;
@@ -101,13 +103,28 @@ namespace OpenRA.Widgets
return;
}
var actor = world.FindUnitsAtMouse(Viewport.LastMousePos).FirstOrDefault();
if (actor == null)
return;
var underCursor = world.FindUnitsAtMouse(Viewport.LastMousePos)
.Where(a => a.HasTrait<IToolTip>())
.OrderByDescending(a => a.Info.SelectionPriority())
.FirstOrDefault();
ActorTooltip = actor.TraitsImplementing<IToolTip>().FirstOrDefault();
if (ActorTooltip != null)
if (underCursor != null)
{
ActorTooltip = underCursor.TraitsImplementing<IToolTip>().First();
TooltipType = WorldTooltipType.Actor;
return;
}
var frozen = world.FindFrozenActorsAtMouse(Viewport.LastMousePos)
.Where(a => a.TooltipName != null)
.OrderByDescending(a => a.Info.SelectionPriority())
.FirstOrDefault();
if (frozen != null)
{
FrozenActorTooltip = frozen;
TooltipType = WorldTooltipType.FrozenActor;
}
}
public static string GetScrollCursor(Widget w, ScrollDirection edge, int2 pos)