Use is pretty simple.
The only thing to notice is that you have to follow a simple rule during design - use polyobject mirroring, because this script controls only one line of polyobjects - the opposing line is mirrored.
So, polyobject numbering:
For the N-S script, follow this rule:
5 - 6 - 7 - 8 - mirrored line
1 - 2 - 3 - 4 - script controlled line
The same is for the E-W script
1 5
2 6
3 7
4 8
So, how the integers work?
"beginPoly" is the number of the first polyobject in the lower/left line. Only the first polyobject is required.
"nrSegments" is the amount of polyobjects in the lower/left line. Since the upper/right line is mirrored, nothing else is needed, the math does the rest.
Code: Select all
//universal horizontal crusher scripts
//==------------------------------------------------
bool crusherOpen[999];
script "CrusherN-S" (int beginPoly, int nrSegments)
{
while(true)
{
while(crusheropen[beginPoly] == false)
{
for (int i = 0; i < nrSegments; i++)
{
Polyobj_OR_Move(beginPoly+i, 16, 192, 64);
Polywait(beginPoly+i);
}
crusherOpen[beginPoly] = true;
Delay(1);//Mandatory
}
while(crusherOpen[beginPoly] == true)
{
for (int y = 0; y < nrSegments; y++)
{
Polyobj_OR_Move(beginPoly+y, 16, 64, 64);
Polywait(beginPoly+y);
}
crusherOpen[beginPoly] = false;
delay(1);
}
delay(1);
}
}
script "crusherE-W" (int beginPoly, int nrSegments)
{
while(true)
{
while(crusheropen[beginPoly] == false)
{
for (int i = 0; i < nrSegments; i++)
{
Polyobj_OR_Move(beginPoly+i, 16, 128, 64);
Polywait(beginPoly+i);
}
crusherOpen[beginPoly] = true;
Delay(1);//Mandatory
}
while(crusherOpen[beginPoly] == true)
{
for (int y = 0; y < nrSegments; y++)
{
Polyobj_OR_Move(beginPoly+y, 16, 0, 64);
Polywait(beginPoly+y);
}
crusherOpen[beginPoly] = false;
delay(1);
}
delay(1);
}
}
//==------------------------------------------------