diff options
author | Appability <appable@icloud.com> | 2022-10-21 23:33:52 -0700 |
---|---|---|
committer | Appability <appable@icloud.com> | 2022-10-21 23:33:52 -0700 |
commit | 4f25e7948c7e85151a80c17f7d2b25b72675cecf (patch) | |
tree | 7e152610a0f80f40f5524a231a157ea81ffab0e3 /src/main/kotlin/com/ambientaddons/gui/MoveGui.kt | |
parent | 1c3359e42f38012dae182e75200cc1f364dcda8f (diff) | |
download | AmbientAddons-4f25e7948c7e85151a80c17f7d2b25b72675cecf.tar.gz AmbientAddons-4f25e7948c7e85151a80c17f7d2b25b72675cecf.tar.bz2 AmbientAddons-4f25e7948c7e85151a80c17f7d2b25b72675cecf.zip |
moving gui stuff (attempt 1)
Diffstat (limited to 'src/main/kotlin/com/ambientaddons/gui/MoveGui.kt')
-rw-r--r-- | src/main/kotlin/com/ambientaddons/gui/MoveGui.kt | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/main/kotlin/com/ambientaddons/gui/MoveGui.kt b/src/main/kotlin/com/ambientaddons/gui/MoveGui.kt new file mode 100644 index 0000000..33c96e7 --- /dev/null +++ b/src/main/kotlin/com/ambientaddons/gui/MoveGui.kt @@ -0,0 +1,77 @@ +package com.ambientaddons.gui + +import AmbientAddons.Companion.guiElements +import AmbientAddons.Companion.persistentData +import com.ambientaddons.utils.Alignment +import com.ambientaddons.utils.dungeon.TextStyle +import com.ambientaddons.utils.render.OverlayUtils +import gg.essential.universal.UResolution +import net.minecraft.client.gui.GuiScreen +import net.minecraft.client.renderer.GlStateManager +import org.lwjgl.input.Mouse +import org.lwjgl.opengl.Display +import java.awt.Color + +class MoveGui : GuiScreen() { + private var currentElement: GuiElement? = null + private var clickOffsetX = 0.0 + private var clickOffsetY = 0.0 + + override fun drawScreen(x: Int, y: Int, partialTicks: Float) { + super.drawScreen(x, y, partialTicks) + val (mouseX, mouseY) = getMouseCoordinates() + OverlayUtils.renderRect( + 0.0, 0.0, UResolution.scaledWidth.toDouble(), UResolution.scaledHeight.toDouble(), Color(0, 0, 0, 64) + ) + GlStateManager.pushMatrix() + GlStateManager.translate(UResolution.scaledWidth / 2.0, UResolution.scaledHeight / 2.0, 300.0) + OverlayUtils.drawString(0, 10, "Drag to move GUI elements.", TextStyle.Outline, Alignment.Center) + OverlayUtils.drawString(0, 20, "Scroll inside elements to scale.", TextStyle.Outline, Alignment.Center) + GlStateManager.popMatrix() + guiElements.forEach { it.draw(mouseX, mouseY) } + } + + override fun mouseClicked(x: Int, y: Int, mouseButton: Int) { + val (mouseX, mouseY) = getMouseCoordinates() + currentElement = guiElements.find { it.isInsideElement(mouseX, mouseY) }?.apply { + clickOffsetX = mouseX - position.x + clickOffsetY = mouseY - position.y + } + super.mouseClicked(x, y, mouseButton) + } + + override fun mouseClickMove(x: Int, y: Int, clickedMouseButton: Int, timeSinceLastClick: Long) { + currentElement?.apply { + val (mouseX, mouseY) = getMouseCoordinates() + position.x = mouseX - clickOffsetX + position.y = mouseY - clickOffsetY + coerceIntoScreen() + } + super.mouseClickMove(x, y, clickedMouseButton, timeSinceLastClick) + } + + override fun handleMouseInput() { + super.handleMouseInput() + val (mouseX, mouseY) = getMouseCoordinates() + currentElement = guiElements.find { it.isInsideElement(mouseX, mouseY) }?.apply { + clickOffsetX = mouseX - position.x + clickOffsetY = mouseY - position.y + val scrollAmount = Mouse.getEventDWheel() + val oldScale = position.scale + val newScale = (position.scale + scrollAmount / 7200.0).coerceAtLeast(0.1) + position.x = mouseX + (newScale / oldScale) * (position.x - mouseX) + position.y = mouseY + (newScale / oldScale) * (position.y - mouseY) + position.scale = newScale + coerceIntoScreen() + } + } + + private fun getMouseCoordinates(): Pair<Double, Double> { + val mouseX = Mouse.getX() / UResolution.scaleFactor + val mouseY = (Display.getHeight() - Mouse.getY()) / UResolution.scaleFactor + return Pair(mouseX, mouseY) + } + + override fun onGuiClosed() = persistentData.save() + +}
\ No newline at end of file |