diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/ExoPackInventoryScreen.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/ExoPackInventoryScreen.kt index b6a00fb0b..2396017ca 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/ExoPackInventoryScreen.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/client/screen/ExoPackInventoryScreen.kt @@ -199,40 +199,7 @@ class ExoPackInventoryScreen(menu: ExoPackInventoryMenu) : MatteryScreen(menu: T, inventory: Inventory, tit } } + protected fun makeChargePanels(frame: EditablePanel<*>) { + val chargeWidth = HorizontalPowerGaugePanel.GAUGE_BACKGROUND_TALL.width + AbstractSlotPanel.SIZE + 6f + ProgressGaugePanel.GAUGE_BACKGROUND.width * 2f + val chargeStrip = BackgroundPanel.paddedCenter(this, frame, frame.width - chargeWidth - 6f, frame.height + 2f, chargeWidth, AbstractSlotPanel.SIZE) + val chargeStrip2 = BackgroundPanel.paddedCenter(this, frame, frame.width + 2f, frame.height - AbstractSlotPanel.SIZE * 3f + 2f, AbstractSlotPanel.SIZE, AbstractSlotPanel.SIZE * 4f) + + chargeStrip.customDock { chargeStrip.setPos(frame.width - chargeWidth - 6f, frame.height + 2f) } + chargeStrip2.customDock { chargeStrip2.setPos(frame.width + 2f, frame.height - AbstractSlotPanel.SIZE * 3f + 2f) } + + BatterySlotPanel(this, chargeStrip, menu.exopackChargeSlots[0]).also { + it.dock = Dock.LEFT + } + + SpritePanel(this, chargeStrip, ProgressGaugePanel.GAUGE_BACKGROUND).also { + it.dock = Dock.LEFT + it.dockLeft = 2f + it.dockResize = DockResizeMode.NONE + } + + TallHorizontalProfiledPowerGaugePanel(this, chargeStrip, menu.exopackPowerLevel).also { + it.dock = Dock.LEFT + it.dockLeft = 2f + } + + SpritePanel(this, chargeStrip, ProgressGaugePanel.GAUGE_BACKGROUND).also { + it.dock = Dock.LEFT + it.dockLeft = 2f + it.dockResize = DockResizeMode.NONE + } + + for (slot in menu.exopackChargeSlots.listIterator(1)) { + SlotPanel(this, chargeStrip2, slot).also { + it.dock = Dock.BOTTOM + it.slotBackground = Widgets18.CHARGE_SLOT_BACKGROUND + } + } + } + init { if (menu.playerInventorySlots.isNotEmpty() && menu.autoCreateInventoryFrame) { if (menu.playerExoSuitSlots.isEmpty()) { @@ -239,6 +283,10 @@ abstract class MatteryScreen(menu: T, inventory: Inventory, tit moveMousePosScaled(y = movePixels) } } + + if (menu.exopackChargeSlots.isNotEmpty()) { + makeChargePanels(inventoryFrame!!) + } } } diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ExoPackInventoryMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ExoPackInventoryMenu.kt index ccf112f43..50d3313bd 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ExoPackInventoryMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/ExoPackInventoryMenu.kt @@ -132,21 +132,11 @@ class ExoPackInventoryMenu(val capability: MatteryPlayerCapability) : MatteryMen } val furnaceProgress = capability.smelters.map { ProgressGaugeWidget(mSynchronizer, it) } - val exoPackPowerSlot = BatterySlot(capability.exoPackEnergy.parent, 0) - val exoPackPower = ProfiledLevelGaugeWidget(mSynchronizer, capability.exoPackEnergy) - val furnaceMenuOpenState = InstantBooleanInput(this) - val exoPackChargeSlots = makeSlots(capability.exoPackChargeSlots, ::ChargeSlot) - init { addStorageSlot(furnaceInputs, condition = furnaceMenuOpenState) addStorageSlot(furnaceOutputs, condition = furnaceMenuOpenState) - - addSlot(exoPackPowerSlot) - mapQuickMoveToInventory(exoPackPowerSlot) - - exoPackChargeSlots.forEach { addSlot(it); mapQuickMoveToInventory(it) } } private var isRemoved = false diff --git a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt index 4986ce750..2c8394a8d 100644 --- a/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt +++ b/src/main/kotlin/ru/dbotthepony/mc/otm/menu/MatteryMenu.kt @@ -27,6 +27,7 @@ import net.minecraftforge.network.PacketDistributor import ru.dbotthepony.mc.otm.capability.IMatteryUpgrade import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.UpgradeType +import ru.dbotthepony.mc.otm.capability.energy.ProfiledEnergyStorage import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.compat.cos.cosmeticArmorSlots @@ -49,6 +50,7 @@ import ru.dbotthepony.mc.otm.core.util.ItemValueCodec import ru.dbotthepony.mc.otm.core.util.NullValueCodec import ru.dbotthepony.mc.otm.core.util.VarIntValueCodec import ru.dbotthepony.mc.otm.menu.input.InstantBooleanInput +import ru.dbotthepony.mc.otm.menu.widget.ProfiledLevelGaugeWidget import ru.dbotthepony.mc.otm.network.MatteryPacket import ru.dbotthepony.mc.otm.network.MenuFieldPacket import ru.dbotthepony.mc.otm.network.MenuNetworkChannel @@ -67,6 +69,7 @@ import java.util.function.DoubleSupplier import java.util.function.IntSupplier import java.util.function.Predicate import java.util.function.Supplier +import kotlin.collections.ArrayList data class PlayerSlot(val functional: A, val cosmetic: B? = null) @@ -104,6 +107,7 @@ abstract class MatteryMenu @JvmOverloads protected constructor( private val _playerMainSlots = ArrayList() private val _playerExoSuitSlots = ArrayList() private val _playerCombinedInventorySlots = ArrayList() + private val _exopackChargeSlots = ArrayList() private val playerInputs = ArrayList>() @@ -212,6 +216,10 @@ abstract class MatteryMenu @JvmOverloads protected constructor( */ val playerCombinedInventorySlots: List = Collections.unmodifiableList(_playerCombinedInventorySlots) + val exopackChargeSlots: List = Collections.unmodifiableList(_exopackChargeSlots) + + val exopackPowerLevel = ProfiledLevelGaugeWidget>(mSynchronizer) + var autoCreateInventoryFrame = true private set @@ -360,6 +368,13 @@ abstract class MatteryMenu @JvmOverloads protected constructor( mapQuickMoveToExternal(slot) addSlot(slot) } + + _exopackChargeSlots.add(BatterySlot(mattery.exoPackEnergy.parent, 0).also { mapQuickMoveToExternal(it); mapQuickMoveToInventory(it); addSlot(it) }) + + for (i in 0 until mattery.exoPackChargeSlots.containerSize) + _exopackChargeSlots.add(ChargeSlot(mattery.exoPackChargeSlots, i).also { mapQuickMoveToExternal(it); mapQuickMoveToInventory(it); addSlot(it) }) + + exopackPowerLevel.with(mattery.exoPackEnergy) } for (i in 0..8) {