Beispiel #1
0
        public static RagdollPresetMetadata Deserialize(byte[] data)
        {
            NetStream netStream = NetStream.AllocStream(data);

            try
            {
                string text = netStream.ReadString();
                RagdollPresetMetadata ragdollPresetMetadata = JsonUtility.FromJson <RagdollPresetMetadata>(text);
                if (ragdollPresetMetadata == null)
                {
                    Debug.LogErrorFormat("Unable to deserialize metadata {0}", text);
                    return(null);
                }
                ragdollPresetMetadata.folder     = null;
                ragdollPresetMetadata.serialized = data;
                ragdollPresetMetadata.DeserializePart(WorkshopItemType.ModelFull, netStream);
                ragdollPresetMetadata.DeserializePart(WorkshopItemType.ModelHead, netStream);
                ragdollPresetMetadata.DeserializePart(WorkshopItemType.ModelUpperBody, netStream);
                ragdollPresetMetadata.DeserializePart(WorkshopItemType.ModelLowerBody, netStream);
                return(ragdollPresetMetadata);
            }
            finally
            {
                if (netStream != null)
                {
                    netStream = netStream.Release();
                }
            }
        }
        internal void ApplyPreset(RagdollPresetMetadata preset, bool forceRebuild = false)
        {
            if (!forceRebuild && this.preset != null && preset != null && this.preset.folder != preset.folder)
            {
                forceRebuild = true;
            }
            this.preset = preset;
            bool flag = false;

            if (!forceRebuild)
            {
                string a = (!(main != null) || main.meta == null || main.meta.folder == null) ? string.Empty : main.meta.folder;
                string b = (preset == null || preset.main == null || preset.main.modelPath == null) ? string.Empty : preset.main.modelPath;
                flag = (a != b);
            }
            bool flag2 = RebindMain(preset, forceRebuild);
            bool flag3 = RebindHead(preset, forceRebuild);
            bool flag4 = RebindUpper(preset, forceRebuild);
            bool flag5 = RebindLower(preset, forceRebuild);
            List <RigClipVolume> clipVolumes = GetClipVolumes(forceRebuild);

            if (!forceRebuild)
            {
                bool flag6 = flag || cachedClipVolumes.Count != clipVolumes.Count;
                if (!flag6)
                {
                    for (int i = 0; i < cachedClipVolumes.Count; i++)
                    {
                        flag6 |= (cachedClipVolumes[i] != clipVolumes[i]);
                    }
                }
                if (flag6)
                {
                    forceRebuild = true;
                    if (!flag2)
                    {
                        flag2 = RebindMain(preset, forceRebuild);
                    }
                }
            }
            if (forceRebuild && main != null)
            {
                RagdollModelSkinnedMesh[] componentsInChildren = main.GetComponentsInChildren <RagdollModelSkinnedMesh>();
                RigClipVolume[]           clipVolumes2         = clipVolumes.ToArray();
                cachedClipVolumes = clipVolumes;
                for (int j = 0; j < componentsInChildren.Length; j++)
                {
                    componentsInChildren[j].Clip(clipVolumes2);
                }
            }
            else if (main == null)
            {
                cachedClipVolumes.Clear();
            }
        }
 private bool RebindLower(RagdollPresetMetadata preset, bool forceRebuild)
 {
     if (lower != null && (forceRebuild || !allowLower || preset == null || preset.lowerBody == null || preset.lowerBody.modelPath != lower.meta.folder))
     {
         lower.Unbind(ragdoll);
         UnityEngine.Object.DestroyImmediate(lower.gameObject);
         lower = null;
     }
     if (lower == null && allowLower && preset != null && preset.lowerBody != null)
     {
         RagdollModelMetadata item = WorkshopRepository.instance.GetPartRepository(WorkshopItemType.ModelLowerBody).GetItem(preset.lowerBody.modelPath);
         if (item != null)
         {
             lower = BindToSkin(item);
             return(true);
         }
     }
     return(false);
 }
 private bool RebindHead(RagdollPresetMetadata preset, bool forceRebuild)
 {
     if (head != null && (forceRebuild || !allowHead || preset == null || preset.head == null || preset.head.modelPath != head.meta.folder))
     {
         head.Unbind(ragdoll);
         UnityEngine.Object.DestroyImmediate(head.gameObject);
         head = null;
     }
     if (head == null && allowHead && preset != null && preset.head != null)
     {
         RagdollModelMetadata item = WorkshopRepository.instance.GetPartRepository(WorkshopItemType.ModelHead).GetItem(preset.head.modelPath);
         if (item != null)
         {
             head = BindToSkin(item);
             return(true);
         }
     }
     return(false);
 }
 private bool RebindMain(RagdollPresetMetadata preset, bool forceRebuild)
 {
     if (main != null && (forceRebuild || preset == null || preset.main == null || main.meta.folder != preset.main.modelPath))
     {
         main.Unbind(ragdoll);
         UnityEngine.Object.DestroyImmediate(main.gameObject);
         main = null;
     }
     if (main == null && preset != null && preset.main != null)
     {
         RagdollModelMetadata item = WorkshopRepository.instance.GetPartRepository(WorkshopItemType.ModelFull).GetItem(preset.main.modelPath);
         if (item != null)
         {
             main = BindToSkin(item);
             return(true);
         }
     }
     return(false);
 }