Merge pull request #9 from gordominossi/feature/integration-power

Integrating power widget with it's datasource
This commit is contained in:
gordominossi 2021-01-14 19:32:08 -03:00 committed by GitHub
commit c4a46b15dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 121 additions and 41 deletions

View File

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

View File

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

View File

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

View File

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

View File

@ -1,13 +1,14 @@
-- Import section
local getConsumption = require("domain.energy.get-consumption-usecase")
local getProduction = require("domain.energy.get-production-usecase")
Machine = require("data.datasource.machines")
--
local function exec(energyBuffer)
local function exec(address, name)
local energyBuffer = Machine.getMachine(address, name)
-- local comsumption = getConsumption(energyBuffer)
-- local production = getProduction(energyBuffer)
local consumption = energyBuffer:getAverageInput()
local production = energyBuffer:getAverageOutput()
local state = {name = "ON", color = Colors.workingColor}
local changeRate = production - consumption
@ -17,14 +18,16 @@ local function exec(energyBuffer)
local energyLimit = changeRate > 0 and maximumEnergy or 0
local timeToFull = changeRate > 0 and (energyLimit - currentEnergy) / changeRate or nil
local timeToEmpty = changeRate < 0 and (energyLimit - currentEnergy) / changeRate or nil
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 {
consumption = consumption,
production = production,
progress = currentEnergy,
maxProgress = maximumEnergy,
dProgress = changeRate,
timeToFull = timeToFull,
timeToEmpty = timeToEmpty
timeToEmpty = timeToEmpty,
state = state
}
end

View File

@ -1,16 +1,14 @@
-- Import section
-- Event = require("event")
-- Colors = require("graphics.colors")
-- Widget = require("api.gui.widget")
Page = require("api.gui.page")
-- Graphics = require("graphics.graphics")
-- MultiBlock = require("data.datasource.multi-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 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 getMultiblockStatuses = require("domain.multiblock.get-multiblock-status-usecase")
@ -64,12 +62,11 @@ end
require("api.sound.zelda-secret")()
--]]
Page.fake()
Page.setup(energyBufferAddresses.batteryBuffer1)
while true do
Page.update()
os.sleep(0)
os.sleep(0.2)
end
--[[