Refactor state management; update unlock logic and enhance signal bindings in scene

This commit is contained in:
Kirill
2026-09-01 23:53:05 +03:00
parent 2f4b6a98d8
commit 0162084e53
3 changed files with 58 additions and 47 deletions
+6 -6
View File
@@ -97,7 +97,7 @@ func _unlock_items():
#print(_item_id ' | ', _entity.unlock)
var _flag_to_unlock = true
for _elem in owniverse.entities[_item_id].unlock:
if owniverse.stats.total_amount[_elem] < owniverse.entities[_item_id].unlock[_elem]:
if owniverse.state.stats.total_amount[_elem] < owniverse.entities[_item_id].unlock[_elem]:
_flag_to_unlock = false
break
@@ -246,7 +246,7 @@ func _set_active_page_actions() -> void:
#var amount = owniverse.get_available_to_produce(entity)
var amount = owniverse.calculate_max_producible(entity)
print(item_id, " : ", amount)
#print(item_id, " : ", amount)
page_actions[pa].set_actions(item_id, amount)
@@ -264,8 +264,8 @@ func _page_action_pressed(page_id: int, action_amount: float) -> void:
func _ready() -> void:
var _output = owniverse.init_enitities()
locked_items = _output.locked_items
var inited_result = owniverse.init_enitities()
locked_items = inited_result.locked_items
owniverse.load_data()
_init_owniverse_items()
@@ -278,7 +278,7 @@ func _ready() -> void:
func _process(delta: float) -> void:
owniverse = owniverse.evolute(delta)
owniverse.evolute(delta)
set_datetime(owniverse.state.year)
#owniverse.cycle(delta)
@@ -315,7 +315,7 @@ func _change_speed(delta: int) -> void:
func _on_topmenu_button_pressed(ButtonName) -> void:
print(ButtonName)
print("Debug: ", owniverse.state)
#var s: float = 1E15
#var z = 1.0
#for i in range(30):
+40 -41
View File
@@ -13,11 +13,12 @@ var auto_production: Array = []
var locked_entities: Array = []
#var cumulative_amount: Dictionary[String, float] = {}
var current_amount: Dictionary[String, float] = {}
#var current_amount: Dictionary[String, float] = {}
# ------------------------------------
var state: Dictionary = {
'datetime': 0.0,
'year': 0.0,
@@ -27,11 +28,13 @@ var state: Dictionary = {
'batches': {},
'binds': {},
'amount': {},
}
var stats: Dictionary = {
'stats': {
'total_amount': {},
}
}
var new_state = state.duplicate_deep()
var speed: int:
get:
@@ -41,26 +44,26 @@ var speed: int:
state.speed_in_years = pow(10, state.speed - 1)
func evolute(delta: float) -> Owniverse:
var new_owniverse := Owniverse.new()
_add_time_delta(new_owniverse, delta)
func evolute(delta: float):
_add_time_delta(delta)
# produce and evolute
new_owniverse.state = state
new_owniverse.stats = stats
new_owniverse.entities = entities
#new_owniverse.state = state
#new_owniverse.stats = stats
#new_owniverse.entities = entities
#.locked_entities = locked_entities
return new_owniverse
func _add_time_delta(new_owniverse: Owniverse, delta: float):
new_owniverse.state.speed_in_year = state.speed_in_year
new_owniverse.state.datetime = state.datetime \
+ delta * new_owniverse.state.speed_in_year
new_owniverse.state.year = floorf(new_owniverse.state.datetime)
func _add_time_delta(delta: float):
pass
#new_owniverse.state.datetime = state.datetime \
#+ delta * new_owniverse.state.speed_in_year
#
#new_owniverse.state.year = floorf(new_owniverse.state.datetime)
# ----------
@@ -113,7 +116,7 @@ func produce_hs(entity_id: String, value: float) -> float:
state.energy -= to_produce
_process_enitity(entity_id, to_produce)
stats.total_amount[entity_id] = stats.total_amount.get(entity_id, 0.0) + to_produce
state.stats.total_amount[entity_id] = state.stats.total_amount.get(entity_id, 0.0) + to_produce
return to_produce
@@ -137,7 +140,7 @@ func calculate_max_producible(entity: OwniverseEntity, desired_amount: float = 1
for bind_item in entity.bind:
if entity.bind[bind_item] == 0:
continue
var available = current_amount.get(bind_item, 0.0)
var available = state.amount.get(bind_item, 0.0)
var max_from_bind = floorf(available / entity.bind[bind_item])
max_producible = min(max_producible, max_from_bind)
@@ -345,12 +348,12 @@ func _process_enitity(entity_id: String, amount: float) -> void:
func load_data() -> bool:
var _game_data: Dictionary = SaveManager.load_data("owniverse", "qwerty")
if _game_data == {}:
var game_data: Dictionary = SaveManager.load_data("owniverse", "qwerty")
if game_data == {}:
return false
if !_game_data.has_all(["cumulative_amount"
, "current_amount"
if !game_data.has_all(["state"
, "stats"
#, "entity_batches"
#, "year",
]):
@@ -358,29 +361,24 @@ func load_data() -> bool:
#entity_batches = game_data["entity_batches"]
#cumulative_amount = _game_data["cumulative_amount"]
current_amount = _game_data["current_amount"]
#current_amount = _game_data["current_amount"]
#print("loaded ", _game_data)
#state = _game_data["state"]
stats = _game_data["stats"]
state = game_data["state"]
#state2 = game_data["state2"]
for item in current_amount:
items_to_update[item] = current_amount[item]
#print("loaded: ", _game_data)
for item in state.amount:
items_to_update[item] = state.amount[item]
#print("state: ", state)
#print("stats: ", stats)
return true
func save_data() -> void:
var _game_data: Dictionary = {}
#_game_data["cumulative_amount"] = cumulative_amount
_game_data["current_amount"] = current_amount
_game_data["state"] = state
_game_data["stats"] = stats
var game_data: Dictionary = {}
game_data["state"] = state
#game_data["entity_batches"] = entity_batches
SaveManager.save_data("owniverse", "qwerty", _game_data)
#print("saved ", _game_data)
SaveManager.save_data("owniverse", "qwerty", game_data)
#print("saved ", game_data, "\n\n\n")
func init_enitities() -> Dictionary:
@@ -392,17 +390,17 @@ func init_enitities() -> Dictionary:
var entity = OwniverseEntity.new(Global.OwniverseEntities[entity_id])
entities[entity_id] = entity
current_amount[entity_id] = 0
stats.total_amount[entity_id] = 0
#current_amount[entity_id] = 0
state.stats.total_amount[entity_id] = 0
state.amount[entity_id] = 0
if entity.lifespan > 0:
state.batches[entity] = []
add_entity_to_batch(entity, 0, 0)
if entity.group_as != "":
current_amount[entity.group_as] = 0
#current_amount[entity.group_as] = 0
state.amount[entity.group_as] = 0
stats.total_amount[entity.group_as] = 0
state.stats.total_amount[entity.group_as] = 0
if entity.unlock != {}:
locked_entities.append(entity)
@@ -422,6 +420,7 @@ func init_enitities() -> Dictionary:
entity_event_groups[entity.event_group] = []
entity_event_groups[entity.event_group].append(entity_id)
#print("ns: ", new_state)
return _result
#endregion
+12
View File
@@ -877,5 +877,17 @@ wait_time = 2.0
autostart = true
[connection signal="timeout" from="Background/Timer" to="Background" method="randomize_parallax"]
[connection signal="pressed" from="Stage/StageRows/TopMenu/BurgerButton" to="Stage" method="_on_topmenu_button_pressed" binds= ["Burger"]]
[connection signal="pressed" from="Stage/StageRows/TopMenu/TimeMinus" to="Stage" method="_change_speed" binds= [-1]]
[connection signal="pressed" from="Stage/StageRows/TopMenu/TimePlus" to="Stage" method="_change_speed" binds= [1]]
[connection signal="pressed" from="Stage/StageRows/TopMenu/ReportButton" to="Stage" method="_on_topmenu_button_pressed" binds= ["Report"]]
[connection signal="pressed" from="Stage/StageRows/PageScroller/HBoxContainer/ResourcePage/ResourceHeader/EnergyIndicator" to="Stage" method="_on_indicator_pressed" binds= ["Energy", 1]]
[connection signal="pressed" from="Stage/StageRows/PageScroller/HBoxContainer/ResourcePage/ResourceHeader/DensityIndicator" to="Stage" method="_on_indicator_pressed" binds= ["Density", 1]]
[connection signal="pressed" from="Stage/StageRows/PageScroller/HBoxContainer/StarPage/StarHeader/BurnabilityIndicator" to="Stage" method="_on_indicator_pressed" binds= ["Burnability", 2]]
[connection signal="pressed" from="Stage/StageRows/PageScroller/HBoxContainer/StarPage/StarHeader/ExplosivenessIndicator" to="Stage" method="_on_indicator_pressed" binds= ["Explosiveness", 2]]
[connection signal="pressed" from="Stage/StageRows/PageScroller/HBoxContainer/StructurePage/StructureHeader/EnergyIndicator" to="Stage" method="_on_indicator_pressed" binds= ["Energy", 3]]
[connection signal="pressed" from="Stage/StageRows/PageScroller/HBoxContainer/StructurePage/StructureHeader/DensityIndicator" to="Stage" method="_on_indicator_pressed" binds= ["Density", 3]]
[connection signal="pressed" from="Stage/StageRows/PageScroller/HBoxContainer/LifePage/LifeHeader/AggressionIndicator" to="Stage" method="_on_indicator_pressed" binds= ["Aggression", 4]]
[connection signal="pressed" from="Stage/StageRows/PageScroller/HBoxContainer/LifePage/LifeHeader/TrendIndicator" to="Stage" method="_on_indicator_pressed" binds= ["Trends", 4]]
[connection signal="timeout" from="Stage/ItemAmountUpdate" to="Stage" method="set_owniverse_item_value"]
[connection signal="timeout" from="Stage/Unlock&Save" to="Stage" method="_on_unlock_and_save_timeout"]