Adds an IconPalette property to Buildable and SupportPower traits.

This commit is contained in:
Zimmermann Gyula
2015-06-12 09:37:33 +02:00
parent a4f85c6201
commit d5a5640f52
7 changed files with 26 additions and 13 deletions

View File

@@ -27,14 +27,14 @@ namespace OpenRA.Widgets
Game.Renderer.RgbaSpriteRenderer.DrawSprite(s, pos); Game.Renderer.RgbaSpriteRenderer.DrawSprite(s, pos);
} }
public static void DrawSHPCentered(Sprite s, float2 pos, WorldRenderer wr) public static void DrawSHPCentered(Sprite s, float2 pos, PaletteReference p)
{ {
Game.Renderer.SpriteRenderer.DrawSprite(s, pos - 0.5f * s.Size, wr.Palette("chrome")); Game.Renderer.SpriteRenderer.DrawSprite(s, pos - 0.5f * s.Size, p);
} }
public static void DrawSHPCentered(Sprite s, float2 pos, WorldRenderer wr, float scale) public static void DrawSHPCentered(Sprite s, float2 pos, PaletteReference p, float scale)
{ {
Game.Renderer.SpriteRenderer.DrawSprite(s, pos - 0.5f * scale * s.Size, wr.Palette("chrome"), scale * s.Size); Game.Renderer.SpriteRenderer.DrawSprite(s, pos - 0.5f * scale * s.Size, p, scale * s.Size);
} }
public static void DrawPanel(string collection, Rectangle bounds) public static void DrawPanel(string collection, Rectangle bounds)

View File

@@ -35,6 +35,9 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Force a specific race variant, overriding the race of the producing actor.")] [Desc("Force a specific race variant, overriding the race of the producing actor.")]
public readonly string ForceRace = null; public readonly string ForceRace = null;
[Desc("Palette used for the production icon.")]
public readonly string IconPalette = "chrome";
// TODO: UI fluff; doesn't belong here // TODO: UI fluff; doesn't belong here
public readonly int BuildPaletteOrder = 9999; public readonly int BuildPaletteOrder = 9999;
} }

View File

@@ -39,6 +39,9 @@ namespace OpenRA.Mods.Common.Traits
public readonly bool DisplayTimer = false; public readonly bool DisplayTimer = false;
[Desc("Palette used for the icon.")]
public readonly string IconPalette = "chrome";
[Desc("Beacons are only supported on the Airstrike and Nuke powers")] [Desc("Beacons are only supported on the Airstrike and Nuke powers")]
public readonly bool DisplayBeacon = false; public readonly bool DisplayBeacon = false;
public readonly string BeaconPalettePrefix = "player"; public readonly string BeaconPalettePrefix = "player";

View File

@@ -75,15 +75,16 @@ namespace OpenRA.Mods.Common.Widgets
var rsi = actor.Traits.Get<RenderSpritesInfo>(); var rsi = actor.Traits.Get<RenderSpritesInfo>();
var icon = new Animation(world, rsi.GetImage(actor, world.Map.SequenceProvider, race)); var icon = new Animation(world, rsi.GetImage(actor, world.Map.SequenceProvider, race));
icon.Play(actor.Traits.Get<TooltipInfo>().Icon); icon.Play(actor.Traits.Get<TooltipInfo>().Icon);
var bi = actor.Traits.Get<BuildableInfo>();
var location = new float2(RenderBounds.Location) + new float2(queue.i * (IconWidth + IconSpacing), 0); var location = new float2(RenderBounds.Location) + new float2(queue.i * (IconWidth + IconSpacing), 0);
WidgetUtils.DrawSHPCentered(icon.Image, location + 0.5f * iconSize, worldRenderer, 0.5f); WidgetUtils.DrawSHPCentered(icon.Image, location + 0.5f * iconSize, worldRenderer.Palette(bi.IconPalette), 0.5f);
var clock = clocks[queue.Trait]; var clock = clocks[queue.Trait];
clock.PlayFetchIndex("idle", clock.PlayFetchIndex("idle",
() => current.TotalTime == 0 ? 0 : ((current.TotalTime - current.RemainingTime) () => current.TotalTime == 0 ? 0 : ((current.TotalTime - current.RemainingTime)
* (clock.CurrentSequence.Length - 1) / current.TotalTime)); * (clock.CurrentSequence.Length - 1) / current.TotalTime));
clock.Tick(); clock.Tick();
WidgetUtils.DrawSHPCentered(clock.Image, location + 0.5f * iconSize, worldRenderer, 0.5f); WidgetUtils.DrawSHPCentered(clock.Image, location + 0.5f * iconSize, worldRenderer.Palette(bi.IconPalette), 0.5f);
var tiny = Game.Renderer.Fonts["Tiny"]; var tiny = Game.Renderer.Fonts["Tiny"];
var text = GetOverlayForItem(current); var text = GetOverlayForItem(current);

View File

@@ -72,14 +72,14 @@ namespace OpenRA.Mods.Common.Widgets
icon.Play(item.Info.Icon); icon.Play(item.Info.Icon);
var location = new float2(RenderBounds.Location) + new float2(power.i * (IconWidth + IconSpacing), 0); var location = new float2(RenderBounds.Location) + new float2(power.i * (IconWidth + IconSpacing), 0);
WidgetUtils.DrawSHPCentered(icon.Image, location + 0.5f * iconSize, worldRenderer, 0.5f); WidgetUtils.DrawSHPCentered(icon.Image, location + 0.5f * iconSize, worldRenderer.Palette(item.Info.IconPalette), 0.5f);
var clock = clocks[power.a.Key]; var clock = clocks[power.a.Key];
clock.PlayFetchIndex("idle", clock.PlayFetchIndex("idle",
() => item.TotalTime == 0 ? 0 : ((item.TotalTime - item.RemainingTime) () => item.TotalTime == 0 ? 0 : ((item.TotalTime - item.RemainingTime)
* (clock.CurrentSequence.Length - 1) / item.TotalTime)); * (clock.CurrentSequence.Length - 1) / item.TotalTime));
clock.Tick(); clock.Tick();
WidgetUtils.DrawSHPCentered(clock.Image, location + 0.5f * iconSize, worldRenderer, 0.5f); WidgetUtils.DrawSHPCentered(clock.Image, location + 0.5f * iconSize, worldRenderer.Palette(item.Info.IconPalette), 0.5f);
var tiny = Game.Renderer.Fonts["Tiny"]; var tiny = Game.Renderer.Fonts["Tiny"];
var text = GetOverlayForItem(item); var text = GetOverlayForItem(item);

View File

@@ -26,6 +26,7 @@ namespace OpenRA.Mods.Common.Widgets
public string Name; public string Name;
public Hotkey Hotkey; public Hotkey Hotkey;
public Sprite Sprite; public Sprite Sprite;
public PaletteReference Palette;
public float2 Pos; public float2 Pos;
public List<ProductionItem> Queued; public List<ProductionItem> Queued;
} }
@@ -312,12 +313,15 @@ namespace OpenRA.Mods.Common.Widgets
var icon = new Animation(World, rsi.GetImage(item, World.Map.SequenceProvider, race)); var icon = new Animation(World, rsi.GetImage(item, World.Map.SequenceProvider, race));
icon.Play(item.Traits.Get<TooltipInfo>().Icon); icon.Play(item.Traits.Get<TooltipInfo>().Icon);
var bi = item.Traits.Get<BuildableInfo>();
var pi = new ProductionIcon() var pi = new ProductionIcon()
{ {
Actor = item, Actor = item,
Name = item.Name, Name = item.Name,
Hotkey = ks.GetProductionHotkey(DisplayedIconCount), Hotkey = ks.GetProductionHotkey(DisplayedIconCount),
Sprite = icon.Image, Sprite = icon.Image,
Palette = worldRenderer.Palette(bi.IconPalette),
Pos = new float2(rect.Location), Pos = new float2(rect.Location),
Queued = CurrentQueue.AllQueued().Where(a => a.Item == item.Name).ToList() Queued = CurrentQueue.AllQueued().Where(a => a.Item == item.Name).ToList()
}; };
@@ -350,7 +354,7 @@ namespace OpenRA.Mods.Common.Widgets
// Icons // Icons
foreach (var icon in icons.Values) foreach (var icon in icons.Values)
{ {
WidgetUtils.DrawSHPCentered(icon.Sprite, icon.Pos + iconOffset, worldRenderer); WidgetUtils.DrawSHPCentered(icon.Sprite, icon.Pos + iconOffset, icon.Palette);
// Build progress // Build progress
if (icon.Queued.Count > 0) if (icon.Queued.Count > 0)
@@ -361,10 +365,10 @@ namespace OpenRA.Mods.Common.Widgets
* (clock.CurrentSequence.Length - 1) / first.TotalTime); * (clock.CurrentSequence.Length - 1) / first.TotalTime);
clock.Tick(); clock.Tick();
WidgetUtils.DrawSHPCentered(clock.Image, icon.Pos + iconOffset, worldRenderer); WidgetUtils.DrawSHPCentered(clock.Image, icon.Pos + iconOffset, icon.Palette);
} }
else if (!buildableItems.Any(a => a.Name == icon.Name)) else if (!buildableItems.Any(a => a.Name == icon.Name))
WidgetUtils.DrawSHPCentered(cantBuild.Image, icon.Pos + iconOffset, worldRenderer); WidgetUtils.DrawSHPCentered(cantBuild.Image, icon.Pos + iconOffset, icon.Palette);
} }
// Overlays // Overlays

View File

@@ -65,6 +65,7 @@ namespace OpenRA.Mods.Common.Widgets
public SupportPowerInstance Power; public SupportPowerInstance Power;
public float2 Pos; public float2 Pos;
public Sprite Sprite; public Sprite Sprite;
public PaletteReference Palette;
public Hotkey Hotkey; public Hotkey Hotkey;
} }
@@ -89,6 +90,7 @@ namespace OpenRA.Mods.Common.Widgets
Power = p, Power = p,
Pos = new float2(rect.Location), Pos = new float2(rect.Location),
Sprite = icon.Image, Sprite = icon.Image,
Palette = worldRenderer.Palette(p.Info.IconPalette),
Hotkey = ks.GetSupportPowerHotkey(IconCount) Hotkey = ks.GetSupportPowerHotkey(IconCount)
}; };
@@ -139,7 +141,7 @@ namespace OpenRA.Mods.Common.Widgets
// Icons // Icons
foreach (var p in icons.Values) foreach (var p in icons.Values)
{ {
WidgetUtils.DrawSHPCentered(p.Sprite, p.Pos + iconOffset, worldRenderer); WidgetUtils.DrawSHPCentered(p.Sprite, p.Pos + iconOffset, p.Palette);
// Charge progress // Charge progress
var sp = p.Power; var sp = p.Power;
@@ -148,7 +150,7 @@ namespace OpenRA.Mods.Common.Widgets
* (clock.CurrentSequence.Length - 1) / sp.TotalTime); * (clock.CurrentSequence.Length - 1) / sp.TotalTime);
clock.Tick(); clock.Tick();
WidgetUtils.DrawSHPCentered(clock.Image, p.Pos + iconOffset, worldRenderer); WidgetUtils.DrawSHPCentered(clock.Image, p.Pos + iconOffset, p.Palette);
} }
// Overlay // Overlay