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); }