Files
Fighting_Rthythm_game/scenes/ui/energy_bar.gd
2026-07-02 09:47:52 -07:00

59 lines
1.5 KiB
GDScript

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