Actor defeat script

This commit is contained in:
Marco 2025-02-23 19:32:36 +01:00
commit d49f5e2a45
4 changed files with 63 additions and 3 deletions

View file

@ -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"]

View file

@ -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")

View file

@ -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; }

View file

@ -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");
}
}