2025-03-12 11:03:41 -06:00
|
|
|
class_name Spray extends Tool
|
|
|
|
## Base class for spraygun tools
|
2025-03-02 12:00:42 -07:00
|
|
|
|
2025-03-12 12:19:09 -06:00
|
|
|
const RUMBLE_INTENSITY = 0.002
|
|
|
|
const RUMBLE_DROPOFF = 0.8
|
|
|
|
|
2025-03-12 11:03:41 -06:00
|
|
|
@onready var spray_effect: MeshInstance3D = %SprayEffect
|
|
|
|
@onready var beam_particles_1: GPUParticles3D = %BeamParticles1
|
|
|
|
@onready var beam_particles_2: GPUParticles3D = %BeamParticles2
|
2025-03-12 12:19:09 -06:00
|
|
|
@onready var rumbler: Rumbler3D = %Rumbler
|
2025-03-29 11:51:18 -06:00
|
|
|
@onready var beam_sfx: BeamSFX = %BeamSFX
|
2025-03-06 14:57:57 -07:00
|
|
|
|
|
|
|
|
2025-03-12 11:03:41 -06:00
|
|
|
func _spray() -> void:
|
|
|
|
pass ## Implemented in derived type
|
2025-03-06 14:57:57 -07:00
|
|
|
|
|
|
|
|
2025-03-12 11:03:41 -06:00
|
|
|
func _fire() -> void:
|
2025-03-20 22:45:19 -06:00
|
|
|
rumbler.intensity = RUMBLE_INTENSITY
|
|
|
|
|
|
|
|
if Game.manager.is_tank_full():
|
|
|
|
Player.instance.hud.play_tank_full_alert()
|
|
|
|
idle()
|
|
|
|
return
|
|
|
|
|
2025-03-12 11:03:41 -06:00
|
|
|
_spray()
|
2025-03-02 12:00:42 -07:00
|
|
|
|
2025-03-12 11:03:41 -06:00
|
|
|
spray_effect.visible = true
|
|
|
|
beam_particles_1.emitting = true
|
|
|
|
beam_particles_2.emitting = true
|
2025-03-02 12:00:42 -07:00
|
|
|
|
2025-03-29 11:51:18 -06:00
|
|
|
beam_sfx.activate()
|
|
|
|
|
2025-03-02 12:00:42 -07:00
|
|
|
|
2025-03-12 11:03:41 -06:00
|
|
|
func _idle() -> void:
|
|
|
|
spray_effect.visible = false
|
|
|
|
beam_particles_1.emitting = false
|
|
|
|
beam_particles_2.emitting = false
|
2025-03-12 12:19:09 -06:00
|
|
|
rumbler.intensity *= RUMBLE_DROPOFF
|