From d49f5e2a45aaa75ce4f1c112292cc1f7bb29d0bb Mon Sep 17 00:00:00 2001 From: Marco Date: Sun, 23 Feb 2025 19:32:36 +0100 Subject: [PATCH] Actor defeat script --- Scenes/Actors/4WayActorEnemyTest.tscn | 6 ++- Scenes/Maps/NewActorTest.tscn | 9 +++- Scripts/Components/Actors/Actor.cs | 5 ++ .../Actors/ActorDefeatScriptHandler.cs | 46 +++++++++++++++++++ 4 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 Scripts/Components/Actors/ActorDefeatScriptHandler.cs diff --git a/Scenes/Actors/4WayActorEnemyTest.tscn b/Scenes/Actors/4WayActorEnemyTest.tscn index e64f6c5c..72aa78bc 100644 --- a/Scenes/Actors/4WayActorEnemyTest.tscn +++ b/Scenes/Actors/4WayActorEnemyTest.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=3 uid="uid://bc054js8ep2b"] +[gd_scene load_steps=19 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"] @@ -14,6 +14,7 @@ [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"] +[ext_resource type="Script" path="res://Scripts/Components/Actors/ActorDefeatScriptHandler.cs" id="15_17yce"] [sub_resource type="CircleShape2D" id="CircleShape2D_2b36v"] radius = 5.0 @@ -98,6 +99,9 @@ shape = SubResource("CircleShape2D_0tkae") script = ExtResource("13_e2vvk") ExplosionData = ExtResource("14_881we") +[node name="DefeatScriptHandler" type="Node2D" parent="."] +script = ExtResource("15_17yce") + [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"] diff --git a/Scenes/Maps/NewActorTest.tscn b/Scenes/Maps/NewActorTest.tscn index 44ca4752..1516619d 100644 --- a/Scenes/Maps/NewActorTest.tscn +++ b/Scenes/Maps/NewActorTest.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=24 format=4 uid="uid://5klhna6pdpss"] +[gd_scene load_steps=25 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"] @@ -7,6 +7,7 @@ [ext_resource type="TileSet" uid="uid://6k28roiljylj" path="res://Tilesets/factory_tileset.tres" id="5_bsah1"] [ext_resource type="Script" path="res://Scripts/TilemapAvoidance.cs" id="6_f3h3l"] [ext_resource type="Script" path="res://Scenes/CameraController.gd" id="7_4a7df"] +[ext_resource type="PackedScene" uid="uid://b0gpbkxdfbnjh" path="res://Scenes/Actors/ForceField_Horizontal.tscn" id="8_5cbgu"] [ext_resource type="Script" path="res://Scripts/InventoryManager.cs" id="8_scbgd"] [ext_resource type="PackedScene" uid="uid://bc054js8ep2b" path="res://Scenes/Actors/4WayActorEnemyTest.tscn" id="8_vi7eu"] [ext_resource type="PackedScene" uid="uid://dkwi1hu1bixoe" path="res://Scenes/HUD/HUD.tscn" id="9_xs7rn"] @@ -64,8 +65,12 @@ metadata/_edit_lock_ = true [node name="ActorEnemyTest" parent="Tilemaps/Actors" instance=ExtResource("12_8mkvw")] position = Vector2(258, 364) -[node name="ActorEnemyTest" parent="Tilemaps" instance=ExtResource("8_vi7eu")] +[node name="HorizontalForceField" parent="Tilemaps/Actors" instance=ExtResource("8_5cbgu")] +position = Vector2(15, 304) + +[node name="ActorEnemyTest" parent="Tilemaps" node_paths=PackedStringArray("DefeatScript") instance=ExtResource("8_vi7eu")] position = Vector2(8, 410) +DefeatScript = NodePath("../Actors/HorizontalForceField") [node name="CameraController" type="Camera2D" parent="."] script = ExtResource("7_4a7df") diff --git a/Scripts/Components/Actors/Actor.cs b/Scripts/Components/Actors/Actor.cs index 3b0a6855..dacd3aa0 100644 --- a/Scripts/Components/Actors/Actor.cs +++ b/Scripts/Components/Actors/Actor.cs @@ -9,6 +9,11 @@ public partial class Actor : CharacterBody2D [Export] public float MovementSpeed { get; private set; } + [ExportCategory("Defeat Script")] + [Export] public Node2D DefeatScript { get; set; } + + [Export] public ActivationType ActivationType { get; private set; } = ActivationType.Toggle; + public Vector2 MovementDirection { get; set; } public Vector2 FacingDirection { get; set; } diff --git a/Scripts/Components/Actors/ActorDefeatScriptHandler.cs b/Scripts/Components/Actors/ActorDefeatScriptHandler.cs new file mode 100644 index 00000000..89959f8e --- /dev/null +++ b/Scripts/Components/Actors/ActorDefeatScriptHandler.cs @@ -0,0 +1,46 @@ +using Godot; + +namespace Cirno.Scripts.Components.Actors; + +public partial class ActorDefeatScriptHandler : ActorModule +{ + [Export] public Node2D DefeatScript { get; private set; } + [Export] public ActivationType ActivationType { get; private set; } + protected Actor _actor; + + public override void Init(Actor actor) + { + _actor = actor; + DefeatScript = actor.DefeatScript; + ActivationType = actor.ActivationType; + _actor.OnDeath += ActorOnOnDeath; + } + + private void ActorOnOnDeath() + { + ActivateDefeatScript(); + } + + public override void Update(double delta) + { + + } + + public override void PhysicsUpdate(double delta) + { + + } + + protected void ActivateDefeatScript() + { + if (DefeatScript is not IActivable target) + { + GD.PrintErr($"Target {DefeatScript.Name} is not activable"); + return; + } + + target?.Activate(); + + GD.Print($"{DefeatScript.Name} activated"); + } +} \ No newline at end of file