sequence editor actually works for editing

This commit is contained in:
Chris Forbes
2009-10-28 22:52:46 +13:00
parent 1c3b48de04
commit 048f48eeb1
4 changed files with 424 additions and 426 deletions

View File

@@ -30,10 +30,10 @@
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer(); this.toolStripContainer1 = new System.Windows.Forms.ToolStripContainer();
this.surface1 = new SequenceEditor.Surface();
this.toolStrip1 = new System.Windows.Forms.ToolStrip(); this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
this.surface1 = new SequenceEditor.Surface();
this.toolStripContainer1.ContentPanel.SuspendLayout(); this.toolStripContainer1.ContentPanel.SuspendLayout();
this.toolStripContainer1.TopToolStripPanel.SuspendLayout(); this.toolStripContainer1.TopToolStripPanel.SuspendLayout();
this.toolStripContainer1.SuspendLayout(); this.toolStripContainer1.SuspendLayout();
@@ -58,15 +58,6 @@
// //
this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolStrip1); this.toolStripContainer1.TopToolStripPanel.Controls.Add(this.toolStrip1);
// //
// surface1
//
this.surface1.Dock = System.Windows.Forms.DockStyle.Fill;
this.surface1.Location = new System.Drawing.Point(0, 0);
this.surface1.Name = "surface1";
this.surface1.Size = new System.Drawing.Size(708, 518);
this.surface1.TabIndex = 0;
this.surface1.Text = "surface1";
//
// toolStrip1 // toolStrip1
// //
this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None; this.toolStrip1.Dock = System.Windows.Forms.DockStyle.None;
@@ -96,6 +87,16 @@
this.toolStripButton2.Name = "toolStripButton2"; this.toolStripButton2.Name = "toolStripButton2";
this.toolStripButton2.Size = new System.Drawing.Size(35, 22); this.toolStripButton2.Size = new System.Drawing.Size(35, 22);
this.toolStripButton2.Text = "Save"; this.toolStripButton2.Text = "Save";
this.toolStripButton2.Click += new System.EventHandler(this.toolStripButton2_Click);
//
// surface1
//
this.surface1.Dock = System.Windows.Forms.DockStyle.Fill;
this.surface1.Location = new System.Drawing.Point(0, 0);
this.surface1.Name = "surface1";
this.surface1.Size = new System.Drawing.Size(708, 518);
this.surface1.TabIndex = 0;
this.surface1.Text = "surface1";
// //
// Form1 // Form1
// //

View File

@@ -24,5 +24,10 @@ namespace SequenceEditor
if (shp == null) return; if (shp == null) return;
Program.Shps.Add(shp, Program.LoadAndResolve(shp)); Program.Shps.Add(shp, Program.LoadAndResolve(shp));
} }
void toolStripButton2_Click(object sender, EventArgs e)
{
Program.Save();
}
} }
} }

View File

@@ -30,6 +30,33 @@ namespace SequenceEditor
}).ToArray(); }).ToArray();
} }
public static void Save()
{
var e = Doc.SelectSingleNode(string.Format("//unit[@name=\"{0}\"]", UnitName)) as XmlElement;
if (e == null)
{
e = Doc.CreateElement("unit");
e.SetAttribute( "name", UnitName );
e = Doc.SelectSingleNode("sequences").AppendChild(e) as XmlElement;
}
while (e.HasChildNodes) e.RemoveChild(e.FirstChild); /* what a fail */
foreach (var s in Sequences)
{
var seqnode = Doc.CreateElement("sequence");
seqnode.SetAttribute("name", s.Key);
seqnode.SetAttribute("start", s.Value.start.ToString());
seqnode.SetAttribute("length", s.Value.length.ToString());
if (s.Value.shp != UnitName)
seqnode.SetAttribute("src", s.Value.shp);
e.AppendChild(seqnode);
}
Doc.Save("sequences.xml");
}
[STAThread] [STAThread]
static void Main( string[] args ) static void Main( string[] args )
{ {
@@ -44,7 +71,12 @@ namespace SequenceEditor
Pal = new Palette(FileSystem.Open("temperat.pal")); Pal = new Palette(FileSystem.Open("temperat.pal"));
UnitName = args.First(); UnitName = args.FirstOrDefault();
if (UnitName == null)
UnitName = GetTextForm.GetString("Unit to edit?", "e1");
if (UnitName == null)
return;
Shps[UnitName] = LoadAndResolve(UnitName); Shps[UnitName] = LoadAndResolve(UnitName);
/* todo: load supplemental SHPs */ /* todo: load supplemental SHPs */

View File

@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8"?>
<!-- openra/sequences.xml <!-- openra/sequences.xml
this file describes animation sequences for structures and units. this file describes animation sequences for structures and units.
@@ -27,16 +26,13 @@
author: C. Forbes author: C. Forbes
--> -->
<sequences> <sequences>
<!-- forward command post (campaign specific building) --> <!-- forward command post (campaign specific building) -->
<unit name="fcom"> <unit name="fcom">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" /> <sequence name="make" start="0" />
</unit> </unit>
<!-- construction yard --> <!-- construction yard -->
<unit name="fact"> <unit name="fact">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
@@ -45,77 +41,66 @@
<sequence name="damaged-idle" start="26" /> <sequence name="damaged-idle" start="26" />
<sequence name="damaged-build" start="27" length="25" /> <sequence name="damaged-build" start="27" length="25" />
</unit> </unit>
<!-- refinery --> <!-- refinery -->
<unit name="proc"> <unit name="proc">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="procmake" /> <sequence name="make" start="0" length="*" src="procmake" />
</unit> </unit>
<!-- silo --> <!-- silo -->
<unit name="silo"> <unit name="silo">
<sequence name="idle" start="0" length="5" /> <sequence name="idle" start="0" length="5" />
<sequence name="damaged-idle" start="5" length="5" /> <sequence name="damaged-idle" start="5" length="5" />
<sequence name="make" start="0" length="*" src="silomake" /> <sequence name="make" start="0" length="*" src="silomake" />
</unit> </unit>
<!-- power plant --> <!-- power plant -->
<unit name="powr"> <unit name="powr">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="powrmake" /> <sequence name="make" start="0" length="*" src="powrmake" />
</unit> </unit>
<!-- advanced power plant --> <!-- advanced power plant -->
<unit name="apwr"> <unit name="apwr">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="apwrmake" /> <sequence name="make" start="0" length="*" src="apwrmake" />
</unit> </unit>
<!-- soviet barracks --> <!-- soviet barracks -->
<unit name="barr"> <unit name="barr">
<sequence name="idle" start="0" length="10" /> <sequence name="idle" start="0" length="10" />
<sequence name="damaged-idle" start="10" length="10" /> <sequence name="damaged-idle" start="10" length="10" />
<sequence name="make" start="0" length="*" src="barrmake" /> <sequence name="make" start="0" length="*" src="barrmake" />
</unit> </unit>
<!-- allied barracks --> <!-- allied barracks -->
<unit name="tent"> <unit name="tent">
<sequence name="idle" start="0" length="10" /> <sequence name="idle" start="0" length="10" />
<sequence name="damaged-idle" start="10" length="10" /> <sequence name="damaged-idle" start="10" length="10" />
<sequence name="make" start="0" length="*" src="tentmake" /> <sequence name="make" start="0" length="*" src="tentmake" />
</unit> </unit>
<!-- kennel --> <!-- kennel -->
<unit name="kenn"> <unit name="kenn">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="kennmake" /> <sequence name="make" start="0" length="*" src="kennmake" />
</unit> </unit>
<!-- radar dome --> <!-- radar dome -->
<unit name="dome"> <unit name="dome">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="domemake" /> <sequence name="make" start="0" length="*" src="domemake" />
</unit> </unit>
<!-- allied tech center --> <!-- allied tech center -->
<unit name="atek"> <unit name="atek">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="atekmake" /> <sequence name="make" start="0" length="*" src="atekmake" />
</unit> </unit>
<!-- soviet tech center --> <!-- soviet tech center -->
<unit name="stek"> <unit name="stek">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="stekmake" /> <sequence name="make" start="0" length="*" src="stekmake" />
</unit> </unit>
<!-- war factory --> <!-- war factory -->
<unit name="weap"> <unit name="weap">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
@@ -126,129 +111,110 @@
<sequence name="idle-top" start="0" length="1" src="weap2" /> <sequence name="idle-top" start="0" length="1" src="weap2" />
<sequence name="damaged-idle_top" start="4" length="1" src="weap2" /> <sequence name="damaged-idle_top" start="4" length="1" src="weap2" />
</unit> </unit>
<!-- helipad --> <!-- helipad -->
<unit name="hpad"> <unit name="hpad">
<sequence name="idle" start="0" length="7" /> <sequence name="idle" start="0" length="7" />
<sequence name="damaged-idle" start="7" length="7" /> <sequence name="damaged-idle" start="7" length="7" />
<sequence name="make" start="0" length="*" src="hpadmake" /> <sequence name="make" start="0" length="*" src="hpadmake" />
</unit> </unit>
<!-- airfield --> <!-- airfield -->
<unit name="afld"> <unit name="afld">
<sequence name="idle" start="0" length="8" /> <sequence name="idle" start="0" length="8" />
<sequence name="damaged-idle" start="8" length="8" /> <sequence name="damaged-idle" start="8" length="8" />
<sequence name="make" start="0" length="*" src="afldmake" /> <sequence name="make" start="0" length="*" src="afldmake" />
</unit> </unit>
<!-- sub pen --> <!-- sub pen -->
<unit name="spen"> <unit name="spen">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="spenmake" /> <sequence name="make" start="0" length="*" src="spenmake" />
</unit> </unit>
<!-- shipyard --> <!-- shipyard -->
<unit name="syrd"> <unit name="syrd">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="syrdmake" /> <sequence name="make" start="0" length="*" src="syrdmake" />
</unit> </unit>
<!-- repair pad --> <!-- repair pad -->
<unit name="fix"> <unit name="fix">
<sequence name="idle" start="0" length="7" /> <sequence name="idle" start="0" length="7" />
<sequence name="damaged-idle" start="7" length="7" /> <sequence name="damaged-idle" start="7" length="7" />
<sequence name="make" start="0" length="*" src="fixmake" /> <sequence name="make" start="0" length="*" src="fixmake" />
</unit> </unit>
<!-- allied gun turret --> <!-- allied gun turret -->
<unit name="gun"> <unit name="gun">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="damaged-idle" start="32" length="32" /> <sequence name="damaged-idle" start="32" length="32" />
<sequence name="make" start="0" length="*" src="gunmake" /> <sequence name="make" start="0" length="*" src="gunmake" />
</unit> </unit>
<!-- AA gun --> <!-- AA gun -->
<unit name="agun"> <unit name="agun">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="damaged-idle" start="32" length="32" /> <sequence name="damaged-idle" start="32" length="32" />
<sequence name="make" start="0" length="*" src="agunmake" /> <sequence name="make" start="0" length="*" src="agunmake" />
</unit> </unit>
<!-- sam site --> <!-- sam site -->
<unit name="sam"> <unit name="sam">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="damaged-idle" start="34" length="32" /> <sequence name="damaged-idle" start="34" length="32" />
<sequence name="make" start="0" length="*" src="sammake" /> <sequence name="make" start="0" length="*" src="sammake" />
</unit> </unit>
<!-- flame turret --> <!-- flame turret -->
<unit name="ftur"> <unit name="ftur">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="fturmake" /> <sequence name="make" start="0" length="*" src="fturmake" />
</unit> </unit>
<!-- tesla coil --> <!-- tesla coil -->
<unit name="tsla"> <unit name="tsla">
<sequence name="idle" start="0" length="10" /> <sequence name="idle" start="0" length="10" />
<sequence name="damaged-idle" start="10" length="10" /> <sequence name="damaged-idle" start="10" length="10" />
<sequence name="make" start="0" length="*" src="tslamake" /> <sequence name="make" start="0" length="*" src="tslamake" />
</unit> </unit>
<!-- pillbox --> <!-- pillbox -->
<unit name="pbox"> <unit name="pbox">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="pboxmake" /> <sequence name="make" start="0" length="*" src="pboxmake" />
</unit> </unit>
<!-- camo pillbox --> <!-- camo pillbox -->
<unit name="hbox"> <unit name="hbox">
<sequence name="idle" start="0" /> <sequence name="idle" start="0" />
<sequence name="damaged-idle" start="1" /> <sequence name="damaged-idle" start="1" />
<sequence name="make" start="0" length="*" src="hboxmake" /> <sequence name="make" start="0" length="*" src="hboxmake" />
</unit> </unit>
<!-- gap generator --> <!-- gap generator -->
<unit name="gap"> <unit name="gap">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="damaged-idle" start="32" length="32" /> <sequence name="damaged-idle" start="32" length="32" />
<sequence name="make" start="0" length="*" src="gapmake" /> <sequence name="make" start="0" length="*" src="gapmake" />
</unit> </unit>
<!-- iron curtain --> <!-- iron curtain -->
<unit name="iron"> <unit name="iron">
<sequence name="idle" start="0" length="11" /> <sequence name="idle" start="0" length="11" />
<sequence name="damaged-idle" start="11" length="11" /> <sequence name="damaged-idle" start="11" length="11" />
<sequence name="make" start="0" length="*" src="ironmake" /> <sequence name="make" start="0" length="*" src="ironmake" />
</unit> </unit>
<!-- chronosphere --> <!-- chronosphere -->
<unit name="pdox"> <unit name="pdox">
<sequence name="idle" start="0" length="29" /> <sequence name="idle" start="0" length="29" />
<sequence name="damaged-idle" start="29" length="29" /> <sequence name="damaged-idle" start="29" length="29" />
<sequence name="make" start="0" length="*" src="pdoxmake" /> <sequence name="make" start="0" length="*" src="pdoxmake" />
</unit> </unit>
<!-- nuclear missile silo --> <!-- nuclear missile silo -->
<unit name="mslo"> <unit name="mslo">
<sequence name="idle" start="0" length="8" /> <sequence name="idle" start="0" length="8" />
<sequence name="damaged-idle" start="8" length="8" /> <sequence name="damaged-idle" start="8" length="8" />
<sequence name="make" start="0" length="*" src="mslomake" /> <sequence name="make" start="0" length="*" src="mslomake" />
</unit> </unit>
<!-- mcv --> <!-- mcv -->
<unit name="mcv"> <unit name="mcv">
<sequence name="idle" start="0" length="*" /> <sequence name="idle" start="0" length="*" />
</unit> </unit>
<!-- truck --> <!-- truck -->
<unit name="truk"> <unit name="truk">
<sequence name="idle" start="0" length="*" /> <sequence name="idle" start="0" length="*" />
</unit> </unit>
<!-- harv --> <!-- harv -->
<unit name="harv"> <unit name="harv">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
@@ -262,77 +228,64 @@
<sequence name="harvest7" start="88" length="8" /> <sequence name="harvest7" start="88" length="8" />
<sequence name="empty" start="96" length="15" /> <sequence name="empty" start="96" length="15" />
</unit> </unit>
<!-- light tank --> <!-- light tank -->
<unit name="1tnk"> <unit name="1tnk">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="turret" start="32" length="32" /> <sequence name="turret" start="32" length="32" />
</unit> </unit>
<!-- medium tank --> <!-- medium tank -->
<unit name="2tnk"> <unit name="2tnk">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="turret" start="32" length="32" /> <sequence name="turret" start="32" length="32" />
</unit> </unit>
<!-- heavy tank --> <!-- heavy tank -->
<unit name="3tnk"> <unit name="3tnk">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="turret" start="32" length="32" /> <sequence name="turret" start="32" length="32" />
</unit> </unit>
<!-- mammoth tank --> <!-- mammoth tank -->
<unit name="4tnk"> <unit name="4tnk">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="turret" start="32" length="32" /> <sequence name="turret" start="32" length="32" />
</unit> </unit>
<!-- v2 rocket launcher --> <!-- v2 rocket launcher -->
<unit name="v2rl"> <unit name="v2rl">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="reloading" start="32" length="32" /> <sequence name="reloading" start="32" length="32" />
<sequence name="aiming" start="64" length="16" /> <sequence name="aiming" start="64" length="16" />
</unit> </unit>
<!-- artillery --> <!-- artillery -->
<unit name="arty"> <unit name="arty">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
</unit> </unit>
<!-- jeep --> <!-- jeep -->
<unit name="jeep"> <unit name="jeep">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="turret" start="32" length="32" /> <sequence name="turret" start="32" length="32" />
</unit> </unit>
<!-- apc --> <!-- apc -->
<unit name="apc"> <unit name="apc">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
</unit> </unit>
<!-- mine layer --> <!-- mine layer -->
<unit name="mnly"> <unit name="mnly">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<!-- and 16 "lay mine" sprites, not used in real-ra --> <!-- and 16 "lay mine" sprites, not used in real-ra -->
</unit> </unit>
<!-- radar jammer --> <!-- radar jammer -->
<unit name="mrj"> <unit name="mrj">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="turret" start="32" length="32" /> <sequence name="turret" start="32" length="32" />
</unit> </unit>
<!-- mobile gap generator --> <!-- mobile gap generator -->
<unit name="mgg"> <unit name="mgg">
<sequence name="idle" start="0" length="32" /> <sequence name="idle" start="0" length="32" />
<sequence name="turret" start="32" length="8" /> <sequence name="turret" start="32" length="8" />
</unit> </unit>
<!-- submarine --> <!-- submarine -->
<unit name="ss"> <unit name="ss">
<sequence name="idle" start="0" length="16" /> <sequence name="idle" start="0" length="16" />
</unit> </unit>
<!-- rifle infantry --> <!-- rifle infantry -->
<unit name="e1"> <unit name="e1">
<sequence name="stand" start="0" length="8" /> <sequence name="stand" start="0" length="8" />
@@ -386,12 +339,10 @@
<sequence name="die4" start="312" length="12" /> <sequence name="die4" start="312" length="12" />
<sequence name="die5" start="324" length="18" /> <sequence name="die5" start="324" length="18" />
</unit> </unit>
<!-- build clock - hacked in --> <!-- build clock - hacked in -->
<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">
<sequence name="default" start="0" /> <sequence name="default" start="0" />
<sequence name="scroll" start="1" length="8" /> <sequence name="scroll" start="1" length="8" />
@@ -431,13 +382,22 @@
<sequence name="repair2-blocked" start="213" length="1" /> <sequence name="repair2-blocked" start="213" length="1" />
<sequence name="ability-minimap" start="214" length="8" /> <sequence name="ability-minimap" start="214" length="8" />
</cursor> </cursor>
<unit name="120mm"> <unit name="120mm">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
</unit> </unit>
<unit name="veh-hit3"> <unit name="veh-hit3">
<sequence name="idle" start="0" length="*" /> <sequence name="idle" start="0" length="*" />
</unit> </unit>
<unit name="e3">
<sequence name="stand" start="0" length="8" />
<sequence name="stand2" start="8" length="8" />
<sequence name="run-0" start="16" length="6" />
<sequence name="run-1" start="22" length="6" />
<sequence name="run-2" start="28" length="6" />
<sequence name="run-3" start="34" length="6" />
<sequence name="run-4" start="40" length="6" />
<sequence name="run-5" start="46" length="6" />
<sequence name="run-6" start="52" length="6" />
<sequence name="run-7" start="58" length="6" />
</unit>
</sequences> </sequences>