import json from pathlib import Path from .models import WorldState, AgentState, GlobalMeter, Stance, Factions, FactionData from .story_arcs import get_default_story_arcs STATE_FILE = Path(__file__).parent.parent / "state.json" def get_default_state() -> WorldState: """创建默认的世界状态""" return WorldState( tick=0, weather="sunny", town_mood=0, agents={ "alice": AgentState( emotion="calm", goal="探索小镇", memory=[], stance=Stance(optimism=0.6, fear=0.4), faction="neutral", ), "bob": AgentState( emotion="calm", goal="与人交流", memory=[], stance=Stance(optimism=0.4, fear=0.6), faction="neutral", ), }, events=[], global_meter=GlobalMeter(value=0, threshold=100, cooldown=0), factions=Factions( optimists=FactionData(power=0, threshold=10, skill="festival", members=[]), fearful=FactionData(power=0, threshold=10, skill="panic", members=[]) ), story_arcs=get_default_story_arcs(), ) def load_state() -> WorldState: """从文件加载状态,如果不存在则创建默认状态""" if STATE_FILE.exists(): with open(STATE_FILE, "r", encoding="utf-8") as f: data = json.load(f) return WorldState(**data) return get_default_state() def save_state(state: WorldState) -> None: """保存状态到文件""" with open(STATE_FILE, "w", encoding="utf-8") as f: json.dump(state.model_dump(), f, ensure_ascii=False, indent=2)