设置管理 (setManager_core)
setManager_core 是 SCE-Universe Java Edition 中负责集中管理应用程序设置的核心组件。它提供了一种类型安全的方法来存储、检索、修改和持久化各种应用程序配置参数。
概述
setManager_core 组件为应用程序提供了一个统一的设置管理接口。它支持字符串 (String)、整数 (Integer) 和布尔值 (Boolean) 类型的设置。在应用程序启动时,它会尝试从 settings.xml 文件加载设置,如果文件不存在或加载失败,则会使用代码中定义的默认设置。应用程序的其他部分可以通过其提供的 API 轻松地访问和修改这些设置,并在适当的时候将更改持久化到文件中。
架构
setManager_core 采用单例模式设计,确保在整个应用程序中只有一个设置管理器实例。它继承自 setManager 类,该类封装了实际的设置管理逻辑,包括内存存储、类型判断以及 XML 文件的读写操作。设置数据被分类存储在分别用于布尔值、整数和字符串类型的静态 List<Map<String, ?>> 结构中,这些结构通过 list_Boolen_Map、list_Int_Map 和 list_String_Map 接口暴露。
来源:
此架构通过 setManager_core 提供的单一入口点,将设置的存储细节(如不同类型的列表和 XML 持久化)与外部使用解耦。App.java 和 global.java 负责在应用程序启动时初始化 setManager_core,而各种 UI 页面则通过 setManager_core 实例与设置进行交互。
核心流程
应用程序启动时,setManager_core 会加载已保存的设置。如果设置文件不存在或加载失败,应用程序将使用默认设置。此后,应用程序组件可以随时读取或修改这些设置。
来源: setManager.java
主要功能
setManager (通过 setManager_core 暴露) 提供了以下核心功能:
设置的添加与初始化
在应用程序启动时,App.java 会调用 setManager_core.addSet() 方法来初始化一系列默认设置。这些设置在 settings.xml 文件不存在或加载失败时起到保障作用。
设置的读取
应用程序可以通过键值获取不同类型的设置。setManager 提供了专门的方法来获取字符串、整数和布尔类型的设置,也提供了一个泛型方法 getVaule 来自动推断类型。
设置的修改与删除
可以通过 changeVaule 方法修改现有设置的值,如果设置不存在则会添加。布尔类型的设置还可以使用 toggleSetting 方法进行切换。RemoveSet 方法用于从内存中删除指定键的设置。
设置的持久化
SaveSettings 方法负责将所有当前内存中的设置序列化并保存到 settings.xml 文件中。LoadSettings 方法负责从 settings.xml 文件中反序列化并加载设置,并将其合并到内存中的当前设置。
用法示例
添加默认设置
在应用程序启动时,可以添加默认设置。如果 settings.xml 不存在或无法加载,这些默认值将生效。
1try{
2 // 添加设置
3 cn.oraclestar.sce.system.setManager.setManager_core.addSet("homeTitle","SCE-UNIVERSE");
4 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isShowFriendshipRate",false);
5 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isShowAllFriendshipRate",false);
6 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isShowNonSpecialtyRate",false);
7 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isShowAllNonSpecialtyRate",false);
8 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isShowNonSpecialtySpRate",false);
9 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isShowTrueSpecialtyRate",false);
10 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isShowSpecialtySpRate",false);
11 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isCalcV2",false);
12 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isCalcV3",false);
13 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isCalcV4",false);
14 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isCalcV5",false);
15 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isV5rectify",false);
16 cn.oraclestar.sce.system.setManager.setManager_core.addSet("defaultLoopV5",1);
17 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isAutoSaveCardData",true);
18 cn.oraclestar.sce.system.setManager.setManager_core.addSet("cardDataSavePath","");
19 cn.oraclestar.sce.system.setManager.setManager_core.addSet("isCalcDI",false);
20 cn.oraclestar.sce.system.setManager.setManager_core.addSet("port",8080);
21 cn.oraclestar.sce.system.setManager.setManager_core.addSet("settingDataSavePath","");
22 setManager_core.addSet("v5DefaultSpeed","{\"main\":\"0\",\"sub\":\"0\",\"SP\":\"0\"}");
23 setManager_core.addSet("v5DefaultPower","{\"main\":\"0\",\"sub\":\"0\",\"SP\":\"0\"}");
24 setManager_core.addSet("v5DefaultStamina","{\"main\":\"0\",\"sub\":\"0\",\"SP\":\"0\"}");
25 setManager_core.addSet("v5DefaultGuts","{\"main\":\"0\",\"sub\":\"0\",\"SP\":\"0\"}");
26 setManager_core.addSet("v5DefaultWit","{\"main\":\"0\",\"sub\":\"0\",\"SP\":\"0\"}");
27 setManager_core.addSet("isV5Speedrectify",false);
28 setManager_core.addSet("isV5Staminarectify",false);
29 setManager_core.addSet("isV5Powerrectify",false);
30 setManager_core.addSet("isV5Gutsrectify",false);
31 setManager_core.addSet("isV5Witrectify",false);
32}catch (Exception e){
33 System.err.printf("[Main]:配置管理器初始化失败\n");
34}来源: App.java
读取和切换布尔设置
在 UI 页面中读取并允许用户切换布尔类型的设置:
1// 读取布尔设置并显示其状态
2_ui.insertOptionWithoutNewLine("展示友情倍率 ", (int)1);
3if ((Boolean)(cn.oraclestar.sce.system.setManager.setManager_core.getVaule("isShowFriendshipRate")))
4{
5 _ui.insertText("{ 开 }");
6} else {
7 _ui.insertText("{ 关 }");
8}
9
10// 根据用户输入切换布尔设置
11if (input.equals("1"))
12{
13 cn.oraclestar.sce.system.setManager.setManager_core.toggleSetting("isShowFriendshipRate");
14}来源: display.java, display.java
读取和修改字符串设置
在 UI 页面中读取并允许用户修改字符串类型的设置:
1// 读取字符串设置并显示
2_ui.insertOption("主界面标题 { " + (String)(cn.oraclestar.sce.system.setManager.setManager_core.getVaule("homeTitle")) + " }", (int)6);
3
4// 根据用户输入修改字符串设置
5else if (input.equals("6"))
6{
7 cn.oraclestar.sce.system.setManager.setManager_core.changeVaule("homeTitle", displayEditInfo("主界面标题", cn.oraclestar.sce.system.setManager.setManager_core.getVaule("homeTitle")));
8}来源: display.java, display.java
配置选项
设置持久化文件 settings.xml 位于应用程序的根目录。文件内容是 Java XMLEncoder 生成的序列化数据,包含三种类型的设置列表。
| 选项 (Key) | 类型 | 默认值 (示例) | 描述 |
|---|---|---|---|
homeTitle | String | "SCE-UNIVERSE" | 主界面显示的标题。 |
isShowFriendshipRate | Boolean | false | 是否显示友情倍率。 |
isShowAllFriendshipRate | Boolean | false | 是否显示总友情倍率。 |
isCalcV5 | Boolean | false | 是否启用 V5 版本计算。 |
defaultLoopV5 | Integer | 1 | V5 计算的默认循环次数。 |
port | Integer | 8080 | WebUI 端口。 |
cardDataSavePath | String | "" | 支援卡数据默认保存路径。 |
settingDataSavePath | String | "" | 配置导出路径。 |
mod | Boolean | false | 是否启用 Mod 模式。 |
isAutoSaveCardData | Boolean | true | 是否自动保存支援卡数据。 |
isCalcDI | Boolean | false | 是否启用 Declincrease 评估。 |
v5DefaultSpeed | String | {"main":"0","sub":"0","SP":"0"} | V5 默认速度设置 (JSON 字符串)。 |
| ... | ... | ... | 更多设置,详见 App.java 中的初始化代码。 |
来源: App.java
API 参考
以下是 setManager (通过 setManager_core 实例访问) 中提供的主要 API 方法。
getCore(): setManager_core
获取 setManager_core 的单例实例。该方法是线程安全的。
返回:
setManager_core:setManager_core的唯一实例。
抛出:
Exception: 如果在创建实例过程中发生未知错误。
addSet(key: String, value: Object): void
添加一个新的设置。如果 key 已存在,将抛出异常。
参数:
key(String): 设置的唯一标识符。value(Object): 设置的值,可以是String、Integer或Boolean。
抛出:
Exception: 如果设置已重定义或值类型不受支持。
来源: setManager.java
<T> getVaule(key: String): T
获取指定键的设置值,并尝试自动推断其类型。
参数:
key(String): 设置的唯一标识符。
返回:
T: 设置的值,类型由内部逻辑推断。
抛出:
Exception: 如果设置未定义或发生未知错误。
来源: setManager.java
changeVaule(key: String, value: Object): void
修改指定键的设置值。如果设置不存在,则会添加该设置。
参数:
key(String): 设置的唯一标识符。value(Object): 新的设置值,可以是String、Integer或Boolean。
抛出:
Exception: 如果值类型不受支持。
来源: setManager.java
toggleSetting(key: String): void
切换指定键的布尔设置值(true 变为 false,false 变为 true)。
参数:
key(String): 布尔设置的唯一标识符。
来源: setManager.java
RemoveSet(key: String): void
从内存中删除指定键的设置。
参数:
key(String): 要删除设置的唯一标识符。
来源: setManager.java
SaveSettings(): void
将所有当前内存中的设置持久化到 settings.xml 文件中。
抛出:
Exception: 如果在保存过程中发生 I/O 错误或序列化问题。
来源: setManager.java
LoadSettings(): Boolean
从 settings.xml 文件中加载设置并合并到内存中的当前设置。
返回:
Boolean:true如果成功加载并合并,false如果文件不存在或加载失败。
抛出:
Exception: 如果在加载过程中发生 I/O 错误或反序列化问题。
来源: setManager.java