mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-20 11:09:21 +01:00
Ну кароч теперь оно светится, power, вся хуйня
This commit is contained in:
parent
1e173dee0c
commit
a59f7acc06
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -29,8 +29,7 @@ local speedMax = 1.75
|
|||||||
local bpmMin = 40
|
local bpmMin = 40
|
||||||
local bpmMax = 200
|
local bpmMax = 200
|
||||||
|
|
||||||
|
local powerButton
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
local tapes
|
local tapes
|
||||||
local tapeIndex
|
local tapeIndex
|
||||||
@ -99,22 +98,104 @@ local function getIsPlaying()
|
|||||||
return tape.proxy.getState() == "PLAYING"
|
return tape.proxy.getState() == "PLAYING"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-------------------------------- Background ------------------------------------------------
|
-------------------------------- Background ------------------------------------------------
|
||||||
|
|
||||||
|
local windowBackground = window:addChild(GUI.object(1, 1, window.width, window.height))
|
||||||
|
|
||||||
local currentJogIndex = 1
|
local currentJogIndex = 1
|
||||||
|
local displayWidth, displayHeight = 33, 9
|
||||||
|
|
||||||
local windowBackground = window:addChild(GUI.object(1, 1, window.width, window.height))
|
local function displayDrawProgressBar(x, y, width, progress)
|
||||||
|
local progressActiveWidth = math.floor(progress * width)
|
||||||
|
|
||||||
|
screen.drawText(x, y, 0xE1E1E1, string.rep("━", progressActiveWidth))
|
||||||
|
screen.drawText(x + progressActiveWidth, y, 0x4B4B4B, string.rep("━", width - progressActiveWidth))
|
||||||
|
end
|
||||||
|
|
||||||
windowBackground.draw = function(windowBackground)
|
windowBackground.draw = function(windowBackground)
|
||||||
-- Background
|
-- Background
|
||||||
screen.drawImage(windowBackground.x, windowBackground.y, backgroundImage)
|
screen.drawImage(windowBackground.x, windowBackground.y, backgroundImage)
|
||||||
|
|
||||||
|
|
||||||
|
-- Speed slider indicator
|
||||||
|
screen.drawText(windowBackground.x + 68, windowBackground.y + 39, powerButton.pressed and 0xFFDB40 or 0x332400, "⠆")
|
||||||
|
|
||||||
|
-- Ignoring if power is off
|
||||||
|
if not powerButton.pressed then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
-- Jog
|
-- Jog
|
||||||
screen.drawImage(windowBackground.x + 33, windowBackground.y + 29, jogImages[currentJogIndex])
|
screen.drawImage(windowBackground.x + 33, windowBackground.y + 29, jogImages[currentJogIndex])
|
||||||
|
|
||||||
|
-- Display
|
||||||
|
local displayX, displayY = windowBackground.x + 22, windowBackground.y + 3
|
||||||
|
local displayUpperText
|
||||||
|
|
||||||
|
if tapeWritingProgress then
|
||||||
|
displayUpperText = "Writing in progress"
|
||||||
|
|
||||||
|
local progressWidth = displayWidth - 4
|
||||||
|
|
||||||
|
displayDrawProgressBar(
|
||||||
|
math.floor(displayX + displayWidth / 2 - progressWidth / 2),
|
||||||
|
math.floor(displayY + displayHeight / 2),
|
||||||
|
progressWidth,
|
||||||
|
tapeWritingProgress
|
||||||
|
)
|
||||||
|
else
|
||||||
|
-- UpperText
|
||||||
|
displayUpperText = tape.proxy.getLabel()
|
||||||
|
|
||||||
|
if not displayUpperText or #displayUpperText == 0 then
|
||||||
|
displayUpperText = "Untitled tape"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- BPM
|
||||||
|
local bpmText = tostring(math.floor(bpmMin + speedSlider.value * (bpmMax - bpmMin))) .. " bpm"
|
||||||
|
local bpmWidth = #bpmText + 4
|
||||||
|
|
||||||
|
local bpmX = displayX + displayWidth - 2 - bpmWidth
|
||||||
|
local bpmY = displayY + displayHeight - 5
|
||||||
|
|
||||||
|
screen.drawFrame(bpmX, bpmY, bpmWidth, 3, 0xE1E1E1)
|
||||||
|
screen.drawText(bpmX + 2, bpmY + 1, 0xE1E1E1, bpmText)
|
||||||
|
|
||||||
|
-- Lower track
|
||||||
|
local progressWidth = displayWidth - 4
|
||||||
|
local tapeSize = tape.proxy.getSize()
|
||||||
|
|
||||||
|
displayDrawProgressBar(
|
||||||
|
math.floor(displayX + displayWidth / 2 - progressWidth / 2),
|
||||||
|
displayY + displayHeight - 2,
|
||||||
|
progressWidth,
|
||||||
|
tapeSize == 0 and 0 or tape.proxy.getPosition() / tapeSize
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- UpperText
|
||||||
|
displayUpperText = text.limit(displayUpperText, displayWidth - 2)
|
||||||
|
screen.drawText(math.floor(displayX + displayWidth / 2 - #displayUpperText / 2), displayY + 1, 0xE1E1E1, displayUpperText)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-------------------------------- Power button ------------------------------------------------
|
||||||
|
|
||||||
|
powerButton = window:addChild(GUI.object(75, 2, 4, 2))
|
||||||
|
|
||||||
|
powerButton.pressed = false
|
||||||
|
|
||||||
|
powerButton.draw = function()
|
||||||
|
screen.drawText(powerButton.x, powerButton.y, 0x1E1E1E, powerButton.pressed and "⣠⣤⣄" or "⣸⣿⣇")
|
||||||
|
end
|
||||||
|
|
||||||
|
powerButton.eventHandler = function(workspace, powerButton, e1)
|
||||||
|
if e1 == "touch" then
|
||||||
|
powerButton.pressed = not powerButton.pressed
|
||||||
|
workspace:draw()
|
||||||
|
|
||||||
|
computer.beep(20, 0.01)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-------------------------------- ImageButton ------------------------------------------------
|
-------------------------------- ImageButton ------------------------------------------------
|
||||||
|
|
||||||
@ -123,7 +204,7 @@ local imageButtonBlinkUptime = 0
|
|||||||
local imageButtonBlinkInterval = 0.5
|
local imageButtonBlinkInterval = 0.5
|
||||||
|
|
||||||
local function imageButtonDraw(button)
|
local function imageButtonDraw(button)
|
||||||
screen.drawImage(button.x, button.y, (not button.blinking or imageButtonBlink) and button.imageOn or button.imageOff)
|
screen.drawImage(button.x, button.y, (powerButton.pressed and (not button.blinking or imageButtonBlink)) and button.imageOn or button.imageOff)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function newImageButton(x, y, width, height, name)
|
local function newImageButton(x, y, width, height, name)
|
||||||
@ -164,12 +245,10 @@ speedSlider.eventHandler = function(workspace, speedSlider, e1, e2, e3, e4)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-------------------------------- UpperButtons ------------------------------------------------
|
-------------------------------- UpperButtons ------------------------------------------------
|
||||||
|
|
||||||
local function upperButtonDraw(button)
|
local function upperButtonDraw(button)
|
||||||
local bg, fg = button.animationCurrentBackground, button.animationCurrentText
|
local bg, fg = button.animationCurrentBackground, powerButton.pressed and button.animationCurrentText or 0x0
|
||||||
|
|
||||||
-- Background
|
-- Background
|
||||||
screen.drawRectangle(button.x + 1, button.y + 1, button.width - 2, button.height - 2, bg, fg, " ")
|
screen.drawRectangle(button.x + 1, button.y + 1, button.width - 2, button.height - 2, bg, fg, " ")
|
||||||
@ -192,7 +271,7 @@ local function upperButtonDraw(button)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local function upperButtonEventHandler(workspace, button, e1, e2, e3, e4, e5)
|
local function upperButtonEventHandler(workspace, button, e1, e2, e3, e4, e5)
|
||||||
if e1 == "touch" then
|
if e1 == "touch" and powerButton.pressed then
|
||||||
button:press()
|
button:press()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -259,11 +338,11 @@ writeUpperButton.onTouch = function()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------- Write upper button ------------------------------------------------
|
-------------------------------- Label upper button ------------------------------------------------
|
||||||
|
|
||||||
local writeUpperButton = window:addChild(newUpperButton(33, 1, 9, "Label"))
|
local labelUpperButton = window:addChild(newUpperButton(33, 1, 9, "Label"))
|
||||||
|
|
||||||
writeUpperButton.onTouch = function()
|
labelUpperButton.onTouch = function()
|
||||||
local container = GUI.addBackgroundContainer(workspace, true, true, title)
|
local container = GUI.addBackgroundContainer(workspace, true, true, title)
|
||||||
|
|
||||||
local input = container.layout:addChild(GUI.input(1, 1, 36, 3, 0xE1E1E1, 0x696969, 0x969696, 0xE1E1E1, 0x2D2D2D, tape.proxy.getLabel() or "", "New label", false))
|
local input = container.layout:addChild(GUI.input(1, 1, 36, 3, 0xE1E1E1, 0x696969, 0x969696, 0xE1E1E1, 0x2D2D2D, tape.proxy.getLabel() or "", "New label", false))
|
||||||
@ -283,80 +362,20 @@ writeUpperButton.onTouch = function()
|
|||||||
return container
|
return container
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-------------------------------- Display ------------------------------------------------
|
|
||||||
|
|
||||||
local display = window:addChild(GUI.object(23, 4, 33, 9))
|
|
||||||
|
|
||||||
local function displayDrawProgressBar(x, y, width, progress)
|
|
||||||
local progressActiveWidth = math.floor(progress * width)
|
|
||||||
|
|
||||||
screen.drawText(x, y, 0xE1E1E1, string.rep("━", progressActiveWidth))
|
|
||||||
screen.drawText(x + progressActiveWidth, y, 0x4B4B4B, string.rep("━", width - progressActiveWidth))
|
|
||||||
end
|
|
||||||
|
|
||||||
display.draw = function(display)
|
|
||||||
local upperText
|
|
||||||
|
|
||||||
if tapeWritingProgress then
|
|
||||||
upperText = "Writing in progress"
|
|
||||||
|
|
||||||
local progressWidth = display.width - 4
|
|
||||||
|
|
||||||
displayDrawProgressBar(
|
|
||||||
math.floor(display.x + display.width / 2 - progressWidth / 2),
|
|
||||||
math.floor(display.y + display.height / 2),
|
|
||||||
progressWidth,
|
|
||||||
tapeWritingProgress
|
|
||||||
)
|
|
||||||
|
|
||||||
else
|
|
||||||
-- UpperText
|
|
||||||
upperText = tape.proxy.getLabel()
|
|
||||||
|
|
||||||
if not upperText or #upperText == 0 then
|
|
||||||
upperText = "Untitled tape"
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- BPM
|
|
||||||
local bpmText = tostring(math.floor(bpmMin + speedSlider.value * (bpmMax - bpmMin))) .. " bpm"
|
|
||||||
local bpmWidth = #bpmText + 4
|
|
||||||
|
|
||||||
local bpmX = display.x + display.width - 2 -bpmWidth
|
|
||||||
local bpmY = display.y + display.height - 5
|
|
||||||
|
|
||||||
screen.drawFrame(bpmX, bpmY, bpmWidth, 3, 0xE1E1E1)
|
|
||||||
screen.drawText(bpmX + 2, bpmY + 1, 0xE1E1E1, bpmText)
|
|
||||||
|
|
||||||
-- Lower track
|
|
||||||
local progressWidth = display.width - 4
|
|
||||||
local tapeSize = tape.proxy.getSize()
|
|
||||||
|
|
||||||
displayDrawProgressBar(
|
|
||||||
math.floor(display.x + display.width / 2 - progressWidth / 2),
|
|
||||||
display.y + display.height - 2,
|
|
||||||
progressWidth,
|
|
||||||
tapeSize == 0 and 0 or tape.proxy.getPosition() / tapeSize
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- UpperText
|
|
||||||
upperText = text.limit(upperText, display.width - 2)
|
|
||||||
screen.drawText(math.floor(display.x + display.width / 2 - #upperText / 2), display.y + 1, 0xE1E1E1, upperText)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-------------------------------- Needle search ------------------------------------------------
|
-------------------------------- Needle search ------------------------------------------------
|
||||||
|
|
||||||
local needleSearch = window:addChild(GUI.object(25, 15, 29, 2))
|
local needleSearch = window:addChild(GUI.object(25, 15, 29, 2))
|
||||||
|
|
||||||
-- needleSearch.draw = function()
|
needleSearch.draw = function()
|
||||||
-- screen.drawRectangle(needleSearch.x, needleSearch.y, needleSearch.width, needleSearch.height, 0xFF0000, 0x0, " ")
|
-- screen.drawRectangle(needleSearch.x, needleSearch.y, needleSearch.width, needleSearch.height, 0xFF0000, 0x0, " ")
|
||||||
-- end
|
|
||||||
|
if powerButton.pressed then
|
||||||
|
screen.drawText(needleSearch.x, needleSearch.y, 0xE1E1E1, "▲ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ╷ ▲")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
needleSearch.eventHandler = function(workspace, needleSearch, e1, e2, e3, e4)
|
needleSearch.eventHandler = function(workspace, needleSearch, e1, e2, e3, e4)
|
||||||
if e1 == "touch" and tape then
|
if e1 == "touch" and powerButton.pressed and tape then
|
||||||
local position = tape.proxy.getPosition()
|
local position = tape.proxy.getPosition()
|
||||||
local newPosition = math.floor((e3 - needleSearch.x) / needleSearch.width * tape.proxy.getSize())
|
local newPosition = math.floor((e3 - needleSearch.x) / needleSearch.width * tape.proxy.getSize())
|
||||||
|
|
||||||
@ -364,10 +383,10 @@ needleSearch.eventHandler = function(workspace, needleSearch, e1, e2, e3, e4)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-------------------------------- Left mini button ------------------------------------------------
|
-------------------------------- Round mini button ------------------------------------------------
|
||||||
|
|
||||||
local function leftMiniButtonDraw(button)
|
local function roundMiniButtonDraw(button)
|
||||||
local bg, fg = button.animationCurrentBackground, button.animationCurrentText
|
local bg, fg = button.animationCurrentBackground, powerButton.pressed and button.animationCurrentText or 0x0
|
||||||
|
|
||||||
-- Background
|
-- Background
|
||||||
screen.drawRectangle(button.x + 1, button.y + 1, button.width - 2, button.height - 2, bg, fg, " ")
|
screen.drawRectangle(button.x + 1, button.y + 1, button.width - 2, button.height - 2, bg, fg, " ")
|
||||||
@ -386,20 +405,47 @@ local function leftMiniButtonDraw(button)
|
|||||||
|
|
||||||
-- Lower
|
-- Lower
|
||||||
screen.drawText(button.x + 1, button.y + button.height - 1, bg, string.rep("⠉", button.width - 2))
|
screen.drawText(button.x + 1, button.y + button.height - 1, bg, string.rep("⠉", button.width - 2))
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
local function leftMiniButtonEventHandler(workspace, button, e1, e2, e3, e4, e5)
|
|
||||||
|
local function roundMiniButtonEventHandler(workspace, button, e1, e2, e3, e4, e5)
|
||||||
if e1 == "touch" then
|
if e1 == "touch" then
|
||||||
button:press()
|
button:press()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local function newLeftMiniButton(x, y, text)
|
local function newRoundMiniButton(x, y, ...)
|
||||||
local button = GUI.button(x, y, 4, 3, 0x4B4B4B, 0xFFB600, 0x2D2D2D, 0xCC9200, text)
|
local button = GUI.button(x, y, 4, 3, ...)
|
||||||
|
|
||||||
button.draw = leftMiniButtonDraw
|
button.draw = roundMiniButtonDraw
|
||||||
button.eventHandler = leftMiniButtonEventHandler
|
button.eventHandler = roundMiniButtonEventHandler
|
||||||
|
|
||||||
|
return button
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
local function roundTinyButtonDraw(button)
|
||||||
|
local bg, fg = button.animationCurrentBackground, powerButton.pressed and button.animationCurrentText or 0x0
|
||||||
|
|
||||||
|
-- Left
|
||||||
|
screen.drawText(button.x, button.y, bg, "⢰")
|
||||||
|
|
||||||
|
-- Middle
|
||||||
|
screen.drawRectangle(button.x + 1, button.y, 2, 1, bg, fg, " ")
|
||||||
|
screen.drawText(button.x + 1, button.y, fg, button.text)
|
||||||
|
|
||||||
|
-- Right
|
||||||
|
screen.drawText(button.x + 3, button.y, bg, "⡆")
|
||||||
|
|
||||||
|
-- Lower
|
||||||
|
screen.drawText(button.x, button.y + 1, bg, "⠈⠛⠛⠁")
|
||||||
|
end
|
||||||
|
|
||||||
|
local function newRoundTinyButton(x, y, ...)
|
||||||
|
local button = GUI.button(x, y, 4, 2, ...)
|
||||||
|
|
||||||
|
button.draw = roundTinyButtonDraw
|
||||||
|
button.eventHandler = roundMiniButtonEventHandler
|
||||||
|
|
||||||
return button
|
return button
|
||||||
end
|
end
|
||||||
@ -407,8 +453,8 @@ end
|
|||||||
|
|
||||||
-------------------------------- Pref/next tape button ------------------------------------------------
|
-------------------------------- Pref/next tape button ------------------------------------------------
|
||||||
|
|
||||||
local previousTapeButton = window:addChild(newLeftMiniButton(2, 30, "<<"))
|
local previousTapeButton = window:addChild(newRoundMiniButton(2, 30, 0x2D2D2D, 0xFFB600, 0x0F0F0F, 0xCC9200, "<<"))
|
||||||
local nextTapeButton = window:addChild(newLeftMiniButton(7, 30, ">>"))
|
local nextTapeButton = window:addChild(newRoundMiniButton(7, 30, 0x2D2D2D, 0xFFB600, 0x0F0F0F, 0xCC9200, ">>"))
|
||||||
|
|
||||||
previousTapeButton.onTouch = function()
|
previousTapeButton.onTouch = function()
|
||||||
incrementTape(false)
|
incrementTape(false)
|
||||||
@ -420,8 +466,8 @@ end
|
|||||||
|
|
||||||
-------------------------------- Pref/next search button ------------------------------------------------
|
-------------------------------- Pref/next search button ------------------------------------------------
|
||||||
|
|
||||||
local previousSearchButton = window:addChild(newLeftMiniButton(2, 34, "<<"))
|
local previousSearchButton = window:addChild(newRoundMiniButton(2, 34, 0x2D2D2D, 0xFFB600, 0x0F0F0F, 0xCC9200, "<<"))
|
||||||
local nextSearchButton = window:addChild(newLeftMiniButton(7, 34, ">>"))
|
local nextSearchButton = window:addChild(newRoundMiniButton(7, 34, 0x2D2D2D, 0xFFB600, 0x0F0F0F, 0xCC9200, ">>"))
|
||||||
|
|
||||||
previousSearchButton.onTouch = function()
|
previousSearchButton.onTouch = function()
|
||||||
|
|
||||||
@ -449,7 +495,7 @@ local playButton = window:addChild(newImageButton(2, window.height - 5, 9, 5, "P
|
|||||||
playButton.blinking = true
|
playButton.blinking = true
|
||||||
|
|
||||||
playButton.eventHandler = function(workspace, playButton, e1)
|
playButton.eventHandler = function(workspace, playButton, e1)
|
||||||
if e1 == "touch" then
|
if e1 == "touch" and powerButton.pressed then
|
||||||
playButton.blinking = not playButton.blinking
|
playButton.blinking = not playButton.blinking
|
||||||
|
|
||||||
if playButton.blinking then
|
if playButton.blinking then
|
||||||
@ -462,6 +508,23 @@ playButton.eventHandler = function(workspace, playButton, e1)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-------------------------------- Right beat buttons ------------------------------------------------
|
||||||
|
|
||||||
|
local beatSyncButton = window:addChild(newRoundMiniButton(70, 24, 0xB4B4B4, 0x0F0F0F, 0x787878, 0x0F0F0F, "Sy"))
|
||||||
|
local beatSyncMasterButton = window:addChild(newRoundMiniButton(74, 24, 0xB4B4B4, 0x0F0F0F, 0x787878, 0x0F0F0F, "Ms"))
|
||||||
|
|
||||||
|
-------------------------------- Right tempo buttons ------------------------------------------------
|
||||||
|
|
||||||
|
local tempoButton = window:addChild(newRoundTinyButton(72, 28, 0x0F0F0F, 0x2D2D2D, 0x0, 0xFF2440, " "))
|
||||||
|
|
||||||
|
local masterTempoButton = window:addChild(newRoundTinyButton(72, 31, 0x0F0F0F, 0x2D2D2D, 0x0F0F0F, 0xFF2440, "⢠⡄"))
|
||||||
|
masterTempoButton.switchMode = true
|
||||||
|
masterTempoButton:press()
|
||||||
|
|
||||||
|
tempoButton.onTouch = function()
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
-------------------------------- Events ------------------------------------------------
|
-------------------------------- Events ------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user