Implemented trait defined Rollovers.

This commit is contained in:
Andre Mohren
2018-11-06 19:47:51 +01:00
committed by Paul Chote
parent 7049f68fbd
commit 42446ac9ba
3 changed files with 14 additions and 8 deletions

View File

@@ -286,6 +286,8 @@ namespace OpenRA.Traits
[RequireExplicitImplementation] [RequireExplicitImplementation]
public interface ISelectionBar { float GetValue(); Color GetColor(); bool DisplayWhenEmpty { get; } } public interface ISelectionBar { float GetValue(); Color GetColor(); bool DisplayWhenEmpty { get; } }
public interface ISelectionDecorations { void DrawRollover(Actor self, WorldRenderer worldRenderer); }
public interface IOccupySpaceInfo : ITraitInfoInterface public interface IOccupySpaceInfo : ITraitInfoInterface
{ {
IReadOnlyDictionary<CPos, SubCell> OccupiedCells(ActorInfo info, CPos location, SubCell subCell = SubCell.Any); IReadOnlyDictionary<CPos, SubCell> OccupiedCells(ActorInfo info, CPos location, SubCell subCell = SubCell.Any);

View File

@@ -34,7 +34,7 @@ namespace OpenRA.Mods.Common.Traits.Render
public object Create(ActorInitializer init) { return new SelectionDecorations(init.Self, this); } public object Create(ActorInitializer init) { return new SelectionDecorations(init.Self, this); }
} }
public class SelectionDecorations : IRenderAboveShroud, INotifyCreated, ITick public class SelectionDecorations : ISelectionDecorations, IRenderAboveShroud, INotifyCreated, ITick
{ {
// depends on the order of pips in TraitsInterfaces.cs! // depends on the order of pips in TraitsInterfaces.cs!
static readonly string[] PipStrings = { "pip-empty", "pip-green", "pip-yellow", "pip-red", "pip-gray", "pip-blue", "pip-ammo", "pip-ammoempty" }; static readonly string[] PipStrings = { "pip-empty", "pip-green", "pip-yellow", "pip-red", "pip-gray", "pip-blue", "pip-ammo", "pip-ammoempty" };
@@ -121,6 +121,12 @@ namespace OpenRA.Mods.Common.Traits.Render
yield return r; yield return r;
} }
public void DrawRollover(Actor self, WorldRenderer worldRenderer)
{
var bounds = decorationBounds.FirstNonEmptyBounds(self, worldRenderer);
new SelectionBarsRenderable(self, bounds, true, true).Render(worldRenderer);
}
IEnumerable<IRenderable> DrawPips(Actor self, Rectangle bounds, WorldRenderer wr) IEnumerable<IRenderable> DrawPips(Actor self, Rectangle bounds, WorldRenderer wr)
{ {
if (pipSources.Length == 0) if (pipSources.Length == 0)

View File

@@ -14,7 +14,6 @@ using System.Drawing;
using System.Linq; using System.Linq;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Mods.Common.Effects; using OpenRA.Mods.Common.Effects;
using OpenRA.Mods.Common.Graphics;
using OpenRA.Orders; using OpenRA.Orders;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Widgets; using OpenRA.Widgets;
@@ -48,12 +47,11 @@ namespace OpenRA.Mods.Common.Widgets
void DrawRollover(Actor unit) void DrawRollover(Actor unit)
{ {
// TODO: Integrate this with SelectionDecorations to unhardcode the *Renderable var selectionDecorations = unit.TraitOrDefault<ISelectionDecorations>();
if (unit.Info.HasTraitInfo<SelectableInfo>()) if (selectionDecorations == null)
{ return;
var bounds = unit.TraitsImplementing<IDecorationBounds>().FirstNonEmptyBounds(unit, worldRenderer);
new SelectionBarsRenderable(unit, bounds, true, true).Render(worldRenderer); selectionDecorations.DrawRollover(unit, worldRenderer);
}
} }
public override void Draw() public override void Draw()