I've done the first scripting on this mod since I last hosted it.
It's not much, but I got basic pipe finding code done:
function fxDtsBrick::findNextPipe(%brick,%side)
{
%position = %brick.position;
%mask = $TypeMasks::FxBrickObjectType;
if(%brick.dataBlock.isStraightPipe)
{
%size = %brick.dataBlock.brickSizeX/2;
if(%brick.angleID == 0 || %brick.angleID == 2)
{
initContainerBoxSearch(%position,%size+0.5 SPC "0.4" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
{
if(%side == 0 && getWord(%searchObj.position,0) < getWord(%brick.position,0))
return %searchObj;
else if(%side == 1 && getWord(%searchObj.position,0) > getWord(%brick.position,0))
return %searchObj;
}
}
else
{
initContainerBoxSearch(%position,"0.4" SPC %size+0.5 SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
{
if(%side == 0 && getWord(%searchObj.position,1) < getWord(%brick.position,1))
return %searchObj;
else if(%side == 1 && getWord(%searchObj.position,1) > getWord(%brick.position,1))
return %searchObj;
}
}
}
else if(%brick.dataBlock $= "brickPipeCrossData")
{
initContainerBoxSearch(%position,"1 1 0.4",%mask);
while(%searchObj = containerSearchNext())
{
if(%side == 0 && getWord(%searchObj.position,1) < getWord(%brick.position,1))
return %searchObj;
if(%side == 1 && getWord(%searchObj.position,1) > getWord(%brick.position,1))
return %searchObj;
if(%side == 2 && getWord(%searchObj.position,0) > getWord(%brick.position,0))
return %searchObj;
if(%side == 3 && getWord(%searchObj.position,0) < getWord(%brick.position,0))
return %searchObj;
}
}
else if(%brick.dataBlock $= "brickPipeTData")
{
if(%brick.angleID == 0)
{
if(%side == 0)
{
initContainerBoxSearch(%position,"0.4" SPC "1" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,1) > getWord(%brick.position,1))
return %searchObj;
}
else if(%side == 1)
{
initContainerBoxSearch(%position,"1" SPC "0.4" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,0) > getWord(%brick.position,0))
return %searchObj;
}
else if(%side == 2)
{
initContainerBoxSearch(%position,"0.4" SPC "1" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,1) < getWord(%brick.position,1))
return %searchObj;
}
}
else if(%brick.angleID == 1)
{
if(%side == 0)
{
initContainerBoxSearch(%position,"0.4" SPC "1" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,1) < getWord(%brick.position,1))
return %searchObj;
}
else if(%side == 1)
{
initContainerBoxSearch(%position,"1" SPC "0.4" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,0) > getWord(%brick.position,0))
return %searchObj;
}
else if(%side == 2)
{
initContainerBoxSearch(%position,"1" SPC "0.4" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,0) < getWord(%brick.position,0))
return %searchObj;
}
}
else if(%brick.angleID == 2)
{
if(%side == 0)
{
initContainerBoxSearch(%position,"0.4" SPC "1" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,1) < getWord(%brick.position,1))
return %searchObj;
}
else if(%side == 1)
{
initContainerBoxSearch(%position,"1" SPC "0.4" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,0) < getWord(%brick.position,0))
return %searchObj;
}
else if(%side == 2)
{
initContainerBoxSearch(%position,"0.4" SPC "1" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,1) > getWord(%brick.position,1))
return %searchObj;
}
}
else if(%brick.angleID == 3)
{
if(%side == 0)
{
initContainerBoxSearch(%position,"0.4" SPC "1" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,1) > getWord(%brick.position,1))
return %searchObj;
}
else if(%side == 1)
{
initContainerBoxSearch(%position,"1" SPC "0.4" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,0) < getWord(%brick.position,0))
return %searchObj;
}
else if(%side == 2)
{
initContainerBoxSearch(%position,"1" SPC "0.4" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,0) > getWord(%brick.position,0))
return %searchObj;
}
}
}
else if(%brick.dataBlock $= "brickPipeTurnData")
{
if(%brick.angleID == 0)
{
if(%side == 0)
{
initContainerBoxSearch(%position,"0.4" SPC "1" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,1) > getWord(%brick.position,1))
return %searchObj;
}
else if(%side == 1)
{
initContainerBoxSearch(%position,"1" SPC "0.4" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,0) > getWord(%brick.position,0))
return %searchObj;
}
}
if(%brick.angleID == 1)
{
if(%side == 0)
{
initContainerBoxSearch(%position,"0.4" SPC "1" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,1) < getWord(%brick.position,1))
return %searchObj;
}
else if(%side == 1)
{
initContainerBoxSearch(%position,"1" SPC "0.4" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,0) > getWord(%brick.position,0))
return %searchObj;
}
}
else if(%brick.angleID == 2)
{
if(%side == 0)
{
initContainerBoxSearch(%position,"0.4" SPC "1" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,1) < getWord(%brick.position,1))
return %searchObj;
}
else if(%side == 1)
{
initContainerBoxSearch(%position,"1" SPC "0.4" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,0) < getWord(%brick.position,0))
return %searchObj;
}
}
else if(%brick.angleID == 3)
{
if(%side == 0)
{
initContainerBoxSearch(%position,"0.4" SPC "1" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,1) > getWord(%brick.position,1))
return %searchObj;
}
else if(%side == 1)
{
initContainerBoxSearch(%position,"1" SPC "0.4" SPC "0.4",%mask);
while(%searchObj = containerSearchNext())
if(getWord(%searchObj.position,0) < getWord(%brick.position,0))
return %searchObj;
}
}
}
}
function findPump(%brick)
{
%numPipesSearched = 0;
%numPipesDiscovered = 1;
%pipesDiscovered[0] = %brick;
while(true)
{
%pipeToSearch = -1;
%index = -1;
for(%a=0;%a<%numPipesDiscovered;%a++)
{
if(isObject(%pipesDiscovered[%a]))
{
%pipeToSearch = %pipesDiscovered[%a];
%index = %a;
break;
}
}
if(!isObject(%pipeToSearch))
break;
else
{
%pipesDiscovered[%index] = -1;
%blankSearchedSlot = -1;
for(%q = 0; %q<%numPipesSearched;%q++)
{
if(!isObject(%pipesSearched[%q]))
{
%blankSearchedSlot = %q;
break;
}
}
if(%blankSearchedSlot != -1)
%pipesSearched[%blankSearchedSlot] = %pipeToSearch;
else
{
%pipesSearched[%numPipesSearched] = %pipeToSearch;
%numPipesSearched++;
}
for(%v = 0; %v<4; %v++)
{
%newBrick = %pipeToSearch.findNextPipe(%v);
if(isObject(%newBrick))
{
if(%newBrick != %pipeToSearch && %newBrick.getClassName() $= "fxDTSBrick")
{
%found = false;
for(%la = 0; %la<%numPipesSearched;%la++)
{
if(%pipesSearched[%la] == %newBrick)
{
%found = true;
break;
}
}
if(!%found)
{
for(%lb = 0; %lb<%numPipesDiscovered;%lb++)
{
if(%pipesDiscovered[%lb] == %newBrick)
{
%found = true;
break;
}
}
if(!%found)
{
%newBrick.setColorFx(2);
%blankDiscoveredSlot = -1;
for(%p=0;%p<%numPipesDiscovered;%p++)
{
if(!isObject(%pipesDiscovered[%p]))
{
%blankDiscoveredSlot = %p;
break;
}
}
if(%blankDiscoveredSlot != -1)
%pipesDiscovered[%blankDiscoveredSlot] = %newBrick;
else
{
%pipesDiscovered[%numPipesDiscovered] = %newBrick;
%numPipesDiscovered++;
}
}
}
}
}
}
}
}
}
function doPipeSystemReschedule(%brick,%client)
{
if(isObject(%brick.foundPump))
{
cancel(%brick.foundPump.calcSch);
%brick.foundPump.calcSch = schedule(1000,0,doPipeLogic,%brick.foundPump,%client);
}
else
{
cancel(%brick.pumpFindsch);
%brick.pumpFindSch = schedule(1000,0,findPump,%brick,%client);
}
}
package pipePackage
{
function fxDtsBrick::onDoorOpen(%brick,%client)
{
Parent::onDoorOpen(%brick,%client);
doPipeSystemReschedule(%brick.getDownBrick(0),%client);
}
};
activatepackage(pipePackage);