Compare commits

..

120 Commits

Author SHA1 Message Date
ww-rm
9040e02025 Merge pull request #140 from ww-rm/dev/wpf
v0.16.10
2025-10-29 21:35:34 +08:00
ww-rm
b3ba073368 完善日志 2025-10-29 21:34:30 +08:00
ww-rm
332019a667 修复文件夹无法自动创建的bug 2025-10-29 21:00:38 +08:00
ww-rm
add9cf157d 修改压缩路径 2025-10-29 20:54:35 +08:00
ww-rm
8b0ea750d8 Merge pull request #139 from ww-rm/dev/wpf
v0.16.10
2025-10-29 20:45:24 +08:00
ww-rm
733739921d update changelog 2025-10-29 20:44:20 +08:00
ww-rm
e0f46f521a update to v0.16.10 2025-10-29 20:43:43 +08:00
ww-rm
aa4245ef2a add linux release 2025-10-29 20:42:31 +08:00
ww-rm
a262538eba 增加linux条件依赖 2025-10-29 19:48:23 +08:00
ww-rm
2e4a5a75c0 修复着色器语法兼容性错误 2025-10-29 19:33:45 +08:00
ww-rm
9331656431 修改项目配置 2025-10-28 22:03:39 +08:00
ww-rm
64bc12db06 Merge pull request #136 from ww-rm/dev/wpf
v0.16.9
2025-10-27 23:51:47 +08:00
ww-rm
7a29fee641 update readme 2025-10-27 23:50:39 +08:00
ww-rm
49f95ddbb7 add readme 2025-10-27 23:48:21 +08:00
ww-rm
317ee71882 update changelog 2025-10-27 23:45:16 +08:00
ww-rm
7780fbda28 update ignore 2025-10-27 23:43:57 +08:00
ww-rm
b54c6a1777 update to v0.16.9 2025-10-27 23:43:52 +08:00
ww-rm
617157044c 增加透明度参数 2025-10-27 23:33:25 +08:00
ww-rm
29d7e8d9d8 移除依赖库 2025-10-27 22:26:33 +08:00
ww-rm
701d1fcf90 增加日志 2025-10-27 07:35:05 +08:00
ww-rm
df36d46528 增加动态进度条 2025-10-27 00:00:44 +08:00
ww-rm
3459f3af03 修复进度回调done值错误 2025-10-26 23:59:57 +08:00
ww-rm
5498508700 移除不受支持的格式 2025-10-26 23:16:40 +08:00
ww-rm
a61bb43250 增加preview命令 2025-10-26 22:14:34 +08:00
ww-rm
aace461ae0 修改方法名 2025-10-26 22:05:48 +08:00
ww-rm
c02cec9a18 修改图像质量默认值为100 2025-10-26 22:01:40 +08:00
ww-rm
31daed9e81 移除不受支持的图像格式 2025-10-26 21:49:58 +08:00
ww-rm
997d55350d 修复可能的资源泄露 2025-10-26 21:28:11 +08:00
ww-rm
cc6d1b6c00 更新注释 2025-10-26 19:35:43 +08:00
ww-rm
e14c54c3a4 调整时间轴处理顺序 2025-10-26 17:35:51 +08:00
ww-rm
5eba515eac 增加 query 命令 2025-10-26 17:31:20 +08:00
ww-rm
f878530184 重构 2025-10-26 16:30:13 +08:00
ww-rm
81d9224658 增加参数验证 2025-10-26 16:22:49 +08:00
ww-rm
9d9edb8bc4 增加 export 命令 2025-10-26 16:16:43 +08:00
ww-rm
d3b5814c6f small change 2025-10-26 15:52:47 +08:00
ww-rm
aade44cffb 增加注释 2025-10-26 15:19:09 +08:00
ww-rm
c4956b9c16 重构 2025-10-26 13:26:47 +08:00
ww-rm
7ca431b214 增加System.CommandLine库 2025-10-25 17:19:27 +08:00
ww-rm
74538ddf74 apng和mov格式参数改为枚举量类型 2025-10-25 17:04:39 +08:00
ww-rm
779500ee8e 修改ApngPred属性名为PredMethod 2025-10-25 16:47:00 +08:00
ww-rm
ee7c9e9e54 Merge pull request #132 from jayng9663/dev/wpf
Add --warmup option to control physics warmup loops
2025-10-24 23:07:13 +08:00
ww-rm
d335645dc1 remove unnecessary frame loops 2025-10-19 20:46:42 +08:00
ww-rm
0893bd4b54 Merge pull request #133 from ww-rm/dev/wpf
v0.16.8
2025-10-19 20:19:48 +08:00
ww-rm
862926b43e update to v0.16.8 2025-10-19 20:18:11 +08:00
ww-rm
0324ba7971 update changelog 2025-10-19 20:18:02 +08:00
Jay
6a17ec0397 Add --warmup option to control physics warmup loops
Create a new --warmup argument to specify the number of warmup loops for physics before export. This allows users to control how many times the animation is pre-processed to stabilize physics.
2025-10-19 04:59:34 -07:00
ww-rm
53a7700798 增加单独的参数拷贝方式 2025-10-19 17:59:33 +08:00
ww-rm
30608e05bc 修改窗口默认大小 2025-10-19 15:16:05 +08:00
ww-rm
3dcd7b22ca 增加皮肤和插槽的全部启用禁用菜单项 2025-10-19 15:10:45 +08:00
ww-rm
dae5d0b7c7 增加侧边栏折叠功能 2025-10-19 01:01:34 +08:00
ww-rm
f5d3f93cde 增加侧边栏图标样式 2025-10-19 00:05:46 +08:00
ww-rm
dbd7c13c32 Merge branch 'dev/wpf' of github.com:ww-rm/SpineViewer into dev/wpf 2025-10-17 22:44:50 +08:00
ww-rm
b662d8f68a Merge pull request #131 from jhq223/feature/cli-enhancements
Feat(CLI): Add Single-Frame Export and Fix Related Bugs
2025-10-17 22:44:33 +08:00
ww-rm
02445d36e5 增加实时状态保存 2025-10-17 22:41:49 +08:00
ww-rm
b178e48e84 去除默认的最小化提示弹框 2025-10-16 23:54:07 +08:00
ww-rm
c90713ffe7 change tolower to tolowerinvariant 2025-10-16 22:33:36 +08:00
jhq223
dc472cf2a8 Fix: Resolve frame export logic and slot visibility issues
This commit addresses two critical bugs in the single-frame export functionality of the CLI tool.

1.  **Corrects Export Mode Detection for Ambiguous Formats (.webp):**
    - Previously, any output format also supported by the video exporter (like `.webp`) would incorrectly trigger video export mode, ignoring the `--time` argument intended for single-frame captures.
    - The logic is now updated to prioritize the presence of the `--time` argument. If this argument is provided, the tool is forced into single-frame export mode, correctly handling formats like static `.webp`.
    - This was implemented by changing the `time` variable to a nullable float (`float?`) to reliably detect if the argument was passed.

2.  **Fixes "Slot Not Found" Error for `--hide-slot`:**
    - The operation to hide slots was being performed *before* the animation was applied to the skeleton. This caused failures when trying to hide slots that are only activated or have attachments during a specific animation.
    - The slot visibility logic has been moved to execute *after* the animation state is set and the skeleton is updated to the target frame. This ensures that the skeleton is in its final pose, making all relevant slots available for modification.
2025-10-16 20:57:50 +08:00
jhq223
03c599264e feat(cli): Add single-frame image export
Extends the CLI to support exporting single frames as images (.png, .jpg, etc.) in addition to video.

The export logic now determines the output type based on the file extension of the `--output` path.

- Adds new arguments: `--time` to specify the frame and `--quality` for image compression.
- Uses `FrameExporter` for recognized image formats.
- Updates the help message with the new options.
2025-10-16 19:56:13 +08:00
ww-rm
8f7297bea5 Merge pull request #129 from jhq223/feature/cli-enhancements
feat: Add --skin and --hide-slot CLI arguments
2025-10-15 20:59:40 +08:00
jhq223
e4d655012b feat: Add --skin and --hide-slot CLI arguments 2025-10-15 16:01:18 +08:00
ww-rm
4b23c779d3 Merge pull request #124 from ww-rm/dev/wpf
v0.16.7
2025-10-06 14:04:13 +08:00
ww-rm
f5684a50dc update to v0.16.7 2025-10-06 14:03:19 +08:00
ww-rm
579ce9f944 update changelog 2025-10-06 14:03:03 +08:00
ww-rm
7aa88089b8 修复空帧导致的包围盒计算错误 2025-10-06 14:02:21 +08:00
ww-rm
be983f8407 修复窗口二次显示错误 2025-10-06 13:32:03 +08:00
ww-rm
249b930602 Merge pull request #122 from ww-rm/dev/wpf
v0.16.6
2025-10-04 20:55:59 +08:00
ww-rm
6472f378b7 update to v0.16.6 2025-10-04 20:53:29 +08:00
ww-rm
8672f0571c udpate changelog 2025-10-04 20:53:06 +08:00
ww-rm
e7a990c1bd 修复可能出现的0缩放错误 2025-10-04 20:50:08 +08:00
ww-rm
6727fa8e8f Merge pull request #120 from ww-rm/dev/wpf
v0.16.5
2025-10-04 16:59:08 +08:00
ww-rm
66d8c489b5 update to v0.16.5 2025-10-04 16:58:32 +08:00
ww-rm
1931c4713a update changelog 2025-10-04 16:58:09 +08:00
ww-rm
f19f172e7c 修复窗口联动显示问题 2025-10-04 16:56:32 +08:00
ww-rm
092fa76124 修复对于某些旧atlas没有size行的读取异常 2025-10-04 16:38:14 +08:00
ww-rm
a0b7db0a70 Merge pull request #119 from ww-rm/dev/wpf
v0.16.4
2025-10-04 00:11:15 +08:00
ww-rm
6438b46ea0 修复样式错误 2025-10-04 00:09:38 +08:00
ww-rm
2bf73db9d3 补充前景色绑定 2025-10-03 23:54:54 +08:00
ww-rm
03c4974c9f Merge pull request #118 from ww-rm/dev/wpf
v0.16.4
2025-10-03 23:50:05 +08:00
ww-rm
760fa3a451 update to v0.16.4 2025-10-03 23:49:12 +08:00
ww-rm
018d8f5330 update changelog 2025-10-03 23:48:25 +08:00
ww-rm
c9730e1a11 完善标题栏皮肤颜色切换 2025-10-03 23:45:35 +08:00
ww-rm
1f6e19e544 修改日志着色 2025-10-03 22:29:43 +08:00
ww-rm
a1a0777791 重构样式 2025-10-03 22:22:21 +08:00
ww-rm
887e3f76d2 增加程序皮肤首选项 2025-10-03 19:38:48 +08:00
ww-rm
8b622050fa 重构 2025-10-03 19:11:59 +08:00
ww-rm
20369aaf43 调整颜色按钮背景色固定白色 2025-10-03 16:17:26 +08:00
ww-rm
07c0e84b7d 修复颜色错误 2025-10-03 16:11:04 +08:00
ww-rm
6770acaffd small change 2025-10-03 13:34:45 +08:00
ww-rm
6201ccc7d1 去除独立颜色使用 2025-10-03 09:46:14 +08:00
ww-rm
965d1c469e 增加ColorPicker使用 2025-10-03 09:19:02 +08:00
ww-rm
b448ca8cb0 重构 2025-10-02 22:42:21 +08:00
ww-rm
2204eb6c75 增加apng格式并且调整部分布局结构 2025-10-02 22:18:05 +08:00
ww-rm
0abe063899 调整文件结构 2025-10-02 15:18:40 +08:00
ww-rm
6f9b357473 Merge pull request #116 from ww-rm/dev/wpf
v0.16.3
2025-10-02 14:22:11 +08:00
ww-rm
152d842043 update to v0.16.3 2025-10-02 14:21:35 +08:00
ww-rm
d16f97d574 update changelog 2025-10-02 14:21:18 +08:00
ww-rm
d28eabaca5 解决可能卡死问题 2025-10-02 14:19:53 +08:00
ww-rm
b730f677be 完善像素检测 2025-10-02 14:04:42 +08:00
ww-rm
8f8806417a 完善工作区加载模型逻辑 2025-10-02 11:44:51 +08:00
ww-rm
06694c9e89 补充注释 2025-10-02 11:29:13 +08:00
ww-rm
e9b0ce3db2 增加None命中测试等级 2025-10-02 11:19:22 +08:00
ww-rm
4c72608398 修改部分布局 2025-10-02 11:01:38 +08:00
ww-rm
7e99882fbf 增加命中测试等级选项 2025-10-02 10:32:24 +08:00
ww-rm
0d72d8749a 调整调试输出逻辑 2025-10-02 10:23:51 +08:00
ww-rm
d5b7a74520 增加Name属性 2025-10-02 10:17:12 +08:00
ww-rm
0202027edb 修复模型添加顺序错误 2025-10-02 09:32:17 +08:00
ww-rm
d1d32b6292 Merge pull request #115 from ww-rm/dev/wpf
v0.16.2
2025-10-01 23:48:03 +08:00
ww-rm
b32485e122 update to v0.16.2 2025-10-01 23:45:01 +08:00
ww-rm
36d578f4d4 update changelog 2025-10-01 23:44:42 +08:00
ww-rm
42bd5c2830 增加精确命中检测和插槽输出 2025-10-01 23:43:03 +08:00
ww-rm
44548618e8 精简代码 2025-10-01 19:58:39 +08:00
ww-rm
681b1be360 修复添加顺序错误 2025-10-01 18:45:03 +08:00
ww-rm
30dee9978c 重构并增加HitTest 2025-10-01 16:35:51 +08:00
ww-rm
47aafc7948 Merge pull request #113 from ww-rm/dev/wpf
v0.16.1
2025-09-30 22:19:01 +08:00
ww-rm
1d8e2efdff update to v0.16.1 2025-09-30 22:14:07 +08:00
ww-rm
dd504d32ca 修复3.4的附件残留问题 2025-09-30 14:47:00 +08:00
ww-rm
267c7b81c3 Merge pull request #111 from ww-rm/dev/wpf
update readme
2025-09-30 12:19:17 +08:00
ww-rm
c4a6fd9d86 update readme 2025-09-30 12:18:45 +08:00
ww-rm
6e46152e4c Merge pull request #110 from ww-rm/dev/wpf
update readme
2025-09-30 12:00:41 +08:00
ww-rm
f2f296e494 update readme 2025-09-30 11:59:51 +08:00
246 changed files with 5227 additions and 2218 deletions

View File

@@ -11,6 +11,10 @@ jobs:
build-release: build-release:
if: ${{ github.event.pull_request.merged == true }} if: ${{ github.event.pull_request.merged == true }}
runs-on: windows-latest runs-on: windows-latest
outputs:
version: ${{ steps.extract_version.outputs.version }}
upload_url: ${{ steps.create_release.outputs.upload_url }}
env: env:
PROJECT_NAME: SpineViewer PROJECT_NAME: SpineViewer
PROJ_CLI_NAME: SpineViewerCLI PROJ_CLI_NAME: SpineViewerCLI
@@ -27,21 +31,15 @@ jobs:
dotnet-version: "8.0.x" dotnet-version: "8.0.x"
- name: Extract version from csproj - name: Extract version from csproj
id: extract_version
shell: pwsh shell: pwsh
run: | run: |
[xml]$proj = Get-Content "$env:PROJECT_NAME\$env:PROJECT_NAME.csproj" [xml]$proj = Get-Content "$env:PROJECT_NAME\$env:PROJECT_NAME.csproj"
$VERSION_NUM = $proj.Project.PropertyGroup.Version $VERSION_NUM = $proj.Project.PropertyGroup.Version
$VERSION_TAG = "v$VERSION_NUM".Trim() $VERSION_TAG = "v$VERSION_NUM".Trim()
"VERSION=$VERSION_TAG" >> $env:GITHUB_ENV echo "Version tag found: $VERSION_TAG"
echo "version=$VERSION_TAG" >> $env:GITHUB_OUTPUT
- name: Check Version Tag echo "VERSION=$VERSION_TAG" >> $env:GITHUB_ENV
shell: pwsh
run: |
if (-not $env:VERSION) {
Write-Error "Version tag not found in csproj file."
exit 1
}
Write-Host "Version tag found: $env:VERSION"
- name: Tag merge commit - name: Tag merge commit
shell: pwsh shell: pwsh
@@ -63,19 +61,11 @@ jobs:
dotnet publish "$env:PROJECT_NAME\$env:PROJECT_NAME.csproj" -c Release -r win-x64 --sc true -o "publish\$env:PROJECT_NAME-$env:VERSION-SelfContained" dotnet publish "$env:PROJECT_NAME\$env:PROJECT_NAME.csproj" -c Release -r win-x64 --sc true -o "publish\$env:PROJECT_NAME-$env:VERSION-SelfContained"
dotnet publish "$env:PROJ_CLI_NAME\$env:PROJ_CLI_NAME.csproj" -c Release -r win-x64 --sc true -o "publish\$env:PROJECT_NAME-$env:VERSION-SelfContained" dotnet publish "$env:PROJ_CLI_NAME\$env:PROJ_CLI_NAME.csproj" -c Release -r win-x64 --sc true -o "publish\$env:PROJECT_NAME-$env:VERSION-SelfContained"
- name: Create release directory - name: Compress Windows builds
shell: pwsh shell: pwsh
run: | run: |
New-Item -ItemType Directory -Path release -Force | Out-Null New-Item -ItemType Directory -Path release -Force | Out-Null
- name: Compress FrameworkDependent version
shell: pwsh
run: |
Compress-Archive -Path "publish\$env:PROJECT_NAME-$env:VERSION\*" -DestinationPath "release\$env:PROJECT_NAME-$env:VERSION.zip" -Force Compress-Archive -Path "publish\$env:PROJECT_NAME-$env:VERSION\*" -DestinationPath "release\$env:PROJECT_NAME-$env:VERSION.zip" -Force
- name: Compress SelfContained version
shell: pwsh
run: |
Compress-Archive -Path "publish\$env:PROJECT_NAME-$env:VERSION-SelfContained\*" -DestinationPath "release\$env:PROJECT_NAME-$env:VERSION-SelfContained.zip" -Force Compress-Archive -Path "publish\$env:PROJECT_NAME-$env:VERSION-SelfContained\*" -DestinationPath "release\$env:PROJECT_NAME-$env:VERSION-SelfContained.zip" -Force
- name: Create GitHub Release - name: Create GitHub Release
@@ -89,7 +79,7 @@ jobs:
draft: false draft: false
prerelease: false prerelease: false
- name: Upload FrameworkDependent zip - name: Upload Windows FrameworkDependent zip
uses: actions/upload-release-asset@v1 uses: actions/upload-release-asset@v1
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -99,7 +89,7 @@ jobs:
asset_name: ${{ env.PROJECT_NAME }}-${{ env.VERSION }}.zip asset_name: ${{ env.PROJECT_NAME }}-${{ env.VERSION }}.zip
asset_content_type: application/zip asset_content_type: application/zip
- name: Upload SelfContained zip - name: Upload Windows SelfContained zip
uses: actions/upload-release-asset@v1 uses: actions/upload-release-asset@v1
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -108,3 +98,43 @@ jobs:
asset_path: release/${{ env.PROJECT_NAME }}-${{ env.VERSION }}-SelfContained.zip asset_path: release/${{ env.PROJECT_NAME }}-${{ env.VERSION }}-SelfContained.zip
asset_name: ${{ env.PROJECT_NAME }}-${{ env.VERSION }}-SelfContained.zip asset_name: ${{ env.PROJECT_NAME }}-${{ env.VERSION }}-SelfContained.zip
asset_content_type: application/zip asset_content_type: application/zip
build-release-linux:
needs: build-release
if: ${{ github.event.pull_request.merged == true }}
runs-on: ubuntu-latest
env:
PROJ_CLI_NAME: SpineViewerCLI
VERSION: ${{ needs.build-release.outputs.version }}
steps:
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-tags: true
- name: Setup .NET SDK
uses: actions/setup-dotnet@v3
with:
dotnet-version: "8.0.x"
- name: Publish Linux SelfContained version
run: |
dotnet publish "$PROJ_CLI_NAME/$PROJ_CLI_NAME.csproj" -c Release -r linux-x64 --sc true -o "publish/${PROJ_CLI_NAME}-${VERSION}-Linux-SelfContained"
- name: Compress Linux build
run: |
mkdir -p release
cd publish
zip -r "../release/${PROJ_CLI_NAME}-${VERSION}-Linux-SelfContained.zip" "${PROJ_CLI_NAME}-${VERSION}-Linux-SelfContained"
- name: Upload Linux zip to GitHub Release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.build-release.outputs.upload_url }}
asset_path: release/${{ env.PROJ_CLI_NAME }}-${{ env.VERSION }}-Linux-SelfContained.zip
asset_name: ${{ env.PROJ_CLI_NAME }}-${{ env.VERSION }}-Linux-SelfContained.zip
asset_content_type: application/zip

2
.gitignore vendored
View File

@@ -396,3 +396,5 @@ FodyWeavers.xsd
# JetBrains Rider # JetBrains Rider
*.sln.iml *.sln.iml
launchSettings.json

View File

@@ -1,5 +1,59 @@
# CHANGELOG # CHANGELOG
## v0.16.10
- 增加 Linux 平台 CLI 工具构建
## v0.16.9
- 重构 CLI 工具
## v0.16.8
- 去除首次的最小化提示弹框
- 窗口布局改变后实时保存
- 增加侧边栏图标和折叠功能
- 增加皮肤和插槽参数面板的全部启用/禁用菜单项
- 修改窗口默认大小
- 支持复制并应用单独的模型皮肤或插槽参数
## v0.16.7
- 修复空帧导致的包围盒计算错误
- 修复重复启动程序无法唤出界面的问题
## v0.16.6
- 修复控件尺寸为0时导致的画面缩放错误
## v0.16.5
- 修复对于无 size 行的旧 atlas 格式读取错误
- 修复托盘化之后无法联动显示窗口的问题
## v0.16.4
- 增加 apng 导出格式
- 增加颜色拾取器面板
- 增加程序皮肤(主题颜色)首选项
- 优化部分使用体验
## v0.16.3
- 修复加载工作区时的顺序错误
- 调整部分调试渲染的逻辑
- 完善命中检测逻辑
## v0.16.2
- 修复批量添加时的添加顺序错误
- 增加精确命中检测和插槽输出功能
- 部分代码重构
## v0.16.1
- 修复 3.4 版本存在的附件残留问题
## v0.16.0 ## v0.16.0
- 增加最小化至托盘图标功能 - 增加最小化至托盘图标功能

View File

@@ -4,6 +4,7 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Platforms>x64</Platforms> <Platforms>x64</Platforms>
<PlatformTarget>x64</PlatformTarget>
<TargetFramework>net8.0-windows</TargetFramework> <TargetFramework>net8.0-windows</TargetFramework>
<BaseOutputPath>$(SolutionDir)out</BaseOutputPath> <BaseOutputPath>$(SolutionDir)out</BaseOutputPath>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion> <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>

View File

@@ -10,7 +10,7 @@ A simple and user-friendly Spine file viewer and exporter with multi-language su
![previewer](https://github.com/user-attachments/assets/697ae86f-ddf0-445d-951c-cf04f5206e40) ![previewer](https://github.com/user-attachments/assets/697ae86f-ddf0-445d-951c-cf04f5206e40)
<video src="https://github.com/user-attachments/assets/37b6b730-088a-4352-827a-c338127a16f0"> https://github.com/user-attachments/assets/37b6b730-088a-4352-827a-c338127a16f0
## Features ## Features
@@ -143,6 +143,7 @@ For detailed usage and documentation, see the [Wiki](https://github.com/ww-rm/Sp
- [HandyControl](https://github.com/HandyOrg/HandyControl) - [HandyControl](https://github.com/HandyOrg/HandyControl)
- [NLog](https://github.com/NLog/NLog) - [NLog](https://github.com/NLog/NLog)
- [SkiaSharp](https://github.com/mono/SkiaSharp) - [SkiaSharp](https://github.com/mono/SkiaSharp)
- [Spectre.Console](https://github.com/spectreconsole/spectre.console)
--- ---

View File

@@ -4,13 +4,15 @@
[![GitHub Release](https://img.shields.io/github/v/release/ww-rm/SpineViewer?logo=github&logoColor=959da5&label=Release&labelColor=3f4850)](https://github.com/ww-rm/SpineViewer/releases) [![GitHub Release](https://img.shields.io/github/v/release/ww-rm/SpineViewer?logo=github&logoColor=959da5&label=Release&labelColor=3f4850)](https://github.com/ww-rm/SpineViewer/releases)
[![Downloads](https://img.shields.io/github/downloads/ww-rm/SpineViewer/total?logo=github&logoColor=959da5&label=Downloads&labelColor=3f4850)](https://github.com/ww-rm/SpineViewer/releases) [![Downloads](https://img.shields.io/github/downloads/ww-rm/SpineViewer/total?logo=github&logoColor=959da5&label=Downloads&labelColor=3f4850)](https://github.com/ww-rm/SpineViewer/releases)
![Languages](https://img.shields.io/badge/Languages-中文%20%7C%20English%20%7C%20日本語-blue)
[中文](README.md) | [English](README.en.md) [中文](README.md) | [English](README.en.md)
Spine 文件查看&导出程序, 同时也是支持 Spine 的动态壁纸程序. Spine 文件查看&导出程序, 同时也是支持 Spine 的动态壁纸程序.
![previewer](https://github.com/user-attachments/assets/697ae86f-ddf0-445d-951c-cf04f5206e40) ![previewer](https://github.com/user-attachments/assets/697ae86f-ddf0-445d-951c-cf04f5206e40)
<video src="https://github.com/user-attachments/assets/37b6b730-088a-4352-827a-c338127a16f0"> https://github.com/user-attachments/assets/37b6b730-088a-4352-827a-c338127a16f0
## 功能 ## 功能
@@ -140,6 +142,7 @@ Spine 文件查看&导出程序, 同时也是支持 Spine 的动态壁纸程序.
- [HandyControl](https://github.com/HandyOrg/HandyControl) - [HandyControl](https://github.com/HandyOrg/HandyControl)
- [NLog](https://github.com/NLog/NLog) - [NLog](https://github.com/NLog/NLog)
- [SkiaSharp](https://github.com/mono/SkiaSharp) - [SkiaSharp](https://github.com/mono/SkiaSharp)
- [Spectre.Console](https://github.com/spectreconsole/spectre.console)
--- ---

View File

@@ -240,8 +240,8 @@ namespace SFMLRenderer
if (RenderWindow is null) return; if (RenderWindow is null) return;
float parentW = (float)sizeInfo.NewSize.Width; float parentW = (float)sizeInfo.NewSize.Width;
float parentH = (float)sizeInfo.NewSize.Height; float parentH = (float)sizeInfo.NewSize.Height;
float renderW = (float)_hwndHost.ActualWidth; float renderW = _resolution.X;
float renderH = (float)_hwndHost.ActualHeight; float renderH = _resolution.Y;
float scale = Math.Min(parentW / renderW, parentH / renderH); // 两方向取较小值, 保证 parent 覆盖 render float scale = Math.Min(parentW / renderW, parentH / renderH); // 两方向取较小值, 保证 parent 覆盖 render
renderW *= scale; renderW *= scale;
renderH *= scale; renderH *= scale;

View File

@@ -4,10 +4,11 @@
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<Platforms>x64</Platforms> <Platforms>x64</Platforms>
<PlatformTarget>x64</PlatformTarget>
<TargetFramework>net8.0-windows</TargetFramework> <TargetFramework>net8.0-windows</TargetFramework>
<BaseOutputPath>$(SolutionDir)out</BaseOutputPath> <BaseOutputPath>$(SolutionDir)out</BaseOutputPath>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion> <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
<Version>0.16.0</Version> <Version>0.16.6</Version>
<UseWPF>true</UseWPF> <UseWPF>true</UseWPF>
</PropertyGroup> </PropertyGroup>

View File

@@ -1,18 +1,14 @@
using SFML.Graphics; using SFML.Graphics;
using SFML.System; using SFML.System;
using SkiaSharp;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows;
namespace SpineViewer.Extensions namespace Spine.Exporters
{ {
public static class SFMLExtension public static class Extension
{ {
/// <summary> /// <summary>
/// 获取适合指定画布参数下能够覆盖包围盒的画布视区包围盒 /// 获取适合指定画布参数下能够覆盖包围盒的画布视区包围盒
@@ -59,25 +55,5 @@ namespace SpineViewer.Extensions
self.Size.Y self.Size.Y
); );
} }
public static FloatRect ToFloatRect(this Rect self)
{
return new((float)self.X, (float)self.Y, (float)self.Width, (float)self.Height);
}
public static Vector2f ToVector2f(this Size self)
{
return new((float)self.Width, (float)self.Height);
}
public static Vector2u ToVector2u(this Size self)
{
return new((uint)self.Width, (uint)self.Height);
}
public static Vector2i ToVector2i(this Size self)
{
return new((int)self.Width, (int)self.Height);
}
} }
} }

View File

@@ -28,12 +28,40 @@ namespace Spine.Exporters
{ {
Gif, Gif,
Webp, Webp,
Apng,
Mp4, Mp4,
Webm, Webm,
Mkv, Mkv,
Mov, Mov,
} }
/// <summary>
/// Apng 格式预测器算法
/// </summary>
public enum ApngPredMethod
{
None = 0,
Sub = 1,
Up = 2,
Avg = 3,
Paeth = 4,
Mixed = 5,
}
/// <summary>
/// Mov prores_ks 编码器 profile 参数
/// </summary>
public enum MovProfile
{
Auto = -1,
Proxy = 0,
Light = 1,
Standard = 2,
High = 3,
Yuv4444 = 4,
Yuv4444Extreme = 5,
}
/// <summary> /// <summary>
/// 视频格式 /// 视频格式
/// </summary> /// </summary>
@@ -41,34 +69,40 @@ namespace Spine.Exporters
private VideoFormat _format = VideoFormat.Mp4; private VideoFormat _format = VideoFormat.Mp4;
/// <summary> /// <summary>
/// 动图是否循环 [Gif/Webp] /// [Gif/Webp/Apng] 动图是否循环
/// </summary> /// </summary>
public bool Loop { get => _loop; set => _loop = value; } public bool Loop { get => _loop; set => _loop = value; }
private bool _loop = true; private bool _loop = true;
/// <summary> /// <summary>
/// 质量 [Webp] /// [Webp] 质量
/// </summary> /// </summary>
public int Quality { get => _quality; set => _quality = Math.Clamp(value, 0, 100); } public int Quality { get => _quality; set => _quality = Math.Clamp(value, 0, 100); }
private int _quality = 75; private int _quality = 75;
/// <summary> /// <summary>
/// 无损压缩 [Webp] /// [Webp] 无损压缩
/// </summary> /// </summary>
public bool Lossless { get => _lossless; set => _lossless = value; } public bool Lossless { get => _lossless; set => _lossless = value; }
private bool _lossless = false; private bool _lossless = false;
/// <summary> /// <summary>
/// CRF [Mp4/Webm/Mkv] /// [Apng] 预测器算法
/// </summary>
public ApngPredMethod PredMethod { get => _predMethod; set => _predMethod = value; }
private ApngPredMethod _predMethod = ApngPredMethod.Mixed;
/// <summary>
/// [Mp4/Webm/Mkv] CRF
/// </summary> /// </summary>
public int Crf { get => _crf; set => _crf = Math.Clamp(value, 0, 63); } public int Crf { get => _crf; set => _crf = Math.Clamp(value, 0, 63); }
private int _crf = 23; private int _crf = 23;
/// <summary> /// <summary>
/// prores_ks 编码器的配置等级, -1 是自动, 越高质量越好, 只有 4 及以上才有透明通道 [Mov] /// [Mov] prores_ks 编码器的配置等级, 越高质量越好, 只有 <see cref="MovProfile.Yuv4444"> 及以上才有透明通道
/// </summary> /// </summary>
public int Profile { get => _profile; set => _profile = Math.Clamp(value, -1, 5); } public MovProfile Profile { get => _profile; set => _profile = value; }
private int _profile = 5; private MovProfile _profile = MovProfile.Yuv4444Extreme;
/// <summary> /// <summary>
/// 获取的一帧, 结果是预乘的 /// 获取的一帧, 结果是预乘的
@@ -93,6 +127,7 @@ namespace Spine.Exporters
{ {
VideoFormat.Gif => SetGifOptions, VideoFormat.Gif => SetGifOptions,
VideoFormat.Webp => SetWebpOptions, VideoFormat.Webp => SetWebpOptions,
VideoFormat.Apng => SetApngOptions,
VideoFormat.Mp4 => SetMp4Options, VideoFormat.Mp4 => SetMp4Options,
VideoFormat.Webm => SetWebmOptions, VideoFormat.Webm => SetWebmOptions,
VideoFormat.Mkv => SetMkvOptions, VideoFormat.Mkv => SetMkvOptions,
@@ -132,6 +167,13 @@ namespace Spine.Exporters
.WithCustomArgument(customArgs); .WithCustomArgument(customArgs);
} }
private void SetApngOptions(FFMpegArgumentOptions options)
{
var customArgs = $"-vf unpremultiply=inplace=1 -plays {(_loop ? 0 : 1)} -pred {(int)_predMethod}";
options.ForceFormat("apng").WithVideoCodec("apng").ForcePixelFormat("rgba")
.WithCustomArgument(customArgs);
}
private void SetMp4Options(FFMpegArgumentOptions options) private void SetMp4Options(FFMpegArgumentOptions options)
{ {
// XXX: windows 默认播放器在播放 MP4 格式时对于 libx264 编码器只支持 yuv420p 的像素格式 // XXX: windows 默认播放器在播放 MP4 格式时对于 libx264 编码器只支持 yuv420p 的像素格式
@@ -164,7 +206,7 @@ namespace Spine.Exporters
var customArgs = "-vf unpremultiply=inplace=1"; var customArgs = "-vf unpremultiply=inplace=1";
options.ForceFormat("mov").WithVideoCodec("prores_ks").ForcePixelFormat("yuva444p10le") options.ForceFormat("mov").WithVideoCodec("prores_ks").ForcePixelFormat("yuva444p10le")
.WithFastStart() .WithFastStart()
.WithCustomArgument($"-profile {_profile}") .WithCustomArgument($"-profile {(int)_profile}")
.WithCustomArgument(customArgs); .WithCustomArgument(customArgs);
} }
} }

View File

@@ -18,11 +18,27 @@ namespace Spine.Exporters
public FrameExporter(uint width = 100, uint height = 100) : base(width, height) { } public FrameExporter(uint width = 100, uint height = 100) : base(width, height) { }
public FrameExporter(Vector2u resolution) : base(resolution) { } public FrameExporter(Vector2u resolution) : base(resolution) { }
public SKEncodedImageFormat Format { get => _format; set => _format = value; } public SKEncodedImageFormat Format
{
get => _format;
set {
switch (value)
{
case SKEncodedImageFormat.Jpeg:
case SKEncodedImageFormat.Png:
case SKEncodedImageFormat.Webp:
_format = value;
break;
default:
_logger.Warn("Omit unsupported exporter format: {0}", value);
break;
}
}
}
protected SKEncodedImageFormat _format = SKEncodedImageFormat.Png; protected SKEncodedImageFormat _format = SKEncodedImageFormat.Png;
public int Quality { get => _quality; set => _quality = Math.Clamp(value, 0, 100); } public int Quality { get => _quality; set => _quality = Math.Clamp(value, 0, 100); }
protected int _quality = 80; protected int _quality = 100;
public override void Export(string output, params SpineObject[] spines) public override void Export(string output, params SpineObject[] spines)
{ {
@@ -33,5 +49,15 @@ namespace Spine.Exporters
using var stream = File.OpenWrite(output); using var stream = File.OpenWrite(output);
data.SaveTo(stream); data.SaveTo(stream);
} }
/// <summary>
/// 获取帧图像, 结果是预乘的
/// </summary>
public SKImage ExportMemoryImage(params SpineObject[] spines)
{
using var frame = GetFrame(spines);
var info = new SKImageInfo(frame.Width, frame.Height, SKColorType.Rgba8888, SKAlphaType.Premul);
return SKImage.FromPixelCopy(info, frame.Image.Pixels);
}
} }
} }

View File

@@ -24,7 +24,7 @@ namespace Spine.Exporters
int frameCount = GetFrameCount(); int frameCount = GetFrameCount();
int frameIdx = 0; int frameIdx = 0;
_progressReporter?.Invoke(frameCount, 0, $"[{frameIdx}/{frameCount}] {output}"); _progressReporter?.Invoke(frameCount, 0, $"[0/{frameCount}] {output}"); // 导出帧序列单独在此处调用进度报告
foreach (var frame in GetFrames(spines)) foreach (var frame in GetFrames(spines))
{ {
if (ct.IsCancellationRequested) if (ct.IsCancellationRequested)
@@ -37,7 +37,7 @@ namespace Spine.Exporters
var savePath = Path.Combine(output, $"frame_{_fps}_{frameIdx:d6}.png"); var savePath = Path.Combine(output, $"frame_{_fps}_{frameIdx:d6}.png");
var info = new SKImageInfo(frame.Width, frame.Height, SKColorType.Rgba8888, SKAlphaType.Premul); var info = new SKImageInfo(frame.Width, frame.Height, SKColorType.Rgba8888, SKAlphaType.Premul);
_progressReporter?.Invoke(frameCount, frameIdx, $"[{frameIdx + 1}/{frameCount}] {savePath}"); _progressReporter?.Invoke(frameCount, frameIdx + 1, $"[{frameIdx + 1}/{frameCount}] {savePath}");
try try
{ {
using var skImage = SKImage.FromPixelCopy(info, frame.Image.Pixels); using var skImage = SKImage.FromPixelCopy(info, frame.Image.Pixels);

View File

@@ -92,7 +92,7 @@ namespace Spine.Exporters
} }
/// <summary> /// <summary>
/// 生成帧序列 /// 生成帧序列, 用于导出帧序列
/// </summary> /// </summary>
protected IEnumerable<SFMLImageVideoFrame> GetFrames(SpineObject[] spines) protected IEnumerable<SFMLImageVideoFrame> GetFrames(SpineObject[] spines)
{ {
@@ -121,14 +121,14 @@ namespace Spine.Exporters
} }
/// <summary> /// <summary>
/// 生成帧序列, 支持中途取消和进度输出 /// 生成帧序列, 支持中途取消和进度输出, 用于动图视频等单个文件输出
/// </summary> /// </summary>
protected IEnumerable<SFMLImageVideoFrame> GetFrames(SpineObject[] spines, string output, CancellationToken ct) protected IEnumerable<SFMLImageVideoFrame> GetFrames(SpineObject[] spines, string output, CancellationToken ct)
{ {
int frameCount = GetFrameCount(); int frameCount = GetFrameCount();
int frameIdx = 0; int frameIdx = 0;
_progressReporter?.Invoke(frameCount, 0, $"[{frameIdx}/{frameCount}] {output}"); _progressReporter?.Invoke(frameCount, 0, $"[0/{frameCount}] {output}");
foreach (var frame in GetFrames(spines)) foreach (var frame in GetFrames(spines))
{ {
if (ct.IsCancellationRequested) if (ct.IsCancellationRequested)
@@ -138,7 +138,7 @@ namespace Spine.Exporters
break; break;
} }
_progressReporter?.Invoke(frameCount, frameIdx, $"[{frameIdx + 1}/{frameCount}] {output}"); _progressReporter?.Invoke(frameCount, frameIdx + 1, $"[{frameIdx + 1}/{frameCount}] {output}");
yield return frame; yield return frame;
frameIdx++; frameIdx++;
} }

View File

@@ -7,7 +7,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.SpineWrappers namespace Spine.Implementations
{ {
/// <summary> /// <summary>
/// 实现不同版本的 TextureLoader /// 实现不同版本的 TextureLoader
@@ -112,6 +112,14 @@ namespace Spine.SpineWrappers
if (ForceMipmap) texture.GenerateMipmap(); if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture; page.rendererObject = texture;
// 有些旧的 atlas 会省略 size 行, 这时需要在读取纹理时赋值
if (page.width <= 0 || page.height <= 0)
{
var texSize = texture.Size;
page.width = (int)texSize.X;
page.height = (int)texSize.Y;
}
} }
public virtual void Load(SpineRuntime34.AtlasPage page, string path) public virtual void Load(SpineRuntime34.AtlasPage page, string path)
@@ -147,6 +155,14 @@ namespace Spine.SpineWrappers
if (ForceMipmap) texture.GenerateMipmap(); if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture; page.rendererObject = texture;
// 有些旧的 atlas 会省略 size 行, 这时需要在读取纹理时赋值
if (page.width <= 0 || page.height <= 0)
{
var texSize = texture.Size;
page.width = (int)texSize.X;
page.height = (int)texSize.Y;
}
} }
public virtual void Load(SpineRuntime35.AtlasPage page, string path) public virtual void Load(SpineRuntime35.AtlasPage page, string path)
@@ -182,6 +198,14 @@ namespace Spine.SpineWrappers
if (ForceMipmap) texture.GenerateMipmap(); if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture; page.rendererObject = texture;
// 有些旧的 atlas 会省略 size 行, 这时需要在读取纹理时赋值
if (page.width <= 0 || page.height <= 0)
{
var texSize = texture.Size;
page.width = (int)texSize.X;
page.height = (int)texSize.Y;
}
} }
public virtual void Load(SpineRuntime36.AtlasPage page, string path) public virtual void Load(SpineRuntime36.AtlasPage page, string path)
@@ -217,6 +241,14 @@ namespace Spine.SpineWrappers
if (ForceMipmap) texture.GenerateMipmap(); if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture; page.rendererObject = texture;
// 有些旧的 atlas 会省略 size 行, 这时需要在读取纹理时赋值
if (page.width <= 0 || page.height <= 0)
{
var texSize = texture.Size;
page.width = (int)texSize.X;
page.height = (int)texSize.Y;
}
} }
public virtual void Load(SpineRuntime37.AtlasPage page, string path) public virtual void Load(SpineRuntime37.AtlasPage page, string path)
@@ -252,6 +284,14 @@ namespace Spine.SpineWrappers
if (ForceMipmap) texture.GenerateMipmap(); if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture; page.rendererObject = texture;
// 有些旧的 atlas 会省略 size 行, 这时需要在读取纹理时赋值
if (page.width <= 0 || page.height <= 0)
{
var texSize = texture.Size;
page.width = (int)texSize.X;
page.height = (int)texSize.Y;
}
} }
public virtual void Load(SpineRuntime38.AtlasPage page, string path) public virtual void Load(SpineRuntime38.AtlasPage page, string path)
@@ -288,9 +328,13 @@ namespace Spine.SpineWrappers
page.rendererObject = texture; page.rendererObject = texture;
// 似乎是不需要设置的, 因为存在某些 png 和 atlas 大小不同的情况, 一般是有一些缩放, 如果设置了反而渲染异常 // 有些旧的 atlas 会省略 size 行, 这时需要在读取纹理时赋值
// page.width = (int)texture.Size.X; if (page.width <= 0 || page.height <= 0)
// page.height = (int)texture.Size.Y; {
var texSize = texture.Size;
page.width = (int)texSize.X;
page.height = (int)texSize.Y;
}
} }
public virtual void Load(SpineRuntime40.AtlasPage page, string path) public virtual void Load(SpineRuntime40.AtlasPage page, string path)
@@ -326,6 +370,14 @@ namespace Spine.SpineWrappers
if (ForceMipmap) texture.GenerateMipmap(); if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture; page.rendererObject = texture;
// 有些旧的 atlas 会省略 size 行, 这时需要在读取纹理时赋值
if (page.width <= 0 || page.height <= 0)
{
var texSize = texture.Size;
page.width = (int)texSize.X;
page.height = (int)texSize.Y;
}
} }
public virtual void Load(SpineRuntime41.AtlasPage page, string path) public virtual void Load(SpineRuntime41.AtlasPage page, string path)
@@ -361,6 +413,14 @@ namespace Spine.SpineWrappers
if (ForceMipmap) texture.GenerateMipmap(); if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture; page.rendererObject = texture;
// 有些旧的 atlas 会省略 size 行, 这时需要在读取纹理时赋值
if (page.width <= 0 || page.height <= 0)
{
var texSize = texture.Size;
page.width = (int)texSize.X;
page.height = (int)texSize.Y;
}
} }
public virtual void Load(SpineRuntime42.AtlasPage page, string path) public virtual void Load(SpineRuntime42.AtlasPage page, string path)
@@ -396,6 +456,14 @@ namespace Spine.SpineWrappers
if (ForceMipmap) texture.GenerateMipmap(); if (ForceMipmap) texture.GenerateMipmap();
page.rendererObject = texture; page.rendererObject = texture;
// 有些旧的 atlas 会省略 size 行, 这时需要在读取纹理时赋值
if (page.width <= 0 || page.height <= 0)
{
var texSize = texture.Size;
page.width = (int)texSize.X;
page.height = (int)texSize.Y;
}
} }
public virtual void Unload(object texture) public virtual void Unload(object texture)

View File

@@ -1,4 +1,4 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime21; using SpineRuntime21;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V21 namespace Spine.Implementations.V21
{ {
internal sealed class Animation21(Animation innerObject) : IAnimation internal sealed class Animation21(Animation innerObject) : IAnimation
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime21; using SpineRuntime21;
namespace Spine.Implementations.SpineWrappers.V21 namespace Spine.Implementations.V21
{ {
internal sealed class AnimationState21(AnimationState innerObject, SpineObjectData21 data) : IAnimationState internal sealed class AnimationState21(AnimationState innerObject, SpineObjectData21 data) : IAnimationState
{ {
@@ -35,7 +35,7 @@ namespace Spine.Implementations.SpineWrappers.V21
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Start += f; _o.Start += f;
@@ -64,7 +64,7 @@ namespace Spine.Implementations.SpineWrappers.V21
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.End += f; _o.End += f;
@@ -93,7 +93,7 @@ namespace Spine.Implementations.SpineWrappers.V21
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Complete += f; _o.Complete += f;

View File

@@ -3,11 +3,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using Spine.SpineWrappers.Attachments; using Spine.Interfaces.Attachments;
using SpineRuntime21; using SpineRuntime21;
namespace Spine.Implementations.SpineWrappers.V21.Attachments namespace Spine.Implementations.V21.Attachments
{ {
internal abstract class Attachment21(Attachment innerObject) : IAttachment internal abstract class Attachment21(Attachment innerObject) : IAttachment
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V21;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime21; using SpineRuntime21;
namespace Spine.Implementations.SpineWrappers.V21.Attachments namespace Spine.Implementations.V21.Attachments
{ {
internal sealed class BoundingBoxAttachment21(BoundingBoxAttachment innerObject) : internal sealed class BoundingBoxAttachment21(BoundingBoxAttachment innerObject) :
Attachment21(innerObject), Attachment21(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V21.Attachments
public override BoundingBoxAttachment InnerObject => _o; public override BoundingBoxAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot21 st) if (slot is Slot21 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V21;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime21; using SpineRuntime21;
namespace Spine.Implementations.SpineWrappers.V21.Attachments namespace Spine.Implementations.V21.Attachments
{ {
internal sealed class MeshAttachment21(MeshAttachment innerObject) : internal sealed class MeshAttachment21(MeshAttachment innerObject) :
Attachment21(innerObject), Attachment21(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V21.Attachments
public override MeshAttachment InnerObject => _o; public override MeshAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot21 st) if (slot is Slot21 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V21;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime21; using SpineRuntime21;
namespace Spine.Implementations.SpineWrappers.V21.Attachments namespace Spine.Implementations.V21.Attachments
{ {
internal sealed class RegionAttachment21(RegionAttachment innerObject) : internal sealed class RegionAttachment21(RegionAttachment innerObject) :
Attachment21(innerObject), Attachment21(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V21.Attachments
public override RegionAttachment InnerObject => _o; public override RegionAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot21 st) if (slot is Slot21 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V21;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime21; using SpineRuntime21;
namespace Spine.Implementations.SpineWrappers.V21.Attachments namespace Spine.Implementations.V21.Attachments
{ {
internal sealed class SkinnedMeshAttachment21(SkinnedMeshAttachment innerObject) : internal sealed class SkinnedMeshAttachment21(SkinnedMeshAttachment innerObject) :
Attachment21(innerObject), Attachment21(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V21.Attachments
public override SkinnedMeshAttachment InnerObject => _o; public override SkinnedMeshAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot21 st) if (slot is Slot21 st)
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime21; using SpineRuntime21;
namespace Spine.Implementations.SpineWrappers.V21 namespace Spine.Implementations.V21
{ {
internal sealed class Bone21(Bone innerObject, Bone21? parent = null) : IBone internal sealed class Bone21(Bone innerObject, Bone21? parent = null) : IBone
{ {

View File

@@ -5,10 +5,10 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Collections.Frozen; using System.Collections.Frozen;
using System.Collections.Immutable; using System.Collections.Immutable;
using Spine.SpineWrappers;
using SpineRuntime21; using SpineRuntime21;
using Spine.Interfaces;
namespace Spine.Implementations.SpineWrappers.V21 namespace Spine.Implementations.V21
{ {
internal sealed class Skeleton21 : ISkeleton internal sealed class Skeleton21 : ISkeleton
{ {
@@ -52,6 +52,7 @@ namespace Spine.Implementations.SpineWrappers.V21
public Skeleton InnerObject => _o; public Skeleton InnerObject => _o;
public string Name => _o.Data.Name;
public float R { get => _o.R; set => _o.R = value; } public float R { get => _o.R; set => _o.R = value; }
public float G { get => _o.G; set => _o.G = value; } public float G { get => _o.G; set => _o.G = value; }
public float B { get => _o.B; set => _o.B = value; } public float B { get => _o.B; set => _o.B = value; }
@@ -95,11 +96,6 @@ namespace Spine.Implementations.SpineWrappers.V21
public void SetSlotsToSetupPose() => _o.SetSlotsToSetupPose(); public void SetSlotsToSetupPose() => _o.SetSlotsToSetupPose();
public void Update(float delta) => _o.Update(delta); public void Update(float delta) => _o.Update(delta);
public void GetBounds(out float x, out float y, out float w, out float h)
{
_o.GetBounds(out x, out y, out w, out h);
}
public override string ToString() => _o.ToString(); public override string ToString() => _o.ToString();
} }
} }

View File

@@ -1,5 +1,5 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using Spine.SpineWrappers.Attachments; using Spine.Interfaces.Attachments;
using Spine.Utils; using Spine.Utils;
using SpineRuntime21; using SpineRuntime21;
using System; using System;
@@ -8,7 +8,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V21 namespace Spine.Implementations.V21
{ {
internal sealed class SkeletonClipping21 : ISkeletonClipping internal sealed class SkeletonClipping21 : ISkeletonClipping
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime21; using SpineRuntime21;
namespace Spine.Implementations.SpineWrappers.V21 namespace Spine.Implementations.V21
{ {
internal sealed class Skin21 : ISkin internal sealed class Skin21 : ISkin
{ {

View File

@@ -5,10 +5,11 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.Utils; using Spine.Utils;
using Spine.SpineWrappers;
using SpineRuntime21; using SpineRuntime21;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
namespace Spine.Implementations.SpineWrappers.V21 namespace Spine.Implementations.V21
{ {
internal sealed class Slot21 : ISlot internal sealed class Slot21 : ISlot
{ {
@@ -39,7 +40,7 @@ namespace Spine.Implementations.SpineWrappers.V21
public float A { get => _o.A; set => _o.A = value; } public float A { get => _o.A; set => _o.A = value; }
public IBone Bone => _bone; public IBone Bone => _bone;
public Spine.SpineWrappers.Attachments.IAttachment? Attachment public IAttachment? Attachment
{ {
get get
{ {

View File

@@ -6,12 +6,12 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.Utils; using Spine.Utils;
using Spine.SpineWrappers;
using Spine.SpineWrappers.Attachments;
using SpineRuntime21; using SpineRuntime21;
using Spine.Implementations.SpineWrappers.V21.Attachments; using Spine.Implementations.V21.Attachments;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
namespace Spine.Implementations.SpineWrappers.V21 namespace Spine.Implementations.V21
{ {
[SpineImplementation(2, 1)] [SpineImplementation(2, 1)]
internal sealed class SpineObjectData21 : SpineObjectData internal sealed class SpineObjectData21 : SpineObjectData
@@ -26,7 +26,7 @@ namespace Spine.Implementations.SpineWrappers.V21
private readonly ImmutableArray<IAnimation> _animations; private readonly ImmutableArray<IAnimation> _animations;
private readonly FrozenDictionary<string, IAnimation> _animationsByName; private readonly FrozenDictionary<string, IAnimation> _animationsByName;
public SpineObjectData21(string skelPath, string atlasPath, Spine.SpineWrappers.TextureLoader textureLoader) public SpineObjectData21(string skelPath, string atlasPath, TextureLoader textureLoader)
: base(skelPath, atlasPath, textureLoader) : base(skelPath, atlasPath, textureLoader)
{ {
// 加载 atlas // 加载 atlas

View File

@@ -1,4 +1,4 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime21; using SpineRuntime21;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V21 namespace Spine.Implementations.V21
{ {
internal sealed class TrackEntry21(TrackEntry innerObject, AnimationState21 animationState, SpineObjectData21 data): ITrackEntry internal sealed class TrackEntry21(TrackEntry innerObject, AnimationState21 animationState, SpineObjectData21 data): ITrackEntry
{ {
@@ -34,7 +34,7 @@ namespace Spine.Implementations.SpineWrappers.V21
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Start += f; _o.Start += f;
@@ -63,7 +63,7 @@ namespace Spine.Implementations.SpineWrappers.V21
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.End += f; _o.End += f;
@@ -92,7 +92,7 @@ namespace Spine.Implementations.SpineWrappers.V21
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Complete += f; _o.Complete += f;

View File

@@ -1,4 +1,4 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime34; using SpineRuntime34;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V34 namespace Spine.Implementations.V34
{ {
internal sealed class Animation34(Animation innerObject) : IAnimation internal sealed class Animation34(Animation innerObject) : IAnimation
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime34; using SpineRuntime34;
namespace Spine.Implementations.SpineWrappers.V34 namespace Spine.Implementations.V34
{ {
internal sealed class AnimationState34(AnimationState innerObject, SpineObjectData34 data) : IAnimationState internal sealed class AnimationState34(AnimationState innerObject, SpineObjectData34 data) : IAnimationState
{ {
@@ -36,7 +36,7 @@ namespace Spine.Implementations.SpineWrappers.V34
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Start += f; _o.Start += f;
@@ -65,7 +65,7 @@ namespace Spine.Implementations.SpineWrappers.V34
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.End += f; _o.End += f;
@@ -94,7 +94,7 @@ namespace Spine.Implementations.SpineWrappers.V34
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Complete += f; _o.Complete += f;

View File

@@ -3,11 +3,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using Spine.SpineWrappers.Attachments; using Spine.Interfaces.Attachments;
using SpineRuntime34; using SpineRuntime34;
namespace Spine.Implementations.SpineWrappers.V34.Attachments namespace Spine.Implementations.V34.Attachments
{ {
internal abstract class Attachment34(Attachment innerObject) : IAttachment internal abstract class Attachment34(Attachment innerObject) : IAttachment
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V34;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime34; using SpineRuntime34;
namespace Spine.Implementations.SpineWrappers.V34.Attachments namespace Spine.Implementations.V34.Attachments
{ {
internal sealed class BoundingBoxAttachment34(BoundingBoxAttachment innerObject) : internal sealed class BoundingBoxAttachment34(BoundingBoxAttachment innerObject) :
Attachment34(innerObject), Attachment34(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V34.Attachments
public override BoundingBoxAttachment InnerObject => _o; public override BoundingBoxAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot34 st) if (slot is Slot34 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V34;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime34; using SpineRuntime34;
namespace Spine.Implementations.SpineWrappers.V34.Attachments namespace Spine.Implementations.V34.Attachments
{ {
internal sealed class MeshAttachment34(MeshAttachment innerObject) : internal sealed class MeshAttachment34(MeshAttachment innerObject) :
Attachment34(innerObject), Attachment34(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V34.Attachments
public override MeshAttachment InnerObject => _o; public override MeshAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot34 st) if (slot is Slot34 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V34;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime34; using SpineRuntime34;
namespace Spine.Implementations.SpineWrappers.V34.Attachments namespace Spine.Implementations.V34.Attachments
{ {
internal sealed class PathAttachment34(PathAttachment innerObject) : internal sealed class PathAttachment34(PathAttachment innerObject) :
Attachment34(innerObject), Attachment34(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V34.Attachments
public override PathAttachment InnerObject => _o; public override PathAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot34 st) if (slot is Slot34 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V34;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime34; using SpineRuntime34;
namespace Spine.Implementations.SpineWrappers.V34.Attachments namespace Spine.Implementations.V34.Attachments
{ {
internal sealed class RegionAttachment34(RegionAttachment innerObject) : internal sealed class RegionAttachment34(RegionAttachment innerObject) :
Attachment34(innerObject), Attachment34(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V34.Attachments
public override RegionAttachment InnerObject => _o; public override RegionAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot34 st) if (slot is Slot34 st)
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime34; using SpineRuntime34;
namespace Spine.Implementations.SpineWrappers.V34 namespace Spine.Implementations.V34
{ {
internal sealed class Bone34(Bone innerObject, Bone34? parent = null) : IBone internal sealed class Bone34(Bone innerObject, Bone34? parent = null) : IBone
{ {

View File

@@ -5,10 +5,10 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Collections.Frozen; using System.Collections.Frozen;
using System.Collections.Immutable; using System.Collections.Immutable;
using Spine.SpineWrappers;
using SpineRuntime34; using SpineRuntime34;
using Spine.Interfaces;
namespace Spine.Implementations.SpineWrappers.V34 namespace Spine.Implementations.V34
{ {
internal sealed class Skeleton34 : ISkeleton internal sealed class Skeleton34 : ISkeleton
{ {
@@ -52,6 +52,7 @@ namespace Spine.Implementations.SpineWrappers.V34
public Skeleton InnerObject => _o; public Skeleton InnerObject => _o;
public string Name => _o.Data.Name;
public float R { get => _o.R; set => _o.R = value; } public float R { get => _o.R; set => _o.R = value; }
public float G { get => _o.G; set => _o.G = value; } public float G { get => _o.G; set => _o.G = value; }
public float B { get => _o.B; set => _o.B = value; } public float B { get => _o.B; set => _o.B = value; }
@@ -95,12 +96,6 @@ namespace Spine.Implementations.SpineWrappers.V34
public void SetSlotsToSetupPose() => _o.SetSlotsToSetupPose(); public void SetSlotsToSetupPose() => _o.SetSlotsToSetupPose();
public void Update(float delta) => _o.Update(delta); public void Update(float delta) => _o.Update(delta);
public void GetBounds(out float x, out float y, out float w, out float h)
{
float[] _ = [];
_o.GetBounds(out x, out y, out w, out h);
}
public override string ToString() => _o.ToString(); public override string ToString() => _o.ToString();
} }
} }

View File

@@ -1,5 +1,5 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using Spine.SpineWrappers.Attachments; using Spine.Interfaces.Attachments;
using Spine.Utils; using Spine.Utils;
using SpineRuntime34; using SpineRuntime34;
using System; using System;
@@ -8,7 +8,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V34 namespace Spine.Implementations.V34
{ {
internal sealed class SkeletonClipping34 : ISkeletonClipping internal sealed class SkeletonClipping34 : ISkeletonClipping
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime34; using SpineRuntime34;
namespace Spine.Implementations.SpineWrappers.V34 namespace Spine.Implementations.V34
{ {
internal sealed class Skin34 : ISkin internal sealed class Skin34 : ISkin
{ {

View File

@@ -5,10 +5,11 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.Utils; using Spine.Utils;
using Spine.SpineWrappers;
using SpineRuntime34; using SpineRuntime34;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
namespace Spine.Implementations.SpineWrappers.V34 namespace Spine.Implementations.V34
{ {
internal sealed class Slot34 : ISlot internal sealed class Slot34 : ISlot
{ {
@@ -46,7 +47,7 @@ namespace Spine.Implementations.SpineWrappers.V34
public float A { get => _o.A; set => _o.A = value; } public float A { get => _o.A; set => _o.A = value; }
public IBone Bone => _bone; public IBone Bone => _bone;
public Spine.SpineWrappers.Attachments.IAttachment? Attachment public IAttachment? Attachment
{ {
get get
{ {

View File

@@ -6,12 +6,12 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.Utils; using Spine.Utils;
using Spine.SpineWrappers;
using Spine.SpineWrappers.Attachments;
using SpineRuntime34; using SpineRuntime34;
using Spine.Implementations.SpineWrappers.V34.Attachments; using Spine.Implementations.V34.Attachments;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
namespace Spine.Implementations.SpineWrappers.V34 namespace Spine.Implementations.V34
{ {
[SpineImplementation(3, 4)] [SpineImplementation(3, 4)]
internal sealed class SpineObjectData34 : SpineObjectData internal sealed class SpineObjectData34 : SpineObjectData
@@ -26,7 +26,7 @@ namespace Spine.Implementations.SpineWrappers.V34
private readonly ImmutableArray<IAnimation> _animations; private readonly ImmutableArray<IAnimation> _animations;
private readonly FrozenDictionary<string, IAnimation> _animationsByName; private readonly FrozenDictionary<string, IAnimation> _animationsByName;
public SpineObjectData34(string skelPath, string atlasPath, Spine.SpineWrappers.TextureLoader textureLoader) public SpineObjectData34(string skelPath, string atlasPath, TextureLoader textureLoader)
: base(skelPath, atlasPath, textureLoader) : base(skelPath, atlasPath, textureLoader)
{ {
// 加载 atlas // 加载 atlas

View File

@@ -1,4 +1,4 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime34; using SpineRuntime34;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V34 namespace Spine.Implementations.V34
{ {
internal sealed class TrackEntry34(TrackEntry innerObject, AnimationState34 animationState, SpineObjectData34 data): ITrackEntry internal sealed class TrackEntry34(TrackEntry innerObject, AnimationState34 animationState, SpineObjectData34 data): ITrackEntry
{ {
@@ -34,7 +34,7 @@ namespace Spine.Implementations.SpineWrappers.V34
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Start += f; _o.Start += f;
@@ -63,7 +63,7 @@ namespace Spine.Implementations.SpineWrappers.V34
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.End += f; _o.End += f;
@@ -92,7 +92,7 @@ namespace Spine.Implementations.SpineWrappers.V34
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Complete += f; _o.Complete += f;

View File

@@ -1,4 +1,4 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime35; using SpineRuntime35;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V35 namespace Spine.Implementations.V35
{ {
internal sealed class Animation35(Animation innerObject) : IAnimation internal sealed class Animation35(Animation innerObject) : IAnimation
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime35; using SpineRuntime35;
namespace Spine.Implementations.SpineWrappers.V35 namespace Spine.Implementations.V35
{ {
internal sealed class AnimationState35(AnimationState innerObject, SpineObjectData35 data) : IAnimationState internal sealed class AnimationState35(AnimationState innerObject, SpineObjectData35 data) : IAnimationState
{ {
@@ -27,7 +27,7 @@ namespace Spine.Implementations.SpineWrappers.V35
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Start += f; _o.Start += f;
@@ -56,7 +56,7 @@ namespace Spine.Implementations.SpineWrappers.V35
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Interrupt += f; _o.Interrupt += f;
@@ -85,7 +85,7 @@ namespace Spine.Implementations.SpineWrappers.V35
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.End += f; _o.End += f;
@@ -114,7 +114,7 @@ namespace Spine.Implementations.SpineWrappers.V35
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Complete += f; _o.Complete += f;
@@ -143,7 +143,7 @@ namespace Spine.Implementations.SpineWrappers.V35
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Dispose += f; _o.Dispose += f;

View File

@@ -3,11 +3,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using Spine.SpineWrappers.Attachments; using Spine.Interfaces.Attachments;
using SpineRuntime35; using SpineRuntime35;
namespace Spine.Implementations.SpineWrappers.V35.Attachments namespace Spine.Implementations.V35.Attachments
{ {
internal abstract class Attachment35(Attachment innerObject) : IAttachment internal abstract class Attachment35(Attachment innerObject) : IAttachment
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V35;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime35; using SpineRuntime35;
namespace Spine.Implementations.SpineWrappers.V35.Attachments namespace Spine.Implementations.V35.Attachments
{ {
internal sealed class BoundingBoxAttachment35(BoundingBoxAttachment innerObject) : internal sealed class BoundingBoxAttachment35(BoundingBoxAttachment innerObject) :
Attachment35(innerObject), Attachment35(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V35.Attachments
public override BoundingBoxAttachment InnerObject => _o; public override BoundingBoxAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot35 st) if (slot is Slot35 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V35;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime35; using SpineRuntime35;
namespace Spine.Implementations.SpineWrappers.V35.Attachments namespace Spine.Implementations.V35.Attachments
{ {
internal sealed class ClippingAttachment35(ClippingAttachment innerObject) : internal sealed class ClippingAttachment35(ClippingAttachment innerObject) :
Attachment35(innerObject), Attachment35(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V35.Attachments
public override ClippingAttachment InnerObject => _o; public override ClippingAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot35 st) if (slot is Slot35 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V35;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime35; using SpineRuntime35;
namespace Spine.Implementations.SpineWrappers.V35.Attachments namespace Spine.Implementations.V35.Attachments
{ {
internal sealed class MeshAttachment35(MeshAttachment innerObject) : internal sealed class MeshAttachment35(MeshAttachment innerObject) :
Attachment35(innerObject), Attachment35(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V35.Attachments
public override MeshAttachment InnerObject => _o; public override MeshAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot35 st) if (slot is Slot35 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V35;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime35; using SpineRuntime35;
namespace Spine.Implementations.SpineWrappers.V35.Attachments namespace Spine.Implementations.V35.Attachments
{ {
internal sealed class PathAttachment35(PathAttachment innerObject) : internal sealed class PathAttachment35(PathAttachment innerObject) :
Attachment35(innerObject), Attachment35(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V35.Attachments
public override PathAttachment InnerObject => _o; public override PathAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot35 st) if (slot is Slot35 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V35;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime35; using SpineRuntime35;
namespace Spine.Implementations.SpineWrappers.V35.Attachments namespace Spine.Implementations.V35.Attachments
{ {
internal sealed class PointAttachment35(PointAttachment innerObject) : internal sealed class PointAttachment35(PointAttachment innerObject) :
Attachment35(innerObject), Attachment35(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V35.Attachments
public override PointAttachment InnerObject => _o; public override PointAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot35 st) if (slot is Slot35 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V35;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime35; using SpineRuntime35;
namespace Spine.Implementations.SpineWrappers.V35.Attachments namespace Spine.Implementations.V35.Attachments
{ {
internal sealed class RegionAttachment35(RegionAttachment innerObject) : internal sealed class RegionAttachment35(RegionAttachment innerObject) :
Attachment35(innerObject), Attachment35(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V35.Attachments
public override RegionAttachment InnerObject => _o; public override RegionAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot35 st) if (slot is Slot35 st)
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime35; using SpineRuntime35;
namespace Spine.Implementations.SpineWrappers.V35 namespace Spine.Implementations.V35
{ {
internal sealed class Bone35(Bone innerObject, Bone35? parent = null) : IBone internal sealed class Bone35(Bone innerObject, Bone35? parent = null) : IBone
{ {

View File

@@ -5,10 +5,10 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Collections.Frozen; using System.Collections.Frozen;
using System.Collections.Immutable; using System.Collections.Immutable;
using Spine.SpineWrappers;
using SpineRuntime35; using SpineRuntime35;
using Spine.Interfaces;
namespace Spine.Implementations.SpineWrappers.V35 namespace Spine.Implementations.V35
{ {
internal sealed class Skeleton35 : ISkeleton internal sealed class Skeleton35 : ISkeleton
{ {
@@ -52,6 +52,7 @@ namespace Spine.Implementations.SpineWrappers.V35
public Skeleton InnerObject => _o; public Skeleton InnerObject => _o;
public string Name => _o.Data.Name;
public float R { get => _o.R; set => _o.R = value; } public float R { get => _o.R; set => _o.R = value; }
public float G { get => _o.G; set => _o.G = value; } public float G { get => _o.G; set => _o.G = value; }
public float B { get => _o.B; set => _o.B = value; } public float B { get => _o.B; set => _o.B = value; }
@@ -95,12 +96,6 @@ namespace Spine.Implementations.SpineWrappers.V35
public void SetSlotsToSetupPose() => _o.SetSlotsToSetupPose(); public void SetSlotsToSetupPose() => _o.SetSlotsToSetupPose();
public void Update(float delta) => _o.Update(delta); public void Update(float delta) => _o.Update(delta);
public void GetBounds(out float x, out float y, out float w, out float h)
{
float[] _ = [];
_o.GetBounds(out x, out y, out w, out h, ref _);
}
public override string ToString() => _o.ToString(); public override string ToString() => _o.ToString();
} }
} }

View File

@@ -1,5 +1,5 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using Spine.SpineWrappers.Attachments; using Spine.Interfaces.Attachments;
using Spine.Utils; using Spine.Utils;
using SpineRuntime35; using SpineRuntime35;
using System; using System;
@@ -8,7 +8,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V35 namespace Spine.Implementations.V35
{ {
internal sealed class SkeletonClipping35 : ISkeletonClipping internal sealed class SkeletonClipping35 : ISkeletonClipping
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime35; using SpineRuntime35;
namespace Spine.Implementations.SpineWrappers.V35 namespace Spine.Implementations.V35
{ {
internal sealed class Skin35 : ISkin internal sealed class Skin35 : ISkin
{ {

View File

@@ -5,10 +5,11 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.Utils; using Spine.Utils;
using Spine.SpineWrappers;
using SpineRuntime35; using SpineRuntime35;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
namespace Spine.Implementations.SpineWrappers.V35 namespace Spine.Implementations.V35
{ {
internal sealed class Slot35 : ISlot internal sealed class Slot35 : ISlot
{ {
@@ -46,7 +47,7 @@ namespace Spine.Implementations.SpineWrappers.V35
public float A { get => _o.A; set => _o.A = value; } public float A { get => _o.A; set => _o.A = value; }
public IBone Bone => _bone; public IBone Bone => _bone;
public Spine.SpineWrappers.Attachments.IAttachment? Attachment public IAttachment? Attachment
{ {
get get
{ {

View File

@@ -6,12 +6,12 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.Utils; using Spine.Utils;
using Spine.SpineWrappers;
using Spine.SpineWrappers.Attachments;
using SpineRuntime35; using SpineRuntime35;
using Spine.Implementations.SpineWrappers.V35.Attachments; using Spine.Implementations.V35.Attachments;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
namespace Spine.Implementations.SpineWrappers.V35 namespace Spine.Implementations.V35
{ {
[SpineImplementation(3, 5)] [SpineImplementation(3, 5)]
internal sealed class SpineObjectData35 : SpineObjectData internal sealed class SpineObjectData35 : SpineObjectData
@@ -26,7 +26,7 @@ namespace Spine.Implementations.SpineWrappers.V35
private readonly ImmutableArray<IAnimation> _animations; private readonly ImmutableArray<IAnimation> _animations;
private readonly FrozenDictionary<string, IAnimation> _animationsByName; private readonly FrozenDictionary<string, IAnimation> _animationsByName;
public SpineObjectData35(string skelPath, string atlasPath, Spine.SpineWrappers.TextureLoader textureLoader) public SpineObjectData35(string skelPath, string atlasPath, TextureLoader textureLoader)
: base(skelPath, atlasPath, textureLoader) : base(skelPath, atlasPath, textureLoader)
{ {
// 加载 atlas // 加载 atlas

View File

@@ -1,4 +1,4 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime35; using SpineRuntime35;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V35 namespace Spine.Implementations.V35
{ {
internal sealed class TrackEntry35(TrackEntry innerObject, AnimationState35 animationState, SpineObjectData35 data): ITrackEntry internal sealed class TrackEntry35(TrackEntry innerObject, AnimationState35 animationState, SpineObjectData35 data): ITrackEntry
{ {
@@ -26,7 +26,7 @@ namespace Spine.Implementations.SpineWrappers.V35
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Start += f; _o.Start += f;
@@ -55,7 +55,7 @@ namespace Spine.Implementations.SpineWrappers.V35
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Interrupt += f; _o.Interrupt += f;
@@ -84,7 +84,7 @@ namespace Spine.Implementations.SpineWrappers.V35
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.End += f; _o.End += f;
@@ -113,7 +113,7 @@ namespace Spine.Implementations.SpineWrappers.V35
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Complete += f; _o.Complete += f;
@@ -142,7 +142,7 @@ namespace Spine.Implementations.SpineWrappers.V35
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Dispose += f; _o.Dispose += f;

View File

@@ -1,4 +1,4 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime36; using SpineRuntime36;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V36 namespace Spine.Implementations.V36
{ {
internal sealed class Animation36(Animation innerObject) : IAnimation internal sealed class Animation36(Animation innerObject) : IAnimation
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime36; using SpineRuntime36;
namespace Spine.Implementations.SpineWrappers.V36 namespace Spine.Implementations.V36
{ {
internal sealed class AnimationState36(AnimationState innerObject, SpineObjectData36 data) : IAnimationState internal sealed class AnimationState36(AnimationState innerObject, SpineObjectData36 data) : IAnimationState
{ {
@@ -27,7 +27,7 @@ namespace Spine.Implementations.SpineWrappers.V36
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Start += f; _o.Start += f;
@@ -56,7 +56,7 @@ namespace Spine.Implementations.SpineWrappers.V36
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Interrupt += f; _o.Interrupt += f;
@@ -85,7 +85,7 @@ namespace Spine.Implementations.SpineWrappers.V36
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.End += f; _o.End += f;
@@ -114,7 +114,7 @@ namespace Spine.Implementations.SpineWrappers.V36
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Complete += f; _o.Complete += f;
@@ -143,7 +143,7 @@ namespace Spine.Implementations.SpineWrappers.V36
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Dispose += f; _o.Dispose += f;

View File

@@ -3,11 +3,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using Spine.SpineWrappers.Attachments; using Spine.Interfaces.Attachments;
using SpineRuntime36; using SpineRuntime36;
namespace Spine.Implementations.SpineWrappers.V36.Attachments namespace Spine.Implementations.V36.Attachments
{ {
internal abstract class Attachment36(Attachment innerObject) : IAttachment internal abstract class Attachment36(Attachment innerObject) : IAttachment
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V36;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime36; using SpineRuntime36;
namespace Spine.Implementations.SpineWrappers.V36.Attachments namespace Spine.Implementations.V36.Attachments
{ {
internal sealed class BoundingBoxAttachment36(BoundingBoxAttachment innerObject) : internal sealed class BoundingBoxAttachment36(BoundingBoxAttachment innerObject) :
Attachment36(innerObject), Attachment36(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V36.Attachments
public override BoundingBoxAttachment InnerObject => _o; public override BoundingBoxAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot36 st) if (slot is Slot36 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V36;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime36; using SpineRuntime36;
namespace Spine.Implementations.SpineWrappers.V36.Attachments namespace Spine.Implementations.V36.Attachments
{ {
internal sealed class ClippingAttachment36(ClippingAttachment innerObject) : internal sealed class ClippingAttachment36(ClippingAttachment innerObject) :
Attachment36(innerObject), Attachment36(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V36.Attachments
public override ClippingAttachment InnerObject => _o; public override ClippingAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot36 st) if (slot is Slot36 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V36;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime36; using SpineRuntime36;
namespace Spine.Implementations.SpineWrappers.V36.Attachments namespace Spine.Implementations.V36.Attachments
{ {
internal sealed class MeshAttachment36(MeshAttachment innerObject) : internal sealed class MeshAttachment36(MeshAttachment innerObject) :
Attachment36(innerObject), Attachment36(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V36.Attachments
public override MeshAttachment InnerObject => _o; public override MeshAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot36 st) if (slot is Slot36 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V36;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime36; using SpineRuntime36;
namespace Spine.Implementations.SpineWrappers.V36.Attachments namespace Spine.Implementations.V36.Attachments
{ {
internal sealed class PathAttachment36(PathAttachment innerObject) : internal sealed class PathAttachment36(PathAttachment innerObject) :
Attachment36(innerObject), Attachment36(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V36.Attachments
public override PathAttachment InnerObject => _o; public override PathAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot36 st) if (slot is Slot36 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V36;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime36; using SpineRuntime36;
namespace Spine.Implementations.SpineWrappers.V36.Attachments namespace Spine.Implementations.V36.Attachments
{ {
internal sealed class PointAttachment36(PointAttachment innerObject) : internal sealed class PointAttachment36(PointAttachment innerObject) :
Attachment36(innerObject), Attachment36(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V36.Attachments
public override PointAttachment InnerObject => _o; public override PointAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot36 st) if (slot is Slot36 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V36;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime36; using SpineRuntime36;
namespace Spine.Implementations.SpineWrappers.V36.Attachments namespace Spine.Implementations.V36.Attachments
{ {
internal sealed class RegionAttachment36(RegionAttachment innerObject) : internal sealed class RegionAttachment36(RegionAttachment innerObject) :
Attachment36(innerObject), Attachment36(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V36.Attachments
public override RegionAttachment InnerObject => _o; public override RegionAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot36 st) if (slot is Slot36 st)
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime36; using SpineRuntime36;
namespace Spine.Implementations.SpineWrappers.V36 namespace Spine.Implementations.V36
{ {
internal sealed class Bone36(Bone innerObject, Bone36? parent = null) : IBone internal sealed class Bone36(Bone innerObject, Bone36? parent = null) : IBone
{ {

View File

@@ -5,10 +5,10 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Collections.Frozen; using System.Collections.Frozen;
using System.Collections.Immutable; using System.Collections.Immutable;
using Spine.SpineWrappers;
using SpineRuntime36; using SpineRuntime36;
using Spine.Interfaces;
namespace Spine.Implementations.SpineWrappers.V36 namespace Spine.Implementations.V36
{ {
internal sealed class Skeleton36 : ISkeleton internal sealed class Skeleton36 : ISkeleton
{ {
@@ -52,6 +52,7 @@ namespace Spine.Implementations.SpineWrappers.V36
public Skeleton InnerObject => _o; public Skeleton InnerObject => _o;
public string Name => _o.Data.Name;
public float R { get => _o.R; set => _o.R = value; } public float R { get => _o.R; set => _o.R = value; }
public float G { get => _o.G; set => _o.G = value; } public float G { get => _o.G; set => _o.G = value; }
public float B { get => _o.B; set => _o.B = value; } public float B { get => _o.B; set => _o.B = value; }
@@ -95,12 +96,6 @@ namespace Spine.Implementations.SpineWrappers.V36
public void SetSlotsToSetupPose() => _o.SetSlotsToSetupPose(); public void SetSlotsToSetupPose() => _o.SetSlotsToSetupPose();
public void Update(float delta) => _o.Update(delta); public void Update(float delta) => _o.Update(delta);
public void GetBounds(out float x, out float y, out float w, out float h)
{
float[] _ = [];
_o.GetBounds(out x, out y, out w, out h, ref _);
}
public override string ToString() => _o.ToString(); public override string ToString() => _o.ToString();
} }
} }

View File

@@ -1,5 +1,5 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using Spine.SpineWrappers.Attachments; using Spine.Interfaces.Attachments;
using Spine.Utils; using Spine.Utils;
using SpineRuntime36; using SpineRuntime36;
using System; using System;
@@ -8,7 +8,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V36 namespace Spine.Implementations.V36
{ {
internal sealed class SkeletonClipping36 : ISkeletonClipping internal sealed class SkeletonClipping36 : ISkeletonClipping
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime36; using SpineRuntime36;
namespace Spine.Implementations.SpineWrappers.V36 namespace Spine.Implementations.V36
{ {
internal sealed class Skin36 : ISkin internal sealed class Skin36 : ISkin
{ {

View File

@@ -5,10 +5,11 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.Utils; using Spine.Utils;
using Spine.SpineWrappers;
using SpineRuntime36; using SpineRuntime36;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
namespace Spine.Implementations.SpineWrappers.V36 namespace Spine.Implementations.V36
{ {
internal sealed class Slot36 : ISlot internal sealed class Slot36 : ISlot
{ {
@@ -46,7 +47,7 @@ namespace Spine.Implementations.SpineWrappers.V36
public float A { get => _o.A; set => _o.A = value; } public float A { get => _o.A; set => _o.A = value; }
public IBone Bone => _bone; public IBone Bone => _bone;
public Spine.SpineWrappers.Attachments.IAttachment? Attachment public IAttachment? Attachment
{ {
get get
{ {

View File

@@ -6,12 +6,12 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.Utils; using Spine.Utils;
using Spine.SpineWrappers;
using Spine.SpineWrappers.Attachments;
using SpineRuntime36; using SpineRuntime36;
using Spine.Implementations.SpineWrappers.V36.Attachments; using Spine.Implementations.V36.Attachments;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
namespace Spine.Implementations.SpineWrappers.V36 namespace Spine.Implementations.V36
{ {
[SpineImplementation(3, 6)] [SpineImplementation(3, 6)]
internal sealed class SpineObjectData36 : SpineObjectData internal sealed class SpineObjectData36 : SpineObjectData
@@ -26,7 +26,7 @@ namespace Spine.Implementations.SpineWrappers.V36
private readonly ImmutableArray<IAnimation> _animations; private readonly ImmutableArray<IAnimation> _animations;
private readonly FrozenDictionary<string, IAnimation> _animationsByName; private readonly FrozenDictionary<string, IAnimation> _animationsByName;
public SpineObjectData36(string skelPath, string atlasPath, Spine.SpineWrappers.TextureLoader textureLoader) public SpineObjectData36(string skelPath, string atlasPath, TextureLoader textureLoader)
: base(skelPath, atlasPath, textureLoader) : base(skelPath, atlasPath, textureLoader)
{ {
// 加载 atlas // 加载 atlas

View File

@@ -1,4 +1,4 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime36; using SpineRuntime36;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V36 namespace Spine.Implementations.V36
{ {
internal sealed class TrackEntry36(TrackEntry innerObject, AnimationState36 animationState, SpineObjectData36 data): ITrackEntry internal sealed class TrackEntry36(TrackEntry innerObject, AnimationState36 animationState, SpineObjectData36 data): ITrackEntry
{ {
@@ -26,7 +26,7 @@ namespace Spine.Implementations.SpineWrappers.V36
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Start += f; _o.Start += f;
@@ -55,7 +55,7 @@ namespace Spine.Implementations.SpineWrappers.V36
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Interrupt += f; _o.Interrupt += f;
@@ -84,7 +84,7 @@ namespace Spine.Implementations.SpineWrappers.V36
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.End += f; _o.End += f;
@@ -113,7 +113,7 @@ namespace Spine.Implementations.SpineWrappers.V36
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Complete += f; _o.Complete += f;
@@ -142,7 +142,7 @@ namespace Spine.Implementations.SpineWrappers.V36
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Dispose += f; _o.Dispose += f;

View File

@@ -1,4 +1,4 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime37; using SpineRuntime37;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V37 namespace Spine.Implementations.V37
{ {
internal sealed class Animation37(Animation innerObject) : IAnimation internal sealed class Animation37(Animation innerObject) : IAnimation
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime37; using SpineRuntime37;
namespace Spine.Implementations.SpineWrappers.V37 namespace Spine.Implementations.V37
{ {
internal sealed class AnimationState37(AnimationState innerObject, SpineObjectData37 data) : IAnimationState internal sealed class AnimationState37(AnimationState innerObject, SpineObjectData37 data) : IAnimationState
{ {
@@ -27,7 +27,7 @@ namespace Spine.Implementations.SpineWrappers.V37
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Start += f; _o.Start += f;
@@ -56,7 +56,7 @@ namespace Spine.Implementations.SpineWrappers.V37
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Interrupt += f; _o.Interrupt += f;
@@ -85,7 +85,7 @@ namespace Spine.Implementations.SpineWrappers.V37
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.End += f; _o.End += f;
@@ -114,7 +114,7 @@ namespace Spine.Implementations.SpineWrappers.V37
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Complete += f; _o.Complete += f;
@@ -143,7 +143,7 @@ namespace Spine.Implementations.SpineWrappers.V37
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Dispose += f; _o.Dispose += f;

View File

@@ -3,11 +3,11 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using Spine.SpineWrappers.Attachments; using Spine.Interfaces.Attachments;
using SpineRuntime37; using SpineRuntime37;
namespace Spine.Implementations.SpineWrappers.V37.Attachments namespace Spine.Implementations.V37.Attachments
{ {
internal abstract class Attachment37(Attachment innerObject) : IAttachment internal abstract class Attachment37(Attachment innerObject) : IAttachment
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V37;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime37; using SpineRuntime37;
namespace Spine.Implementations.SpineWrappers.V37.Attachments namespace Spine.Implementations.V37.Attachments
{ {
internal sealed class BoundingBoxAttachment37(BoundingBoxAttachment innerObject) : internal sealed class BoundingBoxAttachment37(BoundingBoxAttachment innerObject) :
Attachment37(innerObject), Attachment37(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V37.Attachments
public override BoundingBoxAttachment InnerObject => _o; public override BoundingBoxAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot37 st) if (slot is Slot37 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V37;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime37; using SpineRuntime37;
namespace Spine.Implementations.SpineWrappers.V37.Attachments namespace Spine.Implementations.V37.Attachments
{ {
internal sealed class ClippingAttachment37(ClippingAttachment innerObject) : internal sealed class ClippingAttachment37(ClippingAttachment innerObject) :
Attachment37(innerObject), Attachment37(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V37.Attachments
public override ClippingAttachment InnerObject => _o; public override ClippingAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot37 st) if (slot is Slot37 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V37;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime37; using SpineRuntime37;
namespace Spine.Implementations.SpineWrappers.V37.Attachments namespace Spine.Implementations.V37.Attachments
{ {
internal sealed class MeshAttachment37(MeshAttachment innerObject) : internal sealed class MeshAttachment37(MeshAttachment innerObject) :
Attachment37(innerObject), Attachment37(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V37.Attachments
public override MeshAttachment InnerObject => _o; public override MeshAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot37 st) if (slot is Slot37 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V37;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime37; using SpineRuntime37;
namespace Spine.Implementations.SpineWrappers.V37.Attachments namespace Spine.Implementations.V37.Attachments
{ {
internal sealed class PathAttachment37(PathAttachment innerObject) : internal sealed class PathAttachment37(PathAttachment innerObject) :
Attachment37(innerObject), Attachment37(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V37.Attachments
public override PathAttachment InnerObject => _o; public override PathAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot37 st) if (slot is Slot37 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V37;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime37; using SpineRuntime37;
namespace Spine.Implementations.SpineWrappers.V37.Attachments namespace Spine.Implementations.V37.Attachments
{ {
internal sealed class PointAttachment37(PointAttachment innerObject) : internal sealed class PointAttachment37(PointAttachment innerObject) :
Attachment37(innerObject), Attachment37(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V37.Attachments
public override PointAttachment InnerObject => _o; public override PointAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot37 st) if (slot is Slot37 st)
{ {

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V37;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime37; using SpineRuntime37;
namespace Spine.Implementations.SpineWrappers.V37.Attachments namespace Spine.Implementations.V37.Attachments
{ {
internal sealed class RegionAttachment37(RegionAttachment innerObject) : internal sealed class RegionAttachment37(RegionAttachment innerObject) :
Attachment37(innerObject), Attachment37(innerObject),
@@ -16,7 +18,7 @@ namespace Spine.Implementations.SpineWrappers.V37.Attachments
public override RegionAttachment InnerObject => _o; public override RegionAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot37 st) if (slot is Slot37 st)
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime37; using SpineRuntime37;
namespace Spine.Implementations.SpineWrappers.V37 namespace Spine.Implementations.V37
{ {
internal sealed class Bone37(Bone innerObject, Bone37? parent = null) : IBone internal sealed class Bone37(Bone innerObject, Bone37? parent = null) : IBone
{ {

View File

@@ -5,10 +5,10 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Collections.Frozen; using System.Collections.Frozen;
using System.Collections.Immutable; using System.Collections.Immutable;
using Spine.SpineWrappers;
using SpineRuntime37; using SpineRuntime37;
using Spine.Interfaces;
namespace Spine.Implementations.SpineWrappers.V37 namespace Spine.Implementations.V37
{ {
internal sealed class Skeleton37 : ISkeleton internal sealed class Skeleton37 : ISkeleton
{ {
@@ -52,6 +52,7 @@ namespace Spine.Implementations.SpineWrappers.V37
public Skeleton InnerObject => _o; public Skeleton InnerObject => _o;
public string Name => _o.Data.Name;
public float R { get => _o.R; set => _o.R = value; } public float R { get => _o.R; set => _o.R = value; }
public float G { get => _o.G; set => _o.G = value; } public float G { get => _o.G; set => _o.G = value; }
public float B { get => _o.B; set => _o.B = value; } public float B { get => _o.B; set => _o.B = value; }
@@ -95,12 +96,6 @@ namespace Spine.Implementations.SpineWrappers.V37
public void SetSlotsToSetupPose() => _o.SetSlotsToSetupPose(); public void SetSlotsToSetupPose() => _o.SetSlotsToSetupPose();
public void Update(float delta) => _o.Update(delta); public void Update(float delta) => _o.Update(delta);
public void GetBounds(out float x, out float y, out float w, out float h)
{
float[] _ = [];
_o.GetBounds(out x, out y, out w, out h, ref _);
}
public override string ToString() => _o.ToString(); public override string ToString() => _o.ToString();
} }
} }

View File

@@ -1,5 +1,5 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using Spine.SpineWrappers.Attachments; using Spine.Interfaces.Attachments;
using Spine.Utils; using Spine.Utils;
using SpineRuntime37; using SpineRuntime37;
using System; using System;
@@ -8,7 +8,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V37 namespace Spine.Implementations.V37
{ {
internal sealed class SkeletonClipping37 : ISkeletonClipping internal sealed class SkeletonClipping37 : ISkeletonClipping
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime37; using SpineRuntime37;
namespace Spine.Implementations.SpineWrappers.V37 namespace Spine.Implementations.V37
{ {
internal sealed class Skin37 : ISkin internal sealed class Skin37 : ISkin
{ {

View File

@@ -5,10 +5,11 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.Utils; using Spine.Utils;
using Spine.SpineWrappers;
using SpineRuntime37; using SpineRuntime37;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
namespace Spine.Implementations.SpineWrappers.V37 namespace Spine.Implementations.V37
{ {
internal sealed class Slot37 : ISlot internal sealed class Slot37 : ISlot
{ {
@@ -46,7 +47,7 @@ namespace Spine.Implementations.SpineWrappers.V37
public float A { get => _o.A; set => _o.A = value; } public float A { get => _o.A; set => _o.A = value; }
public IBone Bone => _bone; public IBone Bone => _bone;
public Spine.SpineWrappers.Attachments.IAttachment? Attachment public IAttachment? Attachment
{ {
get get
{ {

View File

@@ -6,12 +6,12 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.Utils; using Spine.Utils;
using Spine.SpineWrappers;
using Spine.SpineWrappers.Attachments;
using SpineRuntime37; using SpineRuntime37;
using Spine.Implementations.SpineWrappers.V37.Attachments; using Spine.Implementations.V37.Attachments;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
namespace Spine.Implementations.SpineWrappers.V37 namespace Spine.Implementations.V37
{ {
[SpineImplementation(3, 7)] [SpineImplementation(3, 7)]
internal sealed class SpineObjectData37 : SpineObjectData internal sealed class SpineObjectData37 : SpineObjectData
@@ -26,7 +26,7 @@ namespace Spine.Implementations.SpineWrappers.V37
private readonly ImmutableArray<IAnimation> _animations; private readonly ImmutableArray<IAnimation> _animations;
private readonly FrozenDictionary<string, IAnimation> _animationsByName; private readonly FrozenDictionary<string, IAnimation> _animationsByName;
public SpineObjectData37(string skelPath, string atlasPath, Spine.SpineWrappers.TextureLoader textureLoader) public SpineObjectData37(string skelPath, string atlasPath, TextureLoader textureLoader)
: base(skelPath, atlasPath, textureLoader) : base(skelPath, atlasPath, textureLoader)
{ {
// 加载 atlas // 加载 atlas

View File

@@ -1,4 +1,4 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime37; using SpineRuntime37;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V37 namespace Spine.Implementations.V37
{ {
internal sealed class TrackEntry37(TrackEntry innerObject, AnimationState37 animationState, SpineObjectData37 data): ITrackEntry internal sealed class TrackEntry37(TrackEntry innerObject, AnimationState37 animationState, SpineObjectData37 data): ITrackEntry
{ {
@@ -26,7 +26,7 @@ namespace Spine.Implementations.SpineWrappers.V37
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Start += f; _o.Start += f;
@@ -55,7 +55,7 @@ namespace Spine.Implementations.SpineWrappers.V37
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Interrupt += f; _o.Interrupt += f;
@@ -84,7 +84,7 @@ namespace Spine.Implementations.SpineWrappers.V37
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.End += f; _o.End += f;
@@ -113,7 +113,7 @@ namespace Spine.Implementations.SpineWrappers.V37
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Complete += f; _o.Complete += f;
@@ -142,7 +142,7 @@ namespace Spine.Implementations.SpineWrappers.V37
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(_animationState.GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(_animationState.GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Dispose += f; _o.Dispose += f;

View File

@@ -1,4 +1,4 @@
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime38; using SpineRuntime38;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -6,7 +6,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Spine.Implementations.SpineWrappers.V38 namespace Spine.Implementations.V38
{ {
internal sealed class Animation38(Animation innerObject) : IAnimation internal sealed class Animation38(Animation innerObject) : IAnimation
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime38; using SpineRuntime38;
namespace Spine.Implementations.SpineWrappers.V38 namespace Spine.Implementations.V38
{ {
internal sealed class AnimationState38(AnimationState innerObject, SpineObjectData38 data) : IAnimationState internal sealed class AnimationState38(AnimationState innerObject, SpineObjectData38 data) : IAnimationState
{ {
@@ -27,7 +27,7 @@ namespace Spine.Implementations.SpineWrappers.V38
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Start += f; _o.Start += f;
@@ -56,7 +56,7 @@ namespace Spine.Implementations.SpineWrappers.V38
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Interrupt += f; _o.Interrupt += f;
@@ -85,7 +85,7 @@ namespace Spine.Implementations.SpineWrappers.V38
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.End += f; _o.End += f;
@@ -114,7 +114,7 @@ namespace Spine.Implementations.SpineWrappers.V38
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Complete += f; _o.Complete += f;
@@ -143,7 +143,7 @@ namespace Spine.Implementations.SpineWrappers.V38
if (value is null) return; if (value is null) return;
if (!_eventMapping.TryGetValue(value, out var f)) if (!_eventMapping.TryGetValue(value, out var f))
{ {
_eventMapping[value] = f = (TrackEntry t) => value(GetTrackEntry(t)); _eventMapping[value] = f = (t) => value(GetTrackEntry(t));
_eventCount[value] = 0; _eventCount[value] = 0;
} }
_o.Dispose += f; _o.Dispose += f;

View File

@@ -3,12 +3,12 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using Spine.SpineWrappers.Attachments; using Spine.Interfaces.Attachments;
using SpineRuntime38; using SpineRuntime38;
using SpineRuntime38.Attachments; using SpineRuntime38.Attachments;
namespace Spine.Implementations.SpineWrappers.V38.Attachments namespace Spine.Implementations.V38.Attachments
{ {
internal abstract class Attachment38(Attachment innerObject) : IAttachment internal abstract class Attachment38(Attachment innerObject) : IAttachment
{ {

View File

@@ -3,11 +3,13 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V38;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime38; using SpineRuntime38;
using SpineRuntime38.Attachments; using SpineRuntime38.Attachments;
namespace Spine.Implementations.SpineWrappers.V38.Attachments namespace Spine.Implementations.V38.Attachments
{ {
internal sealed class BoundingBoxAttachment38(BoundingBoxAttachment innerObject) : internal sealed class BoundingBoxAttachment38(BoundingBoxAttachment innerObject) :
Attachment38(innerObject), Attachment38(innerObject),
@@ -17,7 +19,7 @@ namespace Spine.Implementations.SpineWrappers.V38.Attachments
public override BoundingBoxAttachment InnerObject => _o; public override BoundingBoxAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot38 st) if (slot is Slot38 st)
{ {

View File

@@ -3,11 +3,13 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V38;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime38; using SpineRuntime38;
using SpineRuntime38.Attachments; using SpineRuntime38.Attachments;
namespace Spine.Implementations.SpineWrappers.V38.Attachments namespace Spine.Implementations.V38.Attachments
{ {
internal sealed class ClippingAttachment38(ClippingAttachment innerObject) : internal sealed class ClippingAttachment38(ClippingAttachment innerObject) :
Attachment38(innerObject), Attachment38(innerObject),
@@ -17,7 +19,7 @@ namespace Spine.Implementations.SpineWrappers.V38.Attachments
public override ClippingAttachment InnerObject => _o; public override ClippingAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot38 st) if (slot is Slot38 st)
{ {

View File

@@ -3,11 +3,13 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V38;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime38; using SpineRuntime38;
using SpineRuntime38.Attachments; using SpineRuntime38.Attachments;
namespace Spine.Implementations.SpineWrappers.V38.Attachments namespace Spine.Implementations.V38.Attachments
{ {
internal sealed class MeshAttachment38(MeshAttachment innerObject) : internal sealed class MeshAttachment38(MeshAttachment innerObject) :
Attachment38(innerObject), Attachment38(innerObject),
@@ -17,7 +19,7 @@ namespace Spine.Implementations.SpineWrappers.V38.Attachments
public override MeshAttachment InnerObject => _o; public override MeshAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot38 st) if (slot is Slot38 st)
{ {

View File

@@ -3,11 +3,13 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V38;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime38; using SpineRuntime38;
using SpineRuntime38.Attachments; using SpineRuntime38.Attachments;
namespace Spine.Implementations.SpineWrappers.V38.Attachments namespace Spine.Implementations.V38.Attachments
{ {
internal sealed class PathAttachment38(PathAttachment innerObject) : internal sealed class PathAttachment38(PathAttachment innerObject) :
Attachment38(innerObject), Attachment38(innerObject),
@@ -17,7 +19,7 @@ namespace Spine.Implementations.SpineWrappers.V38.Attachments
public override PathAttachment InnerObject => _o; public override PathAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot38 st) if (slot is Slot38 st)
{ {

View File

@@ -3,11 +3,13 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V38;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime38; using SpineRuntime38;
using SpineRuntime38.Attachments; using SpineRuntime38.Attachments;
namespace Spine.Implementations.SpineWrappers.V38.Attachments namespace Spine.Implementations.V38.Attachments
{ {
internal sealed class PointAttachment38(PointAttachment innerObject) : internal sealed class PointAttachment38(PointAttachment innerObject) :
Attachment38(innerObject), Attachment38(innerObject),
@@ -17,7 +19,7 @@ namespace Spine.Implementations.SpineWrappers.V38.Attachments
public override PointAttachment InnerObject => _o; public override PointAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot38 st) if (slot is Slot38 st)
{ {

View File

@@ -3,11 +3,13 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers.Attachments; using Spine.Implementations.V38;
using Spine.Interfaces;
using Spine.Interfaces.Attachments;
using SpineRuntime38; using SpineRuntime38;
using SpineRuntime38.Attachments; using SpineRuntime38.Attachments;
namespace Spine.Implementations.SpineWrappers.V38.Attachments namespace Spine.Implementations.V38.Attachments
{ {
internal sealed class RegionAttachment38(RegionAttachment innerObject) : internal sealed class RegionAttachment38(RegionAttachment innerObject) :
Attachment38(innerObject), Attachment38(innerObject),
@@ -17,7 +19,7 @@ namespace Spine.Implementations.SpineWrappers.V38.Attachments
public override RegionAttachment InnerObject => _o; public override RegionAttachment InnerObject => _o;
public override int ComputeWorldVertices(Spine.SpineWrappers.ISlot slot, ref float[] worldVertices) public override int ComputeWorldVertices(ISlot slot, ref float[] worldVertices)
{ {
if (slot is Slot38 st) if (slot is Slot38 st)
{ {

View File

@@ -3,10 +3,10 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Spine.SpineWrappers; using Spine.Interfaces;
using SpineRuntime38; using SpineRuntime38;
namespace Spine.Implementations.SpineWrappers.V38 namespace Spine.Implementations.V38
{ {
internal sealed class Bone38(Bone innerObject, Bone38? parent = null) : IBone internal sealed class Bone38(Bone innerObject, Bone38? parent = null) : IBone
{ {

Some files were not shown because too many files have changed in this diff Show More