public static void Serialize(this Path path, LevelSerializeContext context)
        {
            context.bw.WriteBoolean(path.looped);
            context.bw.Write(path.positions.Count);
            foreach (var position in path.positions)
            {
                position.Serialize(context);
            }

            context.bw.Write(path.properties.Count);
            foreach (var kvp in path.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 static Path DeserializePath(this LevelDeserializeContext context)
        {
            var path = new Path();

            path.looped = context.br.ReadBoolean();
            var positionsCount = context.br.ReadInt32();

            path.positions = new List <LevelPosition>(positionsCount);
            for (var i = 0; i < positionsCount; i++)
            {
                path.positions.Add(new LevelPosition(context));
            }

            var count = context.br.ReadInt32();

            for (var i = 0; i < count; i++)
            {
                path.properties.Add(context.br.ReadString(), context.br.ReadString());
            }

            return(path);
        }