Fix collision with player

This commit is contained in:
2023-09-11 00:43:22 -07:00
parent 51307c0d40
commit cb1cad1271
14 changed files with 65 additions and 63 deletions

View File

@@ -7,6 +7,8 @@ public partial class FireAtPlayer : Timer
private BasicEnemy _enemy;
[Export]
private PackedScene _fireProjectile;
[Export]
private double _distanceToPlayer = 3;
public void OnFireAtPlayer()
{
@@ -15,10 +17,13 @@ public partial class FireAtPlayer : Timer
{
var convertedPlayers = players.Select(x => (Node3D)x);
var target = convertedPlayers.OrderBy(x => _enemy.Position.DistanceTo(x.Position)).FirstOrDefault();
var projectile = _fireProjectile.Instantiate<Projectile>() as EnemyBullet;
projectile.Rotation = new Vector3(0, _enemy.Rotation.Y, 0);
projectile.Position = _enemy.Position;
AddChild(projectile);
if (_enemy.Position.DistanceTo(target.Position) < _distanceToPlayer)
{
var projectile = _fireProjectile.Instantiate<Projectile>() as EnemyBullet;
projectile.Rotation = new Vector3(0, _enemy.Rotation.Y, 0);
projectile.Position = _enemy.Position;
AddChild(projectile);
}
}
}
}

View File

@@ -160,7 +160,7 @@ skeleton = NodePath("")
[node name="StaticBody3D" type="RigidBody3D" parent="."]
transform = Transform3D(-1, 7.54979e-08, -7.54979e-08, -7.54979e-08, 0, 1, 7.54979e-08, 1, 0, -2.58153, 0, -1.66413)
collision_layer = 0
collision_mask = 8
collision_mask = 72
continuous_cd = true
max_contacts_reported = 1
contact_monitor = true

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=49 format=3 uid="uid://bt5rolsyjmx55"]
[gd_scene load_steps=48 format=3 uid="uid://bt5rolsyjmx55"]
[ext_resource type="Script" path="res://Enemies/Scripts/MeleeEnemy.cs" id="1_50och"]
[ext_resource type="PackedScene" uid="uid://b1j0g6ikmnibm" path="res://Enemies/HPComponent.tscn" id="2_1leby"]
@@ -1174,13 +1174,16 @@ _data = {
"Animation": SubResource("Animation_xyhqi")
}
[sub_resource type="BoxShape3D" id="BoxShape3D_1kyxx"]
size = Vector3(0.540778, 1.5012, 0.644069)
[node name="Melee Enemy" type="CharacterBody3D" node_paths=PackedStringArray("_hp") groups=["Enemy"]]
[node name="Melee Enemy" type="RigidBody3D" node_paths=PackedStringArray("_hp") groups=["Enemy"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.251952, 0)
collision_layer = 0
collision_mask = 4
collision_mask = 69
gravity_scale = 0.0
max_contacts_reported = 20
contact_monitor = true
can_sleep = false
freeze = true
freeze_mode = 1
script = ExtResource("1_50och")
_hp = NodePath("HP Component")
@@ -1250,16 +1253,4 @@ libraries = {
[node name="HP Component" parent="." instance=ExtResource("2_1leby")]
MaximumHP = 1
[node name="RigidBody3D" type="RigidBody3D" parent="."]
collision_layer = 2
collision_mask = 3
gravity_scale = 0.0
continuous_cd = true
max_contacts_reported = 20
contact_monitor = true
can_sleep = false
freeze = true
[node name="CollisionShape3D" type="CollisionShape3D" parent="RigidBody3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0726432, 0.732257, 0.127868)
shape = SubResource("BoxShape3D_1kyxx")
[connection signal="body_entered" from="." to="." method="OnPlayerHit"]

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=60 format=3 uid="uid://dahp73fwld24h"]
[gd_scene load_steps=59 format=3 uid="uid://dahp73fwld24h"]
[ext_resource type="Script" path="res://Enemies/Scripts/RangedEnemy.cs" id="1_01lvj"]
[ext_resource type="PackedScene" uid="uid://rlxnnw4yay7e" path="res://Enemies/Attacks/EnemyBullet.tscn" id="3_qenx3"]
@@ -891,29 +891,31 @@ _surfaces = [{
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_j7wsk")
[sub_resource type="BoxShape3D" id="BoxShape3D_wt0ss"]
size = Vector3(0.721796, 2.37333, 0.564825)
[node name="RangedEnemy" type="CharacterBody3D" node_paths=PackedStringArray("_hp") groups=["Enemy"]]
[node name="RangedEnemy" type="RigidBody3D" node_paths=PackedStringArray("_hp") groups=["Enemy"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.257979, 0)
collision_layer = 0
collision_mask = 5
collision_mask = 69
max_contacts_reported = 20
contact_monitor = true
can_sleep = false
freeze = true
freeze_mode = 1
script = ExtResource("1_01lvj")
_hp = NodePath("HP Component")
[node name="Timer" type="Timer" parent="." node_paths=PackedStringArray("_enemy")]
wait_time = 3.0
autostart = true
script = ExtResource("3_qt2md")
_enemy = NodePath("..")
_fireProjectile = ExtResource("3_qenx3")
_distanceToPlayer = 5.0
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0714533, 0.795379, 0.0138905)
shape = SubResource("BoxShape3D_dm3u7")
[node name="ranged enemy" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0.5, 0)
[node name="Cube" type="MeshInstance3D" parent="ranged enemy"]
transform = Transform3D(0.323408, 0, 0, 0, 0.323408, 0, 0, 0, 0.323408, -0.0862004, 0.632917, -0.0732053)
@@ -1062,19 +1064,5 @@ skeleton = NodePath("")
[node name="HP Component" parent="." instance=ExtResource("4_1vt55")]
MaximumHP = 1
[node name="RigidBody3D" type="RigidBody3D" parent="."]
collision_layer = 0
collision_mask = 3
gravity_scale = 0.0
continuous_cd = true
max_contacts_reported = 20
contact_monitor = true
can_sleep = false
freeze = true
[node name="CollisionShape3D" type="CollisionShape3D" parent="RigidBody3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0734575, 0.791657, 0)
shape = SubResource("BoxShape3D_wt0ss")
[connection signal="body_entered" from="." to="." method="OnPlayerHit"]
[connection signal="timeout" from="Timer" to="Timer" method="OnFireAtPlayer"]
[connection signal="body_entered" from="RigidBody3D" to="." method="OnPlayerHit"]

View File

@@ -10,10 +10,18 @@ public partial class GodCircuit : Node3D
private void OnHit(Node3D node)
{
GD.Print("Hit");
_animationPlayer.Play("OnHit");
var hpComponent = GetNode<HealthPoints>("HP Component");
hpComponent.TakeDamage(800000);
EmitSignal(SignalName.OnEnemyBossHit, hpComponent.CurrentHP);
if (node is Character character && character.HasMethod(Character.MethodName.OnHit))
{
GD.Print("Player hit: " + character.Name);
character.Call(Character.MethodName.OnHit, node);
}
else
{
GD.Print("Hit");
_animationPlayer.Play("OnHit");
var hpComponent = GetNode<HealthPoints>("HP Component");
hpComponent.TakeDamage(800000);
EmitSignal(SignalName.OnEnemyBossHit, hpComponent.CurrentHP);
}
}
}

View File

@@ -5,6 +5,9 @@ public partial class MeleeEnemy : BasicEnemy
{
[Export]
private float _speed = 0.4f;
private bool _targetingPlayer = false;
[Export]
private double _distanceToPlayer = 3;
public override void _PhysicsProcess(double delta)
{
@@ -13,8 +16,12 @@ public partial class MeleeEnemy : BasicEnemy
{
var convertedPlayers = players.Select(x => (Node3D)x);
var target = convertedPlayers.OrderBy(x => Position.DistanceTo(x.Position)).FirstOrDefault();
Position = Position.MoveToward(target.Position, _speed * (float)delta);
LookAt(-target.Position, Vector3.Up);
if (_targetingPlayer || Position.DistanceTo(target.Position) < _distanceToPlayer)
{
Position = Position.MoveToward(target.Position, _speed * (float)delta);
LookAt(-target.Position, Vector3.Up);
_targetingPlayer = true;
}
}
}
}