Allow custom/multiple cursor palettes

This commit is contained in:
Paul Chote
2010-07-23 14:49:45 +12:00
parent 93e629584b
commit 9ebdef043c
6 changed files with 16 additions and 11 deletions

View File

@@ -19,8 +19,10 @@ namespace OpenRA
{ {
sequence = SequenceProvider.GetCursorSequence(cursor); sequence = SequenceProvider.GetCursorSequence(cursor);
} }
public Sprite GetSprite(int frame) { return sequence.GetSprite(frame); } public void Draw(int frame, float2 pos)
public int2 GetHotspot() { return sequence.Hotspot; } {
Game.Renderer.SpriteRenderer.DrawSprite(sequence.GetSprite(frame), pos - sequence.Hotspot, sequence.Palette);
}
} }
} }

View File

@@ -15,21 +15,23 @@ namespace OpenRA.Graphics
public class CursorSequence public class CursorSequence
{ {
readonly int start, length; readonly int start, length;
readonly string palette;
public int Start { get { return start; } } public int Start { get { return start; } }
public int End { get { return start + length; } } public int End { get { return start + length; } }
public int Length { get { return length; } } public int Length { get { return length; } }
public string Palette { get { return palette; } }
public readonly int2 Hotspot; public readonly int2 Hotspot;
Sprite[] sprites; Sprite[] sprites;
public CursorSequence(string cursorSrc, XmlElement e) public CursorSequence(string cursorSrc, string palette, XmlElement e)
{ {
sprites = CursorSheetBuilder.LoadAllSprites(cursorSrc); sprites = CursorSheetBuilder.LoadAllSprites(cursorSrc);
start = int.Parse(e.GetAttribute("start")); start = int.Parse(e.GetAttribute("start"));
this.palette = palette;
if (e.GetAttribute("length") == "*" || e.GetAttribute("end") == "*") if (e.GetAttribute("length") == "*" || e.GetAttribute("end") == "*")
length = sprites.Length - start; length = sprites.Length - start;
else if (e.HasAttribute("length")) else if (e.HasAttribute("length"))

View File

@@ -46,9 +46,10 @@ namespace OpenRA.Graphics
static void LoadSequencesForCursor(XmlElement eCursor) static void LoadSequencesForCursor(XmlElement eCursor)
{ {
string cursorSrc = eCursor.GetAttribute("src"); string cursorSrc = eCursor.GetAttribute("src");
string palette = eCursor.GetAttribute("palette");
foreach (XmlElement eSequence in eCursor.SelectNodes("./sequence")) 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));
} }

View File

@@ -72,7 +72,7 @@ namespace OpenRA.Graphics
var cursorName = Widget.RootWidget.GetCursorOuter(mousePos) ?? Game.controller.ChooseCursor( world ); var cursorName = Widget.RootWidget.GetCursorOuter(mousePos) ?? Game.controller.ChooseCursor( world );
var c = new Cursor(cursorName); 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}" ); Timer.Time( "cursors: {0}" );
renderer.RgbaSpriteRenderer.Flush(); renderer.RgbaSpriteRenderer.Flush();

View File

@@ -4,7 +4,7 @@
<unit name="clock"> <unit name="clock">
<sequence name="idle" start="0" length="*" src="hclock" /> <sequence name="idle" start="0" length="*" src="hclock" />
</unit> </unit>
<cursor src="mouse2"> <cursor src="mouse2" palette="cursor">
<sequence name="scroll" start="1" length="8" x="12" y="12" /> <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="scroll-blocked" start="130" length="8" x="12" y="12" />
<sequence name="select" start="12" length="6" x="12" y="12" /> <sequence name="select" start="12" length="6" x="12" y="12" />

View File

@@ -326,7 +326,7 @@
<unit name="clock"> <unit name="clock">
<sequence name="idle" start="0" length="*" /> <sequence name="idle" start="0" length="*" />
</unit> </unit>
<cursor src="mouse"> <cursor src="mouse" palette="cursor">
<sequence name="scroll" start="1" length="8" /> <sequence name="scroll" start="1" length="8" />
<sequence name="scroll-blocked" start="124" length="8" /> <sequence name="scroll-blocked" start="124" length="8" />
<sequence name="select" start="15" length="6" x="12" y="12" /> <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="repair-blocked" start="120" length="1" x="12" y="12" />
<sequence name="sell2" start="148" length="12" /> <sequence name="sell2" start="148" length="12" />
</cursor> </cursor>
<cursor src="nopower"> <cursor src="nopower" palette="cursor">
<sequence name="powerdown-blocked" start="0" length="1" x="12" y="12" /> <sequence name="powerdown-blocked" start="0" length="1" x="12" y="12" />
<sequence name="powerdown" start="1" length="3" x="12" y="12" /> <sequence name="powerdown" start="1" length="3" x="12" y="12" />
</cursor> </cursor>