Update PixiBotFile command with correct blueprints functionality

This commit is contained in:
NGnius (Graham) 2020-06-07 11:59:45 -04:00
parent 6e817bff18
commit 0d25570cba

View file

@ -69,13 +69,36 @@ namespace Pixi.Robots
return; return;
} }
float3 position = new Player(PlayerType.Local).Position; float3 position = new Player(PlayerType.Local).Position;
position.y += (float)blockSize; position.y += (float)(blockSize * CubeSize * 3); // 3 is roughly the max height of any cube in RC
CubeInfo[] cubes = CubeUtility.ParseCubes(robot.Value); CubeInfo[] cubes = CubeUtility.ParseCubes(robot.Value);
// move origin closer to player (since bots are rarely built at the garage bay origin)
if (cubes.Length == 0)
{
Logging.CommandLogError($"Robot data contains no cubes");
return;
}
float3 minPosition = cubes[0].position;
for (int c = 0; c < cubes.Length; c++)
{
float3 cubePos = cubes[c].position;
if (cubePos.x < minPosition.x)
{
minPosition.x = cubePos.x;
}
if (cubePos.y < minPosition.y)
{
minPosition.y = cubePos.y;
}
if (cubePos.z < minPosition.z)
{
minPosition.z = cubePos.z;
}
}
Block[][] blocks = new Block[cubes.Length][]; Block[][] blocks = new Block[cubes.Length][];
for (int c = 0; c < cubes.Length; c++) // sometimes I wish this were C++ for (int c = 0; c < cubes.Length; c++) // sometimes I wish this were C++
{ {
CubeInfo cube = cubes[c]; CubeInfo cube = cubes[c];
float3 realPosition = (cube.position * (float)blockSize * CubeSize) + position; float3 realPosition = ((cube.position - minPosition) * (float)blockSize * CubeSize) + position;
if (cube.block == BlockIDs.TextBlock && !string.IsNullOrEmpty(cube.name)) if (cube.block == BlockIDs.TextBlock && !string.IsNullOrEmpty(cube.name))
{ {
// TextBlock block ID means it's a placeholder // TextBlock block ID means it's a placeholder
@ -86,10 +109,7 @@ namespace Pixi.Robots
blocks[c] = new Block[] { Block.PlaceNew(cube.block, realPosition, cube.rotation, cube.color, cube.darkness, CubeSize) }; blocks[c] = new Block[] { Block.PlaceNew(cube.block, realPosition, cube.rotation, cube.color, cube.darkness, CubeSize) };
} }
} }
// build placeholders int blockCount = 0;
// Note: this is a separate loop because everytime a new block is placed,
// a slow Sync() call is required to access it's properties.
// This way, one Sync() call is needed, instead of O(cubes.Length) calls
for (int c = 0; c < cubes.Length; c++) for (int c = 0; c < cubes.Length; c++)
{ {
CubeInfo cube = cubes[c]; CubeInfo cube = cubes[c];
@ -99,8 +119,9 @@ namespace Pixi.Robots
//Logging.MetaLog($"Block is {blocks[c][0].Type} and was placed as {cube.block}"); //Logging.MetaLog($"Block is {blocks[c][0].Type} and was placed as {cube.block}");
blocks[c][0].Specialise<TextBlock>().Text = cube.name; blocks[c][0].Specialise<TextBlock>().Text = cube.name;
} }
blockCount += blocks[c].Length;
} }
Logging.CommandLog($"Placed {robot.Value.name} by {robot.Value.addedByDisplayName} ({cubes.Length} cubes) beside you"); Logging.CommandLog($"Placed {robot?.name} by {robot?.addedByDisplayName} beside you ({cubes.Length}RC -> {blockCount}GC)");
} }
private static void ImportRobotOnline(string robotName) private static void ImportRobotOnline(string robotName)