/// <summary> /// 预序列化部件 /// </summary> /// <param name="part"></param> /// <param name="parts"></param> /// <returns></returns> static PreserializedPart PreserializeParts(IPart part, List <PreserializedPart> parts) { if (part == null) { return(new PreserializedPart()); } PreserializedPart spart = new PreserializedPart(); var ports = part.Ports.ToArray(); var portCount = part.PortCount; spart.listIndex = parts.Count; spart.prefabID = part.PrefabID; spart.containedParts = new int[portCount]; parts.Add(spart); for (int i = 0; i < portCount; i++) { spart.containedParts[i] = -1; if (ports[i].AttachedPort != null) { var tpart = ports[i].AttachedPort.Part; spart.containedParts[i] = PreserializeParts(tpart, parts).listIndex; } } return(spart); }
/// <summary> /// 反序列化部件 /// </summary> /// <param name="part"></param> /// <param name="weapon"></param> /// <returns></returns> static MonoPart DeserializeParts(PreserializedPart part, PreserializedWeapon weapon) { if (part.containedParts == null) { return(null); } var portCount = part.containedParts.Length; var prefab = WAPrefabStore.GetPartPrefab(part.prefabID); var mPart = GameObject.Instantiate(prefab.gameObject).GetComponent <MonoPart>(); var ports = mPart.Ports.ToArray(); for (int i = 0; i < ports.Length; i++) { if (part.containedParts[i] < 0) { continue; } var index = part.containedParts[i]; // TODO: Remove Workspace dependence? Workspace.Workspace.InstallPart((MonoPort)ports[i], DeserializeParts(weapon.containedParts[index], weapon)); } return(mPart); }