Files
VFX_GodotCourseEmpty/Scripts/SpawnAoE.gd
T
2025-11-28 18:10:23 +08:00

38 lines
1.2 KiB
GDScript

extends Node3D
@export var camera: Camera3D = null
@export var fire_rate: float = 0.5
@export var aoe_lifetime: float = 7.0
@export var aoe_prefab: PackedScene
var can_fire: bool = true
func _process(_delta):
if Input.is_action_pressed("fire") and can_fire:
fire_aoe()
can_fire = false
await get_tree().create_timer(fire_rate).timeout
can_fire = true
func fire_aoe():
if not (aoe_prefab and camera):
return
var mouse_position = get_viewport().get_mouse_position()
var ray_origin = camera.project_ray_origin(mouse_position)
var ray_direction = camera.project_ray_normal(mouse_position) * 1000 # Long ray
var space_state = get_world_3d().direct_space_state
var query = PhysicsRayQueryParameters3D.create(ray_origin, ray_origin + ray_direction)
var result = space_state.intersect_ray(query)
if result.has("position"):
var aoe_instance = aoe_prefab.instantiate()
get_parent().add_child(aoe_instance)
aoe_instance.global_position = result["position"] # Spawn at hit position
aoe_instance.play_particles = true # Start particle effect
await get_tree().create_timer(aoe_lifetime).timeout
if is_instance_valid(aoe_instance):
aoe_instance.queue_free()