diff --git a/OpenRA.Game/Graphics/CursorProvider.cs b/OpenRA.Game/Graphics/CursorProvider.cs index 823e231c41..0896b21be9 100644 --- a/OpenRA.Game/Graphics/CursorProvider.cs +++ b/OpenRA.Game/Graphics/CursorProvider.cs @@ -14,12 +14,13 @@ using System.IO; using System.Linq; using System.Xml; using OpenRA.FileFormats; +using OpenRA.Traits; namespace OpenRA.Graphics { public static class CursorProvider { - public static Dictionary Palettes { get; private set; } + public static HardwarePalette Palette; static Dictionary cursors; public static void Initialize(string[] sequenceFiles) @@ -34,9 +35,16 @@ namespace OpenRA.Graphics ShadowIndex[ShadowIndex.Length - 1] = Convert.ToInt32(sequences.NodesDict["ShadowIndex"].Value); } - Palettes = new Dictionary(); + var palettes = new Dictionary(); foreach (var s in sequences.NodesDict["Palettes"].Nodes) - Palettes.Add(s.Key, new Palette(FileSystem.Open(s.Value.Value), ShadowIndex)); + palettes.Add(s.Key, new Palette(FileSystem.Open(s.Value.Value), ShadowIndex)); + + Palette = new HardwarePalette(); + foreach (var p in palettes) + Palette.AddPalette(p.Key, p.Value, false); + + // Generate initial palette texture + Palette.Update(new IPaletteModifier[] {}); foreach (var s in sequences.NodesDict["Cursors"].Nodes) LoadSequencesForCursor(s.Key, s.Value); @@ -55,6 +63,17 @@ namespace OpenRA.Graphics return cursors.ContainsKey(cursor); } + public static void DrawCursor(Renderer renderer, string cursorName, int2 lastMousePos, int cursorFrame) + { + var cursorSequence = CursorProvider.GetCursorSequence(cursorName); + var cursorSprite = cursorSequence.GetSprite(cursorFrame); + + renderer.SpriteRenderer.DrawSprite(cursorSprite, + lastMousePos - cursorSequence.Hotspot, + Palette.GetPaletteIndex(cursorSequence.Palette), + cursorSprite.size); + } + public static CursorSequence GetCursorSequence(string cursor) { try { return cursors[cursor]; } diff --git a/OpenRA.Game/Graphics/Viewport.cs b/OpenRA.Game/Graphics/Viewport.cs index 4a15d081ac..af87f627ed 100755 --- a/OpenRA.Game/Graphics/Viewport.cs +++ b/OpenRA.Game/Graphics/Viewport.cs @@ -127,14 +127,9 @@ namespace OpenRA.Graphics using( new PerfSample("render_widgets") ) { Ui.Draw(); - var cursorName = Ui.Root.GetCursorOuter(Viewport.LastMousePos) ?? "default"; - var cursorSequence = CursorProvider.GetCursorSequence(cursorName); - var cursorSprite = cursorSequence.GetSprite((int)cursorFrame); - renderer.SpriteRenderer.DrawSprite(cursorSprite, - Viewport.LastMousePos - cursorSequence.Hotspot, - wr.Palette(cursorSequence.Palette).Index, - cursorSprite.size); + var cursorName = Ui.Root.GetCursorOuter(Viewport.LastMousePos) ?? "default"; + CursorProvider.DrawCursor(renderer, cursorName, Viewport.LastMousePos, (int)cursorFrame); } using( new PerfSample("render_flip") ) diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index fca66abb50..830b80acb7 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -42,8 +42,6 @@ namespace OpenRA.Graphics { this.world = world; palette = new HardwarePalette(); - foreach (var p in CursorProvider.Palettes) - palette.AddPalette(p.Key, p.Value, false); palettes = new Cache(CreatePaletteReference); foreach (var pal in world.traitDict.ActorsWithTraitMultiple(world))