2025-03-02 12:00:42 -07:00
|
|
|
class_name PointSpray extends Spray
|
|
|
|
## Simple single-point spraygun
|
|
|
|
|
2025-03-09 16:40:19 -06:00
|
|
|
@export var spray_scale := 1.5
|
2025-03-02 12:00:42 -07:00
|
|
|
|
2025-03-06 14:57:57 -07:00
|
|
|
@onready var laser: LaserCast = %LaserCast
|
2025-03-02 12:00:42 -07:00
|
|
|
@onready var spray_effect: MeshInstance3D = %SprayEffect
|
|
|
|
|
2025-03-06 14:57:57 -07:00
|
|
|
@onready var beam_particles_1: GPUParticles3D = $BeamParticles1
|
|
|
|
@onready var beam_particles_2: GPUParticles3D = $BeamParticles2
|
2025-03-02 12:00:42 -07:00
|
|
|
|
2025-03-06 14:57:57 -07:00
|
|
|
|
|
|
|
func _fire() -> void:
|
|
|
|
if laser.is_colliding():
|
|
|
|
var collider := laser.get_collider()
|
2025-03-02 12:00:42 -07:00
|
|
|
if collider is GunkBody:
|
2025-03-06 14:57:57 -07:00
|
|
|
var point := laser.get_collision_point()
|
|
|
|
var point_scale := point.distance_to(global_position) * spray_scale
|
2025-03-02 12:00:42 -07:00
|
|
|
(collider as GunkBody).paint_continuous(
|
2025-03-06 14:57:57 -07:00
|
|
|
point, laser.get_collision_normal(), point_scale
|
2025-03-02 12:00:42 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
spray_effect.visible = true
|
2025-03-06 14:57:57 -07:00
|
|
|
beam_particles_1.emitting = true
|
|
|
|
beam_particles_2.emitting = true
|
2025-03-02 12:00:42 -07:00
|
|
|
|
|
|
|
|
2025-03-06 14:57:57 -07:00
|
|
|
func _idle() -> void:
|
2025-03-02 12:00:42 -07:00
|
|
|
spray_effect.visible = false
|
2025-03-06 14:57:57 -07:00
|
|
|
beam_particles_1.emitting = false
|
|
|
|
beam_particles_2.emitting = false
|