package net.shadowfacts.phycon.block.terminal import net.minecraft.client.MinecraftClient 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 (InputUtil.isKeyPressed(client.window.handle, GLFW.GLFW_KEY_LEFT_SHIFT) || InputUtil.isKeyPressed(client.window.handle, GLFW.GLFW_KEY_RIGHT_SHIFT)) { C2STerminalCraftingButton.Action.REQUEST_MAX_MORE } else { C2STerminalCraftingButton.Action.REQUEST_ONE_MORE } client.player!!.networkHandler.sendPacket(C2STerminalCraftingButton(terminal, action)) } }