diff --git a/.github/ISSUE_TEMPLATE/-english--bug-report.md b/.github/ISSUE_TEMPLATE/-english--bug-report.md
deleted file mode 100644
index 894d796b..00000000
--- a/.github/ISSUE_TEMPLATE/-english--bug-report.md
+++ /dev/null
@@ -1,28 +0,0 @@
----
-name: "[English] Bug Report"
-about: To report a bug or a crash
-title: ''
-labels: ''
-assignees: ''
-
----
-
-
-**Version**: vX.X.X
-**Platform**: Windows XX
-
-#### Description
-_Please describe the problem._
-
-#### Log
-_Please provide the log or the stacktrace. The log file directory can be found in your installation directory. `desktop.log` is the log generated by Launcher and `core.log` is the log generated by ArkPets Core. If no log file is available, or it is determined that the log file is useless for solving this problem, you can remove this section._
-```
-# *** ArkPets Log - xxxx ***
-# Created: xxxx-xx-xx xx:xx:xx,xxx
-# OS: xxxx
-# Java version: xxxx
-# Working directory: xxxx
-```
-
-#### To Reproduce
-_Please tell us how to reproduce this problem. If it is not reproducible, please also indicate it here._
diff --git a/.github/ISSUE_TEMPLATE/-english--proposal-or-feature-request.md b/.github/ISSUE_TEMPLATE/-english--proposal-or-feature-request.md
deleted file mode 100644
index 7d703ee7..00000000
--- a/.github/ISSUE_TEMPLATE/-english--proposal-or-feature-request.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-name: "[English] Proposal or Feature Request"
-about: To submit a proposal or a new feature request
-title: ''
-labels: ''
-assignees: ''
-
----
-
-
-**Version**: vX.X.X
-
-#### Description
-_Please write your suggestions here... Thank you for your participation._
diff --git "a/.github/ISSUE_TEMPLATE/-\347\256\200\344\275\223\344\270\255\346\226\207--\344\274\230\345\214\226-\345\273\272\350\256\256-\346\226\260\345\212\237\350\203\275\350\277\275\345\212\240.md" "b/.github/ISSUE_TEMPLATE/-\347\256\200\344\275\223\344\270\255\346\226\207--\344\274\230\345\214\226-\345\273\272\350\256\256-\346\226\260\345\212\237\350\203\275\350\277\275\345\212\240.md"
deleted file mode 100644
index 027ce0e7..00000000
--- "a/.github/ISSUE_TEMPLATE/-\347\256\200\344\275\223\344\270\255\346\226\207--\344\274\230\345\214\226-\345\273\272\350\256\256-\346\226\260\345\212\237\350\203\275\350\277\275\345\212\240.md"
+++ /dev/null
@@ -1,14 +0,0 @@
----
-name: "[简体中文] 优化/建议/新功能追加"
-about: 用于提供优化建议,或者请求追加新功能与特性
-title: ''
-labels: ''
-assignees: ''
-
----
-
-
-**软件版本**:vX.X.X
-
-#### 描述
-_感谢您对本项目的关注与支持!请描述您想要提供的优化建议。_
diff --git "a/.github/ISSUE_TEMPLATE/-\347\256\200\344\275\223\344\270\255\346\226\207--\351\227\256\351\242\230-\351\224\231\350\257\257-\345\264\251\346\272\203\346\212\245\345\221\212.md" "b/.github/ISSUE_TEMPLATE/-\347\256\200\344\275\223\344\270\255\346\226\207--\351\227\256\351\242\230-\351\224\231\350\257\257-\345\264\251\346\272\203\346\212\245\345\221\212.md"
deleted file mode 100644
index ecf27896..00000000
--- "a/.github/ISSUE_TEMPLATE/-\347\256\200\344\275\223\344\270\255\346\226\207--\351\227\256\351\242\230-\351\224\231\350\257\257-\345\264\251\346\272\203\346\212\245\345\221\212.md"
+++ /dev/null
@@ -1,28 +0,0 @@
----
-name: "[简体中文] 问题/错误/崩溃报告"
-about: 用于报告程序所出现的问题、错误或者崩溃情形
-title: ''
-labels: ''
-assignees: ''
-
----
-
-
-**软件版本**:vX.X.X
-**运行环境**:Windows XX
-
-#### 问题描述
-_请简单描述您所遇到的问题,可提供图片以辅助说明。_
-
-#### 程序日志
-_请在下方粘贴程序日志。日志文件夹 (logs) 可在安装目录下找到,其中 `desktop.log` 是启动器日志,`core.log` 是桌宠本体日志。如果没有日志生成,或者已明确日志对解决问题无益,则此栏可以删除。_
-```
-# *** ArkPets Log - xxxx ***
-# Created: xxxx-xx-xx xx:xx:xx,xxx
-# OS: xxxx
-# Java version: xxxx
-# Working directory: xxxx
-```
-
-#### 复现方法
-_请详细描述该问题在其他设备上的复现方法。如果问题无法稳定复现,或者只是特定设备上存在的特殊问题,也请在此处说明。_
diff --git a/.github/ISSUE_TEMPLATE/bug_report_en.yml b/.github/ISSUE_TEMPLATE/bug_report_en.yml
new file mode 100644
index 00000000..177a0bcd
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report_en.yml
@@ -0,0 +1,50 @@
+name: "[English] Bug Report"
+description: "Report a problem, error, or crash you encountered."
+labels: ["Type: Bug"]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Before submitting a bug report, please make sure that:
+ 1. You are using the latest version of the program.
+ 2. You have read the [FAQ](https://github.com/isHarryh/Ark-Pets/blob/v3.x/docs/FAQ.md) and your issue is not resolved.
+ 3. You have browsed [existing GitHub Issues](https://github.com/isHarryh/Ark-Pets/issues) and found no similar issues.
+ - type: input
+ id: version
+ attributes:
+ label: Software Version
+ description: What version of the software are you using?
+ placeholder: vX.X.X
+ validations:
+ required: true
+ - type: input
+ id: os
+ attributes:
+ label: Operating System
+ description: What operating system are you using?
+ placeholder: Windows XX
+ validations:
+ required: true
+ - type: textarea
+ id: description
+ attributes:
+ label: Problem Description
+ description: Please describe the problem you encountered here.
+ placeholder: |
+ Please specify the conditions and steps to reproduce the problem, as well as the specific behavior observed.
+ You can paste screenshots here to help describe your issue more clearly.
+ validations:
+ required: true
+ - type: textarea
+ id: logs
+ attributes:
+ label: Program Logs
+ description: Please upload the program log file here (optional).
+ render: text
+ placeholder: |
+ How to upload log files?
+ 1. Open the launcher, go to the "Options" page, scroll down and click the "Export Logs" button.
+ 2. Click "Select Recent Logs", then click "Export Selected Logs".
+ 3. Choose where to save the log files and confirm.
+ 4. Drag and drop the saved log files here.
diff --git a/.github/ISSUE_TEMPLATE/bug_report_zh_cn.yml b/.github/ISSUE_TEMPLATE/bug_report_zh_cn.yml
new file mode 100644
index 00000000..44799ff6
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report_zh_cn.yml
@@ -0,0 +1,50 @@
+name: "[简体中文] 提交问题报告"
+description: "向我们反馈程序所出现的问题、错误或者崩溃情形。"
+labels: ["Type: Bug"]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ 提交问题报告前,请确保您:
+ 1. 使用的是最新版本的程序。
+ 2. 阅读了[常见问题解答](https://github.com/isHarryh/Ark-Pets/blob/v3.x/docs/FAQ.md)但未能解决您的问题。
+ 3. 浏览了[现有的 GitHub Issues](https://github.com/isHarryh/Ark-Pets/issues) 但没有找到类似的问题。
+ - type: input
+ id: version
+ attributes:
+ label: 软件版本
+ description: 您所使用的软件版本是:
+ placeholder: vX.X.X
+ validations:
+ required: true
+ - type: input
+ id: os
+ attributes:
+ label: 操作系统
+ description: 您所使用的操作系统是:
+ placeholder: Windows XX
+ validations:
+ required: true
+ - type: textarea
+ id: description
+ attributes:
+ label: 问题描述
+ description: 请描述您所遇到的问题:
+ placeholder: |
+ 您需要说明您所遇到的问题的触发条件与复现步骤,以及问题的具体表现。
+ 您可以将截图粘贴到此处,以便更清晰地描述您的问题。
+ validations:
+ required: true
+ - type: textarea
+ id: logs
+ attributes:
+ label: 程序日志
+ description: 请上传程序的日志文件(非必填):
+ render: text
+ placeholder: |
+ 如何上传日志文件?
+ 1. 打开启动器,进入“选项”页面,下滑找到并点击“导出日志”按钮。
+ 2. 点击“选择近期日志”,然后点击“导出所选的日志”。
+ 3. 选择日志文件的保存位置并确认。
+ 4. 将保存的日志文件拖拽到此处。
diff --git a/.github/ISSUE_TEMPLATE/bug_report_zh_tw.yml b/.github/ISSUE_TEMPLATE/bug_report_zh_tw.yml
new file mode 100644
index 00000000..2ecfbd56
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report_zh_tw.yml
@@ -0,0 +1,50 @@
+name: "[繁體中文] 提交問題回報"
+description: "向我們回報程式出現的問題、錯誤或崩潰情形。"
+labels: ["Type: Bug"]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ 提交問題回報前,請確保您:
+ 1. 使用的是最新版本的程式。
+ 2. 閱讀了[常見問題解答](https://github.com/isHarryh/Ark-Pets/blob/v3.x/docs/FAQ.md)但未能解決您的問題。
+ 3. 瀏覽了[現存的 GitHub Issues](https://github.com/isHarryh/Ark-Pets/issues) 但沒有找到類似的問題。
+ - type: input
+ id: version
+ attributes:
+ label: 軟體版本
+ description: 您所使用的軟體版本是:
+ placeholder: vX.X.X
+ validations:
+ required: true
+ - type: input
+ id: os
+ attributes:
+ label: 作業系統
+ description: 您所使用的作業系統是:
+ placeholder: Windows XX
+ - type: textarea
+ id: description
+ attributes:
+ label: 問題描述
+ description: 請描述您所遇到的問題:
+ placeholder: |
+ 請說明您遇到問題的觸發條件與重現步驟,以及問題的具體表現。
+ 您可以將截圖貼在此處,以便更清楚地描述您的問題。
+ validations:
+ required: true
+ - type: textarea
+ id: logs
+ attributes:
+ label: 程式日誌
+ description: 請上傳程式的日誌檔案(非必填):
+ render: text
+ placeholder: |
+ 如何上傳日誌檔案?
+ 1. 開啟啟動器,進入「選項」頁面,下滑找到並點擊「匯出日誌」按鈕。
+ 2. 點擊「選擇近期日誌」,然後點擊「匯出所選的日誌」。
+ 3. 選擇日誌檔案的儲存位置並確認。
+ 4. 將儲存的日誌檔案拖曳到此處。
+ validations:
+ required: false
diff --git a/.github/ISSUE_TEMPLATE/feature_request_en.yml b/.github/ISSUE_TEMPLATE/feature_request_en.yml
new file mode 100644
index 00000000..441b18a9
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request_en.yml
@@ -0,0 +1,26 @@
+name: "[English] Feature Request"
+description: "Request a new feature or suggest an improvement."
+labels: ["Type: Enhancement"]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Before submitting, please make sure you have checked the [existing GitHub Issues](https://github.com/isHarryh/Ark-Pets/issues) and found no similar requests.
+ - type: input
+ id: version
+ attributes:
+ label: Software Version
+ description: What version of the software are you using?
+ placeholder: vX.X.X
+ validations:
+ required: true
+ - type: textarea
+ id: description
+ attributes:
+ label: Feature Description
+ description: Please describe the feature or improvement you would like to see.
+ placeholder: |
+ Please describe in detail the expected behavior and your reasons for the request.
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/feature_request_zh_cn.yml b/.github/ISSUE_TEMPLATE/feature_request_zh_cn.yml
new file mode 100644
index 00000000..0e6e0bed
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request_zh_cn.yml
@@ -0,0 +1,26 @@
+name: "[简体中文] 请求新的功能"
+description: "向我们请求添加新的功能,或提供针对现有功能的建议。"
+labels: ["Type: Enhancement"]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ 提交诉求前,请确保您浏览了[现有的 GitHub Issues](https://github.com/isHarryh/Ark-Pets/issues) 并确认没有找到类似的诉求。
+ - type: input
+ id: version
+ attributes:
+ label: 软件版本
+ description: 您所使用的软件版本是:
+ placeholder: vX.X.X
+ validations:
+ required: true
+ - type: textarea
+ id: description
+ attributes:
+ label: 功能描述
+ description: 请描述您希望追加的功能或改进:
+ placeholder: |
+ 您需要详细描述您所预期的功能行为,并提供您的理由。
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/feature_request_zh_tw.yml b/.github/ISSUE_TEMPLATE/feature_request_zh_tw.yml
new file mode 100644
index 00000000..32ab1ffe
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request_zh_tw.yml
@@ -0,0 +1,26 @@
+name: "[繁體中文] 請求新功能"
+description: "向我們請求新增功能,或針對現有功能提出建議。"
+labels: ["Type: Enhancement"]
+
+body:
+ - type: markdown
+ attributes:
+ value: |
+ 提交需求前,請先瀏覽[現有的 GitHub Issues](https://github.com/isHarryh/Ark-Pets/issues) 並確認沒有找到類似的需求。
+ - type: input
+ id: version
+ attributes:
+ label: 軟體版本
+ description: 您所使用的軟體版本是:
+ placeholder: vX.X.X
+ validations:
+ required: true
+ - type: textarea
+ id: description
+ attributes:
+ label: 功能描述
+ description: 請描述您希望新增或改進的功能:
+ placeholder: |
+ 請詳細描述您預期的功能行為,並說明您的理由。
+ validations:
+ required: true
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 13b14830..6eeb2d71 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -1,82 +1,82 @@
name: Build
-on:
- push:
- tags:
- - 'v*'
- branches:
- - 'v*'
- paths:
- - 'assets/**'
- - 'core/**'
- - 'desktop/**'
- pull_request:
- tags:
- - 'v*'
- branches:
- - 'v*'
- paths:
- - 'assets/**'
- - 'core/**'
- - 'desktop/**'
- workflow_dispatch:
+on: workflow_dispatch
jobs:
build:
- runs-on: windows-latest
+ runs-on: ${{ matrix.target.os }}
+ strategy:
+ matrix:
+ target: [
+ { os: windows-latest, dist-ext: exe },
+ { os: macos-26, dist-ext: dmg },
+ { os: macos-latest, dist-ext: dmg },
+ { os: ubuntu-22.04, dist-ext: AppImage },
+ { os: ubuntu-latest, dist-ext: AppImage }
+ ]
steps:
- name: Check Ref
run: |
echo "Current ref: ${{ github.ref }}"
+ echo "Current sha: ${{ github.sha }}"
+ echo "Current OS: ${{ matrix.target.os }}"
- name: Clone Repo
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Setup JavaJDK
- uses: actions/setup-java@v4
+ uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'liberica'
cache: 'gradle'
- name: Setup Gradle
- uses: gradle/gradle-build-action@v3
+ uses: gradle/actions/setup-gradle@v5
with:
- gradle-version: 8.1.1
+ gradle-version: 8.14.3
+
+ - name: Setup Inno Setup
+ if: ${{ startsWith(matrix.target.os,'windows') }}
+ run: choco install innosetup --no-progress
+
+ - name: Setup Homebrew
+ if: ${{ startsWith(matrix.target.os,'macos') }}
+ uses: Homebrew/actions/setup-homebrew@main
+
+ - name: Setup create-dmg
+ if: ${{ startsWith(matrix.target.os,'macos') }}
+ run: brew install create-dmg
+
+ - name: Setup AppImage tools
+ if: ${{ startsWith(matrix.target.os,'ubuntu') }}
+ run: |
+ wget "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" -O appimagetool
+ wget "https://github.com/linuxdeploy/linuxdeploy/releases/download/1-alpha-20250213-2/linuxdeploy-x86_64.AppImage" -O linuxdeploy
+ chmod +x appimagetool linuxdeploy
+ sudo chown root:root appimagetool linuxdeploy
+ sudo mv appimagetool linuxdeploy /usr/bin/
- name: Execute Gradle Tasks
run: gradle clean distAll
- - name: Upload Exe
- uses: actions/upload-artifact@v4
+ - name: Upload ${{ matrix.target.dist-ext }}
+ uses: actions/upload-artifact@v6
if: ${{ ! startsWith(github.ref, 'refs/tags/') }}
with:
- name: ArkPets.exe
- path: desktop/build/dist/*.exe
+ name: ArkPets-${{ matrix.target.os }}.${{ matrix.target.dist-ext }}
+ path: desktop/build/dist/*.${{ matrix.target.dist-ext }}
- name: Upload Zip
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
if: ${{ ! startsWith(github.ref, 'refs/tags/') }}
with:
- name: ArkPets.zip
+ name: ArkPets-${{ matrix.target.os }}.zip
path: desktop/build/dist/*.zip
- name: Upload Jar
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
if: ${{ ! startsWith(github.ref, 'refs/tags/') }}
with:
- name: ArkPets.jar
+ name: ArkPets-${{ matrix.target.os }}.jar
path: desktop/build/dist/*.jar
-
-# DUE TO JLINK ISSUES, AUTO RELEASE WAS TEMPORARILY BANNED.
-#
-# - name: Publish Release
-# uses: marvinpinto/action-automatic-releases@latest
-# if: ${{ startsWith(github.ref, 'refs/tags/') }}
-# with:
-# repo_token: "${{ secrets.GITHUB_TOKEN }}"
-# automatic_release_tag: "${{ github.ref_name }}"
-# draft: false
-# prerelease: false
-# title: "${{ github.ref_name }}"
-# files: desktop/build/dist/*
diff --git a/.gitignore b/.gitignore
index 692a28a6..ca443d3a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@
!/.github/
# Exclude generated files
+.DS_Store
bin/
build/
cache/
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 4dc75cbd..b63e7358 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -6,7 +6,6 @@
[`ce00662`] | 新增了可以通过命令行选项 `--config` 来载入特定的配置文件的功能。 |
+| [`#142`]
[`92ce842`]
[`669f3b1`] | 新增了基于马尔可夫矩阵的动作行为机制,现在动作的切换将更加自然。 |
+| [`0408a2b`] | 新增了可以调节桌宠的交互式朝向翻转的触发条件的功能,现在可以让桌宠在拖拽时或光标掠过时翻转朝向。 |
+
+| **修复** | |
+|:------------------------|:---------------------------------|
+| [`55b30b8`] | 修复了使用 Windows 安装包更新软件后存在残留文件的问题。 |
+| [`2edb6f9`] | 修复了在特定的窗口边界计算方式下,部分模型无法正常启动的问题。 |
+
+| **优化** | |
+|:---------------------------------------|:-----------------------------------------------|
+| [`25f3ff7`] | 优化了调试性截图的绘制与保存逻辑。 |
+| [`#158`]
[`14f007f`] | 优化了启动器界面中列表视图(ListView)的交互体验。 |
+| [`604ff70`]
[`3a7ddb2`] | 升级了 fastjson2 和 opencc4j 依赖库的版本,并移除了某些残留的依赖库。 |
+| [`#159`]
[`a8829c4`]
[`823b904`] | 将 Gradle 版本从 8.1 升级到 8.14,并移除了过时的 Gradle 脚本语法。 |
+| [`1c7200d`] | 优化了 GitHub Actions 的 `build` 工作流脚本,并升级了其依赖项版本。 |
+
+| **补丁** | |
+|:-------------------------|:--------------------------------------------|
+| `v3.11.1`
[`deedced`] | 修复了此版本引入的由阶段过滤问题导致的个别多阶段的敌方模型无法正常启动的问题。 |
+| `v3.11.1`
[`69ef274`] | 修复了之前版本中的阶段名称前导零适配问题导致的个别多阶段的敌方模型无法正常启动的问题。 |
+
+## v3.10
+| **新增** | |
+|:------------------------|:--------------------------------------------------------------|
+| [`#131`]
[`9488a85`] | 新增了可以在导出日志对话框中选取 JVM 崩溃日志的功能。 |
+| [`#136`]
[`93d4ff8`] | 新增了可以通过 JVM 选项 `-Darkpets.usesystemfont` 来控制是否在启动器中使用系统字体的功能。 |
+| [`#117`]
[`19d5fd7`] | 新增了允许播放具有多阶段的敌方模型的攻击动作的功能(开放性测试)。 |
+| [`796167b`] | 新增了默认启用 Angle 原生渲染模式的功能(开放性测试)。 |
+| [`4d4b10d`] | 新增了可以在模型详情区域点击 **Wiki 按钮**快速跳转到对应角色的 Wiki 网页的功能。 |
+
+| **修复** | |
+|:------------------------|:------------------------------------------------|
+| [`1b73f80`] | 修复了在 Mirror 酱 CDK 失效时,下载模型库的逻辑不正确的问题。 |
+| [`6bd28d3`] | 修复了当模型骨骼的 MeshAttachment 路径名称包含尾随空格时,无法加载模型的问题。 |
+
+| **优化** | |
+|:---------------------------------------|:--------------------------------------------|
+| [`#133`]
[`22cf0ca`] | 优化了桌宠鼠标穿透的实现方式,现在采用 GLFW 提供的原生穿透。 |
+| [`#133`]
[`3fdad5d`] | 优化了设置桌宠窗口位置的调用逻辑,减少了桌宠静止时的性能开销。 |
+| [`ae17135`] | 将 JavaFX 库升级到了 17.0.15。 |
+| [`#139`]
[`86c0189`]
[`36ffc79`] | 优化了启动器界面中列表组件(例如模型列表和公告列表)的性能开销。 |
+| [`#141`]
[`df89573`] | 优化了启动器界面中滚动面板(ScrollPane)的交互体验。 |
+| [`#140`]
[`272e821`] | 优化了启动器界面的渲染缓存,缓解了界面卡顿问题。 |
+| [`#146`]
[`17d406a`] | 优化了隐藏系统托盘图标的实现方式,现在采用 ITaskbarList 提供的底层实现。 |
+| [`60be366`]
[`59469b8`] | 优化了加载骨骼文件的实现方式。 |
+
## v3.9
| **新增** | |
|:------------------------------------|:------------------------------------------------------------------------------------|
@@ -14,11 +64,12 @@
|:------------------------|:-----------------------------|
| [`#126`]
[`51b7806`] | 修复了在特定情况下,桌宠在被鼠标拖拽后会原地消失的问题。 |
-| **优化** | |
-|:---------------------------------------|:---------------------------------|
-| [`#125`]
[`e0f2dce`] | 优化了日志模块的安全性,现在采用的是 reload4j 日志库。 |
-| [`#113`]
[`4d35feb`]
[`f6a9c64`] | 优化了桌宠输入控制模块的代码逻辑。 |
-| [`f5b0d9e`]
[`601f522`] | 优化了网络模块的代码逻辑。 |
+| **优化** | |
+|:---------------------------------------|:-------------------------------------------------|
+| [`#113`]
[`8ccef37`] | 移除了 `--enable-snapshot` 命令行参数,现在使用 `--debug` 替代。 |
+| [`#113`]
[`4d35feb`]
[`f6a9c64`] | 优化了桌宠输入控制模块的代码逻辑。 |
+| [`f5b0d9e`]
[`601f522`] | 优化了网络模块的代码逻辑。 |
+| [`#125`]
[`e0f2dce`] | 优化了日志模块的安全性,现在采用的是 reload4j 日志库。 |
| **补丁** | |
|:---------------------------------------|:---------------------------|
@@ -84,14 +135,14 @@
| [`c277dae`] | 优化了桌宠的渲染偏移(OffsetY)参数,使得某些额外内容得以正常显示(例如对角色脚底的高亮描边)。 |
## v3.5
-| **新增** | |
-|:--------------------------------------|:----------------------------------------|
-| [`#86`]
[`e998e4a`]
[`7042699`] | 新增了**收藏模型**的功能,现在可以对模型进行收藏并在列表中单独显示它们。 |
-| [`88ffa1e`] | 新增了启动器界面的**窗口圆角和窗口阴影**,使得启动器的外观更加现代。 |
-| [`#90`]
[`8183242`]
[`a38e737`] | 新增了命令行选项 `--load-lib` 用于载入外部库。 |
-| [`#93`]
[`16b34aa`] | 新增了命令行选项 `--enable-snapshot` 用于启用调试性截图。 |
-| [`c36ec5e`]
[`f5c09bd`] | 新增了可以调节桌宠的动画交叉过渡时长等过渡设置的功能。 |
-| [`97095c9`] | 新增了启动器模型页面的列表中“没有符合条件的模型”时的一个提示。 |
+| **新增** | |
+|:--------------------------------------|:--------------------------------------------|
+| [`#86`]
[`e998e4a`]
[`7042699`] | 新增了**收藏模型**的功能,现在可以对模型进行收藏并在列表中单独显示它们。 |
+| [`88ffa1e`] | 新增了启动器界面的**窗口圆角和窗口阴影**,使得启动器的外观更加现代。 |
+| [`#90`]
[`8183242`]
[`a38e737`] | 新增了命令行选项 `--load-lib` 用于载入外部库。 |
+| [`#93`]
[`16b34aa`] | ~~新增了命令行选项 `--enable-snapshot` 用于启用调试性截图。~~ |
+| [`c36ec5e`]
[`f5c09bd`] | 新增了可以调节桌宠的动画交叉过渡时长等过渡设置的功能。 |
+| [`97095c9`] | 新增了启动器模型页面的列表中“没有符合条件的模型”时的一个提示。 |
| **修复** | |
|:----------------------------------|:------------------------------------------|
@@ -537,10 +588,22 @@
[`#112`]: https://github.com/isHarryh/Ark-Pets/pull/112
[`#113`]: https://github.com/isHarryh/Ark-Pets/pull/113
[`#116`]: https://github.com/isHarryh/Ark-Pets/pull/116
+[`#117`]: https://github.com/isHarryh/Ark-Pets/issues/117
[`#123`]: https://github.com/isHarryh/Ark-Pets/pull/123
[`#124`]: https://github.com/isHarryh/Ark-Pets/pull/124
[`#125`]: https://github.com/isHarryh/Ark-Pets/pull/125
[`#126`]: https://github.com/isHarryh/Ark-Pets/pull/126
+[`#131`]: https://github.com/isHarryh/Ark-Pets/pull/131
+[`#133`]: https://github.com/isHarryh/Ark-Pets/pull/133
+[`#136`]: https://github.com/isHarryh/Ark-Pets/pull/136
+[`#139`]: https://github.com/isHarryh/Ark-Pets/pull/139
+[`#140`]: https://github.com/isHarryh/Ark-Pets/pull/140
+[`#141`]: https://github.com/isHarryh/Ark-Pets/pull/141
+[`#142`]: https://github.com/isHarryh/Ark-Pets/pull/142
+[`#146`]: https://github.com/isHarryh/Ark-Pets/issues/146
+[`#152`]: https://github.com/isHarryh/Ark-Pets/pull/152
+[`#158`]: https://github.com/isHarryh/Ark-Pets/pull/158
+[`#159`]: https://github.com/isHarryh/Ark-Pets/pull/159
[`3253706`]: https://github.com/isHarryh/Ark-Pets/commit/3253706fde859a316b3e08362dd57adb98c1df8c
[`7b2e856`]: https://github.com/isHarryh/Ark-Pets/commit/7b2e8562579ebabbb102b40122cf3130463f03bc
[`ff82a1e`]: https://github.com/isHarryh/Ark-Pets/commit/ff82a1e21ce396c345038b4cb340f10eeca89cf2
@@ -633,6 +696,7 @@
[`a41e489`]: https://github.com/isHarryh/Ark-Pets/commit/a41e489c84661c30303c6cfcc3d10c4ad86293c5
[`49d13b6`]: https://github.com/isHarryh/Ark-Pets/commit/49d13b6627a73cd4cfe628db15062c7240cca334
[`0b2d11e`]: https://github.com/isHarryh/Ark-Pets/commit/0b2d11e519ccc4395e801379b9b1085cfb1779e2
+[`8ccef37`]: https://github.com/isHarryh/Ark-Pets/commit/8ccef3704ccc2b5d2cd628009c79817a77706445
[`4d35feb`]: https://github.com/isHarryh/Ark-Pets/commit/4d35febd0954e961b47150ff805e9b15a517cfee
[`f6a9c64`]: https://github.com/isHarryh/Ark-Pets/commit/f6a9c640ade62dc6e1dea72db62dc72a173760ce
[`fd45fe6`]: https://github.com/isHarryh/Ark-Pets/commit/fd45fe6d45759ed7261b4d8cb2eff497390171b7
@@ -653,3 +717,35 @@
[`c4e0f40`]: https://github.com/isHarryh/Ark-Pets/commit/c4e0f40638bed4e2a30d6c59209899559b988a53
[`cd34faa`]: https://github.com/isHarryh/Ark-Pets/commit/cd34faaee325ebb31d29ccfe4dfa3c766cdd634d
[`5294d91`]: https://github.com/isHarryh/Ark-Pets/commit/5294d918451c4d3421cb9fc10110fa01f77d21bc
+[`9488a85`]: https://github.com/isHarryh/Ark-Pets/commit/9488a85d9be4353158fefcb8e48b12f045f6ad23
+[`22cf0ca`]: https://github.com/isHarryh/Ark-Pets/commit/22cf0ca995ff13015856a3801d1aa962fe0786de
+[`3fdad5d`]: https://github.com/isHarryh/Ark-Pets/commit/3fdad5db3f677b8289452ffd2a2079731b0a8185
+[`ae17135`]: https://github.com/isHarryh/Ark-Pets/commit/ae17135a752c0295d4d32032fe3371b4a4b866d3
+[`86c0189`]: https://github.com/isHarryh/Ark-Pets/commit/86c0189ef96956a9aac5047777f3b34ad9319f29
+[`36ffc79`]: https://github.com/isHarryh/Ark-Pets/commit/36ffc794c0d01db39b288c3b6ffe524c436f3d12
+[`93d4ff8`]: https://github.com/isHarryh/Ark-Pets/commit/93d4ff859fe61f12ee96e10bbda4599314cb863b
+[`df89573`]: https://github.com/isHarryh/Ark-Pets/commit/df89573179a53f428716008b23484f06e4f539a6
+[`272e821`]: https://github.com/isHarryh/Ark-Pets/commit/272e8212b4a8c19e15e0d64a6a55ce7071fa79c4
+[`19d5fd7`]: https://github.com/isHarryh/Ark-Pets/commit/19d5fd71469f4cd6f241e5f51a124a7bb9bd0787
+[`796167b`]: https://github.com/isHarryh/Ark-Pets/commit/796167ba49acf2cdd1a33c526a2d4ed03ee55214
+[`4d4b10d`]: https://github.com/isHarryh/Ark-Pets/commit/4d4b10dddd99c6cdedf75ce13c57f161b4ee390d
+[`17d406a`]: https://github.com/isHarryh/Ark-Pets/commit/17d406a8374d3c7d84ad13c9ba66f06fcbaa1c0d
+[`1b73f80`]: https://github.com/isHarryh/Ark-Pets/commit/1b73f80fc2f2195ebac71de31dd610843ba5f52a
+[`60be366`]: https://github.com/isHarryh/Ark-Pets/commit/60be366813df03a30c7dc81a03a809fddb831d9c
+[`6bd28d3`]: https://github.com/isHarryh/Ark-Pets/commit/6bd28d360f96a5bf09f8ec409cfe944177da775d
+[`59469b8`]: https://github.com/isHarryh/Ark-Pets/commit/59469b865651a4d63ccd95d8dd3adeae333186fc
+[`ce00662`]: https://github.com/isHarryh/Ark-Pets/commit/ce006627fe4abe5564c88cb1f41097056f1be92a
+[`92ce842`]: https://github.com/isHarryh/Ark-Pets/commit/92ce8428b28979482d74ab5083b41179ad3bdaf4
+[`669f3b1`]: https://github.com/isHarryh/Ark-Pets/commit/669f3b124467477b992f52bfef7dba075ce5c0e9
+[`55b30b8`]: https://github.com/isHarryh/Ark-Pets/commit/55b30b8169c7eb02ac3b4a2e48fb3170f819da43
+[`25f3ff7`]: https://github.com/isHarryh/Ark-Pets/commit/25f3ff7e5c31fd7e9f490db5ba3c0c1b91669a63
+[`2edb6f9`]: https://github.com/isHarryh/Ark-Pets/commit/2edb6f9052d26c5bdb08eebadf9cfe08eba5c235
+[`14f007f`]: https://github.com/isHarryh/Ark-Pets/commit/14f007fc9376df2277e12914af1493d1ea4b07b6
+[`0408a2b`]: https://github.com/isHarryh/Ark-Pets/commit/0408a2b99f2d82fd5b2f25b1066e06c66c658cb3
+[`604ff70`]: https://github.com/isHarryh/Ark-Pets/commit/604ff70de4fdb807cb37c43d72da300c735d0b61
+[`3a7ddb2`]: https://github.com/isHarryh/Ark-Pets/commit/3a7ddb2ae0338cc27a248c094b4c272056a48669
+[`a8829c4`]: https://github.com/isHarryh/Ark-Pets/commit/a8829c4546110a003b045f32c8ef4b6ff645bfbd
+[`823b904`]: https://github.com/isHarryh/Ark-Pets/commit/823b904e5a0a88fd1cd9981d83fc167d9a5c07b8
+[`1c7200d`]: https://github.com/isHarryh/Ark-Pets/commit/1c7200d1ef78aa82efee9fcb3b38f65ab5d1eec3
+[`deedced`]: https://github.com/isHarryh/Ark-Pets/commit/deedced4b7c14defde4c60d2ec52e6e153de15fd
+[`69ef274`]: https://github.com/isHarryh/Ark-Pets/commit/69ef2741ad703aab4a8490c7a3307b556982374d
diff --git a/README.md b/README.md
index caa97dda..d6885d43 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@
Arknights Desktop Pets | 明日方舟桌宠 (ArkPets)
- v3.9
+ v3.11
diff --git a/assets/ArkPetsConfigDefault.json b/assets/ArkPetsConfigDefault.json
index 6ce68e3b..a9f9037b 100644
--- a/assets/ArkPetsConfigDefault.json
+++ b/assets/ArkPetsConfigDefault.json
@@ -5,6 +5,7 @@
"behavior_allow_sleep":false,
"behavior_allow_special":true,
"behavior_allow_walk":true,
+ "behavior_direction_switching":1,
"behavior_do_peer_repulsion":true,
"behavior_walk_speed": 30.0,
"canvas_color":"#00000000",
@@ -32,7 +33,7 @@
"physic_speed_limit_y":1000.0,
"physic_static_friction_acc":500.0,
"render_animation_mixture":0.3,
- "render_enable_angle":false,
+ "render_enable_angle":true,
"render_enable_mipmap":true,
"render_outline":1,
"render_outline_color":"#FFFF00FF",
diff --git a/assets/UI/AnnounceDialog.fxml b/assets/UI/AnnounceDialog.fxml
index 0e901ebf..2a220895 100644
--- a/assets/UI/AnnounceDialog.fxml
+++ b/assets/UI/AnnounceDialog.fxml
@@ -1,11 +1,12 @@
-
+
+
@@ -14,7 +15,7 @@
+
+
+
+
* A loop animation is a single animation which could be played in loop and typically could be interrupted.
* @param type The specified animation type.
- * @return The animation data whose animation clip will be none if not found.
+ * @return A new animation data, or {@code null} if not found.
*/
public AnimData getLoopAnimData(AnimType type) {
AnimClipGroup found = this.findAnimations(type);
@@ -132,14 +133,14 @@ public AnimData getLoopAnimData(AnimType type) {
AnimClip center = loop != null ? loop : none;
if (center != null)
return new AnimData(center, null, true, false, 0);
- return new AnimData(null);
+ return null;
}
/** Draws a strict animation data from this animation clip group.
*
* A strict animation is a single animation which couldn't be interrupted and typically should be played once.
* @param type The specified animation type.
- * @return The animation data whose animation clip will be none if not found.
+ * @return A new animation data, or {@code null} if not found.
*/
public AnimData getStrictAnimData(AnimType type) {
AnimClipGroup found = this.findAnimations(type);
@@ -148,7 +149,18 @@ public AnimData getStrictAnimData(AnimType type) {
AnimClip center = loop != null ? loop : none;
if (center != null)
return new AnimData(center, null, false, true);
- return new AnimData(null);
+ return null;
+ }
+
+ /** Applies complete animation mixing to the target {@link AnimationStateData}.
+ * @param target The target AnimationStateData to have the mixing applied.
+ * @param duration The duration of each animation mixing.
+ */
+ public void applyCompleteAnimMix(AnimationStateData target, float duration) {
+ animClipList.forEach(i -> animClipList.forEach(j -> {
+ if (!i.fullName.equals(j.fullName))
+ target.setMix(i.fullName, j.fullName, duration);
+ }));
}
protected void sortStages() {
diff --git a/core/src/cn/harryh/arkpets/animations/AnimComposer.java b/core/src/cn/harryh/arkpets/animations/AnimComposer.java
index 90aea8a7..621407b2 100644
--- a/core/src/cn/harryh/arkpets/animations/AnimComposer.java
+++ b/core/src/cn/harryh/arkpets/animations/AnimComposer.java
@@ -1,4 +1,4 @@
-/** Copyright (c) 2022-2024, Harry Huang
+/** Copyright (c) 2022-2026, Harry Huang
* At GPL-3.0 License
*/
package cn.harryh.arkpets.animations;
@@ -17,12 +17,12 @@ public AnimComposer(AnimationState boundState) {
state.addListener(new AnimationState.AnimationStateAdapter() {
@Override
public void complete(AnimationState.TrackEntry entry) {
- if (composer.playing != null && !composer.playing.isEmpty() && entry.getAnimation() != null) {
+ if (composer.playing != null && entry.getAnimation() != null) {
if (entry.getAnimation().getName().equals(composer.playing.animClip().fullName)) {
AnimData completed = composer.playing;
if (!completed.isLoop()) {
composer.reset();
- if (completed.animNext() != null && !completed.animNext().isEmpty()) {
+ if (completed.animNext() != null) {
composer.offer(completed.animNext());
}
}
@@ -33,8 +33,8 @@ public void complete(AnimationState.TrackEntry entry) {
}
public boolean offer(AnimData animData) {
- if (animData != null && !animData.isEmpty()) {
- if (playing == null || playing.isEmpty() || (!playing.isStrict() && !playing.equals(animData))) {
+ if (animData != null) {
+ if (playing == null || (!playing.isStrict() && !playing.equals(animData))) {
playing = animData;
state.setAnimation(coreTrackId, playing.name(), playing.isLoop());
onApply(playing);
diff --git a/core/src/cn/harryh/arkpets/animations/AnimData.java b/core/src/cn/harryh/arkpets/animations/AnimData.java
index b3bb8855..effbcade 100644
--- a/core/src/cn/harryh/arkpets/animations/AnimData.java
+++ b/core/src/cn/harryh/arkpets/animations/AnimData.java
@@ -1,4 +1,4 @@
-/** Copyright (c) 2022-2025, Harry Huang
+/** Copyright (c) 2022-2026, Harry Huang
* At GPL-3.0 License
*/
package cn.harryh.arkpets.animations;
@@ -20,6 +20,11 @@ public record AnimData(
boolean isStrict,
int mobility
) {
+ public AnimData {
+ if (animClip == null)
+ throw new IllegalArgumentException("animClip cannot be null");
+ }
+
/** Animation data record (simplified constructor).
* @param animClip The animation clip of THIS animation data.
*/
@@ -56,12 +61,8 @@ public AnimData join(AnimData animNext) {
return new AnimData(this.animClip, this.animNext.join(animNext), this.isLoop, this.isStrict, this.mobility);
}
- public boolean isEmpty() {
- return animClip == null;
- }
-
public String name() {
- return isEmpty() ? null : animClip.fullName;
+ return animClip.fullName;
}
@Override
diff --git a/core/src/cn/harryh/arkpets/animations/AnimDataWeight.java b/core/src/cn/harryh/arkpets/animations/AnimDataWeight.java
index 14b3e47b..7a4dc420 100644
--- a/core/src/cn/harryh/arkpets/animations/AnimDataWeight.java
+++ b/core/src/cn/harryh/arkpets/animations/AnimDataWeight.java
@@ -1,4 +1,4 @@
-/** Copyright (c) 2022-2025, Harry Huang
+/** Copyright (c) 2022-2026, Harry Huang
* At GPL-3.0 License
*/
package cn.harryh.arkpets.animations;
diff --git a/core/src/cn/harryh/arkpets/animations/Behavior.java b/core/src/cn/harryh/arkpets/animations/Behavior.java
index 954ce8a5..d7d20045 100644
--- a/core/src/cn/harryh/arkpets/animations/Behavior.java
+++ b/core/src/cn/harryh/arkpets/animations/Behavior.java
@@ -1,34 +1,38 @@
-/** Copyright (c) 2022-2025, Harry Huang
+/** Copyright (c) 2022-2026, Harry Huang
* At GPL-3.0 License
*/
package cn.harryh.arkpets.animations;
+import cn.harryh.arkpets.animations.StochasticMatrix.StochasticState;
import cn.harryh.arkpets.utils.Cached;
-import java.util.Arrays;
-
abstract public class Behavior {
- protected AnimClipGroup animList;
- protected AnimDataWeight[] actionList;
- protected Cached(Function extractor)
- implements Callback cellDataFeatures) {
- S value = cellDataFeatures.getValue().getValue();
- if (value == null || extractor == null)
- return null;
- return new SimpleObjectProperty<>(extractor.apply(value));
- }
- }
-
-
private record HumanSize(long size, boolean hide) implements Comparable The type of the cell items.
+ * @param {
+ private final TreeTableColumn column;
+
+ public TreeTableColumnSetup(TreeTableColumn column) {
+ this.column = column;
+ }
+
+ public TreeTableColumnSetup() {
+ this(new JFXTreeTableColumn<>());
+ }
+
+ public TreeTableColumnSetup setText(String text) {
+ column.setText(text);
+ return this;
+ }
+
+ public TreeTableColumnSetup setReorderable(boolean reorderable) {
+ column.setReorderable(reorderable);
+ return this;
+ }
+
+ public TreeTableColumnSetup setValueExtractor(Function extractor) {
+ column.setCellValueFactory(cellDataFeatures -> {
+ S rawValue = cellDataFeatures.getValue().getValue();
+ if (rawValue == null || extractor == null)
+ return null;
+ return new SimpleObjectProperty<>(extractor.apply(rawValue));
+ });
+ return this;
+ }
+
+ public TreeTableColumnSetup attachTo(TreeTableView treeTableView) {
+ treeTableView.getColumns().add(column);
+ return this;
+ }
+ }
+
+
public static final class SimpleIntegerSliderSetup extends SliderSetup