From fd6fe7313db82227a661ebb44fa4b66af7b0b840 Mon Sep 17 00:00:00 2001 From: Rendo Date: Fri, 18 Jul 2025 19:48:39 +0500 Subject: [PATCH] Added basic projectile Changelog: 1. Linear projectile scene and script 2. project.godot 3D collision layers renamed --- base/scenes/projectiles/test_projectile.tscn | 14 +++++++++++ base/scripts/projectiles/linear_projectile.gd | 23 +++++++++++++++++++ .../projectiles/linear_projectile.gd.uid | 1 + project.godot | 4 +++- 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 base/scenes/projectiles/test_projectile.tscn create mode 100644 base/scripts/projectiles/linear_projectile.gd create mode 100644 base/scripts/projectiles/linear_projectile.gd.uid diff --git a/base/scenes/projectiles/test_projectile.tscn b/base/scenes/projectiles/test_projectile.tscn new file mode 100644 index 0000000..127106f --- /dev/null +++ b/base/scenes/projectiles/test_projectile.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=3 uid="uid://7g41nvss060a"] + +[ext_resource type="Script" uid="uid://juvbkxm58688" path="res://base/scripts/projectiles/linear_projectile.gd" id="1_aguxa"] + +[sub_resource type="SphereShape3D" id="SphereShape3D_62idg"] +radius = 0.1 + +[node name="TestProjectile" type="Area3D"] +collision_layer = 8 +collision_mask = 4 +script = ExtResource("1_aguxa") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +shape = SubResource("SphereShape3D_62idg") diff --git a/base/scripts/projectiles/linear_projectile.gd b/base/scripts/projectiles/linear_projectile.gd new file mode 100644 index 0000000..8d3b6c1 --- /dev/null +++ b/base/scripts/projectiles/linear_projectile.gd @@ -0,0 +1,23 @@ +extends Area3D + +## Speed of the projectile in meters per second +@export_range(0,1000,0.01,"or_greater","suffix:m/s") var speed : float +## Damage of projectile +@export var damage : float + +func _ready() -> void: + body_entered.connect(on_body_entered) + +## Invoked when area contacts collision object +func on_body_entered(body : Node): + if body.is_in_group("Entities") == false: + return + + # Owner needs to be set to Entity node when spawning projectile + if owner is Entity: + body.get_node("Entity").deal_damage(damage,owner) + else: + body.get_node("Entity").deal_damage(damage,null) + +func _physics_process(delta: float) -> void: + global_position += global_transform.basis.z * delta diff --git a/base/scripts/projectiles/linear_projectile.gd.uid b/base/scripts/projectiles/linear_projectile.gd.uid new file mode 100644 index 0000000..bee08e0 --- /dev/null +++ b/base/scripts/projectiles/linear_projectile.gd.uid @@ -0,0 +1 @@ +uid://juvbkxm58688 diff --git a/project.godot b/project.godot index 93d21f5..d300314 100644 --- a/project.godot +++ b/project.godot @@ -50,7 +50,9 @@ shoot={ [layer_names] 3d_physics/layer_1="Static Environment" -3d_physics/layer_2="Entities" +3d_physics/layer_2="Friendly entities" +3d_physics/layer_3="Enemy entities" +3d_physics/layer_4="Projectile" [rendering]