Update speed limit, enable embedded PCK format, and enhance brown dwarf production logic

This commit is contained in:
Kirill
2026-09-21 20:42:40 +03:00
parent f246efd6ad
commit 1796829338
9 changed files with 192 additions and 97 deletions
+33 -21
View File
@@ -26,21 +26,37 @@ var action_values: Dictionary = {
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)
var unique_requests: Array = []
var displayed: Array = []
var labels: Dictionary = {}
# Prefer the largest request (including MAX) when previews or rounded
# scientific labels coincide. Keep the request paired with its preview.
for i in range(requests.size() - 1, -1, -1):
if requests[i] <= 0.0: continue
var amount: float = preview.call(requests[i]) if preview.is_valid() else requests[i]
if not is_finite(amount) or amount < 1.0 or amount != floorf(amount): continue
var text: String = _format_action_value(amount)
if displayed.has(amount) or labels.has(text): continue
labels[text] = true
unique_requests.push_front(requests[i])
displayed.push_front(amount)
while unique_requests.size() < 5:
unique_requests.append(0.0)
displayed.append(0.0)
_set_action_values(unique_requests, displayed)
func _get_distribution(value: float) -> Array:
if value <= 0.0 or not is_finite(value):
if value < 1.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))
value = floorf(value)
var distribution: Array = []
var power: float = 1.0
while power < value:
distribution.append(power)
if distribution.size() > 4: distribution.pop_front()
power *= 10.0
distribution.append(value)
while distribution.size() < 5: distribution.append(0.0)
return distribution
func _set_action_values(values: Array, displayed: Array) -> void:
@@ -50,19 +66,15 @@ func _set_action_values(values: Array, displayed: Array) -> void:
var text: String = _format_action_value(displayed[ind])
if action_labels[ind].text != text:
action_labels[ind].text = text
action_labels[ind].get_parent().get_node("TextureButton").disabled = values[ind] <= 0.0
func _format_action_value(value: float) -> String:
if value <= 0.0 or not is_finite(value):
if value < 1.0 or not is_finite(value) or value != floorf(value):
return ""
if value >= 1.0:
return Global.format_number(value)
# Global's default is intended for object counts. Action values may be
# fractional, so retain enough precision to keep adjacent buttons distinct.
var exponent: int = int(floor(log(value) / log(10.0)))
var digits: int = clampi(-exponent + 1, 2, 6)
return Global.format_number(value, digits)
return Global.format_number(value)
func _on_action_button_pressed(button_id: int) -> void:
action_pressed.emit(page_id, action_values[button_id])
if action_values.get(button_id, 0.0) > 0.0:
action_pressed.emit(page_id, action_values[button_id])