From 80b7881cc6010eecde852a54b97937df471a9dbc Mon Sep 17 00:00:00 2001 From: teatov Date: Tue, 18 Feb 2025 02:49:46 +1000 Subject: [PATCH] add hitting projectile function --- scenes/enemies/projectile_spawner.tscn | 4 ++-- scenes/player.tscn | 10 +++++----- scenes/projectiles/projectile.tscn | 4 ++-- scripts/player/player_attack.gd | 10 ++++++++++ scripts/projectiles/projectile.gd | 8 ++++++-- 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/scenes/enemies/projectile_spawner.tscn b/scenes/enemies/projectile_spawner.tscn index 9855a0c..ae6aa31 100644 --- a/scenes/enemies/projectile_spawner.tscn +++ b/scenes/enemies/projectile_spawner.tscn @@ -21,9 +21,9 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) mesh = SubResource("BoxMesh_860q6") [node name="MeshInstance3D2" type="MeshInstance3D" parent="MeshInstance3D"] -transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, -0.339801) +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0.552548, -0.339801) mesh = SubResource("CylinderMesh_esok8") skeleton = NodePath("../..") [node name="Marker3D" type="Marker3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.624811, -0.590804) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.036, -0.590804) diff --git a/scenes/player.tscn b/scenes/player.tscn index 4935d1d..610acc1 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -14,9 +14,9 @@ height = 1.8 [sub_resource type="BoxMesh" id="BoxMesh_fdktb"] size = Vector3(0.5, 0.5, 0.5) -[sub_resource type="CylinderShape3D" id="CylinderShape3D_m8fdo"] -height = 1.0 -radius = 1.5 +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_5qjrf"] +radius = 2.0 +height = 6.0 [node name="Player" type="CharacterBody3D"] collision_layer = 16 @@ -36,11 +36,11 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.17779, 0.357218) mesh = SubResource("BoxMesh_fdktb") [node name="AttackArea" type="Area3D" parent="."] -collision_layer = 0 +collision_layer = 32 collision_mask = 32 script = ExtResource("3_8pbtx") _collision_debug_material = ExtResource("4_ll2ct") [node name="CollisionShape3D" type="CollisionShape3D" parent="AttackArea"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) -shape = SubResource("CylinderShape3D_m8fdo") +shape = SubResource("CapsuleShape3D_5qjrf") diff --git a/scenes/projectiles/projectile.tscn b/scenes/projectiles/projectile.tscn index 3b9f327..9b25368 100644 --- a/scenes/projectiles/projectile.tscn +++ b/scenes/projectiles/projectile.tscn @@ -10,8 +10,8 @@ radius = 0.25 radius = 0.25 height = 0.5 -[node name="Projectile" type="Area3D"] -top_level = true +[node name="Projectile" type="AnimatableBody3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.535, 0) collision_layer = 32 collision_mask = 32 script = ExtResource("1_kv6x5") diff --git a/scripts/player/player_attack.gd b/scripts/player/player_attack.gd index c089fda..ac5bf50 100644 --- a/scripts/player/player_attack.gd +++ b/scripts/player/player_attack.gd @@ -12,6 +12,7 @@ func _ready() -> void: _debug_collision_shapes.init(get_children(), self, _collision_debug_material) Debugger.add_event("attacked") attacked.connect(func() -> void: Debugger.event_emitted("attacked", [])) + body_entered.connect(_on_body_entered) func _unhandled_input(event: InputEvent) -> void: @@ -21,3 +22,12 @@ func _unhandled_input(event: InputEvent) -> void: func _attack() -> void: attacked.emit() + + +func _hit_projectile(projectile: Projectile) -> void: + projectile.queue_free() + + +func _on_body_entered(node: Node3D) -> void: + if node is Projectile: + _hit_projectile(node as Projectile) diff --git a/scripts/projectiles/projectile.gd b/scripts/projectiles/projectile.gd index 1269be3..66e3f9a 100644 --- a/scripts/projectiles/projectile.gd +++ b/scripts/projectiles/projectile.gd @@ -1,5 +1,5 @@ class_name Projectile -extends Area3D +extends AnimatableBody3D @export var _collision_debug_material: Material @@ -18,7 +18,7 @@ func _ready() -> void: global_position = _start_position -func _process(delta: float) -> void: +func _physics_process(delta: float) -> void: if _life_timer <= 0: queue_free() @@ -30,3 +30,7 @@ func init(velocity: Vector3, start_position: Vector3, lifetime: float = 10) -> v _velocity = velocity _start_position = start_position _lifetime = lifetime + + +func set_velocity(velocity: Vector3) -> void: + _velocity = velocity