69 lines
1.6 KiB
GDScript
69 lines
1.6 KiB
GDScript
class_name BurstComponent
|
|
extends Node
|
|
|
|
signal burst_changed(burst_ready: bool, active: bool, cooldown: int)
|
|
|
|
@export var active_beats := 16
|
|
@export var cooldown_beats := 4
|
|
|
|
var burst_ready := false
|
|
var active := false
|
|
var cooldown := 0
|
|
var _beats_left := 0
|
|
|
|
|
|
func _ready() -> void:
|
|
var rhythm := get_tree().root.get_node_or_null("RhythmManager")
|
|
if rhythm != null and not rhythm.is_connected("beat_ticked", _on_beat_ticked):
|
|
rhythm.connect("beat_ticked", _on_beat_ticked)
|
|
|
|
|
|
func set_ready(value: bool) -> void:
|
|
if active or cooldown > 0:
|
|
burst_ready = false
|
|
else:
|
|
burst_ready = value
|
|
burst_changed.emit(burst_ready, active, cooldown)
|
|
|
|
|
|
func activate() -> bool:
|
|
if not burst_ready or active or cooldown > 0:
|
|
return false
|
|
burst_ready = false
|
|
active = true
|
|
_beats_left = active_beats
|
|
_set_rhythm_scale(1.25)
|
|
burst_changed.emit(burst_ready, active, cooldown)
|
|
return true
|
|
|
|
|
|
func damage_mult(_action: Resource = null) -> float:
|
|
return 1.2 if active else 1.0
|
|
|
|
|
|
func cost_mult(_action: Resource = null) -> float:
|
|
return 0.0 if active else 1.0
|
|
|
|
|
|
func move_mult(_action: Resource = null) -> float:
|
|
return 1.0
|
|
|
|
|
|
func _on_beat_ticked(_beat_index: int) -> void:
|
|
if active:
|
|
_beats_left -= 1
|
|
if _beats_left <= 0:
|
|
active = false
|
|
cooldown = cooldown_beats
|
|
_set_rhythm_scale(1.0)
|
|
burst_changed.emit(burst_ready, active, cooldown)
|
|
elif cooldown > 0:
|
|
cooldown -= 1
|
|
burst_changed.emit(burst_ready, active, cooldown)
|
|
|
|
|
|
func _set_rhythm_scale(scale: float) -> void:
|
|
var rhythm := get_tree().root.get_node_or_null("RhythmManager")
|
|
if rhythm != null:
|
|
rhythm.set("judgement_scale", scale)
|