void TestRoot() { treeRoot = new FractalNode(); var child0 = new FractalNode(); var child1 = new FractalNode(); var child00 = new FractalNode(); var child01 = new FractalNode(); var child000 = new FractalNode(); var child001 = new FractalNode(); var child002 = new FractalNode(); var child10 = new FractalNode(); var child11 = new FractalNode(); var child100 = new FractalNode(); var child110 = new FractalNode(); var _step = 1; treeRoot.AddNode(child0, _step++); treeRoot.AddNode(child1, _step++); child0.AddNode(child00, _step++); child0.AddNode(child01, _step++); child00.AddNode(child000, _step++); child00.AddNode(child001, _step++); child00.AddNode(child002, _step++); child1.AddNode(child10, _step++); child1.AddNode(child11, _step++); child10.AddNode(child100, _step++); child11.AddNode(child110, _step++); SerializeTool.SerializeToJson(treeRoot, savedataPath); }
public void AddNode(FractalNode _node, int _id) { //id = _id; _node.id = _id; //_node.Parent = this;//添加这行会报错(循环问题) Childs.Add(_node); }
public void DeleteNode(FractalNode _node) { if (Childs.Contains(_node)) { Childs.Remove(_node); _node = null; } }
//设置父节点:迭代 void SetParent(FractalNode _node) { for (var i = 0; i < _node.Childs.Count; i++) { _node.Childs[i].parent = _node; SetParent(_node.Childs[i]); } }
//将该节点移动到目标节点下,并设置其序号 public void MoveNodeTo(FractalNode _targetNode, int _index) { if (_index >= _targetNode.Childs.Count) { _targetNode.Childs.Add(this); } else { _targetNode.Childs.Insert(_index, this); } }
public NodeViewModel Build(int seed, FractalNode type) { var random = new Random(seed); var modelManager = ModelManager.Instance; var dataGeneratorSeed = random.Next(1, int.MaxValue); var nodeViewModel = new NodeViewModel { Title = modelManager.ProcessDataGeneratorSymbols(dataGeneratorSeed, type.Title), Name = modelManager.ProcessDataGeneratorSymbols(dataGeneratorSeed, type.Name), Text = modelManager.ProcessDataGeneratorSymbols(dataGeneratorSeed, type.Text), Seed = seed, Type = type.Type, }; if (type.ChoiceNodes != null) { foreach (var choiceNode in type.PickChoiceNodes(random.Next(1, int.MaxValue))) { nodeViewModel.ChildNodes.Add(modelManager.BuildNodeViewModelStub(random.Next(1, int.MaxValue), choiceNode)); } } if (type.Nodes == null) return nodeViewModel; foreach (var weightedNode in type.Nodes) { if(random.Next(0,100) <= weightedNode.PercentageChance) { var count = random.Next(weightedNode.MinAmount, weightedNode.MaxAmount); while( count > 0) { if( nodeViewModel.ChildNodes == null) nodeViewModel.ChildNodes = new List<NodeViewModel>(); nodeViewModel.ChildNodes.Add(modelManager.BuildNodeViewModelStub(random.Next(1,int.MaxValue),weightedNode.Type)); count--; } } } return nodeViewModel; }
public NodeInformationViewModel Build(int seed, FractalNode type) { var random = new Random(seed); var modelManager = ModelManager.Instance; var dataGeneratorSeed = random.Next(1, int.MaxValue); var nodeInformationViewModel = new NodeInformationViewModel { Title = modelManager.ProcessDataGeneratorSymbols(dataGeneratorSeed, type.SidebarTitle), Text = modelManager.ProcessDataGeneratorSymbols(dataGeneratorSeed, type.SidebarText), Link = modelManager.ProcessDataGeneratorSymbols(dataGeneratorSeed, type.SidebarUrl), Seed = seed, Type = type.Type, }; return nodeInformationViewModel; }
//根据id找到指定的节点 public FractalNode SearchNode(FractalNode _node, int _id) { if (_node.id == _id) { return(_node); } else { for (var i = 0; i < _node.Childs.Count; i++) { FractalNode _temp = SearchNode(_node.Childs[i], _id); if (_temp != null) { return(_temp); } } return(null); } }
//展开选中的节点:点击节点或按钮时调用 public void ShowNode(int _id) { FractalNode _node = SearchNode(treeRoot, _id); if (_node == null) { return; } FractalObj _obj; Transform _parent = _node.parent != null?nodes[_node.parent.id]?.transform:null;// if (nodes.ContainsKey(_id)) { _obj = nodes[_id]; } else { _obj = ((GameObject)Instantiate(Resources.Load(nodePrefabPath))).GetComponentInChildren <FractalObj>(); _obj.id = _id; _obj.Trans.SetParent(_parent); _obj.name = "FractalObj" + _id; _obj.Trans.localPosition = Vector3.zero; nodes.Add(_id, _obj); } for (var i = 0; i < _node.Childs.Count; i++) { if (!nodes.ContainsKey(_node.Childs[i].id)) { var _com = ((GameObject)Instantiate(Resources.Load(nodePrefabPath))).GetComponentInChildren <FractalObj>(); _com.id = _node.Childs[i].id; _com.Trans.SetParent(_obj.transform); _com.Trans.localPosition = Vector3.zero; _com.name = "FractalObj" + _com.id; _obj.Childs.Add(_com); nodes.Add(_node.Childs[i].id, _com); } } StartCoroutine(_obj.IE_Spreading()); }
public NodeViewModel BuildStub(int seed, FractalNode type) { var random = new Random(seed); var modelManager = ModelManager.Instance; var dataGeneratorSeed = random.Next(1, int.MaxValue); var nodeViewModel = new NodeViewModel { Title = modelManager.ProcessDataGeneratorSymbols(dataGeneratorSeed, type.Title), Seed = seed, Type = type.Type, }; if( string.IsNullOrEmpty(type.Name) && string.IsNullOrEmpty(type.Text) && type.Nodes == null && type.ChoiceNodes == null) { nodeViewModel.EmptyNode = true; } return nodeViewModel; }
public void InitRoot() { treeRoot = SerializeTool.DeSerializeFromJson <FractalNode>(savedataPath); SetParent(treeRoot); }