Browse Source

Add support for object IDs again, some material stuff

tags/v1.2.0
NorbiPeti 2 years ago
parent
commit
8877f96ec9
3 changed files with 38 additions and 23 deletions
  1. +2
    -10
      BuildingTools/BlockSelections.cs
  2. +32
    -9
      BuildingTools/BuildingTools.cs
  3. +4
    -4
      BuildingTools/CommandUtils.cs

+ 2
- 10
BuildingTools/BlockSelections.cs View File

@@ -21,17 +21,9 @@ namespace BuildingTools
return false;
}

/*public Block[] SelectBlocks(byte id)
{
var blocks = ObjectIdentifier.GetBySimID(id).SelectMany(block => block.GetConnectedCubes()).ToArray();
return blocks;
}

public Block[] SelectBlocks(char id)
{
var blocks = ObjectIdentifier.GetByID(id).SelectMany(oid => oid.GetConnectedCubes())
.ToArray();
return blocks;
}*/
return ObjectID.GetByID(id).SelectMany(oid => oid.GetConnectedCubes()).ToArray();
}
}
}

+ 32
- 9
BuildingTools/BuildingTools.cs View File

@@ -9,6 +9,10 @@ using TechbloxModdingAPI.Blocks;
using TechbloxModdingAPI.Commands;
using TechbloxModdingAPI.Utility;
using IllusionPlugin;
using RobocraftX.Schedulers;
using Svelto.Tasks;
using Svelto.Tasks.Enumerators;
using Svelto.Tasks.Lean;
using TechbloxModdingAPI.App;
using Unity.Mathematics;
using Main = TechbloxModdingAPI.Main;
@@ -40,7 +44,6 @@ namespace BuildingTools
{
if (!GameState.IsBuildMode()) return; //Scaling & positioning is weird in simulation
if (_blockSelections.CheckNoBlocks(blocks)) return;
// ReSharper disable once PossibleNullReferenceException
float3? reference = Player.LocalPlayer.GetBlockLookedAt()?.Position;
if (!reference.HasValue)
{
@@ -89,6 +92,26 @@ namespace BuildingTools
block.Color = new BlockColor(clr, darkness);
Logging.CommandLog("Blocks colored.");
});
_commandUtils.RegisterBlockCommand("materialBlocks", "Sets the material of the selected blocks permanently both in time stopped and running. It won't be reset when stopping time.",
(material, darkness, blocks, refBlock) =>
{
if (!Enum.TryParse(material, true, out BlockMaterial mat))
{
Logging.CommandLogWarning("Material " + material + " not found");
}

IEnumerator<TaskContract> SetMaterial()
{
foreach (var block in blocks)
{
block.Material = mat;
yield return new WaitForSecondsEnumerator(0.2f).Continue();
}
}

SetMaterial().RunOn(ClientLean.UIScheduler);
Logging.CommandLog("Block materials set.");
});

CommandBuilder.Builder("selectBlocksLookedAt",
"Selects blocks (1 or more) to change. Only works in time stopped mode, however the blocks can be changed afterwards in both modes." +
@@ -111,14 +134,14 @@ namespace BuildingTools
var blocks = _blockSelections.blocks;
Logging.CommandLog(blocks.Length + " blocks selected.");
}).Build();
/*CommandBuilder.Builder("selectBlocksWithID", "Selects blocks with a specific object ID.")
CommandBuilder.Builder("selectBlocksWithID", "Selects blocks with a specific object ID.")
.Action<char>(id =>
{
_blockSelections.blocks =
(_blockSelections.refBlock = ObjectIdentifier.GetByID(id).FirstOrDefault())
?.GetConnectedCubes() ?? new Block[0];
(_blockSelections.refBlock = ObjectID.GetByID(id).FirstOrDefault())
?.GetConnectedCubes() ?? Array.Empty<Block>();
Logging.CommandLog(_blockSelections.blocks.Length + " blocks selected.");
}).Build();*/
}).Build();
CommandBuilder.Builder("selectSelectedBlocks", "Selects blocks that are box selected by the player.")
.Action(() =>
{
@@ -256,10 +279,9 @@ namespace BuildingTools
}
else
{
if (!data.StatsByName.TryGetValue(stat, out var statInfo))
if (!data.statsByName.TryGetValue(stat, out var statInfo))
{
Logging.CommandLogError(
$"Tweakable stat {stat} not found. Stats: {data.StatsNames.Aggregate((a, b) => a + ", " + b)}");
Logging.CommandLogError($"Tweakable stat {stat} not found. Stats: {data.statsByName.Keys.Aggregate((a, b) => a + ", " + b)}");
return;
}

@@ -269,6 +291,7 @@ namespace BuildingTools
foreach (var statInfo in stats)
{
statInfo.max = value == 0 ? 1000 : value;
statInfo.min = -1000;
}

Logging.CommandLog($"{(stat is null || stat.Length == 0 ? "All stats" : $"Stat {stat}")} max changed to {(value == 0 ? 1000 : value)} on {bl}");
@@ -361,7 +384,7 @@ namespace BuildingTools
}

private IEnumerable<SimBody> GetSimBodies(Block[] blocks)
=> blocks.Select(block => block.GetSimBody()).Distinct();
=> blocks.Select(block => block.GetSimBody()).Where(block => !(block is null)).Distinct();

public override void OnApplicationQuit() => Main.Shutdown();



+ 4
- 4
BuildingTools/CommandUtils.cs View File

@@ -49,9 +49,9 @@ namespace BuildingTools
return;
}

/*var blocks = _blockSelections.SelectBlocks(argsa[3][0]);
var blocks = _blockSelections.SelectBlocks(argsa[3][0]);
if (_blockSelections.CheckNoBlocks(blocks)) return;
action(x, y, z, blocks, blocks[0]);*/
action(x, y, z, blocks, blocks[0]);
}
else if (!_blockSelections.CheckNoBlocks(bs))
action(x, y, z, bs, b);
@@ -83,9 +83,9 @@ namespace BuildingTools
return;
}

/*var blocks = _blockSelections.SelectBlocks(argsa[2][0]);
var blocks = _blockSelections.SelectBlocks(argsa[2][0]);
if (_blockSelections.CheckNoBlocks(blocks)) return;
action(argsa[0], darkness, blocks, blocks[0]);*/
action(argsa[0], darkness, blocks, blocks[0]);
}
else if(!_blockSelections.CheckNoBlocks(bs))
action(argsa[0], darkness, bs, b);


Loading…
Cancel
Save