diff --git a/OpenRA.Game/Cursor.cs b/OpenRA.Game/Cursor.cs index 09d005476e..10fe06301f 100644 --- a/OpenRA.Game/Cursor.cs +++ b/OpenRA.Game/Cursor.cs @@ -19,8 +19,10 @@ namespace OpenRA { sequence = SequenceProvider.GetCursorSequence(cursor); } - - public Sprite GetSprite(int frame) { return sequence.GetSprite(frame); } - public int2 GetHotspot() { return sequence.Hotspot; } + + public void Draw(int frame, float2 pos) + { + Game.Renderer.SpriteRenderer.DrawSprite(sequence.GetSprite(frame), pos - sequence.Hotspot, sequence.Palette); + } } } diff --git a/OpenRA.Game/Graphics/CursorSequence.cs b/OpenRA.Game/Graphics/CursorSequence.cs index ea86c7c9ca..92871e52a5 100644 --- a/OpenRA.Game/Graphics/CursorSequence.cs +++ b/OpenRA.Game/Graphics/CursorSequence.cs @@ -15,21 +15,23 @@ namespace OpenRA.Graphics public class CursorSequence { readonly int start, length; + readonly string palette; public int Start { get { return start; } } public int End { get { return start + length; } } public int Length { get { return length; } } - + public string Palette { get { return palette; } } public readonly int2 Hotspot; Sprite[] sprites; - public CursorSequence(string cursorSrc, XmlElement e) + public CursorSequence(string cursorSrc, string palette, XmlElement e) { sprites = CursorSheetBuilder.LoadAllSprites(cursorSrc); start = int.Parse(e.GetAttribute("start")); - + this.palette = palette; + if (e.GetAttribute("length") == "*" || e.GetAttribute("end") == "*") length = sprites.Length - start; else if (e.HasAttribute("length")) diff --git a/OpenRA.Game/Graphics/SequenceProvider.cs b/OpenRA.Game/Graphics/SequenceProvider.cs index 41f1755573..b9358ecfdc 100644 --- a/OpenRA.Game/Graphics/SequenceProvider.cs +++ b/OpenRA.Game/Graphics/SequenceProvider.cs @@ -46,9 +46,10 @@ namespace OpenRA.Graphics static void LoadSequencesForCursor(XmlElement eCursor) { string cursorSrc = eCursor.GetAttribute("src"); + string palette = eCursor.GetAttribute("palette"); foreach (XmlElement eSequence in eCursor.SelectNodes("./sequence")) - cursors.Add(eSequence.GetAttribute("name"), new CursorSequence(cursorSrc, eSequence)); + cursors.Add(eSequence.GetAttribute("name"), new CursorSequence(cursorSrc, palette, eSequence)); } diff --git a/OpenRA.Game/Graphics/Viewport.cs b/OpenRA.Game/Graphics/Viewport.cs index dd6e72b88f..9f8f151449 100644 --- a/OpenRA.Game/Graphics/Viewport.cs +++ b/OpenRA.Game/Graphics/Viewport.cs @@ -72,7 +72,7 @@ namespace OpenRA.Graphics var cursorName = Widget.RootWidget.GetCursorOuter(mousePos) ?? Game.controller.ChooseCursor( world ); var c = new Cursor(cursorName); - cursorRenderer.DrawSprite(c.GetSprite((int)cursorFrame), mousePos + Location - c.GetHotspot(), "cursor"); + c.Draw((int)cursorFrame, mousePos + Location); Timer.Time( "cursors: {0}" ); renderer.RgbaSpriteRenderer.Flush(); diff --git a/mods/cnc/sequences.xml b/mods/cnc/sequences.xml index d544aa968b..489b8d5224 100644 --- a/mods/cnc/sequences.xml +++ b/mods/cnc/sequences.xml @@ -4,7 +4,7 @@ - + diff --git a/mods/ra/sequences.xml b/mods/ra/sequences.xml index 83a96eaf44..495b7678f2 100644 --- a/mods/ra/sequences.xml +++ b/mods/ra/sequences.xml @@ -326,7 +326,7 @@ - + @@ -373,7 +373,7 @@ - +