Refactor rhythm action architecture
This commit is contained in:
58
scenes/ui/energy_bar.gd
Normal file
58
scenes/ui/energy_bar.gd
Normal file
@@ -0,0 +1,58 @@
|
||||
class_name EnergyBar
|
||||
extends HBoxContainer
|
||||
|
||||
@export var segment_count := 10
|
||||
|
||||
var segments: Array[Panel] = []
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_build_segments()
|
||||
_event_bus().connect("player_energy_changed", refresh)
|
||||
|
||||
|
||||
func refresh(current: float, maximum: float) -> void:
|
||||
if segments.is_empty():
|
||||
_build_segments()
|
||||
var filled := clampi(int(round(current)), 0, min(segment_count, int(maximum)))
|
||||
for index: int in range(segments.size()):
|
||||
segments[index].modulate = Color(1.0, 1.0, 1.0, 1.0 if index < filled else 0.35)
|
||||
|
||||
|
||||
func _build_segments() -> void:
|
||||
if not segments.is_empty():
|
||||
return
|
||||
for child: Node in get_children():
|
||||
var panel := child as Panel
|
||||
if panel != null:
|
||||
segments.append(panel)
|
||||
if segments.size() >= segment_count:
|
||||
return
|
||||
for index: int in range(segments.size(), segment_count):
|
||||
var panel := Panel.new()
|
||||
panel.custom_minimum_size = Vector2(23, 16)
|
||||
panel.modulate = Color(1.0, 1.0, 1.0, 0.35)
|
||||
panel.add_theme_stylebox_override("panel", _make_segment_style())
|
||||
add_child(panel)
|
||||
segments.append(panel)
|
||||
|
||||
|
||||
func _make_segment_style() -> StyleBoxFlat:
|
||||
var style := StyleBoxFlat.new()
|
||||
style.bg_color = Color(0.18, 0.66, 0.95, 1.0)
|
||||
style.border_width_left = 1
|
||||
style.border_width_top = 1
|
||||
style.border_width_right = 1
|
||||
style.border_width_bottom = 1
|
||||
style.border_color = Color(0.66, 0.92, 1.0, 0.9)
|
||||
return style
|
||||
|
||||
|
||||
func _event_bus() -> Node:
|
||||
var root := get_tree().root
|
||||
var bus := root.get_node_or_null("EventBus")
|
||||
if bus == null:
|
||||
bus = load("res://autoload/event_bus.gd").new()
|
||||
bus.name = "EventBus"
|
||||
root.add_child(bus)
|
||||
return bus
|
||||
Reference in New Issue
Block a user