Жирная оптимизация производительности

This commit is contained in:
Igor Timofeev 2017-09-09 22:04:17 +03:00
parent c271347f29
commit a2552759f1
19 changed files with 304 additions and 288 deletions

View File

@ -5,7 +5,7 @@
about="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/MineOS/About/", about="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/MineOS/About/",
type="Script", type="Script",
forceDownload=true, forceDownload=true,
version=3.74, version=3.76,
}, },
{ {
path="/MineOS/Pictures/MoonTouch.pic", path="/MineOS/Pictures/MoonTouch.pic",
@ -223,7 +223,7 @@
path="/lib/MineOSCore.lua", path="/lib/MineOSCore.lua",
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/MineOSCore.lua", url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/MineOSCore.lua",
type="Library", type="Library",
version=1.75, version=1.76,
}, },
{ {
path="/lib/advancedLua.lua", path="/lib/advancedLua.lua",
@ -256,7 +256,7 @@
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/color.lua", url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/color.lua",
type="Library", type="Library",
preloadFile=true, preloadFile=true,
version=1.09, version=1.10,
}, },
{ {
path="/lib/ImageFormatModules/OCIF.lua", path="/lib/ImageFormatModules/OCIF.lua",
@ -270,7 +270,7 @@
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/image.lua", url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/image.lua",
type="Library", type="Library",
preloadFile=true, preloadFile=true,
version=1.28, version=1.29,
}, },
{ {
path="/lib/serialization.lua", path="/lib/serialization.lua",
@ -283,13 +283,13 @@
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/GUI.lua", url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/GUI.lua",
type="Library", type="Library",
preloadFile=true, preloadFile=true,
version=1.75, version=1.77,
}, },
{ {
path="/lib/rayEngine.lua", path="/lib/rayEngine.lua",
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/rayEngine.lua", url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/rayEngine.lua",
type="Library", type="Library",
version=1.41, version=1.42,
}, },
{ {
path="/lib/json.lua", path="/lib/json.lua",
@ -350,7 +350,7 @@
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/doubleBuffering.lua", url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/doubleBuffering.lua",
type="Library", type="Library",
preloadFile=true, preloadFile=true,
version=1.30, version=1.31,
}, },
{ {
path="/lib/compressor.lua", path="/lib/compressor.lua",
@ -374,31 +374,31 @@
path="/lib/vector.lua", path="/lib/vector.lua",
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/vector.lua", url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/vector.lua",
type="Library", type="Library",
version=1.03, version=1.10,
}, },
{ {
path="/lib/OpenComputersGL/Main.lua", path="/lib/OpenComputersGL/Main.lua",
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/OpenComputersGL/Main.lua", url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/OpenComputersGL/Main.lua",
type="Library", type="Library",
version=1.09, version=1.10,
}, },
{ {
path="/lib/OpenComputersGL/Materials.lua", path="/lib/OpenComputersGL/Materials.lua",
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/OpenComputersGL/Materials.lua", url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/OpenComputersGL/Materials.lua",
type="Library", type="Library",
version=1.09, version=1.10,
}, },
{ {
path="/lib/OpenComputersGL/Renderer.lua", path="/lib/OpenComputersGL/Renderer.lua",
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/OpenComputersGL/Renderer.lua", url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/OpenComputersGL/Renderer.lua",
type="Library", type="Library",
version=1.09, version=1.10,
}, },
{ {
path="/lib/MeowEngine/Main.lua", path="/lib/MeowEngine/Main.lua",
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/MeowEngine/Main.lua", url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/MeowEngine/Main.lua",
type="Library", type="Library",
version=1.09, version=1.10,
}, },
----------------------------------------------------- Скрипты и дополнения к ним -------------------------------------------------------------------------- ----------------------------------------------------- Скрипты и дополнения к ним --------------------------------------------------------------------------
@ -462,7 +462,7 @@
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/MineCodeIDE/Icon.pic", icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/MineCodeIDE/Icon.pic",
createShortcut="dock", createShortcut="dock",
forceDownload=true, forceDownload=true,
version=1.77, version=1.78,
resources={ resources={
{ {
path="/Localization/Russian.lang", path="/Localization/Russian.lang",
@ -482,7 +482,7 @@
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/3DTest/Icon.pic", icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/3DTest/Icon.pic",
createShortcut="desktop", createShortcut="desktop",
forceDownload=true, forceDownload=true,
version=1.21, version=1.22,
}, },
{ {
path="/MineOS/Applications/Spinner", path="/MineOS/Applications/Spinner",
@ -548,7 +548,7 @@
type="Application", type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/GeoScan2/Icon.pic", icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/GeoScan2/Icon.pic",
createShortcut="desktop", createShortcut="desktop",
version=1.08, version=1.09,
resources={ resources={
{ {
path="/Earth.pic", path="/Earth.pic",
@ -578,7 +578,7 @@
type="Application", type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/Weather/Icon.pic", icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/Weather/Icon.pic",
createShortcut="desktop", createShortcut="desktop",
version=1.14, version=1.15,
resources={ resources={
{ {
path="/Cloudy.pic", path="/Cloudy.pic",
@ -626,7 +626,7 @@
type="Application", type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/FlappyBird/Icon.pic", icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/FlappyBird/Icon.pic",
createShortcut="desktop", createShortcut="desktop",
version=1.14, version=1.15,
resources={ resources={
{ {
path="/Flappy.pic", path="/Flappy.pic",
@ -641,7 +641,7 @@
type="Application", type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/RayWalk/Icon.pic", icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/RayWalk/Icon.pic",
createShortcut="desktop", createShortcut="desktop",
version=1.66, version=1.68,
resources={ resources={
{ {
path="/Localization/Russian.lang", path="/Localization/Russian.lang",
@ -764,7 +764,7 @@
type="Application", type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/PrintImage/Icon.pic", icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/PrintImage/Icon.pic",
createShortcut="desktop", createShortcut="desktop",
version=1.13, version=1.14,
}, },
{ {
path="/MineOS/Applications/Palette", path="/MineOS/Applications/Palette",
@ -904,7 +904,7 @@
type="Application", type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/HoloClock/Icon.pic", icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/HoloClock/Icon.pic",
createShortcut="desktop", createShortcut="desktop",
version=1.04, version=1.05,
}, },
-- { -- {
-- path="/MineOS/Applications/Finder", -- path="/MineOS/Applications/Finder",
@ -1044,7 +1044,7 @@
type="Application", type="Application",
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/BufferDemo/Icon.pic", icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/BufferDemo/Icon.pic",
createShortcut="desktop", createShortcut="desktop",
version=1.01, version=1.02,
resources={ resources={
{ {
path="/Wallpaper.pic", path="/Wallpaper.pic",

View File

@ -386,7 +386,7 @@ mainContainer:addChild(GUI.textBox(1, mainContainer.height - #lines + 1, mainCon
local elementY = 2 local elementY = 2
mainContainer.toolbar = mainContainer:addChild(GUI.container(mainContainer.width - 31, 1, 32, mainContainer.height)) mainContainer.toolbar = mainContainer:addChild(GUI.container(mainContainer.width - 31, 1, 32, mainContainer.height))
local elementWidth = mainContainer.toolbar.width - 2 local elementWidth = mainContainer.toolbar.width - 2
mainContainer.toolbar:addChild(GUI.panel(1, 1, mainContainer.toolbar.width, mainContainer.toolbar.height, 0x0, 50)) mainContainer.toolbar:addChild(GUI.panel(1, 1, mainContainer.toolbar.width, mainContainer.toolbar.height, 0x0, 0.5))
mainContainer.toolbar:addChild(GUI.label(2, elementY, elementWidth, 1, 0xEEEEEE, "Render mode")):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top); elementY = elementY + 2 mainContainer.toolbar:addChild(GUI.label(2, elementY, elementWidth, 1, 0xEEEEEE, "Render mode")):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top); elementY = elementY + 2
mainContainer.toolbar.renderModeComboBox = mainContainer.toolbar:addChild(GUI.comboBox(2, elementY, elementWidth, 1, 0x2D2D2D, 0xAAAAAA, 0x555555, 0x888888)); elementY = elementY + mainContainer.toolbar.renderModeComboBox.height + 1 mainContainer.toolbar.renderModeComboBox = mainContainer.toolbar:addChild(GUI.comboBox(2, elementY, elementWidth, 1, 0x2D2D2D, 0xAAAAAA, 0x555555, 0x888888)); elementY = elementY + mainContainer.toolbar.renderModeComboBox.height + 1

View File

@ -6,7 +6,7 @@ local image = require("image")
local currentBackground = 0x990000 local currentBackground = 0x990000
local risovatKartinku = true local risovatKartinku = true
local showPanel = true local showPanel = true
local transparency = 25 local transparency = 0.25
local xWindow, yWindow = 5, 5 local xWindow, yWindow = 5, 5
local fon = image.load("MineOS/Applications/BufferDemo.app/Resources/Wallpaper.pic") local fon = image.load("MineOS/Applications/BufferDemo.app/Resources/Wallpaper.pic")
@ -31,7 +31,7 @@ local width, height = 82, 25
local function drawWindow(x, y) local function drawWindow(x, y)
--Тени --Тени
local shadowTransparency = 60 local shadowTransparency = 0.6
buffer.square(x + width, y + 1, 2, height, 0x000000, 0xFFFFFF, " ", shadowTransparency) buffer.square(x + width, y + 1, 2, height, 0x000000, 0xFFFFFF, " ", shadowTransparency)
buffer.square(x + 2, y + height, width - 2, 1, 0x000000, 0xFFFFFF, " ", shadowTransparency) buffer.square(x + 2, y + height, width - 2, 1, 0x000000, 0xFFFFFF, " ", shadowTransparency)
@ -135,15 +135,15 @@ while true do
end end
elseif e[1] == "scroll" then elseif e[1] == "scroll" then
if e[5] == 1 then if e[5] == 1 then
if transparency > 5 then if transparency > 0.05 then
transparency = transparency - 5 transparency = transparency - 0.05
drawBackground() drawBackground()
drawWindow(xWindow, yWindow) drawWindow(xWindow, yWindow)
buffer.draw() buffer.draw()
end end
else else
if transparency < 100 then if transparency < 1 then
transparency = transparency + 5 transparency = transparency + 0.05
drawBackground() drawBackground()
drawWindow(xWindow, yWindow) drawWindow(xWindow, yWindow)
buffer.draw() buffer.draw()

View File

@ -48,18 +48,18 @@ local xScore, yScore = math.floor(buffer.width / 2 - 6), math.floor(buffer.heigh
local function drawColumn(x, upperCornerStartPosition) local function drawColumn(x, upperCornerStartPosition)
local y = 1 local y = 1
buffer.square(x + 1, y, config.columnWidth, upperCornerStartPosition - config.columnPipeHeight, colors.columnMain) buffer.square(x + 1, y, config.columnWidth, upperCornerStartPosition - config.columnPipeHeight, colors.columnMain, 0x0, " ")
buffer.square(x, upperCornerStartPosition - config.columnPipeHeight, config.columnPipeWidth, config.columnPipeHeight, colors.columnAlternative) buffer.square(x, upperCornerStartPosition - config.columnPipeHeight, config.columnPipeWidth, config.columnPipeHeight, colors.columnAlternative, 0x0, " ")
y = upperCornerStartPosition + config.columnFreeSpace y = upperCornerStartPosition + config.columnFreeSpace
buffer.square(x, y, config.columnPipeWidth, config.columnPipeHeight, colors.columnAlternative) buffer.square(x, y, config.columnPipeWidth, config.columnPipeHeight, colors.columnAlternative, 0x0, " ")
y = y + config.columnPipeHeight y = y + config.columnPipeHeight
buffer.square(x + 1, y, config.columnWidth, buffer.height - y + 1, colors.columnMain) buffer.square(x + 1, y, config.columnWidth, buffer.height - y + 1, colors.columnMain, 0x0, " ")
end end
local function dieBirdDie() local function dieBirdDie()
if birdIsAlive then if birdIsAlive then
bird = image.blend(bird, 0x880000, 50) bird = image.blend(bird, 0x880000, 0.5)
birdIsAlive = false birdIsAlive = false
end end
end end
@ -113,7 +113,7 @@ local function drawBigCenterText(y, textColor, usePseudoShadow, text)
local width = bigLetters.getTextSize(text) local width = bigLetters.getTextSize(text)
local x = math.floor(buffer.width / 2 - width / 2) local x = math.floor(buffer.width / 2 - width / 2)
if usePseudoShadow then buffer.square(x - 2, y - 1, width + 4, 7, colors.scoreTextBackground) end if usePseudoShadow then buffer.square(x - 2, y - 1, width + 4, 7, colors.scoreTextBackground, 0x0, " ") end
bigLetters.drawText(x, y, textColor, text) bigLetters.drawText(x, y, textColor, text)
end end
@ -200,7 +200,7 @@ local function finalGUI()
drawAll() drawAll()
buffer.square(x, y, widthOfBoard, heightOfBoard, colors.board, 0xFFFFFF, " ", 30) buffer.square(x, y, widthOfBoard, heightOfBoard, colors.board, 0xFFFFFF, " ", 0.3)
y = y + 2 y = y + 2
drawBigCenterText(y, colors.boardText, false, "score") drawBigCenterText(y, colors.boardText, false, "score")

View File

@ -29,22 +29,22 @@ local mainContainer = GUI.fullScreenContainer()
-------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------
local function getOpenGLValidColorChannels(color) local function getOpenGLValidColorChannels(cykaColor)
local r, g, b = color.HEXToRGB(color) local r, g, b = color.HEXToRGB(cykaColor)
return r / 255, g / 255, b / 255 return r / 255, g / 255, b / 255
end end
local function createCube(x, y, z, color, isVisThrObj) local function createCube(x, y, z, cykaColor, isVisThrObj)
local cube = component.glasses.addCube3D() local cube = component.glasses.addCube3D()
cube.set3DPos(x, y, z) cube.set3DPos(x, y, z)
cube.setVisibleThroughObjects(isVisThrObj) cube.setVisibleThroughObjects(isVisThrObj)
cube.setColor(getOpenGLValidColorChannels(color)) cube.setColor(getOpenGLValidColorChannels(cykaColor))
cube.setAlpha(0.23) cube.setAlpha(0.23)
return cube return cube
end end
local function glassesCreateCube(x, y, z, color, text) local function glassesCreateCube(x, y, z, cykaColor, text)
local cube = createCube(x, y, z, color, true) local cube = createCube(x, y, z, cykaColor, true)
cube.setVisibleThroughObjects(true) cube.setVisibleThroughObjects(true)
local floatingText = component.glasses.addFloatingText() local floatingText = component.glasses.addFloatingText()
@ -181,7 +181,7 @@ objectY = objectY + 2
mainContainer:addChild(GUI.button(buffer.width, 1, 1, 1, nil, 0xEEEEEE, nil, 0xFF2222, "X")).onTouch = function() mainContainer:addChild(GUI.button(buffer.width, 1, 1, 1, nil, 0xEEEEEE, nil, 0xFF2222, "X")).onTouch = function()
mainContainer:stopEventHandling() mainContainer:stopEventHandling()
createDick(math.random(-48, 48), math.random(1, 32), math.random(-48, 48), 100, false) createDick(math.random(-48, 48), math.random(1, 32), math.random(-48, 48), 100, true)
end end
mainContainer:addChild(GUI.button(panelX, buffer.height - 5, panelWidth, 3, 0x353535, 0xEEEEEE, 0xAAAAAA, 0x262626, "Update")).onTouch = function() mainContainer:addChild(GUI.button(panelX, buffer.height - 5, panelWidth, 3, 0x353535, 0xEEEEEE, 0xAAAAAA, 0x262626, "Update")).onTouch = function()
@ -193,7 +193,7 @@ mainContainer.scanButton.onTouch = function()
local horizontalRange, verticalRange = math.floor(mainContainer.horizontalScanRangeSlider.value), math.floor(mainContainer.verticalScanRangeSlider.value) local horizontalRange, verticalRange = math.floor(mainContainer.horizontalScanRangeSlider.value), math.floor(mainContainer.verticalScanRangeSlider.value)
local total, current = (horizontalRange * 2 + 1) ^ 2, 0 local total, current = (horizontalRange * 2 + 1) ^ 2, 0
buffer.clear(0x0, 0x30) buffer.clear(0x0, 0.48)
for x = -horizontalRange, horizontalRange do for x = -horizontalRange, horizontalRange do
scanResult[x] = {} scanResult[x] = {}
for z = -horizontalRange, horizontalRange do for z = -horizontalRange, horizontalRange do

View File

@ -193,7 +193,7 @@ local function getDate()
end end
local function flashback() local function flashback()
buffer.square(1, 1, buffer.width, buffer.height, 0x000000, 0x000000, " ", 50) buffer.clear(0x0, 0.3)
end end
local function drawOnScreen() local function drawOnScreen()

View File

@ -1591,7 +1591,7 @@ local function createMainContainer()
end end
mainContainer.errorContainer = mainContainer:addChild(GUI.container(1, 1, 1, 1)) mainContainer.errorContainer = mainContainer:addChild(GUI.container(1, 1, 1, 1))
mainContainer.errorContainer.backgroundPanel = mainContainer.errorContainer:addChild(GUI.panel(1, 1, 1, 1, 0xFFFFFF, 30)) mainContainer.errorContainer.backgroundPanel = mainContainer.errorContainer:addChild(GUI.panel(1, 1, 1, 1, 0xFFFFFF, 0.3))
mainContainer.errorContainer.errorTextBox = mainContainer.errorContainer:addChild(GUI.textBox(3, 2, 1, 1, nil, 0x4B4B4B, {}, 1)) mainContainer.errorContainer.errorTextBox = mainContainer.errorContainer:addChild(GUI.textBox(3, 2, 1, 1, nil, 0x4B4B4B, {}, 1))
mainContainer.errorContainer.breakpointExitButton = mainContainer.errorContainer:addChild(GUI.button(1, 1, 1, 1, 0x3C3C3C, 0xCCCCCC, 0x2D2D2D, 0x888888, localization.finishDebug)) mainContainer.errorContainer.breakpointExitButton = mainContainer.errorContainer:addChild(GUI.button(1, 1, 1, 1, 0x3C3C3C, 0xCCCCCC, 0x2D2D2D, 0x888888, localization.finishDebug))
mainContainer.errorContainer.breakpointContinueButton = mainContainer.errorContainer:addChild(GUI.button(1, 1, 1, 1, 0x444444, 0xCCCCCC, 0x2D2D2D, 0x888888, localization.continueDebug)) mainContainer.errorContainer.breakpointContinueButton = mainContainer.errorContainer:addChild(GUI.button(1, 1, 1, 1, 0x444444, 0xCCCCCC, 0x2D2D2D, 0x888888, localization.continueDebug))
@ -1600,7 +1600,7 @@ local function createMainContainer()
hideErrorContainer() hideErrorContainer()
mainContainer.settingsContainer = mainContainer:addChild(GUI.container(1, 1, 1, 1)) mainContainer.settingsContainer = mainContainer:addChild(GUI.container(1, 1, 1, 1))
mainContainer.settingsContainer.backgroundPanel = mainContainer.settingsContainer:addChild(GUI.panel(1, 1, mainContainer.settingsContainer.width, mainContainer.settingsContainer.height, 0x0, 30)) mainContainer.settingsContainer.backgroundPanel = mainContainer.settingsContainer:addChild(GUI.panel(1, 1, mainContainer.settingsContainer.width, mainContainer.settingsContainer.height, 0x0, 0.3))
mainContainer.settingsContainer.backgroundPanel.eventHandler = function(mainContainer, object, eventData) mainContainer.settingsContainer.backgroundPanel.eventHandler = function(mainContainer, object, eventData)
if eventData[1] == "touch" then if eventData[1] == "touch" then
hideSettingsContainer() hideSettingsContainer()

View File

@ -8,6 +8,7 @@ local fs = require("filesystem")
local advancedLua = require("advancedLua") local advancedLua = require("advancedLua")
local color = require("color") local color = require("color")
local image = require("image") local image = require("image")
local MineOSCore = require("MineOSCore")
local buffer = require("doubleBuffering") local buffer = require("doubleBuffering")
local GUI = require("GUI") local GUI = require("GUI")
@ -16,7 +17,7 @@ local GUI = require("GUI")
if not component.isAvailable("printer3d") then GUI.error("This program requires at least one 3D-printer"); return end if not component.isAvailable("printer3d") then GUI.error("This program requires at least one 3D-printer"); return end
local args, options = require("shell").parse(...) local args, options = require("shell").parse(...)
local startImagePath = args[1] == "open" and args[2] or "/MineOS/System/Icons/Steve.pic" local startImagePath = args[1] == "open" and args[2] or "/MineOS/System/Icons/Steve.pic"
local configPath = "/MineOS/System/PrintImage/Config.cfg" local configPath = MineOSCore.paths.system .. "PrintImage/Config.cfg"
local panelWidth = 34 local panelWidth = 34
local mainContainer local mainContainer
local mainImage local mainImage
@ -189,25 +190,20 @@ local function createWindow()
local textBoxesWidth = math.floor(panelWidth * 0.55) local textBoxesWidth = math.floor(panelWidth * 0.55)
mainContainer.shadeContainer = mainContainer:addChild(GUI.container(mainContainer.width - panelWidth + 1, 1, panelWidth, mainContainer.height)) mainContainer.shadeContainer = mainContainer:addChild(GUI.container(mainContainer.width - panelWidth + 1, 1, panelWidth, mainContainer.height))
mainContainer.shadeContainer:addChild(GUI.panel(1, 1, mainContainer.shadeContainer.width, mainContainer.shadeContainer.height, 0x0000000, 40)) mainContainer.shadeContainer:addChild(GUI.panel(1, 1, mainContainer.shadeContainer.width, mainContainer.shadeContainer.height, 0x0000000, 0.4))
local y = 2 local y = 2
mainContainer.shadeContainer:addChild(GUI.label(1, y, mainContainer.shadeContainer.width, 1, 0xFFFFFF, "Main properties")):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top) mainContainer.shadeContainer:addChild(GUI.label(1, y, mainContainer.shadeContainer.width, 1, 0xFFFFFF, "Main properties")):setAlignment(GUI.alignment.horizontal.center, GUI.alignment.vertical.top)
y = y + 2 y = y + 2
mainContainer.shadeContainer:addChild(GUI.label(3, y, mainContainer.shadeContainer.width, 1, 0xCCCCCC, "Image path:")) mainContainer.shadeContainer:addChild(GUI.label(3, y, mainContainer.shadeContainer.width, 1, 0xCCCCCC, "Image path:"))
mainContainer.shadeContainer:addChild(GUI.inputField(mainContainer.shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x555555, 0x555555, 0xEEEEEE, 0x262626, startImagePath, nil, true)).validator = function(text) local filesystemChooser = mainContainer.shadeContainer:addChild(GUI.filesystemChooser(mainContainer.shadeContainer.width - textBoxesWidth - 1, y, textBoxesWidth, 1, 0xEEEEEE, 0x262626, 0x444444, 0x999999, startImagePath, MineOSCore.localization.open, MineOSCore.localization.cancel, "Image path", "/"))
if text and fs.exists(text) then filesystemChooser:addExtensionFilter(".pic")
if unicode.sub(text, -4, -1) == ".pic" then filesystemChooser.onSubmit = function(path)
mainImage = image.load(text) mainImage = image.load(path)
getStatus() getStatus()
return true mainContainer:draw()
else buffer.draw()
GUI.error("File \"" .. text .. "\" is not in .pic format")
end
else
GUI.error("File \"" .. text .. "\" doesn't exists")
end
end end
y = y + 2 y = y + 2

View File

@ -1,5 +1,5 @@
package.loaded.rayEngine, package.loaded.GUI, _G.rayEngine, _G.GUI = nil, nil, nil, nil, nil, nil package.loaded.rayEngine = nil
local fs = require("filesystem") local fs = require("filesystem")
local component = require("component") local component = require("component")
@ -21,7 +21,7 @@ local rayWalkVersion = "RayWalk Tech Demo v3.5"
local function menuBackground() local function menuBackground()
rayEngine.drawWorld() rayEngine.drawWorld()
buffer.clear(0x000000, 50) buffer.clear(0x000000, 0.5)
end end
local function settings() local function settings()

View File

@ -181,7 +181,7 @@ local function drawWeather()
--Рисуем обоинку или просто говнофон ССАНЫЙ --Рисуем обоинку или просто говнофон ССАНЫЙ
if fs.exists(MineOSCore.OSSettings.wallpaper or "---aefaefaefaefae") then if fs.exists(MineOSCore.OSSettings.wallpaper or "---aefaefaefaefae") then
buffer.image(1, 1, image.load(MineOSCore.OSSettings.wallpaper)) buffer.image(1, 1, image.load(MineOSCore.OSSettings.wallpaper))
buffer.square(1, 1, buffer.width, buffer.height, 0x0, 0x0, " ", 60) buffer.square(1, 1, buffer.width, buffer.height, 0x0, 0x0, " ", 0.6)
else else
buffer.clear(0x262626) buffer.clear(0x262626)
end end

View File

@ -1,7 +1,4 @@
-- package.loaded.web = nil
-- package.loaded.GUI = nil
local fs = require("filesystem") local fs = require("filesystem")
local component = require("component") local component = require("component")
local computer = require("computer") local computer = require("computer")
@ -11,6 +8,8 @@ local serialization = require("serialization")
local gpu = component.gpu local gpu = component.gpu
local screen = component.screen local screen = component.screen
local args, options = shell.parse(...)
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
local reasons = {} local reasons = {}
@ -35,7 +34,7 @@ if computer.totalMemory() < 2097152 then
table.insert(reasons, "Not enough RAM: MineOS requires at least 2MB (2x Tier 3.5 RAM modules) to work properly.") table.insert(reasons, "Not enough RAM: MineOS requires at least 2MB (2x Tier 3.5 RAM modules) to work properly.")
end end
if #reasons > 0 then if #reasons > 0 and not options.skiphardwarecheck and not options.s then
print(" ") print(" ")
for i = 1, #reasons do for i = 1, #reasons do
print(reasons[i]) print(reasons[i])

View File

@ -37,8 +37,8 @@ local MineOSCore = require("MineOSCore")
---------------------------------------------- Всякая константная залупа ------------------------------------------------------------------------ ---------------------------------------------- Всякая константная залупа ------------------------------------------------------------------------
local menuTransparency = 20 local menuTransparency = 0.2
local dockTransparency = 50 local dockTransparency = 0.5
local computerUptimeOnBoot = computer.uptime() local computerUptimeOnBoot = computer.uptime()
local computerDateUptime = computerUptimeOnBoot local computerDateUptime = computerUptimeOnBoot
@ -498,9 +498,9 @@ local function createOSWindow()
buffer.square(xPos + 1, yPos, currentDockWidth - 2, 1, color, 0xFFFFFF, " ", MineOSCore.OSSettings.transparencyEnabled and currentDockTransparency) buffer.square(xPos + 1, yPos, currentDockWidth - 2, 1, color, 0xFFFFFF, " ", MineOSCore.OSSettings.transparencyEnabled and currentDockTransparency)
buffer.text(xPos + currentDockWidth - 1, yPos, color, "", MineOSCore.OSSettings.transparencyEnabled and currentDockTransparency) buffer.text(xPos + currentDockWidth - 1, yPos, color, "", MineOSCore.OSSettings.transparencyEnabled and currentDockTransparency)
currentDockTransparency, currentDockWidth, xPos, yPos = currentDockTransparency + 8, currentDockWidth - 2, xPos + 1, yPos - 1 currentDockTransparency, currentDockWidth, xPos, yPos = currentDockTransparency + 0.08, currentDockWidth - 2, xPos + 1, yPos - 1
if currentDockTransparency > 100 then if currentDockTransparency > 1 then
currentDockTransparency = 100 currentDockTransparency = 1
end end
end end
@ -586,9 +586,9 @@ local function createOSWindow()
menu:addItem(MineOSCore.localization.wallpaper).onTouch = function() menu:addItem(MineOSCore.localization.wallpaper).onTouch = function()
local container = MineOSCore.addUniversalContainer(MineOSCore.OSMainContainer, MineOSCore.localization.wallpaper) local container = MineOSCore.addUniversalContainer(MineOSCore.OSMainContainer, MineOSCore.localization.wallpaper)
local filesystemChooser = container.layout:addChild(GUI.filesystemChooser(1, 1, 36, 3, 0xEEEEEE, 0x262626, 0x444444, 0x999999, MineOSCore.localization.open, MineOSCore.localization.cancel, MineOSCore.localization.wallpaperPath, GUI.filesystemModes.file, "/", MineOSCore.OSSettings.wallpaper)) local filesystemChooser = container.layout:addChild(GUI.filesystemChooser(1, 1, 36, 3, 0xEEEEEE, 0x262626, 0x444444, 0x999999, MineOSCore.OSSettings.wallpaper, MineOSCore.localization.open, MineOSCore.localization.cancel, MineOSCore.localization.wallpaperPath, "/"))
filesystemChooser:addExtensionFilter(".pic") filesystemChooser:addExtensionFilter(".pic")
filesystemChooser.onItemSelected = function(path) filesystemChooser.onSubmit = function(path)
MineOSCore.OSSettings.wallpaper = path MineOSCore.OSSettings.wallpaper = path
MineOSCore.saveOSSettings() MineOSCore.saveOSSettings()
changeWallpaper() changeWallpaper()

View File

@ -68,8 +68,8 @@ GUI.colors = {
text = 0xFFFFFF text = 0xFFFFFF
}, },
transparency = { transparency = {
background = 30, background = 0.3,
shadow = 40 shadow = 0.4
} }
}, },
windows = { windows = {
@ -87,8 +87,8 @@ GUI.colors = {
background = 0xCCCCCC, background = 0xCCCCCC,
text = 0x3C3C3C text = 0x3C3C3C
} }
}, }
}, }
} }
----------------------------------------- Interface objects ----------------------------------------- ----------------------------------------- Interface objects -----------------------------------------
@ -97,12 +97,13 @@ local function callMethod(method, ...)
if method then method(...) end if method then method(...) end
end end
function GUI.point(x, y)
return { x = x, y = y }
end
function GUI.rectangle(x, y, width, height) function GUI.rectangle(x, y, width, height)
return { x = x, y = y, width = width, height = height} return {
x = x,
y = y,
width = width,
height = height
}
end end
local function isObjectClicked(object, x, y) local function isObjectClicked(object, x, y)
@ -134,6 +135,7 @@ function GUI.setAlignment(object, horizontalAlignment, verticalAlignment)
horizontal = horizontalAlignment, horizontal = horizontalAlignment,
vertical = verticalAlignment vertical = verticalAlignment
} }
return object return object
end end
@ -701,7 +703,10 @@ end
function GUI.panel(x, y, width, height, color, transparency) function GUI.panel(x, y, width, height, color, transparency)
local object = GUI.object(x, y, width, height) local object = GUI.object(x, y, width, height)
object.colors = {background = color, transparency = transparency} object.colors = {
background = color,
transparency = transparency
}
object.draw = drawPanel object.draw = drawPanel
return object return object
@ -808,8 +813,8 @@ local function drawProgressBar(object)
buffer.text(object.x, object.y, object.colors.passive, string.rep("", object.width)) buffer.text(object.x, object.y, object.colors.passive, string.rep("", object.width))
buffer.text(object.x, object.y, object.colors.active, string.rep("", activeWidth)) buffer.text(object.x, object.y, object.colors.active, string.rep("", activeWidth))
else else
buffer.square(object.x, object.y, object.width, object.height, object.colors.passive) buffer.square(object.x, object.y, object.width, object.height, object.colors.passive, 0x0, " ")
buffer.square(object.x, object.y, activeWidth, object.height, object.colors.active) buffer.square(object.x, object.y, activeWidth, object.height, object.colors.active, 0x0, " ")
end end
if object.showValue then if object.showValue then
@ -1033,7 +1038,7 @@ local function codeViewDraw(codeView)
if codeView.lines[line] then if codeView.lines[line] then
local text = tostring(line) local text = tostring(line)
if codeView.highlights[line] then if codeView.highlights[line] then
buffer.square(codeView.x, y, codeView.lineNumbersWidth, 1, codeView.highlights[line], require("syntax").colorScheme.text, " ", 30) buffer.square(codeView.x, y, codeView.lineNumbersWidth, 1, codeView.highlights[line], require("syntax").colorScheme.text, " ", 0.3)
buffer.square(codeView.codeAreaPosition, y, codeView.codeAreaWidth, 1, codeView.highlights[line], require("syntax").colorScheme.text, " ") buffer.square(codeView.codeAreaPosition, y, codeView.codeAreaWidth, 1, codeView.highlights[line], require("syntax").colorScheme.text, " ")
end end
buffer.text(codeView.codeAreaPosition - unicode.len(text) - 1, y, require("syntax").colorScheme.lineNumbersText, text) buffer.text(codeView.codeAreaPosition - unicode.len(text) - 1, y, require("syntax").colorScheme.lineNumbersText, text)
@ -1086,6 +1091,7 @@ local function codeViewDraw(codeView)
for i = 1, dy - 1 do for i = 1, dy - 1 do
buffer.square(codeView.codeAreaPosition, y + codeView.selections[selectionIndex].from.line - codeView.fromLine, codeView.codeAreaWidth, 1, codeView.selections[selectionIndex].color or require("syntax").colorScheme.selection, require("syntax").colorScheme.text, " "); y = y + 1 buffer.square(codeView.codeAreaPosition, y + codeView.selections[selectionIndex].from.line - codeView.fromLine, codeView.codeAreaWidth, 1, codeView.selections[selectionIndex].color or require("syntax").colorScheme.selection, require("syntax").colorScheme.text, " "); y = y + 1
end end
drawLowerSelection(y, selectionIndex) drawLowerSelection(y, selectionIndex)
end end
end end
@ -1161,10 +1167,10 @@ local function colorSelectorDraw(colorSelector)
local overlayColor = colorSelector.color < 0x7FFFFF and 0xFFFFFF or 0x000000 local overlayColor = colorSelector.color < 0x7FFFFF and 0xFFFFFF or 0x000000
buffer.square(colorSelector.x, colorSelector.y, colorSelector.width, colorSelector.height, colorSelector.color, overlayColor, " ") buffer.square(colorSelector.x, colorSelector.y, colorSelector.width, colorSelector.height, colorSelector.color, overlayColor, " ")
if colorSelector.pressed then if colorSelector.pressed then
buffer.square(colorSelector.x, colorSelector.y, colorSelector.width, colorSelector.height, overlayColor, overlayColor, " ", 80) buffer.square(colorSelector.x, colorSelector.y, colorSelector.width, colorSelector.height, overlayColor, overlayColor, " ", 0.8)
end end
if colorSelector.height > 1 then if colorSelector.height > 1 then
buffer.text(colorSelector.x, colorSelector.y + colorSelector.height - 1, overlayColor, string.rep("", colorSelector.width), 80) buffer.text(colorSelector.x, colorSelector.y + colorSelector.height - 1, overlayColor, string.rep("", colorSelector.width), 0.8)
end end
buffer.text(colorSelector.x + 1, colorSelector.y + math.floor(colorSelector.height / 2), overlayColor, string.limit(colorSelector.text, colorSelector.width - 2)) buffer.text(colorSelector.x + 1, colorSelector.y + math.floor(colorSelector.height / 2), overlayColor, string.limit(colorSelector.text, colorSelector.width - 2))
return colorSelector return colorSelector
@ -1889,7 +1895,7 @@ end
----------------------------------------- Combo Box Object ----------------------------------------- ----------------------------------------- Combo Box Object -----------------------------------------
local function drawComboBox(object) local function drawComboBox(object)
buffer.square(object.x, object.y, object.width, object.height, object.colors.default.background) buffer.square(object.x, object.y, object.width, object.height, object.colors.default.background, object.colors.default.text, " ")
local x, y, limit, arrowSize = object.x + 1, math.floor(object.y + object.height / 2), object.width - 3, object.height local x, y, limit, arrowSize = object.x + 1, math.floor(object.y + object.height / 2), object.width - 3, object.height
if object.dropDownMenu.itemsContainer.children[object.selectedItem] then if object.dropDownMenu.itemsContainer.children[object.selectedItem] then
buffer.text(x, y, object.colors.default.text, string.limit(object.dropDownMenu.itemsContainer.children[object.selectedItem].text, limit, "right")) buffer.text(x, y, object.colors.default.text, string.limit(object.dropDownMenu.itemsContainer.children[object.selectedItem].text, limit, "right"))
@ -1967,7 +1973,16 @@ function GUI.comboBox(x, y, width, elementHeight, backgroundColor, textColor, ar
} }
} }
object.dropDownMenu = GUI.dropDownMenu(1, 1, 1, math.ceil(buffer.height * 0.5), elementHeight, object.colors.default.background, object.colors.default.text, object.colors.pressed.background, object.colors.pressed.text, GUI.colors.contextMenu.disabled, GUI.colors.contextMenu.separator, GUI.colors.contextMenu.transparency.background, GUI.colors.contextMenu.transparency.shadow) object.dropDownMenu = GUI.dropDownMenu(1, 1, 1, math.ceil(buffer.height * 0.5), elementHeight,
object.colors.default.background,
object.colors.default.text,
object.colors.pressed.background,
object.colors.pressed.text,
GUI.colors.contextMenu.disabled,
GUI.colors.contextMenu.separator,
GUI.colors.contextMenu.transparency.background,
GUI.colors.contextMenu.transparency.shadow
)
object.selectedItem = 1 object.selectedItem = 1
object.addItem = comboBoxAddItem object.addItem = comboBoxAddItem
object.addSeparator = comboBoxAddSeparator object.addSeparator = comboBoxAddSeparator
@ -2725,7 +2740,7 @@ local function treeViewDraw(treeView)
local textLimit = treeView.width - (showScrollBar and 2 or 1) local textLimit = treeView.width - (showScrollBar and 2 or 1)
if treeView.colors.default.background then if treeView.colors.default.background then
buffer.square(treeView.x, treeView.y, treeView.width, treeView.height, treeView.colors.default.background, treeView.colors.default.text, " ") buffer.square(treeView.x, treeView.y, treeView.width, treeView.height, treeView.colors.default.background, treeView.colors.default.directory, " ")
end end
for fileIndex = treeView.fromFile, #treeView.fileList do for fileIndex = treeView.fromFile, #treeView.fileList do
@ -3028,10 +3043,13 @@ local function filesystemChooserDraw(object)
end end
local function filesystemChooserAddExtensionFilter(object, extension) local function filesystemChooserAddExtensionFilter(object, extension)
object.extensionFilters = object.extensionFilters or {}
object.extensionFilters[unicode.lower(extension)] = true object.extensionFilters[unicode.lower(extension)] = true
end end
local function filesystemChooserSetMode(object, filesystemMode)
object.filesystemMode = filesystemMode
end
local function filesystemChooserEventHandler(mainContainer, object, eventData) local function filesystemChooserEventHandler(mainContainer, object, eventData)
if eventData[1] == "touch" then if eventData[1] == "touch" then
object.pressed = true object.pressed = true
@ -3058,14 +3076,14 @@ local function filesystemChooserEventHandler(mainContainer, object, eventData)
mainContainer:draw() mainContainer:draw()
buffer.draw() buffer.draw()
callMethod(object.onItemSelected, object.path) callMethod(object.onSubmit, object.path)
end end
filesystemDialog:show() filesystemDialog:show()
end end
end end
function GUI.filesystemChooser(x, y, width, height, backgroundColor, textColor, tipBackgroundColor, tipTextColor, path, submitButtonText, cancelButtonText, placeholderText, filesystemMode, filesystemDialogPath) function GUI.filesystemChooser(x, y, width, height, backgroundColor, textColor, tipBackgroundColor, tipTextColor, path, submitButtonText, cancelButtonText, placeholderText, filesystemDialogPath)
local object = GUI.object(x, y, width, height) local object = GUI.object(x, y, width, height)
object.eventHandler = comboBoxEventHandler object.eventHandler = comboBoxEventHandler
@ -3082,10 +3100,13 @@ function GUI.filesystemChooser(x, y, width, height, backgroundColor, textColor,
object.pressed = false object.pressed = false
object.path = path object.path = path
object.filesystemDialogPath = filesystemDialogPath object.filesystemDialogPath = filesystemDialogPath
object.filesystemMode = GUI.filesystemModes.file
object.extensionFilters = {}
object.draw = filesystemChooserDraw object.draw = filesystemChooserDraw
object.eventHandler = filesystemChooserEventHandler object.eventHandler = filesystemChooserEventHandler
object.filesystemMode = filesystemMode
object.addExtensionFilter = filesystemChooserAddExtensionFilter object.addExtensionFilter = filesystemChooserAddExtensionFilter
object.setMode = filesystemChooserSetMode
return object return object
end end
@ -3098,7 +3119,7 @@ end
-- local mainContainer = GUI.fullScreenContainer() -- local mainContainer = GUI.fullScreenContainer()
-- mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x262626)) -- mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x262626))
-- local dialog = GUI.showFilesystemDialog(mainContainer, "Save", "Cancel", "File name", "/") -- local dialog = GUI.addFilesystemDialogToContainer(mainContainer, "Save", "Cancel", "File name", "/")
-- dialog:setMode(GUI.filesystemModes.open, GUI.filesystemModes.file) -- dialog:setMode(GUI.filesystemModes.open, GUI.filesystemModes.file)
-- dialog:addExtensionFilter(".pic") -- dialog:addExtensionFilter(".pic")
@ -3108,9 +3129,9 @@ end
-- GUI.error(path) -- GUI.error(path)
-- end -- end
-- local filesystemChooser = mainContainer:addChild(GUI.filesystemChooser(2, 2, 30, 3, 0xE1E1E1, 0x888888, 0x3C3C3C, 0x888888, nil, "Open", "Cancel", "Choose file", GUI.filesystemModes.file, "/")) -- local filesystemChooser = mainContainer:addChild(GUI.filesystemChooser(2, 2, 30, 3, 0xE1E1E1, 0x888888, 0x3C3C3C, 0x888888, nil, "Open", "Cancel", "Choose file", "/"))
-- filesystemChooser:addExtensionFilter(".cfg") -- filesystemChooser:addExtensionFilter(".cfg")
-- filesystemChooser.onItemSelected = function(path) -- filesystemChooser.onSubmit = function(path)
-- GUI.error("File \"" .. path .. "\" was selected") -- GUI.error("File \"" .. path .. "\" was selected")
-- end -- end

View File

@ -490,7 +490,7 @@ function meowEngine.intro(vector3Position, size)
scene:addObject(meowEngine.newFloatingText(vector.newVector3(vector3Position[1] + 2, vector3Position[2] - size, vector3Position[3] + size * 0.1), 0xBBBBBB, "Powered by MeowEngine™")) scene:addObject(meowEngine.newFloatingText(vector.newVector3(vector3Position[1] + 2, vector3Position[2] - size, vector3Position[3] + size * 0.1), 0xBBBBBB, "Powered by MeowEngine™"))
local from, to, speed = -30, 20, 4 local from, to, speed = -30, 20, 4
local transparency, transparencyStep = 0, 100 / math.abs(to - from) * speed local transparency, transparencyStep = 0, 1 / math.abs(to - from) * speed
scene.camera:setPosition(from, 0, -32) scene.camera:setPosition(from, 0, -32)
while scene.camera.position[1] < to do while scene.camera.position[1] < to do
@ -507,7 +507,7 @@ function meowEngine.intro(vector3Position, size)
os.sleep(2) os.sleep(2)
for i = 100, 0, -20 do for i = 1, 0, -0.2 do
scene:render() scene:render()
buffer.clear(0x0, i) buffer.clear(0x0, i)
buffer.draw() buffer.draw()

View File

@ -328,7 +328,7 @@ function MineOSCore.icon(x, y, path, textColor, selectionColor, showExtension)
icon.colors = { icon.colors = {
text = textColor, text = textColor,
selection = selectionColor, selection = selectionColor,
selectionTransparency = 60 selectionTransparency = 0.6
} }
icon.path = path icon.path = path
icon.isDirectory = fs.isDirectory(icon.path) icon.isDirectory = fs.isDirectory(icon.path)
@ -393,6 +393,11 @@ local function iconFieldSaveIconConfig(iconField)
table.toFile(iconField.workpath .. MineOSCore.iconConfigFileName, iconField.iconConfig) table.toFile(iconField.workpath .. MineOSCore.iconConfigFileName, iconField.iconConfig)
end end
local function iconFieldDeleteIconConfig(iconField)
iconField.iconConfig = {}
fs.remove(iconField.workpath .. MineOSCore.iconConfigFileName, iconField.iconConfig)
end
local function iconFieldUpdateFileList(iconField) local function iconFieldUpdateFileList(iconField)
-- Обновление файлового списка -- Обновление файлового списка
iconField.fileList = fs.sortedList(iconField.workpath, iconField.sortingMethod, iconField.showHiddenFiles) iconField.fileList = fs.sortedList(iconField.workpath, iconField.sortingMethod, iconField.showHiddenFiles)
@ -405,6 +410,7 @@ local function iconFieldUpdateFileList(iconField)
local xPos, yPos, horizontalIconCounter = 1, 1, 1 local xPos, yPos, horizontalIconCounter = 1, 1, 1
for i = iconField.fromFile, iconField.fromFile + iconField.iconCount.total - 1 do for i = iconField.fromFile, iconField.fromFile + iconField.iconCount.total - 1 do
if iconField.fileList[i] then if iconField.fileList[i] then
-- Выставление позиций иконок на основании конфига
local xIcon, yIcon = xPos, yPos local xIcon, yIcon = xPos, yPos
if iconField.iconConfig[iconField.fileList[i]] then if iconField.iconConfig[iconField.fileList[i]] then
xIcon, yIcon = iconField.iconConfig[iconField.fileList[i]].x, iconField.iconConfig[iconField.fileList[i]].y xIcon, yIcon = iconField.iconConfig[iconField.fileList[i]].x, iconField.iconConfig[iconField.fileList[i]].y
@ -483,20 +489,20 @@ local function iconFieldBackgroundObjectEventHandler(mainContainer, object, even
end end
local subMenu = menu:addSubMenu(MineOSCore.localization.sortBy) local subMenu = menu:addSubMenu(MineOSCore.localization.sortBy)
subMenu:addItem(MineOSCore.localization.sortByName).onTouch = function() subMenu:addItem(MineOSCore.localization.sortByName).onTouch = function()
object.parent:deleteIconConfig()
MineOSCore.OSSettings.sortingMethod = "name" MineOSCore.OSSettings.sortingMethod = "name"
MineOSCore.saveOSSettings() MineOSCore.saveOSSettings()
MineOSCore.OSMainContainer.iconField.sortingMethod = MineOSCore.OSSettings.sortingMethod MineOSCore.OSMainContainer.iconField.sortingMethod = MineOSCore.OSSettings.sortingMethod
computer.pushSignal("MineOSCore", "updateFileList") computer.pushSignal("MineOSCore", "updateFileList")
end end
menu:addItem(MineOSCore.localization.sortAutomatically).onTouch = function()
object.parent.iconConfig = {}
object.parent:saveIconConfig()
computer.pushSignal("MineOSCore", "updateFileList")
end
subMenu:addItem(MineOSCore.localization.sortByDate).onTouch = function() subMenu:addItem(MineOSCore.localization.sortByDate).onTouch = function()
object.parent:deleteIconConfig()
MineOSCore.OSSettings.sortingMethod = "date" MineOSCore.OSSettings.sortingMethod = "date"
MineOSCore.saveOSSettings() MineOSCore.saveOSSettings()
MineOSCore.OSMainContainer.iconField.sortingMethod = MineOSCore.OSSettings.sortingMethod MineOSCore.OSMainContainer.iconField.sortingMethod = MineOSCore.OSSettings.sortingMethod
@ -504,12 +510,19 @@ local function iconFieldBackgroundObjectEventHandler(mainContainer, object, even
end end
subMenu:addItem(MineOSCore.localization.sortByType).onTouch = function() subMenu:addItem(MineOSCore.localization.sortByType).onTouch = function()
object.parent:deleteIconConfig()
MineOSCore.OSSettings.sortingMethod = "type" MineOSCore.OSSettings.sortingMethod = "type"
MineOSCore.saveOSSettings() MineOSCore.saveOSSettings()
MineOSCore.OSMainContainer.iconField.sortingMethod = MineOSCore.OSSettings.sortingMethod MineOSCore.OSMainContainer.iconField.sortingMethod = MineOSCore.OSSettings.sortingMethod
computer.pushSignal("MineOSCore", "updateFileList") computer.pushSignal("MineOSCore", "updateFileList")
end end
menu:addItem(MineOSCore.localization.sortAutomatically).onTouch = function()
object.parent:deleteIconConfig()
computer.pushSignal("MineOSCore", "updateFileList")
end
menu:addSeparator() menu:addSeparator()
menu:addItem(MineOSCore.localization.paste, not MineOSCore.clipboard).onTouch = function() menu:addItem(MineOSCore.localization.paste, not MineOSCore.clipboard).onTouch = function()
@ -565,7 +578,7 @@ local function iconFieldForegroundObjectDraw(object)
y1, y2 = y2, y1 y1, y2 = y2, y1
end end
buffer.square(x1, y1, x2 - x1 + 1, y2 - y1 + 1, 0xFFFFFF, 0x0, " ", 60) buffer.square(x1, y1, x2 - x1 + 1, y2 - y1 + 1, 0xFFFFFF, 0x0, " ", 0.6)
local partialWidth, partialHeight = MineOSCore.iconWidth * MineOSCore.selectionIconPart, MineOSCore.iconHeight * MineOSCore.selectionIconPart local partialWidth, partialHeight = MineOSCore.iconWidth * MineOSCore.selectionIconPart, MineOSCore.iconHeight * MineOSCore.selectionIconPart
for i = 1, #object.parent.iconsContainer.children do for i = 1, #object.parent.iconsContainer.children do
@ -635,6 +648,7 @@ function MineOSCore.iconField(x, y, width, height, xSpaceBetweenIcons, ySpaceBet
iconField.deselectAll = iconFieldDeselectAll iconField.deselectAll = iconFieldDeselectAll
iconField.loadIconConfig = iconFieldLoadIconConfig iconField.loadIconConfig = iconFieldLoadIconConfig
iconField.saveIconConfig = iconFieldSaveIconConfig iconField.saveIconConfig = iconFieldSaveIconConfig
iconField.deleteIconConfig = iconFieldDeleteIconConfig
iconField.getSelectedIcons = iconFieldGetSelectedIcons iconField.getSelectedIcons = iconFieldGetSelectedIcons
return iconField return iconField
@ -669,7 +683,7 @@ function MineOSCore.parseErrorMessage(error, indentationWidth)
end end
function MineOSCore.showErrorWindow(path, errorLine, reason) function MineOSCore.showErrorWindow(path, errorLine, reason)
buffer.clear(0x0, 50) buffer.clear(0x0, 0.5)
local mainContainer = GUI.container(1, 1, buffer.width, math.floor(buffer.height * 0.45)) local mainContainer = GUI.container(1, 1, buffer.width, math.floor(buffer.height * 0.45))
mainContainer.y = math.floor(buffer.height / 2 - mainContainer.height / 2) mainContainer.y = math.floor(buffer.height / 2 - mainContainer.height / 2)
@ -926,7 +940,7 @@ function MineOSCore.iconRightClick(icon, eventData)
for i = 1, #selectedIcons do for i = 1, #selectedIcons do
if not selectedIcons[i].isShortcut then if not selectedIcons[i].isShortcut then
MineOSCore.createShortcut( MineOSCore.createShortcut(
fs.path(MineOSCore.paths.desktop) .. "/" .. fs.hideExtension(fs.name(selectedIcons[i].path)) .. ".lnk", MineOSCore.paths.desktop .. "/" .. fs.hideExtension(fs.name(selectedIcons[i].path)) .. ".lnk",
selectedIcons[i].path selectedIcons[i].path
) )
end end
@ -986,7 +1000,7 @@ end
function MineOSCore.addUniversalContainer(parentContainer, title) function MineOSCore.addUniversalContainer(parentContainer, title)
local container = parentContainer:addChild(GUI.container(1, 1, parentContainer.width, parentContainer.height)) local container = parentContainer:addChild(GUI.container(1, 1, parentContainer.width, parentContainer.height))
container.panel = container:addChild(GUI.panel(1, 1, container.width, container.height, MineOSCore.OSSettings.transparencyEnabled and 0x0 or (MineOSCore.OSSettings.backgroundColor or 0x0F0F0F), MineOSCore.OSSettings.transparencyEnabled and 20)) container.panel = container:addChild(GUI.panel(1, 1, container.width, container.height, MineOSCore.OSSettings.transparencyEnabled and 0x0 or (MineOSCore.OSSettings.backgroundColor or 0x0F0F0F), MineOSCore.OSSettings.transparencyEnabled and 0.2))
container.layout = container:addChild(GUI.layout(1, 1, container.width, container.height, 1, 1)) container.layout = container:addChild(GUI.layout(1, 1, container.width, container.height, 1, 1))
if title then if title then
@ -1327,7 +1341,7 @@ end
function MineOSCore.propertiesWindow(x, y, width, icon) function MineOSCore.propertiesWindow(x, y, width, icon)
local mainContainer, window = MineOSCore.addWindow(GUI.titledWindow(x, y, width, 1, package.loaded.MineOSCore.localization.properties)) local mainContainer, window = MineOSCore.addWindow(GUI.titledWindow(x, y, width, 1, package.loaded.MineOSCore.localization.properties))
-- window.backgroundPanel.colors.transparency = 25 -- window.backgroundPanel.colors.transparency = 0.25
window:addChild(GUI.image(2, 3, icon.image)) window:addChild(GUI.image(2, 3, icon.image))
local x, y = 11, 3 local x, y = 11, 3

View File

@ -5,7 +5,7 @@ local color = {}
----------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------
-- Yoba-fix for PIDORS -- Optimized Lua 5.3 bitwise support
if computer.getArchitecture and computer.getArchitecture() == "Lua 5.3" then if computer.getArchitecture and computer.getArchitecture() == "Lua 5.3" then
color.RGBToHEX = load([[ color.RGBToHEX = load([[
return function(r, g, b) return function(r, g, b)
@ -24,76 +24,55 @@ function color.HEXToRGB(HEXColor)
return bit32.rshift(HEXColor, 16), bit32.band(bit32.rshift(HEXColor, 8), 0xFF), bit32.band(HEXColor, 0xFF) return bit32.rshift(HEXColor, 16), bit32.band(bit32.rshift(HEXColor, 8), 0xFF), bit32.band(HEXColor, 0xFF)
end end
function color.RGBToHSB(rr, gg, bb) -----------------------------------------------------------------------------------------------------------------------
local max = math.max(rr, math.max(gg, bb))
local min = math.min(rr, math.min(gg, bb))
local delta = max - min
local h = 0 function color.RGBToHSB(r, g, b)
if ( max == rr and gg >= bb) then h = 60 * (gg - bb) / delta end local max, min = math.max(r, g, b), math.min(r, g, b)
if ( max == rr and gg <= bb ) then h = 60 * (gg - bb) / delta + 360 end
if ( max == gg ) then h = 60 * (bb - rr) / delta + 120 end
if ( max == bb ) then h = 60 * (rr - gg) / delta + 240 end
local s = 0 if max == min then
if ( max ~= 0 ) then s = 1 - (min / max) end return 0, max == 0 and 0 or (1 - min / max) * 100, max / 255 * 100
elseif max == r and g >= b then
local b = max * 100 / 255 return 60 * (g - b) / (max - min), max == 0 and 0 or (1 - min / max) * 100, max / 255 * 100
elseif max == r and g < b then
if delta == 0 then h = 0 end return 60 * (g - b) / (max - min) + 360, max == 0 and 0 or (1 - min / max) * 100, max / 255 * 100
elseif max == g then
return h, s * 100, b return 60 * (b - r) / (max - min) + 120, max == 0 and 0 or (1 - min / max) * 100, max / 255 * 100
elseif max == b then
return 60 * (r - g) / (max - min) + 240, max == 0 and 0 or (1 - min / max) * 100, max / 255 * 100
else
return 0, max == 0 and 0 or (1 - min / max) * 100, max / 255 * 100
end
end end
function color.HSBToRGB(h, s, v) function color.HSBToRGB(h, s, b)
if h > 359 then h = 0 end s, b = s / 100, b / 100
local rr, gg, bb = 0, 0, 0 local integer, fractional = math.modf(h / 60)
local const = 255 local p, q, t = b * (1 - s), b * (1 - s * fractional), b * (1 - (1 - fractional) * s)
s = s / 100 if integer == 0 then
v = v / 100 return math.floor(b * 255), math.floor(t * 255), math.floor(p * 255)
elseif integer == 1 then
local i = math.floor(h / 60) return math.floor(q * 255), math.floor(b * 255), math.floor(p * 255)
local f = h / 60 - i elseif integer == 2 then
return math.floor(p * 255), math.floor(b * 255), math.floor(t * 255)
local p = v * (1 - s) elseif integer == 3 then
local q = v * (1 - s * f) return math.floor(p * 255), math.floor(q * 255), math.floor(b * 255)
local t = v * (1 - (1 - f) * s) elseif integer == 4 then
return math.floor(t * 255), math.floor(p * 255), math.floor(b * 255)
if ( i == 0 ) then rr, gg, bb = v, t, p end else
if ( i == 1 ) then rr, gg, bb = q, v, p end return math.floor(b * 255), math.floor(p * 255), math.floor(q * 255)
if ( i == 2 ) then rr, gg, bb = p, v, t end end
if ( i == 3 ) then rr, gg, bb = p, q, v end
if ( i == 4 ) then rr, gg, bb = t, p, v end
if ( i == 5 ) then rr, gg, bb = v, p, q end
return math.floor(rr * const), math.floor(gg * const), math.floor(bb * const)
end end
function color.HEXToHSB(HEXColor) function color.HEXToHSB(HEXColor)
local rr, gg, bb = color.HEXToRGB(HEXColor) return color.RGBToHSB(color.HEXToRGB(HEXColor))
local h, s, b = color.RGBToHSB( rr, gg, bb )
return h, s, b
end end
function color.HSBToHEX(h, s, b) function color.HSBToHEX(h, s, b)
local rr, gg, bb = color.HSBToRGB(h, s, b) return color.RGBToHEX(color.HSBToRGB(h, s, b))
local color = color.RGBToHEX(rr, gg, bb)
return color
end end
function color.average(colors) -----------------------------------------------------------------------------------------------------------------------
local sColors, averageRed, averageGreen, averageBlue, r, g, b = #colors, 0, 0, 0
for i = 1, sColors do
r, g, b = color.HEXToRGB(colors[i])
averageRed, averageGreen, averageBlue = averageRed + r, averageGreen + g, averageBlue + b
end
return color.RGBToHEX(math.floor(averageRed / sColors), math.floor(averageGreen / sColors), math.floor(averageBlue / sColors))
end
function color.blend(firstColor, secondColor, secondColorTransparency) function color.blend(firstColor, secondColor, secondColorTransparency)
local invertedTransparency, firstColorR, firstColorG, firstColorB = 1 - secondColorTransparency, color.HEXToRGB(firstColor) local invertedTransparency, firstColorR, firstColorG, firstColorB = 1 - secondColorTransparency, color.HEXToRGB(firstColor)
@ -106,6 +85,13 @@ function color.blend(firstColor, secondColor, secondColorTransparency)
) )
end end
function color.blendRGBA(c1, c2, a1, a2)
local oneMinusA1, oneMinusA2 = 1 - a1, 1 - a2
return
color.blend(c1, c2, a2),
1 - (oneMinusA1 + a1 * oneMinusA2)
end
----------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------
function color.difference(r1, g1, b1, r2, g2, b2) function color.difference(r1, g1, b1, r2, g2, b2)
@ -125,6 +111,17 @@ function color.multiply(r, g, b, multiplyer)
return r, g, b return r, g, b
end end
function color.average(colors)
local sColors, averageRed, averageGreen, averageBlue, r, g, b = #colors, 0, 0, 0
for i = 1, sColors do
r, g, b = color.HEXToRGB(colors[i])
averageRed, averageGreen, averageBlue = averageRed + r, averageGreen + g, averageBlue + b
end
return color.RGBToHEX(math.floor(averageRed / sColors), math.floor(averageGreen / sColors), math.floor(averageBlue / sColors))
end
----------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------
local openComputersPalette = { 0x000000, 0x000040, 0x000080, 0x0000BF, 0x0000FF, 0x002400, 0x002440, 0x002480, 0x0024BF, 0x0024FF, 0x004900, 0x004940, 0x004980, 0x0049BF, 0x0049FF, 0x006D00, 0x006D40, 0x006D80, 0x006DBF, 0x006DFF, 0x009200, 0x009240, 0x009280, 0x0092BF, 0x0092FF, 0x00B600, 0x00B640, 0x00B680, 0x00B6BF, 0x00B6FF, 0x00DB00, 0x00DB40, 0x00DB80, 0x00DBBF, 0x00DBFF, 0x00FF00, 0x00FF40, 0x00FF80, 0x00FFBF, 0x00FFFF, 0x0F0F0F, 0x1E1E1E, 0x2D2D2D, 0x330000, 0x330040, 0x330080, 0x3300BF, 0x3300FF, 0x332400, 0x332440, 0x332480, 0x3324BF, 0x3324FF, 0x334900, 0x334940, 0x334980, 0x3349BF, 0x3349FF, 0x336D00, 0x336D40, 0x336D80, 0x336DBF, 0x336DFF, 0x339200, 0x339240, 0x339280, 0x3392BF, 0x3392FF, 0x33B600, 0x33B640, 0x33B680, 0x33B6BF, 0x33B6FF, 0x33DB00, 0x33DB40, 0x33DB80, 0x33DBBF, 0x33DBFF, 0x33FF00, 0x33FF40, 0x33FF80, 0x33FFBF, 0x33FFFF, 0x3C3C3C, 0x4B4B4B, 0x5A5A5A, 0x660000, 0x660040, 0x660080, 0x6600BF, 0x6600FF, 0x662400, 0x662440, 0x662480, 0x6624BF, 0x6624FF, 0x664900, 0x664940, 0x664980, 0x6649BF, 0x6649FF, 0x666D00, 0x666D40, 0x666D80, 0x666DBF, 0x666DFF, 0x669200, 0x669240, 0x669280, 0x6692BF, 0x6692FF, 0x66B600, 0x66B640, 0x66B680, 0x66B6BF, 0x66B6FF, 0x66DB00, 0x66DB40, 0x66DB80, 0x66DBBF, 0x66DBFF, 0x66FF00, 0x66FF40, 0x66FF80, 0x66FFBF, 0x66FFFF, 0x696969, 0x787878, 0x878787, 0x969696, 0x990000, 0x990040, 0x990080, 0x9900BF, 0x9900FF, 0x992400, 0x992440, 0x992480, 0x9924BF, 0x9924FF, 0x994900, 0x994940, 0x994980, 0x9949BF, 0x9949FF, 0x996D00, 0x996D40, 0x996D80, 0x996DBF, 0x996DFF, 0x999200, 0x999240, 0x999280, 0x9992BF, 0x9992FF, 0x99B600, 0x99B640, 0x99B680, 0x99B6BF, 0x99B6FF, 0x99DB00, 0x99DB40, 0x99DB80, 0x99DBBF, 0x99DBFF, 0x99FF00, 0x99FF40, 0x99FF80, 0x99FFBF, 0x99FFFF, 0xA5A5A5, 0xB4B4B4, 0xC3C3C3, 0xCC0000, 0xCC0040, 0xCC0080, 0xCC00BF, 0xCC00FF, 0xCC2400, 0xCC2440, 0xCC2480, 0xCC24BF, 0xCC24FF, 0xCC4900, 0xCC4940, 0xCC4980, 0xCC49BF, 0xCC49FF, 0xCC6D00, 0xCC6D40, 0xCC6D80, 0xCC6DBF, 0xCC6DFF, 0xCC9200, 0xCC9240, 0xCC9280, 0xCC92BF, 0xCC92FF, 0xCCB600, 0xCCB640, 0xCCB680, 0xCCB6BF, 0xCCB6FF, 0xCCDB00, 0xCCDB40, 0xCCDB80, 0xCCDBBF, 0xCCDBFF, 0xCCFF00, 0xCCFF40, 0xCCFF80, 0xCCFFBF, 0xCCFFFF, 0xD2D2D2, 0xE1E1E1, 0xF0F0F0, 0xFF0000, 0xFF0040, 0xFF0080, 0xFF00BF, 0xFF00FF, 0xFF2400, 0xFF2440, 0xFF2480, 0xFF24BF, 0xFF24FF, 0xFF4900, 0xFF4940, 0xFF4980, 0xFF49BF, 0xFF49FF, 0xFF6D00, 0xFF6D40, 0xFF6D80, 0xFF6DBF, 0xFF6DFF, 0xFF9200, 0xFF9240, 0xFF9280, 0xFF92BF, 0xFF92FF, 0xFFB600, 0xFFB640, 0xFFB680, 0xFFB6BF, 0xFFB6FF, 0xFFDB00, 0xFFDB40, 0xFFDB80, 0xFFDBBF, 0xFFDBFF, 0xFFFF00, 0xFFFF40, 0xFFFF80, 0xFFFFBF, 0xFFFFFF } local openComputersPalette = { 0x000000, 0x000040, 0x000080, 0x0000BF, 0x0000FF, 0x002400, 0x002440, 0x002480, 0x0024BF, 0x0024FF, 0x004900, 0x004940, 0x004980, 0x0049BF, 0x0049FF, 0x006D00, 0x006D40, 0x006D80, 0x006DBF, 0x006DFF, 0x009200, 0x009240, 0x009280, 0x0092BF, 0x0092FF, 0x00B600, 0x00B640, 0x00B680, 0x00B6BF, 0x00B6FF, 0x00DB00, 0x00DB40, 0x00DB80, 0x00DBBF, 0x00DBFF, 0x00FF00, 0x00FF40, 0x00FF80, 0x00FFBF, 0x00FFFF, 0x0F0F0F, 0x1E1E1E, 0x2D2D2D, 0x330000, 0x330040, 0x330080, 0x3300BF, 0x3300FF, 0x332400, 0x332440, 0x332480, 0x3324BF, 0x3324FF, 0x334900, 0x334940, 0x334980, 0x3349BF, 0x3349FF, 0x336D00, 0x336D40, 0x336D80, 0x336DBF, 0x336DFF, 0x339200, 0x339240, 0x339280, 0x3392BF, 0x3392FF, 0x33B600, 0x33B640, 0x33B680, 0x33B6BF, 0x33B6FF, 0x33DB00, 0x33DB40, 0x33DB80, 0x33DBBF, 0x33DBFF, 0x33FF00, 0x33FF40, 0x33FF80, 0x33FFBF, 0x33FFFF, 0x3C3C3C, 0x4B4B4B, 0x5A5A5A, 0x660000, 0x660040, 0x660080, 0x6600BF, 0x6600FF, 0x662400, 0x662440, 0x662480, 0x6624BF, 0x6624FF, 0x664900, 0x664940, 0x664980, 0x6649BF, 0x6649FF, 0x666D00, 0x666D40, 0x666D80, 0x666DBF, 0x666DFF, 0x669200, 0x669240, 0x669280, 0x6692BF, 0x6692FF, 0x66B600, 0x66B640, 0x66B680, 0x66B6BF, 0x66B6FF, 0x66DB00, 0x66DB40, 0x66DB80, 0x66DBBF, 0x66DBFF, 0x66FF00, 0x66FF40, 0x66FF80, 0x66FFBF, 0x66FFFF, 0x696969, 0x787878, 0x878787, 0x969696, 0x990000, 0x990040, 0x990080, 0x9900BF, 0x9900FF, 0x992400, 0x992440, 0x992480, 0x9924BF, 0x9924FF, 0x994900, 0x994940, 0x994980, 0x9949BF, 0x9949FF, 0x996D00, 0x996D40, 0x996D80, 0x996DBF, 0x996DFF, 0x999200, 0x999240, 0x999280, 0x9992BF, 0x9992FF, 0x99B600, 0x99B640, 0x99B680, 0x99B6BF, 0x99B6FF, 0x99DB00, 0x99DB40, 0x99DB80, 0x99DBBF, 0x99DBFF, 0x99FF00, 0x99FF40, 0x99FF80, 0x99FFBF, 0x99FFFF, 0xA5A5A5, 0xB4B4B4, 0xC3C3C3, 0xCC0000, 0xCC0040, 0xCC0080, 0xCC00BF, 0xCC00FF, 0xCC2400, 0xCC2440, 0xCC2480, 0xCC24BF, 0xCC24FF, 0xCC4900, 0xCC4940, 0xCC4980, 0xCC49BF, 0xCC49FF, 0xCC6D00, 0xCC6D40, 0xCC6D80, 0xCC6DBF, 0xCC6DFF, 0xCC9200, 0xCC9240, 0xCC9280, 0xCC92BF, 0xCC92FF, 0xCCB600, 0xCCB640, 0xCCB680, 0xCCB6BF, 0xCCB6FF, 0xCCDB00, 0xCCDB40, 0xCCDB80, 0xCCDBBF, 0xCCDBFF, 0xCCFF00, 0xCCFF40, 0xCCFF80, 0xCCFFBF, 0xCCFFFF, 0xD2D2D2, 0xE1E1E1, 0xF0F0F0, 0xFF0000, 0xFF0040, 0xFF0080, 0xFF00BF, 0xFF00FF, 0xFF2400, 0xFF2440, 0xFF2480, 0xFF24BF, 0xFF24FF, 0xFF4900, 0xFF4940, 0xFF4980, 0xFF49BF, 0xFF49FF, 0xFF6D00, 0xFF6D40, 0xFF6D80, 0xFF6DBF, 0xFF6DFF, 0xFF9200, 0xFF9240, 0xFF9280, 0xFF92BF, 0xFF92FF, 0xFFB600, 0xFFB640, 0xFFB680, 0xFFB6BF, 0xFFB6FF, 0xFFDB00, 0xFFDB40, 0xFFDB80, 0xFFDBBF, 0xFFDBFF, 0xFFFF00, 0xFFFF40, 0xFFFF80, 0xFFFFBF, 0xFFFFFF }
@ -156,13 +153,6 @@ function color.optimize(color24Bit)
return color.to24Bit(color.to8Bit(color24Bit)) return color.to24Bit(color.to8Bit(color24Bit))
end end
function color.blendRGBA(c1, c2, a1, a2)
local oneMinusA1, oneMinusA2 = 1 - a1, 1 - a2
return
color.blend(c1, c2, a2),
1 - (oneMinusA1 + a1 * oneMinusA2)
end
----------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------
-- local c, a = color.blendRGBA(0x0000FF, 0xFF0000, 0.5, 0.5) -- local c, a = color.blendRGBA(0x0000FF, 0xFF0000, 0.5, 0.5)

View File

@ -106,38 +106,31 @@ function buffer.set(x, y, background, foreground, symbol)
end end
function buffer.square(x, y, width, height, background, foreground, symbol, transparency) function buffer.square(x, y, width, height, background, foreground, symbol, transparency)
if transparency then
if transparency == 0 then
transparency = nil
else
transparency = transparency / 100
end
end
if not foreground then foreground = 0x000000 end
if not symbol then symbol = " " end
local index, indexStepForward, indexPlus1 = buffer.getIndexByCoordinates(x, y), (buffer.width - width) * 3 local index, indexStepForward, indexPlus1 = buffer.getIndexByCoordinates(x, y), (buffer.width - width) * 3
for j = y, (y + height - 1) do for j = y, (y + height - 1) do
for i = x, (x + width - 1) do for i = x, (x + width - 1) do
if i >= buffer.drawLimit.x1 and j >= buffer.drawLimit.y1 and i <= buffer.drawLimit.x2 and j <= buffer.drawLimit.y2 then if i >= buffer.drawLimit.x1 and j >= buffer.drawLimit.y1 and i <= buffer.drawLimit.x2 and j <= buffer.drawLimit.y2 then
indexPlus1 = index + 1 indexPlus1 = index + 1
if transparency then if transparency then
buffer.newFrame[index] = color.blend(buffer.newFrame[index], background, transparency) buffer.newFrame[index], buffer.newFrame[indexPlus1] =
buffer.newFrame[indexPlus1] = color.blend(buffer.newFrame[indexPlus1], background, transparency) color.blend(buffer.newFrame[index], background, transparency),
color.blend(buffer.newFrame[indexPlus1], background, transparency)
else else
buffer.newFrame[index] = background buffer.newFrame[index], buffer.newFrame[indexPlus1], buffer.newFrame[index + 2] = background, foreground, symbol
buffer.newFrame[indexPlus1] = foreground
buffer.newFrame[index + 2] = symbol
end end
end end
index = index + 3 index = index + 3
end end
index = index + indexStepForward index = index + indexStepForward
end end
end end
function buffer.clear(color, transparency) function buffer.clear(color, transparency)
buffer.square(1, 1, buffer.width, buffer.height, color or 0x262626, 0x000000, " ", transparency) buffer.square(1, 1, buffer.width, buffer.height, color or 0x0, 0x000000, " ", transparency)
end end
function buffer.copy(x, y, width, height) function buffer.copy(x, y, width, height)
@ -211,22 +204,20 @@ function buffer.line(x1, y1, x2, y2, background, foreground, alpha, symbol)
end end
function buffer.text(x, y, textColor, text, transparency) function buffer.text(x, y, textColor, text, transparency)
if transparency then
if transparency == 0 then
transparency = nil
else
transparency = transparency / 100
end
end
local index, sText = buffer.getIndexByCoordinates(x, y), unicode.len(text) local index, sText = buffer.getIndexByCoordinates(x, y), unicode.len(text)
for i = 1, sText do for i = 1, sText do
if x >= buffer.drawLimit.x1 and y >= buffer.drawLimit.y1 and x <= buffer.drawLimit.x2 and y <= buffer.drawLimit.y2 then if x >= buffer.drawLimit.x1 and y >= buffer.drawLimit.y1 and x <= buffer.drawLimit.x2 and y <= buffer.drawLimit.y2 then
buffer.newFrame[index + 1] = not transparency and textColor or color.blend(buffer.newFrame[index], textColor, transparency) if transparency then
buffer.newFrame[index + 1] = color.blend(buffer.newFrame[index], textColor, transparency)
else
buffer.newFrame[index + 1] = textColor
end
buffer.newFrame[index + 2] = unicode.sub(text, i, i) buffer.newFrame[index + 2] = unicode.sub(text, i, i)
end end
index = index + 3
x = x + 1 x, index = x + 1, index + 3
end end
end end
@ -239,10 +230,10 @@ function buffer.image(x, y, picture, blendForeground)
if xPos >= buffer.drawLimit.x1 and y >= buffer.drawLimit.y1 and xPos <= buffer.drawLimit.x2 and y <= buffer.drawLimit.y2 then if xPos >= buffer.drawLimit.x1 and y >= buffer.drawLimit.y1 and xPos <= buffer.drawLimit.x2 and y <= buffer.drawLimit.y2 then
bufferIndexPlus1, imageIndexPlus1, imageIndexPlus2, imageIndexPlus3 = bufferIndex + 1, imageIndex + 1, imageIndex + 2, imageIndex + 3 bufferIndexPlus1, imageIndexPlus1, imageIndexPlus2, imageIndexPlus3 = bufferIndex + 1, imageIndex + 1, imageIndex + 2, imageIndex + 3
if picture[imageIndexPlus2] == 0x00 then if picture[imageIndexPlus2] == 0 then
buffer.newFrame[bufferIndex] = picture[imageIndex] buffer.newFrame[bufferIndex] = picture[imageIndex]
buffer.newFrame[bufferIndex + 1] = picture[imageIndex + 1] buffer.newFrame[bufferIndex + 1] = picture[imageIndex + 1]
elseif picture[imageIndexPlus2] > 0x00 and picture[imageIndexPlus2] < 0xFF then elseif picture[imageIndexPlus2] > 0 and picture[imageIndexPlus2] < 1 then
buffer.newFrame[bufferIndex] = color.blend(buffer.newFrame[bufferIndex], picture[imageIndex], picture[imageIndexPlus2]) buffer.newFrame[bufferIndex] = color.blend(buffer.newFrame[bufferIndex], picture[imageIndex], picture[imageIndexPlus2])
if blendForeground then if blendForeground then
@ -250,7 +241,7 @@ function buffer.image(x, y, picture, blendForeground)
else else
buffer.newFrame[bufferIndex + 1] = picture[imageIndex + 1] buffer.newFrame[bufferIndex + 1] = picture[imageIndex + 1]
end end
elseif picture[imageIndexPlus2] == 0xFF and picture[imageIndexPlus3] ~= " " then elseif picture[imageIndexPlus2] == 1 and picture[imageIndexPlus3] ~= " " then
buffer.newFrame[bufferIndex + 1] = picture[imageIndex + 1] buffer.newFrame[bufferIndex + 1] = picture[imageIndex + 1]
end end
@ -272,74 +263,10 @@ function buffer.frame(x, y, width, height, color)
buffer.text(x2, y, color, "") buffer.text(x2, y, color, "")
y = y + 1 y = y + 1
end end
buffer.text(x, y, color, stringDown) buffer.text(x, y, color, stringDown)
end end
function buffer.button(x, y, width, height, background, foreground, text)
local textLength = unicode.len(text)
if textLength > width - 2 then text = unicode.sub(text, 1, width - 2) end
local textPosX = math.floor(x + width / 2 - textLength / 2)
local textPosY = math.floor(y + height / 2)
buffer.square(x, y, width, height, background, foreground, " ")
buffer.text(textPosX, textPosY, foreground, text)
return x, y, (x + width - 1), (y + height - 1)
end
function buffer.adaptiveButton(x, y, xOffset, yOffset, background, foreground, text)
local width = xOffset * 2 + unicode.len(text)
local height = yOffset * 2 + 1
buffer.square(x, y, width, height, background, 0xFFFFFF, " ")
buffer.text(x + xOffset, y + yOffset, foreground, text)
return x, y, (x + width - 1), (y + height - 1)
end
function buffer.framedButton(x, y, width, height, backColor, buttonColor, text)
buffer.square(x, y, width, height, backColor, buttonColor, " ")
buffer.frame(x, y, width, height, buttonColor)
x = math.floor(x + width / 2 - unicode.len(text) / 2)
y = math.floor(y + height / 2)
buffer.text(x, y, buttonColor, text)
end
function buffer.scrollBar(x, y, width, height, countOfAllElements, currentElement, backColor, frontColor)
local sizeOfScrollBar = math.ceil(height / countOfAllElements)
local displayBarFrom = math.floor(y + height * ((currentElement - 1) / countOfAllElements))
buffer.square(x, y, width, height, backColor, 0xFFFFFF, " ")
buffer.square(x, displayBarFrom, width, sizeOfScrollBar, frontColor, 0xFFFFFF, " ")
sizeOfScrollBar, displayBarFrom = nil, nil
end
function buffer.horizontalScrollBar(x, y, width, countOfAllElements, currentElement, background, foreground)
local pipeSize = math.ceil(width / countOfAllElements)
local displayBarFrom = math.floor(x + width * ((currentElement - 1) / countOfAllElements))
buffer.text(x, y, background, string.rep("", width))
buffer.text(displayBarFrom, y, foreground, string.rep("", pipeSize))
end
function buffer.customImage(x, y, pixels)
x = x - 1
y = y - 1
for i=1, #pixels do
for j=1, #pixels[1] do
if pixels[i][j][3] ~= "#" then
buffer.set(x + j, y + i, pixels[i][j][1], pixels[i][j][2], pixels[i][j][3])
end
end
end
return (x + 1), (y + 1), (x + #pixels[1]), (y + #pixels)
end
-------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------
function buffer.semiPixelRawSet(index, color, yPercentTwoEqualsZero) function buffer.semiPixelRawSet(index, color, yPercentTwoEqualsZero)
@ -496,6 +423,73 @@ end
-------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------
function buffer.button(x, y, width, height, background, foreground, text)
local textLength = unicode.len(text)
if textLength > width - 2 then text = unicode.sub(text, 1, width - 2) end
local textPosX = math.floor(x + width / 2 - textLength / 2)
local textPosY = math.floor(y + height / 2)
buffer.square(x, y, width, height, background, foreground, " ")
buffer.text(textPosX, textPosY, foreground, text)
return x, y, (x + width - 1), (y + height - 1)
end
function buffer.adaptiveButton(x, y, xOffset, yOffset, background, foreground, text)
local width = xOffset * 2 + unicode.len(text)
local height = yOffset * 2 + 1
buffer.square(x, y, width, height, background, 0xFFFFFF, " ")
buffer.text(x + xOffset, y + yOffset, foreground, text)
return x, y, (x + width - 1), (y + height - 1)
end
function buffer.framedButton(x, y, width, height, backColor, buttonColor, text)
buffer.square(x, y, width, height, backColor, buttonColor, " ")
buffer.frame(x, y, width, height, buttonColor)
x = math.floor(x + width / 2 - unicode.len(text) / 2)
y = math.floor(y + height / 2)
buffer.text(x, y, buttonColor, text)
end
function buffer.scrollBar(x, y, width, height, countOfAllElements, currentElement, backColor, frontColor)
local sizeOfScrollBar = math.ceil(height / countOfAllElements)
local displayBarFrom = math.floor(y + height * ((currentElement - 1) / countOfAllElements))
buffer.square(x, y, width, height, backColor, 0xFFFFFF, " ")
buffer.square(x, displayBarFrom, width, sizeOfScrollBar, frontColor, 0xFFFFFF, " ")
sizeOfScrollBar, displayBarFrom = nil, nil
end
function buffer.horizontalScrollBar(x, y, width, countOfAllElements, currentElement, background, foreground)
local pipeSize = math.ceil(width / countOfAllElements)
local displayBarFrom = math.floor(x + width * ((currentElement - 1) / countOfAllElements))
buffer.text(x, y, background, string.rep("", width))
buffer.text(displayBarFrom, y, foreground, string.rep("", pipeSize))
end
function buffer.customImage(x, y, pixels)
x = x - 1
y = y - 1
for i=1, #pixels do
for j=1, #pixels[1] do
if pixels[i][j][3] ~= "#" then
buffer.set(x + j, y + i, pixels[i][j][1], pixels[i][j][2], pixels[i][j][3])
end
end
end
return (x + 1), (y + 1), (x + #pixels[1]), (y + #pixels)
end
--------------------------------------------------------------------------------------------------------------
local function info(...) local function info(...)
local args = {...} local args = {...}
local text = {} local text = {}

View File

@ -196,7 +196,7 @@ function image.toString(picture)
for i = 3, #picture, 4 do for i = 3, #picture, 4 do
table.insert(charArray, string.format("%02X", color.to8Bit(picture[i]))) table.insert(charArray, string.format("%02X", color.to8Bit(picture[i])))
table.insert(charArray, string.format("%02X", color.to8Bit(picture[i + 1]))) table.insert(charArray, string.format("%02X", color.to8Bit(picture[i + 1])))
table.insert(charArray, string.format("%02X", picture[i + 2])) table.insert(charArray, string.format("%02X", math.floor(picture[i + 2] * 255)))
table.insert(charArray, picture[i + 3]) table.insert(charArray, picture[i + 3])
image.iterationYield(i) image.iterationYield(i)
@ -214,7 +214,7 @@ function image.fromString(pictureString)
for i = 5, unicode.len(pictureString), 7 do for i = 5, unicode.len(pictureString), 7 do
table.insert(picture, color.to24Bit(tonumber("0x" .. unicode.sub(pictureString, i, i + 1)))) table.insert(picture, color.to24Bit(tonumber("0x" .. unicode.sub(pictureString, i, i + 1))))
table.insert(picture, color.to24Bit(tonumber("0x" .. unicode.sub(pictureString, i + 2, i + 3)))) table.insert(picture, color.to24Bit(tonumber("0x" .. unicode.sub(pictureString, i + 2, i + 3))))
table.insert(picture, tonumber("0x" .. unicode.sub(pictureString, i + 4, i + 5))) table.insert(picture, tonumber("0x" .. unicode.sub(pictureString, i + 4, i + 5)) / 255)
table.insert(picture, unicode.sub(pictureString, i + 6, i + 6)) table.insert(picture, unicode.sub(pictureString, i + 6, i + 6))
end end
@ -335,8 +335,8 @@ function image.blend(picture, blendColor, transparency)
local newPicture = {picture[1], picture[2]} local newPicture = {picture[1], picture[2]}
for i = 3, #picture, 4 do for i = 3, #picture, 4 do
table.insert(newPicture, color.blend(picture[i], blendColor, transparency / 100)) table.insert(newPicture, color.blend(picture[i], blendColor, transparency))
table.insert(newPicture, color.blend(picture[i + 1], blendColor, transparency / 100)) table.insert(newPicture, color.blend(picture[i + 1], blendColor, transparency))
table.insert(newPicture, picture[i + 2]) table.insert(newPicture, picture[i + 2])
table.insert(newPicture, picture[i + 3]) table.insert(newPicture, picture[i + 3])
end end

View File

@ -4,6 +4,7 @@ local computer = require("computer")
local advancedLua = require("advancedLua") local advancedLua = require("advancedLua")
local color = require("color") local color = require("color")
local image = require("image") local image = require("image")
local unicode = require("unicode")
local buffer = require("doubleBuffering") local buffer = require("doubleBuffering")
local GUI = require("GUI") local GUI = require("GUI")
local event = require("event") local event = require("event")
@ -347,8 +348,8 @@ end
function rayEngine.chat(transparency) function rayEngine.chat(transparency)
local x, y = 1, buffer.height - rayEngine.chatPanelHeight - 3 local x, y = 1, buffer.height - rayEngine.chatPanelHeight - 3
buffer.square(x, y, rayEngine.chatPanelWidth, rayEngine.chatPanelHeight, 0x000000, 0xFFFFFF, " ", transparency or 50) buffer.square(x, y, rayEngine.chatPanelWidth, rayEngine.chatPanelHeight, 0x000000, 0xFFFFFF, " ", transparency or 0.5)
buffer.setDrawLimit(x, y, rayEngine.chatPanelWidth, rayEngine.chatPanelHeight) buffer.setDrawLimit(x, y, x + rayEngine.chatPanelWidth - 1, y + rayEngine.chatPanelHeight - 1)
local yMessage = y + rayEngine.chatPanelHeight - 1 local yMessage = y + rayEngine.chatPanelHeight - 1
x = x + 1 x = x + 1
@ -374,8 +375,9 @@ function rayEngine.commandLine(transparency)
buffer.square(x, y, buffer.width, inputPanelHeight, 0x000000, 0xFFFFFF, " ", transparency) buffer.square(x, y, buffer.width, inputPanelHeight, 0x000000, 0xFFFFFF, " ", transparency)
--Ввод данных --Ввод данных
local text = GUI.input(x + 2, y + 1, buffer.width - 4, 0xFFFFFF, "") local input = GUI.input(x + 2, y + 1, buffer.width - 4, 0xFFFFFF, "")
local words = {}; for word in string.gmatch(text, "[^%s]+") do table.insert(words, unicode.lower(word)) end input:startInput()
local words = {}; for word in string.gmatch(input.text, "[^%s]+") do table.insert(words, unicode.lower(word)) end
if #words > 0 then if #words > 0 then
if unicode.sub(words[1], 1, 1) == "/" then if unicode.sub(words[1], 1, 1) == "/" then
words[1] = unicode.sub(words[1], 2, -1) words[1] = unicode.sub(words[1], 2, -1)
@ -421,7 +423,7 @@ function rayEngine.commandLine(transparency)
addItemToChatHistory("Неизвестная команда. Введите /help для получения списка команд", 0xFF8888) addItemToChatHistory("Неизвестная команда. Введите /help для получения списка команд", 0xFF8888)
end end
else else
addItemToChatHistory("> " .. text, 0xFFFFFF) addItemToChatHistory("> " .. input.text, 0xFFFFFF)
end end
end end
@ -459,7 +461,7 @@ function rayEngine.drawStats()
local width = math.floor(buffer.width * 0.3) local width = math.floor(buffer.width * 0.3)
local height = 5 local height = 5
local x, y = buffer.width - width - 1, 2 local x, y = buffer.width - width - 1, 2
buffer.square(x, y, width, height, 0x000000, 0xFFFFFF, " ", 50) buffer.square(x, y, width, height, 0x000000, 0xFFFFFF, " ", 0.5)
GUI.progressBar(x + 1, y + 4, width - 2, 1, 0x000000, 0xFF5555, rayEngine.player.health.current, rayEngine.player.health.maximum, true) GUI.progressBar(x + 1, y + 4, width - 2, 1, 0x000000, 0xFF5555, rayEngine.player.health.current, rayEngine.player.health.maximum, true)
end end
@ -489,7 +491,7 @@ function rayEngine.drawWorld()
--Земля --Земля
buffer.clear(rayEngine.world.colors.groundByTime) buffer.clear(rayEngine.world.colors.groundByTime)
--Небо --Небо
buffer.square(1, 1, buffer.width, rayEngine.horizonPosition, rayEngine.world.colors.sky.current) buffer.square(1, 1, buffer.width, rayEngine.horizonPosition, rayEngine.world.colors.sky.current, 0x0, " ")
--Сцена --Сцена
local startAngle, endAngle, startX, distanceToTile, tileID, height, startY, tileColor = rayEngine.player.rotation - rayEngine.player.fieldOfView / 2, rayEngine.player.rotation + rayEngine.player.fieldOfView / 2, 1 local startAngle, endAngle, startX, distanceToTile, tileID, height, startY, tileColor = rayEngine.player.rotation - rayEngine.player.fieldOfView / 2, rayEngine.player.rotation + rayEngine.player.fieldOfView / 2, 1
for angle = startAngle, endAngle, rayEngine.raycastStep do for angle = startAngle, endAngle, rayEngine.raycastStep do
@ -526,7 +528,7 @@ function rayEngine.update()
rayEngine.drawWorld() rayEngine.drawWorld()
if rayEngine.currentWeapon then rayEngine.drawWeapon() end if rayEngine.currentWeapon then rayEngine.drawWeapon() end
if rayEngine.minimapEnabled then rayEngine.drawMap(3, 2, 24, 24, 50) end if rayEngine.minimapEnabled then rayEngine.drawMap(3, 2, 24, 24, 0.5) end
-- rayEngine.drawStats() -- rayEngine.drawStats()
local xTools, yTools = 3, buffer.height - 25 local xTools, yTools = 3, buffer.height - 25
if rayEngine.compassEnabled then rayEngine.compass(xTools, yTools); xTools = xTools + 30 end if rayEngine.compassEnabled then rayEngine.compass(xTools, yTools); xTools = xTools + 30 end
@ -535,7 +537,7 @@ function rayEngine.update()
doDayNightCycle() doDayNightCycle()
if rayEngine.debugInformationEnabled then if rayEngine.debugInformationEnabled then
rayEngine.drawDebugInformation(3, 2 + (rayEngine.minimapEnabled and 12 or 0), 24, 60, rayEngine.drawDebugInformation(3, 2 + (rayEngine.minimapEnabled and 12 or 0), 24, 0.6,
"renderTime: " .. math.doubleToString((os.clock() - frameRenderClock) * 1000, 2) .. " ms", "renderTime: " .. math.doubleToString((os.clock() - frameRenderClock) * 1000, 2) .. " ms",
"freeRAM: " .. math.doubleToString(computer.freeMemory() / 1024, 2) .. " KB", "freeRAM: " .. math.doubleToString(computer.freeMemory() / 1024, 2) .. " KB",
"pos: " .. math.doubleToString(rayEngine.player.position.x) .. " x " .. math.doubleToString(rayEngine.player.position.y) "pos: " .. math.doubleToString(rayEngine.player.position.x) .. " x " .. math.doubleToString(rayEngine.player.position.y)