pulse node, shaft strip, constantify, etc.

This commit is contained in:
Jennie Robinson Faber 2026-05-12 19:10:15 +01:00
parent d4c609e1af
commit 0b6d121986
24 changed files with 645 additions and 245 deletions

104
scenes/shaft_strip.gd Normal file
View file

@ -0,0 +1,104 @@
extends VBoxContainer
const COLOR_CURRENT_BG := Color(0.83, 0.63, 0.09, 1)
const COLOR_CURRENT_FONT := Color(0.05, 0.05, 0.05, 1)
const COLOR_FUTURE_BG := Color(0.05, 0.18, 0.05, 1)
const COLOR_FUTURE_FONT := Color(0.2, 1, 0.2, 1)
const COLOR_CLEARED_BG := Color(0.05, 0.12, 0.05, 1)
const COLOR_CLEARED_FONT := Color(0.2, 0.55, 0.2, 1)
const COLOR_GROUND_BG := Color(0.08, 0.25, 0.08, 1)
const COLOR_GROUND_FONT := Color(0.5, 1, 0.5, 1)
const COLOR_BORDER := Color(0.2, 1, 0.2, 1)
const STATE_CURRENT := 0
const STATE_CLEARED := 1
const STATE_FUTURE := 2
const STATE_GROUND := 3
var _cells: Array = []
var _current_floor: int = EventBus.STARTING_FLOOR
var _styles: Array[StyleBoxFlat] = []
var _font_colors: Array[Color] = []
func _ready():
add_theme_constant_override("separation", 2)
_build_styles()
_build_cells()
_refresh()
EventBus.floor_changed.connect(_on_floor_changed)
func _build_styles():
_styles = [
_make_style(COLOR_CURRENT_BG, 2),
_make_style(COLOR_CLEARED_BG, 1),
_make_style(COLOR_FUTURE_BG, 1),
_make_style(COLOR_GROUND_BG, 2),
]
_font_colors = [
COLOR_CURRENT_FONT,
COLOR_CLEARED_FONT,
COLOR_FUTURE_FONT,
COLOR_GROUND_FONT,
]
func _make_style(bg: Color, border_width: int) -> StyleBoxFlat:
var style := StyleBoxFlat.new()
style.bg_color = bg
style.border_color = COLOR_BORDER
style.border_width_left = border_width
style.border_width_right = border_width
style.border_width_top = border_width
style.border_width_bottom = border_width
style.content_margin_left = 4
style.content_margin_right = 4
style.content_margin_top = 4
style.content_margin_bottom = 4
return style
func _build_cells():
var total := EventBus.STARTING_FLOOR
for i in range(total):
var floor_num := total - i
var cell := PanelContainer.new()
cell.size_flags_horizontal = Control.SIZE_EXPAND_FILL
cell.size_flags_vertical = Control.SIZE_EXPAND_FILL
var label := Label.new()
label.text = "G" if floor_num == 1 else str(floor_num)
label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER
label.size_flags_horizontal = Control.SIZE_EXPAND_FILL
label.size_flags_vertical = Control.SIZE_EXPAND_FILL
label.add_theme_font_size_override("font_size", 20)
cell.add_child(label)
add_child(cell)
_cells.append({ "panel": cell, "label": label, "floor": floor_num })
func _on_floor_changed(floor_num: int):
if floor_num == _current_floor:
return
_current_floor = floor_num
_refresh()
func _refresh():
for entry in _cells:
_style_cell(entry)
func _style_cell(entry: Dictionary):
var floor_num: int = entry["floor"]
var panel: PanelContainer = entry["panel"]
var label: Label = entry["label"]
var state: int
if floor_num == _current_floor:
state = STATE_CURRENT
elif floor_num > _current_floor:
state = STATE_CLEARED
elif floor_num == 1:
state = STATE_GROUND
else:
state = STATE_FUTURE
panel.add_theme_stylebox_override("panel", _styles[state])
label.add_theme_color_override("font_color", _font_colors[state])