mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-09 03:35:53 +00:00
Enemy alarm response
This commit is contained in:
parent
39fd072163
commit
dd3d427ac3
5 changed files with 89 additions and 10 deletions
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=21 format=3 uid="uid://clieeuln36a7a"]
|
||||
[gd_scene load_steps=22 format=3 uid="uid://clieeuln36a7a"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dn6dbog1s2818" path="res://Scripts/Components/FSM/Enemy/EnemyStateMachine.cs" id="1_27djw"]
|
||||
[ext_resource type="SpriteFrames" uid="uid://bcc5mlwwnkvri" path="res://Resources/Sprites/Fairy.tres" id="1_ho0th"]
|
||||
|
|
@ -17,6 +17,7 @@
|
|||
[ext_resource type="Script" uid="uid://ik7s65de723k" path="res://Scripts/Components/FSM/Enemy/NavigationMovementModule.cs" id="14_w08b8"]
|
||||
[ext_resource type="PackedScene" uid="uid://cj63k0dmk7tl1" path="res://Scenes/Weapons/enemy_weapon_base.tscn" id="15_ydpwc"]
|
||||
[ext_resource type="Resource" uid="uid://csdlihliv4cr8" path="res://Resources/Weapons/EnemyWeapon_simple.tres" id="16_pi7ab"]
|
||||
[ext_resource type="Script" uid="uid://dhsqsajq537qn" path="res://Scripts/Components/FSM/Enemy/EnemyAlarmModule.cs" id="18_4n750"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_pnkma"]
|
||||
|
||||
|
|
@ -44,11 +45,12 @@ script = ExtResource("4_f112g")
|
|||
DamageReceiver = NodePath("../../DamageReceiver")
|
||||
StorageModule = NodePath("../../Storage")
|
||||
|
||||
[node name="Idle" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "PlayerDetection", "DamageReceiver")]
|
||||
[node name="Idle" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "PlayerDetection", "DamageReceiver", "_moduleNodes")]
|
||||
script = ExtResource("4_kjmts")
|
||||
StorageModule = NodePath("../../Storage")
|
||||
PlayerDetection = NodePath("../../PlayerDetection")
|
||||
DamageReceiver = NodePath("../../DamageReceiver")
|
||||
_moduleNodes = [NodePath("../../AlarmModule")]
|
||||
|
||||
[node name="Alert" type="Node2D" parent="StateMachine" node_paths=PackedStringArray("StorageModule", "PlayerDetection", "DamageReceiver", "NavigationModule")]
|
||||
script = ExtResource("5_f112g")
|
||||
|
|
@ -116,6 +118,10 @@ debug_path_custom_color = Color(1, 0, 0, 1)
|
|||
[node name="EnemyWeapon" parent="." instance=ExtResource("15_ydpwc")]
|
||||
WeaponData = ExtResource("16_pi7ab")
|
||||
|
||||
[node name="AlarmModule" type="Node2D" parent="." node_paths=PackedStringArray("PlayerDetection")]
|
||||
script = ExtResource("18_4n750")
|
||||
PlayerDetection = NodePath("../PlayerDetection")
|
||||
|
||||
[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_entered" from="DamageReceiver" to="DamageReceiver" method="_on_damage_hitbox_area_entered"]
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
64
Scripts/Components/FSM/Enemy/EnemyAlarmModule.cs
Normal file
64
Scripts/Components/FSM/Enemy/EnemyAlarmModule.cs
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
using Cirno.Scripts.Enums;
|
||||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Components.FSM.Enemy;
|
||||
|
||||
public partial class EnemyAlarmModule : ModuleBase<EnemyState, CharacterBody2D>
|
||||
{
|
||||
private IStateMachine<EnemyState, CharacterBody2D> _machine;
|
||||
|
||||
[Export]
|
||||
public PlayerDetectionModule PlayerDetection { get; private set; }
|
||||
|
||||
private bool _enabled = false;
|
||||
|
||||
public override void EnterState(EnemyState state)
|
||||
{
|
||||
_enabled = true;
|
||||
CallDeferred(MethodName.AssignAlarmManagerDeferred);
|
||||
}
|
||||
|
||||
public override void ExitState(EnemyState state)
|
||||
{
|
||||
_enabled = false;
|
||||
AlarmManager.Instance.AlarmEnabled -= InstanceOnAlarmEnabled;
|
||||
}
|
||||
|
||||
private void AssignAlarmManagerDeferred()
|
||||
{
|
||||
AlarmManager.Instance.AlarmEnabled += InstanceOnAlarmEnabled;
|
||||
}
|
||||
|
||||
public override void Init(IStateMachine<EnemyState, CharacterBody2D> machine)
|
||||
{
|
||||
_machine = machine;
|
||||
// if (AlarmManager.Instance is not null)
|
||||
// {
|
||||
// AlarmManager.Instance.AlarmEnabled += InstanceOnAlarmEnabled;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// GD.Print("Alarm Manager is null");
|
||||
// }
|
||||
}
|
||||
|
||||
private void InstanceOnAlarmEnabled(Vector2 location)
|
||||
{
|
||||
if (_enabled)
|
||||
{
|
||||
PlayerDetection.LastKnownPlayerPosition = location;
|
||||
_machine.SetState(EnemyState.Alert);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public override void Process(double delta)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void PhysicsProcess(double delta)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
1
Scripts/Components/FSM/Enemy/EnemyAlarmModule.cs.uid
Normal file
1
Scripts/Components/FSM/Enemy/EnemyAlarmModule.cs.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://dhsqsajq537qn
|
||||
|
|
@ -15,7 +15,7 @@ public partial class PlayerDetectionModule : Area2D
|
|||
[Export(PropertyHint.Layers2DPhysics)]
|
||||
public uint ObstaclesCollisionMask { get; private set; }
|
||||
|
||||
public Vector2? LastKnownPlayerPosition { get; private set; }
|
||||
public Vector2? LastKnownPlayerPosition { get; set; }
|
||||
|
||||
//public bool PlayerInActiveArea { get; private set; }
|
||||
private CollisionShape2D _collisionShape2D;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue