//-------------------------------------------------- // Motion Framework // Copyright©2019-2020 何冠峰 // Licensed under the MIT license //-------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; namespace MotionFramework.AI { /// /// 转换关系图 /// public class FsmGraph { private readonly Dictionary> _graph = new Dictionary>(); private readonly string _globalNode; /// /// 构造函数 /// /// 全局节点不受转换关系的限制 public FsmGraph(string globalNode) { _globalNode = globalNode; } /// /// 添加转换关系 /// /// 节点名称 /// 可以转换到的节点列表 public void AddTransition(string nodeName, List transitionNodes) { if (transitionNodes == null) throw new ArgumentNullException(); if (_graph.ContainsKey(nodeName)) { MotionLog.Warning($"Graph node {nodeName} already existed."); return; } _graph.Add(nodeName, transitionNodes); } /// /// 检测转换关系 /// public bool CanTransition(string from, string to) { if (_graph.ContainsKey(from) == false) { MotionLog.Warning($"Not found graph node {from}"); return false; } if (to == _globalNode) return true; return _graph[from].Contains(to); } } }