aboutsummaryrefslogtreecommitdiff
path: root/game/src/Game/Theme/StyleBoxWithSound.gd
diff options
context:
space:
mode:
Diffstat (limited to 'game/src/Game/Theme/StyleBoxWithSound.gd')
-rw-r--r--game/src/Game/Theme/StyleBoxWithSound.gd34
1 files changed, 34 insertions, 0 deletions
diff --git a/game/src/Game/Theme/StyleBoxWithSound.gd b/game/src/Game/Theme/StyleBoxWithSound.gd
new file mode 100644
index 0000000..8c29b34
--- /dev/null
+++ b/game/src/Game/Theme/StyleBoxWithSound.gd
@@ -0,0 +1,34 @@
+## WARNING: This will not work with togglable UI elements, a special implementation is needed for them.
+@tool
+extends StyleBox
+class_name StyleBoxWithSound
+
+@export
+var style_box : StyleBox:
+ get: return style_box
+ set(v):
+ style_box = v
+ emit_changed()
+
+@export
+var sound : AudioStream:
+ get: return sound
+ set(v):
+ sound = v
+ emit_changed()
+
+func _get_draw_rect(rect : Rect2) -> Rect2:
+ if style_box == null: return Rect2()
+ return style_box._get_draw_rect(rect)
+
+func _draw(to_canvas_item : RID, rect : Rect2) -> void:
+ # This is a hack
+ # Works fine for simple non-normal style cases
+ # Normal styles being drawn immediately tho will trigger sound on startup
+ # This would require further work to be applicable for release sounds
+ # Is there any other reason aside from release sounds (might be useful for toggles?)
+ # This should be fast enough to not cause draw issues
+ if sound != null:
+ SoundManager.play_effect_stream(sound)
+ if style_box != null:
+ style_box.draw(to_canvas_item, rect)