diff --git a/bricks/outputs/pixel-update.lua b/bricks/outputs/pixel-update.lua new file mode 100644 index 0000000..57bfcf2 --- /dev/null +++ b/bricks/outputs/pixel-update.lua @@ -0,0 +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 colorid = ((ticksOn-1) % 8) + local colorname = string.reverse(tobitstring(colorid, 3)) + + gate:cb(colorname) + end +end diff --git a/bricks/outputs/pixel.cs b/bricks/outputs/pixel.cs index c026ab7..b543db0 100644 --- a/bricks/outputs/pixel.cs +++ b/bricks/outputs/pixel.cs @@ -40,6 +40,11 @@ datablock fxDTSBrickData(LogicGate_Pixel_Data) }; lualogic_registergatedefinition("LogicGate_Pixel_Data"); +function LogicGate_Pixel_Data::LuaLogic_Callback(%this, %brick, %color){ + if(lualogic_isprint("COLOR" @ %color)) + %brick.setPrint(lualogic_getprint("COLOR" @ %color)); +} + datablock fxDTSBrickData(LogicGate_HorizontalPixel_Data : LogicGate_Pixel_Data) { brickFile = $LuaLogic::Path @ "bricks/blb/pixels/HPixel.blb"; @@ -80,12 +85,40 @@ datablock fxDTSBrickData(LogicGate_HorizontalPixel_Data : LogicGate_Pixel_Data) }; lualogic_registergatedefinition("LogicGate_HorizontalPixel_Data"); -function LogicGate_Pixel_Data::LuaLogic_Callback(%this, %brick, %color){ - if(lualogic_isprint("COLOR" @ %color)) - %brick.setPrint(lualogic_getprint("COLOR" @ %color)); -} - -function LogicGate_HorizontalPixel_Data::LuaLogic_Callback(%this, %obj, %data) -{ +function LogicGate_HorizontalPixel_Data::LuaLogic_Callback(%this, %obj, %data){ LogicGate_Pixel_Data::LuaLogic_Callback(%this, %obj, %data); } + +datablock fxDTSBrickData(LogicGate_SmallPixel_Data){ + brickFile = $LuaLogic::Path @ "bricks/blb/TextBrick.blb"; + category = "Logic Bricks"; + subCategory = "Outputs"; + uiName = "Small Pixel"; + iconName = $LuaLogic::Path @ "icons/Text Brick"; + hasPrint = 1; + printAspectRatio = "Logic"; + orientationFix = 3; + + isLogic = true; + isLogicGate = true; + isLogicInput = false; + + logicUIName = "Small pixel"; + logicUIDesc = "Resets on rise, increments based on pulse length"; + + logicInit = "return function(gate) gate.tickStarted = 0 end"; + logicUpdate = lualogic_readfile($LuaLogic::Path @ "bricks/outputs/pixel-update.lua"); + + numLogicPorts = 1; + + logicPortType[0] = 1; + logicPortPos[0] = "0 0 -1"; + logicPortDir[0] = 3; + logicPortCauseUpdate[0] = true; + logicPortUIName[0] = "Inc"; +}; +lualogic_registergatedefinition("LogicGate_SmallPixel_Data"); + +function LogicGate_SmallPixel_Data::LuaLogic_Callback(%data, %brick, %color){ + LogicGate_Pixel_Data::LuaLogic_Callback(%data, %brick, %color); +}