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