mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-10 16:05:54 +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="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="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/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"]
|
||||
radius = 5.0
|
||||
|
|
@ -75,7 +77,7 @@ debug_path_custom_color = Color(1, 0, 0, 1)
|
|||
[node name="HealthProvider" type="Node2D" parent="."]
|
||||
script = ExtResource("9_fyr27")
|
||||
ResourceName = "Health"
|
||||
MaxResource = 4.0
|
||||
MaxResource = 6.0
|
||||
|
||||
[node name="EnemyWeapon" parent="." instance=ExtResource("10_yktta")]
|
||||
WeaponData = ExtResource("11_kuimj")
|
||||
|
|
@ -92,6 +94,10 @@ collision_mask = 8
|
|||
[node name="CollisionShape2D" type="CollisionShape2D" parent="DamageReceiver/Area2D"]
|
||||
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_exited" from="PlayerDetection" to="PlayerDetection" method="_on_area_exited"]
|
||||
[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="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="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="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"]
|
||||
atlas = ExtResource("2_wt8wl")
|
||||
|
|
@ -229,6 +232,9 @@ radius = 5.0
|
|||
[sub_resource type="CircleShape2D" id="CircleShape2D_sthwe"]
|
||||
radius = 85.0529
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_xyma2"]
|
||||
radius = 5.09902
|
||||
|
||||
[node name="ActorEnemyTest" type="CharacterBody2D"]
|
||||
collision_layer = 16
|
||||
collision_mask = 113
|
||||
|
|
@ -278,7 +284,6 @@ target_desired_distance = 64.0
|
|||
path_max_distance = 800.0
|
||||
path_postprocessing = 1
|
||||
avoidance_enabled = true
|
||||
debug_enabled = true
|
||||
debug_path_custom_color = Color(1, 0, 0, 1)
|
||||
|
||||
[node name="HealthProvider" type="Node2D" parent="."]
|
||||
|
|
@ -288,6 +293,23 @@ ResourceName = "Health"
|
|||
[node name="EnemyWeapon" parent="." instance=ExtResource("10_ehu1c")]
|
||||
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_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="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()
|
||||
{
|
||||
if (DebrisScene == null) return;
|
||||
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="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://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://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"]
|
||||
script = ExtResource("4_7nc7l")
|
||||
EggIndex = 0
|
||||
StartingEquipment = []
|
||||
|
||||
[sub_resource type="Resource" id="Resource_0a8l3"]
|
||||
script = ExtResource("18_q3u5g")
|
||||
WaitForCompletion = true
|
||||
|
||||
[node name="GameScene" type="Node2D"]
|
||||
script = ExtResource("1_uhxhn")
|
||||
PlayerTemplate = ExtResource("2_afebu")
|
||||
|
|
@ -80,3 +92,66 @@ position = Vector2(111, 305)
|
|||
|
||||
[node name="AlarmManager" type="Node2D" parent="."]
|
||||
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")])
|
||||
WaitForCompletion = true
|
||||
|
||||
[sub_resource type="Resource" id="Resource_psv6q"]
|
||||
[sub_resource type="Resource" id="Resource_7hesl"]
|
||||
resource_local_to_scene = true
|
||||
script = ExtResource("49_0si7g")
|
||||
Target = NodePath(".")
|
||||
|
|
@ -678,7 +678,7 @@ Events = Array[Object]([SubResource("Resource_068l7"), SubResource("Resource_l3n
|
|||
|
||||
[node name="BossBattleStartScript" parent="." instance=ExtResource("43_kf3qc")]
|
||||
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")]
|
||||
position = Vector2(-1117, 184)
|
||||
|
|
|
|||
|
|
@ -131,8 +131,8 @@ public partial class Teleporter : Activable
|
|||
|
||||
await TweenPlayer(player);
|
||||
|
||||
|
||||
_particles.Emitting = true;
|
||||
//_particles.Emitting = true;
|
||||
FireParticles();
|
||||
|
||||
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 List<ActorModule> _modules = new();
|
||||
|
||||
[Signal]
|
||||
public delegate void OnDeathEventHandler();
|
||||
|
||||
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)
|
||||
{
|
||||
_parent = parent;
|
||||
|
||||
_parent.OnDeath += ParentOnOnDeath;
|
||||
// var children = GetChildren();
|
||||
// foreach (var child in children) {
|
||||
// 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)
|
||||
{
|
||||
if (IsDestroyed) return;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ public partial class DamageReceiverActorModule : ActorModule
|
|||
{
|
||||
_actor = actor;
|
||||
|
||||
HealthProvider.FillResource();
|
||||
HealthProvider.ResourceDepleted += OnDeath;
|
||||
}
|
||||
|
||||
|
|
@ -61,6 +62,6 @@ public partial class DamageReceiverActorModule : ActorModule
|
|||
protected void OnDeath()
|
||||
{
|
||||
_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