mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-21 11:39:23 +01:00
257 lines
8.7 KiB
Lua
257 lines
8.7 KiB
Lua
local component = require("component")
|
||
local event = require("event")
|
||
local term = require("term")
|
||
local unicode = require("unicode")
|
||
local ecs = require("ECSAPI")
|
||
local colorlib = require("colorlib")
|
||
|
||
local gpu = component.gpu
|
||
|
||
local palette = {}
|
||
|
||
------------------------------------------------------------------------------------
|
||
|
||
|
||
|
||
--РИСОВАТЬ ПАЛИТРОЧКУ
|
||
function palette.drawPalette(x,y,oldColor)
|
||
|
||
local windowSizeX = 73
|
||
local windowSizeY = 22
|
||
local x,y = ecs.correctStartCoords(x,y,windowSizeX,windowSizeY)
|
||
|
||
local MasterHue = 360
|
||
local MasterSat = 100
|
||
local MasterBri = 100
|
||
MasterHue,MasterSat,MasterBri = colorlib.HEXtoHSB(oldColor)
|
||
local MasterColor = colorlib.HSBtoHEX(MasterHue,MasterSat,MasterBri)
|
||
|
||
local rainbowBigWidth = 40
|
||
local rainbowBigHeight = 19
|
||
local masterColorX = x+rainbowBigWidth+9
|
||
local masterColorY = y+2
|
||
|
||
local krestX,krestY = 0,0
|
||
local oldKrest = {}
|
||
|
||
------------------------------------------------------------------------------------
|
||
|
||
--ОБЪЕКТЫ
|
||
local objects = {}
|
||
local function newObj(class,name,key,value)
|
||
objects[class] = objects[class] or {}
|
||
objects[class][name] = objects[class][name] or {}
|
||
objects[class][name][key] = value
|
||
end
|
||
|
||
local function drawSelector(x,y)
|
||
gpu.setBackground(ecs.windowColors.background)
|
||
gpu.setForeground(0x000000)
|
||
gpu.set(x,y,">")
|
||
gpu.set(x+4,y,"<")
|
||
end
|
||
|
||
local function drawRainbow(x,y,width,height)
|
||
local pizda = 360/height
|
||
|
||
--gpu.setBackground(ecs.windowColors.background)
|
||
--gpu.fill(x,y,5,height+1," ")
|
||
|
||
for i=1,height do
|
||
for j=1,width do
|
||
gpu.setBackground(colorlib.HSBtoHEX(i*pizda-1,100,100))
|
||
gpu.set(x+j,y+i," ")
|
||
end
|
||
end
|
||
|
||
x = x + 1
|
||
y = y + 1
|
||
newObj("palette","small","x1",x);newObj("palette","small","x2",x+width-1);newObj("palette","small","y1",y);newObj("palette","small","y2",y+height-1)
|
||
end
|
||
|
||
local function drawKREST(pointX,pointY)
|
||
--ЭТО КУРСОРЧИК КРЕСТИК
|
||
ecs.invertedText(pointX-2,pointY,"̶")
|
||
ecs.invertedText(pointX+2,pointY,"̶")
|
||
ecs.invertedText(pointX-1,pointY,"̶")
|
||
ecs.invertedText(pointX+1,pointY,"̶")
|
||
ecs.invertedText(pointX,pointY-1,"|")
|
||
ecs.invertedText(pointX,pointY+1,"|")
|
||
end
|
||
|
||
local function drawRainbowBig(x,y,width,height,MasterColor)
|
||
|
||
--ЖИРНАЯ ГЛАВНАЯ ПИЗДОРАДУГА, ВЕРНЕЕ, ЕЕ ОЧИСТКА
|
||
gpu.setBackground(ecs.windowColors.background)
|
||
gpu.fill(x+width+1,y,6,height+2," ")
|
||
|
||
--gpu.setBackground(ecs.colors.red)
|
||
gpu.fill(x,y,width+2,1," ")
|
||
gpu.fill(x,y,1,height," ")
|
||
gpu.fill(x,y+height+1,width+2,1," ")
|
||
gpu.fill(x+width+1,y,1,height," ")
|
||
|
||
--РАСЧЕТ ВСЯКОЙ ШНЯГИ
|
||
--local hue, sat, bri = colorlib.HEXtoHSB(MasterColor)
|
||
local hue, sat, bri = MasterHue,MasterSat,MasterBri
|
||
--hue = hue - 1
|
||
--MasterColor = hue
|
||
|
||
--МИНИ-РАДУГА
|
||
local xMini = x+width+2
|
||
drawRainbow(xMini,y,3,height)
|
||
|
||
--СЕЛЕКТОР МИНИ-РАДУГИ
|
||
local miniHue = ecs.adaptiveRound(hue*height/360)
|
||
drawSelector(xMini,y+miniHue)
|
||
|
||
--ВОТ ТУТ УЖЕ САМА БОЛЬШАЯ ШНЯГА
|
||
local pizda1 = 100/width
|
||
local pizda2 = 100/height
|
||
|
||
for i=1,height do
|
||
for j=1,width do
|
||
gpu.setBackground(colorlib.HSBtoHEX(MasterHue,j*pizda1,100-i*pizda2))
|
||
gpu.set(x+j,y+i," ")
|
||
end
|
||
end
|
||
|
||
newObj("palette","big","x1",x+1);newObj("palette","big","x2",x+width);newObj("palette","big","y1",y+1);newObj("palette","big","y2",y+height)
|
||
end
|
||
|
||
local function drawMasterColor(x,y,MasterColor)
|
||
gpu.setBackground(MasterColor)
|
||
gpu.fill(x,y,5,5," ")
|
||
gpu.setBackground(oldColor)
|
||
gpu.fill(x+5,y,5,5," ")
|
||
end
|
||
|
||
local function drawButton(x,y,width,text,backColor,textColor)
|
||
gpu.setBackground(backColor)
|
||
gpu.setForeground(textColor)
|
||
local textPosX = x + math.floor(width/2-unicode.len(text)/2)
|
||
gpu.fill(x,y,width,1," ")
|
||
gpu.set(textPosX,y,text)
|
||
newObj("buttons",text,"x1",x);newObj("buttons",text,"x2",x+width-1);newObj("buttons",text,"y1",y);newObj("buttons",text,"y2",y)
|
||
end
|
||
|
||
local function getInfoAboutColor(MasterColor)
|
||
local rr,gg,bb = colorlib.HEXtoRGB(MasterColor)
|
||
local hh,ss,ll = colorlib.HEXtoHSB(MasterColor)
|
||
|
||
local colorInfo = {
|
||
{"R:",math.floor(rr)},
|
||
{"G:",math.floor(gg)},
|
||
{"B:",math.floor(bb)},
|
||
{"H:",ecs.adaptiveRound(MasterHue)},
|
||
{"S:",math.floor(MasterSat)},
|
||
{"B:",math.floor(MasterBri)},
|
||
{"# ",string.format("%x", MasterColor)},
|
||
}
|
||
|
||
return colorInfo
|
||
end
|
||
|
||
local function drawInfoAboutColors(x,y,MasterColor)
|
||
local colorInfo = getInfoAboutColor(MasterColor)
|
||
|
||
for i=1,#colorInfo do
|
||
gpu.setBackground(ecs.windowColors.background)
|
||
gpu.setForeground(0x000000)
|
||
gpu.set(x,y+i*2-2,colorInfo[i][1].." ")
|
||
|
||
gpu.setBackground(0xffffff)
|
||
gpu.setForeground(0x111111)
|
||
gpu.fill(x+3,y+i*2-2,7,1," ")
|
||
gpu.set(x+3,y+i*2-2,tostring(colorInfo[i][2]))
|
||
end
|
||
end
|
||
|
||
-------------------------------------------------------
|
||
|
||
local function recalculateKrest()
|
||
krestX = ecs.adaptiveRound(x + 1 + MasterSat * rainbowBigWidth / 100)
|
||
krestY = ecs.adaptiveRound(y + 2 + rainbowBigHeight - (MasterBri * rainbowBigHeight / 100))
|
||
end
|
||
|
||
local function drawNuzhnoe()
|
||
drawRainbowBig(x+1,y+1,rainbowBigWidth,rainbowBigHeight,MasterColor)
|
||
drawMasterColor(masterColorX,masterColorY,MasterColor)
|
||
drawInfoAboutColors(masterColorX,masterColorY+6,MasterColor)
|
||
drawKREST(krestX,krestY)
|
||
end
|
||
|
||
ecs.emptyWindow(x,y,windowSizeX,windowSizeY,"Выберите цвет")
|
||
|
||
drawButton(masterColorX+12,masterColorY+1,10,"OK",ecs.colors.lightBlue,0xffffff)
|
||
drawButton(masterColorX+12,masterColorY+3,10,"Cancel",0xaaaaaa,0x000000)
|
||
|
||
recalculateKrest()
|
||
drawRainbowBig(x+1,y+1,rainbowBigWidth,rainbowBigHeight,MasterColor)
|
||
drawMasterColor(masterColorX,masterColorY,MasterColor)
|
||
drawInfoAboutColors(masterColorX,masterColorY+6,MasterColor)
|
||
oldKrest = ecs.rememberOldPixels(krestX-2,krestY-1,krestX+2,krestY+1)
|
||
drawKREST(krestX,krestY)
|
||
|
||
|
||
while true do
|
||
local eventData = {event.pull()}
|
||
if eventData[1] == "touch" or eventData[1] == "drag" then
|
||
|
||
if ecs.clickedAtArea(eventData[3],eventData[4],objects["palette"]["small"]["x1"],objects["palette"]["small"]["y1"],objects["palette"]["small"]["x2"],objects["palette"]["small"]["y2"]) then
|
||
local CYKA = {gpu.get(eventData[3],eventData[4])}
|
||
MasterHue = colorlib.HEXtoHSB(CYKA[3])
|
||
CYKA = nil
|
||
MasterColor = colorlib.HSBtoHEX(MasterHue,MasterSat,MasterBri)
|
||
|
||
|
||
drawRainbowBig(x+1,y+1,rainbowBigWidth,rainbowBigHeight,MasterColor)
|
||
drawMasterColor(masterColorX,masterColorY,MasterColor)
|
||
drawInfoAboutColors(masterColorX,masterColorY+6,MasterColor)
|
||
|
||
oldKrest = ecs.rememberOldPixels(krestX-2,krestY-1,krestX+2,krestY+1)
|
||
drawKREST(krestX,krestY)
|
||
|
||
elseif ecs.clickedAtArea(eventData[3],eventData[4],objects["palette"]["big"]["x1"],objects["palette"]["big"]["y1"],objects["palette"]["big"]["x2"],objects["palette"]["big"]["y2"]) then
|
||
|
||
local CYKA = {gpu.get(eventData[3],eventData[4])}
|
||
local PIDOR = {colorlib.HEXtoHSB(CYKA[3])}
|
||
MasterSat,MasterBri = PIDOR[2],PIDOR[3]
|
||
MasterColor = colorlib.HSBtoHEX(MasterHue,MasterSat,MasterBri)
|
||
PIDOR = nil
|
||
CYKA = nil
|
||
|
||
ecs.drawOldPixels(oldKrest)
|
||
krestX,krestY = eventData[3],eventData[4]
|
||
oldKrest = ecs.rememberOldPixels(krestX-2,krestY-1,krestX+2,krestY+1)
|
||
|
||
--drawRainbowBig(x+1,y+1,rainbowBigWidth,rainbowBigHeight,MasterColor)
|
||
drawMasterColor(masterColorX,masterColorY,MasterColor)
|
||
drawInfoAboutColors(masterColorX,masterColorY+6,MasterColor)
|
||
drawKREST(krestX,krestY)
|
||
elseif ecs.clickedAtArea(eventData[3],eventData[4],objects["buttons"]["OK"]["x1"],objects["buttons"]["OK"]["y1"],objects["buttons"]["OK"]["x2"],objects["buttons"]["OK"]["y2"]) then
|
||
drawButton(objects["buttons"]["OK"]["x1"],objects["buttons"]["OK"]["y1"],10,"OK",ecs.colors.blue,0xffffff)
|
||
os.sleep(0.3)
|
||
return MasterColor,MasterHue,MasterSat,MasterBri
|
||
elseif ecs.clickedAtArea(eventData[3],eventData[4],objects["buttons"]["Cancel"]["x1"],objects["buttons"]["Cancel"]["y1"],objects["buttons"]["Cancel"]["x2"],objects["buttons"]["Cancel"]["y2"]) then
|
||
drawButton(objects["buttons"]["Cancel"]["x1"],objects["buttons"]["Cancel"]["y1"],10,"Cancel",ecs.colors.blue,0xffffff)
|
||
os.sleep(0.3)
|
||
return nil
|
||
end
|
||
|
||
--[[elseif eventData[1] == "key_up" then
|
||
|
||
if eventData[4] == 57 then
|
||
MasterHue,MasterSat,MasterBri = 360,100,100
|
||
MasterColor = colorlib.HSBtoHEX(MasterHue,MasterSat,MasterBri)
|
||
recalculateKrest()
|
||
drawNuzhnoe()
|
||
end]]
|
||
end
|
||
end
|
||
end
|
||
|
||
------------------------------------------------------------------------------------
|
||
|
||
return palette
|