From 15a20ef60a397e46021fdbcfc58a3f89214c500e Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Sun, 12 Nov 2023 03:02:02 +0100 Subject: Button editor pop out --- .../inventory/buttons/FragmentGuiScreen.kt | 88 ++++++++++++++++++++++ .../inventory/buttons/InventoryButtonEditor.kt | 38 +++++++--- .../inventory/buttons/MoulConfigFragment.kt | 43 +++++++++++ .../moe/nea/firmament/util/MoulConfigUtils.kt | 12 +++ 4 files changed, 171 insertions(+), 10 deletions(-) create mode 100644 src/main/kotlin/moe/nea/firmament/features/inventory/buttons/FragmentGuiScreen.kt create mode 100644 src/main/kotlin/moe/nea/firmament/features/inventory/buttons/MoulConfigFragment.kt create mode 100644 src/main/kotlin/moe/nea/firmament/util/MoulConfigUtils.kt (limited to 'src/main/kotlin/moe/nea') diff --git a/src/main/kotlin/moe/nea/firmament/features/inventory/buttons/FragmentGuiScreen.kt b/src/main/kotlin/moe/nea/firmament/features/inventory/buttons/FragmentGuiScreen.kt new file mode 100644 index 0000000..4f38f99 --- /dev/null +++ b/src/main/kotlin/moe/nea/firmament/features/inventory/buttons/FragmentGuiScreen.kt @@ -0,0 +1,88 @@ +package moe.nea.firmament.features.inventory.buttons + +import io.github.moulberry.moulconfig.gui.GuiContext +import me.shedaniel.math.Dimension +import me.shedaniel.math.Point +import me.shedaniel.math.Rectangle +import net.minecraft.client.gui.DrawContext +import net.minecraft.client.gui.screen.Screen +import net.minecraft.text.Text + +abstract class FragmentGuiScreen( + val dismissOnOutOfBounds: Boolean = true +) : Screen(Text.literal("")) { + var popup: MoulConfigFragment? = null + + fun createPopup(context: GuiContext, position: Point) { + popup = MoulConfigFragment(context, position) { popup = null } + } + + override fun render(context: DrawContext, mouseX: Int, mouseY: Int, delta: Float) { + super.render(context, mouseX, mouseY, delta) + popup?.render(context, mouseX, mouseY, delta) + } + + private inline fun ifPopup(ifYes: (MoulConfigFragment) -> Unit): Boolean { + val p = popup ?: return false + ifYes(p) + return true + } + + override fun keyPressed(keyCode: Int, scanCode: Int, modifiers: Int): Boolean { + return ifPopup { + it.keyPressed(keyCode, scanCode, modifiers) + } + } + + override fun keyReleased(keyCode: Int, scanCode: Int, modifiers: Int): Boolean { + return ifPopup { + it.keyReleased(keyCode, scanCode, modifiers) + } + } + + override fun mouseMoved(mouseX: Double, mouseY: Double) { + ifPopup { it.mouseMoved(mouseX, mouseY) } + } + + override fun mouseReleased(mouseX: Double, mouseY: Double, button: Int): Boolean { + return ifPopup { + it.mouseReleased(mouseX, mouseY, button) + } + } + + override fun mouseDragged(mouseX: Double, mouseY: Double, button: Int, deltaX: Double, deltaY: Double): Boolean { + return ifPopup { + it.mouseDragged(mouseX, mouseY, button, deltaX, deltaY) + } + } + + override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean { + return ifPopup { + if (!Rectangle( + it.position, + Dimension(it.context.root.width, it.context.root.height) + ).contains(Point(mouseX, mouseY)) + && dismissOnOutOfBounds + ) { + popup = null + } else { + it.mouseClicked(mouseX, mouseY, button) + } + } + } + + override fun charTyped(chr: Char, modifiers: Int): Boolean { + return ifPopup { it.charTyped(chr, modifiers) } + } + + override fun mouseScrolled( + mouseX: Double, + mouseY: Double, + horizontalAmount: Double, + verticalAmount: Double + ): Boolean { + return ifPopup { + it.mouseScrolled(mouseX, mouseY, verticalAmount) + } + } +} diff --git a/src/main/kotlin/moe/nea/firmament/features/inventory/buttons/InventoryButtonEditor.kt b/src/main/kotlin/moe/nea/firmament/features/inventory/buttons/InventoryButtonEditor.kt index ff3469d..982bf31 100644 --- a/src/main/kotlin/moe/nea/firmament/features/inventory/buttons/InventoryButtonEditor.kt +++ b/src/main/kotlin/moe/nea/firmament/features/inventory/buttons/InventoryButtonEditor.kt @@ -4,16 +4,19 @@ import io.github.moulberry.moulconfig.xml.Bind import me.shedaniel.math.Dimension import me.shedaniel.math.Point import me.shedaniel.math.Rectangle +import org.lwjgl.glfw.GLFW import net.minecraft.client.gui.DrawContext -import net.minecraft.client.gui.screen.Screen -import net.minecraft.text.Text +import moe.nea.firmament.util.MoulConfigUtils class InventoryButtonEditor( val lastGuiRect: Rectangle, -) : Screen(Text.literal("")) { +) : FragmentGuiScreen() { class Editor { @field:Bind - var + var command: String = "" + + @field:Bind + var icon: String = "" } data class Button( @@ -40,22 +43,37 @@ class InventoryButtonEditor( val buttons = mutableListOf