diff --git a/base/scenes/enemies/test_enemy.tscn b/base/scenes/enemies/test_enemy.tscn index 9735d3a..fd018d5 100644 --- a/base/scenes/enemies/test_enemy.tscn +++ b/base/scenes/enemies/test_enemy.tscn @@ -10,7 +10,7 @@ [ext_resource type="Texture2D" uid="uid://bu54h8g5r50qp" path="res://base/assets/sprites/test_enemy/0006.png" id="8_snoby"] [ext_resource type="Texture2D" uid="uid://c57drlhnuicu5" path="res://base/assets/sprites/test_enemy/0007.png" id="9_83myg"] -[node name="TestEnemy" type="Node3D"] +[node name="TestEnemy" type="Node3D" groups=["enemy"]] [node name="RotationalSprite" type="Sprite3D" parent="."] billboard = 2 diff --git a/base/scenes/projectiles/hitscan.tscn b/base/scenes/projectiles/hitscan.tscn new file mode 100644 index 0000000..6c7bf7d --- /dev/null +++ b/base/scenes/projectiles/hitscan.tscn @@ -0,0 +1,10 @@ +[gd_scene load_steps=2 format=3 uid="uid://c0rimfst01gsx"] + +[ext_resource type="Script" uid="uid://coayruqnqqvdn" path="res://base/scripts/projectiles/hitscan.gd" id="1_fkkr2"] + +[node name="Hitscan" type="RayCast3D"] +target_position = Vector3(0, 0, 1000) +collision_mask = 4 +hit_from_inside = true +collide_with_areas = true +script = ExtResource("1_fkkr2") diff --git a/base/scripts/projectiles/hitscan.gd b/base/scripts/projectiles/hitscan.gd new file mode 100644 index 0000000..7e1e5a2 --- /dev/null +++ b/base/scripts/projectiles/hitscan.gd @@ -0,0 +1,16 @@ +extends RayCast3D + +var damage : float + +func _ready() -> void: + if is_colliding(): + var collider = get_collider() + # API говорит, что коллайдер может не оказаться нодой3д + if collider is Node3D: + # Проверяем, является ли ссылка на хитбокс, или нам дали ссылку на основной объект + if collider.is_in_group("enemy"): + collider.get_node("Entity").deal_damage(damage) + elif collider.get_parent().is_in_group("enemy"): + collider.get_parent().get_node("Entity").deal_damage(damage) + + queue_free() diff --git a/base/scripts/projectiles/hitscan.gd.uid b/base/scripts/projectiles/hitscan.gd.uid new file mode 100644 index 0000000..c7489d7 --- /dev/null +++ b/base/scripts/projectiles/hitscan.gd.uid @@ -0,0 +1 @@ +uid://coayruqnqqvdn diff --git a/base/scripts/weapons/bullet/base_bullet.gd b/base/scripts/weapons/bullet/base_bullet.gd new file mode 100644 index 0000000..ce7e771 --- /dev/null +++ b/base/scripts/weapons/bullet/base_bullet.gd @@ -0,0 +1,8 @@ +extends Resource + +class_name BaseBullet + +@export var damage : float + +func get_packed_scene() -> PackedScene: + return null diff --git a/base/scripts/weapons/bullet/base_bullet.gd.uid b/base/scripts/weapons/bullet/base_bullet.gd.uid new file mode 100644 index 0000000..8e88d3f --- /dev/null +++ b/base/scripts/weapons/bullet/base_bullet.gd.uid @@ -0,0 +1 @@ +uid://bkbaoqw8rbrwq diff --git a/base/scripts/weapons/bullet/hitscan_bullet.gd b/base/scripts/weapons/bullet/hitscan_bullet.gd new file mode 100644 index 0000000..1ef0e85 --- /dev/null +++ b/base/scripts/weapons/bullet/hitscan_bullet.gd @@ -0,0 +1,8 @@ +extends BaseBullet + +class_name HitscanBullet + +const scene := preload("uid://c0rimfst01gsx") + +func get_packed_scene() -> PackedScene: + return scene diff --git a/base/scripts/weapons/bullet/hitscan_bullet.gd.uid b/base/scripts/weapons/bullet/hitscan_bullet.gd.uid new file mode 100644 index 0000000..5096331 --- /dev/null +++ b/base/scripts/weapons/bullet/hitscan_bullet.gd.uid @@ -0,0 +1 @@ +uid://bipb70gqcdauu diff --git a/base/scripts/weapons/bullet/projectile_bullet.gd b/base/scripts/weapons/bullet/projectile_bullet.gd new file mode 100644 index 0000000..c0ca0b5 --- /dev/null +++ b/base/scripts/weapons/bullet/projectile_bullet.gd @@ -0,0 +1,9 @@ +extends BaseBullet + +class_name ProjectileBullet + +@export var scene : PackedScene +@export var speed : float + +func get_packed_scene() -> PackedScene: + return scene diff --git a/base/scripts/weapons/bullet/projectile_bullet.gd.uid b/base/scripts/weapons/bullet/projectile_bullet.gd.uid new file mode 100644 index 0000000..59a8564 --- /dev/null +++ b/base/scripts/weapons/bullet/projectile_bullet.gd.uid @@ -0,0 +1 @@ +uid://uwtm5i5lajia diff --git a/project.godot b/project.godot index b75c7bb..372934c 100644 --- a/project.godot +++ b/project.godot @@ -19,6 +19,10 @@ config/icon="uid://3tgkfxqayrbo" project/assembly_name="Revenge of the Red Dragon Pon of the Red Dragon Pon of the Red Dragon Pon" +[global_group] + +enemy="Group for all enemy objects. This group should contain Entity node as child." + [input] move_forward={