mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-22 19:43:55 +00:00
Death animations and spawner
This commit is contained in:
parent
4fd31d7988
commit
16b7d936c9
13 changed files with 286 additions and 11 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=16 format=3 uid="uid://bc054js8ep2b"]
|
[gd_scene load_steps=18 format=3 uid="uid://bc054js8ep2b"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://Scripts/Components/Actors/Actor.cs" id="1_ugrra"]
|
[ext_resource type="Script" path="res://Scripts/Components/Actors/Actor.cs" id="1_ugrra"]
|
||||||
[ext_resource type="SpriteFrames" uid="uid://ch2ll1on8im2p" path="res://Resources/Sprites/FairyGuard.tres" id="2_i2plx"]
|
[ext_resource type="SpriteFrames" uid="uid://ch2ll1on8im2p" path="res://Resources/Sprites/FairyGuard.tres" id="2_i2plx"]
|
||||||
|
|
@ -12,6 +12,8 @@
|
||||||
[ext_resource type="PackedScene" uid="uid://cj63k0dmk7tl1" path="res://Scenes/Weapons/enemy_weapon_base.tscn" id="10_yktta"]
|
[ext_resource type="PackedScene" uid="uid://cj63k0dmk7tl1" path="res://Scenes/Weapons/enemy_weapon_base.tscn" id="10_yktta"]
|
||||||
[ext_resource type="Resource" uid="uid://cdfmedtgp2rcn" path="res://Resources/Weapons/EnemyWeapon.tres" id="11_kuimj"]
|
[ext_resource type="Resource" uid="uid://cdfmedtgp2rcn" path="res://Resources/Weapons/EnemyWeapon.tres" id="11_kuimj"]
|
||||||
[ext_resource type="Script" path="res://Scripts/Components/Actors/DamageReceiverActorModule.cs" id="12_fu5g7"]
|
[ext_resource type="Script" path="res://Scripts/Components/Actors/DamageReceiverActorModule.cs" id="12_fu5g7"]
|
||||||
|
[ext_resource type="Script" path="res://Scripts/Components/Actors/DeathAnimationHandler.cs" id="13_e2vvk"]
|
||||||
|
[ext_resource type="Resource" uid="uid://dk2rbf88a5irh" path="res://Resources/Bullets/Explosion_Harmless.tres" id="14_881we"]
|
||||||
|
|
||||||
[sub_resource type="CircleShape2D" id="CircleShape2D_2b36v"]
|
[sub_resource type="CircleShape2D" id="CircleShape2D_2b36v"]
|
||||||
radius = 5.0
|
radius = 5.0
|
||||||
|
|
@ -75,7 +77,7 @@ debug_path_custom_color = Color(1, 0, 0, 1)
|
||||||
[node name="HealthProvider" type="Node2D" parent="."]
|
[node name="HealthProvider" type="Node2D" parent="."]
|
||||||
script = ExtResource("9_fyr27")
|
script = ExtResource("9_fyr27")
|
||||||
ResourceName = "Health"
|
ResourceName = "Health"
|
||||||
MaxResource = 4.0
|
MaxResource = 6.0
|
||||||
|
|
||||||
[node name="EnemyWeapon" parent="." instance=ExtResource("10_yktta")]
|
[node name="EnemyWeapon" parent="." instance=ExtResource("10_yktta")]
|
||||||
WeaponData = ExtResource("11_kuimj")
|
WeaponData = ExtResource("11_kuimj")
|
||||||
|
|
@ -92,6 +94,10 @@ collision_mask = 8
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="DamageReceiver/Area2D"]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="DamageReceiver/Area2D"]
|
||||||
shape = SubResource("CircleShape2D_0tkae")
|
shape = SubResource("CircleShape2D_0tkae")
|
||||||
|
|
||||||
|
[node name="DeathAnimation" type="Node2D" parent="."]
|
||||||
|
script = ExtResource("13_e2vvk")
|
||||||
|
ExplosionData = ExtResource("14_881we")
|
||||||
|
|
||||||
[connection signal="area_entered" from="PlayerDetection" to="PlayerDetection" method="_on_area_entered"]
|
[connection signal="area_entered" from="PlayerDetection" to="PlayerDetection" method="_on_area_entered"]
|
||||||
[connection signal="area_exited" from="PlayerDetection" to="PlayerDetection" method="_on_area_exited"]
|
[connection signal="area_exited" from="PlayerDetection" to="PlayerDetection" method="_on_area_exited"]
|
||||||
[connection signal="velocity_computed" from="NavigationAgent2D" to="NavigationMovementProvider" method="_on_navigation_agent_2d_velocity_computed"]
|
[connection signal="velocity_computed" from="NavigationAgent2D" to="NavigationMovementProvider" method="_on_navigation_agent_2d_velocity_computed"]
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=39 format=3 uid="uid://bqjcwxene73l2"]
|
[gd_scene load_steps=43 format=3 uid="uid://bqjcwxene73l2"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://Scripts/Components/Actors/Actor.cs" id="1_k5cyk"]
|
[ext_resource type="Script" path="res://Scripts/Components/Actors/Actor.cs" id="1_k5cyk"]
|
||||||
[ext_resource type="Texture2D" uid="uid://hukxr2e63gky" path="res://Sprites/Actors/Robot3.png" id="2_wt8wl"]
|
[ext_resource type="Texture2D" uid="uid://hukxr2e63gky" path="res://Sprites/Actors/Robot3.png" id="2_wt8wl"]
|
||||||
|
|
@ -11,6 +11,9 @@
|
||||||
[ext_resource type="Script" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="9_2ocwk"]
|
[ext_resource type="Script" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="9_2ocwk"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cj63k0dmk7tl1" path="res://Scenes/Weapons/enemy_weapon_base.tscn" id="10_ehu1c"]
|
[ext_resource type="PackedScene" uid="uid://cj63k0dmk7tl1" path="res://Scenes/Weapons/enemy_weapon_base.tscn" id="10_ehu1c"]
|
||||||
[ext_resource type="Resource" uid="uid://cdfmedtgp2rcn" path="res://Resources/Weapons/EnemyWeapon.tres" id="11_fvpvx"]
|
[ext_resource type="Resource" uid="uid://cdfmedtgp2rcn" path="res://Resources/Weapons/EnemyWeapon.tres" id="11_fvpvx"]
|
||||||
|
[ext_resource type="Script" path="res://Scripts/Components/Actors/DamageReceiverActorModule.cs" id="12_ox1qk"]
|
||||||
|
[ext_resource type="Script" path="res://Scripts/Components/Actors/DeathAnimationHandler.cs" id="13_cg7c4"]
|
||||||
|
[ext_resource type="Resource" uid="uid://dk2rbf88a5irh" path="res://Resources/Bullets/Explosion_Harmless.tres" id="14_cojbg"]
|
||||||
|
|
||||||
[sub_resource type="AtlasTexture" id="AtlasTexture_spe0p"]
|
[sub_resource type="AtlasTexture" id="AtlasTexture_spe0p"]
|
||||||
atlas = ExtResource("2_wt8wl")
|
atlas = ExtResource("2_wt8wl")
|
||||||
|
|
@ -229,6 +232,9 @@ radius = 5.0
|
||||||
[sub_resource type="CircleShape2D" id="CircleShape2D_sthwe"]
|
[sub_resource type="CircleShape2D" id="CircleShape2D_sthwe"]
|
||||||
radius = 85.0529
|
radius = 85.0529
|
||||||
|
|
||||||
|
[sub_resource type="CircleShape2D" id="CircleShape2D_xyma2"]
|
||||||
|
radius = 5.09902
|
||||||
|
|
||||||
[node name="ActorEnemyTest" type="CharacterBody2D"]
|
[node name="ActorEnemyTest" type="CharacterBody2D"]
|
||||||
collision_layer = 16
|
collision_layer = 16
|
||||||
collision_mask = 113
|
collision_mask = 113
|
||||||
|
|
@ -278,7 +284,6 @@ target_desired_distance = 64.0
|
||||||
path_max_distance = 800.0
|
path_max_distance = 800.0
|
||||||
path_postprocessing = 1
|
path_postprocessing = 1
|
||||||
avoidance_enabled = true
|
avoidance_enabled = true
|
||||||
debug_enabled = true
|
|
||||||
debug_path_custom_color = Color(1, 0, 0, 1)
|
debug_path_custom_color = Color(1, 0, 0, 1)
|
||||||
|
|
||||||
[node name="HealthProvider" type="Node2D" parent="."]
|
[node name="HealthProvider" type="Node2D" parent="."]
|
||||||
|
|
@ -288,6 +293,23 @@ ResourceName = "Health"
|
||||||
[node name="EnemyWeapon" parent="." instance=ExtResource("10_ehu1c")]
|
[node name="EnemyWeapon" parent="." instance=ExtResource("10_ehu1c")]
|
||||||
WeaponData = ExtResource("11_fvpvx")
|
WeaponData = ExtResource("11_fvpvx")
|
||||||
|
|
||||||
|
[node name="DamageReceiver" type="Node2D" parent="." node_paths=PackedStringArray("HealthProvider")]
|
||||||
|
script = ExtResource("12_ox1qk")
|
||||||
|
HealthProvider = NodePath("../HealthProvider")
|
||||||
|
BulletGroup = 2
|
||||||
|
|
||||||
|
[node name="Area2D" type="Area2D" parent="DamageReceiver"]
|
||||||
|
collision_layer = 16
|
||||||
|
collision_mask = 8
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="DamageReceiver/Area2D"]
|
||||||
|
shape = SubResource("CircleShape2D_xyma2")
|
||||||
|
|
||||||
|
[node name="DeathAnimation" type="Node2D" parent="."]
|
||||||
|
script = ExtResource("13_cg7c4")
|
||||||
|
ExplosionData = ExtResource("14_cojbg")
|
||||||
|
|
||||||
[connection signal="area_entered" from="PlayerDetection" to="PlayerDetection" method="_on_area_entered"]
|
[connection signal="area_entered" from="PlayerDetection" to="PlayerDetection" method="_on_area_entered"]
|
||||||
[connection signal="area_exited" from="PlayerDetection" to="PlayerDetection" method="_on_area_exited"]
|
[connection signal="area_exited" from="PlayerDetection" to="PlayerDetection" method="_on_area_exited"]
|
||||||
[connection signal="velocity_computed" from="NavigationAgent2D" to="NavigationMovementProvider" method="_on_navigation_agent_2d_velocity_computed"]
|
[connection signal="velocity_computed" from="NavigationAgent2D" to="NavigationMovementProvider" method="_on_navigation_agent_2d_velocity_computed"]
|
||||||
|
[connection signal="area_entered" from="DamageReceiver/Area2D" to="DamageReceiver" method="_on_damage_hitbox_area_entered"]
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,7 @@ public partial class Barrel : Area2D, IDestructible
|
||||||
|
|
||||||
private void CreateDebris()
|
private void CreateDebris()
|
||||||
{
|
{
|
||||||
|
if (DebrisScene == null) return;
|
||||||
this.CreateSibling<Barrel>(DebrisScene);
|
this.CreateSibling<Barrel>(DebrisScene);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=15 format=4 uid="uid://5klhna6pdpss"]
|
[gd_scene load_steps=24 format=4 uid="uid://5klhna6pdpss"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://Scripts/GameManager.cs" id="1_uhxhn"]
|
[ext_resource type="Script" path="res://Scripts/GameManager.cs" id="1_uhxhn"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_afebu"]
|
[ext_resource type="PackedScene" uid="uid://bghghp5ep4w2j" path="res://Scenes/player.tscn" id="2_afebu"]
|
||||||
|
|
@ -13,12 +13,24 @@
|
||||||
[ext_resource type="Script" path="res://Scenes/CameraTarget.gd" id="10_86lpq"]
|
[ext_resource type="Script" path="res://Scenes/CameraTarget.gd" id="10_86lpq"]
|
||||||
[ext_resource type="Script" path="res://Scripts/AlarmManager.cs" id="11_njjjf"]
|
[ext_resource type="Script" path="res://Scripts/AlarmManager.cs" id="11_njjjf"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bqjcwxene73l2" path="res://Scenes/Actors/ActorEnemyTest.tscn" id="12_8mkvw"]
|
[ext_resource type="PackedScene" uid="uid://bqjcwxene73l2" path="res://Scenes/Actors/ActorEnemyTest.tscn" id="12_8mkvw"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://d1h48wgasakk4" path="res://Scenes/Interactable/alarm_box.tscn" id="14_pr50u"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dnbtou2fklyvp" path="res://Scenes/Actors/alarm_sign.tscn" id="15_a8c3x"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://byms2dhliyux0" path="res://Scenes/Actors/teleporter.tscn" id="16_5qis2"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://crph24e6e0v0q" path="res://Scenes/Interactable/Control_Pad.tscn" id="16_ijcqi"]
|
||||||
|
[ext_resource type="Script" path="res://Scripts/Actors/AlarmTeleporterActorSpawner.cs" id="17_7pavy"]
|
||||||
|
[ext_resource type="Script" path="res://Scripts/Activables/ScriptableBase.cs" id="17_wpn2u"]
|
||||||
|
[ext_resource type="Script" path="res://Scripts/Resources/Events/AlarmEnableEvent.cs" id="18_q3u5g"]
|
||||||
|
[ext_resource type="LabelSettings" uid="uid://buk3e7bbwmnv1" path="res://Resources/Styles/Hud_Text_Style.tres" id="19_1ywt4"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_6wo78"]
|
[sub_resource type="Resource" id="Resource_6wo78"]
|
||||||
script = ExtResource("4_7nc7l")
|
script = ExtResource("4_7nc7l")
|
||||||
EggIndex = 0
|
EggIndex = 0
|
||||||
StartingEquipment = []
|
StartingEquipment = []
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_0a8l3"]
|
||||||
|
script = ExtResource("18_q3u5g")
|
||||||
|
WaitForCompletion = true
|
||||||
|
|
||||||
[node name="GameScene" type="Node2D"]
|
[node name="GameScene" type="Node2D"]
|
||||||
script = ExtResource("1_uhxhn")
|
script = ExtResource("1_uhxhn")
|
||||||
PlayerTemplate = ExtResource("2_afebu")
|
PlayerTemplate = ExtResource("2_afebu")
|
||||||
|
|
@ -80,3 +92,66 @@ position = Vector2(111, 305)
|
||||||
|
|
||||||
[node name="AlarmManager" type="Node2D" parent="."]
|
[node name="AlarmManager" type="Node2D" parent="."]
|
||||||
script = ExtResource("11_njjjf")
|
script = ExtResource("11_njjjf")
|
||||||
|
|
||||||
|
[node name="AlarmBox" parent="." instance=ExtResource("14_pr50u")]
|
||||||
|
position = Vector2(68, 243)
|
||||||
|
|
||||||
|
[node name="AlarmBox2" parent="." instance=ExtResource("15_a8c3x")]
|
||||||
|
position = Vector2(68, 231)
|
||||||
|
|
||||||
|
[node name="Teleporter" parent="." instance=ExtResource("16_5qis2")]
|
||||||
|
position = Vector2(151, 311)
|
||||||
|
metadata/_edit_group_ = true
|
||||||
|
|
||||||
|
[node name="Spawner" type="Node2D" parent="Teleporter" node_paths=PackedStringArray("Teleporter")]
|
||||||
|
script = ExtResource("17_7pavy")
|
||||||
|
Teleporter = NodePath("..")
|
||||||
|
ActivationRange = 100.0
|
||||||
|
ActorPrefab = ExtResource("8_vi7eu")
|
||||||
|
|
||||||
|
[node name="Teleporter2" parent="." instance=ExtResource("16_5qis2")]
|
||||||
|
position = Vector2(-59, 279)
|
||||||
|
metadata/_edit_group_ = true
|
||||||
|
|
||||||
|
[node name="Spawner" type="Node2D" parent="Teleporter2" node_paths=PackedStringArray("Teleporter")]
|
||||||
|
script = ExtResource("17_7pavy")
|
||||||
|
Teleporter = NodePath("..")
|
||||||
|
ActivationRange = 100.0
|
||||||
|
ActorPrefab = ExtResource("8_vi7eu")
|
||||||
|
|
||||||
|
[node name="Teleporter3" parent="." instance=ExtResource("16_5qis2")]
|
||||||
|
position = Vector2(72, 391)
|
||||||
|
metadata/_edit_group_ = true
|
||||||
|
|
||||||
|
[node name="Spawner" type="Node2D" parent="Teleporter3" node_paths=PackedStringArray("Teleporter")]
|
||||||
|
script = ExtResource("17_7pavy")
|
||||||
|
Teleporter = NodePath("..")
|
||||||
|
ActivationRange = 100.0
|
||||||
|
ActorPrefab = ExtResource("8_vi7eu")
|
||||||
|
|
||||||
|
[node name="ControlPad" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("16_ijcqi")]
|
||||||
|
position = Vector2(97, 244)
|
||||||
|
Target = NodePath("Script")
|
||||||
|
|
||||||
|
[node name="Script" type="Node2D" parent="ControlPad"]
|
||||||
|
script = ExtResource("17_wpn2u")
|
||||||
|
Events = Array[Object]([SubResource("Resource_0a8l3")])
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="ControlPad"]
|
||||||
|
offset_left = -7.0
|
||||||
|
offset_top = -13.0
|
||||||
|
offset_right = 42.0
|
||||||
|
offset_bottom = -2.0
|
||||||
|
text = "Activate Alarm"
|
||||||
|
label_settings = ExtResource("19_1ywt4")
|
||||||
|
|
||||||
|
[node name="ControlPad2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("16_ijcqi")]
|
||||||
|
position = Vector2(148, 244)
|
||||||
|
Target = NodePath("../Teleporter/Spawner")
|
||||||
|
|
||||||
|
[node name="Label" type="Label" parent="ControlPad2"]
|
||||||
|
offset_right = 40.0
|
||||||
|
offset_bottom = 23.0
|
||||||
|
text = "Manual
|
||||||
|
Spawn"
|
||||||
|
label_settings = ExtResource("19_1ywt4")
|
||||||
|
|
|
||||||
|
|
@ -142,7 +142,7 @@ ActivationType = 0
|
||||||
Targets = Array[NodePath]([NodePath("../Rumia")])
|
Targets = Array[NodePath]([NodePath("../Rumia")])
|
||||||
WaitForCompletion = true
|
WaitForCompletion = true
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_psv6q"]
|
[sub_resource type="Resource" id="Resource_7hesl"]
|
||||||
resource_local_to_scene = true
|
resource_local_to_scene = true
|
||||||
script = ExtResource("49_0si7g")
|
script = ExtResource("49_0si7g")
|
||||||
Target = NodePath(".")
|
Target = NodePath(".")
|
||||||
|
|
@ -678,7 +678,7 @@ Events = Array[Object]([SubResource("Resource_068l7"), SubResource("Resource_l3n
|
||||||
|
|
||||||
[node name="BossBattleStartScript" parent="." instance=ExtResource("43_kf3qc")]
|
[node name="BossBattleStartScript" parent="." instance=ExtResource("43_kf3qc")]
|
||||||
position = Vector2(-1487, -396)
|
position = Vector2(-1487, -396)
|
||||||
Events = Array[Object]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_psv6q")])
|
Events = Array[Object]([SubResource("Resource_4f4id"), SubResource("Resource_s2o7m"), SubResource("Resource_b1dht"), SubResource("Resource_xrgpy"), SubResource("Resource_7hesl")])
|
||||||
|
|
||||||
[node name="Enemy8" parent="." instance=ExtResource("47_u1ve6")]
|
[node name="Enemy8" parent="." instance=ExtResource("47_u1ve6")]
|
||||||
position = Vector2(-1117, 184)
|
position = Vector2(-1117, 184)
|
||||||
|
|
|
||||||
|
|
@ -131,8 +131,8 @@ public partial class Teleporter : Activable
|
||||||
|
|
||||||
await TweenPlayer(player);
|
await TweenPlayer(player);
|
||||||
|
|
||||||
|
//_particles.Emitting = true;
|
||||||
_particles.Emitting = true;
|
FireParticles();
|
||||||
|
|
||||||
await player.Teleport();
|
await player.Teleport();
|
||||||
|
|
||||||
|
|
|
||||||
31
Scripts/Actors/ActorSpawner.cs
Normal file
31
Scripts/Actors/ActorSpawner.cs
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
using Godot;
|
||||||
|
using Godot.Collections;
|
||||||
|
|
||||||
|
namespace Cirno.Scripts.Actors;
|
||||||
|
|
||||||
|
public partial class ActorSpawner : Node2D, IActivable
|
||||||
|
{
|
||||||
|
[Export]
|
||||||
|
public PackedScene ActorPrefab { get; set; }
|
||||||
|
|
||||||
|
[Export] public bool WaitForActorDeath { get; private set; } = true;
|
||||||
|
|
||||||
|
public Actor SpawnedActor { get; private set; }
|
||||||
|
|
||||||
|
public virtual void Spawn()
|
||||||
|
{
|
||||||
|
SpawnedActor = this.CreateSibling<Actor>(ActorPrefab);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Activate(ActivationType activationType = ActivationType.Toggle)
|
||||||
|
{
|
||||||
|
if (!WaitForActorDeath)
|
||||||
|
{
|
||||||
|
Spawn();
|
||||||
|
}
|
||||||
|
else if (SpawnedActor == null)
|
||||||
|
{
|
||||||
|
Spawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
Scripts/Actors/AlarmTeleporterActorSpawner.cs
Normal file
28
Scripts/Actors/AlarmTeleporterActorSpawner.cs
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
using Cirno.Scripts.Activables;
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace Cirno.Scripts.Actors;
|
||||||
|
|
||||||
|
public partial class AlarmTeleporterActorSpawner : ActorSpawner
|
||||||
|
{
|
||||||
|
private AlarmManager _alarmManager;
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public Teleporter Teleporter { get; private set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public float ActivationRange { get; private set; }
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
_alarmManager = this.GetAlarmManager();
|
||||||
|
_alarmManager.AlarmEnabled += AlarmManagerOnAlarmEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AlarmManagerOnAlarmEnabled(Vector2 location)
|
||||||
|
{
|
||||||
|
if (!(location.DistanceTo(this.GlobalPosition) <= ActivationRange)) return;
|
||||||
|
Teleporter?.FireParticles();
|
||||||
|
Spawn();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -15,6 +15,9 @@ public partial class Actor : CharacterBody2D
|
||||||
private GameManager _gameManager;
|
private GameManager _gameManager;
|
||||||
|
|
||||||
private List<ActorModule> _modules = new();
|
private List<ActorModule> _modules = new();
|
||||||
|
|
||||||
|
[Signal]
|
||||||
|
public delegate void OnDeathEventHandler();
|
||||||
|
|
||||||
public bool IsDestroyed { get; set; }
|
public bool IsDestroyed { get; set; }
|
||||||
|
|
||||||
|
|
@ -47,4 +50,9 @@ public partial class Actor : CharacterBody2D
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void TriggerDeath()
|
||||||
|
{
|
||||||
|
EmitSignal(SignalName.OnDeath);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -15,7 +15,7 @@ public partial class AnimationHandler : ActorModule
|
||||||
public override void Init(Actor parent)
|
public override void Init(Actor parent)
|
||||||
{
|
{
|
||||||
_parent = parent;
|
_parent = parent;
|
||||||
|
_parent.OnDeath += ParentOnOnDeath;
|
||||||
// var children = GetChildren();
|
// var children = GetChildren();
|
||||||
// foreach (var child in children) {
|
// foreach (var child in children) {
|
||||||
// if (child is InputProvider inputProvider)
|
// if (child is InputProvider inputProvider)
|
||||||
|
|
@ -25,6 +25,12 @@ public partial class AnimationHandler : ActorModule
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void ParentOnOnDeath()
|
||||||
|
{
|
||||||
|
_animatedSprite.SpeedScale = 0;
|
||||||
|
_animatedSprite.Hide();
|
||||||
|
}
|
||||||
|
|
||||||
public override void Update(double delta)
|
public override void Update(double delta)
|
||||||
{
|
{
|
||||||
if (IsDestroyed) return;
|
if (IsDestroyed) return;
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ public partial class DamageReceiverActorModule : ActorModule
|
||||||
{
|
{
|
||||||
_actor = actor;
|
_actor = actor;
|
||||||
|
|
||||||
|
HealthProvider.FillResource();
|
||||||
HealthProvider.ResourceDepleted += OnDeath;
|
HealthProvider.ResourceDepleted += OnDeath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -61,6 +62,6 @@ public partial class DamageReceiverActorModule : ActorModule
|
||||||
protected void OnDeath()
|
protected void OnDeath()
|
||||||
{
|
{
|
||||||
_actor.IsDestroyed = true;
|
_actor.IsDestroyed = true;
|
||||||
GD.Print("Actor dead");
|
_actor.TriggerDeath();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
65
Scripts/Components/Actors/DeathAnimationHandler.cs
Normal file
65
Scripts/Components/Actors/DeathAnimationHandler.cs
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
using Cirno.Scripts.Resources;
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
namespace Cirno.Scripts.Components.Actors;
|
||||||
|
|
||||||
|
public partial class DeathAnimationHandler : ActorModule
|
||||||
|
{
|
||||||
|
protected Actor _actor;
|
||||||
|
|
||||||
|
[Export] public BulletResource ExplosionData { get; set; }
|
||||||
|
[Export] public PackedScene ExplosionParticles { get; set; }
|
||||||
|
[Export] public PackedScene DebrisScene { get; set; }
|
||||||
|
|
||||||
|
public override void Init(Actor actor)
|
||||||
|
{
|
||||||
|
_actor = actor;
|
||||||
|
_actor.OnDeath += ParentOnOnDeath;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void ParentOnOnDeath()
|
||||||
|
{
|
||||||
|
CreateExplosion();
|
||||||
|
CreateParticles();
|
||||||
|
CreateDebris();
|
||||||
|
|
||||||
|
_actor.QueueFree();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Update(double delta)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PhysicsUpdate(double delta)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CreateExplosion()
|
||||||
|
{
|
||||||
|
if (ExplosionData == null) return;
|
||||||
|
|
||||||
|
var explosion = _actor.CreateSibling<Bullet>(ExplosionData.BulletScene);
|
||||||
|
explosion.Speed = 0;
|
||||||
|
|
||||||
|
explosion.Initialize(ExplosionData.MakeBullet(_actor.GlobalPosition), GameManager.Instance);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CreateParticles()
|
||||||
|
{
|
||||||
|
if (ExplosionParticles == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var particle = _actor.CreateSibling<GpuParticles2D>(ExplosionParticles);
|
||||||
|
if (particle == null) return;
|
||||||
|
|
||||||
|
particle.Emitting = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CreateDebris()
|
||||||
|
{
|
||||||
|
if (DebrisScene == null) return;
|
||||||
|
_actor.CreateSibling<Barrel>(DebrisScene);
|
||||||
|
}
|
||||||
|
}
|
||||||
32
Scripts/Resources/Events/AlarmEnableEvent.cs
Normal file
32
Scripts/Resources/Events/AlarmEnableEvent.cs
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
using Godot;
|
||||||
|
using Godot.Collections;
|
||||||
|
|
||||||
|
namespace Cirno.Scripts.Resources.Events;
|
||||||
|
|
||||||
|
[GlobalClass]
|
||||||
|
public partial class AlarmEnableEvent : EventResource
|
||||||
|
{
|
||||||
|
private bool _isComplete = false;
|
||||||
|
private AlarmManager _alarmManager;
|
||||||
|
|
||||||
|
public override bool IsComplete()
|
||||||
|
{
|
||||||
|
return _isComplete;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Init(Node2D parent)
|
||||||
|
{
|
||||||
|
_alarmManager = parent.GetAlarmManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Start(Node2D parent)
|
||||||
|
{
|
||||||
|
_alarmManager.SoundAlarm(parent.GlobalPosition);
|
||||||
|
_isComplete = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void UpdateEvent(double delta)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue