From cb1cad1271708ced6074eb015449682a8ab0961f Mon Sep 17 00:00:00 2001 From: Zenny Date: Mon, 11 Sep 2023 00:43:22 -0700 Subject: [PATCH] Fix collision with player --- Enemies/Attacks/FireAtPlayer.cs | 13 ++++--- Enemies/GodCircuit.tscn | 2 +- Enemies/MeleeEnemy.tscn | 29 ++++++---------- Enemies/RangedEnemy.tscn | 34 ++++++------------- Enemies/Scripts/GodCircuit.cs | 18 +++++++--- Enemies/Scripts/MeleeEnemy.cs | 11 ++++-- Player/Capricorn/Attacks/CapricornLaser.tscn | 4 +-- .../Attacks/CapricornLaserAltFire.tscn | 2 +- Player/Capricorn/Capricorn.tscn | 2 +- Player/Pisces/Attacks/Single.tscn | 2 +- Player/Pisces/Pisces.tscn | 3 +- Player/Sagittarius/Sagittarius.tscn | 3 +- Player/Scorpio/Scorpio.tscn | 3 +- project.godot | 2 +- 14 files changed, 65 insertions(+), 63 deletions(-) diff --git a/Enemies/Attacks/FireAtPlayer.cs b/Enemies/Attacks/FireAtPlayer.cs index 8931b05..df604bf 100644 --- a/Enemies/Attacks/FireAtPlayer.cs +++ b/Enemies/Attacks/FireAtPlayer.cs @@ -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() 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() as EnemyBullet; + projectile.Rotation = new Vector3(0, _enemy.Rotation.Y, 0); + projectile.Position = _enemy.Position; + AddChild(projectile); + } } } } diff --git a/Enemies/GodCircuit.tscn b/Enemies/GodCircuit.tscn index 463c44d..8b4547d 100644 --- a/Enemies/GodCircuit.tscn +++ b/Enemies/GodCircuit.tscn @@ -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 diff --git a/Enemies/MeleeEnemy.tscn b/Enemies/MeleeEnemy.tscn index 0708b4a..c30819b 100644 --- a/Enemies/MeleeEnemy.tscn +++ b/Enemies/MeleeEnemy.tscn @@ -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"] diff --git a/Enemies/RangedEnemy.tscn b/Enemies/RangedEnemy.tscn index ec24334..4d810bf 100644 --- a/Enemies/RangedEnemy.tscn +++ b/Enemies/RangedEnemy.tscn @@ -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"] diff --git a/Enemies/Scripts/GodCircuit.cs b/Enemies/Scripts/GodCircuit.cs index c395c6b..7a457e9 100644 --- a/Enemies/Scripts/GodCircuit.cs +++ b/Enemies/Scripts/GodCircuit.cs @@ -10,10 +10,18 @@ public partial class GodCircuit : Node3D private void OnHit(Node3D node) { - GD.Print("Hit"); - _animationPlayer.Play("OnHit"); - var hpComponent = GetNode("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("HP Component"); + hpComponent.TakeDamage(800000); + EmitSignal(SignalName.OnEnemyBossHit, hpComponent.CurrentHP); + } } } diff --git a/Enemies/Scripts/MeleeEnemy.cs b/Enemies/Scripts/MeleeEnemy.cs index 7ccb946..2a95c3e 100644 --- a/Enemies/Scripts/MeleeEnemy.cs +++ b/Enemies/Scripts/MeleeEnemy.cs @@ -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; + } } } } \ No newline at end of file diff --git a/Player/Capricorn/Attacks/CapricornLaser.tscn b/Player/Capricorn/Attacks/CapricornLaser.tscn index 178fa78..d1e1c79 100644 --- a/Player/Capricorn/Attacks/CapricornLaser.tscn +++ b/Player/Capricorn/Attacks/CapricornLaser.tscn @@ -35,7 +35,7 @@ curve = SubResource("Curve3D_bch55") script = ExtResource("1_ovnwu") Cooldown = 1.0 _soundEffect = ExtResource("2_lofnw") -_projectileSpeed = 5.0 +_projectileSpeed = 3.0 [node name="PathFollow3D" type="PathFollow3D" parent="Forward Shot"] transform = Transform3D(0.999997, 0, -0.00207308, 0, 1, 0, 0.00207308, 0, 0.999997, -0.00347188, 1, 0.533723) @@ -66,7 +66,7 @@ curve = SubResource("Curve3D_ciqkc") script = ExtResource("1_ovnwu") Cooldown = 1.0 _soundEffect = ExtResource("2_lofnw") -_projectileSpeed = 5.0 +_projectileSpeed = 3.0 [node name="PathFollow3D" type="PathFollow3D" parent="Backward Shot"] transform = Transform3D(0.999997, 0, -0.00207308, 0, 1, 0, 0.00207308, 0, 0.999997, -0.00347188, 1, 0.533723) diff --git a/Player/Capricorn/Attacks/CapricornLaserAltFire.tscn b/Player/Capricorn/Attacks/CapricornLaserAltFire.tscn index 841ed3a..ab32d14 100644 --- a/Player/Capricorn/Attacks/CapricornLaserAltFire.tscn +++ b/Player/Capricorn/Attacks/CapricornLaserAltFire.tscn @@ -97,4 +97,4 @@ stream = ExtResource("2_jeoco") autoplay = true [connection signal="body_entered" from="Forward Shot/PathFollow3D/HitBox" to="Forward Shot" method="OnProjectileHit"] -[connection signal="body_entered" from="Backward Shot/PathFollow3D/HitBox" to="Forward Shot" method="OnProjectileHit"] +[connection signal="body_entered" from="Backward Shot/PathFollow3D/HitBox" to="Backward Shot" method="OnProjectileHit"] diff --git a/Player/Capricorn/Capricorn.tscn b/Player/Capricorn/Capricorn.tscn index 5a73c49..8ec5ced 100644 --- a/Player/Capricorn/Capricorn.tscn +++ b/Player/Capricorn/Capricorn.tscn @@ -216,7 +216,7 @@ size = Vector3(0.856928, 5.87942, 0.82877) [node name="Capricorn" type="CharacterBody3D" groups=["Player"]] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.408962, 0) -collision_layer = 18 +collision_layer = 82 motion_mode = 1 script = ExtResource("1_aqn5t") _fireProjectile = ExtResource("2_e6qos") diff --git a/Player/Pisces/Attacks/Single.tscn b/Player/Pisces/Attacks/Single.tscn index 7125ac8..5b77130 100644 --- a/Player/Pisces/Attacks/Single.tscn +++ b/Player/Pisces/Attacks/Single.tscn @@ -6,7 +6,7 @@ [sub_resource type="Curve3D" id="Curve3D_do6j1"] _data = { -"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.008, 0, -5), +"points": PackedVector3Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2), "tilts": PackedFloat32Array(0, 0) } point_count = 2 diff --git a/Player/Pisces/Pisces.tscn b/Player/Pisces/Pisces.tscn index 8021b7a..5f40a7e 100644 --- a/Player/Pisces/Pisces.tscn +++ b/Player/Pisces/Pisces.tscn @@ -10,11 +10,12 @@ size = Vector3(1.52195, 15.0934, 1) [node name="Pisces" type="CharacterBody3D" groups=["Player"]] transform = Transform3D(0.33, 0, 0, 0, 0.33, 0, 0, 0, 0.33, 0, 0.332056, 0) -collision_layer = 18 +collision_layer = 82 motion_mode = 1 script = ExtResource("1_gp8nm") _fireProjectile = ExtResource("2_rsvhh") _altFireProjectile = ExtResource("3_5m8tq") +_speed = 2.0 [node name="Pivot" type="Node3D" parent="."] diff --git a/Player/Sagittarius/Sagittarius.tscn b/Player/Sagittarius/Sagittarius.tscn index 63d2d08..9abf87b 100644 --- a/Player/Sagittarius/Sagittarius.tscn +++ b/Player/Sagittarius/Sagittarius.tscn @@ -603,12 +603,13 @@ radius = 0.25 [node name="Sagittarius" type="CharacterBody3D" groups=["Player"]] transform = Transform3D(0.9, 0, 0, 0, 0.9, 0, 0, 0, 0.9, 0, 0.559088, 0) -collision_layer = 18 +collision_layer = 82 motion_mode = 1 wall_min_slide_angle = 3.14159 script = ExtResource("1_s1hsr") _fireProjectile = ExtResource("2_c3ma7") _altFireProjectile = ExtResource("2_c3ma7") +_speed = 2.25 [node name="Pivot" type="Node3D" parent="."] diff --git a/Player/Scorpio/Scorpio.tscn b/Player/Scorpio/Scorpio.tscn index efeb9aa..1297919 100644 --- a/Player/Scorpio/Scorpio.tscn +++ b/Player/Scorpio/Scorpio.tscn @@ -10,12 +10,13 @@ size = Vector3(0.8, 3, 0.8) [node name="Scorpio" type="CharacterBody3D" groups=["Player"]] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55696, 0) -collision_layer = 18 +collision_layer = 82 motion_mode = 1 slide_on_ceiling = false script = ExtResource("1_gw30u") _fireProjectile = ExtResource("2_uayjr") _altFireProjectile = ExtResource("3_tw078") +_speed = 2.5 [node name="Pivot" type="Node3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.496155, 0) diff --git a/project.godot b/project.godot index 08371f0..7a9854b 100644 --- a/project.godot +++ b/project.godot @@ -128,7 +128,7 @@ p2_altfire={ 3d_physics/layer_4="BossHit" 3d_physics/layer_5="Area Exit" 3d_physics/layer_6="BreakableObstacle" -3d_physics/layer_7="Layer 7" +3d_physics/layer_7="EnemyCollide" 3d_physics/layer_9="ProjectileToWalls" [physics]