package net.shadowfacts.phycon.block.terminal import net.minecraft.client.MinecraftClient import net.minecraft.client.gui.screen.Screen import net.minecraft.client.util.InputUtil import net.minecraft.text.TranslatableText import net.minecraft.util.Identifier import net.shadowfacts.cacao.geometry.Size import net.shadowfacts.cacao.util.Color import net.shadowfacts.cacao.util.LayoutGuide import net.shadowfacts.cacao.util.texture.Texture import net.shadowfacts.cacao.view.Label import net.shadowfacts.cacao.view.TextureView import net.shadowfacts.cacao.view.button.Button import net.shadowfacts.kiwidsl.dsl import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.networking.C2STerminalCraftingButton import org.lwjgl.glfw.GLFW /** * @author shadowfacts */ class CraftingTerminalViewController( screen: CraftingTerminalScreen, handler: CraftingTerminalScreenHandler, ): AbstractTerminalViewController( screen, handler, ) { companion object { val SMALL_BUTTON = Texture(Identifier(PhysicalConnectivity.MODID, "textures/gui/icons.png"), 0, 48) val SMALL_BUTTON_HOVERED = Texture(Identifier(PhysicalConnectivity.MODID, "textures/gui/icons.png"), 16, 48) val CLEAR_ICON = Texture(Identifier(PhysicalConnectivity.MODID, "textures/gui/icons.png"), 32, 48) val PLUS_ICON = Texture(Identifier(PhysicalConnectivity.MODID, "textures/gui/icons.png"), 48, 48) } lateinit var craftingInv: LayoutGuide override fun viewDidLoad() { super.viewDidLoad() craftingInv = view.addLayoutGuide() view.solver.dsl { craftingInv.leftAnchor equalTo buffer.leftAnchor craftingInv.topAnchor equalTo playerInv.topAnchor craftingInv.widthAnchor equalTo buffer.widthAnchor craftingInv.heightAnchor equalTo 54 } val craftingLabel = view.addSubview(Label(TranslatableText("gui.phycon.terminal_crafting"))).apply { textColor = Color.TEXT } view.solver.dsl { craftingLabel.leftAnchor equalTo craftingInv.leftAnchor craftingLabel.topAnchor equalTo playerInvLabel.topAnchor } val clearIcon = TextureView(CLEAR_ICON).apply { intrinsicContentSize = Size(3.0,3.0) } val clearButton = view.addSubview(Button(clearIcon, padding = 2.0, handler = ::clearPressed)).apply { background = TextureView(SMALL_BUTTON) hoveredBackground = TextureView(SMALL_BUTTON_HOVERED) tooltip = TranslatableText("gui.phycon.terminal.clear_crafting") } view.solver.dsl { clearButton.topAnchor equalTo craftingInv.topAnchor clearButton.leftAnchor equalTo (pane.leftAnchor + 4) } val plusIcon = TextureView(PLUS_ICON).apply { intrinsicContentSize = Size(3.0, 3.0) } val plusButton = view.addSubview(Button(plusIcon, padding = 2.0, handler = ::plusPressed)).apply { background= TextureView(SMALL_BUTTON) hoveredBackground = TextureView(SMALL_BUTTON_HOVERED) tooltip = TranslatableText("gui.phycon.terminal.more_crafting") } view.solver.dsl { plusButton.topAnchor equalTo (clearButton.bottomAnchor + 2) plusButton.leftAnchor equalTo clearButton.leftAnchor } } private fun clearPressed(button: Button) { MinecraftClient.getInstance().player!!.networkHandler.sendPacket(C2STerminalCraftingButton(terminal, C2STerminalCraftingButton.Action.CLEAR_GRID)) } private fun plusPressed(button: Button) { val client = MinecraftClient.getInstance() val action = if (Screen.hasShiftDown()) { C2STerminalCraftingButton.Action.REQUEST_MAX_MORE } else { C2STerminalCraftingButton.Action.REQUEST_ONE_MORE } client.player!!.networkHandler.sendPacket(C2STerminalCraftingButton(terminal, action)) } }