OracleLoadstar/SCE-Universe_Java_Edition
开发者指南自定义接口

设置管理 (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_Maplist_Int_Maplist_String_Map 接口暴露。

加载图表中...

来源:

此架构通过 setManager_core 提供的单一入口点,将设置的存储细节(如不同类型的列表和 XML 持久化)与外部使用解耦。App.javaglobal.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 不存在或无法加载,这些默认值将生效。

java
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 页面中读取并允许用户切换布尔类型的设置:

java
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 页面中读取并允许用户修改字符串类型的设置:

java
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)类型默认值 (示例)描述
homeTitleString"SCE-UNIVERSE"主界面显示的标题。
isShowFriendshipRateBooleanfalse是否显示友情倍率。
isShowAllFriendshipRateBooleanfalse是否显示总友情倍率。
isCalcV5Booleanfalse是否启用 V5 版本计算。
defaultLoopV5Integer1V5 计算的默认循环次数。
portInteger8080WebUI 端口。
cardDataSavePathString""支援卡数据默认保存路径。
settingDataSavePathString""配置导出路径。
modBooleanfalse是否启用 Mod 模式。
isAutoSaveCardDataBooleantrue是否自动保存支援卡数据。
isCalcDIBooleanfalse是否启用 Declincrease 评估。
v5DefaultSpeedString{"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: 如果在创建实例过程中发生未知错误。

来源: setManager_core.java

addSet(key: String, value: Object): void

添加一个新的设置。如果 key 已存在,将抛出异常。

参数:

  • key (String): 设置的唯一标识符。
  • value (Object): 设置的值,可以是 StringIntegerBoolean

抛出:

  • Exception: 如果设置已重定义或值类型不受支持。

来源: setManager.java

<T> getVaule(key: String): T

获取指定键的设置值,并尝试自动推断其类型。

参数:

  • key (String): 设置的唯一标识符。

返回:

  • T: 设置的值,类型由内部逻辑推断。

抛出:

  • Exception: 如果设置未定义或发生未知错误。

来源: setManager.java

changeVaule(key: String, value: Object): void

修改指定键的设置值。如果设置不存在,则会添加该设置。

参数:

  • key (String): 设置的唯一标识符。
  • value (Object): 新的设置值,可以是 StringIntegerBoolean

抛出:

  • Exception: 如果值类型不受支持。

来源: setManager.java

toggleSetting(key: String): void

切换指定键的布尔设置值(true 变为 falsefalse 变为 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

相关链接

Sources

(8 files)

On this page