public static RTSBuildingData Deserialize(BinaryReader s, GameState state, int index)
{
RTSBuildingData data = new RTSBuildingData(index);
data.FriendlyName = s.ReadString();
data.InfoFile = s.ReadString();
data.Health = s.ReadInt32();
data.CapitalCost = s.ReadInt32();
data.PopCapChange = s.ReadInt32();
data.MaxCount = s.ReadInt32();
data.IsResource = s.ReadBoolean();
data.Impact = s.ReadInt32();
data.BuildAmount = s.ReadInt32();
data.Depositable = s.ReadBoolean();
data.SightRadius = s.ReadInt32();
data.GridSize = s.ReadPoint();
CollisionType ct = (CollisionType)s.ReadInt32();
Vector2 cc = s.ReadVector2();
bool cs = s.ReadBoolean();
switch(ct) {
case CollisionType.Circle:
float cr = s.ReadSingle();
data.ICollidableShape = new CollisionCircle(cr, cc, cs);
break;
case CollisionType.Rectangle:
float cw = s.ReadSingle();
float cd = s.ReadSingle();
data.ICollidableShape = new CollisionRect(cw, cd, cc, cs);
break;
default:
throw new Exception("Nonexistent Collision Type");
}
data.BBox.Min = s.ReadVector3();
data.BBox.Max = s.ReadVector3();
data.DefaultActionController = state.Scripts[s.ReadString()];
return data;
}