Merge pull request #10 from gordominossi/feature/integration

Feature/integration
This commit is contained in:
gordominossi 2021-01-14 21:43:09 -03:00 committed by GitHub
commit aa41d187fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 135 additions and 45 deletions

View File

@ -26,6 +26,8 @@ Widget = require("api.gui.widget")
| e | w | w | w | | e | w | w | w |
| l | power |b|f| | l | power |b|f|
--]] --]]
local page = {}
local pages = { local pages = {
glasses = require("api.gui.page.glasses"), glasses = require("api.gui.page.glasses"),
widgets = require("api.gui.page.widgets"), widgets = require("api.gui.page.widgets"),
@ -41,11 +43,8 @@ pages[4] = pages.stock
pages[5] = pages.notifications pages[5] = pages.notifications
pages[6] = pages.overview pages[6] = pages.overview
local page = {}
local elements = { local elements = {
machineWidgets = {}, machineWidgets = {},
powerWidgets = {},
panelSections = {}, panelSections = {},
navigationButtons = {} navigationButtons = {}
} }
@ -182,8 +181,8 @@ function page.create(element)
elements[15] = elements.machineWidgets.active[8] elements[15] = elements.machineWidgets.active[8]
elements[16] = elements.machineWidgets.active[9] elements[16] = elements.machineWidgets.active[9]
elements[18] = elements.powerWidgets[1] elements[18] = elements.powerWidget
elements[19] = elements.powerWidgets[1] elements[19] = elements.powerWidget
elements[1] = elements.panelSections[1] elements[1] = elements.panelSections[1]
elements[5] = elements.panelSections[2] elements[5] = elements.panelSections[2]
@ -197,7 +196,13 @@ end
function page.fake() function page.fake()
elements.machineWidgets = Widget.fakeWidgets() elements.machineWidgets = Widget.fakeWidgets()
elements.powerWidgets = Widget.fakePowerWidget() elements.powerWidget = Widget.fakePowerWidget()
page.create(pages.overview)
end
function page.setup(energyBufferAddress)
elements.machineWidgets = Widget.fakeWidgets()
elements.powerWidget = Widget.createPowerWidget(energyBufferAddress)
page.create(pages.overview) page.create(pages.overview)
end end
@ -208,10 +213,10 @@ function page.update()
for index, activeMachineWidget in ipairs(elements.machineWidgets.active) do for index, activeMachineWidget in ipairs(elements.machineWidgets.active) do
activeMachineWidget.draw(activeMachineWidget, index) activeMachineWidget.draw(activeMachineWidget, index)
end end
for index, powerWidget in ipairs(elements.powerWidgets) do
powerWidget:update() elements.powerWidget:update()
powerWidget:draw(index) elements.powerWidget:draw()
end
for index, navigationButton in ipairs(elements.navigationButtons) do for index, navigationButton in ipairs(elements.navigationButtons) do
navigationButton:update() navigationButton:update()
navigationButton:draw(index) navigationButton:draw(index)

View File

@ -3,6 +3,7 @@ Unicode = require("unicode")
DoubleBuffer = require("graphics.doubleBuffering") DoubleBuffer = require("graphics.doubleBuffering")
Constants = require("api.gui.constants") Constants = require("api.gui.constants")
Colors = require("graphics.colors") Colors = require("graphics.colors")
Utility = require("utils.utility")
local widget = {} local widget = {}
@ -13,6 +14,11 @@ local states = {
{name = "BROKEN", color = Colors.errorColor} {name = "BROKEN", color = Colors.errorColor}
} }
local types = {
power = "power",
machine = "machine"
}
local function drawProgress(x, y, width, height, progress, maxProgress, color) local function drawProgress(x, y, width, height, progress, maxProgress, color)
progress = math.floor(progress * (width + height - 2) / (maxProgress ~= 0 and maxProgress or 1)) progress = math.floor(progress * (width + height - 2) / (maxProgress ~= 0 and maxProgress or 1))
@ -64,7 +70,7 @@ function widget.drawBaseWidget(x, y, width, height, title)
end end
local function draw(self, index) local function draw(self, index)
if self.type == "power" then if self.type == types.power then
index = 10 index = 10
end end
local scale = self.scale or 1 local scale = self.scale or 1
@ -83,13 +89,23 @@ local function draw(self, index)
else else
local middleInfo = self:getMiddleString() local middleInfo = self:getMiddleString()
if middleInfo then if middleInfo then
DoubleBuffer.drawText(x + 3 + 3 + Unicode.len("IDLE"), y + height - 3, Colors.textColor, middleInfo) DoubleBuffer.drawText(
x - 3 - 3 + width - Unicode.len(middleInfo) -
Unicode.len(
Utility.splitNumber(self.progress) .. " / " .. Utility.splitNumber(self.maxProgress) .. " s"
),
y + height - 3,
Colors.textColor,
middleInfo
)
end end
DoubleBuffer.drawText( DoubleBuffer.drawText(
x + width - Unicode.len(self.progress .. "/" .. self.maxProgress .. " s") - 3, x + width -
Unicode.len(Utility.splitNumber(self.progress) .. " / " .. Utility.splitNumber(self.maxProgress) .. " s") -
3,
y + height - 3, y + height - 3,
Colors.accentA, Colors.accentA,
self.progress .. "/" .. self.maxProgress .. " s" Utility.splitNumber(self.progress) .. " / " .. Utility.splitNumber(self.maxProgress) .. " s"
) )
end end
end end
@ -198,7 +214,8 @@ end
function fake.powerWidget:getMiddleString() function fake.powerWidget:getMiddleString()
local remaining = self.dProgress > 0 and self.maxProgress - self.progress or -self.progress local remaining = self.dProgress > 0 and self.maxProgress - self.progress or -self.progress
return (self.dProgress > 0 and "+" or "") .. return (self.dProgress > 0 and "+" or "") ..
self.dProgress .. "EU/s. " .. (self.dProgress > 0 and "Full in: " or "Empty in: ") .. remaining / self.dProgress self.dProgress ..
"EU/s. " .. (self.dProgress > 0 and " Full in: " or "Empty in: ") .. remaining / self.dProgress
end end
function fake.powerWidget.create() function fake.powerWidget.create()
@ -207,9 +224,9 @@ function fake.powerWidget.create()
state = states[1], state = states[1],
progress = math.random(16000000), progress = math.random(16000000),
maxProgress = 16000000, maxProgress = 16000000,
scale = 2,
type = "power",
dProgress = 1, dProgress = 1,
scale = 2,
type = types.power,
update = fake.powerWidget.update, update = fake.powerWidget.update,
onClick = fake.powerWidget.onClick, onClick = fake.powerWidget.onClick,
getMiddleString = fake.powerWidget.getMiddleString, getMiddleString = fake.powerWidget.getMiddleString,
@ -228,12 +245,35 @@ function widget.fakeWidgets()
end end
function widget.fakePowerWidget() function widget.fakePowerWidget()
local fakePowerWidgets = {} return fake.powerWidget.create()
end
table.insert(fakePowerWidgets, fake.powerWidget.create()) function widget.createPowerWidget(address)
fakePowerWidgets[11] = fakePowerWidgets[10] local getPowerStatus = require("domain.energy.get-energy-status-usecase")
local function update(self)
for key, value in pairs(getPowerStatus(address, self.name)) do
self[key] = value
end
end
return fakePowerWidgets local function getMiddleString(self)
local time = self.timeToFull or self.timeToEmpty or 0
return (self.dProgress >= 0 and " Full in: " or "Empty in: ") .. Utility.splitNumber(time) .. " s"
end
local powerWidget = {
name = "Power",
scale = 2,
type = types.power,
update = update,
onClick = function()
end,
getMiddleString = getMiddleString,
draw = draw
}
powerWidget:update()
return powerWidget
end end
return widget return widget

View File

@ -0,0 +1,30 @@
-- Import section
local mock = require("data.mock.mock-energy-provider")
EnergyProvider = require("data.datasource.energy-provider")
Inherits = require("utils.inherits")
--
local machine = Inherits(EnergyProvider)
local machines = {}
machine.types = {
energy = "energy",
multiblock = "multiblock",
singleblock = "singleblock"
}
function machine.getMachine(address, name, type)
if machines[address] then
return machines[address]
else
local mach = {}
if type == machine.types.energy then
print(machine.name)
elseif type == machine.types.multiblock then
end
mach = machine:new(address, name)
machines[address] = mach
return mach
end
end
return machine

View File

@ -1,6 +1,7 @@
-- Import section -- Import section
Inherits = require("utils.inherits") Inherits = require("utils.inherits")
MockSingleBlock = require("data.mock.mock-single-block") MockSingleBlock = require("data.mock.mock-single-block")
Utility = require("utils.utility")
-- --
local MockEnergyProvider = local MockEnergyProvider =
@ -11,15 +12,21 @@ local MockEnergyProvider =
} }
) )
local progress = math.random(1608388608)
local input = math.random(16000)
local output = math.random(16000)
function MockEnergyProvider.getSensorInformation() function MockEnergyProvider.getSensorInformation()
input = input + math.random(-100, 100)
output = input + math.random(-100, 100)
progress = progress + input - output > 0 and progress + input - output or 0
return { return {
"§9Insane Voltage Battery Buffer§r", "§9Insane Voltage Battery Buffer§r",
"Stored Items:", "Stored Items:",
"§a1,608,383,129§r EU / §e1,608,388,608§r EU", "§a" .. Utility.splitNumber(progress) .. "§r EU / §e1,608,388,608§r EU",
"Average input:", "Average input:",
"11,396 EU/t", Utility.splitNumber(input) .. " EU/t",
"Average output:", "Average output:",
"11,158 EU/t", Utility.splitNumber(output) .. " EU/t",
n = 7 n = 7
} }
end end

View File

@ -1,14 +1,12 @@
-- Import section -- Import section
local getConsumption = require("domain.energy.get-consumption-usecase") Machine = require("data.datasource.machine")
local getProduction = require("domain.energy.get-production-usecase")
-- --
local function exec(energyBuffer) local function exec(address, name)
-- local comsumption = getConsumption(energyBuffer) local energyBuffer = Machine.getMachine(address, name, Machine.types.energy)
-- local production = getProduction(energyBuffer)
local consumption = energyBuffer:getAverageInput() local consumption = energyBuffer:getAverageInput()
local production = energyBuffer:getAverageOutput() local production = energyBuffer:getAverageOutput()
local changeRate = production - consumption local changeRate = production - consumption
local totalEnergy = energyBuffer:getTotalEnergy() local totalEnergy = energyBuffer:getTotalEnergy()
@ -17,14 +15,27 @@ local function exec(energyBuffer)
local energyLimit = changeRate > 0 and maximumEnergy or 0 local energyLimit = changeRate > 0 and maximumEnergy or 0
local timeToFull = changeRate > 0 and (energyLimit - currentEnergy) / changeRate or nil local state = {}
local timeToEmpty = changeRate < 0 and (energyLimit - currentEnergy) / changeRate or nil if (currentEnergy == maximumEnergy) then
state = {name = changeRate .. " EU/s", color = Colors.workingColor}
elseif currentEnergy == 0 then
state = {name = changeRate .. " EU/s", color = Colors.errorColor}
elseif changeRate > 0 then
state = {name = "+" .. changeRate .. " EU/s", color = Colors.idleColor}
else
state = {name = changeRate .. " EU/s", color = Colors.offColor}
end
local timeToFull = changeRate > 0 and math.floor((energyLimit - currentEnergy) / changeRate) or nil
local timeToEmpty = changeRate < 0 and math.floor((energyLimit - currentEnergy) / changeRate) or nil
return { return {
consumption = consumption, progress = currentEnergy,
production = production, maxProgress = maximumEnergy,
dProgress = changeRate,
timeToFull = timeToFull, timeToFull = timeToFull,
timeToEmpty = timeToEmpty timeToEmpty = timeToEmpty,
state = state
} }
end end

View File

@ -1,16 +1,14 @@
-- Import section -- Import section
-- Event = require("event")
-- Colors = require("graphics.colors")
-- Widget = require("api.gui.widget")
Page = require("api.gui.page") Page = require("api.gui.page")
-- Graphics = require("graphics.graphics")
-- MultiBlock = require("data.datasource.multi-block") -- MultiBlock = require("data.datasource.multi-block")
-- SingleBlock = require("data.datasource.single-block") -- SingleBlock = require("data.datasource.single-block")
-- EnergyProvider = require("data.datasource.energy-provider") EnergyProvider = require("data.datasource.energy-provider")
-- local cleanroomAddresses = require("config.addresses.cleanroom") -- local cleanroomAddresses = require("config.addresses.cleanroom")
-- local multiBlockAddresses = require("config.addresses.multi-blocks") -- local multiBlockAddresses = require("config.addresses.multi-blocks")
-- local energyBufferAddresses = require("config.addresses.energy-buffers") local energyBufferAddresses = require("config.addresses.energy-buffers")
-- local protectCleanroomRecipes = require("domain.cleanroom.protect-recipes-usecase") -- local protectCleanroomRecipes = require("domain.cleanroom.protect-recipes-usecase")
-- local getMultiblockStatuses = require("domain.multiblock.get-multiblock-status-usecase") -- local getMultiblockStatuses = require("domain.multiblock.get-multiblock-status-usecase")
@ -64,12 +62,11 @@ end
require("api.sound.zelda-secret")() require("api.sound.zelda-secret")()
--]] --]]
Page.setup(energyBufferAddresses.batteryBuffer1)
Page.fake()
while true do while true do
Page.update() Page.update()
os.sleep(0) os.sleep(0.2)
end end
--[[ --[[

View File

@ -9,7 +9,7 @@ shell.execute("wget -fq " .. tarMan)
shell.setWorkingDirectory("/bin") shell.setWorkingDirectory("/bin")
shell.execute("wget -fq " .. tarBin) shell.execute("wget -fq " .. tarBin)
local InfOS = "https://github.com/gordominossi/InfOS/releases/download/v0.1/InfOS.tar" local InfOS = "https://github.com/gordominossi/InfOS/releases/download/v0.2/InfOS.tar"
shell.setWorkingDirectory("/home") shell.setWorkingDirectory("/home")
if not shell.resolve("/home/lib") then if not shell.resolve("/home/lib") then