Theater specific artwork done properly
This commit is contained in:
@@ -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];
|
||||
|
||||
@@ -78,23 +78,16 @@ namespace OpenRA.Graphics
|
||||
|
||||
public static Sequence GetSequence(string unitName, string sequenceName)
|
||||
{
|
||||
try { return units[unitName+"@"+currentTheater][sequenceName]; }
|
||||
try { return units[unitName][sequenceName]; }
|
||||
catch (KeyNotFoundException)
|
||||
{
|
||||
try { return units[unitName][sequenceName]; }
|
||||
catch (KeyNotFoundException)
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"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)
|
||||
{
|
||||
if (units.ContainsKey(unit+"@"+currentTheater))
|
||||
return units[unit+"@"+currentTheater].ContainsKey(seq);
|
||||
|
||||
return units[unit].ContainsKey(seq);
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -106,6 +106,15 @@
|
||||
Valued:
|
||||
Description: Civilian Building
|
||||
|
||||
^CivField:
|
||||
Inherits: ^CivBuilding
|
||||
-Selectable:
|
||||
Valued:
|
||||
Description: Field
|
||||
RenderBuilding:
|
||||
OverrideTheater: DESERT
|
||||
OverrideImage: v23
|
||||
|
||||
^Wall:
|
||||
Category: Building
|
||||
Building:
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user