From 3902b75a27998e2af88dc6c6887d98a4cb095c25 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Sun, 23 Jun 2019 22:34:12 -0400 Subject: [PATCH] Handle click sounds in the screen --- .../net/shadowfacts/cacao/CacaoScreen.kt | 6 +++++- .../kotlin/net/shadowfacts/cacao/Window.kt | 6 ++++-- .../kotlin/net/shadowfacts/cacao/view/View.kt | 6 ++++-- .../cacao/view/button/AbstractButton.kt | 15 ++++---------- .../cacao/view/button/EnumButton.kt | 4 ++-- .../cacao/view/button/ToggleButton.kt | 4 ++-- .../shadowfacts/cacao/view/ViewClickTests.kt | 20 +++++++++++-------- .../cacao/view/button/ButtonClickTests.kt | 4 ++-- .../cacao/view/button/EnumButtonTests.kt | 14 ++++++------- .../cacao/view/button/ToggleButtonTests.kt | 8 ++++---- 10 files changed, 46 insertions(+), 41 deletions(-) diff --git a/src/main/kotlin/net/shadowfacts/cacao/CacaoScreen.kt b/src/main/kotlin/net/shadowfacts/cacao/CacaoScreen.kt index 9d56402..2c6c85d 100644 --- a/src/main/kotlin/net/shadowfacts/cacao/CacaoScreen.kt +++ b/src/main/kotlin/net/shadowfacts/cacao/CacaoScreen.kt @@ -2,8 +2,10 @@ package net.shadowfacts.cacao import net.minecraft.client.gui.screen.Screen import net.minecraft.network.chat.TextComponent +import net.minecraft.sound.SoundEvents import net.shadowfacts.cacao.geometry.Point import net.shadowfacts.cacao.util.MouseButton +import net.shadowfacts.cacao.util.RenderHelper import java.util.* /** @@ -45,7 +47,9 @@ open class CacaoScreen: Screen(TextComponent("CacaoScreen")) { override fun mouseClicked(mouseX: Double, mouseY: Double, button: Int): Boolean { val window = windows.lastOrNull() - window?.mouseClicked(Point(mouseX, mouseY), MouseButton.fromMC(button)) + if (window?.mouseClicked(Point(mouseX, mouseY), MouseButton.fromMC(button)) == true) { + RenderHelper.playSound(SoundEvents.UI_BUTTON_CLICK) + } return false } diff --git a/src/main/kotlin/net/shadowfacts/cacao/Window.kt b/src/main/kotlin/net/shadowfacts/cacao/Window.kt index 5db1c38..dcc884d 100644 --- a/src/main/kotlin/net/shadowfacts/cacao/Window.kt +++ b/src/main/kotlin/net/shadowfacts/cacao/Window.kt @@ -81,13 +81,15 @@ class Window { * * @param point The point in the window of the click. * @param mouseButton The mouse button that was used to click. + * @return Whether the mouse click was handled by a view. */ - fun mouseClicked(point: Point, mouseButton: MouseButton) { + fun mouseClicked(point: Point, mouseButton: MouseButton): Boolean { val view = viewAtPoint(point) if (view != null) { val pointInView = Point(point.x - view.frame.left, point.y - view.frame.top) - view.mouseClicked(pointInView, mouseButton) + return view.mouseClicked(pointInView, mouseButton) } + return false } } \ No newline at end of file diff --git a/src/main/kotlin/net/shadowfacts/cacao/view/View.kt b/src/main/kotlin/net/shadowfacts/cacao/view/View.kt index 6cdcc5c..bd8f2c8 100644 --- a/src/main/kotlin/net/shadowfacts/cacao/view/View.kt +++ b/src/main/kotlin/net/shadowfacts/cacao/view/View.kt @@ -258,13 +258,15 @@ open class View() { * * @param point The point in the coordinate system of this view that the mouse was clicked. * @param mouseButton The mouse button used to click. + * @return Whether the mouse click was handled by this view or any subviews. */ - open fun mouseClicked(point: Point, mouseButton: MouseButton) { + open fun mouseClicked(point: Point, mouseButton: MouseButton): Boolean { val view = subviewAtPoint(point) if (view != null) { val pointInView = convert(point, to = view) - view.mouseClicked(pointInView, mouseButton) + return view.mouseClicked(pointInView, mouseButton) } + return false } /** diff --git a/src/main/kotlin/net/shadowfacts/cacao/view/button/AbstractButton.kt b/src/main/kotlin/net/shadowfacts/cacao/view/button/AbstractButton.kt index 09c67c0..424dcf4 100644 --- a/src/main/kotlin/net/shadowfacts/cacao/view/button/AbstractButton.kt +++ b/src/main/kotlin/net/shadowfacts/cacao/view/button/AbstractButton.kt @@ -65,11 +65,6 @@ abstract class AbstractButton>(val content: View, val */ var disabledBackground: View? = NinePatchView(DISABLED_BG) - /** - * If the button will play the Minecraft button click sound when clicked. - */ - var clickSoundEnabled = true - override fun wasAdded() { solver.dsl { addSubview(content) @@ -115,8 +110,8 @@ abstract class AbstractButton>(val content: View, val RenderHelper.popMatrix() } - override fun mouseClicked(point: Point, mouseButton: MouseButton) { - if (disabled) return + override fun mouseClicked(point: Point, mouseButton: MouseButton): Boolean { + if (disabled) return false val handler = handler if (handler != null) { @@ -125,11 +120,9 @@ abstract class AbstractButton>(val content: View, val // For example, an implementing class may be defined as such: `class Button: AbstractButton