Esempio n. 1
0
    void Start()
    {
        _flowAI = GetComponent <FlowAIHolder>().flowAI;

        proc1 = new ProcessNode();
        proc2 = new ProcessNode();
        proc3 = new ProcessNode();
        proc4 = new ProcessNode();
        proc5 = new ProcessNode();

        rand1 = new BranchNode();

        proc1.Initialize(1.0f, rand1, () => TFDebug.Log("visualizer", "proc1 finished"), "PROCESS1");
        proc2.Initialize(1.0f, proc3, () => TFDebug.Log("visualizer", "proc2 finished"), "PROCESS2");
        proc3.Initialize(1.0f, proc1, () => TFDebug.Log("visualizer", "proc3 finished"), "PROCESS3");
        proc4.Initialize(1.0f, proc5, () => TFDebug.Log("visualizer", "proc4 finished"), "PROCESS4");
        proc5.Initialize(1.0f, proc1, () => TFDebug.Log("visualizer", "proc5 finished"), "PROCESS5");

        rand1.Initialize(proc2, 1.0f, proc4, 1.0f, () =>
        {
            bool result = Random.Range(0, 2) == 0;
            TFDebug.Log("visualizer", "rand1 {0}", result.ToString());
            return(result);
        });

        rand1.summary = "RANDOM";

        _flowAI.AddNode(proc1, proc2, proc3, proc4, proc5, rand1);
        _flowAI.entryPointNode.nextNode = proc1;
        _flowAI.Entry();
    }
Esempio n. 2
0
        /// <summary>擬似的にノードを交換する. Swap two nodes for imitative.</summary>
        /// <param name="fromId"></param>
        /// <param name="toId"></param>
        public void ImitativeSwap(int fromId, int toId)
        {
            if (fromId == toId)
            {
                return;
            }

            var temp1 = _nodes.Find(item => item.localId == fromId);
            var temp2 = _nodes.Find(item => item.localId == toId);

            var from = temp1 as ProcessNode;
            var to   = temp2 as ProcessNode;

            //エラー処理
            bool isFailed = false;

            //fromが不明
            if (temp1 == null)
            {
                TFDebug.Log("FlowAIBasis", "fromノードが見つかりません");
                isFailed = true;
            }
            //toが不明
            if (temp2 == null)
            {
                TFDebug.Log("FlowAIBasis", "toノードが見つかりません");
                isFailed = true;
            }
            //交換するノードが処理ノードではない
            if (from == null || to == null)
            {
                TFDebug.Log("FlowAIBasis", "処理ノード以外をSwapすることはできません");
                isFailed = true;
            }
            //交換失敗
            if (isFailed)
            {
                TFDebug.Log("FlowAIBasis", "Swapに失敗しました");
                return;
            }

            var ft = from.Copy();
            var tt = to.Copy();

            from.Imitate(tt);
            to.Imitate(ft);


            TFDebug.Log("FlowAIBasis", "Swapping finished! from LID:{0} to LID:{1}", from.localId, to.localId);
        }
Esempio n. 3
0
 void DrawFocus()
 {
     foreach (var item in _prepares)
     {
         if (item.isFocus && item.node is ProcessNode)
         {
             TFDebug.Log("x", "LID:{0}", item.node.localId);
             var temp = GUI.color;
             GUI.color = _focusNodeTexColor;
             GUI.DrawTexture(item.rect, _focusNodeTex);
             GUI.color = temp;
         }
     }
 }
Esempio n. 4
0
        /// <summary>遷移 Transition</summary>
        /// <param name="localId">遷移先のノードID LocalID of next node</param>
        public void Transition(int localId)
        {
            var node = _nodes.FirstOrDefault(item => item.localId == localId);

            //そのIDのノードが存在しない場合
            if (node == null)
            {
                TFDebug.Log("FlowAIBasis", "[TRNS]この基盤に存在しないローカルID:{0}", localId);
                _isStopped = true;
                return;
            }

            _currentNode = node;
            _currentNode.Processing();

            //終端ノードだった場合
            if (_currentNode.GetNextNode() == null)
            {
                _isStopped = true;
                TFDebug.Log("FlowAIBasis", "[TRNS]終端ノードに到達しました ローカルID:{0}", localId);
                return;
            }
        }