I've tried stripping out anything I don't need, and it's still incredibly slow.
I've reached out to Greek with no response, and Glass only tells me to use 16x bricks, which I'd rather not do considering Greek's seemingly works fine with larger bricks.
http://pastebin.com/pf1tQe6BfindSmallBrick is what's lagging really bad, line 501. Any way I can optimize it?
edit: in case of linkrot
function findSmallBrick(%brick,%Pos,%wantBrick)
{
%time = getRealTime();
%DBName = %brick.getDatablock().getName();
if(%wantBrick $= "brick2xCubeDirtData")
{
%increment = 1;
switch$(%DBName)
{
case "brick64xCubeDirtData":
%Min = -15.5;
%Max = 15.5;
case "brick32xCubeDirtData":
%Min = -7.5;
%Max = 7.5;
case "brick16xCubeDirtData":
%Min = -3.5;
%Max = 3.5;
case "brick8xCubeDirtData":
%Min = -1.5;
%Max = 1.5;
case "brick4xCubeDirtData":
%Min = -0.5;
%Max = 0.5;
case "brick2xCubeDirtData":
return %brick.getPosition();
default:
return;
}
}
else if(%wantBrick $= "brick4xCubeDirtData")
{
%increment = 2;
switch$(%DBName)
{
case "brick64xCubeDirtData":
%Min = -15;
%Max = 15;
case "brick32xCubeDirtData":
%Min = -7;
%Max = 7;
case "brick16xCubeDirtData":
%Min = -3;
%Max = 3;
case "brick8xCubeDirtData":
%Min = -1;
%Max = 1;
case "brick4xCubeDirtData":
return %brick.getPosition();
case "brick2xCubeDirtData":
return 0 TAB %brick.getPosition();
default:
return;
}
}
else if(%wantBrick $= "brick8xCubeDirtData")
{
%increment = 4;
switch$(%DBName)
{
case "brick64xCubeDirtData":
%Min = -14;
%Max = 14;
case "brick32xCubeDirtData":
%Min = -6;
%Max = 6;
case "brick16xCubeDirtData":
%Min = -2;
%Max = 2;
case "brick8xCubeDirtData":
return %brick.getPosition();
default:
return;
}
}
else if(%wantBrick $= "brick16xCubeDirtData")
{
%increment = 8;
switch$(%DBName)
{
case "brick64xCubeDirtData":
%Min = -8;
%Max = 8;
case "brick32xCubeDirtData":
%Min = -4;
%Max = 4;
case "brick16xCubeDirtData":
return %brick.getPosition();
default:
return;
}
}
else if(%wantBrick $= "brick32xCubeDirtData")
{
%increment = 16;
switch$(%DBName)
{
case "brick64xCubeDirtData":
%Min = -8;
%Max = 8;
case "brick32xCubeDirtData":
return %brick.getPosition();
default:
return;
}
}
for(%x = %Min;%x <= %Max;%x += %increment)
{
for(%y = %Min;%y <= %Max;%y += %increment)
{
for(%z = %Min;%z <= %Max;%z += %increment)
{
%rot = getWord(%brick.rotation,3);
%smallPos = vectorAdd(%brick.getPosition(),%x SPC %y SPC %z);
%Distance = vectorDist(%Pos,%smallPos);
if(%Smallest $= "" || %Distance < %Smallest)
{
%SmallestPos = %smallPos;
%Smallest = %Distance;
}
%count++;
}
}
}
talk("Task completed in" SPC getTimeString((getRealTime()-%time)/1000) SPC "with" SPC %count SPC "loops");
return %SmallestPos;
}