diff --git a/bricks/gates/NOT.cs b/bricks/gates/NOT.cs index 78a524b..a0c6b03 100644 --- a/bricks/gates/NOT.cs +++ b/bricks/gates/NOT.cs @@ -13,6 +13,7 @@ datablock fxDTSBrickData(LogicGate_NOT_Data : LogicGate_Diode_Data) logicForcePrint = "ARROW"; logicUpdate = "return function(gate) Gate.setportstate(gate, 2, 1-Gate.getportstate(gate, 1)) end"; + logicCFunction = 2; numLogicPorts = 2; }; diff --git a/bricks/gates/diode.cs b/bricks/gates/diode.cs index db0b9d8..ac09f6c 100644 --- a/bricks/gates/diode.cs +++ b/bricks/gates/diode.cs @@ -17,6 +17,7 @@ datablock fxDTSBrickData(LogicGate_Diode_Data) logicForcePrint = "ARROW"; logicUpdate = "return function(gate) Gate.setportstate(gate, 2, Gate.getportstate(gate, 1)) end"; + logicCFunction = 1; numLogicPorts = 2; diff --git a/bricks/gates/verticalDiode.cs b/bricks/gates/verticalDiode.cs index 46009e4..ba5b235 100644 --- a/bricks/gates/verticalDiode.cs +++ b/bricks/gates/verticalDiode.cs @@ -20,6 +20,7 @@ datablock fxDTSBrickData(LogicGate_DiodeUp_Data) logicForcePrint = "UPARROW"; logicUpdate = "return function(gate) Gate.setportstate(gate, 2, Gate.getportstate(gate, 1)) end"; + logicCFunction = 1; numLogicPorts = 2; @@ -47,6 +48,7 @@ datablock fxDTSBrickData(LogicGate_DiodeDown_Data : LogicGate_DiodeUp_Data) logicForcePrint = "DOWNARROW"; logicUpdate = "return function(gate) Gate.setportstate(gate, 2, Gate.getportstate(gate, 1)) end"; + logicCFunction = 1; logicPortDir[0] = 4; logicPortDir[1] = 5; diff --git a/bricks/gates/verticalNOT.cs b/bricks/gates/verticalNOT.cs index 7d7cf33..7b6562e 100644 --- a/bricks/gates/verticalNOT.cs +++ b/bricks/gates/verticalNOT.cs @@ -13,6 +13,7 @@ datablock fxDTSBrickData(LogicGate_NotUp_Data : LogicGate_DiodeUp_Data) logicForcePrint = "UPARROW"; logicUpdate = "return function(gate) Gate.setportstate(gate, 2, 1-Gate.getportstate(gate, 1)) end"; + logicCFunction = 2; }; lualogic_registergatedefinition("LogicGate_NotUp_Data"); @@ -28,6 +29,7 @@ datablock fxDTSBrickData(LogicGate_NotDown_Data : LogicGate_DiodeDown_Data) logicForcePrint = "DOWNARROW"; logicUpdate = "return function(gate) Gate.setportstate(gate, 2, 1-Gate.getportstate(gate, 1)) end"; + logicCFunction = 2; }; lualogic_registergatedefinition("LogicGate_NotDown_Data"); diff --git a/bricks/outputs/text2-global.lua b/bricks/outputs/text2-global.lua index 13f82f0..316ce0d 100644 --- a/bricks/outputs/text2-global.lua +++ b/bricks/outputs/text2-global.lua @@ -98,9 +98,9 @@ textbrick2_idxToPrint = { [0x58] = "X", [0x59] = "Y", [0x5A] = "Z", - [0x5B] = "squarebracketright", + [0x5B] = "squarebracketleft", [0x5C] = "slashleft", - [0x5D] = "squarebracketleft", + [0x5D] = "squarebracketright", [0x5E] = "caret", [0x5F] = "underscore", diff --git a/bricks/special/robot.cs b/bricks/special/robot.cs index 6ef15d8..ec3e0fa 100644 --- a/bricks/special/robot.cs +++ b/bricks/special/robot.cs @@ -180,26 +180,28 @@ function LogicGate_RobotController_Data::LuaLogic_Callback(%this, %brick, %data) } else if(%first $= "P") { // plant brick LogicRobot_CreateBrickGroup(); - %nbrick = new fxDTSBrick() { - datablock = brick1x1fData; - position = %pos; - colorId = getWord(%field, 1); - colorFxId = getWord(%field, 2); - shapeFxId = getWord(%field, 3); - isPlanted = 1; - }; - %nbrick.setTransform(%pos SPC "0 0 1 0"); - - %err = %nbrick.plant(); - if(%err != 0 && %err != 2 && %err != 3) { - %nbrick.delete(); - } else { - %nbrick.setRaycasting(getWord(%field, 4)); - %nbrick.setColliding (getWord(%field, 5)); - %nbrick.setRendering (getWord(%field, 6)); + if(!isObject(%tbrick)) { + %nbrick = new fxDTSBrick() { + datablock = brick1x1fData; + position = %pos; + colorId = getWord(%field, 1); + colorFxId = getWord(%field, 2); + shapeFxId = getWord(%field, 3); + isPlanted = 1; + }; + %nbrick.setTransform(%pos SPC "0 0 1 0"); - BrickGroup_12345678.add(%nbrick); - %nbrick.setTrusted(1); + %err = %nbrick.plant(); + if(%err != 0 && %err != 2 && %err != 3) { + %nbrick.delete(); + } else { + %nbrick.setRaycasting(getWord(%field, 4)); + %nbrick.setColliding (getWord(%field, 5)); + %nbrick.setRendering (getWord(%field, 6)); + + BrickGroup_12345678.add(%nbrick); + %nbrick.setTrusted(1); + } } } else if(%first $= "M") { // move %pos = getWords(%field, 1, 3); diff --git a/bricks/special/rom.cs b/bricks/special/rom.cs index 31ebfc7..71e15ef 100644 --- a/bricks/special/rom.cs +++ b/bricks/special/rom.cs @@ -27,6 +27,12 @@ package lualogic_rom_update { parent::setRaycasting(%brick, %val); lualogic_rom_updatebrick(%brick); } + function fxDtsBrickData::Logic_onAdd(%data, %brick) { + parent::onAdd(%data, %brick); + if(%data.isLogicRom) { + schedule(5000, 0, lualogic_rom_updatedata, %brick); + } + } }; schedule(0, 0, activatePackage, lualogic_rom_update); diff --git a/scripts/utilities.cs b/scripts/utilities.cs index d61a7ec..ea11647 100644 --- a/scripts/utilities.cs +++ b/scripts/utilities.cs @@ -27,11 +27,13 @@ function lualogic_registergatedefinition_auto(%data){ %def = %id @ ";" @ lualogic_expandescape(%data.logicUIName) @ ";" @ lualogic_expandescape(%data.logicUIDesc) @ ";" @ - lualogic_expandescape(%data.logicInit) @ ";" @ + lualogic_expandescape(%data.logicInit ) @ ";" @ lualogic_expandescape(%data.logicUpdate) @ ";" @ - lualogic_expandescape(%data.logicInput) @ ";" @ + lualogic_expandescape(%data.logicInput ) @ ";" @ lualogic_expandescape(%data.logicGlobal) @ ";" @ - %numports + %numports @ ";" @ + (%data.logicCFunction || 0) @ ";" @ + (%data.logicCDataSize || 0) ; for(%i = 0; %i < %numports; %i++)