public static Shim DeserializeShim(this LevelDeserializeContext context) { var animationSet = context.ReadAnimationSet(); var position = context.br.ReadPosition(); var facingLeft = context.br.ReadBoolean(); var parallaxX = context.br.ReadSingle(); var parallaxY = context.br.ReadSingle(); var shim = new Shim(animationSet, position, facingLeft, parallaxX, parallaxY); shim.animationNumber = context.br.ReadInt32(); shim.ambientSoundSource = context.br.ReadNullableString(); if (context.Version >= 14) { shim.tag = context.br.ReadInt32(); } if (context.Version >= 16) { int count = context.br.ReadInt32(); for (int i = 0; i < count; i++) { shim.properties.Add(context.br.ReadString(), context.br.ReadString()); } } return(shim); }
/// <summary>Deserialize into new object instance</summary> public static Thing DeserializeThing(this LevelDeserializeContext context) { var animationSet = context.ReadAnimationSet(); var position = context.br.ReadPosition(); var facingLeft = context.br.ReadBoolean(); var thing = new Thing(animationSet, position, facingLeft); thing.overrideBehaviour = context.br.ReadNullableString(); thing.includeInNavigation = context.br.ReadBoolean(); // Properties: int count = context.br.ReadInt32(); for (int i = 0; i < count; i++) { thing.properties.Add(context.br.ReadString(), context.br.ReadString()); } return(thing); }
private void Deserialize(LevelDeserializeContext context) { friendlyName = context.br.ReadNullableString(); behaviourName = context.br.ReadNullableString(); if (context.br.ReadBoolean()) { levelAnimation = context.ReadAnimationSet(); } // Properties { int count = context.br.ReadInt32(); for (int i = 0; i < count; i++) { properties.Add(context.br.ReadString(), context.br.ReadString()); } } // Teleporters { int teleportersCount = context.br.ReadInt32(); teleporters = new List <Teleporter>(teleportersCount); for (int i = 0; i < teleportersCount; i++) { teleporters.Add(new Teleporter(context)); } } // Player Spawns { int playerSpawnsCount = context.br.ReadInt32(); playerSpawns = new OrderedDictionary <string, List <Position> >(playerSpawnsCount); for (int i = 0; i < playerSpawnsCount; i++) { string name = context.br.ReadString(); int positionsCount = context.br.ReadInt32(); List <Position> positions = new List <Position>(positionsCount); for (int j = 0; j < positionsCount; j++) { positions.Add(context.br.ReadPosition()); } playerSpawns.Add(name, positions); } } // Things { int thingsCount = context.br.ReadInt32(); things = new List <Thing>(thingsCount); for (int i = 0; i < thingsCount; i++) { things.Add(new Thing(context)); } } // Geometry { // Regions { int count = context.br.ReadInt32(); regions = new MultiDictionary <string, Region>(); for (int i = 0; i < count; i++) { var regionKey = context.br.ReadString(); var areaCount = context.br.ReadInt32(); for (var j = 0; j < areaCount; j++) { regions.Add(regionKey, new Region(context)); } } } // Paths { int count = context.br.ReadInt32(); paths = new OrderedDictionary <string, Path>(count); for (int i = 0; i < count; i++) { paths.Add(context.br.ReadString(), new Path(context)); } } // Positions { int count = context.br.ReadInt32(); positions = new MultiDictionary <string, LevelPosition>(); for (int i = 0; i < count; i++) { var positionKey = context.br.ReadString(); var pointCount = context.br.ReadInt32(); for (var j = 0; j < pointCount; j++) { positions.Add(positionKey, new LevelPosition(context)); } } } } // Shims { int count = context.br.ReadInt32(); shims = new List <Shim>(count); for (int i = 0; i < count; i++) { shims.Add(new Shim(context)); } backgroundShimsEndIndex = context.br.ReadSByte(); foregroundShimsStartIndex = context.br.ReadSByte(); animatedShimCount = context.br.ReadByte(); } // Camera Bounds cameraBounds = context.br.ReadRectangle(); if (context.Version >= 20) { isAPitLevel = context.br.ReadBoolean(); } }
public static Level DeserializeLevel(this LevelDeserializeContext context, Level level) { level.friendlyName = context.br.ReadNullableString(); level.behaviourName = context.br.ReadNullableString(); if (context.br.ReadBoolean()) { level.levelAnimation = context.ReadAnimationSet(); } // Properties { int count = context.br.ReadInt32(); for (int i = 0; i < count; i++) { level.properties.Add(context.br.ReadString(), context.br.ReadString()); } } // Teleporters { int teleportersCount = context.br.ReadInt32(); level.teleporters = new List <Teleporter>(teleportersCount); for (int i = 0; i < teleportersCount; i++) { level.teleporters.Add(context.DeserializeTeleporter()); } } // Player Spawns { int playerSpawnsCount = context.br.ReadInt32(); level.playerSpawns = new OrderedDictionary <string, List <Position> >(playerSpawnsCount); for (int i = 0; i < playerSpawnsCount; i++) { string name = context.br.ReadString(); int positionsCount = context.br.ReadInt32(); List <Position> positions = new List <Position>(positionsCount); for (int j = 0; j < positionsCount; j++) { positions.Add(context.br.ReadPosition()); } level.playerSpawns.Add(name, positions); } } // Things { int thingsCount = context.br.ReadInt32(); level.things = new List <Thing>(thingsCount); for (int i = 0; i < thingsCount; i++) { level.things.Add(context.DeserializeThing()); } } // Geometry { // Regions { int count = context.br.ReadInt32(); level.regions = new MultiDictionary <string, Region>(); for (int i = 0; i < count; i++) { var regionKey = context.br.ReadString(); var areaCount = context.br.ReadInt32(); for (var j = 0; j < areaCount; j++) { level.regions.Add(regionKey, context.DeserializeRegion()); } } } // Paths { int count = context.br.ReadInt32(); level.paths = new OrderedDictionary <string, Path>(count); for (int i = 0; i < count; i++) { level.paths.Add(context.br.ReadString(), context.DeserializePath()); } } // Positions { int count = context.br.ReadInt32(); level.positions = new MultiDictionary <string, LevelPosition>(); for (int i = 0; i < count; i++) { var positionKey = context.br.ReadString(); var pointCount = context.br.ReadInt32(); for (var j = 0; j < pointCount; j++) { level.positions.Add(positionKey, new LevelPosition(context)); } } } } // Shims { int count = context.br.ReadInt32(); level.shims = new List <Shim>(count); for (int i = 0; i < count; i++) { level.shims.Add(context.DeserializeShim()); } level.backgroundShimsEndIndex = context.br.ReadSByte(); level.foregroundShimsStartIndex = context.br.ReadSByte(); level.animatedShimCount = context.br.ReadByte(); } // Camera Bounds level.cameraBounds = context.br.ReadRectangle(); if (context.Version >= 20) { level.isAPitLevel = context.br.ReadBoolean(); } return(level); }