diff --git a/CHANGELOG.md b/CHANGELOG.md index c916b320..9a5ad35f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,11 +3,32 @@ ***目前最新可用版本:*** [GitHub latest release](https://github.com/isHarryh/Ark-Pets/releases) +## v2.4 +| **新增** | | +|:------------|:----------------------------------------------------| +| [`4754554`] | 新增了在下载对话框中显示下载速率的功能。 | +| [`1eb6c08`] | 新增了**模型库下载源** ghproxy.harryh.cn,取代了原来的 ghproxy.com。 | +| [`a5c7b9a`] | 新增了可以**导入模型仓库的压缩包**以加载模型的功能。
新增了一些启动器页面跳转逻辑。 | +| [`727a34e`] | 新增了启动器的网络代理设置项。 | + +| **修复** | | +|:------------|:-----------------------------| +| [`cb06cba`] | 修复了启动器内弹出的对话框在关闭时未播放关闭动画的问题。 | + +| **优化** | | +|:---------------------------|:-----------------------------------------------| +| [`cb06cba`] | 重构了**启动器前台任务**的代码逻辑。 | +| [`1eb6c08`] | 优化了控制台日志,输出流与错误流相分离。 | +| [`#52`]
[`#55`] | 优化了**自动化构建**,在 GitHub Actions 新增了 `build` 工作流。 | +| [`3b8f5fc`]
[`abc4743`] | 修订并公布了代码检查规则。 | +| [`f6139c3`] | 重构了**模型资源**的代码逻辑。 | +| [`#47`]
[`7db99c3`] | 优化了 Windows 安装程序的默认安装目录和在控制面板卸载页面中的表现。 | + ## v2.3 -| **新增** | | -|:------------|:-----------------------------------------| -| [`a31afcf`] | 新增了右键桌宠本体即可弹出菜单的功能。 | -| [`17d3fde`] | 新增了可以在菜单中切换桌宠形态的功能,现在可以切换拥有多个形态的敌方领袖的形态。 | +| **新增** | | +|:------------|:---------------------------------------------| +| [`a31afcf`] | 新增了**右键桌宠本体即可弹出菜单**的功能。 | +| [`17d3fde`] | 新增了可以在菜单中**切换桌宠形态**的功能,现在可以切换拥有多个形态的敌方领袖的形态。 | | **修复** | | |:-----------------------|:-------------------------------------------------| @@ -18,8 +39,8 @@ | **优化** | | |:------------|:-----------------------------------------| | [`0fb103c`] | 优化了 Windows 安装程序的语言本地化(修订了简体中文,新增了繁体中文)。 | -| [`a31afcf`] | 优化了托盘菜单的外观表现。 | -| [`e046e1c`] | 优化了动画队列的代码逻辑。 | +| [`a31afcf`] | 优化了**托盘菜单**的外观表现。 | +| [`e046e1c`] | 优化了**动画队列**的代码逻辑。 | | **补丁** | | |:------------------------|:-------------------| @@ -213,7 +234,10 @@ [`#12`]: https://github.com/isHarryh/Ark-Pets/issues/12 [`#34`]: https://github.com/isHarryh/Ark-Pets/issues/34 [`#39`]: https://github.com/isHarryh/Ark-Pets/issues/39 +[`#47`]: https://github.com/isHarryh/Ark-Pets/issues/47 [`#48`]: https://github.com/isHarryh/Ark-Pets/issues/48 +[`#52`]: https://github.com/isHarryh/Ark-Pets/issues/52 +[`#55`]: https://github.com/isHarryh/Ark-Pets/issues/55 [`2bc0079`]: https://github.com/isHarryh/Ark-Pets/commit/2bc0079b922684b1d4850f9211225dcf803e555c [`48ef339`]: https://github.com/isHarryh/Ark-Pets/commit/48ef339dd78711e208ded8c5148569d8b89690b1 [`95e6a1a`]: https://github.com/isHarryh/Ark-Pets/commit/95e6a1ace8d047ac51314e7d5572ce4169fa9f84 @@ -267,3 +291,12 @@ [`e046e1c`]: https://github.com/isHarryh/Ark-Pets/commit/e046e1c67ccbd61cde7e50927eccf9c20c7ee736 [`b72421a`]: https://github.com/isHarryh/Ark-Pets/commit/b72421a90b9263c6f25fe76053f139ffa445a981 [`7a161d3`]: https://github.com/isHarryh/Ark-Pets/commit/7a161d304f4256d0dfa5f027fad1479ac0d06391 +[`cb06cba`]: https://github.com/isHarryh/Ark-Pets/commit/cb06cba4e14838da89e4ea5c10cd29c402719985 +[`4754554`]: https://github.com/isHarryh/Ark-Pets/commit/4754554ae9356f53f34313b8cfc1abc4fb57fd9b +[`1eb6c08`]: https://github.com/isHarryh/Ark-Pets/commit/1eb6c087b2b7587bfb9de38daabb9060dd0bfba7 +[`3b8f5fc`]: https://github.com/isHarryh/Ark-Pets/commit/3b8f5fc2db55cd0916a6a9207b733f015951f746 +[`f6139c3`]: https://github.com/isHarryh/Ark-Pets/commit/f6139c3890f1a23fc6abf71d62e8def0e17bb72e +[`abc4743`]: https://github.com/isHarryh/Ark-Pets/commit/abc4743ae4e4b2a854e405008de2bb7269ac6b17 +[`7db99c3`]: https://github.com/isHarryh/Ark-Pets/commit/7db99c32f44d86ff23b9857fec21e5e024f8a9b8 +[`a5c7b9a`]: https://github.com/isHarryh/Ark-Pets/commit/a5c7b9a99f4fd79d4f92497a7a855c71ba112dcb +[`727a34e`]: https://github.com/isHarryh/Ark-Pets/commit/727a34eed5d1a41ee3e6f153726f2bcf92a28958 diff --git a/README.md b/README.md index 17c4721c..c602cb15 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ +

Ark-Pets

ArkPets icon

Arknights Desktop Pets | 明日方舟桌宠
- v2.3 + v2.4

GitHub Top Language @@ -59,10 +60,13 @@ ### 下一步计划 -以下内容可能在接下来的数个版本内得到实现: +当前版本 **v2.4** 将成为 ArkPets v2.x 系列的**最后一个**子版本。 + +以下内容将在 ArkPets v3.x 系列实现: - 支持高级筛选和收藏夹功能 - 支持将动态立绘作为桌宠启动 +- 全面更新依赖库的版本 以下内容仍需进一步的探索: @@ -85,18 +89,17 @@ 1. 请[**前往此页面**](https://github.com/isHarryh/Ark-Pets/releases)下载最新的 **ArkPets-Setup.exe** 安装包。 2. 下载完成后,请运行所下载的安装包以进行软件的安装。 3. 安装完成后,请通过桌面快捷方式等途径,打开 ArkPets 启动器。 -4. 打开启动器后,首次使用需要 **下载模型文件** 。请进入启动器“选项”页面,在“模型下载”处点击“全部下载”。(下载过程可能持续1~ - 2分钟,下载总大小约为140MB) +4. 打开启动器后,首次使用需要 **下载模型文件** 。请进入启动器“选项”页面,在“模型下载”处点击“全部下载”。 5. 最后,进入启动器“模型”页面即可检索并选中想要作为桌宠启动的角色,然后点击左下角“启动”按钮即可。 > 提示: > - 本程序当前只支持在`Windows`系统上运行。 -> - 如需更新软件,无需手动卸载后再安装,直接运行安装包即可。 +> - 如需更新软件到 v2.x 的更高版本,无需预先手动卸载,直接运行安装包即可。 > - 如需关闭已启动的桌宠,请右键点击系统托盘中的 ArkPets 图标,然后选择“退出”。 ### 额外说明 -- *检查模型库更新* :我们的模型库不定时更新,如果您想体验新实装进游戏的模型,可以进入启动器“选项”页面,在“模型下载”处点击“检查更新”。如果提示有更新,点击“全部下载”就能完成模型库更新。 +- *检查模型库更新* :我们的模型库不定期更新,如果您想体验新实装进游戏的模型,可以进入启动器“选项”页面,在“模型下载”处点击“检查更新”。如果提示有更新,点击“全部下载”就能完成模型库更新。 - *开机自启动* :进入启动器“选项”页面可以设置开机自启动,设置后下一次电脑开机会自动生成最后一次启动的桌宠。 - *透明模式* :为防止用户在游戏、观看视频等情景下误触到桌宠,特增加了此模式。右键托盘后打开“透明模式”,即可屏蔽桌宠和鼠标的一切交互(点击、拖动操作都将穿透到下层窗口),并且桌宠的不透明度会降低。 - *下边界距离* :桌宠在部分用户的电脑上无法正常检测任务栏位置(桌宠会沉入任务栏),此时您可以手动设置任务栏高度。进入启动器“选项”页面可以调整下边界距离,通常会将其设置为15的正整数倍。 diff --git a/core/src/cn/harryh/arkpets/assets/AssetItemGroup.java b/core/src/cn/harryh/arkpets/assets/AssetItemGroup.java index 8d414a15..13c44e6c 100644 --- a/core/src/cn/harryh/arkpets/assets/AssetItemGroup.java +++ b/core/src/cn/harryh/arkpets/assets/AssetItemGroup.java @@ -13,6 +13,7 @@ *


* The structure of the root directory may be like what is shown below. * Each {@code SubDir} represents an {@code AssetItem}. + * *
  * +-RootDir
  * |-+-SubDir1 (whose name is the model name of xxx)
@@ -23,6 +24,7 @@
  * |---SubDir3
  * |---...
*
+ * * @since ArkPets 2.4 */ public class AssetItemGroup implements Collection { @@ -36,6 +38,10 @@ public AssetItemGroup() { this(new ArrayList<>()); } + /** Searches the Asset Items whose {@code name} and {@code appellation} match the given keywords. + * @param keyWords The given keywords. Each keyword should be separated by a blank. + * @return An Asset Item Group. Returns {@code this} if the parameter {@code keyWords} is {@code null} or empty. + */ public AssetItemGroup searchByKeyWords(String keyWords) { if (keyWords == null || keyWords.isEmpty()) return this; @@ -59,6 +65,10 @@ public AssetItemGroup searchByKeyWords(String keyWords) { return result; } + /** Searches the Asset Item whose relative path provided by {@code getLocation} matches the given path string. + * @param relPath The given path string. + * @return The first matched Asset Item. Returns {@code null} if no one matched. + */ public AssetItem searchByRelPath(String relPath) { if (relPath == null || relPath.isEmpty()) return null; @@ -68,6 +78,11 @@ public AssetItem searchByRelPath(String relPath) { return null; } + /** Collects the values of a specified property of the Asset Items. + * @param property A property extractor. + * @return A Set that contains all the possible values of the property. + * @param The type of the property value. + */ public Set extract(PropertyExtractor property) { HashSet result = new HashSet<>(); for (AssetItem item : this) @@ -75,10 +90,21 @@ public Set extract(PropertyExtractor property) { return result; } + /** Returns a new Asset Item Group consisting of the Asset Items that match the given predicate. + * @param predicate A predicate to apply to each Asset Item to determine if it should be included. + * @return An Asset Item Group. + */ public AssetItemGroup filter(Predicate predicate) { return new AssetItemGroup(assetItemList.stream().filter(predicate).toList()); } + /** Returns a new Asset Item Group consisting of the Asset Items whose property satisfied the requirements. + * @param property A property extractor. + * @param filterValues The property values to be matched. + * @param mode The {@link AssetItemGroup.FilterMode}. + * @return An Asset Item Group. + * @param The type of the property value. + */ public AssetItemGroup filter(PropertyExtractor property, Set filterValues, int mode) { final boolean TRUE = (mode & FilterMode.MATCH_REVERSE) == 0; return filter(assetItem -> { @@ -95,10 +121,18 @@ public AssetItemGroup filter(PropertyExtractor property, Set filterVal }); } + /** Returns a new Asset Item Group consisting of the Asset Items whose property satisfied the requirements. + * @param property A property extractor. + * @param filterValues The property values to be matched. + * @return An Asset Item Group. + * @param The type of the property value. + */ public AssetItemGroup filter(PropertyExtractor property, Set filterValues) { return filter(property, filterValues, 0); } + /** Sorts the Asset Items by their {@code assetDir} in natural order. + */ public void sort() { assetItemList.sort(Comparator.comparing(asset -> asset.assetDir, Comparator.naturalOrder())); } diff --git a/docs/CustomModel.md b/docs/CustomModel.md index 6591ff3c..e2bb90ae 100644 --- a/docs/CustomModel.md +++ b/docs/CustomModel.md @@ -2,31 +2,62 @@ ArkPets附加说明文档 # 自定义模型 ArkPets 添加自定义 Spine 模型的方法。 +> 注意: +> 本文档适用于 ArkPets v2.x,不同版本的 ArkPets 的模型管理逻辑可能有较大差异。 ### 前提 -- **熟悉 JSON 数据格式。** -- 所要添加的模型的 **Spine版本必须是 3.8** ,这也是截至本文档撰写时《明日方舟》所使用的版本。不同版本的Spine之间的兼容性较差,您可以使用文本编辑器强制查看小人.skel文件的头部信息,以确定其Spine版本。 -- 所要添加的模型必须是《明日方舟》中的游戏模型,如果不是,那么该模型包含的动画名称必须与《明日方舟》的动画名称命名方式一致。 +1. **熟悉 JSON 数据格式。** +2. 所要添加的模型的 **Spine 版本必须是 3.8**,这也是截至本文档撰写时《明日方舟》所使用的 Spine 的版本。不同版本的 Spine 之间的兼容性较差,您可以使用文本编辑器强制查看小人骨骼(.skel)文件的头部信息,以确定其 Spine 版本。 +3. 所要添加的模型必须是《明日方舟》中的角色模型,如果不是,那么该模型包含的动画名称必须与《明日方舟》中的动画名称命名方式一致。关于命名方式,参见本项目 Java 源码 `cn.harryh.arkpets.animations.AnimClip` 中的 `AnimType` 枚举)。 ### 步骤 -1. 安装 ArkPets 并确保已在 [选项] 中下载了模型。 -2. 将所要添加的模型的资源文件(包括 .atlas .png .skel)放入文件夹 _A_ 中,然后将文件夹 _A_ 放到程序目录中的 `models` 资源文件夹中。 - > 也可以放到其他资源文件夹,但是需要进行额外的操作。假设把文件夹 _A_ 放到了程序目录中的文件夹 _B_ 中,且模型的 `type` 值是 _C_ ,那么程序目录中的 `models_data.json` 的 `storageDirectory` 字段中需要添加键值对 `"C" : "B"`。 -3. 在程序目录中的 `models_data.json`,找到 `data` 字段。仿照其他模型对象的格式,加入你所要添加的新模型的信息,示例如下: +下面将演示如何添加名称为 `MyModel` 的干员类型(Operator)的模型到 ArkPets 中: + +1. 在程序工作目录(下简称“根目录”)中创建一个数据集文件 `models_data.json` 和一个总模型文件夹 `models`。 + 数据集文件的格式如下(标注星号 `*` 者为必需条目): ```json - "285_medic2": { // 键需要设置为模型文件夹A的名称(重要) - "assetId": "build_char_285_medic2", // 模型资源文件的纯文件名称(去掉扩展名) - "type": "Operator", - "style": null, - "name": "Lancet-2", // 模型在启动器中显示的名称 + { + "storageDirectory": { + // * 每种模型类型所对应的总模型文件夹名称 + "Operator": "models" + }, + "sortTags": { + // 每个模型标签所对应的本地化描述 + "Operator": "干员", + "Skinned": "时装" + }, + "gameDataVersionDescription": "xxxxx", // 游戏数据版本描述 + "gameDataServerRegion": "zh_CN", // 游戏数据服务器地区描述 + "data": { + // * 每个模型的信息 + // ... + }, + "arkPetsCompatibility": [2, 0, 0] // ArkPets 兼容性版本标识 + } + ``` + > 提示: + > 1. 也可以通过启动器 “选项” 页的模型下载或导入功能来导入 ArkModels 仓库的数据集文件和总模型文件夹。 + > 2. 总资源文件夹的名称可以是其他名称,但是需要为数据集文件中的 `storageDirectory` 字段中添加一个键值对 `"角色类型" : "总资源文件夹名"`。 +2. 将所要添加的模型的资源文件(包括 .atlas .png .skel 文件)放入同一个文件夹(下称“单模型文件夹”)中,然后将单模型文件夹放入总资源文件夹中。 +3. 在数据集文件中的 `data` 字段中,仿照其他模型对象的格式,加入你所要添加的新模型的信息,示例如下(标注星号 `*` 者为必需条目): + ```json lines + "my_model": { // * 单模型文件夹的名称 + "assetId": "build_my_model", // * 模型资源文件的纯文件名称(去掉扩展名) + "type": "Operator", // * 模型类型 + "style": "BuildingDefault", // 模型子类型 + "name": "My Model", // * 角色名称 "sortTags": [ + // 模型标签 "Operator" ], - "appellation": null, - "skinGroupId": null, - "skinGroupName": null, - "checksum": null + "appellation": "My Model", // 角色代号 + "skinGroupId": "ILLUST", // 时装系列编号 + "skinGroupName": "默认服装", // 时装系列名称 + "checksum": { // 文件 MD5 校验和 + ".atlas": "xxxxx", + ".png": "xxxxx", + ".skel": "xxxxx" + } } ``` - 上方示例中,大部分字段都可以设为 `null`,它们的具体功能在此不进行介绍,可自行探索。 -4. 重新打开启动器即可找到已添加的自定义模型。若未在启动器中找到自定义模型,请检查你的操作和相关拼写。 +4. 打开 ArkPets 启动器,进行模型 “重载” 后,即可载入自定义模型。若未在启动器中找到自定义模型,请检查相关操作和拼写。 diff --git a/docs/Thanks.md b/docs/Thanks.md index 8d7fb2b4..4d63745f 100644 --- a/docs/Thanks.md +++ b/docs/Thanks.md @@ -3,15 +3,21 @@ ArkPets附加说明文档 我们由衷地感谢所有曾经为 ArkPets 的开发提供过各种形式的帮助的个人和组织: -- [@Aloento](https://github.com/aloento) - 提供前期技术指导 -- [@Auroal-dawn](https://github.com/bicaoluoshuang) - 绘制了`v2.x`的软件Logo、协助模型仓库更新 -- [@南陽劉子驥](https://github.com/KaiserWilheim) [@NappingSodion](https://github.com/KJH-x) [@MegaSteelX](https://github.com/MegaSteelX) - 提交了诸多有益的Issues -- [Java 团队](https://www.oracle.com/java) -- [GitHub 团队](https://github.com) -- etc. +| 个人 | | +|:-----------------------------------------------------------------------------------------------------------------------------------------:|:----------------------------| +| [@Aloento](https://github.com/aloento) | 提供了前期技术指导 | +| [@Auroal-dawn](https://github.com/bicaoluoshuang) | 绘制了 v2.x 的软件 Logo、协助了模型仓库更新 | +| [@Half-nothing](https://github.com/half-nothing) | 进行了活跃的二次开发实践 | +| [@南陽劉子驥](https://github.com/KaiserWilheim)
[@NappingSodion](https://github.com/KJH-x)
[@MegaSteelX](https://github.com/MegaSteelX) | 提交了诸多有益的 Issues | + +| 组织 | +|:------------------------------------:| +| [Java](https://www.oracle.com/java) | +| [GitHub](https://github.com) | +| [IconMonstr](https://iconmonstr.com) | -## 第三方库 +## 第三方库 关于本项目依赖的第三方库的 Group-Artifact-Version 信息,请参见仓库根目录的 `build.gradle` 文件。 | 名称 | 用途 | @@ -23,4 +29,3 @@ ArkPets附加说明文档 | [JNA](https://github.com/java-native-access/jna) | Java Native Access 接口 | | [Alibaba FastJSON](https://github.com/alibaba/fastjson) | JSON 工具 | | [Apache log4j](https://logging.apache.org/log4j) | 日志工具 | -| [IconMonstr](https://iconmonstr.com) | 部分 SVG 图标 |