spawning
This commit is contained in:
@@ -5,5 +5,5 @@ namespace Movementtests.interfaces;
|
|||||||
public interface IDamageMaker
|
public interface IDamageMaker
|
||||||
{
|
{
|
||||||
[Export]
|
[Export]
|
||||||
RDamage GetDamageDealt { get; set; }
|
RDamage RDamage { get; set; }
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using Godot;
|
||||||
|
|
||||||
namespace Movementtests.interfaces;
|
namespace Movementtests.interfaces;
|
||||||
|
|
||||||
@@ -7,5 +8,9 @@ public interface IHealthable
|
|||||||
event Action<IHealthable, float> HealthChanged;
|
event Action<IHealthable, float> HealthChanged;
|
||||||
event Action<IHealthable> HealthDepleted;
|
event Action<IHealthable> HealthDepleted;
|
||||||
|
|
||||||
|
[Export] RHealth RHealth { get; set; }
|
||||||
|
|
||||||
|
float CurrentHealth { get; set; }
|
||||||
|
|
||||||
void ReduceHealth(IDamageable source, float amount);
|
void ReduceHealth(IDamageable source, float amount);
|
||||||
}
|
}
|
||||||
@@ -11,5 +11,6 @@ public record MovementInputs(
|
|||||||
|
|
||||||
public interface IMoveable
|
public interface IMoveable
|
||||||
{
|
{
|
||||||
|
[Export] RMovement RMovement { get; set; }
|
||||||
Vector3 ComputeVelocity(MovementInputs inputs);
|
Vector3 ComputeVelocity(MovementInputs inputs);
|
||||||
}
|
}
|
||||||
@@ -3,5 +3,5 @@ using Godot;
|
|||||||
|
|
||||||
interface ISpawnable
|
interface ISpawnable
|
||||||
{
|
{
|
||||||
void TestMethod();
|
void Setup();
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,20 @@
|
|||||||
[gd_scene load_steps=12 format=3 uid="uid://q7uc1h2jpbd2"]
|
[gd_scene load_steps=19 format=3 uid="uid://q7uc1h2jpbd2"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_62kkh"]
|
[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_62kkh"]
|
||||||
[ext_resource type="Material" uid="uid://31aulub2nqov" path="res://assets/greybox/m_greybox.tres" id="2_3uydm"]
|
[ext_resource type="Material" uid="uid://31aulub2nqov" path="res://assets/greybox/m_greybox.tres" id="2_3uydm"]
|
||||||
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://resource_definitions/RDamage.cs" id="2_sysok"]
|
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://resource_definitions/RDamage.cs" id="2_sysok"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/first_enemy/first_enemy.tscn" id="3_3uydm"]
|
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="3_3uydm"]
|
||||||
[ext_resource type="Script" uid="uid://b4cwruitopcee" path="res://resource_definitions/RDeathEffect.cs" id="5_7m3bq"]
|
[ext_resource type="Script" uid="uid://b4cwruitopcee" path="res://resource_definitions/RDeathEffect.cs" id="5_7m3bq"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy/flying_enemy.tscn" id="5_8fd2t"]
|
[ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy/flying_enemy.tscn" id="5_8fd2t"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c305mfrtumcyq" path="res://scenes/spawners/spawner.tscn" id="6_7m3bq"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bqq6uukbdfysr" path="res://scenes/enemies/grounded_enemy/grounded_enemy_movement.tres" id="7_caohq"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bohbojc68j7y1" path="res://scenes/enemies/grounded_enemy/grounded_enemy_health.tres" id="8_dmw1t"]
|
||||||
|
[ext_resource type="Resource" uid="uid://otfc2snh8umc" path="res://scenes/enemies/grounded_enemy/grounded_enemy_damage.tres" id="9_dmw1t"]
|
||||||
|
[ext_resource type="Resource" uid="uid://dgo65k2ceqfvy" path="res://scenes/enemies/flying_enemy/flying_enemy_damage.tres" id="9_gp7s3"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bwqjaom4k7rc3" path="res://scenes/enemies/flying_enemy/flying_enemy_movement.tres" id="10_spw1u"]
|
||||||
|
[ext_resource type="Resource" uid="uid://dg1xbjhyhgnnk" path="res://scenes/enemies/flying_enemy/flying_enemy_health.tres" id="11_2e4ci"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_gp7s3"]
|
[sub_resource type="Resource" id="Resource_2e4ci"]
|
||||||
script = ExtResource("2_sysok")
|
script = ExtResource("2_sysok")
|
||||||
DamageDealt = 10.0
|
DamageDealt = 10.0
|
||||||
metadata/_custom_type_script = "uid://jitubgv6judn"
|
metadata/_custom_type_script = "uid://jitubgv6judn"
|
||||||
@@ -43,7 +50,7 @@ metadata/_custom_type_script = "uid://b4cwruitopcee"
|
|||||||
[node name="Player" parent="." instance=ExtResource("1_62kkh")]
|
[node name="Player" parent="." instance=ExtResource("1_62kkh")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 7.5)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 7.5)
|
||||||
TutorialDone = true
|
TutorialDone = true
|
||||||
GetDamageDealt = SubResource("Resource_gp7s3")
|
RDamage = SubResource("Resource_2e4ci")
|
||||||
|
|
||||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
environment = SubResource("Environment_1bvp3")
|
environment = SubResource("Environment_1bvp3")
|
||||||
@@ -125,3 +132,19 @@ Target = NodePath("../Player")
|
|||||||
[node name="FlyingEnemy2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("5_8fd2t")]
|
[node name="FlyingEnemy2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("5_8fd2t")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 7, -16)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 7, -16)
|
||||||
Target = NodePath("../Player")
|
Target = NodePath("../Player")
|
||||||
|
|
||||||
|
[node name="GroundedSpawner" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("6_7m3bq")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 2.5, -15)
|
||||||
|
EnemyToSpawn = ExtResource("3_3uydm")
|
||||||
|
MovementInputs = ExtResource("7_caohq")
|
||||||
|
HealthInputs = ExtResource("8_dmw1t")
|
||||||
|
DamageInputs = ExtResource("9_dmw1t")
|
||||||
|
Target = NodePath("../Player")
|
||||||
|
|
||||||
|
[node name="FlyingSpawner" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("6_7m3bq")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18, 11, -14)
|
||||||
|
EnemyToSpawn = ExtResource("5_8fd2t")
|
||||||
|
MovementInputs = ExtResource("10_spw1u")
|
||||||
|
HealthInputs = ExtResource("11_2e4ci")
|
||||||
|
DamageInputs = ExtResource("9_gp7s3")
|
||||||
|
Target = NodePath("../Player")
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=40 format=3 uid="uid://dmkw8cmalm5k"]
|
[gd_scene load_steps=45 format=3 uid="uid://dmkw8cmalm5k"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_2vsi6"]
|
[ext_resource type="PackedScene" uid="uid://bei4nhkf8lwdo" path="res://player_controller/PlayerController.tscn" id="1_2vsi6"]
|
||||||
[ext_resource type="Script" uid="uid://blenis2y55fmg" path="res://tools/city_helpers.gd" id="1_qwuk2"]
|
[ext_resource type="Script" uid="uid://blenis2y55fmg" path="res://tools/city_helpers.gd" id="1_qwuk2"]
|
||||||
@@ -23,6 +23,10 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://cjh5cnvdbq5ku" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_button_b_outline.svg" id="19_efsse"]
|
[ext_resource type="Texture2D" uid="uid://cjh5cnvdbq5ku" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_button_b_outline.svg" id="19_efsse"]
|
||||||
[ext_resource type="Texture2D" uid="uid://nrhxjdpuje3f" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_lt_outline.svg" id="20_crf87"]
|
[ext_resource type="Texture2D" uid="uid://nrhxjdpuje3f" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_lt_outline.svg" id="20_crf87"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dyjvbsvbriii4" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_rb_outline.svg" id="23_p287n"]
|
[ext_resource type="Texture2D" uid="uid://dyjvbsvbriii4" path="res://assets/ui/input-prompts/Xbox Series/Vector/xbox_rb_outline.svg" id="23_p287n"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c305mfrtumcyq" path="res://scenes/spawners/spawner.tscn" id="24_qwuk2"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="25_nrosh"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cmlud1hwkd6sv" path="res://scenes/enemies/flying_enemy/flying_enemy.tscn" id="25_x7fl1"]
|
||||||
|
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://resource_definitions/RMovement.cs" id="26_lu3yt"]
|
||||||
|
|
||||||
[sub_resource type="LabelSettings" id="LabelSettings_2k3fr"]
|
[sub_resource type="LabelSettings" id="LabelSettings_2k3fr"]
|
||||||
font_size = 30
|
font_size = 30
|
||||||
@@ -89,6 +93,12 @@ adjustment_enabled = true
|
|||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_p287n"]
|
[sub_resource type="BoxMesh" id="BoxMesh_p287n"]
|
||||||
|
|
||||||
|
[sub_resource type="Resource" id="Resource_pxspk"]
|
||||||
|
script = ExtResource("26_lu3yt")
|
||||||
|
Speed = 7.0
|
||||||
|
TargetHeight = 15.0
|
||||||
|
metadata/_custom_type_script = "uid://dtpxijlnb2c5"
|
||||||
|
|
||||||
[node name="Main" type="Node3D"]
|
[node name="Main" type="Node3D"]
|
||||||
script = ExtResource("1_qwuk2")
|
script = ExtResource("1_qwuk2")
|
||||||
|
|
||||||
@@ -436,6 +446,17 @@ spot_range = 47.233
|
|||||||
spot_angle = 18.85
|
spot_angle = 18.85
|
||||||
spot_angle_attenuation = 10.556052
|
spot_angle_attenuation = 10.556052
|
||||||
|
|
||||||
|
[node name="Spawner" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("24_qwuk2")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19, 43, -111.5)
|
||||||
|
EnemyToSpawn = ExtResource("25_x7fl1")
|
||||||
|
MovementInputs = SubResource("Resource_pxspk")
|
||||||
|
Target = NodePath("../Player")
|
||||||
|
|
||||||
|
[node name="Spawner2" parent="." node_paths=PackedStringArray("Target") instance=ExtResource("24_qwuk2")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 31, 7.5, -88)
|
||||||
|
EnemyToSpawn = ExtResource("25_nrosh")
|
||||||
|
Target = NodePath("../Player")
|
||||||
|
|
||||||
[connection signal="timeout" from="TutorialController/WaitToShowBlockingTuto" to="TutorialController" method="_show_weapon_tutorial"]
|
[connection signal="timeout" from="TutorialController/WaitToShowBlockingTuto" to="TutorialController" method="_show_weapon_tutorial"]
|
||||||
[connection signal="body_exited" from="TutoTriggers/TriggerTutoMove" to="TutorialController" method="hide_tutorials"]
|
[connection signal="body_exited" from="TutoTriggers/TriggerTutoMove" to="TutorialController" method="hide_tutorials"]
|
||||||
[connection signal="body_entered" from="TutoTriggers/TriggerTutoMantle" to="TutorialController" method="_on_tuto_mantle_body_entered"]
|
[connection signal="body_entered" from="TutoTriggers/TriggerTutoMantle" to="TutorialController" method="_on_tuto_mantle_body_entered"]
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
[gd_scene load_steps=56 format=3 uid="uid://bei4nhkf8lwdo"]
|
[gd_scene load_steps=54 format=3 uid="uid://bei4nhkf8lwdo"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://player_controller/Scripts/PlayerController.cs" id="1_poq2x"]
|
[ext_resource type="Script" uid="uid://bbbrf5ckydfna" path="res://player_controller/Scripts/PlayerController.cs" id="1_poq2x"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cf3rrgr1imvv4" path="res://scenes/path/path.tscn" id="2_6lejt"]
|
[ext_resource type="PackedScene" uid="uid://cf3rrgr1imvv4" path="res://scenes/path/path.tscn" id="2_6lejt"]
|
||||||
[ext_resource type="Script" uid="uid://jitubgv6judn" path="res://resource_definitions/RDamage.cs" id="2_q14ux"]
|
|
||||||
[ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://systems/inputs/base_mode/base_mode.tres" id="3_cresl"]
|
[ext_resource type="Resource" uid="uid://bl5crtu1gkrtr" path="res://systems/inputs/base_mode/base_mode.tres" id="3_cresl"]
|
||||||
[ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/damage/CDamageable.cs" id="4_q7bng"]
|
[ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/damage/CDamageable.cs" id="4_q7bng"]
|
||||||
[ext_resource type="Resource" uid="uid://cpdaw41ah5gic" path="res://systems/inputs/base_mode/rotate_y.tres" id="4_rxwoh"]
|
[ext_resource type="Resource" uid="uid://cpdaw41ah5gic" path="res://systems/inputs/base_mode/rotate_y.tres" id="4_rxwoh"]
|
||||||
@@ -46,11 +45,6 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://chvt6g0xn5c2m" path="res://systems/dash/light-ring.jpg" id="32_lgpc8"]
|
[ext_resource type="Texture2D" uid="uid://chvt6g0xn5c2m" path="res://systems/dash/light-ring.jpg" id="32_lgpc8"]
|
||||||
[ext_resource type="Script" uid="uid://b4dwolbvt8our" path="res://addons/godot_state_charts/history_state.gd" id="41_ruloh"]
|
[ext_resource type="Script" uid="uid://b4dwolbvt8our" path="res://addons/godot_state_charts/history_state.gd" id="41_ruloh"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_m8gvy"]
|
|
||||||
script = ExtResource("2_q14ux")
|
|
||||||
DamageDealt = 3.0
|
|
||||||
metadata/_custom_type_script = "uid://jitubgv6judn"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_jb43f"]
|
[sub_resource type="Resource" id="Resource_jb43f"]
|
||||||
script = ExtResource("5_q7bng")
|
script = ExtResource("5_q7bng")
|
||||||
Modifier = 3.0
|
Modifier = 3.0
|
||||||
@@ -88,7 +82,6 @@ blend_mode = 1
|
|||||||
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("CDamage")]
|
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("CDamage")]
|
||||||
collision_mask = 272
|
collision_mask = 272
|
||||||
script = ExtResource("1_poq2x")
|
script = ExtResource("1_poq2x")
|
||||||
GetDamageDealt = SubResource("Resource_m8gvy")
|
|
||||||
CDamage = NodePath("CDamageable")
|
CDamage = NodePath("CDamageable")
|
||||||
WalkSpeed = 7.5
|
WalkSpeed = 7.5
|
||||||
AccelerationFloor = 4.0
|
AccelerationFloor = 4.0
|
||||||
@@ -335,6 +328,7 @@ offset_left = 1524.0
|
|||||||
offset_top = 1.0
|
offset_top = 1.0
|
||||||
offset_right = -8.0
|
offset_right = -8.0
|
||||||
offset_bottom = 1.0
|
offset_bottom = 1.0
|
||||||
|
enabled = false
|
||||||
initial_node_to_watch = NodePath("../StateChart")
|
initial_node_to_watch = NodePath("../StateChart")
|
||||||
|
|
||||||
[node name="UI" type="Control" parent="."]
|
[node name="UI" type="Control" parent="."]
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
|
|||||||
[ExportCategory("Combat")]
|
[ExportCategory("Combat")]
|
||||||
[ExportGroup("Damage")]
|
[ExportGroup("Damage")]
|
||||||
[Export]
|
[Export]
|
||||||
public RDamage GetDamageDealt { get; set; }
|
public RDamage RDamage { get; set; }
|
||||||
[Export]
|
[Export]
|
||||||
public CDamageable CDamage { get; set; }
|
public CDamageable CDamage { get; set; }
|
||||||
|
|
||||||
@@ -1757,7 +1757,7 @@ public partial class PlayerController : CharacterBody3D, IDamageable, IKnockback
|
|||||||
foreach (var body in bodies)
|
foreach (var body in bodies)
|
||||||
{
|
{
|
||||||
if(body is IDamageable spawnable)
|
if(body is IDamageable spawnable)
|
||||||
spawnable.TakeDamage(GetDamageDealt);
|
spawnable.TakeDamage(RDamage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,27 +3,33 @@ using Godot;
|
|||||||
using Movementtests.interfaces;
|
using Movementtests.interfaces;
|
||||||
|
|
||||||
[GlobalClass]
|
[GlobalClass]
|
||||||
public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealthable, IKillable
|
public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealthable, IKillable, IMoveable
|
||||||
{
|
{
|
||||||
public event Action<IDamageable, float> DamageTaken;
|
public event Action<IDamageable, float> DamageTaken;
|
||||||
|
|
||||||
public event Action<IHealthable, float> HealthChanged;
|
public event Action<IHealthable, float> HealthChanged;
|
||||||
public event Action<IHealthable> HealthDepleted;
|
public event Action<IHealthable> HealthDepleted;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Node3D Target { get; set; }
|
public Node3D Target { get; set; }
|
||||||
|
|
||||||
[Export]
|
|
||||||
public RDamage GetDamageDealt { get; set; }
|
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Node CHealth { get; set; }
|
public Node CHealth { get; set; }
|
||||||
|
[Export]
|
||||||
|
public RHealth RHealth { get; set; }
|
||||||
|
|
||||||
|
public float CurrentHealth { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Node CDamage { get; set; }
|
public Node CDamage { get; set; }
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public RDamage RDamage { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Node CMovement { get; set; }
|
public Node CMovement { get; set; }
|
||||||
|
[Export]
|
||||||
|
public RMovement RMovement { get; set; }
|
||||||
|
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public RDeathEffect[] DeathEffects { get; set; }
|
public RDeathEffect[] DeathEffects { get; set; }
|
||||||
@@ -39,13 +45,21 @@ public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealth
|
|||||||
if (CHealth is IHealthable healthable) healthable.HealthDepleted += Kill;
|
if (CHealth is IHealthable healthable) healthable.HealthDepleted += Kill;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Setup()
|
||||||
|
{
|
||||||
|
if (CMovement is IMoveable moveable && RMovement != null) moveable.RMovement = RMovement;
|
||||||
|
if (CHealth is IHealthable healthable && RHealth != null)
|
||||||
|
{
|
||||||
|
healthable.RHealth = RHealth;
|
||||||
|
healthable.CurrentHealth = RHealth.StartingHealth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override void _PhysicsProcess(double delta)
|
public override void _PhysicsProcess(double delta)
|
||||||
{
|
{
|
||||||
var targetPlanar = new Vector3(Target.GlobalPosition.X, GlobalPosition.Y, Target.GlobalPosition.Z);
|
var targetPlanar = new Vector3(Target.GlobalPosition.X, GlobalPosition.Y, Target.GlobalPosition.Z);
|
||||||
LookAt(targetPlanar);
|
LookAt(targetPlanar);
|
||||||
|
|
||||||
if (CMovement is not IMoveable movement) return;
|
|
||||||
|
|
||||||
var inputs = new MovementInputs(
|
var inputs = new MovementInputs(
|
||||||
Velocity: Velocity,
|
Velocity: Velocity,
|
||||||
TargetLocation: Target.GlobalPosition,
|
TargetLocation: Target.GlobalPosition,
|
||||||
@@ -53,15 +67,21 @@ public partial class Enemy : CharacterBody3D, IDamageable, IDamageMaker, IHealth
|
|||||||
gravity: GetGravity(),
|
gravity: GetGravity(),
|
||||||
delta: delta
|
delta: delta
|
||||||
);
|
);
|
||||||
Velocity = movement!.ComputeVelocity(inputs);
|
Velocity = ComputeVelocity(inputs);
|
||||||
MoveAndSlide();
|
MoveAndSlide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Vector3 ComputeVelocity(MovementInputs inputs)
|
||||||
|
{
|
||||||
|
if (CMovement is not IMoveable movement) return Vector3.Zero;
|
||||||
|
return movement!.ComputeVelocity(inputs);
|
||||||
|
}
|
||||||
|
|
||||||
public void OnDamageBoxTriggered(Node3D body)
|
public void OnDamageBoxTriggered(Node3D body)
|
||||||
{
|
{
|
||||||
GD.Print("Take this!");
|
GD.Print("Take this!");
|
||||||
if (body is not IDamageable damageable) return;
|
if (body is not IDamageable damageable) return;
|
||||||
damageable.TakeDamage(GetDamageDealt);
|
damageable.TakeDamage(RDamage);
|
||||||
}
|
}
|
||||||
|
|
||||||
public float TakeDamage(RDamage damage)
|
public float TakeDamage(RDamage damage)
|
||||||
|
|||||||
@@ -2,18 +2,14 @@
|
|||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bn7sc6id7n166" path="res://scenes/enemies/Enemy.cs" id="1_q8l7o"]
|
[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"]
|
[ext_resource type="Script" uid="uid://b6y3ugfydvch0" path="res://resource_definitions/RDamageModifier.cs" id="2_1bsgx"]
|
||||||
|
[ext_resource type="Resource" uid="uid://dg1xbjhyhgnnk" path="res://scenes/enemies/flying_enemy/flying_enemy_health.tres" id="2_ma2bq"]
|
||||||
[ext_resource type="Resource" uid="uid://dgo65k2ceqfvy" path="res://scenes/enemies/flying_enemy/flying_enemy_damage.tres" id="2_on7rt"]
|
[ext_resource type="Resource" uid="uid://dgo65k2ceqfvy" path="res://scenes/enemies/flying_enemy/flying_enemy_damage.tres" id="2_on7rt"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bwqjaom4k7rc3" path="res://scenes/enemies/flying_enemy/flying_enemy_movement.tres" id="4_dejyg"]
|
||||||
[ext_resource type="Script" uid="uid://bjwrpv3jpsc1e" path="res://scenes/health/CHealth.cs" id="4_ys4jv"]
|
[ext_resource type="Script" uid="uid://bjwrpv3jpsc1e" path="res://scenes/health/CHealth.cs" id="4_ys4jv"]
|
||||||
[ext_resource type="Script" uid="uid://baiapod3csndf" path="res://resource_definitions/RHealth.cs" id="5_irbqc"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dmw5ibwrb483f" path="res://scenes/movement/CFlyingMovement.tscn" id="7_vaeds"]
|
[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://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="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/damage/CDamageable.cs" id="8_uotso"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_aarbi"]
|
|
||||||
script = ExtResource("5_irbqc")
|
|
||||||
StartingHealth = 50.0
|
|
||||||
metadata/_custom_type_script = "uid://baiapod3csndf"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_jnv07"]
|
[sub_resource type="Resource" id="Resource_jnv07"]
|
||||||
script = ExtResource("2_1bsgx")
|
script = ExtResource("2_1bsgx")
|
||||||
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
|
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
|
||||||
@@ -50,15 +46,17 @@ collision_layer = 16
|
|||||||
collision_mask = 273
|
collision_mask = 273
|
||||||
motion_mode = 1
|
motion_mode = 1
|
||||||
script = ExtResource("1_q8l7o")
|
script = ExtResource("1_q8l7o")
|
||||||
GetDamageDealt = ExtResource("2_on7rt")
|
|
||||||
CHealth = NodePath("CHealth")
|
CHealth = NodePath("CHealth")
|
||||||
|
RHealth = ExtResource("2_ma2bq")
|
||||||
CDamage = NodePath("CDamageable")
|
CDamage = NodePath("CDamageable")
|
||||||
|
RDamage = ExtResource("2_on7rt")
|
||||||
CMovement = NodePath("CFlyingMovement")
|
CMovement = NodePath("CFlyingMovement")
|
||||||
|
RMovement = ExtResource("4_dejyg")
|
||||||
DeathEffects = Array[Object]([])
|
DeathEffects = Array[Object]([])
|
||||||
|
|
||||||
[node name="CHealth" type="Node" parent="."]
|
[node name="CHealth" type="Node" parent="."]
|
||||||
script = ExtResource("4_ys4jv")
|
script = ExtResource("4_ys4jv")
|
||||||
HealthResource = SubResource("Resource_aarbi")
|
RHealth = ExtResource("2_ma2bq")
|
||||||
metadata/_custom_type_script = "uid://bjwrpv3jpsc1e"
|
metadata/_custom_type_script = "uid://bjwrpv3jpsc1e"
|
||||||
|
|
||||||
[node name="CDamageable" type="Node" parent="."]
|
[node name="CDamageable" type="Node" parent="."]
|
||||||
|
|||||||
9
scenes/enemies/flying_enemy/flying_enemy_movement.tres
Normal file
9
scenes/enemies/flying_enemy/flying_enemy_movement.tres
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
[gd_resource type="Resource" script_class="RMovement" load_steps=2 format=3 uid="uid://bwqjaom4k7rc3"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://resource_definitions/RMovement.cs" id="1_3yq0a"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_3yq0a")
|
||||||
|
Speed = 3.0
|
||||||
|
TargetHeight = 10.0
|
||||||
|
metadata/_custom_type_script = "uid://dtpxijlnb2c5"
|
||||||
@@ -1,18 +1,15 @@
|
|||||||
[gd_scene load_steps=17 format=3 uid="uid://dxt0e2ugmttqq"]
|
[gd_scene load_steps=17 format=3 uid="uid://dxt0e2ugmttqq"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bn7sc6id7n166" path="res://scenes/enemies/Enemy.cs" id="1_r6506"]
|
[ext_resource type="Script" uid="uid://bn7sc6id7n166" path="res://scenes/enemies/Enemy.cs" id="1_r6506"]
|
||||||
[ext_resource type="Resource" uid="uid://otfc2snh8umc" path="res://scenes/enemies/first_enemy/first_enemy_damage.tres" id="2_6d4gl"]
|
[ext_resource type="Resource" uid="uid://otfc2snh8umc" path="res://scenes/enemies/grounded_enemy/grounded_enemy_damage.tres" id="2_bn56u"]
|
||||||
[ext_resource type="Script" uid="uid://bjwrpv3jpsc1e" path="res://scenes/health/CHealth.cs" id="2_gsmti"]
|
[ext_resource type="Script" uid="uid://bjwrpv3jpsc1e" path="res://scenes/health/CHealth.cs" id="2_gsmti"]
|
||||||
[ext_resource type="Script" uid="uid://b6y3ugfydvch0" path="res://resource_definitions/RDamageModifier.cs" id="2_r3cnf"]
|
[ext_resource type="Script" uid="uid://b6y3ugfydvch0" path="res://resource_definitions/RDamageModifier.cs" id="2_r3cnf"]
|
||||||
[ext_resource type="Script" uid="uid://baiapod3csndf" path="res://resource_definitions/RHealth.cs" id="3_pvbr4"]
|
[ext_resource type="Resource" uid="uid://bohbojc68j7y1" path="res://scenes/enemies/grounded_enemy/grounded_enemy_health.tres" id="2_w4lm8"]
|
||||||
|
[ext_resource type="Resource" uid="uid://bqq6uukbdfysr" path="res://scenes/enemies/grounded_enemy/grounded_enemy_movement.tres" id="4_na24f"]
|
||||||
[ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/damage/CDamageable.cs" id="7_1tw73"]
|
[ext_resource type="Script" uid="uid://b0u23nkpaimyc" path="res://scenes/damage/CDamageable.cs" id="7_1tw73"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dbr7ioio158ew" path="res://scenes/movement/CGroundedMovement.tscn" id="7_qyswd"]
|
[ext_resource type="PackedScene" uid="uid://dbr7ioio158ew" path="res://scenes/movement/CGroundedMovement.tscn" id="7_qyswd"]
|
||||||
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://resource_definitions/RMovement.cs" id="8_6d4gl"]
|
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://resource_definitions/RMovement.cs" id="8_6d4gl"]
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_r3cnf"]
|
|
||||||
script = ExtResource("3_pvbr4")
|
|
||||||
metadata/_custom_type_script = "uid://baiapod3csndf"
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_qj0ob"]
|
[sub_resource type="Resource" id="Resource_qj0ob"]
|
||||||
script = ExtResource("2_r3cnf")
|
script = ExtResource("2_r3cnf")
|
||||||
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
|
metadata/_custom_type_script = "uid://b6y3ugfydvch0"
|
||||||
@@ -38,19 +35,21 @@ albedo_color = Color(0.06469653, 0.06469653, 0.06469653, 1)
|
|||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_4yfjf"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_4yfjf"]
|
||||||
size = Vector3(1, 2, 2)
|
size = Vector3(1, 2, 2)
|
||||||
|
|
||||||
[node name="FirstEnemy" type="CharacterBody3D" node_paths=PackedStringArray("CHealth", "CDamage", "CMovement")]
|
[node name="GroundedEnemy" type="CharacterBody3D" node_paths=PackedStringArray("CHealth", "CDamage", "CMovement")]
|
||||||
collision_layer = 16
|
collision_layer = 16
|
||||||
collision_mask = 273
|
collision_mask = 273
|
||||||
script = ExtResource("1_r6506")
|
script = ExtResource("1_r6506")
|
||||||
GetDamageDealt = ExtResource("2_6d4gl")
|
|
||||||
CHealth = NodePath("CHealth")
|
CHealth = NodePath("CHealth")
|
||||||
|
RHealth = ExtResource("2_w4lm8")
|
||||||
CDamage = NodePath("CDamageable")
|
CDamage = NodePath("CDamageable")
|
||||||
|
RDamage = ExtResource("2_bn56u")
|
||||||
CMovement = NodePath("CGroundedMovement")
|
CMovement = NodePath("CGroundedMovement")
|
||||||
|
RMovement = ExtResource("4_na24f")
|
||||||
DeathEffects = Array[Object]([])
|
DeathEffects = Array[Object]([])
|
||||||
|
|
||||||
[node name="CHealth" type="Node" parent="."]
|
[node name="CHealth" type="Node" parent="."]
|
||||||
script = ExtResource("2_gsmti")
|
script = ExtResource("2_gsmti")
|
||||||
HealthResource = SubResource("Resource_r3cnf")
|
RHealth = ExtResource("2_w4lm8")
|
||||||
metadata/_custom_type_script = "uid://bjwrpv3jpsc1e"
|
metadata/_custom_type_script = "uid://bjwrpv3jpsc1e"
|
||||||
|
|
||||||
[node name="CDamageable" type="Node" parent="."]
|
[node name="CDamageable" type="Node" parent="."]
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
[gd_resource type="Resource" script_class="RMovement" load_steps=2 format=3 uid="uid://bqq6uukbdfysr"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://dtpxijlnb2c5" path="res://resource_definitions/RMovement.cs" id="1_hsy8g"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_hsy8g")
|
||||||
|
Speed = 5.0
|
||||||
|
metadata/_custom_type_script = "uid://dtpxijlnb2c5"
|
||||||
@@ -9,17 +9,18 @@ public partial class CHealth : Node, IHealthable
|
|||||||
public event Action<IHealthable> HealthDepleted;
|
public event Action<IHealthable> HealthDepleted;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public RHealth HealthResource;
|
public RHealth RHealth { get; set; }
|
||||||
|
|
||||||
public float CurrentHealth { get; set; }
|
public float CurrentHealth { get; set; }
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
CurrentHealth = HealthResource.StartingHealth;
|
CurrentHealth = RHealth.StartingHealth;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ReduceHealth(IDamageable source, float amount)
|
public void ReduceHealth(IDamageable source, float amount)
|
||||||
{
|
{
|
||||||
|
GD.Print(CurrentHealth);
|
||||||
CurrentHealth -= amount;
|
CurrentHealth -= amount;
|
||||||
HealthChanged?.Invoke(this, CurrentHealth);
|
HealthChanged?.Invoke(this, CurrentHealth);
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ namespace Movementtests.scenes.movement;
|
|||||||
|
|
||||||
public partial class CFlyingMovement : Node3D, IMoveable
|
public partial class CFlyingMovement : Node3D, IMoveable
|
||||||
{
|
{
|
||||||
[Export] public RMovement RMovement;
|
[Export] public RMovement RMovement { get; set; }
|
||||||
|
|
||||||
[Export(PropertyHint.Layers3DPhysics)]
|
[Export(PropertyHint.Layers3DPhysics)]
|
||||||
public uint TerrainCollision { get; set; } = 1;
|
public uint TerrainCollision { get; set; } = 1;
|
||||||
@@ -15,7 +15,6 @@ public partial class CFlyingMovement : Node3D, IMoveable
|
|||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
|
|
||||||
_randomDirection = new Vector3(GD.RandRange(-1, 1), 1, GD.RandRange(-1, 1)).Normalized();
|
_randomDirection = new Vector3(GD.RandRange(-1, 1), 1, GD.RandRange(-1, 1)).Normalized();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ namespace Movementtests.scenes.movement;
|
|||||||
|
|
||||||
public partial class CGroundedMovement : Node3D, IMoveable
|
public partial class CGroundedMovement : Node3D, IMoveable
|
||||||
{
|
{
|
||||||
[Export] public RMovement RMovement;
|
[Export] public RMovement RMovement { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public RayCast3D WallInFrontRayCast { get; set; }
|
public RayCast3D WallInFrontRayCast { get; set; }
|
||||||
|
|||||||
@@ -4,10 +4,15 @@ using System;
|
|||||||
public partial class Spawner : Node3D
|
public partial class Spawner : Node3D
|
||||||
{
|
{
|
||||||
[Export(PropertyHint.NodeType)]
|
[Export(PropertyHint.NodeType)]
|
||||||
public PackedScene SceneToSpawn { get; set; }
|
public PackedScene EnemyToSpawn { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Resource Inputs;
|
public RMovement MovementInputs { get; set; }
|
||||||
|
[Export]
|
||||||
|
public RHealth HealthInputs { get; set; }
|
||||||
|
[Export]
|
||||||
|
public RDamage DamageInputs { get; set; }
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Node3D Target { get; set; }
|
public Node3D Target { get; set; }
|
||||||
|
|
||||||
@@ -35,13 +40,16 @@ public partial class Spawner : Node3D
|
|||||||
|
|
||||||
public void Spawn()
|
public void Spawn()
|
||||||
{
|
{
|
||||||
if (SceneToSpawn == null || !SceneToSpawn.CanInstantiate()) return;
|
if (EnemyToSpawn == null || !EnemyToSpawn.CanInstantiate()) return;
|
||||||
|
|
||||||
var spawnedInstance = SceneToSpawn.Instantiate() as Enemy;
|
if (EnemyToSpawn.Instantiate() is not Enemy spawnedInstance) return;
|
||||||
if (spawnedInstance == null) return;
|
|
||||||
|
|
||||||
// spawnedInstance.Inputs = Inputs as EnemyInitInputs;
|
|
||||||
spawnedInstance.Target = Target;
|
spawnedInstance.Target = Target;
|
||||||
|
spawnedInstance.RMovement = MovementInputs;
|
||||||
|
spawnedInstance.RDamage = DamageInputs;
|
||||||
|
spawnedInstance.RHealth = HealthInputs;
|
||||||
|
spawnedInstance.Setup();
|
||||||
|
|
||||||
GetTree().GetCurrentScene().AddChild(spawnedInstance);
|
GetTree().GetCurrentScene().AddChild(spawnedInstance);
|
||||||
spawnedInstance.GlobalPosition = GlobalPosition;
|
spawnedInstance.GlobalPosition = GlobalPosition;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://c305mfrtumcyq"]
|
[gd_scene load_steps=3 format=3 uid="uid://c305mfrtumcyq"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://djyspwixi01j5" path="res://scenes/spawners/Spawner.cs" id="1_2otbo"]
|
[ext_resource type="Script" uid="uid://djyspwixi01j5" path="res://scenes/spawners/Spawner.cs" id="1_2otbo"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/first_enemy/first_enemy.tscn" id="2_2otbo"]
|
[ext_resource type="PackedScene" uid="uid://dxt0e2ugmttqq" path="res://scenes/enemies/grounded_enemy/grounded_enemy.tscn" id="2_2otbo"]
|
||||||
|
|
||||||
[node name="Spawner" type="Node3D"]
|
[node name="Spawner" type="Node3D"]
|
||||||
script = ExtResource("1_2otbo")
|
script = ExtResource("1_2otbo")
|
||||||
|
|||||||
Reference in New Issue
Block a user