From 5c33aacf7f08eaf956075462bf70adaac3c5ceb8 Mon Sep 17 00:00:00 2001 From: Rendo Date: Thu, 24 Jul 2025 00:51:13 +0500 Subject: [PATCH] death now cancels effects --- scenes/entities/Zombies/zombie.tscn | 51 +++++++++---------- scenes/entities/plants/cucumber.tscn | 15 +++++- scripts/entities/Entity.cs | 25 ++++++++- scripts/entities/zombies/RuntimeZombieData.cs | 7 ++- scripts/level/LevelRunner.cs | 2 +- 5 files changed, 66 insertions(+), 34 deletions(-) diff --git a/scenes/entities/Zombies/zombie.tscn b/scenes/entities/Zombies/zombie.tscn index 1c27296..fe89651 100644 --- a/scenes/entities/Zombies/zombie.tscn +++ b/scenes/entities/Zombies/zombie.tscn @@ -814,7 +814,7 @@ metadata/_edit_lock_ = true [node name="RightUpperLeg" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt"] use_parent_material = true position = Vector2(-6, 3) -scale = Vector2(0.999834, 0.999834) +scale = Vector2(0.999836, 0.999836) rest = Transform2D(1, 0, 0, 1, -6, 3) editor_settings/show_bone_gizmo = false @@ -826,13 +826,13 @@ metadata/_edit_lock_ = true [node name="RightLowerLeg" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/RightUpperLeg"] position = Vector2(-2, 12) -scale = Vector2(0.999834, 0.999834) +scale = Vector2(0.999837, 0.999837) rest = Transform2D(1, 0, 0, 1, -2, 12) editor_settings/show_bone_gizmo = false [node name="RightFoot" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/RightUpperLeg/RightLowerLeg"] position = Vector2(-2, 14) -scale = Vector2(0.99983, 0.99983) +scale = Vector2(0.999832, 0.999832) rest = Transform2D(1, 0, 0, 1, -2, 14) auto_calculate_length_and_angle = false length = 12.0 @@ -855,7 +855,7 @@ metadata/_edit_lock_ = true [node name="LeftUpperLeg" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt"] use_parent_material = true position = Vector2(6, 4) -scale = Vector2(0.999834, 0.999834) +scale = Vector2(0.99983, 0.99983) rest = Transform2D(1, 0, 0, 1, 6, 4) editor_settings/show_bone_gizmo = false @@ -867,7 +867,7 @@ metadata/_edit_lock_ = true [node name="LeftLowerLeg" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/LeftUpperLeg"] position = Vector2(-1, 13) -scale = Vector2(0.999829, 0.999829) +scale = Vector2(0.999835, 0.999835) rest = Transform2D(1, 0, 0, 1, -1, 13) editor_settings/show_bone_gizmo = false @@ -879,7 +879,7 @@ metadata/_edit_lock_ = true [node name="LeftFoot" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/LeftUpperLeg/LeftLowerLeg"] position = Vector2(6, 10) -scale = Vector2(0.999831, 0.999831) +scale = Vector2(0.999833, 0.999833) rest = Transform2D(1, 0, 0, 1, 6, 10) auto_calculate_length_and_angle = false length = 12.0 @@ -895,7 +895,7 @@ metadata/_edit_lock_ = true [node name="Body" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt"] use_parent_material = true position = Vector2(1, -2) -scale = Vector2(0.999829, 0.999829) +scale = Vector2(0.99983, 0.99983) rest = Transform2D(1, 0, 0, 1, 1, -2) editor_settings/show_bone_gizmo = false @@ -903,7 +903,7 @@ editor_settings/show_bone_gizmo = false z_index = -1 use_parent_material = true position = Vector2(-14, -23) -scale = Vector2(0.999826, 0.999826) +scale = Vector2(0.999827, 0.999827) rest = Transform2D(1, 0, 0, 1, -14, -23) editor_settings/show_bone_gizmo = false @@ -915,13 +915,13 @@ metadata/_edit_lock_ = true [node name="RightLowerArm" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/RightUpperArm"] position = Vector2(-2, 15) -scale = Vector2(0.999827, 0.999827) +scale = Vector2(0.999826, 0.999826) rest = Transform2D(1, 0, 0, 1, -2, 15) editor_settings/show_bone_gizmo = false [node name="RightHand" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/RightUpperArm/RightLowerArm"] position = Vector2(-1, 13) -scale = Vector2(0.999827, 0.999827) +scale = Vector2(0.999829, 0.999829) rest = Transform2D(1, 0, 0, 1, -1, 13) auto_calculate_length_and_angle = false length = 8.0 @@ -949,8 +949,8 @@ metadata/_edit_lock_ = true [node name="Tie" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body"] position = Vector2(-9, -21) -rotation = 0.0501575 -skew = -0.000461817 +rotation = 0.0566317 +skew = -0.0004673 rest = Transform2D(1, 0, 0, 1, -9, -21) auto_calculate_length_and_angle = false length = 24.0 @@ -965,7 +965,7 @@ metadata/_edit_lock_ = true [node name="Head" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body"] position = Vector2(-10, -25) -scale = Vector2(0.999833, 0.999833) +scale = Vector2(0.999832, 0.999832) rest = Transform2D(1, 0, 0, 1, -10, -25) editor_settings/show_bone_gizmo = false @@ -995,7 +995,7 @@ offset = Vector2(-2, -2) metadata/_edit_lock_ = true [node name="Left_Eye" type="Sprite2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/Head/HeadParticle/Head"] -position = Vector2(-4, -9.00001) +position = Vector2(-4, -9) scale = Vector2(1, 1) texture = SubResource("AtlasTexture_kto0i") centered = false @@ -1003,9 +1003,9 @@ offset = Vector2(-2, -2) metadata/_edit_lock_ = true [node name="Jaw" type="Sprite2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/Head/HeadParticle/Head"] -position = Vector2(-2.80962, 2.53685) -rotation = 0.0232306 -scale = Vector2(0.999825, 0.999825) +position = Vector2(-3.0007, 2.99882) +rotation = 0.00549593 +scale = Vector2(0.999828, 0.999828) texture = SubResource("AtlasTexture_x5uj2") centered = false offset = Vector2(-12, -2) @@ -1022,7 +1022,7 @@ _observedEntity = NodePath("../../../../../../../..") [node name="Jaw" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/Head"] position = Vector2(-3, 3) -scale = Vector2(0.999825, 0.999825) +scale = Vector2(0.999828, 0.999828) rest = Transform2D(1, 0, 0, 1, -3, 3) auto_calculate_length_and_angle = false length = 11.0 @@ -1056,7 +1056,7 @@ remote_path = NodePath("../../HeadParticle/Head/Left_Eye") [node name="LeftUpperArm" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body"] position = Vector2(-1, -20) -scale = Vector2(0.999828, 0.999828) +scale = Vector2(0.999826, 0.999826) rest = Transform2D(1, 0, 0, 1, -1, -20) editor_settings/show_bone_gizmo = false @@ -1078,8 +1078,8 @@ minTorque = -45.0 maxTorque = 45.0 [node name="Left_Lower_Arm" type="Sprite2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/LeftUpperArm/HandProjectile"] -rotation = 0.129655 -scale = Vector2(0.999996, 0.999996) +rotation = 0.0532462 +scale = Vector2(0.999998, 0.999998) texture = SubResource("AtlasTexture_auqeq") centered = false offset = Vector2(-5, 0) @@ -1088,8 +1088,8 @@ metadata/_edit_lock_ = true [node name="Left_Hand" type="Sprite2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/LeftUpperArm/HandProjectile/Left_Lower_Arm"] show_behind_parent = true position = Vector2(-0.99983, 12.9978) -rotation = -0.0993302 -scale = Vector2(0.999658, 0.999658) +rotation = -0.0234996 +scale = Vector2(0.99966, 0.99966) texture = SubResource("AtlasTexture_vlvtp") centered = false offset = Vector2(-4, -1) @@ -1105,13 +1105,13 @@ _observedEntity = NodePath("../../../../../../../..") [node name="LeftLowerArm" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/LeftUpperArm"] position = Vector2(-2, 14) -scale = Vector2(0.999827, 0.999827) +scale = Vector2(0.999828, 0.999828) rest = Transform2D(1, 0, 0, 1, -2, 14) editor_settings/show_bone_gizmo = false [node name="LeftHand" type="Bone2D" parent="CanvasGroup/basic_zombie_walk/Zombie/Butt/Body/LeftUpperArm/LeftLowerArm"] position = Vector2(-1, 13) -scale = Vector2(0.999828, 0.999828) +scale = Vector2(0.99983, 0.99983) rest = Transform2D(1, 0, 0, 1, -1, 13) auto_calculate_length_and_angle = false length = 6.0 @@ -1161,7 +1161,6 @@ entity = NodePath("..") [node name="Mover" type="Node" parent="."] script = ExtResource("4_u5syx") _speed = SubResource("Resource_ckb7n") -_speedControlMult = 2.33406 [node name="HitPlayer" type="Node" parent="."] script = ExtResource("12_he8da") diff --git a/scenes/entities/plants/cucumber.tscn b/scenes/entities/plants/cucumber.tscn index a49fa8b..0544f4c 100644 --- a/scenes/entities/plants/cucumber.tscn +++ b/scenes/entities/plants/cucumber.tscn @@ -1,13 +1,22 @@ -[gd_scene load_steps=23 format=3 uid="uid://cjoyh54cpjla7"] +[gd_scene load_steps=25 format=3 uid="uid://cjoyh54cpjla7"] [ext_resource type="PackedScene" uid="uid://b1hjjbdwf1rtc" path="res://scenes/templates/plant_template.tscn" id="1_65f4u"] [ext_resource type="Texture2D" uid="uid://bt76iudw2qgnv" path="res://assets/sprites/atlases/plants/cumbucer.png" id="2_ig0op"] +[ext_resource type="Shader" uid="uid://cgc7spjkhsx7c" path="res://assets/shaders/generic_flash.gdshader" id="2_jbggv"] [ext_resource type="Script" uid="uid://dn53jvpjyg63l" path="res://scripts/entities/plants/Eyesight.cs" id="3_d45iq"] [ext_resource type="Script" uid="uid://ceprqkraw3v6m" path="res://scripts/entities/plants/Shooter.cs" id="4_sckvu"] [ext_resource type="PackedScene" uid="uid://c1ig40gtdcb60" path="res://scenes/projectiles/cucumber_projectile.tscn" id="5_sckvu"] [ext_resource type="Script" uid="uid://c4jy0cnbnx33h" path="res://scripts/TimeScalableTimer.cs" id="6_xwpd6"] [ext_resource type="Script" uid="uid://bdk5iqtw4xbkl" path="res://scripts/entities/plants/behaviours/PeashooterBehaviour.cs" id="7_q31qc"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_jbggv"] +resource_local_to_scene = true +shader = ExtResource("2_jbggv") +shader_parameter/FLASH_COLOR = Color(0.78, 0.78, 0.78, 0.501961) +shader_parameter/HIGHLIGHT_COLOR = Color(0.69, 0, 0, 0.282353) +shader_parameter/selected = false +shader_parameter/blend = 0.0 + [sub_resource type="Animation" id="Animation_n1xkd"] length = 0.001 tracks/0/type = "value" @@ -128,6 +137,7 @@ internal_id = "cucumber" MaxHP = 30.0 [node name="Sprite2D" parent="." index="0"] +material = SubResource("ShaderMaterial_jbggv") texture = ExtResource("2_ig0op") hframes = 10 vframes = 2 @@ -170,3 +180,6 @@ entity = NodePath("../..") script = ExtResource("7_q31qc") _shootTimer = NodePath("../Shooter/Timer") _sight = NodePath("../Eysight") + +[node name="FlashController" parent="." index="7"] +shaderMaterial = SubResource("ShaderMaterial_jbggv") diff --git a/scripts/entities/Entity.cs b/scripts/entities/Entity.cs index ad73497..03c32a3 100644 --- a/scripts/entities/Entity.cs +++ b/scripts/entities/Entity.cs @@ -13,12 +13,14 @@ public partial class Entity : Node2D [Export]public float HP; [Signal] public delegate void OnHPChangedEventHandler(EntitySignalContext context); [Signal] public delegate void OnDamagedEventHandler(); + [Signal] public delegate void HasBeenKilledEventHandler(Entity who); + public virtual void TakeDamage(float amount, Node origin) { - if(amount > 0) + if (amount > 0) EmitSignal(SignalName.OnDamaged); - + var context = new EntitySignalContext() { target = this, @@ -62,8 +64,13 @@ public partial class Entity : Node2D } } + public bool Killed = false; public virtual void KillByDamage() { + if (Killed) return; + Killed = true; + EmitSignal(SignalName.HasBeenKilled,this); + ClearEffects(); Kill(); } @@ -116,6 +123,7 @@ public partial class Entity : Node2D public virtual void GiveEffect(Effect what) { + if (Killed) return; if (_effectImmunities.Contains(what) || completeInvulnerability) { return; @@ -166,8 +174,21 @@ public partial class Entity : Node2D EndEffectAtSlot(what.Slot); } + protected void ClearEffects() + { + foreach (var slot in _activeEffectSlots.Keys) + { + if (_activeEffectSlots[slot] != null) + { + _activeEffectSlots[slot].Exit(this); + _activeEffectSlots[slot] = null; + } + } + } + public void ProcessEffects() { + if (Killed) return; foreach (string key in _activeEffectSlots.Keys) _activeEffectSlots[key]?.Process(this); } diff --git a/scripts/entities/zombies/RuntimeZombieData.cs b/scripts/entities/zombies/RuntimeZombieData.cs index 915ceaf..63ae199 100644 --- a/scripts/entities/zombies/RuntimeZombieData.cs +++ b/scripts/entities/zombies/RuntimeZombieData.cs @@ -6,7 +6,6 @@ public partial class RuntimeZombieData : Entity { [Export] private Armor _armor; - [Signal] public delegate void HasBeenKilledEventHandler(RuntimeZombieData who); [Signal] public delegate void HPChangedMixedEventHandler(EntitySignalContext context); public bool AbleToEat = true; @@ -102,12 +101,12 @@ public partial class RuntimeZombieData : Entity return HP; } #region Death sequence - private bool _killed = false; public override void KillByDamage() { - if (_killed) return; - _killed = true; + if (Killed) return; + Killed = true; AbleToEat = false; + ClearEffects(); EmitSignal(SignalName.HasBeenKilled,this); } diff --git a/scripts/level/LevelRunner.cs b/scripts/level/LevelRunner.cs index b23c5fc..77fa28d 100644 --- a/scripts/level/LevelRunner.cs +++ b/scripts/level/LevelRunner.cs @@ -140,7 +140,7 @@ public partial class LevelRunner : Node zombie.HasBeenKilled += OnLastZombieKilled; } } - private void OnLastZombieKilled(RuntimeZombieData who) + private void OnLastZombieKilled(Entity who) { aliveZombies -= 1; if (aliveZombies > 0) return;