grunk/src/equipment/wide_spray/wide_spray.gd

40 lines
1.0 KiB
GDScript3
Raw Normal View History

class_name WideSpray extends Spray
## Wide spray pattern
const SPRAYCAST_GROUP := "SprayCast"
2025-03-03 15:06:30 -07:00
@export var spray_scale := 2.0
@onready var spray_casts: Node3D = %SprayCasts
@onready var spray_effect: MeshInstance3D = %SprayEffect
func fire() -> void:
var prev_target: GunkBody = null
var prev_point: Vector3
var prev_normal: Vector3
for raycast: RayCast3D in spray_casts.get_children():
if raycast.is_colliding():
var target := raycast.get_collider() as GunkBody
if target:
var point := raycast.get_collision_point()
var normal := raycast.get_collision_normal()
# Always paint at least a dot, to cap the ends of the line
target.paint_dot(point, normal, spray_scale)
if target == prev_target:
# Continue the multiline if possible
target.add_to_multiline(prev_point, prev_normal, point, normal, spray_scale * 2)
prev_point = point
prev_normal = normal
prev_target = target
prev_point = point
prev_normal = normal
spray_effect.visible = true
func idle() -> void:
spray_effect.visible = false