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(); }
/// <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); }
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; } } }
/// <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; } }