Add support for specifying channels in consoles
Although it doesn't work unless it receives an object signal
This commit is contained in:
parent
20cd8b7a50
commit
62a0c2d242
1 changed files with 87 additions and 27 deletions
|
@ -20,6 +20,7 @@ namespace BlockMod
|
|||
{
|
||||
private Block[] blocks = new Block[0];
|
||||
private Block refBlock;
|
||||
|
||||
public void OnApplicationStart()
|
||||
{
|
||||
Main.Init();
|
||||
|
@ -63,6 +64,7 @@ namespace BlockMod
|
|||
RegisterBlockCommand("colorBlocks", "Colors the blocks you're looking at",
|
||||
(color, darkness, blocks, refBlock) =>
|
||||
{
|
||||
|
||||
if (!Enum.TryParse(color, true, out BlockColors clr))
|
||||
{
|
||||
Logging.CommandLogWarning("Color " + color + " not found");
|
||||
|
@ -71,9 +73,10 @@ namespace BlockMod
|
|||
foreach (var block in blocks)
|
||||
block.Color = new BlockColor {Color = clr, Darkness = darkness};
|
||||
});
|
||||
|
||||
CommandBuilder.Builder("selectBlocksLookedAt", "Selects blocks (1 or more) to change. Only works in build mode, however the blocks can be changed afterwards." +
|
||||
" Paramter: whether one (true) or all connected (false) blocks should be selected.")
|
||||
|
||||
CommandBuilder.Builder("selectBlocksLookedAt",
|
||||
"Selects blocks (1 or more) to change. Only works in build mode, however the blocks can be changed afterwards." +
|
||||
" Paramter: whether one (true) or all connected (false) blocks should be selected.")
|
||||
.Action<bool>(single =>
|
||||
{
|
||||
refBlock = new Player(PlayerType.Local).GetBlockLookedAt();
|
||||
|
@ -91,10 +94,7 @@ namespace BlockMod
|
|||
refBlock = blocks.Length > 0 ? blocks[0] : null;
|
||||
}).Build();
|
||||
|
||||
ConsoleCommands.RegisterWithChannel("selectSendSignal", ch =>
|
||||
{
|
||||
|
||||
}, ChannelType.Object,
|
||||
ConsoleCommands.RegisterWithChannel("selectSendSignal", ch => { }, ChannelType.Object,
|
||||
"Sends a signal for selecting a given object ID for a command block.");
|
||||
|
||||
RegisterBlockCommand("pushBlocks", "Adds velocity to the selected blocks. Only works in simulation.",
|
||||
|
@ -121,7 +121,7 @@ namespace BlockMod
|
|||
new Player(PlayerType.Local).AngularVelocity += new float3(x, y, z);
|
||||
}).Build();
|
||||
}
|
||||
|
||||
|
||||
private string GetBlockInfo()
|
||||
{
|
||||
if (GameState.IsBuildMode())
|
||||
|
@ -143,7 +143,8 @@ namespace BlockMod
|
|||
$"- Rotation: {rot.x:F}° {rot.y:F}° {rot.z:F}°\n" +
|
||||
$"- Color: {block.Color.Color} darkness: {block.Color.Darkness}\n" +
|
||||
$"- Scale: {scale.x:F} {scale.y:F} {scale.z:F}\n" +
|
||||
$"- Label: {block.Label}";
|
||||
$"- Label: {block.Label}\n" +
|
||||
$"- ID: {block.Id}";
|
||||
}
|
||||
|
||||
private static string GetBodyInfoInSimMode()
|
||||
|
@ -182,35 +183,94 @@ namespace BlockMod
|
|||
return blocks;
|
||||
}
|
||||
|
||||
private void RegisterBlockCommand(string name, string desc, Action<string, byte, Block[], Block> action)
|
||||
private Block[] SelectBlocks(char id)
|
||||
{
|
||||
RuntimeCommands.Register<string, byte>(name, (a1, a2) =>
|
||||
var blocks = ObjectIdentifier.GetByID(id).SelectMany(oid => oid.GetConnectedCubes())
|
||||
.ToArray();
|
||||
return blocks;
|
||||
}
|
||||
|
||||
private void RegisterBlockCommandInternal(string name, string desc, Action<string, Block[], Block> action)
|
||||
{
|
||||
RuntimeCommands.Register<string>(name, a1 =>
|
||||
{
|
||||
if (CheckNoBlocks(blocks)) return;
|
||||
action(a1, a2, blocks, refBlock);
|
||||
action(a1, blocks, refBlock);
|
||||
}, desc);
|
||||
ConsoleCommands.RegisterWithChannel<string, byte>(name, (a1, a2, ch) =>
|
||||
ConsoleCommands.RegisterWithChannel<string>(name, (a1, ch) =>
|
||||
{
|
||||
Console.WriteLine($"Command {name} with args {a1} and channel {ch} executing");
|
||||
var blks = SelectBlocks(ch);
|
||||
if (CheckNoBlocks(blks)) return;
|
||||
action(a1, a2, blks, blks[0]);
|
||||
action(a1, blks, blks[0]);
|
||||
}, ChannelType.Object, desc);
|
||||
}
|
||||
|
||||
private void RegisterBlockCommand(string name, string desc, Action<float, float, float, Block[], Block> action)
|
||||
{
|
||||
RuntimeCommands.Register<float, float, float>(name, (x, y, z) =>
|
||||
{
|
||||
if (CheckNoBlocks(blocks)) return;
|
||||
action(x, y, z, blocks, refBlock);
|
||||
},
|
||||
desc);
|
||||
ConsoleCommands.RegisterWithChannel<float, float, float>(name, (x, y, z, ch) =>
|
||||
RegisterBlockCommandInternal(name, desc, (args, bs, b) =>
|
||||
{
|
||||
var blks = SelectBlocks(ch);
|
||||
if (CheckNoBlocks(blks)) return;
|
||||
action(x, y, z, blks, blks[0]);
|
||||
}, ChannelType.Object, desc);
|
||||
var argsa = args.Split(' ');
|
||||
if (argsa.Length < 3)
|
||||
{
|
||||
Log.Error("Too few arguments. Needed arguments are: <x> <y> <z> and [id] is optional.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!float.TryParse(argsa[0], out float x) || !float.TryParse(argsa[1], out float y) ||
|
||||
!float.TryParse(argsa[2], out float z))
|
||||
{
|
||||
Log.Error("Could not parse arguments as floats.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (argsa.Length > 3)
|
||||
{
|
||||
if (argsa[3].Length == 0)
|
||||
{
|
||||
Log.Error("Missing channel.");
|
||||
return;
|
||||
}
|
||||
|
||||
var blocks = SelectBlocks(argsa[3][0]);
|
||||
if (CheckNoBlocks(blocks)) return;
|
||||
action(x, y, z, blocks, blocks[0]);
|
||||
}
|
||||
else if (!CheckNoBlocks(bs))
|
||||
action(x, y, z, bs, b);
|
||||
});
|
||||
}
|
||||
|
||||
private void RegisterBlockCommand(string name, string desc, Action<string, byte, Block[], Block> action)
|
||||
{
|
||||
RegisterBlockCommandInternal(name, desc, (args, bs, b) =>
|
||||
{
|
||||
var argsa = args.Split(' ');
|
||||
if (argsa.Length < 2)
|
||||
{
|
||||
Log.Error("Too few arguments. Needed arguments are: <color> <darkness> and [id] is optional.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!byte.TryParse(argsa[1], out byte darkness))
|
||||
{
|
||||
Log.Error("Could not parse color darkness.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (argsa.Length > 2)
|
||||
{
|
||||
if (argsa[2].Length == 0)
|
||||
{
|
||||
Log.Error("Missing channel.");
|
||||
return;
|
||||
}
|
||||
|
||||
var blocks = SelectBlocks(argsa[2][0]);
|
||||
if (CheckNoBlocks(blocks)) return;
|
||||
action(argsa[0], darkness, blocks, blocks[0]);
|
||||
}
|
||||
else if(!CheckNoBlocks(bs))
|
||||
action(argsa[0], darkness, bs, b);
|
||||
});
|
||||
}
|
||||
|
||||
public void OnApplicationQuit()
|
||||
|
|
Loading…
Reference in a new issue