private IConsoleCommand RegisterConsoleCommand(string name, string help, Delegate command, CommandDelegateType type, EConsoleVariableFlags flags) { ManagedCommand managedCommand = new ManagedCommand(command, type); if (managedCommand.Command != null && managedCommand.NativeCallback != null) { using (FStringUnsafe nameUnsafe = new FStringUnsafe(name)) using (FStringUnsafe helpUnsafe = new FStringUnsafe(help)) { IntPtr address = IntPtr.Zero; switch (type) { case CommandDelegateType.Default: address = Native_IConsoleManager.RegisterConsoleCommandDefault( Address, ref nameUnsafe.Array, ref helpUnsafe.Array, managedCommand.NativeCallback, flags); break; case CommandDelegateType.WithArgs: address = Native_IConsoleManager.RegisterConsoleCommandWithArgs( Address, ref nameUnsafe.Array, ref helpUnsafe.Array, managedCommand.NativeCallback, flags); break; case CommandDelegateType.WithWorld: address = Native_IConsoleManager.RegisterConsoleCommandWithWorld( Address, ref nameUnsafe.Array, ref helpUnsafe.Array, managedCommand.NativeCallback, flags); break; case CommandDelegateType.WithWorldAndArgs: address = Native_IConsoleManager.RegisterConsoleCommandWithWorldAndArgs( Address, ref nameUnsafe.Array, ref helpUnsafe.Array, managedCommand.NativeCallback, flags); break; case CommandDelegateType.WithOutputDevice: address = Native_IConsoleManager.RegisterConsoleCommandWithOutputDevice( Address, ref nameUnsafe.Array, ref helpUnsafe.Array, managedCommand.NativeCallback, flags); break; } if (address != IntPtr.Zero) { managedCommand.NativeCommand = new IConsoleCommand(address); managedCommands[address] = managedCommand; return(managedCommand.NativeCommand); } } } return(null); }