using System.Collections.Generic;
using UnityEngine;
namespace SLSFramework.General
{
///
/// 指令内容 (Command Context)
/// 包含了指令执行时可能需要的所有游戏状态信息。
/// 指令组开始执行时创建的CommandContext,会被传递给每一个子指令。
/// 在ICommand内置的CommandContext中,则包含了该指令执行时特有的信息。
///
public class CommandContext
{
public readonly Dictionary context;
public CommandContext()
{
context = new Dictionary();
}
public CommandContext((string, object)[] pairs)
{
context = new Dictionary();
foreach ((string, object) pair in pairs)
{
context[pair.Item1] = pair.Item2;
}
}
public CommandContext(Dictionary initialInfo)
{
context = new Dictionary();
foreach (var pair in initialInfo)
{
context[pair.Key] = pair.Value;
}
}
public CommandContext Clone()
{
var newContext = new CommandContext();
foreach (var pair in context)
{
newContext.context[pair.Key] = pair.Value;
}
return newContext;
}
public CommandContext Merge(CommandContext other)
{
foreach (var pair in other.context)
{
this.context[pair.Key] = pair.Value;
}
return this;
}
public T GetInfo(string key)
{
if (context.TryGetValue(key, out object value) && value is T typedValue)
{
return typedValue;
}
Debug.LogWarning($"CommandContext 中不存在键 '{key}',或其类型不匹配。返回默认值。");
return default;
}
}
}