Пример #1
0
    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);
    }
Пример #2
0
 public void AddNode(FractalNode _node, int _id)
 {
     //id = _id;
     _node.id = _id;
     //_node.Parent = this;//添加这行会报错(循环问题)
     Childs.Add(_node);
 }
Пример #3
0
 public void DeleteNode(FractalNode _node)
 {
     if (Childs.Contains(_node))
     {
         Childs.Remove(_node);
         _node = null;
     }
 }
Пример #4
0
 //设置父节点:迭代
 void SetParent(FractalNode _node)
 {
     for (var i = 0; i < _node.Childs.Count; i++)
     {
         _node.Childs[i].parent = _node;
         SetParent(_node.Childs[i]);
     }
 }
Пример #5
0
 //将该节点移动到目标节点下,并设置其序号
 public void MoveNodeTo(FractalNode _targetNode, int _index)
 {
     if (_index >= _targetNode.Childs.Count)
     {
         _targetNode.Childs.Add(this);
     }
     else
     {
         _targetNode.Childs.Insert(_index, this);
     }
 }
Пример #6
0
        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;
        }
Пример #8
0
 //根据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);
     }
 }
Пример #9
0
    //展开选中的节点:点击节点或按钮时调用
    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());
    }
Пример #10
0
        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;
        }
Пример #11
0
 public void InitRoot()
 {
     treeRoot = SerializeTool.DeSerializeFromJson <FractalNode>(savedataPath);
     SetParent(treeRoot);
 }