feat: tavern — add spore overlay CanvasLayer + shader driven by overlay_changed signal

This commit is contained in:
2026-04-16 00:28:09 +02:00
parent 5cce32286b
commit 3e985b08e7

View File

@@ -5,6 +5,7 @@ const INTERACT_DISTANCE := 2.5
var _modifier: int = 0
var _roll_log: RichTextLabel
var _spore_mat: ShaderMaterial
func _ready() -> void:
@@ -23,6 +24,7 @@ func _ready() -> void:
timer.timeout.connect(_broadcast_camera_transform)
add_child(timer)
_setup_dice_ui()
_setup_spore_overlay()
func _get_dm_peer_id() -> int:
@@ -142,6 +144,28 @@ func _on_roll_pressed() -> void:
NetworkManager.broadcast_roll.rpc_id(1, NetworkManager.my_id, d20, _modifier)
func _setup_spore_overlay() -> void:
var canvas := CanvasLayer.new()
canvas.name = "SporeOverlay"
canvas.layer = 10
add_child(canvas)
var rect := ColorRect.new()
rect.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
rect.mouse_filter = Control.MOUSE_FILTER_IGNORE
_spore_mat = ShaderMaterial.new()
_spore_mat.shader = load("res://shaders/spore_overlay.gdshader") as Shader
rect.material = _spore_mat
canvas.add_child(rect)
NetworkManager.overlay_changed.connect(_on_overlay_changed)
func _on_overlay_changed(overlay_name: String) -> void:
var intensity := 1.0 if overlay_name == "spore_active" else 0.0
_spore_mat.set_shader_parameter("intensity", intensity)
func _on_roll_received(roller_peer_id: int, player_name: String, d20_result: int, modifier: int, total: int) -> void:
var mod_str := " %+d" % modifier if modifier != 0 else ""
var line := "[b]%s[/b] würfelt %d%s = [b]%d[/b]" % [player_name, d20_result, mod_str, total]