bullets and hitscan

This commit is contained in:
Rendo 2025-07-26 17:58:28 +05:00
commit eaa487f16a
11 changed files with 60 additions and 1 deletions

View file

@ -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

View file

@ -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")

View file

@ -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()

View file

@ -0,0 +1 @@
uid://coayruqnqqvdn

View file

@ -0,0 +1,8 @@
extends Resource
class_name BaseBullet
@export var damage : float
func get_packed_scene() -> PackedScene:
return null

View file

@ -0,0 +1 @@
uid://bkbaoqw8rbrwq

View file

@ -0,0 +1,8 @@
extends BaseBullet
class_name HitscanBullet
const scene := preload("uid://c0rimfst01gsx")
func get_packed_scene() -> PackedScene:
return scene

View file

@ -0,0 +1 @@
uid://bipb70gqcdauu

View file

@ -0,0 +1,9 @@
extends BaseBullet
class_name ProjectileBullet
@export var scene : PackedScene
@export var speed : float
func get_packed_scene() -> PackedScene:
return scene

View file

@ -0,0 +1 @@
uid://uwtm5i5lajia