initial commit
This commit is contained in:
106
scripts/server/highlight.cs
Normal file
106
scripts/server/highlight.cs
Normal file
@ -0,0 +1,106 @@
|
||||
// Handles highlighting and de-highlighting large groups of bricks.
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
//Highlight group data $NDH::*
|
||||
// $NDH::LastId : The id of the last created highlight group
|
||||
// $NDH::Count : Total number of active highlight groups
|
||||
//
|
||||
// $NDHN[brick] : Number of groups a brick is in
|
||||
// $NDHF[brick] : Original color fx of the brick
|
||||
//
|
||||
// $NDH[group] : Count of bricks in a group
|
||||
// $NDH[group, i] : Brick in group at position i
|
||||
|
||||
//Reserve a highlight group id
|
||||
function ndNewHighlightGroup()
|
||||
{
|
||||
//Increase group number
|
||||
$NDH::LastId++;
|
||||
$NDH::Count++;
|
||||
|
||||
//Set initial count
|
||||
$NDH[$NDH::LastId] = 0;
|
||||
|
||||
//Assign free id
|
||||
return $NDH::LastId;
|
||||
}
|
||||
|
||||
//Remove highlight group and clean up garbage variables
|
||||
function ndRemoveHighlightGroup(%group)
|
||||
{
|
||||
//Don't delete groups that don't exist
|
||||
if($NDH[%group] $= "")
|
||||
return;
|
||||
|
||||
//Lower group number
|
||||
$NDH::Count--;
|
||||
|
||||
//Clear count to allow reuse of index
|
||||
$NDH[%group] = "";
|
||||
|
||||
//Cancel schedules
|
||||
cancel($NDHS[%group]);
|
||||
|
||||
//If this is the most recently created group, pretend it never existed
|
||||
if($NDH::LastId == %group)
|
||||
$NDH::LastId--;
|
||||
|
||||
//If this is the last highlight group, just delete ALL highlight variables
|
||||
if($NDH::Count < 1)
|
||||
deleteVariables("$NDH*");
|
||||
}
|
||||
|
||||
//Add a brick to a highlight group
|
||||
function ndHighlightBrick(%group, %brick)
|
||||
{
|
||||
//If brick is not highlighted, do that
|
||||
if(!$NDHN[%brick])
|
||||
{
|
||||
$NDHF[%brick] = %brick.colorFxID;
|
||||
%brick.setColorFx(3);
|
||||
}
|
||||
|
||||
//Increase group number of this brick
|
||||
$NDHN[%brick]++;
|
||||
|
||||
//Add brick to highlight group
|
||||
$NDH[%group, ($NDH[%group]++) - 1] = %brick;
|
||||
}
|
||||
|
||||
//Start de-highlighting bricks
|
||||
function ndStartDeHighlight(%group)
|
||||
{
|
||||
//Don't do this if already de-highlighting
|
||||
%t = getTimeRemaining($NDHS[%group]);
|
||||
|
||||
if(%t > 66 || %t == 0)
|
||||
{
|
||||
cancel($NDHS[%group]);
|
||||
ndTickDeHighlight(%group, 0);
|
||||
}
|
||||
}
|
||||
|
||||
//Tick de-highlighting bricks
|
||||
function ndTickDeHighlight(%group, %start)
|
||||
{
|
||||
%end = $NDH[%group];
|
||||
|
||||
if(%end - %start > $Pref::Server::ND::ProcessPerTick)
|
||||
%end = %start + $Pref::Server::ND::ProcessPerTick;
|
||||
else
|
||||
%lastTick = true;
|
||||
|
||||
for(%i = %start; %i < %end; %i++)
|
||||
{
|
||||
%brick = $NDH[%group, %i];
|
||||
|
||||
//If the brick is in no more groups, de-highlight it
|
||||
if(isObject(%brick) && !($NDHN[%brick]--))
|
||||
%brick.setColorFx($NDHF[%brick]);
|
||||
}
|
||||
|
||||
if(!%lastTick)
|
||||
$NDHS[%group] = schedule(30, 0, ndTickDeHighlight, %group, %end);
|
||||
else
|
||||
ndRemoveHighlightGroup(%group);
|
||||
}
|
Reference in New Issue
Block a user