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

@@ -365,54 +365,65 @@ 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]);
if (parts[0] == "")
parts[0] = "Neutral";
try
if (!Players.Contains(parts[0]))
Players.Add(parts[0]);
var stance = ActorStance.Stance.None;
switch(parts[5])
{ {
case "Area Guard":
case "Guard": var parts = s.Value.Split(',');
stance = ActorStance.Stance.Guard; var loc = int.Parse(parts[3]);
break; if (parts[0] == "")
case "Defend Base": parts[0] = "Neutral";
stance = ActorStance.Stance.Defend;
break;
case "Hunt": if (!Players.Contains(parts[0]))
case "Rampage": Players.Add(parts[0]);
case "Attack Base":
case "Attack Units": var stance = ActorStance.Stance.None;
case "Attack Civil.": switch (parts[5])
case "Attack Tarcom": {
stance = ActorStance.Stance.Hunt; case "Area Guard":
break; case "Guard":
case "Retreat": stance = ActorStance.Stance.Guard;
case "Return": break;
stance = ActorStance.Stance.Retreat; case "Defend Base":
break; stance = ActorStance.Stance.Defend;
// do we care about `Harvest' and `Sticky'? break;
case "Hunt":
case "Rampage":
case "Attack Base":
case "Attack Units":
case "Attack Civil.":
case "Attack Tarcom":
stance = ActorStance.Stance.Hunt;
break;
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)
var actor = new ActorReference(parts[1].ToLowerInvariant())
{ {
new LocationInit(new int2(loc % MapSize, loc / MapSize)), errorHandler("Malformed actor definition: `{0}`".F(s));
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);
} }
} }