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
+12 -64
View File
@@ -9,10 +9,6 @@ var description_targets: Dictionary = {}
var description_samples: Dictionary = {}
var description_rates: Dictionary = {}
var description_elapsed: float = 0.0
const UI_UPDATE_INTERVAL: float = 0.1
var ui_elapsed: float = 0.0
var ui_pages: Vector2i = Vector2i(-1, -1)
var closing: bool = false
const PAGE_COUNT = 5
const RESOURCE_PAGE = 1
@@ -93,9 +89,7 @@ func set_datetime(value: float):
# Simulation time advances in tenths of a year; displaying five decimal
# places only adds zeroes and suggests precision the simulation does not
# have.
var text: String = Global.format_number(value, 1) if value != 0.0 else "0.0"
if date_time.text != text:
date_time.text = text
date_time.text = Global.format_number(value, 1) if value != 0.0 else "0.0"
#region Item manipulations: update and visibility
@@ -103,27 +97,8 @@ func set_datetime(value: float):
func set_owniverse_item_value() -> void:
for item_id in owniverse.items_to_update:
if owniverse_items.has(item_id):
var item: OwniverseItem = owniverse_items[item_id]
if item.is_visible_in_tree() and item.get_global_rect().intersects(stage_page_scroller.get_global_rect()):
item.set_label(owniverse.items_to_update[item_id])
func _refresh_ui(force: bool = false) -> void:
if force or owniverse.item_amounts_dirty:
owniverse.refresh_item_amounts(true)
set_owniverse_item_value()
set_datetime(owniverse.state.time.year)
_set_active_page_actions()
ui_elapsed = 0.0
func _update_ui(delta: float) -> void:
ui_elapsed += delta
var position_in_pages: float = float(stage_page_scroller.scroll_horizontal) / PAGE_WIDTH
var pages := Vector2i(floori(position_in_pages), ceili(position_in_pages))
if pages != ui_pages or ui_elapsed >= UI_UPDATE_INTERVAL:
ui_pages = pages
_refresh_ui()
owniverse_items[item_id].set_label(owniverse.items_to_update[item_id])
owniverse.items_to_update.clear()
#endregion
@@ -244,9 +219,6 @@ func item_activated(item: OwniverseItem) -> void:
if item.item_id == "S" or item.item_id == "H":
var _value = owniverse.produce_hs(item.item_id, 100_000)
_unlock_items()
_refresh_ui(true)
_refresh_descriptions()
func _check_counters(delta: float) -> Array:
@@ -305,8 +277,6 @@ func _input(event: InputEvent) -> void:
func _set_active_page_actions() -> void:
for pa in page_actions:
if !g_active_items.has(pa): continue
if not page_actions[pa].is_visible_in_tree() or not page_actions[pa].get_global_rect().intersects(stage_page_scroller.get_global_rect()):
continue
var item_id: String = g_active_items[pa].item_id
var entity: OwniverseEntity = owniverse.entities[item_id]
@@ -332,17 +302,12 @@ func _page_action_pressed(page_id: int, action_amount: float) -> void:
if action_amount > 0:
owniverse.produce(item_id, action_amount)
_unlock_items()
_refresh_ui(true)
_refresh_descriptions()
#endregion
func _ready() -> void:
get_tree().auto_accept_quit = false
owniverse.defer_item_updates = true
var inited_result = init_enitities()
locked_items = inited_result.locked_items
load_data()
@@ -352,7 +317,6 @@ func _ready() -> void:
set_datetime(owniverse.state.time.year)
set_owniverse_item_value()
_unlock_items()
_refresh_ui(true)
g_counters.swipe.sec = 0.2
@@ -365,7 +329,8 @@ func _process(delta: float) -> void:
owniverse.evolute(delta)
_update_descriptions(delta)
_update_ui(delta)
set_owniverse_item_value()
set_datetime(owniverse.state.time.year)
#owniverse.cycle(delta)
@@ -374,6 +339,7 @@ func _process(delta: float) -> void:
var actions = _check_counters(delta)
_do_actions(actions)
_set_active_page_actions()
func _change_speed(delta: int) -> void:
@@ -440,8 +406,10 @@ func load_data() -> bool:
SaveManager.blocked_saves["owniverse"] = true
push_error("Save is missing the current entity: " + id)
return false
owniverse.state = restored
owniverse.new_state = restored.duplicate(true)
var complete: Dictionary = owniverse.state.duplicate(true)
complete.merge(restored, true)
owniverse.state = complete
owniverse.new_state = complete
owniverse.initialize_life_batches()
owniverse.refresh_item_amounts()
pending_page = clampi(int(game_data.get("ui", {}).get("current_page", 0)), 0, PAGE_COUNT - 1)
@@ -455,41 +423,21 @@ func _restore_page() -> void:
if pending_page >= 0:
stage_page_scroller.scroll_horizontal = pending_page * PAGE_WIDTH
pending_page = -1
_refresh_ui(true)
func save_data() -> void:
var page: int = pending_page
if page < 0:
page = clampi(roundi(float(stage_page_scroller.scroll_horizontal) / PAGE_WIDTH), 0, PAGE_COUNT - 1)
SaveManager.request_save("owniverse", "qwerty", {
SaveManager.save_data("owniverse", "qwerty", {
"state": owniverse.state,
"ui": {"current_page": page},
})
func _notification(what: int) -> void:
if not is_node_ready() or closing:
return
if what == NOTIFICATION_WM_CLOSE_REQUEST:
_close_after_save()
elif what == NOTIFICATION_APPLICATION_PAUSED:
if is_node_ready() and (what == NOTIFICATION_WM_CLOSE_REQUEST or what == NOTIFICATION_APPLICATION_PAUSED):
save_data()
# Mobile platforms can suspend all processing immediately after this event.
SaveManager.flush_saves()
func _close_after_save() -> void:
closing = true
set_process(false)
set_process_input(false)
mouse_filter = Control.MOUSE_FILTER_IGNORE
# Stop GUI actions too while the final snapshot is being written.
process_mode = Node.PROCESS_MODE_DISABLED
save_data()
if SaveManager.is_saving():
await SaveManager.saves_drained
get_tree().quit()
func init_enitities() -> Dictionary: