예제 #1
0
        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...)
                }
            }
        }
예제 #2
0
 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...)
     }
 }
예제 #3
0
        /// <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();
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
        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...)
                }
            }
        }
예제 #6
0
파일: Region.cs 프로젝트: zcxxv1213/Pixel3D
        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++;
            }
        }
예제 #7
0
        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);
            }
        }