Example #1
0
 public static void SetContent(NodeModifier node, NodeContent content)
 {
     node.RemoveFromContent();
     node.DeleteParent();
     node.SetContent(content);
 }
Example #2
0
        protected override void OnLoaded(BinaryReader r)
        {
            //清空当前容器节点,避免被重复添加
            _contenNodeList.Clear();

            base.OnLoaded(r);
            bool running = r.ReadBoolean();

            //恢复初始节点
            int count = r.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                string       fullName = r.ReadString();
                NodeModifier node     = ReflectionHelper.CreateInstance <NodeModifier>(fullName);
                if (node == null)
                {
                    node = ReflectionHelper.CreateInstance <NodeModifier>("CryStory.Runtime.MissingNode");
                    //It's mission
                    //return;
                }
                node.SetContent(this);
                node.Deserialize(r);
                NodeModifier.SetContent(node, this);
            }

            if (running)
            {
                //恢复运行节点(以ID为主)
                count = r.ReadInt32();
                List <NodeModifier> runningNode = new List <NodeModifier>();
                for (int i = 0; i < count; i++)
                {
                    for (int j = 0; j < _contenNodeList.Count; j++)
                    {
                        NodeModifier node = _contenNodeList[j].GetNextNodeByID(r.ReadInt32());
                        if (node != null)
                        {
                            runningNode.Add(node);
                            break;
                        }
                    }
                }

                //装填缓存节点
                _tempNodeList = _contenNodeList.ToArray();

                //移除初始节点
                for (int i = 0; i < _tempNodeList.Length; i++)
                {
                    RemoveContenNode(_tempNodeList[i]);
                }

                //重新加入已运行节点
                for (int i = 0; i < runningNode.Count; i++)
                {
                    AddContentNode(runningNode[i]);
                }
            }

            if (OnNodeLoaded != null)
            {
                OnNodeLoaded.Invoke(this);
            }
        }
Example #3
0
 public static void SetContent(NodeModifier node, NodeContent content)
 {
     node.RemoveFromContent();
     node.DeleteParent();
     node.SetContent(content);
 }
Example #4
0
        public void Load()
        {
            if (_SaveData.Length > 0)
            {
                using (MemoryStream ms = new MemoryStream(_SaveData))
                {
                    using (BinaryReader r = new BinaryReader(ms))
                    {
                        float ver = r.ReadSingle();
                        if (ver != Story.SaveVersion)
                        {
                            Debug.LogError("Error:Archive data version not same! Curent: " + Story.SaveVersion + " Data: " + ver);
                        }

                        string storyData = r.ReadString();
                        _story = JsonUtility.FromJson <Story>(storyData);
                        _story.LoadOnlyThisNode(r);
                    }
                }
            }

            if (_story == null)
            {
                _story = new Story();
            }

            for (int i = 0; i < _missionSaveList.Count; i++)
            {
                MissionData data = _missionSaveList[i];
                if (!data.MissionObject)
                {
                    Debug.Log("Mission Not Found: " + data.Name);
                    continue;
                }

                data.MissionObject.Load();
                data.MissionObject._mission._name = data.Name;

                NodeModifier.SetContent(data.MissionObject._mission, _story);
            }

            //设置已连接的节点
            for (int i = 0; i < _missionSaveList.Count; i++)
            {
                MissionData data = _missionSaveList[i];
                if (!data.MissionObject)
                {
                    continue;
                }
                if (data.MissionObject._nextMissionNodeList.Count > 0)
                {
                    foreach (var item in data.MissionObject._nextMissionNodeList)
                    {
                        MissionData next = GetMissionSaveDataByName(item.Name);
                        if (next == null)
                        {
                            continue;
                        }
                        if (next.MissionObject == null)
                        {
                            continue;
                        }
                        if (item.IsSingleNode)
                        {
                            data.MissionObject._mission.AddNextNode(next.MissionObject._mission);
                        }
                        else
                        {
                            Mission.SetParent(next.MissionObject._mission, data.MissionObject._mission);
                        }
                    }
                }
            }
        }