Author Topic: Lilboarder's Trench Digging mod is extremely laggy, unsure on how to fix it  (Read 1332 times)


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/pf1tQe6B
findSmallBrick is what's lagging really bad, line 501. Any way I can optimize it?

edit: in case of linkrot
Code: [Select]
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;
}

I just sent you a working version. I believe lilboarder wanted me to test it to see if the lag was fixed and then he forgot to release it.

If anybody else wants it: http://www.filedropper.com/gamemodetrenchdigging

Thanks, that works
minus the fact it's a bit wonky with "128x" cubes