public void Serialize(LevelSerializeContext context) { context.WriteAnimationSet(AnimationSet); context.bw.Write(Position); context.bw.Write(FacingLeft); context.bw.Write(parallaxX); context.bw.Write(parallaxY); context.bw.Write(animationNumber); context.bw.WriteNullableString(ambientSoundSource); if (context.Version >= 14) { context.bw.Write(tag); } if (context.Version >= 16) { context.bw.Write(properties.Count); foreach (var kvp in properties) { context.bw.Write(kvp.Key); context.bw.Write(kvp.Value ?? string.Empty); // (null value should probably be blocked by editor, but being safe...) } } }
public virtual void Serialize(LevelSerializeContext context) { context.bw.Write(position); context.bw.Write(properties.Count); foreach (var kvp in properties) { context.bw.Write(kvp.Key); context.bw.Write(kvp.Value ?? string.Empty); // (null value should probably be blocked by editor, but being safe...) } }
/// <summary>Check that an AnimationSet round-trips through serialization cleanly</summary> public void RoundTripCheck(GraphicsDevice graphicsDevice, IAssetProvider assetProvider, IAssetPathProvider assetPathProvider, bool useExternalImages) { // Serialize a first time MemoryStream firstMemoryStream = new MemoryStream(); BinaryWriter firstBinaryWriter = new BinaryWriter(firstMemoryStream); ImageWriter firstImageWriter = null; if (useExternalImages) { firstImageWriter = new ImageWriter(); this.RegisterImages(firstImageWriter, assetPathProvider); firstImageWriter.WriteOutAllImages(firstMemoryStream); } LevelSerializeContext firstSerializeContext = new LevelSerializeContext(firstBinaryWriter, firstImageWriter, assetPathProvider); Serialize(firstSerializeContext); byte[] originalData = firstMemoryStream.ToArray(); // Then deserialize that data BinaryReader br = new BinaryReader(new MemoryStream(originalData)); ImageBundle imageBundle = null; if (useExternalImages) { var helper = new SimpleTextureLoadHelper(graphicsDevice); imageBundle = new ImageBundle(); br.BaseStream.Position = imageBundle.ReadAllImages(originalData, (int)br.BaseStream.Position, helper); } LevelDeserializeContext deserializeContext = new LevelDeserializeContext(br, imageBundle, assetProvider, graphicsDevice); Level deserialized = new Level(deserializeContext); // Then serialize that deserialized data and see if it matches MemoryCompareStream secondMemoryStream = new MemoryCompareStream(originalData); BinaryWriter secondBinaryWriter = new BinaryWriter(secondMemoryStream); ImageWriter secondImageWriter = null; if (useExternalImages) { secondImageWriter = new ImageWriter(); deserialized.RegisterImages(secondImageWriter, assetPathProvider); secondImageWriter.WriteOutAllImages(secondMemoryStream); } LevelSerializeContext secondSerializeContext = new LevelSerializeContext(secondBinaryWriter, secondImageWriter, assetPathProvider); deserialized.Serialize(secondSerializeContext); // Clean-up: if (imageBundle != null) { imageBundle.Dispose(); } }
public override void Serialize(LevelSerializeContext context) { if (TargetLevel != null) { TargetLevel = TargetLevel.ToLowerInvariant(); } context.bw.WriteNullableString(TargetLevel); context.bw.WriteNullableString(targetSpawn); if (context.Version >= 18) { context.bw.Write(neverSelectAtRandom); } base.Serialize(context); }
public void Serialize(LevelSerializeContext context) { context.WriteAnimationSet(AnimationSet); context.bw.Write(Position); context.bw.Write(FacingLeft); context.bw.WriteNullableString(overrideBehaviour); context.bw.Write(includeInNavigation); // Properties { context.bw.Write(properties.Count); foreach (var kvp in properties) { context.bw.Write(kvp.Key); context.bw.Write(kvp.Value ?? string.Empty); // (null value should probably be blocked by editor, but being safe...) } } }
public virtual void Serialize(LevelSerializeContext context) { Debug.Assert(!Asserts.enabled || mask.Valid); mask.Serialize(context.bw); if (context.Version >= 15) { context.bw.Write(startY); if (context.Version < 17 && endY != beforeVersion17WorldPhysicsMaximumHeight) { context.bw.Write(endY - 1); // <- Old version had an inclusive upper bound } else { context.bw.Write(endY); } } if (!context.monitor) { regionIndex = context.nextRegionIndex++; } }
public virtual void Serialize(LevelSerializeContext context) { context.bw.WriteNullableStringNonBlank(friendlyName); context.bw.WriteNullableStringNonBlank(behaviourName); if (context.bw.WriteBoolean(levelAnimation != null)) { context.WriteAnimationSet(levelAnimation); } // Properties { context.bw.Write(properties.Count); foreach (var kvp in properties) { context.bw.Write(kvp.Key); context.bw.Write(kvp.Value ?? string.Empty); // (null value should probably be blocked by editor, but being safe...) } } // Teleporters { context.bw.Write(teleporters.Count); foreach (var teleporter in teleporters) { teleporter.Serialize(context); } } // Player Spawns { context.bw.Write(playerSpawns.Count); foreach (var item in playerSpawns) { context.bw.Write(item.Key); // string context.bw.Write(item.Value.Count); foreach (var position in item.Value) { context.bw.Write(position); } } } // Things { context.bw.Write(things.Count); foreach (var thing in things) { thing.Serialize(context); } } // Geometry { // Regions { context.bw.Write(regions.Count); foreach (var region in regions) { context.bw.Write(region.Key); context.bw.Write(region.Count()); foreach (var area in region) { area.Serialize(context); } } } // Paths { context.bw.Write(paths.Count); foreach (var kvp in paths) { context.bw.Write(kvp.Key); kvp.Value.Serialize(context); } } // Positions { context.bw.Write(positions.Count); foreach (var cluster in positions) { context.bw.Write(cluster.Key); context.bw.Write(cluster.Count()); foreach (LevelPosition levelPosition in cluster) { levelPosition.Serialize(context); } } } } // Shims { context.bw.Write(shims.Count); foreach (var shim in shims) { shim.Serialize(context); } context.bw.Write(backgroundShimsEndIndex); context.bw.Write(foregroundShimsStartIndex); context.bw.Write(animatedShimCount); } // Camera Bounds context.bw.Write(cameraBounds); if (context.Version >= 20) { context.bw.Write(isAPitLevel); } }