Igor Timofeev 2cc71a63ca aefaef
2017-01-09 14:40:42 +03:00

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