using System;
using SlatedGameToolkit.Tools.CommandSystem.Interaction;
namespace SlatedGameToolkit.Tools.CommandSystem
{
public class CommandProcessor
{
CommandMap commandMap;
///
/// The general help is the string that is printed when the input is not understood.
/// {input} in the string is replaced with the user input.
///
///
public CommandProcessor(CommandMap commands) {
this.commandMap = commands;
}
public void Process(IInteractable interactable) {
string message = interactable.Listen().ToLower();
string[] splitMessage = message.Split(' ');
string invocation = splitMessage[0];
IInvocable invocable = commandMap[invocation];
if (invocable != null) {
string[] args = new string[splitMessage.Length - 1];
Array.Copy(splitMessage, 1, args, 0, splitMessage.Length - 1);
if (!invocable.Execute(interactable, args)) {
interactable.Tell(string.Format("The command \"{0}\" arguments were incorrect. Please refer to Please type \"help {0}\" for more information.", invocation));
}
return;
}
interactable.Tell(string.Format("The command \"{0}\" was not understood. Please type \"help\" for more information.", invocation));
}
}
}