Add CommandBuilder existing commands function
This commit is contained in:
parent
e3b3fd5ef4
commit
211c9c9c31
5 changed files with 116 additions and 0 deletions
|
@ -19,6 +19,8 @@ namespace GamecraftModdingAPI.Commands
|
||||||
|
|
||||||
private ICustomCommandEngine commandEngine;
|
private ICustomCommandEngine commandEngine;
|
||||||
|
|
||||||
|
private bool fromExisting = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create a new command builder.
|
/// Create a new command builder.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -138,6 +140,96 @@ namespace GamecraftModdingAPI.Commands
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Build the command from an existing command.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The command. Use Invoke() to execute it.</returns>
|
||||||
|
public SimpleCustomCommandEngine FromExisting()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(name))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Command name must be defined before FromExisting() is called");
|
||||||
|
}
|
||||||
|
if (!ExistingCommands.Exists(name))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Command cannot be built from existing because it does not exist.");
|
||||||
|
}
|
||||||
|
fromExisting = true;
|
||||||
|
return new SimpleCustomCommandEngine(
|
||||||
|
() => { ExistingCommands.Call(name); },
|
||||||
|
name,
|
||||||
|
description);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Build the command from an existing command.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The command. Use Invoke() to execute it.</returns>
|
||||||
|
/// <typeparam name="A">The 1st parameter's type.</typeparam>
|
||||||
|
public SimpleCustomCommandEngine<A> FromExisting<A>()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(name))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Command name must be defined before FromExisting() is called");
|
||||||
|
}
|
||||||
|
if (!ExistingCommands.Exists(name))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Command cannot be built from existing because it does not exist.");
|
||||||
|
}
|
||||||
|
fromExisting = true;
|
||||||
|
return new SimpleCustomCommandEngine<A>(
|
||||||
|
(A a) => { ExistingCommands.Call<A>(name, a); },
|
||||||
|
name,
|
||||||
|
description);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Build the command from an existing command.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The command. Use Invoke() to execute it.</returns>
|
||||||
|
/// <typeparam name="A">The 1st parameter's type.</typeparam>
|
||||||
|
/// <typeparam name="B">The 2nd parameter's type.</typeparam>
|
||||||
|
public SimpleCustomCommandEngine<A,B> FromExisting<A,B>()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(name))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Command name must be defined before FromExisting() is called");
|
||||||
|
}
|
||||||
|
if (!ExistingCommands.Exists(name))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Command cannot be built from existing because it does not exist.");
|
||||||
|
}
|
||||||
|
fromExisting = true;
|
||||||
|
return new SimpleCustomCommandEngine<A,B>(
|
||||||
|
(A a, B b) => { ExistingCommands.Call<A,B>(name, a, b); },
|
||||||
|
name,
|
||||||
|
description);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Build the command from an existing command.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>The command. Use Invoke() to execute it.</returns>
|
||||||
|
/// <typeparam name="A">The 1st parameter's type.</typeparam>
|
||||||
|
/// <typeparam name="B">The 2nd parameter's type.</typeparam>
|
||||||
|
/// <typeparam name="C">The 3rd parameter's type.</typeparam>
|
||||||
|
public SimpleCustomCommandEngine<A,B,C> FromExisting<A,B,C>()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(name))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Command name must be defined before FromExisting() is called");
|
||||||
|
}
|
||||||
|
if (!ExistingCommands.Exists(name))
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Command cannot be built from existing because it does not exist.");
|
||||||
|
}
|
||||||
|
fromExisting = true;
|
||||||
|
return new SimpleCustomCommandEngine<A,B,C>(
|
||||||
|
(A a, B b, C c) => { ExistingCommands.Call<A,B,C>(name, a, b, c); },
|
||||||
|
name,
|
||||||
|
description);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Build the command.
|
/// Build the command.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -149,6 +241,10 @@ namespace GamecraftModdingAPI.Commands
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Command name must be defined before Build() is called");
|
throw new InvalidOperationException("Command name must be defined before Build() is called");
|
||||||
}
|
}
|
||||||
|
if (fromExisting)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Command was already built by FromExisting()");
|
||||||
|
}
|
||||||
if (commandEngine == null)
|
if (commandEngine == null)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException("Command action must be defined before Build() is called");
|
throw new InvalidOperationException("Command action must be defined before Build() is called");
|
||||||
|
|
|
@ -57,5 +57,10 @@ namespace GamecraftModdingAPI.Commands
|
||||||
this.Name = name;
|
this.Name = name;
|
||||||
this.Description = description;
|
this.Description = description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Invoke()
|
||||||
|
{
|
||||||
|
runCommand();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,11 @@ namespace GamecraftModdingAPI.Commands
|
||||||
this.runCommand = command;
|
this.runCommand = command;
|
||||||
this.Name = name;
|
this.Name = name;
|
||||||
this.Description = description;
|
this.Description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Invoke(A a)
|
||||||
|
{
|
||||||
|
runCommand(a);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,11 @@ namespace GamecraftModdingAPI.Commands
|
||||||
this.runCommand = command;
|
this.runCommand = command;
|
||||||
this.Name = name;
|
this.Name = name;
|
||||||
this.Description = description;
|
this.Description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Invoke(A a, B b)
|
||||||
|
{
|
||||||
|
runCommand(a, b);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,11 @@ namespace GamecraftModdingAPI.Commands
|
||||||
this.runCommand = command;
|
this.runCommand = command;
|
||||||
this.Name = name;
|
this.Name = name;
|
||||||
this.Description = description;
|
this.Description = description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Invoke(A a, B b, C c)
|
||||||
|
{
|
||||||
|
runCommand(a, b, c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue