mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-20 11:09:21 +01:00
91 lines
3.5 KiB
Lua
Executable File
91 lines
3.5 KiB
Lua
Executable File
local sides = require("sides")
|
|
|
|
local module = {
|
|
allowSignalConnections = true,
|
|
updateWhenModuleDetailsIsHidden = false,
|
|
}
|
|
|
|
-------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
local function changeRedstoneState(moduleContainer, state)
|
|
local sidesThatWillBeChanged = {}
|
|
local comboBoxText = moduleContainer.sidesComboBox.items[moduleContainer.sidesComboBox.currentItem].text
|
|
if comboBoxText == "All" then
|
|
sidesThatWillBeChanged = {0,1,2,3,4,5}
|
|
-- ecs.error("ALLL SIDES YOPTA")
|
|
else
|
|
sidesThatWillBeChanged = {sides[string.lower(comboBoxText)]}
|
|
-- ecs.error("HERE HERE: " .. sides[string.lower(comboBoxText)])
|
|
end
|
|
|
|
for i = 1, #sidesThatWillBeChanged do
|
|
moduleContainer.redstoneStates[sidesThatWillBeChanged[i]] = state
|
|
moduleContainer.componentProxy.setOutput(sidesThatWillBeChanged[i], state and 15 or 0)
|
|
end
|
|
end
|
|
|
|
-- This method is called once during module initialization
|
|
function module.start(moduleContainer)
|
|
local x, y = 2, moduleContainer.children[#moduleContainer.children].localPosition.y + 2
|
|
|
|
moduleContainer.redstoneStates = {}
|
|
for i = 0, 5 do
|
|
local signalStrength = moduleContainer.componentProxy.getOutput(i)
|
|
moduleContainer.redstoneStates[i] = signalStrength > 0 and true or false
|
|
end
|
|
|
|
moduleContainer:addLabel(x, y, moduleContainer.width - 2, 1, 0xDDDDDD, "Signal:")
|
|
moduleContainer.signalSwitch = moduleContainer:addSwitch(moduleContainer.width - 6, y, 6, 0xFFDB40, 0xBBBBBB, 0xFFFFFF, false)
|
|
moduleContainer.signalSwitch.onStateChanged = function()
|
|
changeRedstoneState(moduleContainer, moduleContainer.signalSwitch.state)
|
|
end
|
|
y = y + 2
|
|
moduleContainer.emitOnceButton = moduleContainer:addButton(2, y, moduleContainer.width - 2, 1, 0xDDDDDD, 0x262626, 0xAAAAAA, 0x262626, "Emit once")
|
|
moduleContainer.emitOnceButton.onTouch = function()
|
|
changeRedstoneState(moduleContainer, true)
|
|
os.sleep(0.1)
|
|
changeRedstoneState(moduleContainer, false)
|
|
moduleContainer.signalSwitch.state = false
|
|
end
|
|
y = y + 2
|
|
moduleContainer:addLabel(x, y, moduleContainer.width - 2, 1, 0xFFFFFF, "Side"):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top)
|
|
y = y + 2
|
|
moduleContainer.sidesComboBox = moduleContainer:addComboBox(x, y, moduleContainer.width - 2, 1, 0xDDDDDD, 0x262626, 0xCCCCCC, 0x262626, {"All", "Up", "Down", "North", "South", "West", "East"})
|
|
moduleContainer.sidesComboBox.onItemSelected = function()
|
|
local comboBoxText = moduleContainer.sidesComboBox.items[moduleContainer.sidesComboBox.currentItem].text
|
|
if comboBoxText == "All" then
|
|
moduleContainer.signalSwitch.state = false
|
|
else
|
|
local side = sides[string.lower(comboBoxText)]
|
|
moduleContainer.signalSwitch.state = moduleContainer.redstoneStates[side]
|
|
end
|
|
end
|
|
y = y + 2
|
|
end
|
|
|
|
-- This method is called on each frame update (every second by default), but only if module details is not hidden or updateWhenModuleDetailsIsHidden == true
|
|
function module.update(moduleContainer, eventData)
|
|
|
|
end
|
|
|
|
-- This method is called when a this module receives virtual signal from the another module, but only if field allowSignalConnections == true
|
|
function module.onSignalReceived(moduleContainer, ...)
|
|
local data = {...}
|
|
if data[1] == "redstone" and data[2] == "pulse" then
|
|
changeRedstoneState(moduleContainer, data[3])
|
|
end
|
|
end
|
|
|
|
-------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
return module
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|