Update energy counter screen

This commit is contained in:
DBotThePony 2023-06-28 19:29:15 +07:00
parent 4d4ecd28a5
commit fced3058d5
Signed by: DBot
GPG Key ID: DCC23B5715498507
4 changed files with 63 additions and 70 deletions

View File

@ -225,6 +225,11 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("item.power.last_20_ticks", "Last second: %s")
misc("item.power.last_tick", "Last tick: %s")
gui("power.passed", "Total passed energy:")
gui("power.average", "Average throughput per tick:")
gui("power.last_20_ticks", "Last second:")
gui("power.last_tick", "Last tick:")
misc("item.power.storage", "Stored energy: %s / %s")
misc("item.power.storage0", "Stored energy: %s")
misc("item.power.throughput", "Max I/O: %s / %s")

View File

@ -233,6 +233,11 @@ private fun misc(provider: MatteryLanguageProvider) {
misc("item.power.last_20_ticks", "Последняя секунда: %s")
misc("item.power.last_tick", "Последний тик: %s")
gui("power.passed", "Всего передано энергии:")
gui("power.average", "Средняя передача в тик:")
gui("power.last_20_ticks", "Последняя секунда:")
gui("power.last_tick", "Последний тик:")
misc("item.power.storage", "Хранимая энергия: %s / %s")
misc("item.power.throughput", "Максимальная пропускная способность: %s / %s")
misc("item.power.throughput_mono", "Максимальная пропускная способность: %s")

View File

@ -0,0 +1,21 @@
package ru.dbotthepony.mc.otm.client.screen.panels
import net.minecraft.client.gui.screens.Screen
import net.minecraft.network.chat.Component
import java.util.function.Supplier
open class DynamicLabel<out S : Screen>(
screen: S,
parent: EditablePanel<*>?,
x: Float = 0f,
y: Float = 0f,
width: Float = 100f,
height: Float = 10f,
val textSupplier: Supplier<Component>,
shadow: Boolean = false
) : Label<S>(screen, parent, x, y, width, height, textSupplier.get(), shadow) {
override fun tickInner() {
super.tickInner()
text = textSupplier.get()
}
}

View File

@ -11,92 +11,54 @@ import ru.dbotthepony.mc.otm.client.screen.panels.button.makeDeviceControls
import ru.dbotthepony.mc.otm.client.screen.panels.input.NetworkNumberInputPanel
import ru.dbotthepony.mc.otm.core.util.formatPower
import ru.dbotthepony.mc.otm.menu.tech.EnergyCounterMenu
import java.util.function.Supplier
class EnergyCounterScreen(menu: EnergyCounterMenu, inventory: Inventory, title: Component) : MatteryScreen<EnergyCounterMenu>(menu, inventory, title) {
override fun makeMainFrame(): FramePanel<MatteryScreen<*>> {
val frame = super.makeMainFrame()!!
var label: Label<EnergyCounterScreen> = object : Label<EnergyCounterScreen>(this@EnergyCounterScreen, frame) {
override fun tickInner() {
super.tickInner()
text = TranslatableComponent(
"otm.item.power.passed",
menu.passed.formatPower(formatAsReadable = ShiftPressedCond)
)
frame.height = 160f
frame.width += 40f
val labels = ArrayList<EditablePanel<*>>()
labels.add(Label(this, frame, text = TranslatableComponent("otm.gui.power.passed")))
labels.add(DynamicLabel(this, frame, textSupplier = { menu.passed.formatPower(formatAsReadable = ShiftPressedCond) }))
labels.add(Label(this, frame, text = TranslatableComponent("otm.gui.power.average")))
labels.add(DynamicLabel(this, frame, textSupplier = { menu.average.formatPower(formatAsReadable = ShiftPressedCond) }))
labels.add(Label(this, frame, text = TranslatableComponent("otm.gui.power.last_20_ticks")))
labels.add(DynamicLabel(this, frame, textSupplier = { menu.last20Ticks.formatPower(formatAsReadable = ShiftPressedCond) }))
labels.add(Label(this, frame, text = TranslatableComponent("otm.gui.power.last_tick")))
labels.add(DynamicLabel(this, frame, textSupplier = { menu.lastTick.formatPower(formatAsReadable = ShiftPressedCond) }))
labels.add(DynamicLabel(this, frame, textSupplier = { TranslatableComponent("block.overdrive_that_matters.energy_counter.facing", menu.inputDirection) }))
for ((i, label) in labels.withIndex()) {
if (i == 0) {
label.dockTop = 5f
} else {
label.dockTop = 2f
}
label.dock = Dock.TOP
}
label.dock = Dock.TOP
label.setDockMargin(4f, 0f, 0f, 0f)
label = object : Label<EnergyCounterScreen>(this@EnergyCounterScreen, frame) {
override fun tickInner() {
super.tickInner()
text = TranslatableComponent(
"otm.item.power.average",
menu.average.formatPower(formatAsReadable = ShiftPressedCond)
)
}
}
label.dock = Dock.TOP
label.setDockMargin(4f, 0f, 0f, 0f)
label = object : Label<EnergyCounterScreen>(this@EnergyCounterScreen, frame) {
override fun tickInner() {
super.tickInner()
text = TranslatableComponent(
"otm.item.power.last_20_ticks",
menu.last20Ticks.formatPower(formatAsReadable = ShiftPressedCond)
)
}
}
label.dock = Dock.TOP
label.setDockMargin(4f, 0f, 0f, 0f)
label = object : Label<EnergyCounterScreen>(this@EnergyCounterScreen, frame) {
override fun tickInner() {
super.tickInner()
text = TranslatableComponent(
"otm.item.power.last_tick",
menu.lastTick.formatPower(formatAsReadable = ShiftPressedCond)
)
}
}
label.dock = Dock.TOP
label.setDockMargin(4f, 0f, 0f, 0f)
label = object : Label<EnergyCounterScreen>(this@EnergyCounterScreen, frame) {
override fun tickInner() {
super.tickInner()
text = TranslatableComponent(
"block.overdrive_that_matters.energy_counter.facing",
menu.inputDirection
)
}
}
label.dock = Dock.TOP
label.setDockMargin(4f, 0f, 0f, 0f)
if (!menu.ply.isSpectator) {
val button = ButtonPanel(this, frame, 0f, 0f, 0f, 20f, TranslatableComponent("block.overdrive_that_matters.energy_counter.switch"), onPress = Runnable { menu.switchDirection.input(null) })
button.dock = Dock.TOP
button.setDockMargin(4f, 0f, 4f, 0f)
button.setDockMargin(4f, 5f, 4f, 0f)
}
val infoPanels = frame.fetchChildren()
label = Label(this, frame, TranslatableComponent("block.overdrive_that_matters.energy_counter.limit"))
label.dock = Dock.TOP
label.setDockMargin(4f, 0f, 0f, 0f)
Label(this, frame, TranslatableComponent("block.overdrive_that_matters.energy_counter.limit")).also {
it.dock = Dock.TOP
it.dockTop = 10f
}
val inputPanel = NetworkNumberInputPanel(this, frame, widget = menu.maxIOInput, networkValue = menu::maxIO)
inputPanel.dock = Dock.TOP
inputPanel.setDockMargin(4f, 0f, 4f, 0f)
NetworkNumberInputPanel(this, frame, widget = menu.maxIOInput, networkValue = menu::maxIO).also {
it.dock = Dock.TOP
it.dockTop = 4f
}
val limitsPanels = frame.fetchChildren().filter { !infoPanels.contains(it) }