add graceful handling of bogus actor types in import

This commit is contained in:
Chris Forbes
2011-02-28 22:36:23 +13:00
parent ea40cb015d
commit b878bde331

View File

@@ -364,55 +364,66 @@ namespace OpenRA.Editor
{ {
//Structures: num=owner,type,health,location,turret-facing,trigger //Structures: num=owner,type,health,location,turret-facing,trigger
//Units: num=owner,type,health,location,facing,action,trigger //Units: num=owner,type,health,location,facing,action,trigger
//Infantry: num=owner,type,health,location,subcell,action,facing,trigger //Infantry: num=owner,type,health,location,subcell,action,facing,trigger
var parts = s.Value.Split(',');
var loc = int.Parse(parts[3]); try
if (parts[0] == "") {
parts[0] = "Neutral";
var parts = s.Value.Split(',');
var loc = int.Parse(parts[3]);
if (!Players.Contains(parts[0])) if (parts[0] == "")
Players.Add(parts[0]); parts[0] = "Neutral";
var stance = ActorStance.Stance.None;
switch(parts[5]) if (!Players.Contains(parts[0]))
{ Players.Add(parts[0]);
case "Area Guard":
case "Guard": var stance = ActorStance.Stance.None;
stance = ActorStance.Stance.Guard; switch (parts[5])
break; {
case "Defend Base": case "Area Guard":
stance = ActorStance.Stance.Defend; case "Guard":
break; stance = ActorStance.Stance.Guard;
case "Hunt": break;
case "Rampage": case "Defend Base":
case "Attack Base": stance = ActorStance.Stance.Defend;
case "Attack Units": break;
case "Attack Civil.": case "Hunt":
case "Attack Tarcom": case "Rampage":
stance = ActorStance.Stance.Hunt; case "Attack Base":
break; case "Attack Units":
case "Retreat": case "Attack Civil.":
case "Return": case "Attack Tarcom":
stance = ActorStance.Stance.Retreat; stance = ActorStance.Stance.Hunt;
break; break;
// do we care about `Harvest' and `Sticky'? case "Retreat":
case "Return":
stance = ActorStance.Stance.Retreat;
break;
// do we care about `Harvest' and `Sticky'?
}
var actor = new ActorReference(parts[1].ToLowerInvariant())
{
new LocationInit(new int2(loc % MapSize, loc / MapSize)),
new OwnerInit(parts[0]),
new HealthInit(float.Parse(parts[2], NumberFormatInfo.InvariantInfo)/256),
new FacingInit((section == "INFANTRY") ? int.Parse(parts[6]) : int.Parse(parts[4])),
new ActorStanceInit(stance),
};
if (section == "INFANTRY")
actor.Add(new SubCellInit(int.Parse(parts[4])));
if (!Rules.Info.ContainsKey(parts[1].ToLowerInvariant()))
errorHandler("Ignoring unknown actor type: `{0}`".F(parts[1].ToLowerInvariant()));
else
Map.Actors.Value.Add("Actor" + ActorCount++, actor);
}
catch (Exception)
{
errorHandler("Malformed actor definition: `{0}`".F(s));
} }
var actor = new ActorReference(parts[1].ToLowerInvariant())
{
new LocationInit(new int2(loc % MapSize, loc / MapSize)),
new OwnerInit(parts[0]),
new HealthInit(float.Parse(parts[2], NumberFormatInfo.InvariantInfo)/256),
new FacingInit((section == "INFANTRY") ? int.Parse(parts[6]) : int.Parse(parts[4])),
new ActorStanceInit(stance),
};
if (section == "INFANTRY")
actor.Add(new SubCellInit(int.Parse(parts[4])));
Map.Actors.Value.Add("Actor" + ActorCount++,actor);
} }
} }