Add exopack charge slots to all guis

This commit is contained in:
DBotThePony 2023-07-29 17:43:20 +07:00
parent 232701b8bb
commit 1a9877a49d
Signed by: DBot
GPG Key ID: DCC23B5715498507
4 changed files with 64 additions and 44 deletions

View File

@ -199,40 +199,7 @@ class ExoPackInventoryScreen(menu: ExoPackInventoryMenu) : MatteryScreen<ExoPack
} }
} }
val chargeWidth = HorizontalPowerGaugePanel.GAUGE_BACKGROUND_TALL.width + AbstractSlotPanel.SIZE + 6f + ProgressGaugePanel.GAUGE_BACKGROUND.width * 2f makeChargePanels(frame)
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.exoPackPowerSlot).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.exoPackPower).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) {
SlotPanel(this, chargeStrip2, slot).also {
it.dock = Dock.BOTTOM
it.slotBackground = Widgets18.CHARGE_SLOT_BACKGROUND
}
}
scrollPanel.dock = Dock.RIGHT scrollPanel.dock = Dock.RIGHT
scrollPanel.setDockMargin(right = 3f) scrollPanel.setDockMargin(right = 3f)

View File

@ -18,13 +18,20 @@ import net.minecraftforge.common.MinecraftForge
import org.lwjgl.opengl.GL11 import org.lwjgl.opengl.GL11
import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.client.moveMousePosScaled import ru.dbotthepony.mc.otm.client.moveMousePosScaled
import ru.dbotthepony.mc.otm.client.render.Widgets18
import ru.dbotthepony.mc.otm.client.render.translation import ru.dbotthepony.mc.otm.client.render.translation
import ru.dbotthepony.mc.otm.client.screen.panels.* import ru.dbotthepony.mc.otm.client.screen.panels.*
import ru.dbotthepony.mc.otm.client.screen.panels.slot.AbstractSlotPanel import ru.dbotthepony.mc.otm.client.screen.panels.slot.AbstractSlotPanel
import ru.dbotthepony.mc.otm.client.screen.panels.slot.BatterySlotPanel
import ru.dbotthepony.mc.otm.client.screen.panels.slot.InventorySlotPanel import ru.dbotthepony.mc.otm.client.screen.panels.slot.InventorySlotPanel
import ru.dbotthepony.mc.otm.client.screen.panels.slot.SlotPanel
import ru.dbotthepony.mc.otm.client.screen.panels.util.BackgroundPanel
import ru.dbotthepony.mc.otm.client.screen.panels.util.DiscreteScrollBarPanel import ru.dbotthepony.mc.otm.client.screen.panels.util.DiscreteScrollBarPanel
import ru.dbotthepony.mc.otm.client.screen.panels.util.HeightControls import ru.dbotthepony.mc.otm.client.screen.panels.util.HeightControls
import ru.dbotthepony.mc.otm.client.screen.panels.util.ScrollBarConstants import ru.dbotthepony.mc.otm.client.screen.panels.util.ScrollBarConstants
import ru.dbotthepony.mc.otm.client.screen.widget.HorizontalPowerGaugePanel
import ru.dbotthepony.mc.otm.client.screen.widget.ProgressGaugePanel
import ru.dbotthepony.mc.otm.client.screen.widget.TallHorizontalProfiledPowerGaugePanel
import ru.dbotthepony.mc.otm.config.ClientConfig import ru.dbotthepony.mc.otm.config.ClientConfig
import ru.dbotthepony.mc.otm.core.TranslatableComponent import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.math.component1 import ru.dbotthepony.mc.otm.core.math.component1
@ -149,6 +156,43 @@ abstract class MatteryScreen<T : MatteryMenu>(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 { init {
if (menu.playerInventorySlots.isNotEmpty() && menu.autoCreateInventoryFrame) { if (menu.playerInventorySlots.isNotEmpty() && menu.autoCreateInventoryFrame) {
if (menu.playerExoSuitSlots.isEmpty()) { if (menu.playerExoSuitSlots.isEmpty()) {
@ -239,6 +283,10 @@ abstract class MatteryScreen<T : MatteryMenu>(menu: T, inventory: Inventory, tit
moveMousePosScaled(y = movePixels) moveMousePosScaled(y = movePixels)
} }
} }
if (menu.exopackChargeSlots.isNotEmpty()) {
makeChargePanels(inventoryFrame!!)
}
} }
} }

View File

@ -132,21 +132,11 @@ class ExoPackInventoryMenu(val capability: MatteryPlayerCapability) : MatteryMen
} }
val furnaceProgress = capability.smelters.map { ProgressGaugeWidget(mSynchronizer, it) } 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 furnaceMenuOpenState = InstantBooleanInput(this)
val exoPackChargeSlots = makeSlots(capability.exoPackChargeSlots, ::ChargeSlot)
init { init {
addStorageSlot(furnaceInputs, condition = furnaceMenuOpenState) addStorageSlot(furnaceInputs, condition = furnaceMenuOpenState)
addStorageSlot(furnaceOutputs, condition = furnaceMenuOpenState) addStorageSlot(furnaceOutputs, condition = furnaceMenuOpenState)
addSlot(exoPackPowerSlot)
mapQuickMoveToInventory(exoPackPowerSlot)
exoPackChargeSlots.forEach { addSlot(it); mapQuickMoveToInventory(it) }
} }
private var isRemoved = false private var isRemoved = false

View File

@ -27,6 +27,7 @@ import net.minecraftforge.network.PacketDistributor
import ru.dbotthepony.mc.otm.capability.IMatteryUpgrade import ru.dbotthepony.mc.otm.capability.IMatteryUpgrade
import ru.dbotthepony.mc.otm.capability.MatteryCapability import ru.dbotthepony.mc.otm.capability.MatteryCapability
import ru.dbotthepony.mc.otm.capability.UpgradeType 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.capability.matteryPlayer
import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.compat.cos.cosmeticArmorSlots 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.NullValueCodec
import ru.dbotthepony.mc.otm.core.util.VarIntValueCodec import ru.dbotthepony.mc.otm.core.util.VarIntValueCodec
import ru.dbotthepony.mc.otm.menu.input.InstantBooleanInput 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.MatteryPacket
import ru.dbotthepony.mc.otm.network.MenuFieldPacket import ru.dbotthepony.mc.otm.network.MenuFieldPacket
import ru.dbotthepony.mc.otm.network.MenuNetworkChannel 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.IntSupplier
import java.util.function.Predicate import java.util.function.Predicate
import java.util.function.Supplier import java.util.function.Supplier
import kotlin.collections.ArrayList
data class PlayerSlot<A : Slot, B : Slot>(val functional: A, val cosmetic: B? = null) data class PlayerSlot<A : Slot, B : Slot>(val functional: A, val cosmetic: B? = null)
@ -104,6 +107,7 @@ abstract class MatteryMenu @JvmOverloads protected constructor(
private val _playerMainSlots = ArrayList<InventorySlot>() private val _playerMainSlots = ArrayList<InventorySlot>()
private val _playerExoSuitSlots = ArrayList<InventorySlot>() private val _playerExoSuitSlots = ArrayList<InventorySlot>()
private val _playerCombinedInventorySlots = ArrayList<InventorySlot>() private val _playerCombinedInventorySlots = ArrayList<InventorySlot>()
private val _exopackChargeSlots = ArrayList<MatterySlot>()
private val playerInputs = ArrayList<PlayerInput<*>>() private val playerInputs = ArrayList<PlayerInput<*>>()
@ -212,6 +216,10 @@ abstract class MatteryMenu @JvmOverloads protected constructor(
*/ */
val playerCombinedInventorySlots: List<InventorySlot> = Collections.unmodifiableList(_playerCombinedInventorySlots) val playerCombinedInventorySlots: List<InventorySlot> = Collections.unmodifiableList(_playerCombinedInventorySlots)
val exopackChargeSlots: List<MatterySlot> = Collections.unmodifiableList(_exopackChargeSlots)
val exopackPowerLevel = ProfiledLevelGaugeWidget<ProfiledEnergyStorage<*>>(mSynchronizer)
var autoCreateInventoryFrame = true var autoCreateInventoryFrame = true
private set private set
@ -360,6 +368,13 @@ abstract class MatteryMenu @JvmOverloads protected constructor(
mapQuickMoveToExternal(slot) mapQuickMoveToExternal(slot)
addSlot(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) { for (i in 0..8) {