extends HBoxContainer class_name OwniverseAction signal action_pressed(page_id, amount: float) @onready var action_labels: Array = [ $ActionControl0/Label, $ActionControl1/Label, $ActionControl2/Label, $ActionControl3/Label, $ActionControl4/Label, ] var page_id: int = -1 var current_item_id = "" var action_values: Dictionary = { 0: 0, 1: 0, 2: 0, 3: 0, 4: 0, } func set_actions(item_id: String, value: float, preview: Callable = Callable()) -> void: current_item_id = item_id var requests: Array = _get_distribution(value) var displayed: Array = requests.duplicate() if preview.is_valid(): for i in range(displayed.size()): displayed[i] = preview.call(requests[i]) if requests[i] > 0.0 else 0.0 _set_action_values(requests, displayed) func _get_distribution(value: float) -> Array: if value <= 0.0 or not is_finite(value): return [0.0, 0.0, 0.0, 0.0, 0.0] var distribution: Array = [value, 0, 0, 0, 0] var exp_value = int(floor(log(abs(value)) / log(10.0))) var floor_value = max(exp_value - 4, -1) for ev in range(exp_value, floor_value, -1): distribution.push_front(pow(10.0, ev)) return distribution func _set_action_values(values: Array, displayed: Array) -> void: for ind in range(0, 5): action_values[ind] = values[ind] # Keep the original request for execution; show the exact planned output. var text: String = Global.format_number(displayed[ind]) if displayed[ind] > 0 else "" if action_labels[ind].text != text: action_labels[ind].text = text func _on_action_button_pressed(button_id: int) -> void: action_pressed.emit(page_id, action_values[button_id])