mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-24 13:02:49 +01:00
145 lines
4.0 KiB
Lua
145 lines
4.0 KiB
Lua
local c = require("component")
|
|
local event = require("event")
|
|
local gpu = c.gpu
|
|
|
|
local xSize, ySize = gpu.getResolution()
|
|
|
|
local colors = {
|
|
whiteKeyColor = 0xffffff,
|
|
blackKeyColor = 0x000000,
|
|
background = 0x262626,
|
|
}
|
|
|
|
local sizes = {
|
|
widthOfWhiteKey = 3,
|
|
heightOfWhiteKey = 10,
|
|
widthOfBlackKey = 3,
|
|
heightOfBlackKey = 5,
|
|
doubleKeyBlockConst = 7,
|
|
}
|
|
sizes.yStartOfKeys = ySize - sizes.heightOfWhiteKey + 1
|
|
sizes.xStartOfKeys = 3
|
|
sizes.countOfKeysOnScreen = 0
|
|
|
|
local frequencyMultiplyer
|
|
local minFrequency, maxFrequency = 20, 2000
|
|
|
|
------------------------------------------------------------
|
|
|
|
--СОЗДАНИЕ ОБЪЕКТОВ
|
|
local obj = {}
|
|
local function newObj(class, name, ...)
|
|
obj[class] = obj[class] or {}
|
|
obj[class][name] = {...}
|
|
end
|
|
|
|
local function calculateFrequencyMultiplyer()
|
|
local difference = maxFrequency - minFrequency
|
|
frequencyMultiplyer = difference / sizes.countOfKeysOnScreen
|
|
end
|
|
|
|
local function drawKeysBlock(x, y, countOfWhite, countOfBlack)
|
|
local xPos = x
|
|
for i = 1, countOfWhite do
|
|
ecs.square(xPos, y, sizes.widthOfWhiteKey, sizes.heightOfWhiteKey, colors.whiteKeyColor)
|
|
|
|
sizes.countOfKeysOnScreen = sizes.countOfKeysOnScreen + 1
|
|
|
|
newObj("Keys", sizes.countOfKeysOnScreen, xPos, y + sizes.heightOfBlackKey, xPos + sizes.widthOfWhiteKey - 1, y + sizes.heightOfWhiteKey - 1, true)
|
|
|
|
xPos = xPos + sizes.widthOfWhiteKey + 1
|
|
end
|
|
xPos = x + 2
|
|
for i = 1, countOfBlack do
|
|
ecs.square(xPos, y, sizes.widthOfBlackKey, sizes.heightOfBlackKey, colors.blackKeyColor)
|
|
|
|
newObj("Keys", sizes.countOfKeysOnScreen + 1, xPos, y, xPos + sizes.widthOfBlackKey - 1, y + sizes.heightOfBlackKey - 1, false)
|
|
|
|
sizes.countOfKeysOnScreen = sizes.countOfKeysOnScreen + 1
|
|
|
|
xPos = xPos + sizes.widthOfBlackKey + 1
|
|
end
|
|
end
|
|
|
|
local function drawTwoKeysBlock(x, y)
|
|
drawKeysBlock(x, y, 3, 2)
|
|
end
|
|
|
|
local function drawThreeKeysBlock(x, y)
|
|
drawKeysBlock(x, y, 4, 3)
|
|
end
|
|
|
|
local function drawDoubleKeyBlock(x, y)
|
|
sizes.countOfKeysOnScreen = 0
|
|
local xPos = x
|
|
for i = 1, 3 do
|
|
drawTwoKeysBlock(xPos, y)
|
|
xPos = xPos + 3 * (sizes.widthOfWhiteKey + 1)
|
|
drawThreeKeysBlock(xPos, y)
|
|
xPos = xPos + 4 * (sizes.widthOfWhiteKey + 1)
|
|
end
|
|
drawTwoKeysBlock(xPos, y)
|
|
|
|
calculateFrequencyMultiplyer()
|
|
end
|
|
|
|
local function setFrequencyToKeys()
|
|
calculateFrequencyMultiplyer()
|
|
local justBecomeBlack = false
|
|
local whiteCounter = 0
|
|
local currentWhiteFrequency, currentBlackFrequency = minFrequency, minFrequency + frequencyMultiplyer
|
|
for i = 1, #obj["Keys"] do
|
|
if obj["Keys"][i][5] then
|
|
whiteCounter = whiteCounter + 1
|
|
justBecomeBlack = true
|
|
currentWhiteFrequency = currentWhiteFrequency + frequencyMultiplyer
|
|
obj["Keys"][i][6] = currentWhiteFrequency
|
|
else
|
|
if justBecomeBlack then currentBlackFrequency = currentWhiteFrequency - frequencyMultiplyer * (whiteCounter - 1); justBecomeBlack = false end
|
|
currentBlackFrequency = currentBlackFrequency + frequencyMultiplyer
|
|
obj["Keys"][i][6] = currentBlackFrequency
|
|
whiteCounter = 0
|
|
end
|
|
end
|
|
end
|
|
|
|
local function drawAll()
|
|
ecs.clearScreen(colors.background)
|
|
drawDoubleKeyBlock(sizes.xStartOfKeys, sizes.yStartOfKeys)
|
|
end
|
|
|
|
drawAll()
|
|
setFrequencyToKeys()
|
|
|
|
while true do
|
|
local e = {event.pull()}
|
|
if e[1] == "touch" then
|
|
for key, val in pairs(obj["Keys"]) do
|
|
if ecs.clickedAtArea(e[3], e[4], obj["Keys"][key][1], obj["Keys"][key][2], obj["Keys"][key][3], obj["Keys"][key][4]) then
|
|
if obj["Keys"][key][5] then
|
|
ecs.square(obj["Keys"][key][1], obj["Keys"][key][2], sizes.widthOfWhiteKey, sizes.heightOfWhiteKey - sizes.heightOfBlackKey, ecs.colors.green)
|
|
else
|
|
ecs.square(obj["Keys"][key][1], obj["Keys"][key][2], sizes.widthOfBlackKey, sizes.heightOfBlackKey, ecs.colors.green)
|
|
end
|
|
|
|
c.computer.beep(obj["Keys"][key][6])
|
|
|
|
if obj["Keys"][key][5] then
|
|
ecs.square(obj["Keys"][key][1], obj["Keys"][key][2], sizes.widthOfWhiteKey, sizes.heightOfWhiteKey - sizes.heightOfBlackKey, colors.whiteKeyColor)
|
|
else
|
|
ecs.square(obj["Keys"][key][1], obj["Keys"][key][2], sizes.widthOfBlackKey, sizes.heightOfBlackKey, colors.blackKeyColor)
|
|
end
|
|
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|