Update speed limit, enable embedded PCK format, and enhance brown dwarf production logic
This commit is contained in:
+33
-21
@@ -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])
|
||||
|
||||
Reference in New Issue
Block a user