|
import streamlit as st
|
|
import json
|
|
import os
|
|
import time
|
|
|
|
def update_game_state(tag_currency=None, enkephalin=None, threshold=None, game_stats=None, save=True):
|
|
"""
|
|
Update game state and ensure UI reflects changes
|
|
|
|
Args:
|
|
tag_currency: New tag currency value (or None to keep current)
|
|
enkephalin: New enkephalin value (or None to keep current)
|
|
threshold: New threshold value (or None to keep current)
|
|
game_stats: Dict of game stats to update (or None to keep current)
|
|
save: Whether to save state to disk
|
|
"""
|
|
changed = False
|
|
|
|
if tag_currency is not None and tag_currency != st.session_state.tag_currency:
|
|
st.session_state.tag_currency = tag_currency
|
|
changed = True
|
|
|
|
if enkephalin is not None and enkephalin != st.session_state.enkephalin:
|
|
st.session_state.enkephalin = enkephalin
|
|
changed = True
|
|
|
|
if threshold is not None and threshold != st.session_state.threshold:
|
|
st.session_state.threshold = threshold
|
|
changed = True
|
|
|
|
|
|
if game_stats is not None:
|
|
for key, value in game_stats.items():
|
|
if key in st.session_state.game_stats and st.session_state.game_stats[key] != value:
|
|
st.session_state.game_stats[key] = value
|
|
changed = True
|
|
|
|
if changed:
|
|
|
|
if 'state_version' not in st.session_state:
|
|
st.session_state.state_version = 0
|
|
st.session_state.state_version += 1
|
|
|
|
|
|
if save:
|
|
save_game_state()
|
|
|
|
def save_game_state():
|
|
"""Save current game state after scanning"""
|
|
try:
|
|
import tag_storage
|
|
success = tag_storage.update_tag_storage_from_session(st.session_state)
|
|
|
|
|
|
game_data = {
|
|
"threshold": st.session_state.threshold,
|
|
"tag_currency": st.session_state.tag_currency,
|
|
"enkephalin": st.session_state.enkephalin,
|
|
"purchased_upgrades": st.session_state.purchased_upgrades,
|
|
"achievements": list(st.session_state.achievements),
|
|
"game_stats": st.session_state.game_stats,
|
|
"tag_power_bonus": st.session_state.tag_power_bonus if hasattr(st.session_state, 'tag_power_bonus') else 0,
|
|
"coin_multiplier": st.session_state.coin_multiplier if hasattr(st.session_state, 'coin_multiplier') else 1.0,
|
|
"unlocked_combinations": list(st.session_state.unlocked_combinations) if hasattr(st.session_state, 'unlocked_combinations') else [],
|
|
"combination_bonuses": st.session_state.combination_bonuses if hasattr(st.session_state, 'combination_bonuses') else {"threshold_reduction": 0, "coin_bonus": 0},
|
|
"sacrificed_tags": st.session_state.sacrificed_tags if hasattr(st.session_state, 'sacrificed_tags') else {},
|
|
"saved_time": time.strftime("%Y-%m-%d %H:%M:%S")
|
|
}
|
|
|
|
with open(tag_storage.get_storage_path("game_state.json"), "w") as f:
|
|
json.dump(game_data, f, indent=2)
|
|
|
|
return success
|
|
except Exception as e:
|
|
print(f"Error saving game state: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return False
|
|
|
|
def force_update_ui():
|
|
"""Force a UI update by incrementing state version"""
|
|
if 'state_version' not in st.session_state:
|
|
st.session_state.state_version = 0
|
|
st.session_state.state_version += 1 |