# GameState 数据调用说明 `GameState` 是一个 Autoload 单例,用于存储游戏运行时的所有动态数据。它通过 `InitializationManager` 在新游戏开始或加载存档时进行初始化。 ## 数据结构 `GameState` 内部使用一个大的 `Dictionary` 来存储所有状态。数据主要分为两部分: 1. **基础状态 (来自 `Init_Base.json`)**: 这些数据直接存储在 `GameState` 的顶层。 2. **任务开发相关状态 (来自 `task_development.json`)**: 这些数据被组织在 `GameState` 的 `task_development` 键下。 ### 1. 基础状态 (顶层键) 这些键直接对应 `Data/Init_Base.json` 中的内容。 * `level` (String): 当前关卡标识符 (例如: "level_0")。 * `time` (Dictionary): 游戏内时间。 * `year` (int) * `month` (int) * `week` (int) * `day` (int) * `money` (int): 玩家当前拥有的资金。 * `idea` (int): 玩家当前拥有的创意点数。 * `fans` (int): 玩家当前的粉丝数量。 * `staff_count` (int): 当前员工数量。 * `system_status` (Dictionary): 系统状态标志。 * `game_pause` (bool): 游戏是否暂停。 * `is_on_task` (bool): 是否正在执行某个任务。 **访问示例:** ```gdscript # 获取当前资金 var current_money = GameState.get_value("money") print("Money: ", current_money) # 获取当前年份 var current_year = GameState.get_value("time.year") print("Year: ", current_year) # 检查游戏是否暂停 var is_paused = GameState.get_value("system_status.game_pause") if is_paused: print("Game is paused.") ``` ### 2. 任务开发状态 (`task_development` 键) 所有与游戏开发任务相关的数据都存储在这个字典下。其结构源自 `Data/task_development.json`。 `task_development` 包含以下子字典: * `platforms` (Dictionary): 游戏平台信息。 * `gameplays` (Dictionary): 游戏玩法信息。 * `themes` (Dictionary): 游戏主题信息。 * `strategies` (Dictionary): 开发策略信息。 * `product_focus_points` (Dictionary): 产品侧重点信息。 #### 2.1 `task_development.platforms` 存储所有平台的数据。键是平台名称 (String),值是包含平台属性的字典。 * **结构:** `Dictionary[String, Dictionary]` * **示例键:** "台式 & 笔记本", "Switch", "PS", "XBOX" * **子字典属性:** * `enabled` (bool): 该平台当前是否可用/解锁。 * `Icon` (String): 用于显示平台图标的资源标识符。 * `Maker` (String): 平台制造商。 * `Sales` (int): 平台销量潜力或基数。 * `Market_share` (int): 市场份额百分比。 * `Cost` (int): 在该平台开发游戏的成本或授权费。 **访问示例:** ```gdscript # 获取所有平台数据 var all_platforms = GameState.get_value("task_development.platforms") # 获取 "Switch" 平台的成本 var switch_cost = GameState.get_value("task_development.platforms.Switch.Cost") print("Switch Cost: ", switch_cost) # 检查 "PS" 平台是否启用 var ps_enabled = GameState.get_value("task_development.platforms.PS.enabled") if ps_enabled: print("PS platform is enabled.") else: print("PS platform is not enabled yet.") ``` #### 2.2 `task_development.gameplays` 存储所有游戏玩法的数据。键是玩法名称 (String),值是包含玩法属性的字典。 * **结构:** `Dictionary[String, Dictionary]` * **示例键:** "角色扮演(RPG)", "动作(ACT)", "模拟经营(SIM)" * **子字典属性:** * `enabled` (bool): 该玩法当前是否可用/解锁。 * `Experience` (int): 玩家在该玩法上的经验值。 * `Popularity` (String): 玩法的流行度 ("高", "中", "低")。 * `Cost` (int): 研究或使用该玩法的成本。 **访问示例:** ```gdscript # 获取 "模拟经营(SIM)" 玩法的经验值 var sim_exp = GameState.get_value("task_development.gameplays.模拟经营(SIM).Experience") print("SIM Experience: ", sim_exp) # 获取所有玩法的流行度 var all_gameplays = GameState.get_value("task_development.gameplays") for gameplay_name in all_gameplays: var popularity = all_gameplays[gameplay_name].Popularity print(gameplay_name, " Popularity: ", popularity) ``` #### 2.3 `task_development.themes` 存储所有游戏主题的数据。键是主题名称 (String),值是包含主题属性的字典。 * **结构:** `Dictionary[String, Dictionary]` * **示例键:** "现代都市", "校园青春", "魔幻奇幻" * **子字典属性:** * `enabled` (bool): 该主题当前是否可用/解锁。 * `Experience` (int): 玩家在该主题上的经验值。 * `Popularity` (String): 主题的流行度 ("高", "中", "低")。 * `Cost` (int): 研究或使用该主题的成本。 **访问示例:** ```gdscript # 获取 "魔幻奇幻" 主题的成本 var fantasy_cost = GameState.get_value("task_development.themes.魔幻奇幻.Cost") print("Fantasy Theme Cost: ", fantasy_cost) ``` #### 2.4 `task_development.strategies` 存储所有开发策略的数据。键是策略名称 (String),值是包含策略属性的字典。 * **结构:** `Dictionary[String, Dictionary]` * **示例键:** "快速迭代", "精品打磨", "口碑营销" * **子字典属性:** * `enabled` (bool): 该策略当前是否可用/解锁。 * `Description` (String): 策略的描述。 * `Effect` (String): 策略效果的简述。 * `Cost` (int): 采用该策略的成本。 **访问示例:** ```gdscript # 获取 "口碑营销" 策略的描述 var word_of_mouth_desc = GameState.get_value("task_development.strategies.口碑营销.Description") print("Word of Mouth Strategy: ", word_of_mouth_desc) ``` #### 2.5 `task_development.product_focus_points` 存储产品开发侧重点的数据。这是一个嵌套字典。 * **结构:** `Dictionary` (包含 "Gameplay", "Graphics", "Story", "Sound" 等键) * **子字典属性 (例如 "Gameplay"):** * `name` (String): 侧重点名称 ("玩法")。 * `description` (String): 描述。 * `weight` (float): 权重 (影响开发点数分配等)。 * `current_level` (int): 当前投入的等级或点数。 * `max_level` (int): 最大等级或点数。 **访问示例:** ```gdscript # 获取 "画面" 侧重点的当前等级 var graphics_level = GameState.get_value("task_development.product_focus_points.Graphics.current_level") print("Graphics Focus Level: ", graphics_level) # 获取所有侧重点的权重 var focus_points = GameState.get_value("task_development.product_focus_points") for focus_key in focus_points: var weight = focus_points[focus_key].weight print(focus_key, " Weight: ", weight) ``` ## 注意事项 * 通过 `GameState.get_value(key_path)` 获取的数据通常是原始数据的副本或值类型,修改它们不会直接影响 `GameState` 内部存储。 * 要修改 `GameState` 中的数据,应使用 `GameState.set_value(key_path, new_value)` 方法。 * `key_path` 支持点号 (`.`) 分隔的路径来访问嵌套字典的值。 * 在访问数据前,最好先通过 `GameState.has_value(key_path)` 检查路径是否存在,以避免潜在错误。 ```gdscript # 安全地增加资金 var current_money = GameState.get_value("money") GameState.set_value("money", current_money + 1000) # 安全地增加 "Switch" 平台的市场份额 var switch_path = "task_development.platforms.Switch.Market_share" if GameState.has_value(switch_path): var current_share = GameState.get_value(switch_path) GameState.set_value(switch_path, current_share + 1) else: printerr("Cannot find path: ", switch_path) ```