diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt index 64e5cf0a6..3fce11216 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/English.kt @@ -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") diff --git a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt index 948acb1dd..14b993b9e 100644 --- a/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt +++ b/src/data/kotlin/ru/dbotthepony/mc/otm/datagen/lang/Russian.kt @@ -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") diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/DynamicLabel.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/DynamicLabel.kt new file mode 100644 index 000000000..9e13f1b7c --- /dev/null +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/panels/DynamicLabel.kt @@ -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( + screen: S, + parent: EditablePanel<*>?, + x: Float = 0f, + y: Float = 0f, + width: Float = 100f, + height: Float = 10f, + val textSupplier: Supplier, + shadow: Boolean = false +) : Label(screen, parent, x, y, width, height, textSupplier.get(), shadow) { + override fun tickInner() { + super.tickInner() + text = textSupplier.get() + } +} diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EnergyCounterScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EnergyCounterScreen.kt index 08845d991..b21634eb0 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EnergyCounterScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/tech/EnergyCounterScreen.kt @@ -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(menu, inventory, title) { override fun makeMainFrame(): FramePanel> { val frame = super.makeMainFrame()!! - var label: Label = object : Label(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>() + + 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(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(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(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(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) }