add whistle to train

This commit is contained in:
2026-06-29 08:35:14 +02:00
parent d09a975578
commit 6a2a2d2e8a
24 changed files with 881 additions and 38 deletions

57
core/transition.gdshader Normal file
View File

@@ -0,0 +1,57 @@
shader_type canvas_item;
uniform vec4 base_color : source_color;
uniform vec2 node_resolution;
uniform float factor : hint_range(0.0, 1.0, 0.01) = 0.54;
uniform float width = 0.4;
group_uniforms gradient;
uniform sampler2D gradient_texture;
uniform bool gradient_fixed = false;
group_uniforms shape;
uniform sampler2D shape_texture;
uniform float shape_tiling = 32.0;
uniform float shape_rotation = 0.0;
uniform vec2 shape_scroll = vec2(0.0);
uniform float shape_feathering : hint_range(0.0, 1.0, 0.01) = 0.00;
uniform float shape_treshold : hint_range(0.0, 2.0, 0.01) = 1.0;
float gradient(vec2 uv, vec2 fixed_uv, bool fixed){
float value = 0.0;
if(fixed){
value = texture(gradient_texture, fixed_uv).r;
} else {
value = texture(gradient_texture, uv).r;
}
return value;
}
vec2 rotate(vec2 uv, vec2 pivot, float angle)
{
mat2 rotation = mat2(vec2(sin(angle), -cos(angle)),
vec2(cos(angle), sin(angle)));
uv -= pivot;
uv = uv * rotation;
uv += pivot;
return uv;
}
void fragment() {
float progress = mix(-width, 1.0, factor);
float aspect = node_resolution.y / node_resolution.x;
vec2 aspect_uv = ((UV-vec2(0.0,0.5)) * vec2(1.0, aspect))+vec2(0.0,0.5);
float value = clamp((gradient(UV, aspect_uv, gradient_fixed) - progress) / (width), 0.0, 1.0);
vec2 tiled_uv = rotate(mod((aspect_uv + vec2(TIME)*shape_scroll) * shape_tiling, 1.0), vec2(0.5), radians(shape_rotation));
float shape_value = 1.0 - texture(shape_texture, tiled_uv).r;
shape_value = mix(shape_feathering * 0.5, 1.0 - shape_feathering * 0.5, shape_value);
float shaped_gradient = smoothstep(value - (shape_feathering * 0.5), value + (shape_feathering * 0.5), shape_treshold - shape_value);
COLOR.rgb = base_color.rgb;
COLOR.a = shaped_gradient;
}