mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-15 18:34:56 -04:00
rendering: MouseScrollEvent, interaction: hotbar scrolling
This commit is contained in:
parent
a7e2d462e3
commit
614d12978a
@ -22,5 +22,5 @@ object StaticConfiguration {
|
||||
|
||||
|
||||
@Deprecated(message = "Just for hud development purposes")
|
||||
const val HUD_ONLY = true
|
||||
const val HUD_ONLY = false
|
||||
}
|
||||
|
@ -19,7 +19,6 @@ data class CameraGameConfig(
|
||||
@Json(name = "render_distance") var renderDistance: Int = 10,
|
||||
var fov: Double = 60.0,
|
||||
@Json(name = "dynamic_fov") var dynamicFov: Boolean = true,
|
||||
@Json(name = "mouse_sensitivity") var moseSensitivity: Float = 0.1f,
|
||||
@Json(name = "no_clip_movement") var noCipMovement: Boolean = false,
|
||||
@Json(name = "disable_movement_sending") var disableMovementSending: Boolean = true, // ToDo: This should get false once the physics are "complete"
|
||||
)
|
||||
|
@ -20,4 +20,7 @@ data class ControlsGameConfig(
|
||||
@Json(name = "enable_flattening") var enableFlattening: Boolean = true,
|
||||
@Json(name = "enable_stripping") var enableStripping: Boolean = true,
|
||||
@Json(name = "enable_tilling") var enableTilling: Boolean = true,
|
||||
|
||||
@Json(name = "mouse_sensitivity") var moseSensitivity: Float = 0.1f,
|
||||
@Json(name = "hotbar_scroll_sensitivity") var hotbarScrollSensitivity: Double = 1.0,
|
||||
)
|
||||
|
@ -19,6 +19,7 @@ import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer
|
||||
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDBuilder
|
||||
import de.bixilon.minosoft.gui.rendering.gui.hud.elements.HUDElement
|
||||
import de.bixilon.minosoft.modding.event.events.ExperienceChangeEvent
|
||||
import de.bixilon.minosoft.modding.event.events.SelectHotbarSlotEvent
|
||||
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||
import glm_.vec2.Vec2i
|
||||
@ -46,6 +47,10 @@ class HotbarHUDElement(hudRenderer: HUDRenderer) : HUDElement<HotbarElement>(hud
|
||||
connection.registerEvent(CallbackEventInvoker.of<GamemodeChangeEvent> {
|
||||
layout.forceApply()
|
||||
})
|
||||
|
||||
connection.registerEvent(CallbackEventInvoker.of<SelectHotbarSlotEvent> {
|
||||
layout.base.apply()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
@ -60,7 +60,7 @@ class Camera(
|
||||
) {
|
||||
var fogColor = Previous(ChatColors.GREEN)
|
||||
var fogStart = 100.0f
|
||||
private var mouseSensitivity = Minosoft.config.config.game.camera.moseSensitivity
|
||||
private var mouseSensitivity = Minosoft.config.config.game.controls.moseSensitivity
|
||||
|
||||
@Deprecated("", ReplaceWith("connection.player"))
|
||||
val entity: LocalPlayerEntity
|
||||
|
@ -13,11 +13,16 @@
|
||||
|
||||
package de.bixilon.minosoft.gui.rendering.input.interaction
|
||||
|
||||
import de.bixilon.minosoft.Minosoft
|
||||
import de.bixilon.minosoft.config.key.KeyAction
|
||||
import de.bixilon.minosoft.config.key.KeyBinding
|
||||
import de.bixilon.minosoft.config.key.KeyCodes
|
||||
import de.bixilon.minosoft.data.registries.other.containers.PlayerInventory
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.input.MouseScrollEvent
|
||||
import de.bixilon.minosoft.modding.event.EventInitiators
|
||||
import de.bixilon.minosoft.modding.event.events.SelectHotbarSlotEvent
|
||||
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
||||
import de.bixilon.minosoft.protocol.packets.c2s.play.HotbarSlotSetC2SP
|
||||
import de.bixilon.minosoft.util.KUtil.toResourceLocation
|
||||
|
||||
@ -26,6 +31,8 @@ class HotbarInteractionHandler(
|
||||
) {
|
||||
private val connection = renderWindow.connection
|
||||
|
||||
private var currentScrollOffset = 0.0
|
||||
|
||||
|
||||
fun selectSlot(slot: Int) {
|
||||
// ToDo: Rate limit?
|
||||
@ -34,6 +41,7 @@ class HotbarInteractionHandler(
|
||||
}
|
||||
connection.player.selectedHotbarSlot = slot
|
||||
connection.sendPacket(HotbarSlotSetC2SP(slot))
|
||||
connection.fireEvent(SelectHotbarSlotEvent(connection, EventInitiators.CLIENT, slot))
|
||||
}
|
||||
|
||||
|
||||
@ -47,5 +55,27 @@ class HotbarInteractionHandler(
|
||||
selectSlot(i - 1)
|
||||
}
|
||||
}
|
||||
|
||||
connection.registerEvent(CallbackEventInvoker.of<MouseScrollEvent> {
|
||||
currentScrollOffset += it.offset.y
|
||||
|
||||
val limit = Minosoft.config.config.game.controls.hotbarScrollSensitivity
|
||||
var nextSlot = connection.player.selectedHotbarSlot
|
||||
if (currentScrollOffset >= limit && currentScrollOffset > 0) {
|
||||
nextSlot--
|
||||
} else if (currentScrollOffset <= -limit && currentScrollOffset < 0) {
|
||||
nextSlot++
|
||||
} else {
|
||||
return@of
|
||||
}
|
||||
currentScrollOffset = 0.0
|
||||
if (nextSlot < 0) {
|
||||
nextSlot = PlayerInventory.HOTBAR_SLOTS - 1
|
||||
} else if (nextSlot > PlayerInventory.HOTBAR_SLOTS - 1) {
|
||||
nextSlot = 0
|
||||
}
|
||||
|
||||
selectSlot(nextSlot)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -24,9 +24,9 @@ import de.bixilon.minosoft.gui.rendering.input.LeftClickHandler
|
||||
import de.bixilon.minosoft.gui.rendering.input.RightClickHandler
|
||||
import de.bixilon.minosoft.gui.rendering.input.camera.Camera
|
||||
import de.bixilon.minosoft.gui.rendering.input.interaction.InteractionManager
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.MouseMoveEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.RawCharInputEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.RawKeyInputEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.input.MouseMoveEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.input.RawCharInputEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.input.RawKeyInputEvent
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.CursorModes
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes
|
||||
import de.bixilon.minosoft.modding.event.invoker.CallbackEventInvoker
|
||||
|
@ -11,10 +11,11 @@
|
||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||
*/
|
||||
|
||||
package de.bixilon.minosoft.gui.rendering.modding.events
|
||||
package de.bixilon.minosoft.gui.rendering.modding.events.input
|
||||
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.Rendering
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.RenderEvent
|
||||
import glm_.vec2.Vec2d
|
||||
|
||||
class MouseMoveEvent(
|
@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Minosoft
|
||||
* Copyright (C) 2021 Moritz Zwerger
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||
*/
|
||||
|
||||
package de.bixilon.minosoft.gui.rendering.modding.events.input
|
||||
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.Rendering
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.RenderEvent
|
||||
import glm_.vec2.Vec2d
|
||||
|
||||
class MouseScrollEvent(
|
||||
renderWindow: RenderWindow = Rendering.currentContext!!,
|
||||
offset: Vec2d,
|
||||
) : RenderEvent(renderWindow) {
|
||||
val offset: Vec2d = offset
|
||||
get() = Vec2d(field)
|
||||
}
|
@ -11,10 +11,11 @@
|
||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||
*/
|
||||
|
||||
package de.bixilon.minosoft.gui.rendering.modding.events
|
||||
package de.bixilon.minosoft.gui.rendering.modding.events.input
|
||||
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.Rendering
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.RenderEvent
|
||||
|
||||
class RawCharInputEvent(
|
||||
renderWindow: RenderWindow = Rendering.currentContext!!,
|
@ -11,11 +11,12 @@
|
||||
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
|
||||
*/
|
||||
|
||||
package de.bixilon.minosoft.gui.rendering.modding.events
|
||||
package de.bixilon.minosoft.gui.rendering.modding.events.input
|
||||
|
||||
import de.bixilon.minosoft.config.key.KeyCodes
|
||||
import de.bixilon.minosoft.gui.rendering.RenderWindow
|
||||
import de.bixilon.minosoft.gui.rendering.Rendering
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.RenderEvent
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.KeyChangeTypes
|
||||
|
||||
class RawKeyInputEvent(
|
@ -14,7 +14,14 @@
|
||||
package de.bixilon.minosoft.gui.rendering.system.window
|
||||
|
||||
import de.bixilon.minosoft.config.key.KeyCodes
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.*
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.ResizeWindowEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.WindowCloseEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.WindowFocusChangeEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.WindowIconifyChangeEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.input.MouseMoveEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.input.MouseScrollEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.input.RawCharInputEvent
|
||||
import de.bixilon.minosoft.gui.rendering.modding.events.input.RawKeyInputEvent
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.BaseWindow.Companion.DEFAULT_MAXIMUM_WINDOW_SIZE
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.BaseWindow.Companion.DEFAULT_MINIMUM_WINDOW_SIZE
|
||||
import de.bixilon.minosoft.gui.rendering.system.window.BaseWindow.Companion.DEFAULT_WINDOW_SIZE
|
||||
@ -153,6 +160,7 @@ class GLFWWindow(
|
||||
glfwSetWindowCloseCallback(window, this::onClose)
|
||||
glfwSetWindowFocusCallback(window, this::onFocusChange)
|
||||
glfwSetWindowIconifyCallback(window, this::onIconify)
|
||||
glfwSetScrollCallback(window, this::onScroll)
|
||||
}
|
||||
|
||||
override fun destroy() {
|
||||
@ -252,6 +260,14 @@ class GLFWWindow(
|
||||
eventMaster.fireEvent(MouseMoveEvent(position = Vec2d(x, y)))
|
||||
}
|
||||
|
||||
private fun onScroll(window: Long, xOffset: Double, yOffset: Double) {
|
||||
if (window != this.window) {
|
||||
return
|
||||
}
|
||||
|
||||
eventMaster.fireEvent(MouseScrollEvent(offset = Vec2d(xOffset, yOffset)))
|
||||
}
|
||||
|
||||
companion object {
|
||||
val CursorModes.glfw: Int
|
||||
get() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user