diff --git a/scenes/autoload/game_events.gd b/scenes/autoload/game_events.gd index 2dac36b..7060810 100644 --- a/scenes/autoload/game_events.gd +++ b/scenes/autoload/game_events.gd @@ -2,6 +2,7 @@ extends Node signal experience_vial_collected(number: float) signal ability_upgrade_added(upgrade: AbilityUpgrade, current_upgrades: Dictionary) +signal player_damaged func emit_experience_vial_collected(number: float): @@ -10,3 +11,7 @@ func emit_experience_vial_collected(number: float): func emit_ability_upgrade_added(upgrade: AbilityUpgrade, current_upgrades: Dictionary): ability_upgrade_added.emit(upgrade, current_upgrades) + + +func emit_player_damaged(): + player_damaged.emit() diff --git a/scenes/game_object/player/player.gd b/scenes/game_object/player/player.gd index 2015401..7a57e71 100644 --- a/scenes/game_object/player/player.gd +++ b/scenes/game_object/player/player.gd @@ -80,6 +80,7 @@ func on_damage_interval_timer_timeout(): func on_health_changed(): + GameEvents.emit_player_damaged() update_health_display() diff --git a/scenes/main/main.tscn b/scenes/main/main.tscn index 8ab1785..eb2cfe9 100644 --- a/scenes/main/main.tscn +++ b/scenes/main/main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=3 uid="uid://mapie6ivpd7j"] +[gd_scene load_steps=13 format=3 uid="uid://mapie6ivpd7j"] [ext_resource type="PackedScene" uid="uid://5jwlcn6cm23o" path="res://scenes/game_object/game_camera/game_camera.tscn" id="1_4i4ay"] [ext_resource type="PackedScene" uid="uid://bpgwbwa1p3m6i" path="res://scenes/game_object/player/player.tscn" id="1_55gsj"] @@ -11,11 +11,14 @@ [ext_resource type="PackedScene" uid="uid://vqjgdqb3t2ju" path="res://scenes/ui/end_screen.tscn" id="2_8tx6c"] [ext_resource type="PackedScene" uid="uid://c5kgkd7ly41sq" path="res://scenes/manager/experience_manager.tscn" id="4_ak51j"] [ext_resource type="PackedScene" uid="uid://c5b76ailnfref" path="res://scenes/manager/upgrade_manager.tscn" id="6_08ukk"] +[ext_resource type="PackedScene" uid="uid://gisddfn8bqx" path="res://scenes/ui/vignette.tscn" id="12_jgtmh"] [node name="Main" type="Node"] script = ExtResource("1_v8wic") end_screen_scene = ExtResource("2_8tx6c") +[node name="Vignette" parent="." instance=ExtResource("12_jgtmh")] + [node name="ArenaTimeUI" parent="." node_paths=PackedStringArray("arena_time_manager") instance=ExtResource("1_sfy4a")] arena_time_manager = NodePath("../ArenaTimeManager") diff --git a/scenes/ui/vignette.gd b/scenes/ui/vignette.gd new file mode 100644 index 0000000..910fdb5 --- /dev/null +++ b/scenes/ui/vignette.gd @@ -0,0 +1,9 @@ +extends CanvasLayer + + +func _ready(): + GameEvents.player_damaged.connect(on_player_damaged) + + +func on_player_damaged(): + $AnimationPlayer.play("hit") diff --git a/scenes/ui/vignette.gdshader b/scenes/ui/vignette.gdshader new file mode 100644 index 0000000..ae1c975 --- /dev/null +++ b/scenes/ui/vignette.gdshader @@ -0,0 +1,20 @@ +shader_type canvas_item; + +uniform float vignette_intensity = 0.4; +uniform float vignette_opacity: hint_range(0.0, 1.0) = 0.5; +uniform vec4 vignette_rgb: source_color = vec4(0.0, 0.0, 0.0, 1.0); + +float vignette(vec2 uv){ + uv *= 1.0 - uv.xy; + float vignette = uv.x * uv.y * 15.0; + return pow(vignette, vignette_intensity * vignette_opacity); +} + +void fragment(){ + vec4 text = texture(TEXTURE, UV); + + text.rgba *= (vignette_rgb.rgba); + text.rgba *= (1.0 - vignette(UV)); + + COLOR = vec4(text.rgb, text.a); +} \ No newline at end of file diff --git a/scenes/ui/vignette.tscn b/scenes/ui/vignette.tscn new file mode 100644 index 0000000..c55730f --- /dev/null +++ b/scenes/ui/vignette.tscn @@ -0,0 +1,90 @@ +[gd_scene load_steps=7 format=3 uid="uid://gisddfn8bqx"] + +[ext_resource type="Script" path="res://scenes/ui/vignette.gd" id="1_abhjy"] +[ext_resource type="Shader" path="res://scenes/ui/vignette.gdshader" id="1_yjtis"] + +[sub_resource type="Animation" id="Animation_681uw"] +resource_name = "hit" +length = 0.4 +step = 0.05 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("ColorRect:material:shader_parameter/vignette_intensity") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.05, 0.4), +"transitions": PackedFloat32Array(1, 2.29739, 1), +"update": 0, +"values": [0.59, 2.85, 0.59] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("ColorRect:material:shader_parameter/vignette_rgb") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.05, 0.4), +"transitions": PackedFloat32Array(1, 2.2974, 1), +"update": 0, +"values": [Color(0.247059, 0.14902, 0.192157, 1), Color(0.909804, 0.270588, 0.215686, 1), Color(0.247059, 0.14902, 0.192157, 1)] +} + +[sub_resource type="Animation" id="Animation_d22ku"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("ColorRect:material:shader_parameter/vignette_intensity") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.59] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("ColorRect:material:shader_parameter/vignette_rgb") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0.247059, 0.14902, 0.192157, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_vnynl"] +_data = { +"RESET": SubResource("Animation_d22ku"), +"hit": SubResource("Animation_681uw") +} + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_38j4d"] +shader = ExtResource("1_yjtis") +shader_parameter/vignette_intensity = 0.59 +shader_parameter/vignette_opacity = 0.115 +shader_parameter/vignette_rgb = Color(0.247059, 0.14902, 0.192157, 1) + +[node name="Vignette" type="CanvasLayer"] +script = ExtResource("1_abhjy") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_vnynl") +} + +[node name="ColorRect" type="ColorRect" parent="."] +material = SubResource("ShaderMaterial_38j4d") +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +scale = Vector2(1.00191, 1) +mouse_filter = 2