Theater specific artwork done properly

This commit is contained in:
Paul Chote
2010-06-28 12:38:35 +12:00
parent b46cec91a8
commit 915c9460cf
6 changed files with 165 additions and 137 deletions

View File

@@ -147,7 +147,7 @@ namespace OpenRA.Editor
try try
{ {
var info = Rules.Info[a]; var info = Rules.Info[a];
var template = RenderActor(info, tileset.TileSuffix, palette); var template = RenderActor(info, tileset, palette);
var ibox = new PictureBox var ibox = new PictureBox
{ {
Image = template.Bitmap, Image = template.Bitmap,
@@ -241,10 +241,17 @@ namespace OpenRA.Editor
return bitmap; return bitmap;
} }
static ActorTemplate RenderActor(ActorInfo info, string ext, Palette p) static ActorTemplate RenderActor(ActorInfo info, TileSet tileset, Palette p)
{ {
var image = info.Traits.Get<RenderSimpleInfo>().Image ?? info.Name; var ri = info.Traits.Get<RenderSimpleInfo>();
using (var s = FileSystem.OpenWithExts(image, "." + ext, ".shp")) string image = null;
if (ri.OverrideTheater != null)
for (int i = 0; i < ri.OverrideTheater.Length; i++)
if (ri.OverrideTheater[i] == tileset.Id)
image = ri.OverrideImage[i];
image = image ?? ri.Image ?? info.Name;
using (var s = FileSystem.OpenWithExts(image, "." + tileset.TileSuffix, ".shp"))
{ {
var shp = new ShpReader(s); var shp = new ShpReader(s);
var frame = shp[0]; var frame = shp[0];

View File

@@ -78,23 +78,16 @@ namespace OpenRA.Graphics
public static Sequence GetSequence(string unitName, string sequenceName) public static Sequence GetSequence(string unitName, string sequenceName)
{ {
try { return units[unitName+"@"+currentTheater][sequenceName]; } try { return units[unitName][sequenceName]; }
catch (KeyNotFoundException) catch (KeyNotFoundException)
{ {
try { return units[unitName][sequenceName]; } throw new InvalidOperationException(
catch (KeyNotFoundException) "Unit `{0}` does not have a sequence `{1}`".F(unitName, sequenceName));
{
throw new InvalidOperationException(
"Unit `{0}` does not have a sequence `{1}`".F(unitName, sequenceName));
}
} }
} }
public static bool HasSequence(string unit, string seq) public static bool HasSequence(string unit, string seq)
{ {
if (units.ContainsKey(unit+"@"+currentTheater))
return units[unit+"@"+currentTheater].ContainsKey(seq);
return units[unit].ContainsKey(seq); return units[unit].ContainsKey(seq);
} }

View File

@@ -27,6 +27,8 @@ namespace OpenRA.Traits
public abstract class RenderSimpleInfo : ITraitInfo public abstract class RenderSimpleInfo : ITraitInfo
{ {
public readonly string Image = null; public readonly string Image = null;
public readonly string[] OverrideTheater = null;
public readonly string[] OverrideImage = null;
public readonly string Palette = null; public readonly string Palette = null;
public abstract object Create(ActorInitializer init); public abstract object Create(ActorInitializer init);
} }
@@ -36,9 +38,19 @@ namespace OpenRA.Traits
public Dictionary<string, AnimationWithOffset> anims = new Dictionary<string, AnimationWithOffset>(); public Dictionary<string, AnimationWithOffset> anims = new Dictionary<string, AnimationWithOffset>();
public Animation anim { get { return anims[""].Animation; } protected set { anims[""].Animation = value; } } public Animation anim { get { return anims[""].Animation; } protected set { anims[""].Animation = value; } }
string cachedImage = null;
public string GetImage(Actor self) public string GetImage(Actor self)
{ {
return self.Info.Traits.Get<RenderSimpleInfo>().Image ?? self.Info.Name; if (cachedImage != null)
return cachedImage;
var Info = self.Info.Traits.Get<RenderSimpleInfo>();
if (Info.OverrideTheater != null)
for (int i = 0; i < Info.OverrideTheater.Length; i++)
if (Info.OverrideTheater[i] == self.World.Map.Theater)
return cachedImage = Info.OverrideImage[i];
return cachedImage = Info.Image ?? self.Info.Name;
} }
public RenderSimple(Actor self, Func<int> baseFacing) public RenderSimple(Actor self, Func<int> baseFacing)

View File

@@ -1,5 +1,8 @@
V01: V01:
Inherits: ^CivBuilding Inherits: ^CivBuilding
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v25
Building: Building:
Footprint: xx xx Footprint: xx xx
Dimensions: 2,2 Dimensions: 2,2
@@ -8,6 +11,9 @@ V01:
V02: V02:
Inherits: ^CivBuilding Inherits: ^CivBuilding
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v20
Building: Building:
Footprint: xx xx Footprint: xx xx
Dimensions: 2,2 Dimensions: 2,2
@@ -17,80 +23,124 @@ V03:
Building: Building:
Footprint: xx xx Footprint: xx xx
Dimensions: 2,2 Dimensions: 2,2
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v21
V04: V04:
Inherits: ^CivBuilding Inherits: ^CivBuilding
Building: Building:
Footprint: xx xx Footprint: xx xx
Dimensions: 2,2 Dimensions: 2,2
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v24
V05: V05:
Inherits: ^CivBuilding Inherits: ^CivBuilding
Building: Building:
Footprint: xx Footprint: xx
Dimensions: 2,1 Dimensions: 2,1
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v22
V06: V06:
Inherits: ^CivBuilding Inherits: ^CivBuilding
Building: Building:
Footprint: xx Footprint: xx
Dimensions: 2,1 Dimensions: 2,1
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v26
V07: V07:
Inherits: ^CivBuilding Inherits: ^CivBuilding
Building: Building:
Footprint: xx Footprint: xx
Dimensions: 2,1 Dimensions: 2,1
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v30
V08: V08:
Inherits: ^CivBuilding Inherits: ^CivBuilding
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v23
V09: V09:
Inherits: ^CivBuilding Inherits: ^CivBuilding
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v27
V10: V10:
Inherits: ^CivBuilding Inherits: ^CivBuilding
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v28
V11: V11:
Inherits: ^CivBuilding Inherits: ^CivBuilding
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v29
V12: V12:
Inherits: ^CivBuilding Inherits: ^CivBuilding
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v34
V13: V13:
Inherits: ^CivBuilding Inherits: ^CivBuilding
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v35
V14: V14:
Inherits: ^CivBuilding Inherits: ^CivField
Valued:
Description: Field
V15: V15:
Inherits: ^CivBuilding Inherits: ^CivField
Valued:
Description: Field
V16: V16:
Inherits: ^CivBuilding Inherits: ^CivField
Valued:
Description: Field
V17: V17:
Inherits: ^CivBuilding Inherits: ^CivField
Valued:
Description: Field
V18: V18:
Inherits: ^CivBuilding Inherits: ^CivField
Valued:
Description: Field
V31: V31:
Inherits: ^CivBuilding Inherits: ^CivBuilding
Building:
Footprint: xx
Dimensions: 2,1
RenderBuilding:
Image: v05
OverrideTheater: DESERT
OverrideImage: v31
V32: V32:
Inherits: ^CivBuilding Inherits: ^CivBuilding
Building:
Footprint: xx
Dimensions: 2,1
RenderBuilding:
Image: v05
OverrideTheater: DESERT
OverrideImage: v32
V33: V33:
Inherits: ^CivBuilding Inherits: ^CivBuilding
Building:
Footprint: xx
Dimensions: 2,1
RenderBuilding:
Image: v05
OverrideTheater: DESERT
OverrideImage: v33
BARB: BARB:
Inherits: ^Wall Inherits: ^Wall

View File

@@ -106,6 +106,15 @@
Valued: Valued:
Description: Civilian Building Description: Civilian Building
^CivField:
Inherits: ^CivBuilding
-Selectable:
Valued:
Description: Field
RenderBuilding:
OverrideTheater: DESERT
OverrideImage: v23
^Wall: ^Wall:
Category: Building Category: Building
Building: Building:

View File

@@ -135,130 +135,142 @@
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v01@DESERT"> <unit name="v25">
<sequence name="idle" start="0" length="1" src="v25" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" src="v25" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" src="v25" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v02"> <unit name="v02">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v02@DESERT"> <unit name="v20">
<sequence name="idle" start="0" length="1" src="v20" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" src="v20" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" src="v20" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v03"> <unit name="v03">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v03@DESERT"> <unit name="v21">
<sequence name="idle" start="0" length="3" src="v21" /> <sequence name="idle" start="0" length="3" />
<sequence name="damaged-idle" start="3" length="3" src="v21" /> <sequence name="damaged-idle" start="3" length="3" />
<sequence name="critical-idle" start="6" length="1" src="v21" /> <sequence name="critical-idle" start="6" length="1" />
</unit> </unit>
<unit name="v04"> <unit name="v04">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v04@DESERT"> <unit name="v24">
<sequence name="idle" start="0" length="1" src="v24" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" src="v24" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" src="v24" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v05"> <unit name="v05">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v05@DESERT"> <unit name="v22">
<sequence name="idle" start="0" length="3" src="v22" /> <sequence name="idle" start="0" length="3" />
<sequence name="damaged-idle" start="3" length="3" src="v22" /> <sequence name="damaged-idle" start="3" length="3" />
<sequence name="critical-idle" start="6" length="1" src="v22" /> <sequence name="critical-idle" start="6" length="1" />
</unit> </unit>
<unit name="v06"> <unit name="v06">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v06@DESERT"> <unit name="v26">
<sequence name="idle" start="0" length="1" src="v26" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" src="v26" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" src="v26" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v07"> <unit name="v07">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="2" length="1" /> <sequence name="damaged-idle" start="2" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v07@DESERT"> <unit name="v30">
<sequence name="idle" start="0" length="1" src="v30" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="2" length="1" src="v30" /> <sequence name="damaged-idle" start="2" length="1" />
<sequence name="critical-idle" start="2" length="1" src="v30" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v08"> <unit name="v08">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v08@DESERT"> <unit name="v23">
<sequence name="idle" start="0" length="1" src="v23" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" src="v23" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" src="v23" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v09"> <unit name="v09">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v09@DESERT"> <unit name="v27">
<sequence name="idle" start="0" length="1" src="v27" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" src="v27" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" src="v27" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v10"> <unit name="v10">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v10@DESERT"> <unit name="v28">
<sequence name="idle" start="0" length="1" src="v28" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" src="v28" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" src="v28" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v11"> <unit name="v11">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v11@DESERT"> <unit name="v29">
<sequence name="idle" start="0" length="1" src="v29" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" src="v29" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" src="v29" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v12"> <unit name="v12">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v12@DESERT"> <unit name="v34">
<sequence name="idle" start="0" length="1" src="v34" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" src="v34" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" src="v34" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v13"> <unit name="v13">
<sequence name="idle" start="0" length="1" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v13@DESERT"> <unit name="v35">
<sequence name="idle" start="0" length="1" src="v35" /> <sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" src="v35" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" src="v35" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<!-- Buildings that can't be mapped from tem into desert (Fields) --> <!-- Buildings that can't be mapped from tem into desert (Fields) -->
@@ -287,31 +299,6 @@
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v14@DESERT">
<sequence name="idle" start="0" length="1" src="v23" />
<sequence name="damaged-idle" start="1" length="1" src="v23" />
<sequence name="critical-idle" start="2" length="1" src="v23" />
</unit>
<unit name="v15@DESERT">
<sequence name="idle" start="0" length="1" src="v23" />
<sequence name="damaged-idle" start="1" length="1" src="v23" />
<sequence name="critical-idle" start="2" length="1" src="v23" />
</unit>
<unit name="v16@DESERT">
<sequence name="idle" start="0" length="1" src="v23" />
<sequence name="damaged-idle" start="1" length="1" src="v23" />
<sequence name="critical-idle" start="2" length="1" src="v23" />
</unit>
<unit name="v17@DESERT">
<sequence name="idle" start="0" length="1" src="v23" />
<sequence name="damaged-idle" start="1" length="1" src="v23" />
<sequence name="critical-idle" start="2" length="1" src="v23" />
</unit>
<unit name="v18@DESERT">
<sequence name="idle" start="0" length="1" src="v23" />
<sequence name="damaged-idle" start="1" length="1" src="v23" />
<sequence name="critical-idle" start="2" length="1" src="v23" />
</unit>
<!-- Buildings that can't be mapped from desert into tem --> <!-- Buildings that can't be mapped from desert into tem -->
<unit name="v31"> <unit name="v31">
@@ -329,34 +316,4 @@
<sequence name="damaged-idle" start="1" length="1" /> <sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" /> <sequence name="critical-idle" start="2" length="1" />
</unit> </unit>
<unit name="v31@TEMPERAT">
<sequence name="idle" start="0" length="1" src="v05" />
<sequence name="damaged-idle" start="1" length="1" src="v05" />
<sequence name="critical-idle" start="2" length="1" src="v05" />
</unit>
<unit name="v32@TEMPERAT">
<sequence name="idle" start="0" length="1" src="v05" />
<sequence name="damaged-idle" start="1" length="1" src="v05" />
<sequence name="critical-idle" start="2" length="1" src="v05" />
</unit>
<unit name="v33@TEMPERAT">
<sequence name="idle" start="0" length="1" src="v05" />
<sequence name="damaged-idle" start="1" length="1" src="v05" />
<sequence name="critical-idle" start="2" length="1" src="v05" />
</unit>
<unit name="v31@WINTER">
<sequence name="idle" start="0" length="1" src="v05" />
<sequence name="damaged-idle" start="1" length="1" src="v05" />
<sequence name="critical-idle" start="2" length="1" src="v05" />
</unit>
<unit name="v32@WINTER">
<sequence name="idle" start="0" length="1" src="v05" />
<sequence name="damaged-idle" start="1" length="1" src="v05" />
<sequence name="critical-idle" start="2" length="1" src="v05" />
</unit>
<unit name="v33@WINTER">
<sequence name="idle" start="0" length="1" src="v05" />
<sequence name="damaged-idle" start="1" length="1" src="v05" />
<sequence name="critical-idle" start="2" length="1" src="v05" />
</unit>
</sequences> </sequences>