Initial project sync
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
class_name StreakCounter
|
||||
extends Node
|
||||
|
||||
## Sole writer of the streak count (AnchorV1.0 "ComboCounter").
|
||||
## Pure fact subscriber: +1 on skill_executed, reset on miss / chart_reset.
|
||||
|
||||
var streak := 0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
for bus: Node in _event_buses():
|
||||
if bus.has_signal("skill_executed") and not bus.is_connected("skill_executed", _on_skill_executed):
|
||||
bus.connect("skill_executed", _on_skill_executed)
|
||||
if bus.has_signal("judgement_made") and not bus.is_connected("judgement_made", _on_judgement_made):
|
||||
bus.connect("judgement_made", _on_judgement_made)
|
||||
if bus.has_signal("time_anchor_resolved") and not bus.is_connected("time_anchor_resolved", _on_time_anchor_resolved):
|
||||
bus.connect("time_anchor_resolved", _on_time_anchor_resolved)
|
||||
if bus.has_signal("chart_reset") and not bus.is_connected("chart_reset", _on_chart_reset):
|
||||
bus.connect("chart_reset", _on_chart_reset)
|
||||
|
||||
|
||||
func _on_skill_executed(_skill: Resource, _judgement: StringName) -> void:
|
||||
streak += 1
|
||||
_broadcast()
|
||||
|
||||
|
||||
func _on_judgement_made(quality: StringName, _offset_ms: float, _beat_index: int) -> void:
|
||||
if quality != &"miss":
|
||||
return
|
||||
reset()
|
||||
|
||||
|
||||
func _on_time_anchor_resolved(_anchor: Dictionary, held: bool, _judgement: Dictionary) -> void:
|
||||
if held:
|
||||
return
|
||||
reset()
|
||||
|
||||
|
||||
func _on_chart_reset(_chart_id: StringName) -> void:
|
||||
reset()
|
||||
|
||||
|
||||
func reset() -> void:
|
||||
if streak == 0:
|
||||
return
|
||||
streak = 0
|
||||
_broadcast()
|
||||
|
||||
|
||||
func _broadcast() -> void:
|
||||
for bus: Node in _event_buses():
|
||||
if bus.has_signal("streak_changed"):
|
||||
bus.emit_signal("streak_changed", streak)
|
||||
|
||||
|
||||
func _event_buses() -> Array[Node]:
|
||||
var buses: Array[Node] = []
|
||||
if not is_inside_tree():
|
||||
return buses
|
||||
for child: Node in get_tree().root.get_children():
|
||||
if child.has_signal("skill_executed") and child.has_signal("streak_changed"):
|
||||
buses.append(child)
|
||||
return buses
|
||||
Reference in New Issue
Block a user