Add core simulation modules for owniverse mechanics

- Introduced `life_evolution.gd` to manage life evolution processes.
- Implemented `manual_production.gd` for handling production mechanics, including resource management and production steps.
- Created `object_batches.gd` to manage batches of objects, including scaling and appending batches.
- Developed `object_ledger.gd` for tracking physical amounts, available resources, and binding ownerships.
- Added `simulation_module.gd` as a base class for simulation modules, providing a weak reference to the world.
- Established `stellar_rules.gd` for managing stellar evolution and destruction mechanics.
- Introduced `universe_environment.gd` to calculate environmental parameters based on the current state of the universe.
This commit is contained in:
Kirill
2026-09-29 20:23:20 +03:00
parent da03ba11c0
commit f2111a376a
42 changed files with 1681 additions and 1704 deletions
+18 -18
View File
@@ -106,10 +106,10 @@ func set_datetime(value: float):
func set_owniverse_item_value() -> void:
for item_id in owniverse.items_to_update:
for item_id in owniverse.presentation.pending_amounts:
if owniverse_items.has(item_id):
owniverse_items[item_id].set_label(owniverse.items_to_update[item_id])
owniverse.items_to_update.clear()
owniverse_items[item_id].set_label(owniverse.presentation.pending_amounts[item_id])
owniverse.presentation.pending_amounts.clear()
#endregion
@@ -127,7 +127,7 @@ func _on_indicator_pressed(indicator_name: String, page: int = 0):
func _set_item_description(item: OwniverseItem) -> void:
var category: String = "Entity" if owniverse.entities.has(item.item_id) else "Force"
var category: String = "Entity" if owniverse.catalog.entities.has(item.item_id) else "Force"
var id: String = item.item_id if category == "Entity" else item.item_name.capitalize()
var page: int = clampi(item.item_page, 0, 4)
if description_targets.get(page, {}).get("id", "") != id:
@@ -215,7 +215,7 @@ func item_activated(item: OwniverseItem) -> void:
if item.item_id == "S" or item.item_id == "H":
var _value = owniverse.state.amount[item.item_id]
_value = 9 * _value if _value > 0 else 1
owniverse.produce_hs(item.item_id, _value)
owniverse.production.produce_hs(item.item_id, _value)
func _check_counters(delta: float) -> Array:
@@ -276,16 +276,16 @@ func _set_active_page_actions() -> void:
if !g_active_items.has(pa): continue
var item_id: String = g_active_items[pa].item_id
var entity: OwniverseEntity = owniverse.entities[item_id]
var entity: OwniverseEntity = owniverse.catalog.entities[item_id]
#var amount = owniverse.get_available_to_produce(item_id)
#var amount = owniverse.get_available_to_produce(entity)
var amount = owniverse.calculate_max_producible(entity)
var amount = owniverse.production.calculate_max_producible(entity)
#print(item_id, " : ", amount)
if item_id == "SMBH":
var preview: Callable = func(requested: float) -> float:
return owniverse.calculate_max_producible(entity, requested)
return owniverse.production.calculate_max_producible(entity, requested)
page_actions[pa].set_actions(item_id, amount, preview)
else:
page_actions[pa].set_actions(item_id, amount)
@@ -298,7 +298,7 @@ func _page_action_pressed(page_id: int, action_amount: float) -> void:
var item_id: String = g_active_items[page_id].item_id
if action_amount > 0:
owniverse.produce(item_id, action_amount)
owniverse.production.produce(item_id, action_amount)
#endregion
@@ -325,8 +325,8 @@ func create_new_universe() -> void:
owniverse = Owniverse.new()
var inited_result: Dictionary = init_enitities()
locked_items = inited_result.locked_items
owniverse.new_state = owniverse.state
for entity in previous.entities.values():
for entity in previous.catalog.entities.values():
entity.free()
previous.free()
@@ -354,7 +354,7 @@ func create_new_universe() -> void:
func _refresh_universe_ui() -> void:
owniverse.refresh_item_amounts()
owniverse.presentation.refresh(owniverse.state, owniverse.catalog)
_change_speed(0)
set_datetime(owniverse.state.time.year)
set_owniverse_item_value()
@@ -437,9 +437,9 @@ func load_data() -> bool:
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()
owniverse.evolution.initialize_life_batches()
owniverse.presentation.refresh(owniverse.state, owniverse.catalog)
pending_page = clampi(int(game_data.get("ui", {}).get("current_page", 0)), 0, PAGE_COUNT - 1)
_restore_page.call_deferred()
return true
@@ -491,14 +491,14 @@ func init_enitities() -> Dictionary:
'locked_items': [],
}
owniverse.catalog.load_definitions(Global.OwniverseEntities)
for entity_id in owniverse.entities:
var entity: OwniverseEntity = owniverse.entities[entity_id]
for entity_id in owniverse.catalog.entities:
var entity: OwniverseEntity = owniverse.catalog.entities[entity_id]
owniverse.state.stats.total_amount[entity_id] = 0
owniverse.state.amount[entity_id] = 0
if entity.lifespan > 0:
owniverse.state.batches[entity.id] = []
owniverse.add_entity_to_batch(entity_id, 0, 0)
owniverse.batches.add_entity_to_batch(entity_id, 0, 0)
if entity.group_as != "":
owniverse.state.amount[entity.group_as] = 0