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