add rainbow wires

This commit is contained in:
Redo0 2021-06-07 15:37:57 -05:00
parent 7922e85545
commit 4501eea02e
3 changed files with 69 additions and 27 deletions

View File

@ -1,6 +1,15 @@
function lualogic_addwire(%wire)
{ function lualogic_getlayer(%wire) {
%color = %wire.getColorID(); // -1 if the brick is rainbow, its color ID otherwise
if(%wire.getColorFxId()==6) {
return -1;
} else {
return %wire.getColorId();
}
}
function lualogic_addwire(%wire) {
%layer = lualogic_getlayer(%wire);
%box = %wire.getWorldBox(); %box = %wire.getWorldBox();
@ -15,7 +24,7 @@ function lualogic_addwire(%wire)
%min = lualogic_pos(%minX SPC %minY SPC %minZ); %min = lualogic_pos(%minX SPC %minY SPC %minZ);
%max = lualogic_pos(%maxX SPC %maxY SPC %maxZ); %max = lualogic_pos(%maxX SPC %maxY SPC %maxZ);
lualogic_send("W;" @ %wire.getID() @ ";" @ %color @ ";" @ %min @ ";" @ %max); lualogic_send("W;" @ %wire.getID() @ ";" @ %layer @ ";" @ %min @ ";" @ %max);
%wire.logicIsAdded = true; %wire.logicIsAdded = true;
} }
@ -56,27 +65,26 @@ function lualogic_removegate(%gate)
} }
} }
function lualogic_sendall() function lualogic_sendall() {
{ %num_groups = mainBrickGroup.getCount();
%groups = mainBrickGroup.getCount(); for(%i = 0; %i < %num_groups; %i++) {
for(%i = 0; %i < %groups; %i++)
{
%group = mainBrickGroup.getObject(%i); %group = mainBrickGroup.getObject(%i);
%bricks = %group.getCount();
for(%a = 0; %a < %bricks; %a++) %num_bricks = %group.getCount();
{ for(%a = 0; %a < %num_bricks; %a++) {
%brick = %group.getObject(%a); %brick = %group.getObject(%a);
%data = %brick.getDataBlock(); %data = %brick.getDataBlock();
if(%data.isLogic && %brick.isPlanted() && !%brick.logicIsRemoved) if(%data.isLogic && %brick.isPlanted() && !%brick.isDead() && !%brick.logicIsRemoved) {
{ if(%data.isLogicWire) {
if(%data.isLogicWire)
lualogic_addwire(%brick); lualogic_addwire(%brick);
else if(%data.isLogicGate) } else if(%data.isLogicGate) {
lualogic_addgate(%brick); lualogic_addgate(%brick);
} }
} }
} }
} }
}
function fxDTSBrick::Logic_SetOutput(%this, %port, %state) function fxDTSBrick::Logic_SetOutput(%this, %port, %state)
{ {
@ -137,12 +145,46 @@ package LuaLogic_Bricks
} }
} }
function fxDtsBrick::setColorFx(%brick, %fx, %bypass) {
%data = %brick.getDatablock();
if( // If the brick is a wire - act specially
isObject(%brick) &&
%brick.isPlanted &&
!%brick.isDead() &&
%data.isLogic &&
%data.isLogicWire
) {
if(%bypass) { // If this is a glow update generated by logic backend - act normally
if(%brick.getColorFxId()!=6) { // If the brick is not rainbow, act normally
parent::setColorFx(%brick, %fx);
} else { // if the brick is rainbow, do nothing
return;
}
} else { // If this is a manual FX change on a wire - act specially
if(
(%fx==0 && %brick.getColorFxId()==6) ||
(%fx==6 && (%brick.getColorFxId()==0 || %brick.getColorFxId()==3))
) { // If toggling rainbowness - act normally, and send a color update if the brick is added
parent::setColorFx(%brick, %fx);
if(%brick.logicIsAdded) {
lualogic_send("SL;" @ %brick @ ";" @ lualogic_getlayer(%brick));
}
} else { // If not toggling rainbowness - do nothing
return;
}
}
} else { // The brick is not a wire - act normally
parent::setColorFx(%brick, %fx);
}
}
function fxDTSBrickData::onColorChange(%data, %obj) function fxDTSBrickData::onColorChange(%data, %obj)
{ {
parent::onColorChange(%data, %obj); parent::onColorChange(%data, %obj);
if(isObject(%obj) && %obj.isPlanted() && !%obj.isDead() && %data.isLogic && %data.isLogicWire) if(isObject(%obj) && %obj.isPlanted() && !%obj.isDead() && %data.isLogic && %data.isLogicWire && %obj.logicIsAdded) {
lualogic_send("SL;" @ %obj @ ";" @ %obj.getColorID()); lualogic_send("SL;" @ %obj @ ";" @ lualogic_getlayer(%obj));
}
} }
function fxDTSBrickData::onDeath(%this, %brick) function fxDTSBrickData::onDeath(%this, %brick)

View File

@ -21,7 +21,7 @@ function serverCmdLST(%client, %time)
function serverCmdLSM(%client, %mult){ function serverCmdLSM(%client, %mult){
if(%client.isAdmin || %client.isSuperAdmin){ if(%client.isAdmin || %client.isSuperAdmin){
%mult = mFloor(mClamp(%mult, 1, 1000)); %mult = mFloor(mClamp(%mult, 1, 10000));
$Pref::Server::LuaLogic::OPT_TICK_MULT = %mult; $Pref::Server::LuaLogic::OPT_TICK_MULT = %mult;
messageAll('', '\c3%1\c6 has set the logic tick multiplier to \c3%2\c6.', %client.name, %mult); messageAll('', '\c3%1\c6 has set the logic tick multiplier to \c3%2\c6.', %client.name, %mult);
lualogic_sendoptions(); lualogic_sendoptions();

View File

@ -42,7 +42,7 @@ function LuaLogicTCP::onLine(%this, %line)
{ {
%brick = getField(%line, %i); %brick = getField(%line, %i);
if(isObject(%brick)) if(isObject(%brick))
%brick.setColorFX(3); %brick.setColorFX(3, true);
} }
} }
else else
@ -51,7 +51,7 @@ function LuaLogicTCP::onLine(%this, %line)
{ {
%brick = getField(%line, %i); %brick = getField(%line, %i);
if(isObject(%brick)) if(isObject(%brick))
%brick.setColorFX(0); %brick.setColorFX(0, true);
} }
} }
case "TPS": case "TPS":