Add strut blueprints
This commit is contained in:
parent
abd300351f
commit
351f668f51
3 changed files with 90 additions and 5 deletions
|
@ -438,8 +438,22 @@ namespace Pixi.Robots
|
||||||
#endif
|
#endif
|
||||||
Quaternion cubeQuaternion = Quaternion.Euler(cube.rotation);
|
Quaternion cubeQuaternion = Quaternion.Euler(cube.rotation);
|
||||||
BlockJsonInfo[] blueprint = blueprintMap[cube.cubeId];
|
BlockJsonInfo[] blueprint = blueprintMap[cube.cubeId];
|
||||||
float3 correctionVec = new float3((float)(0), (float)(RobotCommands.blockSize), (float)(0));
|
if (blueprint.Length == 0)
|
||||||
|
{
|
||||||
|
Logging.LogWarning($"Found empty blueprint for {cube.name} (id:{cube.cubeId}), is the blueprint correct?");
|
||||||
|
return new Block[0];
|
||||||
|
}
|
||||||
|
float3 defaultCorrectionVec = new float3((float)(0), (float)(RobotCommands.blockSize), (float)(0));
|
||||||
|
float3 baseRot = new float3(blueprint[0].rotation[0], blueprint[0].rotation[1], blueprint[0].rotation[2]);
|
||||||
|
float3 baseScale = new float3(blueprint[0].scale[0], blueprint[0].scale[1], blueprint[0].scale[2]);
|
||||||
Block[] placedBlocks = new Block[blueprint.Length];
|
Block[] placedBlocks = new Block[blueprint.Length];
|
||||||
|
bool isBaseScaled = !(blueprint[0].scale[1] > 0f && blueprint[0].scale[1] < 2f);
|
||||||
|
float3 correctionVec = isBaseScaled ? (float3)(Quaternion.Euler(baseRot) * baseScale / 2) * (float)-RobotCommands.blockSize : -defaultCorrectionVec;
|
||||||
|
// FIXME scaled base blocks cause the blueprint to be placed in the wrong location (this also could be caused by a bug in DumpVON command)
|
||||||
|
if (isBaseScaled)
|
||||||
|
{
|
||||||
|
Logging.LogWarning($"Found blueprint with scaled base block for {cube.name} (id:{cube.cubeId}), this is not currently supported");
|
||||||
|
}
|
||||||
for (int i = 0; i < blueprint.Length; i++)
|
for (int i = 0; i < blueprint.Length; i++)
|
||||||
{
|
{
|
||||||
BlockColor blueprintBlockColor = ColorSpaceUtility.QuantizeToBlockColor(blueprint[i].color);
|
BlockColor blueprintBlockColor = ColorSpaceUtility.QuantizeToBlockColor(blueprint[i].color);
|
||||||
|
@ -450,7 +464,7 @@ namespace Pixi.Robots
|
||||||
float3 blueRot = new float3(blueprint[i].rotation[0], blueprint[i].rotation[1], blueprint[i].rotation[2]);
|
float3 blueRot = new float3(blueprint[i].rotation[0], blueprint[i].rotation[1], blueprint[i].rotation[2]);
|
||||||
float3 physicalLocation = (float3)(cubeQuaternion * bluePos) + actualPosition;// + (blueprintSizeRotated / 2);
|
float3 physicalLocation = (float3)(cubeQuaternion * bluePos) + actualPosition;// + (blueprintSizeRotated / 2);
|
||||||
//physicalLocation.x += blueprintSize.x / 2;
|
//physicalLocation.x += blueprintSize.x / 2;
|
||||||
physicalLocation -= (float3)(cubeQuaternion * correctionVec);
|
physicalLocation += (float3)(cubeQuaternion * (correctionVec));
|
||||||
//physicalLocation.y -= (float)(RobotCommands.blockSize * scale / 2);
|
//physicalLocation.y -= (float)(RobotCommands.blockSize * scale / 2);
|
||||||
//float3 physicalScale = (float3)(cubeQuaternion * blueScale); // this actually over-rotates when combined with rotation
|
//float3 physicalScale = (float3)(cubeQuaternion * blueScale); // this actually over-rotates when combined with rotation
|
||||||
float3 physicalScale = blueScale;
|
float3 physicalScale = blueScale;
|
||||||
|
|
|
@ -186,7 +186,11 @@ namespace Pixi.Robots
|
||||||
Player local = new Player(PlayerType.Local);
|
Player local = new Player(PlayerType.Local);
|
||||||
Block baseBlock = local.GetBlockLookedAt();
|
Block baseBlock = local.GetBlockLookedAt();
|
||||||
Block[] blocks = baseBlock.GetConnectedCubes();
|
Block[] blocks = baseBlock.GetConnectedCubes();
|
||||||
if (blocks.Length == 0) return;
|
bool isBaseScaled = !(baseBlock.Scale.x > 0 && baseBlock.Scale.x < 2 && baseBlock.Scale.y > 0 && baseBlock.Scale.y < 2 && baseBlock.Scale.z > 0 && baseBlock.Scale.z < 2);
|
||||||
|
if (isBaseScaled)
|
||||||
|
{
|
||||||
|
Logging.CommandLogWarning($"Detected scaled base block. This is not currently supported");
|
||||||
|
}
|
||||||
float3 basePos = baseBlock.Position;
|
float3 basePos = baseBlock.Position;
|
||||||
string von = VoxelObjectNotationUtility.SerializeBlocks(blocks, new float[] { basePos.x, basePos.y, basePos.z });
|
string von = VoxelObjectNotationUtility.SerializeBlocks(blocks, new float[] { basePos.x, basePos.y, basePos.z });
|
||||||
File.WriteAllText(filename, von);
|
File.WriteAllText(filename, von);
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in a new issue