Files
owniverse/ui/indicators/world_indicators.gd
T

53 lines
3.0 KiB
GDScript
Raw Normal View History

extends RefCounted
const Parameters = preload("res://world/owniverse/world_parameters.gd")
var energy_bars: Array = []
var density_indicators: Array = []
var pointers: Dictionary = {}
var trend_bars: Array = []
2026-09-28 22:32:52 +03:00
var warning_border: TextureRect
func _init(stage: Node) -> void:
2026-09-28 22:32:52 +03:00
warning_border = stage.get_node("../Background/WarningBorder")
var pages: Node = stage.get_node("World/PageScroller/HBoxContainer")
for path in ["ResourcePage/ResourceHeader", "StructurePage/StructureHeader"]:
energy_bars.append(pages.get_node(path + "/EnergyIndicator/Indicator"))
density_indicators.append(pages.get_node(path + "/DensityIndicator"))
pointers.Bur = pages.get_node("StarPage/StarHeader/BurnabilityIndicator/BurnabilityPointer")
pointers.Exp = pages.get_node("StarPage/StarHeader/ExplosivenessIndicator/ExplosivenessPointer")
pointers.Agg = pages.get_node("LifePage/LifeHeader/AggressionIndicator/AggressionPointer")
var trends: Node = pages.get_node("LifePage/LifeHeader/TrendIndicator/HBoxContainer")
for i in 5:
var container: String = "CenterContainer" + (str(i + 1) if i > 0 else "")
trend_bars.append(trends.get_node(container + "/Trend" + str(i + 1)))
# Decorative children must not swallow clicks intended for indicator buttons.
for header_path in ["ResourcePage/ResourceHeader", "StructurePage/StructureHeader", "StarPage/StarHeader", "LifePage/LifeHeader"]:
for child in pages.get_node(header_path).get_children():
if child is TextureButton: _ignore_mouse_on_children(child)
func _ignore_mouse_on_children(node: Node) -> void:
for child in node.get_children():
if child is Control: child.mouse_filter = Control.MOUSE_FILTER_IGNORE
_ignore_mouse_on_children(child)
func update(world) -> void:
var source: Dictionary = world.state
var energy: float = clampf(source.energy / Parameters.INITIAL_ENERGY, 0.0, 1.0)
for bar in energy_bars: bar.scale.x = energy
var density_value: float = world.environment.stellar_environment(source).density
2026-09-28 22:32:52 +03:00
var density: Dictionary = Parameters.density_display(density_value)
warning_border.self_modulate = Parameters.density_warning_color(density_value)
for indicator in density_indicators:
for mode in ["Density", "DensityRip", "DensityCrunch"]:
indicator.get_node(mode).visible = mode == density.mode
var pointer: Control = indicator.get_node("Pointer")
pointer.position.x = 16.0 + 288.0 * density.position - pointer.size.x / 2.0
pointer.self_modulate = Color.BLACK if density.mode == "DensityCrunch" else Color.WHITE
for key in pointers:
var pointer: Control = pointers[key]
pointer.position.x = 16.0 * clampf(Parameters.value(source, key), 1.0, 19.0) - pointer.size.x / 2.0
for i in trend_bars.size():
var bar: Control = trend_bars[i]
bar.pivot_offset = Vector2(0.0, bar.size.y)
bar.scale.y = clampf(source.get("trends", {}).get(Parameters.TRENDS[i], 0.0), 0.0, 1.0)