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
{
var info = Rules.Info[a];
var template = RenderActor(info, tileset.TileSuffix, palette);
var template = RenderActor(info, tileset, palette);
var ibox = new PictureBox
{
Image = template.Bitmap,
@@ -241,10 +241,17 @@ namespace OpenRA.Editor
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;
using (var s = FileSystem.OpenWithExts(image, "." + ext, ".shp"))
var ri = info.Traits.Get<RenderSimpleInfo>();
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 frame = shp[0];

View File

@@ -77,9 +77,6 @@ namespace OpenRA.Graphics
}
public static Sequence GetSequence(string unitName, string sequenceName)
{
try { return units[unitName+"@"+currentTheater][sequenceName]; }
catch (KeyNotFoundException)
{
try { return units[unitName][sequenceName]; }
catch (KeyNotFoundException)
@@ -88,13 +85,9 @@ namespace OpenRA.Graphics
"Unit `{0}` does not have a sequence `{1}`".F(unitName, sequenceName));
}
}
}
public static bool HasSequence(string unit, string seq)
{
if (units.ContainsKey(unit+"@"+currentTheater))
return units[unit+"@"+currentTheater].ContainsKey(seq);
return units[unit].ContainsKey(seq);
}

View File

@@ -27,6 +27,8 @@ namespace OpenRA.Traits
public abstract class RenderSimpleInfo : ITraitInfo
{
public readonly string Image = null;
public readonly string[] OverrideTheater = null;
public readonly string[] OverrideImage = null;
public readonly string Palette = null;
public abstract object Create(ActorInitializer init);
}
@@ -36,9 +38,19 @@ namespace OpenRA.Traits
public Dictionary<string, AnimationWithOffset> anims = new Dictionary<string, AnimationWithOffset>();
public Animation anim { get { return anims[""].Animation; } protected set { anims[""].Animation = value; } }
string cachedImage = null;
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)

View File

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

View File

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

View File

@@ -135,130 +135,142 @@
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v01@DESERT">
<sequence name="idle" start="0" length="1" src="v25" />
<sequence name="damaged-idle" start="1" length="1" src="v25" />
<sequence name="critical-idle" start="2" length="1" src="v25" />
<unit name="v25">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v02">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v02@DESERT">
<sequence name="idle" start="0" length="1" src="v20" />
<sequence name="damaged-idle" start="1" length="1" src="v20" />
<sequence name="critical-idle" start="2" length="1" src="v20" />
<unit name="v20">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v03">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v03@DESERT">
<sequence name="idle" start="0" length="3" src="v21" />
<sequence name="damaged-idle" start="3" length="3" src="v21" />
<sequence name="critical-idle" start="6" length="1" src="v21" />
<unit name="v21">
<sequence name="idle" start="0" length="3" />
<sequence name="damaged-idle" start="3" length="3" />
<sequence name="critical-idle" start="6" length="1" />
</unit>
<unit name="v04">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v04@DESERT">
<sequence name="idle" start="0" length="1" src="v24" />
<sequence name="damaged-idle" start="1" length="1" src="v24" />
<sequence name="critical-idle" start="2" length="1" src="v24" />
<unit name="v24">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v05">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v05@DESERT">
<sequence name="idle" start="0" length="3" src="v22" />
<sequence name="damaged-idle" start="3" length="3" src="v22" />
<sequence name="critical-idle" start="6" length="1" src="v22" />
<unit name="v22">
<sequence name="idle" start="0" length="3" />
<sequence name="damaged-idle" start="3" length="3" />
<sequence name="critical-idle" start="6" length="1" />
</unit>
<unit name="v06">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v06@DESERT">
<sequence name="idle" start="0" length="1" src="v26" />
<sequence name="damaged-idle" start="1" length="1" src="v26" />
<sequence name="critical-idle" start="2" length="1" src="v26" />
<unit name="v26">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v07">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="2" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v07@DESERT">
<sequence name="idle" start="0" length="1" src="v30" />
<sequence name="damaged-idle" start="2" length="1" src="v30" />
<sequence name="critical-idle" start="2" length="1" src="v30" />
<unit name="v30">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="2" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v08">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v08@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 name="v23">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v09">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v09@DESERT">
<sequence name="idle" start="0" length="1" src="v27" />
<sequence name="damaged-idle" start="1" length="1" src="v27" />
<sequence name="critical-idle" start="2" length="1" src="v27" />
<unit name="v27">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v10">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v10@DESERT">
<sequence name="idle" start="0" length="1" src="v28" />
<sequence name="damaged-idle" start="1" length="1" src="v28" />
<sequence name="critical-idle" start="2" length="1" src="v28" />
<unit name="v28">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v11">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v11@DESERT">
<sequence name="idle" start="0" length="1" src="v29" />
<sequence name="damaged-idle" start="1" length="1" src="v29" />
<sequence name="critical-idle" start="2" length="1" src="v29" />
<unit name="v29">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v12">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v12@DESERT">
<sequence name="idle" start="0" length="1" src="v34" />
<sequence name="damaged-idle" start="1" length="1" src="v34" />
<sequence name="critical-idle" start="2" length="1" src="v34" />
<unit name="v34">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v13">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<unit name="v13@DESERT">
<sequence name="idle" start="0" length="1" src="v35" />
<sequence name="damaged-idle" start="1" length="1" src="v35" />
<sequence name="critical-idle" start="2" length="1" src="v35" />
<unit name="v35">
<sequence name="idle" start="0" length="1" />
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</unit>
<!-- 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="critical-idle" start="2" length="1" />
</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 -->
<unit name="v31">
@@ -329,34 +316,4 @@
<sequence name="damaged-idle" start="1" length="1" />
<sequence name="critical-idle" start="2" length="1" />
</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>