extends VBoxContainer @onready var color_pickers: Array[TrainColorPicker] = [$%ColorPicker1, $%ColorPicker2, $%ColorPicker3, $%ColorPicker4, $%ColorPicker5, $%ColorPicker6] @onready var left_arrow: ArrowButton = $%ArrowButtonLeft @onready var right_arrow: ArrowButton = $%ArrowButtonRight @onready var treno: Node3D = $TrainViewportContainer/SubViewport/Treno var selected_color: Color var selected_color_index: int = 0 func _ready() -> void: for color_picker in color_pickers: color_picker.pressed.connect(_on_color_selected.bind(color_picker)) color_picker.deselect() _set_selected_color(0) left_arrow.pressed.connect(_select_prev_color) right_arrow.pressed.connect(_select_next_color) func _process(delta: float) -> void: if treno: treno.rotation_degrees.y += 30.0 * delta func _set_selected_color(index: int) -> void: for i in range(color_pickers.size()): if i == index: color_pickers[i].select() selected_color_index = i selected_color = color_pickers[i].color _apply_train_color(selected_color) else: color_pickers[i].deselect() func _on_color_selected(selected_color_picker: TrainColorPicker) -> void: for i in range(color_pickers.size()): if color_pickers[i] == selected_color_picker: _set_selected_color(i) break func _select_prev_color() -> void: var next_index = (selected_color_index - 1 + color_pickers.size()) % color_pickers.size() _set_selected_color(next_index) func _select_next_color() -> void: var next_index = (selected_color_index + 1) % color_pickers.size() _set_selected_color(next_index) func _apply_train_color(color: Color) -> void: var mat: ShaderMaterial = load("res://tgcc/train/Color1_train.tres") if mat: mat.set_shader_parameter("albedo_color", color)