WX-Game1/Assets/MotionFramework/Scripts/Runtime/Engine/Engine.AI/FSM/FsmGraph.cs

65 lines
1.5 KiB
C#

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