diff --git a/bricks/inputs/keyboard-init.lua b/bricks/inputs/keyboard-init.lua index 58859a4..01be97e 100644 --- a/bricks/inputs/keyboard-init.lua +++ b/bricks/inputs/keyboard-init.lua @@ -1,114 +1,4 @@ - -keyboard_strToBool = keyboard_strToBool or { - ["0"] = false, - ["1"] = true, -} - ---Key codes may use only 7 bits, so values must be in range 00-7F - -keyboard_keyToCode = keyboard_keyToCode or { - ["backspace"] = 0x01, - ["tab"] = 0x02, - ["return"] = 0x03, - ["space"] = 0x04, - ["end"] = 0x05, - ["home"] = 0x06, - ["left"] = 0x07, - ["up"] = 0x08, - ["right"] = 0x09, - ["down"] = 0x0A, - ["insert"] = 0x0B, - ["delete"] = 0x0C, - - ["0"] = 0x10, - ["1"] = 0x11, - ["2"] = 0x12, - ["3"] = 0x13, - ["4"] = 0x14, - ["5"] = 0x15, - ["6"] = 0x16, - ["7"] = 0x17, - ["8"] = 0x18, - ["9"] = 0x19, - - ["a"] = 0x1A, - ["b"] = 0x1B, - ["c"] = 0x1C, - ["d"] = 0x1D, - ["e"] = 0x1E, - ["f"] = 0x1F, - ["g"] = 0x20, - ["h"] = 0x21, - ["i"] = 0x22, - ["j"] = 0x23, - ["k"] = 0x24, - ["l"] = 0x25, - ["m"] = 0x26, - ["n"] = 0x27, - ["o"] = 0x28, - ["p"] = 0x29, - ["q"] = 0x2A, - ["r"] = 0x2B, - ["s"] = 0x2C, - ["t"] = 0x2D, - ["u"] = 0x2E, - ["v"] = 0x2F, - ["w"] = 0x30, - ["x"] = 0x31, - ["y"] = 0x32, - ["z"] = 0x33, - - ["numpad0"] = 0x40, - ["numpad1"] = 0x41, - ["numpad2"] = 0x42, - ["numpad3"] = 0x43, - ["numpad4"] = 0x44, - ["numpad5"] = 0x45, - ["numpad6"] = 0x46, - ["numpad7"] = 0x47, - ["numpad8"] = 0x48, - ["numpad9"] = 0x49, - ["*"] = 0x4A, - ["+"] = 0x4B, - ["numpadenter"] = 0x4C, - ["minus"] = 0x4D, - ["numpaddecimal"] = 0x4E, - ["/"] = 0x4F, - - ["f1"] = 0x51, - ["f2"] = 0x52, - ["f3"] = 0x53, - ["f4"] = 0x54, - ["f5"] = 0x55, - ["f6"] = 0x56, - ["f7"] = 0x57, - ["f8"] = 0x58, - ["f9"] = 0x59, - ["f10"] = 0x5A, - ["f11"] = 0x5B, - ["f12"] = 0x5C, - - ["lshift"] = 0x60, - ["rshift"] = 0x61, - ["lcontrol"] = 0x62, - ["rcontrol"] = 0x63, - ["lalt"] = 0x64, - ["ralt"] = 0x65, - - [";"] = 0x70, - [","] = 0x71, - ["."] = 0x72, - ["/"] = 0x73, - ["`"] = 0x74, - ["["] = 0x75, - ["\\"] = 0x76, - ["]"] = 0x77, - [" ="] = 0x78, - ["apostrophe"] = 0x79, - - ["invalid"] = 0x7F, -} - -return function(gate) - gate.queueBits = {} -end + +return function(gate) + gate.queueBits = {} +end diff --git a/bricks/inputs/keyboard.cs b/bricks/inputs/keyboard.cs index 6d4fe52..190333d 100644 --- a/bricks/inputs/keyboard.cs +++ b/bricks/inputs/keyboard.cs @@ -1,49 +1,50 @@ - -datablock fxDTSBrickData(LogicGate_Keyboard_Data){ - brickFile = $LuaLogic::Path @ "bricks/blb/keyboardgate.blb"; - category = "Logic Bricks"; - subCategory = "Inputs"; - uiName = "Input Keyboard"; - iconName = $LuaLogic::Path @ "icons/Input Keyboard"; - orientationFix = 3; - - isLogic = true; - isLogicGate = true; - isLogicInput = true; - - logicUIName = "Input Keyboard"; - logicUIDesc = ""; - - logicInit = lualogic_readfile($LuaLogic::Path @ "bricks/inputs/keyboard-init.lua" ); - logicInput = lualogic_readfile($LuaLogic::Path @ "bricks/inputs/keyboard-input.lua" ); - logicUpdate = lualogic_readfile($LuaLogic::Path @ "bricks/inputs/keyboard-update.lua"); - - numLogicPorts = 1; - - logicPortType[0] = 0; - logicPortPos[0] = "2 0 0"; - logicPortDir[0] = 1; - logicPortUIName[0] = "R"; - -}; -lualogic_registergatedefinition("LogicGate_Keyboard_Data"); - -function LogicGate_Keyboard_Data::LuaLogic_PressKey(%data, %brick, %key, %state){ - %key = strReplace(%key, ";", "\\:"); - lualogic_sendInput(%brick, 2, %key, %state); -} - -function serverCmdLInputKey(%client, %key, %state){ - %brick = %client.Logic_InputKeyboard; - if(isObject(%brick) && %client.Logic_InputActive){ - %brick.getDatablock().LuaLogic_PressKey(%brick, %key, %state); - } -} - -function LogicGate_Keyboard_Data::Logic_OnInput(%data, %brick, %pos, %norm, %client){ - if(isObject(%client)){ - %client.Logic_InputKeyboard = %brick; - %client.Logic_InputActive = true; - commandToClient(%client, 'LStartInput'); - } -} + +datablock fxDTSBrickData(LogicGate_Keyboard_Data){ + brickFile = $LuaLogic::Path @ "bricks/blb/keyboardgate.blb"; + category = "Logic Bricks"; + subCategory = "Inputs"; + uiName = "Input Keyboard"; + iconName = $LuaLogic::Path @ "icons/Input Keyboard"; + orientationFix = 3; + + isLogic = true; + isLogicGate = true; + isLogicInput = true; + + logicUIName = "Input Keyboard"; + logicUIDesc = ""; + + logicInit = lualogic_readfile($LuaLogic::Path @ "bricks/inputs/keyboard-init.lua" ); + logicInput = lualogic_readfile($LuaLogic::Path @ "bricks/inputs/keyboard-input.lua" ); + logicUpdate = lualogic_readfile($LuaLogic::Path @ "bricks/inputs/keyboard-update.lua"); + logicGlobal = lualogic_readfile($LuaLogic::Path @ "bricks/inputs/keyboard-global.lua"); + + numLogicPorts = 1; + + logicPortType[0] = 0; + logicPortPos[0] = "2 0 0"; + logicPortDir[0] = 1; + logicPortUIName[0] = "R"; + +}; +lualogic_registergatedefinition("LogicGate_Keyboard_Data"); + +function LogicGate_Keyboard_Data::LuaLogic_PressKey(%data, %brick, %key, %state){ + %key = strReplace(%key, ";", "\\:"); + lualogic_sendInput(%brick, 2, %key, %state); +} + +function serverCmdLInputKey(%client, %key, %state){ + %brick = %client.Logic_InputKeyboard; + if(isObject(%brick) && %client.Logic_InputActive){ + %brick.getDatablock().LuaLogic_PressKey(%brick, %key, %state); + } +} + +function LogicGate_Keyboard_Data::Logic_OnInput(%data, %brick, %pos, %norm, %client){ + if(isObject(%client)){ + %client.Logic_InputKeyboard = %brick; + %client.Logic_InputActive = true; + commandToClient(%client, 'LStartInput'); + } +} diff --git a/bricks/outputs/TextBrick.cs b/bricks/outputs/TextBrick.cs index 16e3087..4bf457a 100644 --- a/bricks/outputs/TextBrick.cs +++ b/bricks/outputs/TextBrick.cs @@ -1,36 +1,34 @@ - -datablock fxDTSBrickData(LogicGate_TextBrick_Data){ - brickFile = $LuaLogic::Path @ "bricks/blb/TextBrick.blb"; - category = "Logic Bricks"; - subCategory = "Outputs"; - uiName = "Text Brick"; - iconName = $LuaLogic::Path @ "icons/Text Brick"; - hasPrint = 1; - printAspectRatio = "Logic"; - orientationFix = 3; - - isLogic = true; - isLogicGate = true; - isLogicInput = false; - - logicUIName = "Text Brick"; - logicUIDesc = "Resets on rise, increments based on pulse length"; - - logicInit = lualogic_readfile($LuaLogic::Path @ "bricks/outputs/text-init.lua" ); - logicUpdate = lualogic_readfile($LuaLogic::Path @ "bricks/outputs/text-update.lua"); - - numLogicPorts = 1; - - logicPortType[0] = 1; - logicPortPos[0] = "0 0 -1"; - logicPortDir[0] = 3; - logicPortCauseUpdate[0] = true; - logicPortUIName[0] = "Inc"; -}; -lualogic_registergatedefinition("LogicGate_TextBrick_Data"); - -function LogicGate_TextBrick_Data::LuaLogic_Callback(%data, %brick, %args){ - %printname = getField(%args, 0); - - %brick.setPrint(lualogic_getprint(%printname)); -} + +datablock fxDTSBrickData(LogicGate_TextBrick_Data){ + brickFile = $LuaLogic::Path @ "bricks/blb/TextBrick.blb"; + category = "Logic Bricks"; + subCategory = "Outputs"; + uiName = "Text Brick"; + iconName = $LuaLogic::Path @ "icons/Text Brick"; + hasPrint = 1; + printAspectRatio = "Logic"; + orientationFix = 3; + + isLogic = true; + isLogicGate = true; + isLogicInput = false; + + logicUIName = "Text Brick"; + logicUIDesc = "Resets on rise, increments based on pulse length"; + + logicInit = lualogic_readfile($LuaLogic::Path @ "bricks/outputs/text-init.lua" ); + logicUpdate = lualogic_readfile($LuaLogic::Path @ "bricks/outputs/text-update.lua"); + + numLogicPorts = 1; + + logicPortType[0] = 1; + logicPortPos[0] = "0 0 -1"; + logicPortDir[0] = 3; + logicPortCauseUpdate[0] = true; + logicPortUIName[0] = "Inc"; +}; +lualogic_registergatedefinition("LogicGate_TextBrick_Data"); + +function LogicGate_TextBrick_Data::LuaLogic_Callback(%data, %brick, %printname){ + %brick.setPrint(lualogic_getprint(%printname)); +} diff --git a/bricks/outputs/text-update.lua b/bricks/outputs/text-update.lua index af444d2..a5d4ee2 100644 --- a/bricks/outputs/text-update.lua +++ b/bricks/outputs/text-update.lua @@ -1,13 +1,13 @@ - -return function(gate) - if gate.ports[1]:isrising() then - gate.tickStarted = gate:gettick() - elseif gate.ports[1]:isfalling() then - local ticksOn = gate:gettick() - gate.tickStarted - - local printid = ((ticksOn-1) % #textbrick_idxToPrint) - local printname = textbrick_idxToPrint[printid] - - gate:cb("1\t" .. printname) - end -end + +return function(gate) + if gate.ports[1]:isrising() then + gate.tickStarted = gate:gettick() + elseif gate.ports[1]:isfalling() then + local ticksOn = gate:gettick() - gate.tickStarted + + local printid = ((ticksOn-1) % #textbrick_idxToPrint) + local printname = textbrick_idxToPrint[printid] + + gate:cb(printname) + end +end diff --git a/scripts/tcp.cs b/scripts/tcp.cs index f56c967..c120b56 100644 --- a/scripts/tcp.cs +++ b/scripts/tcp.cs @@ -69,6 +69,7 @@ function LuaLogicTCP::onLine(%this, %line) if(isObject(%client)) { %info = getField(%line, 2); + %info = lualogic_collapseescape(%info); %info = strReplace(%info, "\\c0", "\c0"); %info = strReplace(%info, "\\c2", "\c2"); %info = strReplace(%info, "\\c5", "\c5"); diff --git a/scripts/utilities.cs b/scripts/utilities.cs index ab12707..62cdcb4 100644 --- a/scripts/utilities.cs +++ b/scripts/utilities.cs @@ -268,7 +268,7 @@ function lualogic_collapseescape(%str){ %ci = getSubStr(%str, %i, 1); %co = %ci; - if(%ci=="\\" && %i<%len-1){ + if(%ci$="\\" && %i<%len-1){ %i++; %ci = getSubStr(%str, %i, 1); for(%j=0; %j<$LuaLogic::EscapeCount; %j++){