2025-03-12 00:18:27 -06:00
|
|
|
extends GunkNode
|
|
|
|
|
2025-03-13 12:37:33 -06:00
|
|
|
@export var jitter_scale_factor := 0.05
|
2025-03-12 00:18:27 -06:00
|
|
|
@export var jitter_inflation_factor := 1.0
|
|
|
|
|
2025-04-01 16:11:11 -06:00
|
|
|
@export var chitter: bool = false
|
|
|
|
@export var chitter_time_mean := 120.0
|
|
|
|
@export var chitter_time_st_dev := 30.0
|
|
|
|
|
2025-03-12 00:18:27 -06:00
|
|
|
@export var splatter_scene: PackedScene
|
|
|
|
|
|
|
|
@onready var mesh_instance: MeshInstance3D = %MeshInstance3D
|
|
|
|
|
2025-04-01 16:11:11 -06:00
|
|
|
@onready var chitter_sfx: AudioStreamPlayer3D = %ChitterSFX
|
|
|
|
@onready var chitter_timer: Timer = %ChitterTimer
|
|
|
|
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
if chitter:
|
|
|
|
start_chitter_timer()
|
|
|
|
|
2025-03-12 00:18:27 -06:00
|
|
|
|
2025-03-13 11:25:11 -06:00
|
|
|
func _process(delta: float) -> void:
|
|
|
|
super._process(delta)
|
2025-03-12 00:18:27 -06:00
|
|
|
var shader: ShaderMaterial = mesh_instance.mesh.surface_get_material(0)
|
2025-03-21 19:13:17 -06:00
|
|
|
var damage := pct_damage()
|
|
|
|
shader.set_shader_parameter("jitter_time_scale", pow(damage * jitter_scale_factor, 1.2))
|
|
|
|
shader.set_shader_parameter("vertex_inflation", pow(damage * jitter_inflation_factor, 3))
|
2025-03-12 00:18:27 -06:00
|
|
|
|
|
|
|
|
|
|
|
func _destroy() -> void:
|
|
|
|
var splatter: GPUParticles3D = splatter_scene.instantiate()
|
|
|
|
add_sibling(splatter)
|
|
|
|
splatter.global_position = global_position
|
|
|
|
splatter.emitting = true
|
2025-04-01 16:11:11 -06:00
|
|
|
|
|
|
|
|
|
|
|
func start_chitter_timer() -> void:
|
|
|
|
var interval := randfn(chitter_time_mean, chitter_time_st_dev)
|
|
|
|
chitter_timer.start(interval)
|
|
|
|
|
|
|
|
|
|
|
|
func _on_chitter_timer_timeout() -> void:
|
|
|
|
chitter_sfx.play()
|
|
|
|
start_chitter_timer()
|