// can be overridden for testing
            protected void Initialize()
            {
                Modifiers = new List<NetworkSkinModifier>();
                Errors = new NetworkSkinLoadErrors();

                PrefabCollection = new GamePrefabCollection();
                NetManager = new GameNetManager();
            }
 public static List<NetworkSkinModifier> Deserialize(byte[] data, out NetworkSkinLoadErrors errors)
 {
     using (var stream = new MemoryStream(data))
     {
         var dataContainer = DataSerializer.Deserialize<Data>(stream, DataSerializer.Mode.Memory, NetworkSkinsMod.ResolveSerializedType);
         errors = dataContainer.Errors;
         return dataContainer.Modifiers;
     }
 }
        public void Deserialize(DataSerializer s)
        {
            Initialize();

            Errors = new NetworkSkinLoadErrors();

            var appliedSkinsLength = s.ReadInt32();

            AppliedSkins.Clear();
            for (var i = 0; i < appliedSkinsLength; i++)
            {
                AppliedSkins.Add(NetworkSkin.Deserialize(s, PrefabCollection, Errors));
            }

            var segmentSkinsLength = s.ReadInt32();

            for (var i = 0; i < segmentSkinsLength; i++)
            {
                var skinIndex = s.ReadUInt16();
                if (SegmentSkins.Length > i)
                {
                    SegmentSkins[i] = AppliedSkinForIndex(skinIndex);
                }
            }

            var nodeSkinsLength = s.ReadInt32();

            for (var i = 0; i < nodeSkinsLength; i++)
            {
                var skinIndex = s.ReadUInt16();
                if (NodeSkins.Length > i)
                {
                    NodeSkins[i] = AppliedSkinForIndex(skinIndex);
                }
            }
        }