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 @@
-
+