Add world indicators and parameters to enhance universe simulation
- new universe creation function.
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
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 = []
|
||||
|
||||
func _init(stage: Node) -> void:
|
||||
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: Dictionary = Parameters.density_display(world.stellar_environment(source).density)
|
||||
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)
|
||||
Reference in New Issue
Block a user