mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 11:15:33 +00:00
Enemy Gravity
This commit is contained in:
parent
b3bfc1a888
commit
d1517f864a
9 changed files with 65 additions and 9 deletions
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=431 format=4 uid="uid://cupulrjeeivxm"]
|
||||
[gd_scene load_steps=432 format=4 uid="uid://cupulrjeeivxm"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://kno58homctew" path="res://addons/func_godot/src/map/func_godot_map.gd" id="1_amw6e"]
|
||||
[ext_resource type="Resource" uid="uid://cx41lsryg5wpm" path="res://3D/TrenchBroom/map_settings.tres" id="2_smtsr"]
|
||||
|
|
@ -86,6 +86,7 @@
|
|||
[ext_resource type="PackedScene" uid="uid://dtuxpu88vaini" path="res://3D/Scenes/Triggers/AlarmTrigger_3D.tscn" id="79_yyuc7"]
|
||||
[ext_resource type="Script" uid="uid://00rbjdb4mnb0" path="res://Scripts/Actors/EnemyMarker3D.cs" id="81_khac5"]
|
||||
[ext_resource type="Resource" uid="uid://ccym6mcq4fbul" path="res://Resources/Enemies/Fairy_Guard_3D.tres" id="82_jkdtm"]
|
||||
[ext_resource type="Resource" uid="uid://4qxicyti4hwr" path="res://Resources/Enemies/Base_Fairy_3D.tres" id="87_yyuc7"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_arple"]
|
||||
albedo_texture = ExtResource("3_bryct")
|
||||
|
|
@ -3551,6 +3552,14 @@ AutoSpawn = true
|
|||
Billboard = true
|
||||
PixelSize = 0.05
|
||||
|
||||
[node name="Enemy_Fairy_Base" type="Marker3D" parent="Enemies"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.6389, 1.42644, 14.2033)
|
||||
script = ExtResource("81_khac5")
|
||||
Enemy = ExtResource("87_yyuc7")
|
||||
AutoSpawn = true
|
||||
Billboard = true
|
||||
PixelSize = 0.05
|
||||
|
||||
[node name="Enemy_Fairy_Guard2" type="Marker3D" parent="Enemies"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16.9845, 1.42644, 13.3475)
|
||||
script = ExtResource("81_khac5")
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=32 format=3 uid="uid://bh3vxmqflijgj"]
|
||||
[gd_scene load_steps=33 format=3 uid="uid://bh3vxmqflijgj"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dwregubt4iila" path="res://Scripts/Components/FSM/Enemy/3D/EnemyProxy3D.cs" id="1_a3crc"]
|
||||
[ext_resource type="Resource" uid="uid://ccym6mcq4fbul" path="res://Resources/Enemies/Fairy_Guard_3D.tres" id="2_jgarc"]
|
||||
|
|
@ -24,10 +24,11 @@
|
|||
[ext_resource type="Script" uid="uid://dmawekjfas6k8" path="res://Scripts/Components/Actors/DamageReceiver3D.cs" id="17_tabhk"]
|
||||
[ext_resource type="Script" uid="uid://cqwvssstkrdmw" path="res://Scripts/Components/Actors/ActorResourceProvider.cs" id="18_4fnoq"]
|
||||
[ext_resource type="Script" uid="uid://dvln1783wvvuw" path="res://Scripts/Components/Actors/ShadowProvider.cs" id="19_4fnoq"]
|
||||
[ext_resource type="Script" uid="uid://qrdor3gk6x37" path="res://Scripts/Components/FSM/Enemy/3D/GravityProvider.cs" id="25_qg061"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_jgarc"]
|
||||
radius = 0.264547
|
||||
height = 0.935884
|
||||
radius = 0.343
|
||||
height = 0.686
|
||||
|
||||
[sub_resource type="AtlasTexture" id="AtlasTexture_ad5n8"]
|
||||
atlas = ExtResource("11_2xi0r")
|
||||
|
|
@ -68,6 +69,7 @@ EnemyFSM = NodePath("StateMachine")
|
|||
EnemyResource = ExtResource("2_jgarc")
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.047, 0)
|
||||
shape = SubResource("CapsuleShape3D_jgarc")
|
||||
|
||||
[node name="StateMachine" type="Node" parent="."]
|
||||
|
|
@ -79,27 +81,30 @@ Storage = NodePath("../../Storage")
|
|||
DetectionProvider = NodePath("../../PlayerDetectionProvider")
|
||||
_moduleNodes = [NodePath("../../AnimationModule")]
|
||||
|
||||
[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "_moduleNodes")]
|
||||
[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "GravityProvider", "_moduleNodes")]
|
||||
script = ExtResource("5_rg1hb")
|
||||
Storage = NodePath("../../Storage")
|
||||
PlayerDetection = NodePath("../../PlayerDetectionProvider")
|
||||
GravityProvider = NodePath("../../GravityProvider")
|
||||
DebugEnabled = true
|
||||
_moduleNodes = [NodePath("../../DamageModule"), NodePath("../../AnimationModule")]
|
||||
|
||||
[node name="Alert" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "NavigationModule", "_moduleNodes")]
|
||||
[node name="Alert" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "NavigationModule", "GravityProvider", "_moduleNodes")]
|
||||
script = ExtResource("6_jgarc")
|
||||
Storage = NodePath("../../Storage")
|
||||
PlayerDetection = NodePath("../../PlayerDetectionProvider")
|
||||
NavigationModule = NodePath("../../NavigationProvider")
|
||||
GravityProvider = NodePath("../../GravityProvider")
|
||||
DebugEnabled = true
|
||||
_moduleNodes = [NodePath("../../DamageModule"), NodePath("../../AnimationModule")]
|
||||
|
||||
[node name="Shooting" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "EquippedWeapon", "NavigationModule", "_moduleNodes")]
|
||||
[node name="Shooting" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "EquippedWeapon", "NavigationModule", "GravityProvider", "_moduleNodes")]
|
||||
script = ExtResource("7_rg1hb")
|
||||
Storage = NodePath("../../Storage")
|
||||
PlayerDetection = NodePath("../../PlayerDetectionProvider")
|
||||
EquippedWeapon = NodePath("../../Weapon")
|
||||
NavigationModule = NodePath("../../NavigationProvider")
|
||||
GravityProvider = NodePath("../../GravityProvider")
|
||||
_moduleNodes = [NodePath("../../DamageModule"), NodePath("../../AnimationModule")]
|
||||
|
||||
[node name="Dead" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage")]
|
||||
|
|
@ -191,6 +196,11 @@ mesh = SubResource("QuadMesh_05pdu")
|
|||
script = ExtResource("19_4fnoq")
|
||||
CollisionMask = 1
|
||||
|
||||
[node name="GravityProvider" type="Node" parent="."]
|
||||
script = ExtResource("25_qg061")
|
||||
Gravity = -20.0
|
||||
MaxFallSpeed = 50.0
|
||||
|
||||
[connection signal="body_entered" from="PlayerDetectionProvider" to="PlayerDetectionProvider" method="_on_body_entered"]
|
||||
[connection signal="body_exited" from="PlayerDetectionProvider" to="PlayerDetectionProvider" method="_on_body_exited"]
|
||||
[connection signal="velocity_computed" from="NavigationAgent3D" to="NavigationProvider" method="_on_navigation_agent_3d_velocity_computed"]
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ public partial class Alert : EnemyStateBase3D
|
|||
[Export] public EnemyStorage3D Storage { get; private set; }
|
||||
[Export] public PlayerDetection3D PlayerDetection { get; private set; }
|
||||
[Export] public NavigationProvider3D NavigationModule { get; private set; }
|
||||
[Export] public GravityProvider GravityProvider { get; private set; }
|
||||
[Export] public bool DebugEnabled { get; set; } = false;
|
||||
|
||||
private bool _isPlayerInRange = false;
|
||||
|
|
@ -79,6 +80,12 @@ public partial class Alert : EnemyStateBase3D
|
|||
|
||||
NavigationModule.Move(Storage.EnemyData.MovementSpeed);
|
||||
|
||||
// Calculate gravity
|
||||
|
||||
MainObject.Velocity = new Vector3(MainObject.Velocity.X, GravityProvider.CalculateGravityVelocity(MainObject.Velocity.Y, delta), MainObject.Velocity.Z);
|
||||
|
||||
MainObject.MoveAndSlide();
|
||||
|
||||
//Storage.FacingDirection = MainObject.Velocity.SnapToCardinal().Normalized();
|
||||
Storage.FacingDirection = MainObject.Velocity.ToVector2().Normalized();
|
||||
Storage.AimingDirection = Storage.FacingDirection;
|
||||
|
|
|
|||
16
Scripts/Components/FSM/Enemy/3D/GravityProvider.cs
Normal file
16
Scripts/Components/FSM/Enemy/3D/GravityProvider.cs
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
using Godot;
|
||||
|
||||
namespace Cirno.Scripts.Components.FSM.Enemy._3D;
|
||||
|
||||
public partial class GravityProvider : Node
|
||||
{
|
||||
[Export] public float Gravity = -9.8f;
|
||||
[Export] public float MaxFallSpeed = 20f;
|
||||
|
||||
public float CalculateGravityVelocity(float frameVelocityY, double delta)
|
||||
{
|
||||
var velocityY = Mathf.Clamp(frameVelocityY + Gravity * (float)delta, -MaxFallSpeed, MaxFallSpeed);
|
||||
|
||||
return velocityY;
|
||||
}
|
||||
}
|
||||
1
Scripts/Components/FSM/Enemy/3D/GravityProvider.cs.uid
Normal file
1
Scripts/Components/FSM/Enemy/3D/GravityProvider.cs.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://qrdor3gk6x37
|
||||
|
|
@ -10,6 +10,8 @@ public partial class Idle : EnemyStateBase3D
|
|||
[Export] public EnemyStorage3D Storage { get; private set; }
|
||||
[Export] public PlayerDetection3D PlayerDetection { get; private set; }
|
||||
|
||||
[Export] public GravityProvider GravityProvider { get; private set; }
|
||||
|
||||
[Export] public bool DebugEnabled { get; set; } = false;
|
||||
|
||||
private bool _isPlayerInRange = false;
|
||||
|
|
@ -84,6 +86,10 @@ public partial class Idle : EnemyStateBase3D
|
|||
DebugDraw3D.DrawText(MainObject.GlobalPosition - new Vector3(0,16,0), "Idle");
|
||||
|
||||
}
|
||||
|
||||
MainObject.Velocity = new Vector3(MainObject.Velocity.X, GravityProvider.CalculateGravityVelocity(MainObject.Velocity.Y, delta), MainObject.Velocity.Z);
|
||||
|
||||
MainObject.MoveAndSlide();
|
||||
}
|
||||
|
||||
public override void ProcessState(double delta)
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ public partial class Init : EnemyStateBase3D
|
|||
//DamageReceiver.HealthProvider.MaxResource = StorageModule.Root.EnemyResource.MaxHealth;
|
||||
DetectionProvider.Initialize(MainObject);
|
||||
Storage.AiState = Storage.Root.StartingAiState;
|
||||
|
||||
|
||||
Storage.HomePosition = MainObject.GlobalPosition;
|
||||
// TODO: Hide wings
|
||||
// TODO: Hide aiming reticule
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ public partial class NavigationProvider3D : Node
|
|||
_on_navigation_agent_3d_velocity_computed(newVelocity);
|
||||
}
|
||||
|
||||
_characterBody.MoveAndSlide();
|
||||
|
||||
}
|
||||
|
||||
public void _on_navigation_agent_3d_velocity_computed(Vector3 safeVelocity)
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ public partial class Shooting : EnemyStateBase3D
|
|||
[Export] public Weapon3D EquippedWeapon;
|
||||
[Export] public NavigationProvider3D NavigationModule { get; private set; }
|
||||
|
||||
[Export] public GravityProvider GravityProvider { get; private set; }
|
||||
|
||||
private bool _isPlayerInRange = false;
|
||||
private Vector3? _currentStrafeTarget = null;
|
||||
private float _strafeSpeed => Storage.EnemyData.StrafeSpeed;
|
||||
|
|
@ -99,6 +101,11 @@ public partial class Shooting : EnemyStateBase3D
|
|||
NavigationModule.SetTarget(_currentStrafeTarget.Value);
|
||||
NavigationModule.Move(_strafeSpeed);
|
||||
}
|
||||
|
||||
// Calculate gravity
|
||||
MainObject.Velocity = new Vector3(MainObject.Velocity.X, GravityProvider.CalculateGravityVelocity(MainObject.Velocity.Y, delta), MainObject.Velocity.Z);
|
||||
|
||||
MainObject.MoveAndSlide();
|
||||
}
|
||||
|
||||
private Vector3? CalculateStrafePosition()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue