Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- os.loadAPI('apis.lua')
- args = { ... }
- if #args < 1 then
- -- error('radio <direction of turtle in relationship to radio>')
- direction = 'down'
- else
- direction = args[1]
- end
- radio = Peripheral.wrap('openblocks_radio')
- rs.setAnalogOutput('top', 0)
- local monitor = UI.Device({
- deviceType = 'monitor',
- textScale = 0.5,
- })
- UI.setDefaultDevice(monitor)
- page = UI.Page({
- volume = 6,
- stationBackground = UI.Window({
- y = 2,
- x = 2,
- width = monitor.width - 14,
- height = 3,
- backgroundColor = colors.brown,
- }),
- stationName = UI.Text({
- y = 3,
- x = 3,
- width = monitor.width-16,
- backgroundColor = colors.brown,
- }),
- seek = UI.Button({
- y = 7,
- x = 13,
- height = 3,
- event = 'seek',
- text = ' >> ',
- }),
- play = UI.Button({
- y = 7,
- x = 2,
- height = 3,
- event = 'play',
- text = '> / ll',
- }),
- louder = UI.Button({
- y = 7,
- x = monitor.width - 15,
- width = 3,
- height = 3,
- event = 'louder',
- text = '+',
- }),
- quiet = UI.Button({
- y = 7,
- x = monitor.width - 20,
- event = 'quiet',
- width = 3,
- height = 3,
- text = '-',
- }),
- volumeDisplay = UI.Text({
- y = 3,
- x = monitor.width - 9,
- width = 4,
- }),
- volume1 = UI.Window({
- y = monitor.height - 1,
- x = monitor.width - 8,
- height = 1,
- width = 1,
- color = colors.white
- }),
- volume2 = UI.Window({
- y = monitor.height - 2,
- x = monitor.width - 7,
- height = 2,
- width = 1,
- color = colors.white
- }),
- volume3 = UI.Window({
- y = monitor.height - 3,
- x = monitor.width - 6,
- height = 3,
- width = 1,
- color = colors.yellow
- }),
- volume4 = UI.Window({
- y = monitor.height - 4,
- x = monitor.width - 5,
- height = 4,
- width = 1,
- color = colors.yellow,
- }),
- volume5 = UI.Window({
- y = monitor.height - 5,
- x = monitor.width - 4,
- height = 5,
- width = 1,
- color = colors.orange,
- }),
- volume6 = UI.Window({
- y = monitor.height - 6,
- x = monitor.width - 3,
- height = 6,
- width = 1,
- color = colors.orange,
- }),
- volume7 = UI.Window({
- y = monitor.height - 7,
- x = monitor.width - 2,
- height = 7,
- width = 1,
- color = colors.red,
- }),
- volume8 = UI.Window({
- y = monitor.height - 8,
- x = monitor.width - 1,
- height = 8,
- width = 1,
- color = colors.red,
- })
- })
- page.volumeControls = {
- page.volume1, page.volume2,
- page.volume3, page.volume4,
- page.volume5, page.volume6,
- page.volume7, page.volume8,
- }
- function page:eventHandler(event)
- if event.type == 'play' then
- if self.playing then
- self:play(false)
- else
- if not radio.getStackInSlot(1) then
- self:seek()
- end
- self:play(true)
- end
- elseif event.type == 'seek' then
- self:seek()
- self:play(true)
- elseif event.type == 'louder' then
- if self.playing then
- self:setVolume(self.volume + 1)
- end
- elseif event.type == 'quiet' then
- if self.playing then
- self:setVolume(self.volume - 1)
- end
- end
- end
- function page:setVolume(volume, displayOnly)
- volume = math.min(volume, 15)
- volume = math.max(volume, 1)
- self.volume = volume
- volume = math.ceil(volume / 2)
- for i = 1, volume do
- self.volumeControls[i].backgroundColor =
- self.volumeControls[i].color
- end
- for i = volume + 1, #self.volumeControls do
- self.volumeControls[i].backgroundColor = colors.black
- end
- for i = 1, #self.volumeControls do
- self.volumeControls[i]:clear()
- end
- local percent = math.ceil(self.volume / 15 * 100)
- self.volumeDisplay.value = percent .. '%'
- self.volumeDisplay:draw()
- if not displayOnly then
- rs.setAnalogOutput('top', self.volume)
- end
- end
- function page:seek()
- local slot = TL2.selectOpenSlot() or 0
- repeat
- slot = slot + 1
- if (slot > 16) then
- slot = 1
- end
- until turtle.getItemCount(slot) >= 1
- radio.pushItem(direction, 1, 1)
- radio.pullItem(direction, slot, 1)
- self:updateStationName()
- end
- function page:play(onOff)
- self.playing = onOff
- if self.playing then
- self:setVolume(self.volume)
- self:updateStationName()
- else
- -- self.stationName.value = 'Paused'
- self.stationName:draw()
- rs.setAnalogOutput('top', 0)
- end
- end
- function page.stationName:draw()
- self:clear()
- self:centeredWrite(1, self.value)
- end
- function page:updateStationName()
- local stack = radio.getStackInSlot(1)
- if stack then
- self.stationName.value = stack.name
- self.stationName:draw()
- end
- end
- Event.addHandler('heartbeat', function()
- if not page.playing then
- if page.stationName.value == '' then
- page:updateStationName()
- else
- page.stationName.value = ''
- page.stationName:draw()
- end
- end
- end)
- UI.pager:setPage(page)
- page:updateStationName()
- page:play(false)
- page:setVolume(page.volume, true)
- Logger.filter('event')
- Event.heartbeat(1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement