diff --git a/resource_definitions/RMovement.cs b/resource_definitions/RMovement.cs index b44c082a..fe3645d2 100644 --- a/resource_definitions/RMovement.cs +++ b/resource_definitions/RMovement.cs @@ -5,23 +5,27 @@ using System; public partial class RMovement : Resource { [Export(PropertyHint.Range, "0,10,0.1,or_greater")] - public float Speed; + public float Speed { get; set;} [Export(PropertyHint.Range, "0,10,0.1,or_greater")] - public float Acceleration; + public float Acceleration { get; set;} + [Export(PropertyHint.Range, "0,10,0.1,or_greater")] + public float GravityModifier { get; set;} [Export(PropertyHint.Range, "0,20,1,or_greater")] - public float TargetHeight; + public float TargetHeight { get; set;} public RMovement() { Speed = 3.0f; Acceleration = 1.0f; + GravityModifier = 1.0f; TargetHeight = 10.0f; } - public RMovement(float speed, float acceleration, float targetHeight) + public RMovement(float speed, float acceleration, float gravityModifier, float targetHeight) { Speed = speed; Acceleration = acceleration; + GravityModifier = gravityModifier; TargetHeight = targetHeight; } } diff --git a/scenes/enemies/flying_enemy/flying_enemy.tscn b/scenes/enemies/flying_enemy/flying_enemy.tscn index 84efdaa8..5aeff5a4 100644 --- a/scenes/enemies/flying_enemy/flying_enemy.tscn +++ b/scenes/enemies/flying_enemy/flying_enemy.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=3 uid="uid://cmlud1hwkd6sv"] +[gd_scene load_steps=20 format=3 uid="uid://cmlud1hwkd6sv"] [ext_resource type="Script" uid="uid://bn7sc6id7n166" path="res://scenes/enemies/Enemy.cs" id="1_q8l7o"] [ext_resource type="Script" uid="uid://b6y3ugfydvch0" path="res://resource_definitions/RDamageModifier.cs" id="2_1bsgx"] @@ -9,6 +9,8 @@ [ext_resource type="PackedScene" uid="uid://dmw5ibwrb483f" path="res://scenes/movement/CFlyingMovement.tscn" id="7_vaeds"] [ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://resource_definitions/RMovement.cs" id="8_on7rt"] [ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/damage/CDamageable.cs" id="8_uotso"] +[ext_resource type="PackedScene" uid="uid://bctpe34ddamg5" path="res://scenes/knockback/CKnockback.tscn" id="10_dejyg"] +[ext_resource type="Resource" uid="uid://dt7a1io5o0b8s" path="res://scenes/enemies/flying_enemy/flying_enemy_knockback.tres" id="11_mpa2u"] [sub_resource type="Resource" id="Resource_jnv07"] script = ExtResource("2_1bsgx") @@ -41,18 +43,20 @@ albedo_color = Color(0.06469653, 0.06469653, 0.06469653, 1) [sub_resource type="BoxShape3D" id="BoxShape3D_4yfjf"] size = Vector3(1, 1, 1.5) -[node name="FlyingEnemy" type="CharacterBody3D" node_paths=PackedStringArray("CHealth", "CDamage", "CMovement")] +[node name="FlyingEnemy" type="CharacterBody3D" node_paths=PackedStringArray("CHealth", "CDamage", "CKnockback", "CMovement")] collision_layer = 16 collision_mask = 273 motion_mode = 1 script = ExtResource("1_q8l7o") CHealth = NodePath("CHealth") RHealth = ExtResource("2_ma2bq") +DeathEffects = Array[Object]([]) CDamage = NodePath("CDamageable") RDamage = ExtResource("2_on7rt") +CKnockback = NodePath("CKnockback") +RKnockback = ExtResource("11_mpa2u") CMovement = NodePath("CFlyingMovement") RMovement = ExtResource("4_dejyg") -DeathEffects = Array[Object]([]) [node name="CHealth" type="Node" parent="."] script = ExtResource("4_ys4jv") @@ -68,6 +72,9 @@ metadata/_custom_type_script = "uid://b0u23nkpaimyc" RMovement = SubResource("Resource_on7rt") TerrainCollision = 256 +[node name="CKnockback" parent="." instance=ExtResource("10_dejyg")] +RKnockback = ExtResource("11_mpa2u") + [node name="CollisionShape3D" type="CollisionShape3D" parent="."] shape = SubResource("SphereShape3D_b46rq") diff --git a/scenes/enemies/flying_enemy/flying_enemy_knockback.tres b/scenes/enemies/flying_enemy/flying_enemy_knockback.tres new file mode 100644 index 00000000..e733aa27 --- /dev/null +++ b/scenes/enemies/flying_enemy/flying_enemy_knockback.tres @@ -0,0 +1,8 @@ +[gd_resource type="Resource" script_class="RKnockback" load_steps=2 format=3 uid="uid://dt7a1io5o0b8s"] + +[ext_resource type="Script" uid="uid://b44cse62qru7j" path="res://resource_definitions/RKnockback.cs" id="1_yq03x"] + +[resource] +script = ExtResource("1_yq03x") +Modifier = 10.0 +metadata/_custom_type_script = "uid://b44cse62qru7j" diff --git a/scenes/enemies/flying_enemy/flying_enemy_movement.tres b/scenes/enemies/flying_enemy/flying_enemy_movement.tres index 590d2836..a2fa3195 100644 --- a/scenes/enemies/flying_enemy/flying_enemy_movement.tres +++ b/scenes/enemies/flying_enemy/flying_enemy_movement.tres @@ -5,5 +5,6 @@ [resource] script = ExtResource("1_3yq0a") Speed = 3.0 +Acceleration = 5.0 TargetHeight = 10.0 metadata/_custom_type_script = "uid://dtpxijlnb2c5" diff --git a/scenes/enemies/grounded_enemy/grounded_enemy_knockback.tres b/scenes/enemies/grounded_enemy/grounded_enemy_knockback.tres index 729c8f94..47cf511c 100644 --- a/scenes/enemies/grounded_enemy/grounded_enemy_knockback.tres +++ b/scenes/enemies/grounded_enemy/grounded_enemy_knockback.tres @@ -4,5 +4,5 @@ [resource] script = ExtResource("1_vdia8") -Modifier = 100.0 +Modifier = 10.0 metadata/_custom_type_script = "uid://b44cse62qru7j" diff --git a/scenes/enemies/grounded_enemy/grounded_enemy_movement.tres b/scenes/enemies/grounded_enemy/grounded_enemy_movement.tres index fd7a1d24..ec4b4635 100644 --- a/scenes/enemies/grounded_enemy/grounded_enemy_movement.tres +++ b/scenes/enemies/grounded_enemy/grounded_enemy_movement.tres @@ -5,5 +5,6 @@ [resource] script = ExtResource("1_hsy8g") Speed = 5.0 -Acceleration = 10.0 +Acceleration = 3.0 +GravityModifier = 5.0 metadata/_custom_type_script = "uid://dtpxijlnb2c5" diff --git a/scenes/movement/CFlyingMovement.cs b/scenes/movement/CFlyingMovement.cs index f6648e96..f416dcd7 100644 --- a/scenes/movement/CFlyingMovement.cs +++ b/scenes/movement/CFlyingMovement.cs @@ -27,7 +27,7 @@ public partial class CFlyingMovement : Node3D, IMoveable // Check if we have a direct line of sight to the player if (!_movingToDesiredHeight) { - velocity = direction * RMovement.Speed; + velocity = velocity.Lerp(direction * RMovement.Speed, (float) inputs.delta * RMovement.Acceleration); var query = PhysicsRayQueryParameters3D.Create(GlobalPosition, target, TerrainCollision); var result = spaceState.IntersectRay(query); @@ -39,7 +39,7 @@ public partial class CFlyingMovement : Node3D, IMoveable } else { - velocity = _randomDirection * RMovement.Speed; + velocity = velocity.Lerp(_randomDirection * RMovement.Speed, (float) inputs.delta * RMovement.Acceleration); var groundQuery = PhysicsRayQueryParameters3D.Create(GlobalPosition, GlobalPosition+Vector3.Down*RMovement.TargetHeight, TerrainCollision); var groundResult = spaceState.IntersectRay(groundQuery); diff --git a/scenes/movement/CGroundedMovement.cs b/scenes/movement/CGroundedMovement.cs index 0c9523ef..0e713da4 100644 --- a/scenes/movement/CGroundedMovement.cs +++ b/scenes/movement/CGroundedMovement.cs @@ -27,7 +27,7 @@ public partial class CGroundedMovement : Node3D, IMoveable if (WallInFrontRayCast.IsColliding()) velocity.Y = RMovement.Speed; else if (!inputs.isOnFloor) - velocity += inputs.gravity * (float)inputs.delta; + velocity += inputs.gravity * (float)inputs.delta * RMovement.GravityModifier; return velocity; }