feat: merge Schritt 10 — spore overlay shader
This commit is contained in:
@@ -15,6 +15,7 @@ signal player_left(peer_id: int)
|
||||
signal player_list_synced()
|
||||
signal game_started()
|
||||
signal roll_received(roller_peer_id: int, player_name: String, d20_result: int, modifier: int, total: int)
|
||||
signal overlay_changed(overlay_name: String)
|
||||
|
||||
|
||||
func start_server(port: int, max_clients: int) -> void:
|
||||
@@ -160,6 +161,7 @@ func request_set_overlay(target_peer_id: int, overlay_name: String) -> void:
|
||||
@rpc("authority", "call_remote", "reliable")
|
||||
func set_overlay(overlay_name: String) -> void:
|
||||
GameState.set_overlay_local(my_id, overlay_name)
|
||||
overlay_changed.emit(overlay_name)
|
||||
|
||||
|
||||
@rpc("any_peer", "call_remote", "unreliable")
|
||||
|
||||
@@ -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]
|
||||
|
||||
34
ruf-der-pilze/shaders/spore_overlay.gdshader
Normal file
34
ruf-der-pilze/shaders/spore_overlay.gdshader
Normal file
@@ -0,0 +1,34 @@
|
||||
shader_type canvas_item;
|
||||
|
||||
uniform float intensity : hint_range(0.0, 1.0) = 0.0;
|
||||
uniform sampler2D screen_texture : hint_screen_texture, filter_linear_mipmap;
|
||||
|
||||
void fragment() {
|
||||
vec2 uv = SCREEN_UV;
|
||||
|
||||
// Subtle distortion — wavy lines, stronger at higher intensity
|
||||
float distort_x = sin(uv.y * 35.0 + TIME * 1.8) * 0.003 * intensity;
|
||||
float distort_y = cos(uv.x * 28.0 + TIME * 1.2) * 0.002 * intensity;
|
||||
|
||||
// Sample screen with slight RGB split for chromatic aberration feel
|
||||
float split = 0.003 * intensity;
|
||||
vec4 r = texture(screen_texture, uv + vec2(distort_x + split, distort_y));
|
||||
vec4 g = texture(screen_texture, uv + vec2(distort_x, distort_y));
|
||||
vec4 b = texture(screen_texture, uv + vec2(distort_x - split, distort_y));
|
||||
vec4 screen = vec4(r.r, g.g, b.b, 1.0);
|
||||
|
||||
// Vignette — darken edges
|
||||
vec2 center = uv - 0.5;
|
||||
float vignette = 1.0 - smoothstep(0.25, 0.75, length(center) * 1.6);
|
||||
screen.rgb *= mix(1.0, vignette, intensity * 0.6);
|
||||
|
||||
// Green spore tint
|
||||
vec3 spore_tint = vec3(0.05, 0.45, 0.12);
|
||||
screen.rgb = mix(screen.rgb, screen.rgb * spore_tint * 2.2, intensity * 0.35);
|
||||
|
||||
// Slight brightness pulse
|
||||
float pulse = 1.0 + sin(TIME * 1.5) * 0.04 * intensity;
|
||||
screen.rgb *= pulse;
|
||||
|
||||
COLOR = screen;
|
||||
}
|
||||
Reference in New Issue
Block a user