Allow custom/multiple cursor palettes
This commit is contained in:
@@ -20,7 +20,9 @@ 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,20 +15,22 @@ 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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<unit name="clock">
|
||||
<sequence name="idle" start="0" length="*" src="hclock" />
|
||||
</unit>
|
||||
<cursor src="mouse2">
|
||||
<cursor src="mouse2" palette="cursor">
|
||||
<sequence name="scroll" start="1" length="8" x="12" y="12" />
|
||||
<sequence name="scroll-blocked" start="130" length="8" x="12" y="12" />
|
||||
<sequence name="select" start="12" length="6" x="12" y="12" />
|
||||
|
||||
@@ -326,7 +326,7 @@
|
||||
<unit name="clock">
|
||||
<sequence name="idle" start="0" length="*" />
|
||||
</unit>
|
||||
<cursor src="mouse">
|
||||
<cursor src="mouse" palette="cursor">
|
||||
<sequence name="scroll" start="1" length="8" />
|
||||
<sequence name="scroll-blocked" start="124" length="8" />
|
||||
<sequence name="select" start="15" length="6" x="12" y="12" />
|
||||
@@ -373,7 +373,7 @@
|
||||
<sequence name="repair-blocked" start="120" length="1" x="12" y="12" />
|
||||
<sequence name="sell2" start="148" length="12" />
|
||||
</cursor>
|
||||
<cursor src="nopower">
|
||||
<cursor src="nopower" palette="cursor">
|
||||
<sequence name="powerdown-blocked" start="0" length="1" x="12" y="12" />
|
||||
<sequence name="powerdown" start="1" length="3" x="12" y="12" />
|
||||
</cursor>
|
||||
|
||||
Reference in New Issue
Block a user