101 lines
3.7 KiB
Kotlin
101 lines
3.7 KiB
Kotlin
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<CraftingTerminalBlockEntity, CraftingTerminalScreen, CraftingTerminalScreenHandler>(
|
|
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))
|
|
}
|
|
|
|
}
|