From ed714e611a9e9cb40a8b4edce5fe05ab288237a5 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Sat, 25 Jul 2026 15:43:34 +0300 Subject: [PATCH] Added hit indicator --- game/entities/player/player.gd | 11 +++++++++++ game/entities/player/player.tscn | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/game/entities/player/player.gd b/game/entities/player/player.gd index 5d18ce9..82afcf0 100644 --- a/game/entities/player/player.gd +++ b/game/entities/player/player.gd @@ -10,6 +10,8 @@ const MAX_HEALTH = 100.0 const CAMERA_OFFSET_FACTOR = 0.4 const CAMERA_OFFSET_TIME = 1.0 +const SHADER_DAMAGE_INDICATOR = "shader_parameter/intensity" + @export_group("Movement", "move") @export_range(0.0, 1000.0) var move_max_speed_normal := 350 @@ -35,6 +37,7 @@ const CAMERA_OFFSET_TIME = 1.0 var _slow_down_tween: Tween var _camera_offset_tween: Tween +var _damage_indicator_tween: Tween var _last_wall_normal: = 0.0 @@ -155,6 +158,14 @@ func _input(event: InputEvent) -> void: func deal_damage(value: float) -> void: + if _damage_indicator_tween and _damage_indicator_tween.is_running(): + _damage_indicator_tween.kill() + _damage_indicator_tween = create_tween() + + _damage_indicator_tween.tween_property(player_sprite.material, SHADER_DAMAGE_INDICATOR, 0, 0.0) + _damage_indicator_tween.tween_property(player_sprite.material, SHADER_DAMAGE_INDICATOR, 1, 0.1) + _damage_indicator_tween.tween_property(player_sprite.material, SHADER_DAMAGE_INDICATOR, 0, 0.1) + _current_health -= value health_changed.emit(_current_health) if _current_health < 0.0 or is_zero_approx(_current_health): diff --git a/game/entities/player/player.tscn b/game/entities/player/player.tscn index 2e678f3..8028417 100644 --- a/game/entities/player/player.tscn +++ b/game/entities/player/player.tscn @@ -2,12 +2,18 @@ [ext_resource type="Script" uid="uid://bm48h30pkhdkv" path="res://game/entities/player/player.gd" id="1_1a4jd"] [ext_resource type="Texture2D" uid="uid://vcrtyu5ifvsp" path="res://images/entities/player.png" id="2_cjfdk"] +[ext_resource type="Shader" uid="uid://bywlejhmgj55q" path="res://game/shaders/hit_indicator.gdshader" id="2_kn1iv"] [ext_resource type="PackedScene" uid="uid://blxgfix54dxq3" path="res://game/state_machine/state_machine.tscn" id="2_x4rrl"] [ext_resource type="PackedScene" uid="uid://btu3hxif2xpvu" path="res://game/entities/player/states/idle_state.tscn" id="3_cjfdk"] [ext_resource type="PackedScene" uid="uid://35g5buv0k1s6" path="res://game/entities/player/states/running_state.tscn" id="5_oic1i"] [ext_resource type="PackedScene" uid="uid://bboaskqiwnbsb" path="res://game/entities/player/states/jump_state.tscn" id="6_v0nmi"] [ext_resource type="PackedScene" uid="uid://ba5sknbijujl2" path="res://game/entities/player/states/wall_state.tscn" id="7_dhej3"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_fa7iy"] +shader = ExtResource("2_kn1iv") +shader_parameter/damage_color = Color(0.8235294, 0.8235294, 0.83137256, 1) +shader_parameter/intensity = 0.0 + [sub_resource type="AtlasTexture" id="AtlasTexture_cjfdk"] atlas = ExtResource("2_cjfdk") region = Rect2(0, 32, 32, 32) @@ -549,6 +555,7 @@ collision_layer = 2 script = ExtResource("1_1a4jd") [node name="PlayerSprite" type="AnimatedSprite2D" parent="." unique_id=2025942250] +material = SubResource("ShaderMaterial_fa7iy") sprite_frames = SubResource("SpriteFrames_bhunq") animation = &"idle"