feat: thwomp indicator shader + code, portal art

This commit is contained in:
Jakob Feldmann 2023-09-23 17:36:09 +02:00
parent 6fab67bdec
commit bb13843578
18 changed files with 411 additions and 61 deletions

BIN
assets/Sprite-0001.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

View File

@ -0,0 +1,35 @@
[remap]
importer="texture"
type="StreamTexture"
path="res://.import/Sprite-0001.png-301f2c522e57282b7df856433eb0ee72.stex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/Sprite-0001.png"
dest_files=[ "res://.import/Sprite-0001.png-301f2c522e57282b7df856433eb0ee72.stex" ]
[params]
compress/mode=0
compress/lossy_quality=0.7
compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
process/fix_alpha_border=false
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
detect_3d=false
svg/scale=1.0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 938 B

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -4385,7 +4385,7 @@ texture = SubResource( 62 )
offset = Vector2( 1, 0 )
hframes = 6
vframes = 6
frame = 8
frame = 6
__meta__ = {
"_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUJsb2JieVNwcml0ZS9CbG9iYnltYXRpb25QbGF5ZXIKc291cmNlfD1yZXM6Ly9hc3NldHMvYmxvYmJ5L2Jsb2JieS1zcHJpdGVzaGVldHQuYXNlcHJpdGUKbGF5ZXJ8PUJsb2JieQpvcF9leHB8PUZhbHNlCm9fZm9sZGVyfD0Kb19uYW1lfD0Kb25seV92aXNpYmxlfD1GYWxzZQpvX2V4X3B8PQo="
}
@ -4572,5 +4572,5 @@ one_shot = true
[connection signal="got_grounded" from="BlobbyStateMachine" to="." method="_on_Blobby_got_grounded"]
[connection signal="timeout" from="BlobbyStateMachine/JumpBufferTimer" to="BlobbyStateMachine" method="_on_JumpBufferTimer_timeout"]
[connection signal="timeout" from="InvincibilityTimer" to="." method="_on_InvincibilityTimer_timeout"]
[connection signal="timeout" from="PitfallTimer" to="." method="_on_PitfallTimer_timeout"]
[connection signal="timeout" from="PitfallTimer" to="." method="die_for_real" binds= [ -1 ]]
[connection signal="timeout" from="PitfallTimer" to="." method="_on_PitfallTimer_timeout"]

View File

@ -603,7 +603,6 @@ wait_time = 0.3
one_shot = true
[node name="JumpCollisionBody" type="KinematicBody2D" parent="."]
visible = false
collision_layer = 0
collision_mask = 8

View File

@ -1088,9 +1088,6 @@ unique_name_in_owner = true
[node name="UserInterface" parent="." instance=ExtResource( 5 )]
unique_name_in_owner = true
[node name="Timer" parent="UserInterface/HUD/HUDOverlay/GetBackTimer" index="0"]
wait_time = 20.0
[node name="TransitionLayer" type="CanvasLayer" parent="."]
visible = false

View File

@ -1137,9 +1137,6 @@ size_flags_vertical = 3
[node name="UserInterface" parent="." instance=ExtResource( 3 )]
unique_name_in_owner = true
[node name="Timer" parent="UserInterface/HUD/HUDOverlay/GetBackTimer" index="0"]
wait_time = 20.0
[node name="BlobbyCam" parent="." instance=ExtResource( 6 )]
unique_name_in_owner = true
drag_margin_top = 0.1
@ -1151,7 +1148,7 @@ position = Vector2( -156, -51 )
scale = Vector2( 0.878906, 0.936025 )
[node name="BlobbySprite" parent="Blobby" index="5"]
frame = 5
frame = 6
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 6 )
@ -1185,6 +1182,7 @@ format = 1
[node name="ElevatorButton" parent="." instance=ExtResource( 11 )]
position = Vector2( 1440, -64 )
elevator_time = 5
[node name="Portal" parent="ElevatorButton" instance=ExtResource( 7 )]
position = Vector2( 112, -8 )

View File

@ -227,9 +227,6 @@ size_flags_vertical = 3
[node name="UserInterface" parent="." instance=ExtResource( 7 )]
unique_name_in_owner = true
[node name="Timer" parent="UserInterface/HUD/HUDOverlay/GetBackTimer" index="0"]
wait_time = 20.0
[node name="BlobbyCam" parent="." instance=ExtResource( 13 )]
unique_name_in_owner = true
visible = false
@ -239,6 +236,9 @@ unique_name_in_owner = true
position = Vector2( -180, 113 )
scale = Vector2( 0.878906, 0.936025 )
[node name="BlobbySprite" parent="Blobby" index="5"]
frame = 7
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 6 )

View File

@ -116,9 +116,6 @@ size_flags_vertical = 3
[node name="UserInterface" parent="." instance=ExtResource( 13 )]
unique_name_in_owner = true
[node name="Timer" parent="UserInterface/HUD/HUDOverlay/GetBackTimer" index="0"]
wait_time = 20.0
[node name="BlobbyCam" parent="." instance=ExtResource( 5 )]
unique_name_in_owner = true
drag_margin_bottom = 0.3
@ -128,6 +125,9 @@ unique_name_in_owner = true
position = Vector2( -70, 1 )
scale = Vector2( 0.878906, 0.936025 )
[node name="BlobbySprite" parent="Blobby" index="5"]
frame = 5
[node name="BlobbymationTree" parent="Blobby/BlobbySprite" index="0"]
parameters/playback = SubResource( 6 )

File diff suppressed because one or more lines are too long

View File

@ -3,6 +3,7 @@ const PhysicsFunc = preload("res://src/Utilities/Physic/PhysicsFunc.gd")
#Array of RayCast2D
onready var trigger_rays = $FlyingLaserCutterBody/Triggers.get_children()
onready var trigger_ray_textures = $FlyingLaserCutterBody/TriggerTextures.get_children()
onready var body = $FlyingLaserCutterBody
onready var local_facing: Vector2 = Vector2.RIGHT
onready var global_facing: Vector2 = local_facing.rotated(transform.get_rotation())
@ -11,6 +12,9 @@ onready var slide_friction = 1.5
var flyoff_triggered = false
var has_hit_player = false
var halted = false
var returning = false
var initial_distance : float = 1.0
export(float) var velocity = 1
export(float) var max_velocity = 200
export(float) var acceleration_force = 1200
@ -18,39 +22,51 @@ export(float) var mass = 10
export(bool) var avoid_crushing = false
export(bool) var fast_retrigger = false
# TODO Returing Laser cutter has broken collision and infinite inertia
# Maybe keep returning paths free and crush player when in the way
func _ready() -> void:
$FlyingLaserCutterBody/Sprite/AnimationPlayer.play("default")
func _process(delta: float) -> void:
update_trigger_ray_shader()
func _physics_process(delta: float) -> void:
if !flyoff_triggered:
for ray in trigger_rays:
# When player has been hit on the way
if (has_hit_player && body.position.x > 0):
break
if ray.is_colliding() && (body.position.x < 1 || fast_retrigger):
var collider = ray.get_collider()
if collider.is_in_group("player"):
flyoff_triggered = true
body.set("motion/sync_to_physics", false)
break
if body.position.x > 0:
if halted && avoid_crushing:
return
returning = true
velocity=1
body.position.x += (max_velocity/3)*-1*delta
else:
returning = false
elif body.position.x == 0:
has_hit_player = false
if flyoff_triggered:
returning = false
velocity = PhysicsFunc.two_step_euler(
velocity, acceleration_force, mass, delta
)
velocity = clamp(velocity, 0, max_velocity)
var collision = body.move_and_collide(velocity*global_facing*delta,true)
if collision != null:
if !collision.collider.is_in_group("player"):
body.set("motion/sync_to_physics", true)
@ -58,6 +74,30 @@ func _physics_process(delta: float) -> void:
has_hit_player = true
flyoff_triggered = false
func update_trigger_ray_shader() -> void:
for i in trigger_rays.size():
var raycast: RayCast2D = trigger_rays[i]
var ray_texture: Sprite = trigger_ray_textures[i]
var distance: float = (raycast.position + body.position).distance_to(to_local(raycast.get_collision_point()))
ray_texture.material.set_shader_param("total_distance", distance)
if initial_distance <= 1.0:
initial_distance = distance
if flyoff_triggered || returning:
var factor : float = distance/initial_distance
ray_texture.material.set_shader_param("wave1", 0)
ray_texture.material.set_shader_param("wave2", 0)
ray_texture.material.set_shader_param("wave3", 1)
var constant_ray_color: Color = ray_texture.material.get_shader_param("wave3_color")
constant_ray_color.a = 1.2 - 1.0 * factor
ray_texture.material.set_shader_param("wave3_color", constant_ray_color)
else:
ray_texture.material.set_shader_param("wave1", 1)
ray_texture.material.set_shader_param("wave2", 0)
ray_texture.material.set_shader_param("wave3", 0)
var constant_ray_color: Color = ray_texture.material.get_shader_param("wave3_color")
constant_ray_color.a = 0.01
ray_texture.material.set_shader_param("wave3_color", constant_ray_color)
func _on_BackArea_body_entered(body: Node) -> void:
if(body.is_in_group("player")):

View File

@ -1,7 +1,9 @@
[gd_scene load_steps=7 format=2]
[gd_scene load_steps=11 format=2]
[ext_resource path="res://assets/contraption/FlyingLaserCutterShaded.png" type="Texture" id=1]
[ext_resource path="res://src/Platforms/FlyingLaserCutter.gd" type="Script" id=2]
[ext_resource path="res://src/Platforms/FlyingLaserCutterTriggerRayShader.gshader.gdshader" type="Shader" id=3]
[ext_resource path="res://assets/Sprite-0001.png" type="Texture" id=4]
[sub_resource type="Animation" id=2]
length = 2.4
@ -28,10 +30,51 @@ extents = Vector2( 3.067, 10 )
[sub_resource type="RectangleShape2D" id=5]
extents = Vector2( 0.5, 11 )
[sub_resource type="ShaderMaterial" id=6]
resource_local_to_scene = true
shader = ExtResource( 3 )
shader_param/bits = 1.0
shader_param/pixel_offset = 0.0
shader_param/total_distance = 100.0
shader_param/wave1 = 1.0
shader_param/wave2 = 0.0
shader_param/wave3 = 0.0
shader_param/wave1_color = Color( 1, 1, 1, 0.764706 )
shader_param/wave2_color = Color( 0.945098, 0.392157, 0.121569, 0.141176 )
shader_param/wave3_color = Color( 0.945098, 0.392157, 0.121569, 1 )
shader_param/wave_frequency = 0.231
shader_param/wave_amplitude = 0.041
shader_param/wave_offset = 0.5
shader_param/traveling = 1.0
shader_param/travel_speed = -0.618
shader_param/oscilating = 1.0
shader_param/oscilation_speed = 0.2
[sub_resource type="ShaderMaterial" id=7]
resource_local_to_scene = true
shader = ExtResource( 3 )
shader_param/bits = 1.0
shader_param/pixel_offset = 0.0
shader_param/total_distance = 100.0
shader_param/wave1 = 1.0
shader_param/wave2 = 0.0
shader_param/wave3 = 0.0
shader_param/wave1_color = Color( 1, 1, 1, 0.764706 )
shader_param/wave2_color = Color( 0.945098, 0.392157, 0.121569, 0.176471 )
shader_param/wave3_color = Color( 0.945098, 0.392157, 0.121569, 1 )
shader_param/wave_frequency = 0.231
shader_param/wave_amplitude = 0.041
shader_param/wave_offset = 0.5
shader_param/traveling = 1.0
shader_param/travel_speed = -0.618
shader_param/oscilating = 1.0
shader_param/oscilation_speed = 0.2
[node name="FlyingLaserCutter" type="Node2D"]
script = ExtResource( 2 )
[node name="FlyingLaserCutterBody" type="KinematicBody2D" parent="."]
position = Vector2( 4, 0 )
collision_layer = 32
collision_mask = 57
collision/safe_margin = 0.001
@ -41,7 +84,7 @@ motion/sync_to_physics = true
texture = ExtResource( 1 )
hframes = 5
vframes = 5
frame = 21
frame = 4
__meta__ = {
"_editor_description_": "YXNlcHJpdGVfd2l6YXJkX2NvbmZpZwpwbGF5ZXJ8PUZseWluZ0xhc2VyQ3V0dGVyQm9keS9TcHJpdGUvQW5pbWF0aW9uUGxheWVyCnNvdXJjZXw9cmVzOi8vYXNzZXRzL2NvbnRyYXB0aW9uL0ZseWluZ0xhc2VyQ3V0dGVyLmFzZXByaXRlCmxheWVyfD0Kb3BfZXhwfD1GYWxzZQpvX2ZvbGRlcnw9Cm9fbmFtZXw9Cm9ubHlfdmlzaWJsZXw9RmFsc2UKb19leF9wfD0K"
}
@ -75,24 +118,42 @@ position = Vector2( -1, 0 )
shape = SubResource( 5 )
[node name="Triggers" type="Node2D" parent="FlyingLaserCutterBody"]
visible = false
position = Vector2( 0, 0.0077219 )
[node name="RayCast2D" type="RayCast2D" parent="FlyingLaserCutterBody/Triggers"]
position = Vector2( 3.92072e-12, 8.99337 )
position = Vector2( 9, 9 )
rotation = -1.5708
scale = Vector2( 1, 1000 )
scale = Vector2( 1, 5000 )
enabled = true
cast_to = Vector2( 0, 1 )
collision_mask = 9
[node name="RayCast2D2" type="RayCast2D" parent="FlyingLaserCutterBody/Triggers"]
position = Vector2( 0, -8.95621 )
position = Vector2( 9, -9 )
rotation = -1.5708
scale = Vector2( 1, 1000 )
scale = Vector2( 1, 5000 )
enabled = true
cast_to = Vector2( 0, 1 )
collision_mask = 9
[node name="TriggerTextures" type="Node2D" parent="FlyingLaserCutterBody"]
z_index = -1
[node name="Texture" type="Sprite" parent="FlyingLaserCutterBody/TriggerTextures"]
material = SubResource( 6 )
position = Vector2( 82, 15 )
scale = Vector2( 1, -1 )
texture = ExtResource( 4 )
offset = Vector2( 2430, 4 )
region_rect = Rect2( 2106.25, 268.196, 8.5918, 0 )
[node name="Texture2" type="Sprite" parent="FlyingLaserCutterBody/TriggerTextures"]
material = SubResource( 7 )
position = Vector2( 82, -6 )
scale = Vector2( 1, -1 )
texture = ExtResource( 4 )
offset = Vector2( 2430, 4 )
region_rect = Rect2( 2106.25, 268.196, 8.5918, 0 )
[connection signal="body_entered" from="FlyingLaserCutterBody/BackArea" to="." method="_on_BackArea_body_entered"]
[connection signal="body_exited" from="FlyingLaserCutterBody/BackArea" to="." method="_on_BackArea_body_exited"]

View File

@ -0,0 +1,59 @@
shader_type canvas_item;
const float PI = 3.14159;
uniform float bits = 1.;
uniform float pixel_offset = 0.5;
uniform float total_distance = 50.;
uniform float wave1 :hint_range(0.0, 1.0, 1.) = 1.;
uniform float wave2 :hint_range(0.0, 1.0, 1.) = 1.;
uniform float wave3 :hint_range(0.0, 1.0, 1.) = 1.;
uniform vec4 wave1_color : hint_color = vec4(0.0,1.0,0.0,1.);
uniform vec4 wave2_color : hint_color = vec4(0.0,1.0,0.0,1.);
uniform vec4 wave3_color : hint_color = vec4(1.,1.,1.,1.);
uniform float wave_frequency: hint_range(0.0, 10.) = 0.2;
uniform float wave_amplitude: hint_range(0., 1.) = 0.3;
uniform float wave_offset: hint_range(-1., 1.) = 0.5;
uniform float traveling : hint_range(0.,1., 1.) = 1.;
uniform float travel_speed : hint_range(-100., 100.) = 0.618;
uniform float oscilating : hint_range(0.,1., 1.) = 1.;
uniform float oscilation_speed : hint_range(-100., 100.) = 0.618;
float plot(vec2 st, float pct) {
return smoothstep(pct - 0.03, pct, st.y) -
smoothstep(pct, pct + 0.03, st.y);
}
void fragment() {
// Adapt the size of pixel regions to the size of the texture
float x_bits = bits / TEXTURE_PIXEL_SIZE.x;
float y_bits = bits / TEXTURE_PIXEL_SIZE.y;
// Segment the UV into pixels
float pixelized_x = floor(UV.x * x_bits)/x_bits + pixel_offset/x_bits;
float pixelized_y = floor(UV.y * y_bits)/y_bits + pixel_offset/y_bits;
vec2 pixel_coord = vec2(pixelized_x, pixelized_y);
float freq = wave_frequency / TEXTURE_PIXEL_SIZE.x;
float travel_summand = (TIME * traveling * travel_speed);
float oscilation_factor = (sin(TIME) * oscilating * oscilation_speed);
float y1 = sin(pixel_coord.x * freq + travel_summand) * (wave_amplitude/2. + wave_amplitude/2. * oscilation_factor) + wave_offset;
float y2 = -1. * sin(pixel_coord.x * freq + travel_summand) * (wave_amplitude/2. + wave_amplitude/2. * oscilation_factor) + wave_offset;
float y3 = 0. + wave_offset;
float point1 = (plot(pixel_coord, y1));
float point2 = (plot(pixel_coord, y2));
float point3 = (plot(pixel_coord, y3));
vec4 c = point1 * wave1 * wave1_color + point2 * wave2 * wave2_color + point3 * wave3 * wave3_color;
vec2 texture_coord = UV.xy / (TEXTURE_PIXEL_SIZE.xy);
float dist = max(sign(total_distance - texture_coord.x), 0.);
COLOR = c * dist;
}

View File

@ -0,0 +1,141 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=2]
[sub_resource type="Shader" id=1]
code = "/*
Shader from Godot Shaders - the free shader library.
godotshaders.com/shader/energy-beams
This shader is under CC0 license. Feel free to use, improve and
change this shader according to your needs and consider sharing
the modified result to godotshaders.com.
*/
shader_type canvas_item;
render_mode blend_add; // Remove this if you want to use HDR glow instead (use \"Glow\" and \"Outline Glow\" sliders)
uniform int beams = 2; // How many beams the energy field should have
uniform float energy = 3.0; // How much the beams will travel up and down
uniform int roughness : hint_range(1, 10) = 3; // How compact the noise texture will be
uniform int frequency = 10; // Amount of \"ripples\" in the beams
uniform float speed = 1.0; // Animation speed
uniform float thickness : hint_range(0.0, 0.1) = 0.006; // Thickness of the main beam
uniform float outline_thickness : hint_range(0.0, 0.1) = 0.03; //Thickness of the outline color
uniform float beam_difference : hint_range(0.0, 1.0) = 0.0; // The thickness difference between the main beam and the other, if there are more than one beam. The closer to 1 the smaller the thickness difference.
uniform float glow : hint_range(0.0, 3.0) = 0.0; // Use together with WorldEnvironment's Glow feature
uniform float outline_glow : hint_range(0.0, 3.0) = 0.0;
uniform vec4 color : hint_color = vec4(0.91, 1.0, 1.0, 1.0);
uniform vec4 outline_color : hint_color = vec4(0.5, 1.0, 0.96, 1.0);
uniform float progress : hint_range(0.0, 1.0) = 1.0;
uniform float dist = 50.;
uniform float y_offset : hint_range (-0.5, 0.5) = 0.0; // Position of the beam
uniform float fixed_edge_size : hint_range(0.0, 0.5) = 0.05; // How close to the edge should the beam be still before the animatino starts
uniform vec2 noise_scale = vec2(1.0); // If the object (for example the ColorRect or Sprite node) is compressed use this to compensate for the noise texture being compressed.
float random(vec2 uv) {
return fract(sin(dot(uv.xy,
vec2(12.9898,78.233))) *
43758.5453123);
}
float noise(vec2 uv) {
vec2 uv_index = floor(uv);
vec2 uv_fract = fract(uv);
// Four corners in 2D of a tile
float a = random(uv_index);
float b = random(uv_index + vec2(1.0, 0.0));
float c = random(uv_index + vec2(0.0, 1.0));
float d = random(uv_index + vec2(1.0, 1.0));
vec2 blur = smoothstep(0.0, 1.0, uv_fract);
return mix(a, b, blur.x) +
(c - a) * blur.y * (1.0 - blur.x) +
(d - b) * blur.x * blur.y;
}
float fbm(vec2 uv, float time) {
int octaves = roughness;
float amp = 0.01 * energy * progress;
float freq = float(frequency);
float value = 0.0;
for(int i = 0; i < octaves; i++) {
value += amp * noise(freq * vec2(uv.x, uv.y + time));
amp *= 0.5;
freq *= 2.0;
}
return value;
}
vec4 difference(vec4 base, vec4 blend){
return abs(base - blend);
}
vec4 bolt(vec2 uv, float time, float i)
{
// Setup the beam locking to the edges.
float falloff = smoothstep(0.0, fixed_edge_size, uv.x) * smoothstep(0.0, fixed_edge_size, 1.0 - uv.x);
// Use Fractal Brownian Motion to create a \"cloud texture\" and use Difference blend mode to make the beam
vec4 clouds = vec4(fbm((uv + vec2(i) ) * noise_scale, time * speed)) * falloff;
vec4 diff_clouds = difference(clouds, vec4(uv.y - 0.5 + y_offset + (uv.y * falloff * 0.02 * energy * progress)));
// Create a new noise to mask the beams on low \"progress\" values. To make a \"turn-off\" effect more visually interesting.
vec4 clouds2 = vec4(fbm((uv * 2.0) * noise_scale, time * 1.)) * 5.0;
diff_clouds += smoothstep(0.0, 0.8, clouds2) * 0.1 * (1.-progress);
// Set thickness of the beams. First beam is the Thickness size and all following beams are sized with beam_difference
float thickness2 = 1. - ( thickness / (min(i + beam_difference, 1.0) + (1.0-beam_difference))) * progress ;
vec4 beam = clamp(smoothstep(thickness2, thickness2 + 0.005 * progress, 1.0 - diff_clouds), vec4(0.0), vec4(1.0));
//Set the beam outlines
vec4 beam_outline;
float outline = thickness2 - (outline_thickness * progress);
beam_outline = clamp(smoothstep(outline, outline + 0.04, 1.0 - diff_clouds), 0.0, 1.0);
beam_outline = clamp(beam_outline - beam, 0.0, 1.0);
// Merge the beam and the outline and return to the fragment function
return (beam * (color + vec4(glow, glow, glow, 0.))) + (beam_outline * (outline_color + vec4(outline_glow, outline_glow, outline_glow, 0.)));
}
void fragment()
{
vec4 beam = vec4(0.0);
for (int i = 0; i < beams; i++){
beam = max(beam, bolt(UV, TIME, float(i)));
}
vec2 coord = UV.xy / (TEXTURE_PIXEL_SIZE.xy);
float over_dist = max(sign(dist - coord.x), 0.);
COLOR = beam * over_dist;
}"
[resource]
shader = SubResource( 1 )
shader_param/beams = 2
shader_param/energy = 10.0
shader_param/roughness = 3
shader_param/frequency = 20
shader_param/speed = 1.0
shader_param/thickness = 0.035
shader_param/outline_thickness = 0.052
shader_param/beam_difference = 0.049
shader_param/glow = 0.0
shader_param/outline_glow = 0.0
shader_param/color = Color( 0.91, 1, 1, 1 )
shader_param/outline_color = Color( 0.5, 1, 0.96, 1 )
shader_param/progress = 0.731
shader_param/dist = 1000.0
shader_param/y_offset = -0.376
shader_param/fixed_edge_size = 0.05
shader_param/noise_scale = Vector2( 1, 1 )

View File

@ -41,7 +41,7 @@ resource_name = "LowPassFilter"
cutoff_hz = 3000.0
[resource]
bus/0/volume_db = -6.0206
bus/0/volume_db = -3.74173
bus/1/name = "Music"
bus/1/solo = false
bus/1/mute = false

View File

@ -3,7 +3,8 @@ extends Control
# Smart ist es die notwendigen Resourcen vor dem Skriptstart zu laden
onready var current_scene := get_tree().get_current_scene()
onready var pause_overlay: ColorRect = $HUDOverlay
onready var timer: Label = $GetBackTimer
onready var hud_timer: MarginContainer = $GetBackTimer
onready var time_label: Label = $GetBackTimer/TimeLabel
onready var currency: Label = $Currency
onready var level_state := get_tree().root.get_child(4).get_node("%LevelState")
onready var signal_manager := get_tree().root.get_child(4).get_node("%SignalManager")
@ -16,11 +17,11 @@ func _ready():
update_interface()
func _process(delta):
if timer.visible:
timer.text = String(round($GetBackTimer/Timer.time_left))
if hud_timer.visible:
time_label.text = String(round($GetBackTimer/Timer.time_left))
func start_timer(time):
timer.visible = true
hud_timer.visible = true
$GetBackTimer/Timer.wait_time = time
$GetBackTimer/Timer.start()
$GetBackTimer/AnimationPlayer.play("Redlight")
@ -29,8 +30,8 @@ func start_timer(time):
func _zoom_timer() -> void:
var tween := create_tween()
tween.parallel().tween_property(timer, "rect_position", Vector2(295, 0), 1.0)
tween.parallel().tween_property(timer, "rect_scale", Vector2(1,1), 1.0)
#tween.parallel().tween_property(hud_timer, "rect_position", Vector2(295, 0), 1.0)
tween.parallel().tween_property(hud_timer, "rect_scale", Vector2(1,1), 1.0)
func update_interface() -> void:

View File

@ -1,8 +1,28 @@
[gd_scene load_steps=5 format=2]
[gd_scene load_steps=10 format=2]
[ext_resource path="res://assets/meta/ui_theme.tres" type="Theme" id=1]
[ext_resource path="res://assets/ui/sci-fi-godot-theme/sci-fi-theme.tres" type="Theme" id=2]
[ext_resource path="res://src/UserInterface/Screens/HUD.gd" type="Script" id=5]
[sub_resource type="Gradient" id=8]
interpolation_mode = 2
offsets = PoolRealArray( 0, 0.8 )
colors = PoolColorArray( 0, 0, 0, 0.635294, 0, 0, 0, 0 )
[sub_resource type="GradientTexture2D" id=7]
gradient = SubResource( 8 )
width = 70
height = 40
fill = 1
fill_from = Vector2( 0.5, 0.5 )
fill_to = Vector2( 0.95, 0.95 )
[sub_resource type="DynamicFontData" id=12]
font_path = "res://assets/ui/fonts/Kenney Thick.ttf"
[sub_resource type="DynamicFont" id=13]
font_data = SubResource( 12 )
[sub_resource type="Animation" id=1]
length = 0.001
tracks/0/type = "value"
@ -53,27 +73,44 @@ size_flags_horizontal = 3
size_flags_vertical = 3
color = Color( 0, 0, 0, 0 )
[node name="GetBackTimer" type="Label" parent="."]
unique_name_in_owner = true
[node name="GetBackTimer" type="MarginContainer" parent="."]
visible = false
anchor_left = 0.5
anchor_right = 0.5
margin_left = -140.0
margin_right = -90.0
margin_bottom = 21.0
margin_left = -70.0
margin_right = 70.0
margin_bottom = 80.0
rect_scale = Vector2( 2, 2 )
theme = ExtResource( 2 )
[node name="TextureRect" type="TextureRect" parent="GetBackTimer"]
margin_right = 140.0
margin_bottom = 80.0
size_flags_horizontal = 3
size_flags_vertical = 3
texture = SubResource( 7 )
expand = true
stretch_mode = 1
[node name="TimeLabel" type="Label" parent="GetBackTimer"]
unique_name_in_owner = true
margin_right = 140.0
margin_bottom = 80.0
grow_horizontal = 2
grow_vertical = 2
rect_scale = Vector2( 5, 5 )
size_flags_horizontal = 0
size_flags_vertical = 0
size_flags_horizontal = 15
size_flags_vertical = 15
custom_fonts/font = SubResource( 13 )
text = "100"
align = 1
valign = 1
[node name="Timer" type="Timer" parent="GetBackTimer"]
wait_time = 100.0
one_shot = true
[node name="AnimationPlayer" type="AnimationPlayer" parent="GetBackTimer"]
root_node = NodePath("../TimeLabel")
anims/RESET = SubResource( 1 )
anims/Redlight = SubResource( 2 )