예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }