diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..9e7ec8a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,23 @@ +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 4 + +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[Makefile] +indent_style = tab + +[*.{yml,yaml}] +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false + +[*.{bat,cmd}] +charset = shift_jis +end_of_line = crlf diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 134c351..0000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,96 +0,0 @@ -name: CI - -on: - pull_request: - branches: - - main - -env: - GODOT_VERSION_4: 4.4 - GODOT_VERSION_3: 3.x - PYTHONIOENCODING: utf8 - -jobs: - godot: - name: ${{ matrix.name }} - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - include: - - name: Godot 4.x 🏁 Windows (x86_64, MSVC) - os: windows-latest - platform: windows - - - name: Godot 4.x 🍎 macOS (universal) - os: macos-latest - platform: macos - - defaults: - run: - shell: zsh {0} - - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - - name: clone Godot repository - uses: GuillaumeFalourd/clone-github-repo-action@v2.3 - with: - depth: 1 - branch: ${{ env.GODOT_VERSION_4 }} - owner: 'godotengine' - repository: 'godot' - - - name: setup for godot - uses: ./.github/actions/setup-godot - with: - platform: ${{ matrix.platform }} - - - name: build godot - if: matrix.platform == 'macos' - run: | - ./scripts/build.sh arch=universal compiledb=no strip=yes - - name: build godot - if: matrix.platform == 'windows' - shell: pwsh - run: | - .\scripts\build.ps1 compiledb=no strip=yes - - godot_v3: - name: ${{ matrix.name }} - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - include: - - name: Godot 3.x 🏁 Windows (x86_64, MSVC) - os: windows-latest - platform: windows - - - name: Godot 3.x 🍎 macOS (universal) - os: macos-latest - platform: macos - - steps: - - uses: actions/checkout@v4 - with: - submodules: 'recursive' - - name: clone Godot repository - uses: GuillaumeFalourd/clone-github-repo-action@v2.3 - with: - depth: 1 - branch: ${{ env.GODOT_VERSION_3 }} - owner: 'godotengine' - repository: 'godot' - - name: setup for godot - uses: ./.github/actions/setup-scons - - name: build godot - if: matrix.platform == 'macos' - run: | - ./scripts/build-v3.sh arch=universal compiledb=no strip=yes - - name: build godot - if: matrix.platform == 'windows' - shell: pwsh - run: | - .\scripts\build-v3.ps1 compiledb=no strip=yes diff --git a/.gitmodules b/.gitmodules index 9e0e81a..85df548 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ -[submodule "gd_spritestudio/SpriteStudio6-SDK"] - path = gd_spritestudio/SpriteStudio6-SDK - url = https://github.com/SpriteStudio/SpriteStudio6-SDK.git +[submodule "gd_spritestudio/SpriteStudio7-SDK"] + path = gd_spritestudio/SpriteStudio7-SDK + url = https://github.com/SpriteStudio/SpriteStudio7-SDK.git +[submodule "gd_spritestudio/flatbuffers"] + path = gd_spritestudio/flatbuffers + url = https://github.com/google/flatbuffers.git diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..9637c39 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,79 @@ +# SpriteStudioPlayer for Godot + +## Minimal operating rules + +* Keep changes scoped to the requested task. +* Do not commit unless the user explicitly asks. +* Before editing, read files in full, especially if the read tool truncates them. +* Follow existing code style in touched files (naming, type usage, control flow, and error handling patterns). + +## Project Overview +**SSPlayerForGodot** is a Godot Engine integration for [SpriteStudio](https://github.com/SpriteStudio), a 2D animation tool. +This project provides both a Godot GDExtension and the ability to build a custom Godot engine module to load and play SpriteStudio animations within Godot 4. + +**Key Technologies:** +- **C++:** Core plugin logic. +- **Godot 4:** Target engine for the plugin. +- **FlatBuffers:** Used for serialization and data exchange (found in `gd_spritestudio/flatbuffers/`). +- **SCons:** Build system used for compiling the C++ code (via `SConstruct`). +- **Shell / PowerShell:** Cross-platform scripts used for building and releasing. + +## Directory Overview +- `gd_spritestudio/`: The main C++ source code for the Godot extension. Contains Godot node bindings (e.g., `gd_ssplayer_node2d.cpp`), import plugins, and FlatBuffer parsers. +- `scripts/`: Build, generate, and release scripts for various platforms (Windows, macOS, Linux, iOS, Android, Web). +- `examples/`: Sample Godot projects demonstrating how to use the plugin (e.g., `feature_test`, `feature_test_gdextension`, `mesh_bone`, `particle_effect`, `new`, `new_gdextension`). +- `misc/`: Property list files and other miscellaneous configuration files for platform-specific builds. + +## Building and Running + +The project relies on SCons and requires the Godot development environment to be set up. Scripts are provided to simplify the build process. + +### 1. Initial Setup +Ensure that the repository's native submodules (`flatbuffers`, `SpriteStudio7-SDK`) are initialized: +```bash +git submodule update --init --recursive +``` +Additionally, the `godot` and `godot-cpp` repositories are not included in this repository and must be cloned manually as follows (refer to `README.md` for details): +```bash +# Inside the SSPlayerForGodot directory +git clone https://github.com/godotengine/godot.git -b 4.6 +git clone https://github.com/godotengine/godot-cpp.git -b 4.5 +``` + +### 2. Building a Custom Godot Engine +During development, you can use the `build.*` scripts. This compiles SpriteStudio directly into the Godot engine. +- **Linux / macOS:** + ```bash + ./scripts/build.sh + ``` +- **Windows:** + ```powershell + .\scripts\build.ps1 + ``` + +### 3. Building the GDExtension +If you prefer to build the project as a standalone GDExtension plugin: +- **Linux / macOS:** + ```bash + ./scripts/build-extension.sh + ``` +- **Windows:** + ```powershell + .\scripts\build-extension.ps1 + ``` + +### 4. Building the SS Runtime +You may also need to build the `ssruntime` binary for your platform: +- **Linux / macOS:** + ```bash + ./scripts/build-runtime.sh + ``` +- **Windows:** + ```powershell + .\scripts\build-runtime.ps1 + ``` + +## Development Conventions +- **C++ Standards:** The extension relies on standard Godot extension practices. +- **Platform Specifics:** SCons handles platform-specific flags. Noticeable configuration exists for iOS (`-miphoneos-version-min=12.0`), macOS (`-framework CoreFoundation`), and Windows. +- **External Dependencies:** Ensure `godot` and `godot-cpp` are correctly cloned into the root directory before running build scripts. diff --git a/BUILD.ja.md b/BUILD.ja.md deleted file mode 100644 index 235c7a0..0000000 --- a/BUILD.ja.md +++ /dev/null @@ -1,333 +0,0 @@ -[**日本語**](./BUILD.ja.md) | [**English**](./BUILD.md) - -# ゜ヌス取埗 - -本リポゞトリをクロヌンしお、 `SSPlayerForGodot` ディレクトリ内に入っおください。 - -```bash -git clone --recursive https://github.com/SpriteStudio/SSPlayerForGodot.git -cd SSPlayerForGodot -``` - -SSPlayerForGodot ディレクトリから以䞋のコマンドを実行し、 Godot を取埗したす。 - -```bash -git clone https://github.com/godotengine/godot.git -``` - -gdextension をビルドする堎合は godot-cpp を取埗したす。 - -```bash -git clone https://github.com/godotengine/godot-cpp.git -``` - -# ブランチ遞択 - -## Godot -SSPlayerForGodot ディレクトリの `godot` ディレクトリ内でビルドする Godot Engine のブランチを遞択しおください。 - -### 4 - -```bash -pushd godot -git checkout 4.4 -popd -``` - -### 3.x - -```bash -pushd godot -git checkout 3.x -popd -``` - -## GDExtension - -gdextension をビルドする堎合は `godot-cpp` ディレクトリで察照する Godot Engine バヌゞョンず同じブランチ名を遞択しおください。 - - -```bash -pushd godot-cpp -git checkout 4.4 -popd -``` - -# ビルド環境のセットアップ - -以降でビルド環境の構築手順に぀いお説明しおいきたす。 - -## Windows - -[Godot公匏のコンパむル手順](https://docs.godotengine.org/en/stable/contributing/development/compiling/compiling_for_windows.html) - -必芁なツヌル -* ビルドツヌル (いずれかを遞択) - * VisualStudio 2019(掚奚) or 2022 - * MSYS2 + MinGW + gcc + make -* Python 3.6 以降 -* scons 3.0 以降 - -VisualStudio 2019 でのビルド・デバッグを確認しおいたす。 - -scons は䞋蚘でむンストヌルできたす。(䞊蚘リンクにも蚘茉あり) - -```bat -python -m pip install scons -``` - -## macOS - -[Godot公匏のコンパむル手順](https://docs.godotengine.org/ja/4.x/contributing/development/compiling/compiling_for_macos.html) - -必芁なツヌル -* Xcode -* Python 3.6 以降 -* scons 3.0 以降 -* Vulkan SDK for MoltenVK (4 察応甚) -* emscripten (optional) -* Android SDK / Android NDK (optional) - -Xcode 以倖は [Homebrew](https://brew.sh/) でむンストヌルができたす。 - -```sh -brew install python3 scons -``` - -```sh -brew install molten-vk -``` - -ホストアヌキテクチャずは異なるアヌキテクチャの Godot Engine をビルドする堎合や Universal Binary 察応 Godot Engine をビルドする堎合は `molten-vk` の代わりに Universal Binary 察応しおいる [Vulkan SDK for MoltenVK](https://vulkan.lunarg.com/sdk/home) をむンストヌルしおください。 - -(Optional) target を Web のビルドをする際は emscripten をむンストヌルしおください。 - -```sh -brew install emscripten -``` - -(Optional) target を Android のビルドをする際は Android NDK をむンストヌルしおください。 - - -## Linux - -T.B.D - -# ビルド - -## Windows - -### 4 - -[build.ps1](./scripts/build.ps1) でビルド可胜です。 - - -成果物は `godot\bin` に栌玍されたす。 - -**PowerShell** - -```powershell -$env:PYTHONUTF8=1 -.\scripts\build.ps1 -``` - -**Cmd** - -```cmd -set PYTHONUTF8=1 -PowerShell.exe -ExecutionPolicy Bypass -File .\scripts\build.ps1 -``` - -### 3.x - -[build-v3.ps1](./scripts/build-v3.ps1) でビルド可胜です。 -成果物は `godot\bin` に栌玍されたす。 - -**PowerShell** - -```powershell -$env:PYTHONUTF8=1 -.\scripts\build-v3.ps1 -``` - -**Cmd** - -```cmd -set PYTHONUTF8=1 -PowerShell.exe -ExecutionPolicy Bypass -File .\scripts\build-v3.ps1 -``` - -## macOS ビルド - -### 4 - -[build.sh](./scripts/build.sh) でビルド可胜です。 -成果物は `godot/bin` に栌玍されたす。 - -```sh -./scripts/build.sh -``` - -匕数を指定しない堎合はホストマシンのアヌキテクチャず同じアヌキテクチャ向けにビルドしたす。 -アヌキテクチャを明瀺的に指定する堎合は `arch=` に匕数を远加しおください。 - -**Universal Binary (supports both arm64 and x86_64)** - -```sh -./scripts/build.sh arch=universal -``` - -**arm64 (Apple Silicon)** - -```sh -./scripts/build.sh arch=arm64 -``` - -**x86_64 (Intel)** - -```sh -./scripts/build.sh arch=x86_64 -``` - -`godot/Godot.app` を開いお起動を確認したす。 - -### 3.x - -[build-v3.sh](./scripts/build-v3.sh) でビルド可胜です。 -成果物は `godot/bin` に栌玍されたす。 - -```sh -./scripts/build-v3.sh -``` - -匕数を指定しない堎合はホストマシンのアヌキテクチャず同じアヌキテクチャ向けにビルドしたす。 -アヌキテクチャを明瀺的に指定する堎合は `arch=` に匕数を远加しおください。 - -**Universal Binary (supports both arm64 and x86_64)** - -```sh -./scripts/build-v3.sh arch=universal -``` - -**arm64 (Apple Silicon)** - -```sh -./scripts/build-v3.sh arch=arm64 -``` - -**x86_64 (Intel)** - -```sh -./scripts/build-v3.sh arch=x86_64 -``` - -`godot/Godot.app` を開いお起動を確認したす。 - - -# GDExtension - -## Windows - -[build-extension.ps1](./scripts/build-extension.ps1) でビルド可胜です。 -成果物は `bin` ディレクトリに栌玍されたす。 - - -**PowerShell** - -```powershell -$env:PYTHONUTF8=1 -.\scripts\build-extension.ps1 -``` - -**Cmd** - -```cmd -set PYTHONUTF8=1 -PowerShell.exe -ExecutionPolicy Bypass -File .\scripts\build-extension.ps1 -``` - -## macOS, linux, iOS, Android, Web ビルド - -macOS か Linux で実行しおください。 - -[build-extension.sh](./scripts/build-extension.sh) でビルド可胜です。 -成果物は `bin` ディレクトリに栌玍されたす。 - -```sh -./scripts/build-extension.sh -``` - - -# リリヌスビルド - -## 4 - -各プラットフォヌムの godot の `editor`, `template_debug`, `template_release` をたずめおビルドスクリプトは䞋蚘の通りです。 - -windows -``` -.\scripts\release-windows.ps1 -``` - -macOS -```sh -./scripts/release-macos.sh -``` - -Linux -```sh -./scripts/release-linux.sh -``` - -iOS -```sh -./scripts/release-ios.sh -``` - -Android -```sh -./scripts/release-android.sh -``` - -Web -```sh -./scripts/release-web.sh -``` - -## GDExtension - -各プラットフォヌムの gdextension の `editor`, `template_debug`, `template_release` をたずめおビルドスクリプトは䞋蚘の通りです。 - -windows -``` -.\scripts\release-gdextension-windows.ps1 -``` - -macOS -```sh -./scripts/release-gdextension-macos.sh -``` - -Linux -```sh -./scripts/release-gdextension-linux.sh -``` - -iOS -```sh -./scripts/release-gdextension-ios.sh -``` - -Android -```sh -./scripts/release-gdextension-android.sh -``` - -Web -```sh -./scripts/release-gdextension-web.sh -``` - -## 3.x - -... \ No newline at end of file diff --git a/BUILD.md b/BUILD.md deleted file mode 100644 index 2c1f672..0000000 --- a/BUILD.md +++ /dev/null @@ -1,340 +0,0 @@ -[**日本語**](./BUILD.ja.md) | [**English**](./BUILD.md) - -# Source Retrieval - -Clone this repository and place it inside a directory named `SSPlayerForGodot`. - -```bash -git clone --recursive https://github.com/SpriteStudio/SSPlayerForGodot.git -cd SSPlayerForGodot -``` - -From the SSPlayerForGodot directory, run the following command to obtain Godot: - -```bash -git clone https://github.com/godotengine/godot.git -``` - -If you will build the GDExtension, retrieve `godot-cpp` as well: - -```bash -git clone https://github.com/godotengine/godot-cpp.git -``` - -# Selecting Branches - -## Godot - -In the `godot` directory under SSPlayerForGodot, select the branch of the Godot Engine you want to build. - -### 4 - -```bash -pushd godot -git checkout 4.4 -popd -``` - -### 3.x - -```bash -pushd godot -git checkout 3.x -popd -``` - -## GDExtension - -When building a GDExtension, select the same branch name in the `godot-cpp` directory that matches the Godot Engine version. - -```bash -pushd godot-cpp -git checkout 4.4 -popd -``` - -# Setting Up the Build Environment - -The following describes the setup steps for each platform. - -## Windows - -[Godot official compilation instructions](https://docs.godotengine.org/en/stable/contributing/development/compiling/compiling_for_windows.html) - -Required tools: - -* Build tools (choose one): - * Visual Studio 2019 (recommended) or Visual Studio 2022 - * MSYS2 + MinGW + gcc + make -* Python 3.6 or later -* scons 3.0 or later - -Build/debug has been verified with Visual Studio 2019. - -You can install scons using the following command (also listed in the official documentation): - -```bat -python -m pip install scons -``` - -## macOS - -[Godot official compilation instructions](https://docs.godotengine.org/ja/4.x/contributing/development/compiling/compiling_for_macos.html) - -Required tools: - -* Xcode -* Python 3.6 or later -* scons 3.0 or later -* Vulkan SDK for MoltenVK (required for Godot 4) -* emscripten (optional) -* Android SDK / Android NDK (optional) - -Except for Xcode, you can install the necessary tools with [Homebrew](https://brew.sh/): - -```sh -brew install python3 scons -``` - -```sh -brew install molten-vk -``` - -When building Godot Engine for an architecture different from the host, or for Universal Binary support, install the Universal Binary–compatible version of the [Vulkan SDK for MoltenVK](https://vulkan.lunarg.com/sdk/home) instead of `molten-vk` from Homebrew. - -(Optional) When building for Web targets, install emscripten: - -```sh -brew install emscripten -``` - -(Optional) When building for Android targets, install the Android NDK. - -## Linux - -T.B.D. - -# Build - -## Windows - -### 4 - -You can build using [build.ps1](./scripts/build.ps1). -Outputs are stored in `godot\bin`. - -**PowerShell** - -```powershell -$env:PYTHONUTF8=1 -.\scripts\build.ps1 -``` - -**Cmd** - -```cmd -set PYTHONUTF8=1 -PowerShell.exe -ExecutionPolicy Bypass -File .\scripts\build.ps1 -``` - -### 3.x - -You can build using [build-v3.ps1](./scripts/build-v3.ps1). -Outputs are stored in `godot\bin`. - -**PowerShell** - -```powershell -$env:PYTHONUTF8=1 -.\scripts\build-v3.ps1 -``` - -**Cmd** - -```cmd -set PYTHONUTF8=1 -PowerShell.exe -ExecutionPolicy Bypass -File .\scripts\build-v3.ps1 -``` - -## macOS Build - -### 4 - -You can build using [build.sh](./scripts/build.sh). -Outputs are stored in `godot/bin`. - -```sh -./scripts/build.sh -``` - -If no architecture argument is provided, the build will target the same architecture as the host machine. -To explicitly specify an architecture, add an argument to `arch=`. - -**Universal Binary (supports both arm64 and x86_64)** - -```sh -./scripts/build.sh arch=universal -``` - -**arm64 (Apple Silicon)** - -```sh -./scripts/build.sh arch=arm64 -``` - -**x86_64 (Intel)** - -```sh -./scripts/build.sh arch=x86_64 -``` - -Open `godot/Godot.app` to verify the build runs. - -### 3.x - -You can build using [build-v3.sh](./scripts/build-v3.sh). -Outputs are stored in `godot/bin`. - -```sh -./scripts/build-v3.sh -``` - -If no architecture argument is provided, the build will target the same architecture as the host machine. -To explicitly specify an architecture, add an argument to `arch=`. - -**Universal Binary (supports both arm64 and x86_64)** - -```sh -./scripts/build-v3.sh arch=universal -``` - -**arm64 (Apple Silicon)** - -```sh -./scripts/build-v3.sh arch=arm64 -``` - -**x86_64 (Intel)** - -```sh -./scripts/build-v3.sh arch=x86_64 -``` - -Open `godot/Godot.app` to verify it launches properly. - -# GDExtension - -## Windows - -You can build using [build-extension.ps1](./scripts/build-extension.ps1). -Outputs are placed in the `bin` directory. - -**PowerShell** - -```powershell -$env:PYTHONUTF8=1 -.\scripts\build-extension.ps1 -``` - -**Cmd** - -```cmd -set PYTHONUTF8=1 -PowerShell.exe -ExecutionPolicy Bypass -File .\scripts\build-extension.ps1 -``` - -## macOS, Linux, iOS, Android, Web Builds - -Run on macOS or Linux. -You can build using [build-extension.sh](./scripts/build-extension.sh). -Outputs are stored in the `bin` directory. - -```sh -./scripts/build-extension.sh -``` - -# Release Build - -## 4 - -Below are the scripts that build all Godot platform binaries (`editor`, `template_debug`, `template_release`). - -Windows - -``` -.\scripts\release-windows.ps1 -``` - -macOS - -```sh -./scripts/release-macos.sh -``` - -Linux - -```sh -./scripts/release-linux.sh -``` - -iOS - -```sh -./scripts/release-ios.sh -``` - -Android - -```sh -./scripts/release-android.sh -``` - -Web - -```sh -./scripts/release-web.sh -``` - -## GDExtension - -Below are the scripts that build all GDExtension platform binaries (`editor`, `template_debug`, `template_release`). - -Windows - -``` -.\scripts\release-gdextension-windows.ps1 -``` - -macOS - -```sh -./scripts/release-gdextension-macos.sh -``` - -Linux - -```sh -./scripts/release-gdextension-linux.sh -``` - -iOS - -```sh -./scripts/release-gdextension-ios.sh -``` - -Android - -```sh -./scripts/release-gdextension-android.sh -``` - -Web - -```sh -./scripts/release-gdextension-web.sh -``` - -## 3.x - -... \ No newline at end of file diff --git a/README.ja.md b/README.ja.md deleted file mode 100644 index 0a1af44..0000000 --- a/README.ja.md +++ /dev/null @@ -1,85 +0,0 @@ -[**日本語**](./README.ja.md) | [**English**](./README.md) - -# SpriteStudioPlayer for Godot - -# はじめに - -本プラグむンは [OPTPiX SpriteStudio](https://www.webtech.co.jp/spritestudio/index.html) で䜜成したアニメヌションを [Godot Engine](https://godotengine.org/) 䞊で再生するためのプラグむンです。 - -実行時パフォヌマンスを優先するため C++ モゞュヌルの圢態になっおいたす。 -SpriteStudioPlayer for Godot を利甚する堎合、SpriteStudioPlayer の[カスタムモゞュヌル](https://docs.godotengine.org/en/stable/contributing/development/core_and_modules/custom_modules_in_cpp.html) を組み蟌んだ Godot Engine の Editor を手元でビルドするか、 SpriteStudioPlayer の [GDExtension](https://docs.godotengine.org/en/stable/tutorials/scripting/gdextension/what_is_gdextension.html) をプロゞェクトぞ入れる必芁がありたす。 - -## 察応する [OPTPiX SpriteStudio](https://www.webtech.co.jp/spritestudio/index.html) のバヌゞョン - -Ver.6 ず Ver.7 に察応しおいたす。 -ただし、Ver.7.1 で远加された新機胜(テキスト、サりンド等)には未察応です。 - -## 察応する [Godot Engine](https://github.com/godotengine/godot) のバヌゞョン - -- [4.5 ブランチ](https://github.com/godotengine/godot/tree/4.5)で Windows / macOS でビルド、および実行を確認しおいたす。 -- [3.x ブランチ](https://github.com/godotengine/godot/tree/3.x)で Windows / macOS でビルド、および実行を確認しおいたす。 - -# ビルド - -[BUILD.md](BUILD.md) を参照しおください。 - -# 䜿い方 - -[USAGE.md](USAGE.md) を参照しおください。 - -# サンプル - -[examples フォルダ](./examples/)にサンプルプロゞェクトがありたす。 - -**サンプルプロゞェクトは 3.x 向けに䜜っおいるため、4.4 で利甚する際は "Convert Full Project" を実行しおから利甚しおください。** - -## [feature_test](./examples/feature_test) - -基本機胜のテストプロゞェクトです。 -以䞋のシヌンがありたす。 - -- [v6_feature.tscn](./examples/feature_test/v6_feature.tscn) - - SpriteStudio v6.0~v7.0 たでの各機胜の再生状態を確認できたす。 - - 確認したい機胜ノヌドの可芖性を有効にしおください。 - - Signal、UserData はそれぞれシグナル、ナヌザヌデヌタのキヌに到達したタむミングでGodotのシグナルを発行するようになっおいたす。 - - シヌンを実行するずコン゜ヌルに受信したパラメヌタが出力されたす。 - - ssdata サブフォルダにむンポヌト元のプロゞェクトファむル(v6_all.sspj)がありたす。 -- [sspj_load.tscn](./examples/feature_test/sspj_load.tscn) - - GDスクリプトからSSプロゞェクトをロヌドしアニメヌションを指定しお再生するサンプルです。 - - アニメヌション終了時に別のSSプロゞェクトに読み替えるようになっおいたす。 -- [texture_change.tscn](./examples/feature_test/texture_change.tscn) - - 再生䞭にセルマップリ゜ヌスのテクスチャを倉曎するサンプルです。 - - むンスペクタにある Change のチェックをOn/Offするず切り替わりたす。 - -## [mesh_bone](./examples/mesh_bone) - -メッシュ、ボヌン、゚フェクトなどを利甚したキャラクタヌアニメのサンプルです。 - -## [particle_effect](./examples/particle_effect) - -゚フェクト機胜を利甚したサンプルです。 -シヌンに衚瀺されるアニメヌションは40皮類のうちの䞀郚になりたす。 -むンスペクタの Anime Pack からその他のアニメヌションも確認できたす。 - -## [feature_test_gdextension](./examples/feature_test_gdextension) - -gdextension の動䜜確認甚プロゞェクトです。 - -確認できるサンプルは [feature_test](./examples/feature_test) ず同じものになりたす。 - -# お問い合わせ - -ご質問、ご芁望、䞍具合のご報告は [Issues](../../issues) に投皿しおください。 -非公開でのお問い合わせを垌望される堎合は、[ヘルプセンタヌ](https://www.webtech.co.jp/help/ja/spritestudio7/inquiries/ssplayer_tool/) よりお寄せください。 -再珟デヌタなどの送付が必芁な堎合も、䞊蚘ヘルプセンタヌ経由でファむルを送信しおください。 - -========================================================= - -株匏䌚瀟・ミドルりェア -​https://www.cri-mw.co.jp/ -Copyright © CRI Middleware Co., Ltd. - -========================================================= - -* SpriteStudio, Web Technologyは、株匏䌚瀟りェブテクノロゞの登録商暙です。 -* その他の商品名は各瀟の登録商暙たたは商暙です。 diff --git a/README.md b/README.md index 35f0f6e..2e09092 100644 --- a/README.md +++ b/README.md @@ -2,95 +2,69 @@ # SpriteStudioPlayer for Godot -## Introduction +**The branch is in experimental and unstable phase.** -This plugin enables playback of animations created with -[OPTPiX SpriteStudio](https://www.webtech.co.jp/spritestudio/index.html) -within the [Godot Engine](https://godotengine.org/). +**No guarantee, No support and can't reply any requests and any bug reports regarding the branch.** -To prioritize runtime performance, the plugin is implemented as a C++ module. +# For Player Develoeprs -To use SpriteStudioPlayer for Godot, you must either: +## prepare development environment of Godot +Reference the official documents -- Build the Godot Engine editor with the SpriteStudioPlayer [custom module](https://docs.godotengine.org/en/stable/contributing/development/core_and_modules/custom_modules_in_cpp.html), **or** -- Add the SpriteStudioPlayer [GDExtension](https://docs.godotengine.org/en/stable/tutorials/scripting/gdextension/what_is_gdextension.html) to your project. +- windows + - https://docs.godotengine.org/en/stable/engine_details/development/compiling/compiling_for_windows.html +- macOS + - https://docs.godotengine.org/en/stable/engine_details/development/compiling/compiling_for_macos.html -## Supported Versions of OPTPiX SpriteStudio +## clone repositories -Supports SpriteStudio **Ver.6** and **Ver.7**. -*Note: New features added in Ver. 7.1 (text, sound, etc.) are not supported.* +```bash +git clone --recursive git@github.com:SpriteStudio/SSPlayerForGodot.git -## Supported Versions of Godot Engine +cd SSPlayerForGodot +git clone https://github.com/godotengine/godot.git -b 4.6 +git clone https://github.com/godotengine/godot-cpp.git -b 4.5 +``` -- [4.5 branch](https://github.com/godotengine/godot/tree/4.5): - Verified build and execution on Windows / macOS -- [3.x branch](https://github.com/godotengine/godot/tree/3.x): - Verified build and execution on Windows / macOS +## get libssruntime binaries -## Build +- get sdk binary file collections from SS7-SDK Release pase +- build a runtime by yourself. -See **[BUILD.md](BUILD.md)**. -## Usage +## build custom godot or gdextension +### gdextension -See **[USAGE.md](USAGE.md)**. +```bash +./scripts/build-extension.sh +``` +or +```pwsh +.\scripts\build-extension.ps1 +``` -## Samples +### custom godot -Sample projects are available in the **[examples folder](./examples/)**. +```bash +./scripts/build.sh +``` +or +```pwsh +.\scripts\build.ps1 +``` -**Note:** -These samples were created for **Godot 3.x**. -For use with **Godot 4.4**, please run **“Convert Full Project”** first. +# For SDK Developers +## prepare development environment of SpriteStudio7-SDK +Reference [For Develoeprs of SpriteStudio7-SDK](https://github.com/SpriteStudio/SpriteStudio7-SDK?tab=readme-ov-file#for-sdk-developers) and prepare development environment of SpriteStudio7-SDK. -### [feature_test](./examples/feature_test) -Basic functional test project with the following scenes: +## build and deploy libssruntime +Build ssruntime binary for your platform and archtecture and deploy the binary to [the runtime directory](./gd_spritestudio/runtime) -- **v6_feature.tscn** - - Verify features supported from SpriteStudio v6.0 to v7.0 - - Enable visibility of nodes you want to inspect - - `Signal` & `UserData` trigger Godot signals when reaching their keys - - Parameters appear in the console - - Original project (`v6_all.sspj`) is located under `ssdata/` - -- **sspj_load.tscn** - - Loads SS projects via GDScript and plays selected animations - - Automatically switches to another SS project when playback finishes - -- **texture_change.tscn** - - Demonstrates dynamic texture replacement - - Toggle “Change” in Inspector to switch textures - -### [mesh_bone](./examples/mesh_bone) - -Sample using mesh, bone, and effect features for character animation. - -### [particle_effect](./examples/particle_effect) - -Sample demonstrating effect animation features. -Displays one of 40 possible animations. -More animations can be tested through the Anime Pack. - -### [feature_test_gdextension](./examples/feature_test_gdextension) - -Test project for GDExtension operation. -Provides the same samples as `feature_test`. - -## Contact - -For questions, feature requests, or bug reports, please post to **[Issues](../../issues)**. - -For private inquiries, contact us via the -[Help Center](https://www.webtech.co.jp/help/ja/spritestudio7/inquiries/ssplayer_tool/). - -========================================================= - -CRI Middleware Co., Ltd. -https://www.cri-mw.co.jp/ -Copyright © CRI Middleware Co., Ltd. - -========================================================= - -* SpriteStudio and Web Technology are registered trademarks of Web Technology Corp. -* Other product names are registered trademarks or trademarks of their respective companies. +```bash +./scripts/build-runtime.sh +``` +or +```pwsh +.\scripts\build-runtime.ps1 +``` diff --git a/SConstruct b/SConstruct index eb74adb..f9d4fae 100644 --- a/SConstruct +++ b/SConstruct @@ -3,18 +3,19 @@ import os import sys import subprocess +# --- Configuration & Constants --- +LIB_NAME = "SSGodot" +DEFAULT_PROJECT_DIR = os.path.join("examples", "new_gdextension") + +# --- Helper Functions --- def normalize_path(val, env): return val if os.path.isabs(val) else os.path.join(env.Dir("#").abspath, val) - def validate_parent_dir(key, val, env): if not os.path.isdir(normalize_path(os.path.dirname(val), env)): raise UserError("'%s' is not a directory: %s" % (key, os.path.dirname(val))) - -libname = "SSGodot" -projectdir = os.path.join("examples", "feature_test_gdextension") - +# --- Environment Setup --- localEnv = Environment(tools=["default"], PLATFORM="") customs = ["custom.py"] @@ -36,6 +37,13 @@ opts.Add( validator=validate_parent_dir, ) ) +opts.Add( + PathVariable( + key="target_path", + help="Path to the Godot project where the extension will be installed", + default=DEFAULT_PROJECT_DIR, + ) +) opts.Update(localEnv) Help(opts.GenerateHelpText(localEnv)) @@ -43,17 +51,18 @@ Help(opts.GenerateHelpText(localEnv)) env = localEnv.Clone() env["compiledb"] = False +# --- Compilation Database --- env.Tool("compilation_db") compilation_db = env.CompilationDatabase( normalize_path(localEnv["compiledb_file"], localEnv) ) env.Alias("compiledb", compilation_db) +# --- Submodule Validation --- submodule_initialized = False dir_name = 'godot-cpp' -if os.path.isdir(dir_name): - if os.listdir(dir_name): - submodule_initialized = True +if os.path.isdir(dir_name) and os.listdir(dir_name): + submodule_initialized = True if not submodule_initialized: print("""godot-cpp is not available within this folder, as Git submodules haven't been initialized. @@ -62,92 +71,126 @@ Run the following command to download godot-cpp: git submodule update --init --recursive""") sys.exit(1) +# --- Initialize godot-cpp --- env = SConscript("godot-cpp/SConstruct", {"env": env, "customs": customs}) +# --- Source Files --- +# Extension sources +sources = Glob("gd_spritestudio/*.cpp") + +# FlatBuffers sources +fb_src_dir = "gd_spritestudio/flatbuffers/src" +fb_sources = [ + "idl_parser.cpp", + "idl_gen_text.cpp", + "reflection.cpp", + "util.cpp", +] +sources.extend([os.path.join(fb_src_dir, f) for f in fb_sources]) + +# --- Compilation Flags & Includes --- env.Append(CPPDEFINES = "SPRITESTUDIO_GODOT_EXTENSION") -env.Append(CPPDEFINES = "_NOTUSE_STBI") -env.Append(CPPDEFINES = "_NOTUSE_TEXTURE_FULLPATH") -env.Append(CPPDEFINES = "_NOTUSE_EXCEPTION") -env.Append(CPPPATH=["src/"]) env.Append( - CPPPATH=[ - "gd_spritestudio/SpriteStudio6-SDK/Common/Loader", - "gd_spritestudio/SpriteStudio6-SDK/Common/Animator", - "gd_spritestudio/SpriteStudio6-SDK/Common/Helper", - ] + CPPPATH=[ + "gd_spritestudio/flatbuffers/src", + "gd_spritestudio/flatbuffers/include", + "gd_spritestudio/runtime", + ] ) -if env["platform"] == 'macos': - env.Append(LINKFLAGS=["-framework", "CoreFoundation"]) +# --- Libraries & Library Paths --- +extension_path = env.Dir('.').abspath +platform = env['platform'] +arch = env['arch'] -# Set iOS minimum deployment target -if env["platform"] == "ios": - env.Append(CCFLAGS=["-miphoneos-version-min=12.0"]) - env.Append(LINKFLAGS=["-miphoneos-version-min=12.0"]) +if platform == 'macos': + runtime_libpath = os.path.join(extension_path, "gd_spritestudio", "runtime", "libs", platform) +else: + runtime_libpath = os.path.join(extension_path, "gd_spritestudio", "runtime", "libs", platform, arch) -sources = Glob("gd_spritestudio/*.cpp") -sources.extend(Glob("gd_spritestudio/SpriteStudio6-SDK/Common/Loader/tinyxml2/*.cpp")) -sources.extend(Glob("gd_spritestudio/SpriteStudio6-SDK/Common/Loader/*.cpp")) -sources.extend(Glob("gd_spritestudio/SpriteStudio6-SDK/Common/Animator/*.cpp")) -sources.extend(Glob("gd_spritestudio/SpriteStudio6-SDK/Common/Helper/DebugPrint.cpp")) -sources.extend(Glob("gd_spritestudio/SpriteStudio6-SDK/Common/Helper/IsshTexture.cpp")) -sources.extend(Glob("gd_spritestudio/SpriteStudio6-SDK/Common/Helper/stb_image.c")) +env.Append(LIBPATH=[runtime_libpath]) + +if env['target'] == 'editor': + env.Append(LIBS=["ssconverter"]) + if platform == "windows": + env.Append(LINKFLAGS=["Userenv.lib", "Bcrypt.lib", "Ntdll.lib", "Ws2_32.lib"]) +env.Append(LIBS=["ssruntime"]) + +# Platform specific frameworks +if platform == 'macos': + env.Append(LINKFLAGS=["-framework", "CoreFoundation", "-framework", "CoreServices"]) + +if platform == "ios": + ios_flags = ["-miphoneos-version-min=12.0"] + env.Append(CCFLAGS=ios_flags) + env.Append(LINKFLAGS=ios_flags) + +# --- DocData Generation --- if env["target"] in ["editor", "template_debug"]: try: - doc_data = env.GodotCPPDocData("src/gen/doc_data.gen.cpp", source=Glob("doc_classes/*.xml")) + # Output to gd_spritestudio/gen instead of src/gen + doc_data = env.GodotCPPDocData("gd_spritestudio/gen/doc_data.gen.cpp", source=Glob("doc_classes/*.xml")) sources.append(doc_data) except AttributeError: print("Not including class reference as we're targeting a pre-4.3 baseline.") -file = "lib{}{}{}".format(libname, env["suffix"], env["SHLIBSUFFIX"]) -filepath = "" +# --- Shared Library Target --- +target_suffix = env["suffix"] +lib_suffix = env["SHLIBSUFFIX"] +file_name = "lib{}{}{}".format(LIB_NAME, target_suffix, lib_suffix) +framework_path = "" -if env["platform"] == "macos" or env["platform"] == "ios": - filepath = "lib{}.{}.{}.framework/".format(libname, env["platform"], env["target"]) - file = "lib{}.{}.{}".format(libname, env["platform"], env["target"]) - env.Append(LINKFLAGS=["-Wl,-install_name,@rpath/{}{}".format(filepath, file)]) +if platform in ["macos", "ios"]: + framework_path = "lib{}.{}.{}.framework/".format(LIB_NAME, platform, env["target"]) + file_name = "lib{}.{}.{}".format(LIB_NAME, platform, env["target"]) + env.Append(LINKFLAGS=["-Wl,-install_name,@rpath/{}{}".format(framework_path, file_name)]) -libraryfile = "bin/{}/{}{}".format(env["platform"], filepath, file) -library = env.SharedLibrary( - libraryfile, - source=sources, -) +library_output = "bin/{}/{}{}".format(platform, framework_path, file_name) +library = env.SharedLibrary(library_output, source=sources) + +# --- macOS / iOS Framework Bundles --- +plist_target = None +if platform in ["macos", "ios"]: + try: + git_branch = subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD']).decode('utf-8').strip() + version = git_branch.split('-')[0] + '.0' + except: + version = "1.0.0" -if env["platform"] == "macos" or env["platform"] == "ios": plist_subst = { - "${BUNDLE_LIBRARY}": file, + "${BUNDLE_LIBRARY}": file_name, "${BUNDLE_NAME}": "ssplayer-godot", "${BUNDLE_IDENTIFIER}": "jp.co.cri-mw.spritestudio.ssplayer-godot.{}".format(env["target"]), - "${BUNDLE_VERSION}": subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD']).decode('utf-8').strip().split('-')[0] + '.0', + "${BUNDLE_VERSION}": version, "${MIN_MACOS_VERSION}": "10.12", "${MIN_IOS_VERSION}": "12.0" } - if env["platform"] == "macos": - plist_file = "bin/macos/{}Resources/Info.plist".format(filepath) - plist = env.Substfile( - target=plist_file, - source="misc/Info.macos.plist", - SUBST_DICT=plist_subst - ) - elif env["platform"] == "ios": - plist_file = "bin/ios/{}Info.plist".format(filepath) - plist = env.Substfile( - target=plist_file, - source="misc/Info.ios.plist", - SUBST_DICT=plist_subst - ) - - env.Depends(library, plist) - -copy = env.InstallAs("{}/{}".format(projectdir, libraryfile), library) -default_args = [library, copy] - -if env["platform"] == "macos" or env["platform"] == "ios": - copy_plist = env.InstallAs("{}/{}".format(projectdir, plist_file), plist_file) - default_args.append(copy_plist) + if platform == "macos": + plist_src = "misc/Info.macos.plist" + plist_file = "bin/macos/{}Resources/Info.plist".format(framework_path) + else: # ios + plist_src = "misc/Info.ios.plist" + plist_file = "bin/ios/{}Info.plist".format(framework_path) + + plist_target = env.Substfile(target=plist_file, source=plist_src, SUBST_DICT=plist_subst) + env.Depends(library, plist_target) + +# --- Installation & Default Target --- +project_dir = env["target_path"] +install_targets = [library] + +# Copy library to project +copy_lib = env.InstallAs("{}/{}".format(project_dir, library_output), library) +install_targets.append(copy_lib) + +# Copy Plist if applicable +if plist_target: + copy_plist = env.InstallAs("{}/{}".format(project_dir, plist_file), plist_target) + install_targets.append(copy_plist) if localEnv.get("compiledb", False): - default_args += [compilation_db] -Default(*default_args) \ No newline at end of file + install_targets.append(compilation_db) + +Default(*install_targets) diff --git a/USAGE.ja.md b/USAGE.ja.md deleted file mode 100644 index e866a95..0000000 --- a/USAGE.ja.md +++ /dev/null @@ -1,201 +0,0 @@ -[**日本語**](./USAGE.ja.md) | [**English**](./USAGE.md) - -# ゚ディタの遞択 -䞋蚘どちらかの方法で利甚しおください。 - -## SpriteStudioPlayer のカスタムモゞュヌルを組み蟌んだ Godot Engine を利甚する -[BUILD.md](BUILD.md) を参照しお SpriteStudioPlayer のカスタムモゞュヌルを組み蟌んだ Godot をビルドしおください。 - -## SpriteStudioPlayer の GDExtension ファむルを利甚する -1. 本家サむト(https://godotengine.org/download/) より、該圓するバヌゞョンの Godot ダりンロヌドしたす。 -2. SpriteStudioPlayer の GDExtension ファむルを甚意したす。 - - [リリヌス](https://github.com/SpriteStudio/SSPlayerForGodot/releases) に GDExtension ファむルの成果物を甚意しおいるので、そちらを利甚しおください。 - - GDExtension を自前でビルドする堎合は [BUILD.md](BUILD.md) を参照しおください -3. SpriteStudioPlayer の GDExtension ファむルをプロゞェクトディレクトリの `bin` ディレクトリぞ栌玍したす。 - - -# SpriteStudioデヌタのむンポヌト - -SpriteStudioデヌタのむンポヌト手順に぀いお説明したす。 -珟圚の SpriteStudio for Godot プラグむンでは sspj ファむルを盎接指定する圢態になっおいたす。 -ご利甚のプロゞェクト䞋のフォルダに sspj、ssae、ssce ず画像ファむルなどの䞀匏を配眮したす。 - -# SpriteStudioノヌドの䜜成ず sspj ファむルの指定 - -1. 「Node を新芏䜜成」から「GdNodeSsPlayer」を遞択し、「䜜成」ボタンを抌したす。 -2. むンスペクタヌの「Res Player」から「新芏 GdResourceSsPlayer」を遞択したす。 -3. GdResourceSsPlayer の「Res Project」から「読み蟌み」を遞択したす。 -4. 「ファむルを開く」ダむアログから「*.sspj」ファむルを遞択しお開きたす。 - -# アニメヌションの指定 - -1. 「Animation Settings」を展開「Anime Pack」から再生させる「*.ssae」ファむルを遞択したす。 -2. 続いお「Animation」から再生させるアニメヌションを遞択したす。 -3. Frame をドラッグしたり、Play フラグをオンにするこずでプレビュヌできたす。 - -## むンスペクタヌの各プロパティの意味 - -![image](./doc_images/ssnode_inspector.png) - -``` -GdNodeSsPlayer - SsPlayer を扱うノヌド -├── Res Player - SsPlayer が䜿甚するリ゜ヌス -│ └── Res Project - sspj ファむル -│ └── CellMap Settings - セルマップの蚭定 -│ ├── ssce File 01 - セルマップ -│ └── ssce File 02 - セルマップ -│ -└── Animation Settings - アニメヌションの蚭定 - ├── Anime Pack - アニメパック - ├── Animation - アニメヌション - ├── Frame - 珟圚のフレヌム - ├── Loop - ルヌプ再生フラグ - ├── Playing - 再生フラグ - └── Texture Interpolate - テクスチャ補間フラグ -``` - -## テクスチャ補間フラグに぀いお - -SSPlayer for Godot の実装(v1.2.0時点)では、䞀床アニメヌションをテクスチャにレンダリングした埌、Godot のレンダラヌによっおスクリヌンバッファに描画されたす。 -このテクスチャにレンダリングする際にバむリニア補間をかける堎合はフラグをオンに蚭定したす。 -この状態では回転しお斜めになったパヌツの゚ッゞにアンチ゚むリアスがかかりたすが、この動䜜が奜たしくない堎合はオフにしおください。 -このフラグをオフに蚭定し、CanvasItem の Texture の FilterMode も Nearest にしおおくずスクリヌンバッファに描画する際にも補間がかからずピクセルの゚ッゞが明確になりたす。 -䟋えばピクセルアヌト系のゲヌムで利甚する堎合は、この蚭定を詊しおみお䞋さい。 - -### レンダリングするテクスチャのサむズ -レンダリングするテクスチャのサむズはSpriteStudio䞊でアニメヌションに蚭定した「基準枠」のサむズが採甚されたす。(v1.2.0時点) - -# クラス - -GDScript からコントロヌルできるクラスの圹割ず䞻芁なメ゜ッドに぀いお説明したす。 -各クラスが持っおいる党おのメ゜ッド、プロパティ、シグナルに぀いおは Godot の Script 画面で確認しおみおください。 - -## リ゜ヌス管理クラス - -SpriteStudio の各皮 .ss** ファむルに盞圓するリ゜ヌスを管理するクラスがありたす。 -これらのクラスは GdResouce クラスを継承しおいるため、耇数の GdNodeSsPlayer クラスから同じリ゜ヌスを参照し、蚭定を個別に倉曎する堎合は、倉曎が共有されないよう Local To Scene フラグを True に蚭定しおください。 - -### [GdResourceSsProject](./gd_spritestudio/gd_resource_ssproject.h) クラス - -぀の sspj ファむルに盞圓するリ゜ヌスを取り扱うクラスです。 -sspj に登録された ssae, ssce, ssee 各々のリ゜ヌスの取埗ず蚭定を行いたす。 - -### [GdResourceSsCellMap](./gd_spritestudio/gd_resource_sscellmap.h) クラス - -぀の ssce ファむルに盞圓するリ゜ヌスを取り扱うクラスです。 -珟圚テクスチャの取埗ず蚭定を行うメンバヌのみ察応しおいたす。 - -### [GdResourceSsAnimePack](./gd_spritestudio/gd_resource_ssanimepack.h) クラス - -぀の ssae ファむルに盞圓するリ゜ヌスを取り扱うクラスです。 -内包しおいるアニメヌションの数、ずアニメヌション名の取埗を行えたす。 - -### [GdResourceSsPlayer](./gd_spritestudio/gd_resource_ssplayer.h) クラス - -珟圚 GdResourceSsProject リ゜ヌスを蚭定、取埗するアクセサのみです。 - -## 再生のためのクラス - -GdNodeSsPlayer に前述のリ゜ヌスを指定するこずで再生を行いたす。 -以䞋はファむルの読み蟌みから再生開始たでのシンプルなサンプルコヌドです。 - -```python -# GdNodeSsPlayerノヌドを指したす。 -## Godot 4 -@onread var ssnode = $target -## Godot 3.x -# onready var ssnode = $target - -func _ready(): - # sspj ファむルを読み蟌みたす。 - ssnode.res_player.res_project = ResourceLoader.load("Sample.sspj") - - # ssaeファむルずアニメヌションを指定したす。 - ssnode.set_anime_pack("Sample.ssae") - ssnode.set_animation("anime_1") - - # アニメヌション終了時コヌルバックの蚭定 - ## Godot 4 - ssnode.connect("animation_finished", Callable(self, "_on_animation_finished")) - ## Godot 3.x - # ssnode.connect("animation_finished", self, "_on_animation_finished") - - # ルヌプを指定しお再生を開始したす。 - ssnode.set_loop(true) - ssnode.play() - -# アニメ終了時のコヌルバック関数です -func _on_animation_finished(name): - print("SIGNAL _on_animation_finished from " + name) -``` - -他にもカレントフレヌムの指定、䞀時停止、開始、終了フレヌム、FPSの取埗など䞀般的なメ゜ッドがありたす。 -䞀芧は Godot の Script 画面で確認しおみおください。 - -### シグナル - -GdNodeSsPlayer が発行するシグナルに぀いお説明したす。 - -### on_animation_changed(name: String) - -アニメヌション倉曎時に発行されたす。 -name倉曎したアニメヌション名 - -### on_animation_finished(name: String) - -再生䞭のアニメヌションが終了フレヌムに到達した時に発行されたす。 -ルヌプ再生オンでも毎呚発行されたす。 -name倉曎したアニメヌション名 - -### on_animepack_changed(name: String) - -アニメパック倉曎時に発行されたす。 -name倉曎したアニメパック名 - -### on_frame_changed(frame: int) - -フレヌム䜍眮倉曎時に発行されたす。 -frame倉曎したフレヌム䜍眮 - -### on_signal(command: String, value: Dictionary) - -SpriteStudioのシグナルアトリビュヌトのキヌフレヌム到達時に発行されたす。 -commandコマンド名 -valueパラメヌタ名ず倀のコレクション - -### on_user_data(flag: int, intValue: int, rectValue: Rect2, pointValue: Vector2, stringValue: String) - -ナヌザヌデヌタのキヌフレヌム到達時に発行されたす。 - -- flag埌続の匕数が有効かどうかの論理倀 - - 1敎数が有効 - - 2範囲が有効 - - 4䜍眮が有効 - - 8文字列が有効 -- intValue敎数 -- rectValue範囲 -- pointValue䜍眮 -- stringValue文字列 - -# 制限事項 - -## 動䜜しないもの - -- マスク機胜 -- 描画モヌドミックス以倖もミックス盞圓になりたす。 -- SpriteStudio Ver.7.1 で远加された新機胜(テキスト・サりンド・9スラむス・シェむプ) - -## 衚瀺が異なるもの - -- パヌツカラヌ - - [x] v1.1.1 で修正枈ミックスの頂点単䜍の時にX状(䞉角圢の蟺郚分)の茝床が高くなっおいたす。 - - [x] v1.1 で修正枈乗算でテクスチャカラヌの割合が゚ディタより倧きくなりたす。 - -## その他の制限 - -- むンスタンスの独立動䜜がOnのパヌツの再生に぀いお - - シヌン䞊で Frame プロパティが 0 以倖の状態で Play プロパティを On にしお再生開始した堎合、独立動䜜がOnに蚭定されたむンスタンスパヌツを再生させた堎合、むンスタンスパヌツの再生フレヌムがずれるこずがありたす。 - - この堎合、䞀旊 Frame プロパティの倀を 0 以倖に倉曎埌、0 に戻しおから再生開始するこずで䞀臎させられたす。 -- シェヌダヌ - - SpriteStudio公匏の䞀郚のみ察応しおいたす。 - - カスタムシェヌダヌは独自に远加・察応する必芁がありたす。 diff --git a/USAGE.md b/USAGE.md deleted file mode 100644 index d9457d6..0000000 --- a/USAGE.md +++ /dev/null @@ -1,208 +0,0 @@ -[**日本語**](./USAGE.ja.md) | [**English**](./USAGE.md) - -# Choosing the Editor - -Use one of the following methods: - -## Using Godot Engine with the SpriteStudioPlayer Custom Module - -Build Godot with the SpriteStudioPlayer custom module included. -See [BUILD.md](BUILD.md) for instructions. - -## Using the SpriteStudioPlayer GDExtension Files - -1. Download the appropriate version of Godot from the official website: - https://godotengine.org/download/ -2. Prepare the SpriteStudioPlayer GDExtension files: - - Prebuilt binaries are available under [Releases](https://github.com/SpriteStudio/SSPlayerForGodot/releases). - - To build the GDExtension yourself, see [BUILD.md](BUILD.md). -3. Place the SpriteStudioPlayer GDExtension files into your project’s `bin` directory. - -# Importing SpriteStudio Data - -This section explains how to import SpriteStudio data. -With the current SpriteStudio for Godot plugin, `.sspj` files are specified directly. -Place the `.sspj`, `.ssae`, `.ssce`, and related image files in a folder under your project. - -# Creating a SpriteStudio Node and Specifying the SSPJ File - -1. Create a new node and select **GdNodeSsPlayer**, then click **Create**. -2. In the Inspector, select **New GdResourceSsPlayer** under **Res Player**. -3. Under **Res Project**, select **Load**. -4. Choose the `*.sspj` file from the file dialog. - -# Selecting an Animation - -1. Expand **Animation Settings**, then select the `*.ssae` file you want to play from **Anime Pack**. -2. Next, choose the animation you want to play under **Animation**. -3. You can preview the animation by dragging the **Frame** slider or enabling the **Play** flag. - -## Meaning of Inspector Properties - -![image](./doc_images/ssnode_inspector.png) - -``` -GdNodeSsPlayer - Node that handles the SsPlayer -├── Res Player - Resource used by the SsPlayer -│ └── Res Project - SSPJ file -│ └── CellMap Settings - Cellmap settings -│ ├── ssce File 01 - Cellmap -│ └── ssce File 02 - Cellmap -│ -└── Animation Settings - Animation settings - ├── Anime Pack - Animation pack - ├── Animation - Animation - ├── Frame - Current frame - ├── Loop - Loop playback flag - ├── Playing - Playback flag - └── Texture Interpolate - Texture interpolation flag -``` - -## About the Texture Interpolation Flag - -In the current implementation of SSPlayer for Godot (as of v1.2.0), the animation is first rendered into a texture and then drawn to the screen buffer by Godot’s renderer. -Enable this flag if you want bilinear interpolation applied when rendering to the texture. -When enabled, anti-aliasing is applied to the edges of parts that have been rotated or angled. If this is undesirable, disable the flag. -If you turn this flag off and also set the CanvasItem’s **Texture → FilterMode** to **Nearest**, interpolation will not be applied when drawing to the screen buffer, resulting in crisp pixel edges. -This is especially useful for pixel‑art style games, so consider trying this configuration. - -### Texture Size Used for Rendering - -The texture size used during rendering is based on the **“Base Frame”** size configured for the animation in SpriteStudio. (As of v1.2.0) - -# Classes - -This section describes the roles and primary methods of the classes that can be controlled via GDScript. -For the full list of methods, properties, and signals for each class, refer to the Script view in Godot. - -## Resource Management Classes - -These classes correspond to the various `.ss**` files of SpriteStudio. -Since these classes inherit from the GdResource class, if you want to reference the same resource from multiple GdNodeSsPlayer classes and modify its settings individually, set the Local To Scene flag to True so that the changes are not shared. - -### [GdResourceSsProject](./gd_spritestudio/gd_resource_ssproject.h) - -Manages a single `sspj` file. -Handles retrieving and setting the resources registered in the sspj: `ssae`, `ssce`, and `ssee`. - -### [GdResourceSsCellMap](./gd_spritestudio/gd_resource_sscellmap.h) - -Manages a single `ssce` file. -Currently supports only retrieving and setting the texture. - -### [GdResourceSsAnimePack](./gd_spritestudio/gd_resource_ssanimepack.h) - -Manages a single `ssae` file. -Allows retrieving the number of animations and the animation names. - -### [GdResourceSsPlayer](./gd_spritestudio/gd_resource_ssplayer.h) - -Provides accessors for setting and retrieving the current `GdResourceSsProject`. - -## Classes for Playback - -Assign the described resources to `GdNodeSsPlayer` to play animations. -Below is a simple example showing file loading and playback: - -```python -# Reference to the GdNodeSsPlayer node. -## Godot 4 -@onready var ssnode = $target -## Godot 3.x -# onready var ssnode = $target - -func _ready(): - # Load the sspj file. - ssnode.res_player.res_project = ResourceLoader.load("Sample.sspj") - - # Specify the ssae file and animation. - ssnode.set_anime_pack("Sample.ssae") - ssnode.set_animation("anime_1") - - # Set the callback for animation completion. - ## Godot 4 - ssnode.connect("animation_finished", Callable(self, "_on_animation_finished")) - ## Godot 3.x - # ssnode.connect("animation_finished", self, "_on_animation_finished") - - # Enable looping and start playback. - ssnode.set_loop(true) - ssnode.play() - -# Callback function for when the animation finishes. -func _on_animation_finished(name): - print("SIGNAL _on_animation_finished from " + name) -``` - -Other standard methods include selecting the current frame, pausing, playing, setting the end frame, retrieving FPS, and more. -The full list can be checked in Godot's Script view. - -### Signals - -The signals emitted by `GdNodeSsPlayer` are described below. - -### on_animation_changed(name: String) - -Emitted when the animation changes. -`name`: Name of the new animation - -### on_animation_finished(name: String) - -Emitted when the animation reaches its final frame. -This is emitted each loop when looping is enabled. -`name`: Name of the animation that finished - -### on_animepack_changed(name: String) - -Emitted when the anime pack changes. -`name`: Name of the new anime pack - -### on_frame_changed(frame: int) - -Emitted when the frame position changes. -`frame`: Updated frame index - -### on_signal(command: String, value: Dictionary) - -Emitted when reaching a keyframe containing a SpriteStudio signal attribute. -`command`: Command name -`value`: Dictionary of parameter names and values - -### on_user_data(flag: int, intValue: int, rectValue: Rect2, pointValue: Vector2, stringValue: String) - -Emitted when reaching a keyframe with user data. - -- `flag`: Bitmask indicating which values are valid - - `1`: Integer is valid - - `2`: Rect is valid - - `4`: Position is valid - - `8`: String is valid -- `intValue`: Integer -- `rectValue`: Rect -- `pointValue`: Position -- `stringValue`: String - -# Limitations - -## Not Supported - -- Mask functionality -- Drawing modes: all modes behave like Mix -- New features added in SpriteStudio Ver. 7.1 - (Text, Sound, 9‑slice, Shape) - -## Differences in Display - -- Parts Color - - [x] Fixed in v1.1.1: Brightness of X‑shaped (triangle edge) portions was too high when using vertex‑level Mix mode - - [x] Fixed in v1.1: Texture color ratio differed from the editor when using Multiply mode - -## Other Limitations - -- Independent Instance Behavior - - If **Frame** is set to a non‑zero value when **Play** is turned on, and an instance part with independent playback is used, the instance animation may become misaligned. - - Workaround: Change **Frame** to a non‑zero value, then change it back to 0 before starting playback. - -- Shaders - - Only some of the official SpriteStudio shaders are supported. - - Custom shaders must be implemented manually. diff --git a/doc_images/ssnode_inspector.png b/doc_images/ssnode_inspector.png deleted file mode 100644 index 2cf9f30..0000000 Binary files a/doc_images/ssnode_inspector.png and /dev/null differ diff --git a/examples/new/.editorconfig b/examples/new/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/examples/new/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/examples/new/.gitattributes b/examples/new/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/examples/new/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/examples/new/.gitignore b/examples/new/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/examples/new/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/examples/new/icon.svg b/examples/new/icon.svg new file mode 100644 index 0000000..c6bbb7d --- /dev/null +++ b/examples/new/icon.svg @@ -0,0 +1 @@ + diff --git a/examples/new/icon.svg.import b/examples/new/icon.svg.import new file mode 100644 index 0000000..72612e6 --- /dev/null +++ b/examples/new/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://blqanr2op3koj" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/examples/new/project.godot b/examples/new/project.godot new file mode 100644 index 0000000..1e0b944 --- /dev/null +++ b/examples/new/project.godot @@ -0,0 +1,23 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[animation] + +compatibility/default_parent_skeleton_in_mesh_instance_3d=true + +[application] + +config/name="new" +config/features=PackedStringArray("4.6", "GL Compatibility") +config/icon="res://icon.svg" + +[spritestudio] + +output_directory="res://ssab_generated" diff --git a/examples/new_gdextension/.editorconfig b/examples/new_gdextension/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/examples/new_gdextension/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/examples/new_gdextension/.gitattributes b/examples/new_gdextension/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/examples/new_gdextension/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/examples/new_gdextension/.gitignore b/examples/new_gdextension/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/examples/new_gdextension/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/examples/new_gdextension/bin/ssplayer_godot_extension.gdextension b/examples/new_gdextension/bin/ssplayer_godot_extension.gdextension new file mode 100644 index 0000000..3b33b08 --- /dev/null +++ b/examples/new_gdextension/bin/ssplayer_godot_extension.gdextension @@ -0,0 +1,36 @@ +[configuration] + +entry_symbol = "spritestudio_godot_library_init" +compatibility_minimum = "4.4" + +[libraries] + +macos.editor = "macos/libSSGodot.macos.editor.framework" +macos.debug = "macos/libSSGodot.macos.template_debug.framework" +macos.release = "macos/libSSGodot.macos.template_release.framework" + +ios.debug = "ios/libSSGodot.ios.template_debug.framework" +ios.release = "ios/libSSGodot.ios.template_debug.framework" + +windows.editor.x86_64 = "windows/libSSGodot.windows.editor.x86_64.dll" +windows.debug.x86_64 = "windows/libSSGodot.windows.template_debug.x86_64.dll" +windows.release.x86_64 = "windows/libSSGodot.windows.template_release.x86_64.dll" + +android.debug.x86_64 = "android/libSSGodot.android.template_debug.x86_64.so" +android.release.x86_64 = "android/libSSGodot.android.template_release.x86_64.so" + +android.debug.arm32 = "android/libSSGodot.android.template_debug.arm32.so" +android.release.arm32 = "android/libSSGodot.android.template_release.arm32.so" + +android.debug.arm64 = "android/libSSGodot.android.template_debug.arm64.so" +android.release.arm64 = "android/libSSGodot.android.template_release.arm64.so" + +web.debug.threads.wasm32 = "web/libSSGodot.web.template_debug.wasm32.wasm" +web.release.threads.wasm32 = "web/libSSGodot.web.template_release.wasm32.wasm" + +web.debug.wasm32 = "web/libSSGodot.web.template_debug.wasm32.nothreads.wasm" +web.release.wasm32 = "web/libSSGodot.web.template_release.wasm32.nothreads.wasm" + +linux.editor.x86_64 = "linux/libSSGodot.linux.editor.x86_64.so" +linux.debug.x86_64 = "linux/libSSGodot.linux.template_debug.x86_64.so" +linux.release.x86_64 = "linux/libSSGodot.linux.template_release.x86_64.so" diff --git a/examples/new_gdextension/icon.svg b/examples/new_gdextension/icon.svg new file mode 100644 index 0000000..c6bbb7d --- /dev/null +++ b/examples/new_gdextension/icon.svg @@ -0,0 +1 @@ + diff --git a/examples/new_gdextension/icon.svg.import b/examples/new_gdextension/icon.svg.import new file mode 100644 index 0000000..1796c4f --- /dev/null +++ b/examples/new_gdextension/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://4tnc3e02ma56" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/examples/new_gdextension/project.godot b/examples/new_gdextension/project.godot new file mode 100644 index 0000000..9c4eb3e --- /dev/null +++ b/examples/new_gdextension/project.godot @@ -0,0 +1,29 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="new_gdextension" +config/features=PackedStringArray("4.6", "GL Compatibility") +config/icon="res://icon.svg" + +[physics] + +3d/physics_engine="Jolt Physics" + +[rendering] + +rendering_device/driver.windows="d3d12" +renderer/rendering_method="gl_compatibility" +renderer/rendering_method.mobile="gl_compatibility" + +[spritestudio] + +output_directory="res://ssab_generated" diff --git a/gd_spritestudio/SCsub b/gd_spritestudio/SCsub index 5c70f5a..98ee705 100644 --- a/gd_spritestudio/SCsub +++ b/gd_spritestudio/SCsub @@ -1,32 +1,55 @@ -#!/usr/bin/env python - +#!/usr/bin/env python +import os Import("env") Import("env_modules") -env_gd_spritestudio = env_modules.Clone() - -env_gd_spritestudio.add_source_files(env.modules_sources, "*.cpp") -env_gd_spritestudio.add_source_files(env.modules_sources, "SpriteStudio6-SDK/Common/Loader/tinyxml2/*.cpp") -env_gd_spritestudio.add_source_files(env.modules_sources, "SpriteStudio6-SDK/Common/Loader/*.cpp") -# env_gd_spritestudio.add_source_files(env.modules_sources, "SpriteStudio6-SDK/Common/Helper/*.cpp") -env_gd_spritestudio.add_source_files(env.modules_sources, "SpriteStudio6-SDK/Common/Animator/*.cpp") -env_gd_spritestudio.add_source_files(env.modules_sources, "SpriteStudio6-SDK/Common/Helper/DebugPrint.cpp") -env_gd_spritestudio.add_source_files(env.modules_sources, "SpriteStudio6-SDK/Common/Helper/IsshTexture.cpp") - - -env_gd_spritestudio.Append(CPPDEFINES = '_NOTUSE_STBI') -env_gd_spritestudio.Append(CPPDEFINES = '_NOTUSE_TEXTURE_FULLPATH') -env_gd_spritestudio.Append(CPPDEFINES = '_NOTUSE_EXCEPTION') - -env_gd_spritestudio.Append( - CPPPATH=[ - "SpriteStudio6-SDK/Common/Loader", - "SpriteStudio6-SDK/Common/Helper", - "SpriteStudio6-SDK/Common/Animator", - ]) - -if not env_gd_spritestudio.msvc: - env_gd_spritestudio.Append(CXXFLAGS=["-Wno-inconsistent-missing-override"]) - -if env['platform'] == 'macos': - env_gd_spritestudio.Append(LINKFLAGS=['-framework', 'Metal']) +env_ss = env_modules.Clone() + +# --- Source Files --- +# Extension sources +env_ss.add_source_files(env.modules_sources, "*.cpp") + +# FlatBuffers sources +fb_src_dir = "flatbuffers/src" +fb_sources = [ + "idl_parser.cpp", + "idl_gen_text.cpp", + "reflection.cpp", + "util.cpp", +] +for f in fb_sources: + env_ss.add_source_files(env.modules_sources, os.path.join(fb_src_dir, f)) + +# --- Includes --- +env_ss.Append( + CPPPATH=[ + "flatbuffers/src", + "flatbuffers/include", + "runtime", + ] +) + +# --- Libraries & Library Paths --- +module_path = env.Dir('.').abspath +platform = env['platform'] + +if platform in ['macos', 'windows']: + runtime_libpath = os.path.join(module_path, "runtime", "libs", platform) +else: + runtime_libpath = os.path.join(module_path, "runtime", "libs", platform, env['arch']) + +env.Append(LIBPATH=[runtime_libpath]) + +if env['target'] == 'editor': + env.Append(LIBS=["ssconverter"]) + if platform == "windows": + env.Append(LINKFLAGS=["Userenv.lib", "Bcrypt.lib", "Ntdll.lib", "Ws2_32.lib"]) + +env.Append(LIBS=["ssruntime"]) + +# --- Compilation Flags --- +if not env_ss.msvc: + env_ss.Append(CXXFLAGS=["-Wno-inconsistent-missing-override"]) + +if platform == 'macos': + env_ss.Append(LINKFLAGS=['-framework', 'Metal']) diff --git a/gd_spritestudio/SpriteStudio6-SDK b/gd_spritestudio/SpriteStudio6-SDK deleted file mode 160000 index b31ec85..0000000 --- a/gd_spritestudio/SpriteStudio6-SDK +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b31ec853086976a84e01265244b962cadf4b6fba diff --git a/gd_spritestudio/SpriteStudio7-SDK b/gd_spritestudio/SpriteStudio7-SDK new file mode 160000 index 0000000..a89d35e --- /dev/null +++ b/gd_spritestudio/SpriteStudio7-SDK @@ -0,0 +1 @@ +Subproject commit a89d35e5dd318cca5e8355975c8c083e6c9731b4 diff --git a/gd_spritestudio/addons/ss_importer/plugin.cfg b/gd_spritestudio/addons/ss_importer/plugin.cfg deleted file mode 100644 index 88e6c8e..0000000 --- a/gd_spritestudio/addons/ss_importer/plugin.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[plugin] - -name="ss_importer" -description="" -author="ss" -version="1" -script="ss_importer.gd" diff --git a/gd_spritestudio/addons/ss_importer/ss_importer.gd b/gd_spritestudio/addons/ss_importer/ss_importer.gd deleted file mode 100644 index a739ab5..0000000 --- a/gd_spritestudio/addons/ss_importer/ss_importer.gd +++ /dev/null @@ -1,27 +0,0 @@ -tool -extends EditorPlugin - -var importer_sspj -var importer_ssae -var importer_ssce -var importer_ssee - -func _enter_tree(): - importer_sspj = preload("ss_importer_sspj.gd").new() - importer_ssae = preload("ss_importer_ssae.gd").new() - importer_ssce = preload("ss_importer_ssce.gd").new() - importer_ssee = preload("ss_importer_ssee.gd").new() - add_import_plugin(importer_sspj) - add_import_plugin(importer_ssae) - add_import_plugin(importer_ssce) - add_import_plugin(importer_ssee) - -func _exit_tree(): - remove_import_plugin(importer_sspj) - remove_import_plugin(importer_ssae) - remove_import_plugin(importer_ssce) - remove_import_plugin(importer_ssee) - importer_sspj = null - importer_ssae = null - importer_ssce = null - importer_ssee = null diff --git a/gd_spritestudio/addons/ss_importer/ss_importer_ssae.gd b/gd_spritestudio/addons/ss_importer/ss_importer_ssae.gd deleted file mode 100644 index 7d2e2e5..0000000 --- a/gd_spritestudio/addons/ss_importer/ss_importer_ssae.gd +++ /dev/null @@ -1,35 +0,0 @@ -tool -extends EditorImportPlugin - -func get_preset_count(): - return 0 - -func get_preset_name(preset): - return "" - -func get_import_options(preset): - return [] - -func get_option_visibility(option, options): - return false - -func import(source_file, save_path, options, r_platform_variants, r_gen_files): - var doc = GdResourceSsDocument.new() - doc.load_from_file(source_file,source_file) - - return ResourceSaver.save("%s.%s" % [save_path, get_save_extension()], doc) - -func get_importer_name(): - return "ssae_importer" - -func get_visible_name(): - return "ssae_importer" - -func get_recognized_extensions(): - return ["ssae"] - -func get_save_extension(): - return "gdssae" - -func get_resource_type(): - return "GdResourceSsAnimePack" diff --git a/gd_spritestudio/addons/ss_importer/ss_importer_ssce.gd b/gd_spritestudio/addons/ss_importer/ss_importer_ssce.gd deleted file mode 100644 index 8c3981f..0000000 --- a/gd_spritestudio/addons/ss_importer/ss_importer_ssce.gd +++ /dev/null @@ -1,35 +0,0 @@ -tool -extends EditorImportPlugin - -func get_preset_count(): - return 0 - -func get_preset_name(preset): - return "" - -func get_import_options(preset): - return [] - -func get_option_visibility(option, options): - return false - -func import(source_file, save_path, options, r_platform_variants, r_gen_files): - var doc = GdResourceSsDocument.new() - doc.load_from_file(source_file,source_file) - - return ResourceSaver.save("%s.%s" % [save_path, get_save_extension()], doc) - -func get_importer_name(): - return "ssce_importer" - -func get_visible_name(): - return "ssce_importer" - -func get_recognized_extensions(): - return ["ssce"] - -func get_save_extension(): - return "gdssce" - -func get_resource_type(): - return "GdResourceSsCellMap" diff --git a/gd_spritestudio/addons/ss_importer/ss_importer_ssee.gd b/gd_spritestudio/addons/ss_importer/ss_importer_ssee.gd deleted file mode 100644 index 1b43dc0..0000000 --- a/gd_spritestudio/addons/ss_importer/ss_importer_ssee.gd +++ /dev/null @@ -1,35 +0,0 @@ -tool -extends EditorImportPlugin - -func get_preset_count(): - return 0 - -func get_preset_name(preset): - return "" - -func get_import_options(preset): - return [] - -func get_option_visibility(option, options): - return false - -func import(source_file, save_path, options, r_platform_variants, r_gen_files): - var doc = GdResourceSsDocument.new() - doc.load_from_file(source_file,source_file) - - return ResourceSaver.save("%s.%s" % [save_path, get_save_extension()], doc) - -func get_importer_name(): - return "ssee_importer" - -func get_visible_name(): - return "ssee_importer" - -func get_recognized_extensions(): - return ["ssee"] - -func get_save_extension(): - return "gdssee" - -func get_resource_type(): - return "GdResourceSsEffect" diff --git a/gd_spritestudio/addons/ss_importer/ss_importer_sspj.gd b/gd_spritestudio/addons/ss_importer/ss_importer_sspj.gd deleted file mode 100644 index 37578fd..0000000 --- a/gd_spritestudio/addons/ss_importer/ss_importer_sspj.gd +++ /dev/null @@ -1,35 +0,0 @@ -tool -extends EditorImportPlugin - -func get_preset_count(): - return 0 - -func get_preset_name(preset): - return "" - -func get_import_options(preset): - return [] - -func get_option_visibility(option, options): - return false - -func import(source_file, save_path, options, r_platform_variants, r_gen_files): - var doc = GdResourceSsDocument.new() - doc.load_from_file(source_file,source_file) - - return ResourceSaver.save("%s.%s" % [save_path, get_save_extension()], doc) - -func get_importer_name(): - return "sspj_importer" - -func get_visible_name(): - return "sspj_importer" - -func get_recognized_extensions(): - return ["sspj"] - -func get_save_extension(): - return "gdsspj" - -func get_resource_type(): - return "GdResourceSsProject" diff --git a/gd_spritestudio/config.py b/gd_spritestudio/config.py index e16887f..3475ca9 100644 --- a/gd_spritestudio/config.py +++ b/gd_spritestudio/config.py @@ -1,4 +1,4 @@ -# config.py +# config.py def can_build(env, platform): return True diff --git a/gd_spritestudio/doc/classes/GdNodeSsPlayer.xml b/gd_spritestudio/doc/classes/GdNodeSsPlayer.xml deleted file mode 100644 index 869f470..0000000 --- a/gd_spritestudio/doc/classes/GdNodeSsPlayer.xml +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gd_spritestudio/doc/classes/GdResourceSsAnimePack.xml b/gd_spritestudio/doc/classes/GdResourceSsAnimePack.xml deleted file mode 100644 index fe94d97..0000000 --- a/gd_spritestudio/doc/classes/GdResourceSsAnimePack.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gd_spritestudio/doc/classes/GdResourceSsCellMap.xml b/gd_spritestudio/doc/classes/GdResourceSsCellMap.xml deleted file mode 100644 index 76370f1..0000000 --- a/gd_spritestudio/doc/classes/GdResourceSsCellMap.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/gd_spritestudio/doc/classes/GdResourceSsDocument.xml b/gd_spritestudio/doc/classes/GdResourceSsDocument.xml deleted file mode 100644 index c255523..0000000 --- a/gd_spritestudio/doc/classes/GdResourceSsDocument.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/gd_spritestudio/doc/classes/GdResourceSsEffect.xml b/gd_spritestudio/doc/classes/GdResourceSsEffect.xml deleted file mode 100644 index 0a0fa74..0000000 --- a/gd_spritestudio/doc/classes/GdResourceSsEffect.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/gd_spritestudio/doc/classes/GdResourceSsPlayer.xml b/gd_spritestudio/doc/classes/GdResourceSsPlayer.xml deleted file mode 100644 index 0227c17..0000000 --- a/gd_spritestudio/doc/classes/GdResourceSsPlayer.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/gd_spritestudio/doc/classes/GdResourceSsProject.xml b/gd_spritestudio/doc/classes/GdResourceSsProject.xml deleted file mode 100644 index 217414a..0000000 --- a/gd_spritestudio/doc/classes/GdResourceSsProject.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gd_spritestudio/flatbuffers b/gd_spritestudio/flatbuffers new file mode 160000 index 0000000..bab1075 --- /dev/null +++ b/gd_spritestudio/flatbuffers @@ -0,0 +1 @@ +Subproject commit bab10754d93d74d1ff44d46de63558bc4127f7d8 diff --git a/gd_spritestudio/gd_clickable_label.cpp b/gd_spritestudio/gd_clickable_label.cpp new file mode 100644 index 0000000..5ab33d3 --- /dev/null +++ b/gd_spritestudio/gd_clickable_label.cpp @@ -0,0 +1,50 @@ +#ifdef TOOLS_ENABLED + +#include "gd_macros.h" +#include "gd_clickable_label.h" + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +#include +#include +#include +using namespace godot; +#else +#if VERSION_MAJOR >= 4 + #if VERSION_MINOR >= 6 + #include "servers/display/display_server.h" + #else + #include "servers/display_server.h" + #endif +#endif + +#endif + +void GdClickableLabel::_bind_methods() { + ADD_SIGNAL(MethodInfo("text_copied")); +} + +GdClickableLabel::GdClickableLabel() { + set_mouse_filter(MOUSE_FILTER_STOP); + + set_default_cursor_shape(CURSOR_POINTING_HAND); +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +void GdClickableLabel::_gui_input(const Ref &p_event) { +#else +void GdClickableLabel::gui_input(const Ref &p_event) { +#endif + Ref mb = p_event; + +#ifdef SPRITESTUDIO_GODOT_EXTENSION + if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MOUSE_BUTTON_LEFT) { +#else + if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) { +#endif + String text_to_copy = get_text(); + DisplayServer::get_singleton()->clipboard_set(text_to_copy); + emit_signal("text_copied"); + accept_event(); + } +} +#endif // #ifdef TOOLS_ENABLED diff --git a/gd_spritestudio/gd_clickable_label.h b/gd_spritestudio/gd_clickable_label.h new file mode 100644 index 0000000..43e7caa --- /dev/null +++ b/gd_spritestudio/gd_clickable_label.h @@ -0,0 +1,32 @@ +#ifdef TOOLS_ENABLED + +#ifndef CLICKABLE_LABEL_H +#define CLICKABLE_LABEL_H + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +#include +#include +using namespace godot; +#else +#include "scene/gui/label.h" +#include "core/input/input_event.h" +#endif + +class GdClickableLabel : public Label { + GDCLASS(GdClickableLabel, Label); + +protected: + static void _bind_methods(); + +public: + GdClickableLabel(); + +#ifdef SPRITESTUDIO_GODOT_EXTENSION + virtual void _gui_input(const Ref &p_event) override; +#else + virtual void gui_input(const Ref &p_event) override; +#endif +}; + +#endif // CLICKABLE_LABEL_HPP +#endif // #ifdef TOOLS_ENABLED diff --git a/gd_spritestudio/gd_io.cpp b/gd_spritestudio/gd_io.cpp deleted file mode 100644 index 0fc40b9..0000000 --- a/gd_spritestudio/gd_io.cpp +++ /dev/null @@ -1,295 +0,0 @@ -/*! -* \file gd_io.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_io.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -using namespace godot; -#else -#ifdef GD_V4 -#include "core/io/file_access.h" -#endif -#ifdef GD_V3 -#include "core/os/file_access.h" -#endif -#include "core/io/stream_peer.h" -#endif - -GdIO::GdIO() -{ -} - -GdIO::~GdIO() -{ -} - -String GdIO::loadStringFromFile( const String& strPath ) -{ - Error err; - String str = String( "" ); - -#ifdef SPRITESTUDIO_GODOT_EXTENSION - str = FileAccess::get_file_as_string(strPath); - if (str.length() == 0) { - err = ERR_FILE_UNRECOGNIZED; - ERR_PRINT( String( "loadStringFromFile error: " ) + String::num( err ) ); - - return str; - } - -#endif -#ifdef GD_V4 - Ref resFileAccess = FileAccess::open( strPath, FileAccess::READ, &err ); - - if ( err != OK ) { - ERR_PRINT( String( "loadStringFromFile error: " ) + String::num( err ) ); - - if ( resFileAccess.is_valid() ) { - resFileAccess->close(); - } - - return str; - } - - while ( !resFileAccess->eof_reached() ) { - str += resFileAccess->get_line(); - } - - resFileAccess->close(); -#endif -#ifdef GD_V3 - FileAccess* pFileAccess = FileAccess::open( strPath, FileAccess::READ, &err ); - - if ( err != OK ) { - ERR_PRINT( String( "loadStringFromFile error: " ) + String::num( err ) ); - - if ( pFileAccess ) { - pFileAccess->close(); - } - - return str; - } - - str = pFileAccess->get_as_utf8_string(); - - pFileAccess->close(); -#endif - - return str; -} - -Error GdIO::saveStringToFile( const String& strPath, const String& str ) -{ - Error err; - -#ifdef SPRITESTUDIO_GODOT_EXTENSION - Ref resFileAccess = FileAccess::open( strPath, FileAccess::WRITE); - if ( !resFileAccess.is_valid() ) { - err = ERR_FILE_CANT_OPEN; - ERR_PRINT( String( "saveStringToFile error: " ) + String::num( err ) ); - - return err; - } - - resFileAccess->store_string( str ); - - resFileAccess->close(); - -#endif -#ifdef GD_V4 - Ref resFileAccess = FileAccess::open( strPath, FileAccess::WRITE, &err ); - - if ( err != OK ) { - ERR_PRINT( String( "saveStringToFile error: " ) + String::num( err ) ); - - if ( resFileAccess.is_valid() ) { - resFileAccess->close(); - } - - return err; - } - - resFileAccess->store_string( str ); - - resFileAccess->close(); -#endif -#ifdef GD_V3 - FileAccess* pFileAccess = FileAccess::open( strPath, FileAccess::WRITE, &err ); - - if ( err != OK ) { - ERR_PRINT( String( "saveStringToFile error: " ) + String::num( err ) ); - - if ( pFileAccess ) { - pFileAccess->close(); - } - - return err; - } - - pFileAccess->store_string( str ); - - pFileAccess->close(); -#endif - - return err; -} - -Variant GdIO::loadVariantFromFile( const String& strPath ) -{ - Error err; - Variant val = Variant( "" ); - -#ifdef SPRITESTUDIO_GODOT_EXTENSION - Ref resFileAccess = FileAccess::open( strPath, FileAccess::READ); - if ( !resFileAccess.is_valid() ) { - err = ERR_FILE_CANT_OPEN; - ERR_PRINT( String( "loadVariantFromFile error: " ) + String::num( err ) ); - return val; - } - - val = resFileAccess->get_var(); - - resFileAccess->close(); -#else -#ifdef GD_V4 - Ref resFileAccess = FileAccess::open( strPath, FileAccess::READ, &err ); - - if ( err != OK ) { - ERR_PRINT( String( "loadVariantFromFile error: " ) + String::num( err ) ); - - if ( resFileAccess.is_valid() ) { - resFileAccess->close(); - } - - return val; - } - - int iSize = resFileAccess->get_length(); - uint8_t* pBuf = memnew_arr( uint8_t, iSize ); - - resFileAccess->get_buffer( pBuf, iSize ); - - resFileAccess->close(); - - StreamPeerBuffer st; - - st.put_data( pBuf, iSize ); - st.seek( 0 ); - - val = st.get_var(); - - memdelete_arr( pBuf ); -#endif -#ifdef GD_V3 - FileAccess* pFileAccess = FileAccess::open( strPath, FileAccess::READ, &err ); - - if ( err != OK ) { - ERR_PRINT( String( "loadVariantFromFile error: " ) + String::num( err ) ); - - if ( pFileAccess ) { - pFileAccess->close(); - } - - return val; - } - - int iSize = pFileAccess->get_len(); - uint8_t* pBuf = memnew_arr( uint8_t, iSize ); - - pFileAccess->get_buffer( pBuf, iSize ); - - pFileAccess->close(); - - StreamPeerBuffer st; - - st.put_data( pBuf, iSize ); - st.seek( 0 ); - - val = st.get_var(); - - memdelete_arr( pBuf ); -#endif -#endif - - return val; -} - -Error GdIO::saveVariantToFile( const String& strPath, const Variant& val ) -{ - Error err; - -#ifdef SPRITESTUDIO_GODOT_EXTENSION - Ref resFileAccess = FileAccess::open( strPath, FileAccess::WRITE); - if ( !resFileAccess.is_valid() ) { - err = ERR_FILE_CANT_OPEN; - ERR_PRINT( String( "saveVariantToFile error: " ) + String::num( err ) ); - - return err; - } - - resFileAccess->store_var(val); - -#endif -#ifdef GD_V4 - Ref resFileAccess = FileAccess::open( strPath, FileAccess::WRITE, &err ); - - if ( err != OK ) { - ERR_PRINT( String( "saveVariantToFile error: " ) + String::num( err ) ); - - if ( resFileAccess.is_valid() ) { - resFileAccess->close(); - } - - return err; - } - - StreamPeerBuffer st; - - st.put_var( val ); - st.seek( 0 ); - - int iSize = st.get_size(); - uint8_t* pBuf = memnew_arr( uint8_t, iSize ); - - st.get_data( pBuf, iSize ); - - resFileAccess->store_buffer( pBuf, iSize ); - - resFileAccess->close(); - - memdelete_arr( pBuf ); -#endif -#ifdef GD_V3 - FileAccess* pFileAccess = FileAccess::open( strPath, FileAccess::WRITE, &err ); - - if ( err != OK ) { - ERR_PRINT( String( "saveVariantToFile error: " ) + String::num( err ) ); - - if ( pFileAccess ) { - pFileAccess->close(); - } - - return err; - } - - StreamPeerBuffer st; - - st.put_var( val ); - st.seek( 0 ); - - int iSize = st.get_size(); - uint8_t* pBuf = memnew_arr( uint8_t, iSize ); - - st.get_data( pBuf, iSize ); - - pFileAccess->store_buffer( pBuf, iSize ); - - pFileAccess->close(); - - memdelete_arr( pBuf ); -#endif - - return err; -} diff --git a/gd_spritestudio/gd_io.h b/gd_spritestudio/gd_io.h deleted file mode 100644 index a586191..0000000 --- a/gd_spritestudio/gd_io.h +++ /dev/null @@ -1,38 +0,0 @@ -/*! -* \file gd_io.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_IO_H -#define GD_IO_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#ifdef GD_V4 -#include "core/string/ustring.h" -#endif -#ifdef GD_V3 -#include "core/ustring.h" -#endif -#endif - -class GdIO -{ -private : - GdIO(); - -public : - virtual ~GdIO(); - - static String loadStringFromFile( const String& strPath ); - static Error saveStringToFile( const String& strPath, const String& str ); - static Variant loadVariantFromFile( const String& strPath ); - static Error saveVariantToFile( const String& strPath, const Variant& val ); -}; - -#endif // GD_IO_H diff --git a/gd_spritestudio/gd_loader_bssanimepack.cpp b/gd_spritestudio/gd_loader_bssanimepack.cpp deleted file mode 100644 index dda90f0..0000000 --- a/gd_spritestudio/gd_loader_bssanimepack.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! -* \file gd_loader_bssanimepack.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_loader_bssanimepack.h" - -#include "gd_resource_ssanimepack.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Variant GdLoaderBssAnimePack::_load(const String &p_path, const String &p_original_path, bool use_sub_threads, int32_t cache_mode) -#else -#ifdef GD_V4 -Ref GdLoaderBssAnimePack::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_use_sub_threads, float* r_progress, CacheMode p_cache_mode ) -#endif -#ifdef GD_V3 -RES GdLoaderBssAnimePack::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_no_subresource_cache ) -#endif -#endif -{ - Ref res = memnew( GdResourceSsAnimePack ); - Error err = res->loadFromFile( p_path, p_original_path ); - - if ( err != OK ) { - ERR_PRINT( String( "load error: " ) + String::num( err ) ); - } - -#ifndef SPRITESTUDIO_GODOT_EXTENSION - if ( r_error ) { - *r_error = err; - } -#endif - - return res; -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdLoaderBssAnimePack::_get_recognized_extensions() -{ - PackedStringArray extensions; - extensions.push_back("gdssae"); - return extensions; -} -#else -void GdLoaderBssAnimePack::get_recognized_extensions( List* p_extensions ) const -{ - if ( !p_extensions->find( "gdssae" ) ) { - p_extensions->push_back( "gdssae" ); - } -} -#endif - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdLoaderBssAnimePack::_handles_type(const StringName &p_type) -#else -bool GdLoaderBssAnimePack::handles_type( const String& p_type ) const -#endif -{ - return ClassDB::is_parent_class( p_type, "GdResourceSsAnimePack" ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -String GdLoaderBssAnimePack::_get_resource_type(const String &path) -#else -String GdLoaderBssAnimePack::get_resource_type( const String& p_path ) const -#endif -{ - return "GdResourceSsAnimePack"; -} diff --git a/gd_spritestudio/gd_loader_bssanimepack.h b/gd_spritestudio/gd_loader_bssanimepack.h deleted file mode 100644 index ce1a0ae..0000000 --- a/gd_spritestudio/gd_loader_bssanimepack.h +++ /dev/null @@ -1,47 +0,0 @@ -/*! -* \file gd_loader_bssanimepack.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_LOADER_BSSANIMEPACK_H -#define GD_LOADER_BSSANIMEPACK_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_loader.h" -#endif - -class GdLoaderBssAnimePack : public ResourceFormatLoader -{ - GDCLASS( GdLoaderBssAnimePack, ResourceFormatLoader ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - - PackedStringArray _get_recognized_extensions(); - - bool _handles_type(const StringName &p_type); - - String _get_resource_type(const String &path); - - Variant _load(const String &p_path, const String &p_original_path, bool use_sub_threads, int32_t cache_mode); -#else -#ifdef GD_V4 - virtual Ref load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_use_sub_threads = false, float* r_progress = nullptr, CacheMode p_cache_mode = CACHE_MODE_REUSE ) override; -#endif -#ifdef GD_V3 - virtual RES load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_no_subresource_cache = false ) override; -#endif - virtual void get_recognized_extensions( List* p_extensions ) const override; - virtual bool handles_type( const String& p_type ) const override; - virtual String get_resource_type( const String& p_path ) const override; -#endif -}; - -#endif // GD_LOADER_BSSANIMEPACK_H diff --git a/gd_spritestudio/gd_loader_bsscellmap.cpp b/gd_spritestudio/gd_loader_bsscellmap.cpp deleted file mode 100644 index 7cfdf26..0000000 --- a/gd_spritestudio/gd_loader_bsscellmap.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! -* \file gd_loader_bsscellmap.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_loader_bsscellmap.h" - -#include "gd_resource_sscellmap.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Variant GdLoaderBssCellMap::_load(const String &p_path, const String &p_original_path, bool use_sub_threads, int32_t cache_mode) -#else -#ifdef GD_V4 -Ref GdLoaderBssCellMap::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_use_sub_threads, float* r_progress, CacheMode p_cache_mode ) -#endif -#ifdef GD_V3 -RES GdLoaderBssCellMap::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_no_subresource_cache ) -#endif -#endif -{ - Ref res = memnew( GdResourceSsCellMap ); - Error err = res->loadFromFile( p_path, p_original_path ); - - if ( err != OK ) { - ERR_PRINT( String( "load error: " ) + String::num( err ) ); - } - -#ifndef SPRITESTUDIO_GODOT_EXTENSION - if ( r_error ) { - *r_error = err; - } -#endif - - return res; -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdLoaderBssCellMap::_get_recognized_extensions() -{ - PackedStringArray extensions; - extensions.push_back("gdssce"); - return extensions; -} -#else -void GdLoaderBssCellMap::get_recognized_extensions( List* p_extensions ) const -{ - if ( !p_extensions->find( "gdssce" ) ) { - p_extensions->push_back( "gdssce" ); - } -} -#endif - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdLoaderBssCellMap::_handles_type(const StringName &p_type) -#else -bool GdLoaderBssCellMap::handles_type( const String& p_type ) const -#endif -{ - return ClassDB::is_parent_class( p_type, "GdResourceSsCellMap" ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -String GdLoaderBssCellMap::_get_resource_type(const String &path) -#else -String GdLoaderBssCellMap::get_resource_type( const String& p_path ) const -#endif -{ - return "GdResourceSsCellMap"; -} diff --git a/gd_spritestudio/gd_loader_bsscellmap.h b/gd_spritestudio/gd_loader_bsscellmap.h deleted file mode 100644 index a255d5c..0000000 --- a/gd_spritestudio/gd_loader_bsscellmap.h +++ /dev/null @@ -1,47 +0,0 @@ -/*! -* \file gd_loader_bsscellmap.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_LOADER_BSSCELLMAP_H -#define GD_LOADER_BSSCELLMAP_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_loader.h" -#endif - -class GdLoaderBssCellMap : public ResourceFormatLoader -{ - GDCLASS( GdLoaderBssCellMap, ResourceFormatLoader ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - - PackedStringArray _get_recognized_extensions(); - - bool _handles_type(const StringName &p_type); - - String _get_resource_type(const String &path); - - Variant _load(const String &p_path, const String &p_original_path, bool use_sub_threads, int32_t cache_mode); -#else -#ifdef GD_V4 - virtual Ref load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_use_sub_threads = false, float* r_progress = nullptr, CacheMode p_cache_mode = CACHE_MODE_REUSE ) override; -#endif -#ifdef GD_V3 - virtual RES load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_no_subresource_cache = false ) override; -#endif - virtual void get_recognized_extensions( List* p_extensions ) const override; - virtual bool handles_type( const String& p_type ) const override; - virtual String get_resource_type( const String& p_path ) const override; -#endif -}; - -#endif // GD_LOADER_BSSCELLMAP_H diff --git a/gd_spritestudio/gd_loader_bsseffect.cpp b/gd_spritestudio/gd_loader_bsseffect.cpp deleted file mode 100644 index 07177ca..0000000 --- a/gd_spritestudio/gd_loader_bsseffect.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! -* \file gd_loader_bsseffect.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_loader_bsseffect.h" - -#include "gd_resource_sseffect.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Variant GdLoaderBssEffect::_load(const String &p_path, const String &p_original_path, bool use_sub_threads, int32_t cache_mode) -#else -#ifdef GD_V4 -Ref GdLoaderBssEffect::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_use_sub_threads, float* r_progress, CacheMode p_cache_mode ) -#endif -#ifdef GD_V3 -RES GdLoaderBssEffect::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_no_subresource_cache ) -#endif -#endif -{ - Ref res = memnew( GdResourceSsEffect ); - Error err = res->loadFromFile( p_path, p_original_path ); - - if ( err != OK ) { - ERR_PRINT( String( "load error: " ) + String::num( err ) ); - } - -#ifndef SPRITESTUDIO_GODOT_EXTENSION - if ( r_error ) { - *r_error = err; - } -#endif - - return res; -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdLoaderBssEffect::_get_recognized_extensions() -{ - PackedStringArray extensions; - extensions.push_back("gdssee"); - return extensions; -} -#else -void GdLoaderBssEffect::get_recognized_extensions( List* p_extensions ) const -{ - if ( !p_extensions->find( "gdssee" ) ) { - p_extensions->push_back( "gdssee" ); - } -} -#endif - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdLoaderBssEffect::_handles_type(const StringName &p_type) -#else -bool GdLoaderBssEffect::handles_type( const String& p_type ) const -#endif -{ - return ClassDB::is_parent_class( p_type, "GdResourceSsEffect" ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -String GdLoaderBssEffect::_get_resource_type(const String &path) -#else -String GdLoaderBssEffect::get_resource_type( const String& p_path ) const -#endif -{ - return "GdResourceSsEffect"; -} diff --git a/gd_spritestudio/gd_loader_bsseffect.h b/gd_spritestudio/gd_loader_bsseffect.h deleted file mode 100644 index ead81c8..0000000 --- a/gd_spritestudio/gd_loader_bsseffect.h +++ /dev/null @@ -1,47 +0,0 @@ -/*! -* \file gd_loader_bsseffect.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_LOADER_BSSEFFECT_H -#define GD_LOADER_BSSEFFECT_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_loader.h" -#endif - -class GdLoaderBssEffect : public ResourceFormatLoader -{ - GDCLASS( GdLoaderBssEffect, ResourceFormatLoader ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - - PackedStringArray _get_recognized_extensions(); - - bool _handles_type(const StringName &p_type); - - String _get_resource_type(const String &path); - - Variant _load(const String &p_path, const String &p_original_path, bool use_sub_threads, int32_t cache_mode); -#else -#ifdef GD_V4 - virtual Ref load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_use_sub_threads = false, float* r_progress = nullptr, CacheMode p_cache_mode = CACHE_MODE_REUSE ) override; -#endif -#ifdef GD_V3 - virtual RES load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_no_subresource_cache = false ) override; -#endif - virtual void get_recognized_extensions( List* p_extensions ) const override; - virtual bool handles_type( const String& p_type ) const override; - virtual String get_resource_type( const String& p_path ) const override; -#endif -}; - -#endif // GD_LOADER_BSSEFFECT_H diff --git a/gd_spritestudio/gd_loader_bssproject.cpp b/gd_spritestudio/gd_loader_bssproject.cpp deleted file mode 100644 index 0cb2b2b..0000000 --- a/gd_spritestudio/gd_loader_bssproject.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! -* \file gd_loader_bssproject.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_loader_bssproject.h" - -#include "gd_resource_ssproject.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Variant GdLoaderBssProject::_load(const String &p_path, const String &p_original_path, bool use_sub_threads, int32_t cache_mode) -#else -#ifdef GD_V4 -Ref GdLoaderBssProject::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_use_sub_threads, float* r_progress, CacheMode p_cache_mode ) -#endif -#ifdef GD_V3 -RES GdLoaderBssProject::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_no_subresource_cache ) -#endif -#endif -{ - Ref res = memnew( GdResourceSsProject ); - Error err = res->loadFromFile( p_path, p_original_path ); - - if ( err != OK ) { - ERR_PRINT( String( "load error: " ) + String::num( err ) ); - } - -#ifndef SPRITESTUDIO_GODOT_EXTENSION - if ( r_error ) { - *r_error = err; - } -#endif - - return res; -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdLoaderBssProject::_get_recognized_extensions() -{ - PackedStringArray extensions; - extensions.push_back("gdsspj"); - return extensions; -} -#else -void GdLoaderBssProject::get_recognized_extensions( List* p_extensions ) const -{ - if ( !p_extensions->find( "gdsspj" ) ) { - p_extensions->push_back( "gdsspj" ); - } -} -#endif - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdLoaderBssProject::_handles_type(const StringName &p_type) -#else -bool GdLoaderBssProject::handles_type( const String& p_type ) const -#endif -{ - return ClassDB::is_parent_class( p_type, "GdResourceSsProject" ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -String GdLoaderBssProject::_get_resource_type(const String &path) -#else -String GdLoaderBssProject::get_resource_type( const String& p_path ) const -#endif -{ - return "GdResourceSsProject"; -} diff --git a/gd_spritestudio/gd_loader_bssproject.h b/gd_spritestudio/gd_loader_bssproject.h deleted file mode 100644 index ae9bd2e..0000000 --- a/gd_spritestudio/gd_loader_bssproject.h +++ /dev/null @@ -1,47 +0,0 @@ -/*! -* \file gd_loader_bssproject.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_LOADER_BSSPROJECT_H -#define GD_LOADER_BSSPROJECT_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_loader.h" -#endif - -class GdLoaderBssProject : public ResourceFormatLoader -{ - GDCLASS( GdLoaderBssProject, ResourceFormatLoader ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - - PackedStringArray _get_recognized_extensions(); - - bool _handles_type(const StringName &p_type); - - String _get_resource_type(const String &path); - - Variant _load(const String &p_path, const String &p_original_path, bool use_sub_threads, int32_t cache_mode); -#else -#ifdef GD_V4 - virtual Ref load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_use_sub_threads = false, float* r_progress = nullptr, CacheMode p_cache_mode = CACHE_MODE_REUSE ) override; -#endif -#ifdef GD_V3 - virtual RES load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_no_subresource_cache = false ) override; -#endif - virtual void get_recognized_extensions( List* p_extensions ) const override; - virtual bool handles_type( const String& p_type ) const override; - virtual String get_resource_type( const String& p_path ) const override; -#endif -}; - -#endif // GD_LOADER_BSSPROJECT_H diff --git a/gd_spritestudio/gd_loader_ssanimepack.cpp b/gd_spritestudio/gd_loader_ssanimepack.cpp deleted file mode 100644 index a53b8e4..0000000 --- a/gd_spritestudio/gd_loader_ssanimepack.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! -* \file gd_loader_ssanimepack.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_loader_ssanimepack.h" - -#include "gd_resource_ssanimepack.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Variant GdLoaderSsAnimePack::_load(const String &p_path, const String &p_original_path, bool p_use_sub_threads, int32_t p_cache_mode) -#else -#ifdef GD_V4 -Ref GdLoaderSsAnimePack::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_use_sub_threads, float* r_progress, CacheMode p_cache_mode ) -#endif -#ifdef GD_V3 -RES GdLoaderSsAnimePack::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_no_subresource_cache ) -#endif -#endif -{ - Ref res = memnew( GdResourceSsAnimePack ); - Error err = res->loadFromFile( p_path, p_original_path ); - - if ( err != OK ) { - ERR_PRINT( String( "load error: " ) + String::num( err ) ); - } - -#ifndef SPRITESTUDIO_GODOT_EXTENSION - if ( r_error ) { - *r_error = err; - } -#endif - - return res; -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdLoaderSsAnimePack::_get_recognized_extensions() -{ - PackedStringArray extensions; - extensions.push_back("ssae"); - return extensions; -} -#else -void GdLoaderSsAnimePack::get_recognized_extensions( List* p_extensions ) const -{ - if ( !p_extensions->find( "ssae" ) ) { - p_extensions->push_back( "ssae" ); - } -} -#endif - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdLoaderSsAnimePack::_handles_type(const StringName &p_type) -#else -bool GdLoaderSsAnimePack::handles_type( const String& p_type ) const -#endif -{ - return ClassDB::is_parent_class( p_type, "GdResourceSsAnimePack" ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -String GdLoaderSsAnimePack::_get_resource_type(const String &p_path) -#else -String GdLoaderSsAnimePack::get_resource_type( const String& p_path ) const -#endif -{ - return "GdResourceSsAnimePack"; -} diff --git a/gd_spritestudio/gd_loader_ssanimepack.h b/gd_spritestudio/gd_loader_ssanimepack.h deleted file mode 100644 index 593204c..0000000 --- a/gd_spritestudio/gd_loader_ssanimepack.h +++ /dev/null @@ -1,47 +0,0 @@ -/*! -* \file gd_loader_ssanimepack.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_LOADER_SSANIMEPACK_H -#define GD_LOADER_SSANIMEPACK_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_loader.h" -#endif - -class GdLoaderSsAnimePack : public ResourceFormatLoader -{ - GDCLASS( GdLoaderSsAnimePack, ResourceFormatLoader ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - - PackedStringArray _get_recognized_extensions(); - - bool _handles_type(const StringName &p_type); - - String _get_resource_type(const String &p_path); - - Variant _load(const String &p_path, const String &p_original_path, bool p_use_sub_threads, int32_t p_cache_mode); -#else -#ifdef GD_V4 - virtual Ref load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_use_sub_threads = false, float* r_progress = nullptr, CacheMode p_cache_mode = CACHE_MODE_REUSE ) override; -#endif -#ifdef GD_V3 - virtual RES load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_no_subresource_cache = false ) override; -#endif - virtual void get_recognized_extensions( List* p_extensions ) const override; - virtual bool handles_type( const String& p_type ) const override; - virtual String get_resource_type( const String& p_path ) const override; -#endif -}; - -#endif // GD_LOADER_SSANIMEPACK_H diff --git a/gd_spritestudio/gd_loader_sscellmap.cpp b/gd_spritestudio/gd_loader_sscellmap.cpp deleted file mode 100644 index 31f1f77..0000000 --- a/gd_spritestudio/gd_loader_sscellmap.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! -* \file gd_loader_sscellmap.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_loader_sscellmap.h" - -#include "gd_resource_sscellmap.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Variant GdLoaderSsCellMap::_load(const String &p_path, const String &p_original_path, bool p_use_sub_threads, int32_t p_cache_mode) -#else -#ifdef GD_V4 -Ref GdLoaderSsCellMap::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_use_sub_threads, float* r_progress, CacheMode p_cache_mode ) -#endif -#ifdef GD_V3 -RES GdLoaderSsCellMap::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_no_subresource_cache ) -#endif -#endif -{ - Ref res = memnew( GdResourceSsCellMap ); - Error err = res->loadFromFile( p_path, p_original_path ); - - if ( err != OK ) { - ERR_PRINT( String( "load error: " ) + String::num( err ) ); - } - -#ifndef SPRITESTUDIO_GODOT_EXTENSION - if ( r_error ) { - *r_error = err; - } -#endif - - return res; -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdLoaderSsCellMap::_get_recognized_extensions() -{ - PackedStringArray extensions; - extensions.push_back("ssce"); - return extensions; -} -#else -void GdLoaderSsCellMap::get_recognized_extensions( List* p_extensions ) const -{ - if ( !p_extensions->find( "ssce" ) ) { - p_extensions->push_back( "ssce" ); - } -} -#endif - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdLoaderSsCellMap::_handles_type(const StringName &p_type) -#else -bool GdLoaderSsCellMap::handles_type( const String& p_type ) const -#endif -{ - return ClassDB::is_parent_class( p_type, "GdResourceSsCellMap" ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -String GdLoaderSsCellMap::_get_resource_type(const String &p_path) -#else -String GdLoaderSsCellMap::get_resource_type( const String& p_path ) const -#endif -{ - return "GdResourceSsCellMap"; -} diff --git a/gd_spritestudio/gd_loader_sscellmap.h b/gd_spritestudio/gd_loader_sscellmap.h deleted file mode 100644 index f6e324d..0000000 --- a/gd_spritestudio/gd_loader_sscellmap.h +++ /dev/null @@ -1,47 +0,0 @@ -/*! -* \file gd_loader_sscellmap.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_LOADER_SSCELLMAP_H -#define GD_LOADER_SSCELLMAP_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_loader.h" -#endif - -class GdLoaderSsCellMap : public ResourceFormatLoader -{ - GDCLASS( GdLoaderSsCellMap, ResourceFormatLoader ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - - PackedStringArray _get_recognized_extensions(); - - bool _handles_type(const StringName &p_type); - - String _get_resource_type(const String &path); - - Variant _load(const String &p_path, const String &p_original_path = "", bool p_use_sub_threads = false, int32_t p_cache_mode = CACHE_MODE_REUSE); -#else -#ifdef GD_V4 - virtual Ref load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_use_sub_threads = false, float* r_progress = nullptr, CacheMode p_cache_mode = CACHE_MODE_REUSE ) override; -#endif -#ifdef GD_V3 - virtual RES load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_no_subresource_cache = false ) override; -#endif - virtual void get_recognized_extensions( List* p_extensions ) const override; - virtual bool handles_type( const String& p_type ) const override; - virtual String get_resource_type( const String& p_path ) const override; -#endif -}; - -#endif // GD_LOADER_SSCELLMAP_H diff --git a/gd_spritestudio/gd_loader_sseffect.cpp b/gd_spritestudio/gd_loader_sseffect.cpp deleted file mode 100644 index 732df45..0000000 --- a/gd_spritestudio/gd_loader_sseffect.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/*! -* \file gd_loader_sseffect.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_loader_sseffect.h" - -#include "gd_resource_sseffect.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Variant GdLoaderSsEffect::_load(const String &p_path, const String &p_original_path, bool p_use_sub_threads, int32_t p_cache_mode) -#else -#ifdef GD_V4 -Ref GdLoaderSsEffect::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_use_sub_threads, float* r_progress, CacheMode p_cache_mode ) -#endif -#ifdef GD_V3 -RES GdLoaderSsEffect::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_no_subresource_cache ) -#endif -#endif -{ - Ref res = memnew( GdResourceSsEffect ); - Error err = res->loadFromFile( p_path, p_original_path ); - - if ( err != OK ) { - ERR_PRINT( String( "load error: " ) + String::num( err ) ); - } - -#ifndef SPRITESTUDIO_GODOT_EXTENSION - if ( r_error ) { - *r_error = err; - } -#endif - - return res; -} - - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdLoaderSsEffect::_get_recognized_extensions() -{ - PackedStringArray extensions; - extensions.push_back("ssee"); - return extensions; -} -#else -void GdLoaderSsEffect::get_recognized_extensions( List* p_extensions ) const -{ - if ( !p_extensions->find( "ssee" ) ) { - p_extensions->push_back( "ssee" ); - } -} -#endif - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdLoaderSsEffect::_handles_type(const StringName &p_type) -#else -bool GdLoaderSsEffect::handles_type( const String& p_type ) const -#endif -{ - return ClassDB::is_parent_class( p_type, "GdResourceSsEffect" ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -String GdLoaderSsEffect::_get_resource_type(const String &p_path) -#else -String GdLoaderSsEffect::get_resource_type( const String& p_path ) const -#endif -{ - return "GdResourceSsEffect"; -} diff --git a/gd_spritestudio/gd_loader_sseffect.h b/gd_spritestudio/gd_loader_sseffect.h deleted file mode 100644 index 9587e18..0000000 --- a/gd_spritestudio/gd_loader_sseffect.h +++ /dev/null @@ -1,47 +0,0 @@ -/*! -* \file gd_loader_sseffect.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_LOADER_SSEFFECT_H -#define GD_LOADER_SSEFFECT_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_loader.h" -#endif - -class GdLoaderSsEffect : public ResourceFormatLoader -{ - GDCLASS( GdLoaderSsEffect, ResourceFormatLoader ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - - PackedStringArray _get_recognized_extensions(); - - bool _handles_type(const StringName &p_type); - - String _get_resource_type(const String &path); - - Variant _load(const String &p_path, const String &p_original_path, bool use_sub_threads, int32_t cache_mode); -#else -#ifdef GD_V4 - virtual Ref load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_use_sub_threads = false, float* r_progress = nullptr, CacheMode p_cache_mode = CACHE_MODE_REUSE ) override; -#endif -#ifdef GD_V3 - virtual RES load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_no_subresource_cache = false ) override; -#endif - virtual void get_recognized_extensions( List* p_extensions ) const override; - virtual bool handles_type( const String& p_type ) const override; - virtual String get_resource_type( const String& p_path ) const override; -#endif -}; - -#endif // GD_LOADER_SSEFFECT_H diff --git a/gd_spritestudio/gd_loader_ssproject.cpp b/gd_spritestudio/gd_loader_ssproject.cpp deleted file mode 100644 index 6ea903b..0000000 --- a/gd_spritestudio/gd_loader_ssproject.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/*! -* \file gd_loader_ssproject.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_loader_ssproject.h" - -#include "gd_resource_ssproject.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Variant GdLoaderSsProject::_load(const String &p_path, const String &p_original_path, bool use_sub_threads, int32_t cache_mode) -#else -#ifdef GD_V4 -Ref GdLoaderSsProject::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_use_sub_threads, float* r_progress, CacheMode p_cache_mode ) -#endif -#ifdef GD_V3 -RES GdLoaderSsProject::load( const String& p_path, const String& p_original_path, Error* r_error, bool p_no_subresource_cache ) -#endif -#endif -{ - Ref res = memnew( GdResourceSsProject ); - Error err = res->loadFromFile( p_path, p_original_path ); - - if ( err != OK ) { - ERR_PRINT( String( "load error: " ) + String::num( err ) ); - } - -#ifndef SPRITESTUDIO_GODOT_EXTENSION - if ( r_error ) { - *r_error = err; - } -#endif - - return res; -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdLoaderSsProject::_get_recognized_extensions() -{ - PackedStringArray extensions; - extensions.push_back("sspj"); - return extensions; -} -#else -void GdLoaderSsProject::get_recognized_extensions( List* p_extensions ) const -{ - if ( !p_extensions->find( "sspj" ) ) { - p_extensions->push_back( "sspj" ); - } -} -#endif - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdLoaderSsProject::_handles_type(const StringName &p_type) -#else -bool GdLoaderSsProject::handles_type( const String& p_type ) const -#endif -{ - return ClassDB::is_parent_class( p_type, "GdResourceSsProject" ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -String GdLoaderSsProject::_get_resource_type(const String &path) -#else -String GdLoaderSsProject::get_resource_type( const String& p_path ) const -#endif -{ - return "GdResourceSsProject"; -} diff --git a/gd_spritestudio/gd_loader_ssproject.h b/gd_spritestudio/gd_loader_ssproject.h deleted file mode 100644 index 7d30dba..0000000 --- a/gd_spritestudio/gd_loader_ssproject.h +++ /dev/null @@ -1,47 +0,0 @@ -/*! -* \file gd_loader_ssproject.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_LOADER_SSPROJECT_H -#define GD_LOADER_SSPROJECT_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_loader.h" -#endif - -class GdLoaderSsProject : public ResourceFormatLoader -{ - GDCLASS( GdLoaderSsProject, ResourceFormatLoader ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - - PackedStringArray _get_recognized_extensions(); - - bool _handles_type(const StringName &p_type); - - String _get_resource_type(const String &path); - - Variant _load(const String &p_path, const String &p_original_path, bool use_sub_threads, int32_t cache_mode); -#else -#ifdef GD_V4 - virtual Ref load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_use_sub_threads = false, float* r_progress = nullptr, CacheMode p_cache_mode = CACHE_MODE_REUSE ) override; -#endif -#ifdef GD_V3 - virtual RES load( const String& p_path, const String& p_original_path = "", Error* r_error = nullptr, bool p_no_subresource_cache = false ) override; -#endif - virtual void get_recognized_extensions( List* p_extensions ) const override; - virtual bool handles_type( const String& p_type ) const override; - virtual String get_resource_type( const String& p_path ) const override; -#endif -}; - -#endif // GD_LOADER_SSPROJECT_H diff --git a/gd_spritestudio/gd_macros.h b/gd_spritestudio/gd_macros.h index 91c7c9d..a1c82b2 100644 --- a/gd_spritestudio/gd_macros.h +++ b/gd_spritestudio/gd_macros.h @@ -1,4 +1,4 @@ -/*! +/*! * \file gd_macros.h * \author CRI Middleware Co., Ltd. */ @@ -13,28 +13,13 @@ #else #include "core/version.h" #if VERSION_MAJOR>=4 - #define GD_V4 //!< バヌゞョン4.xのgodotが䜿甚されおいたす。 + #define GD_V4 #define EMPTY(x) ((x).is_empty()) #define VARIANT_FLOAT Variant::FLOAT #define NOTIFY_PROPERTY_LIST_CHANGED() notify_property_list_changed() - #elif VERSION_MAJOR>=3 - #define GD_V3 //!< バヌゞョン3.xのgodotが䜿甚されおいたす。 - #define EMPTY(x) ((x).empty()) - #define VARIANT_FLOAT Variant::REAL - #define NOTIFY_PROPERTY_LIST_CHANGED() property_list_changed_notify() #else #error not supported godot version. #endif #endif - -/*! -* 次の関数はObject掟生クラスでオヌバヌラむドできたす。 -* これらの関数は仮想ではありたせん。仮想にしないでください。 -* オヌバヌラむドのたびに呌び出され、前の関数は無効になりたせん(倚重レベル呌出し)。 -*/ -#define GdMultilevelCall - -#define GdUiText( _a ) _a - -#endif // GD_MACROS_H +#endif // GD_MACROS_H \ No newline at end of file diff --git a/gd_spritestudio/gd_node_ssplayer.cpp b/gd_spritestudio/gd_node_ssplayer.cpp deleted file mode 100644 index 2548170..0000000 --- a/gd_spritestudio/gd_node_ssplayer.cpp +++ /dev/null @@ -1,1014 +0,0 @@ -/*! -* \file gd_node_ssplayer.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_node_ssplayer.h" - -#include "SpriteStudio6-SDK/Common/Animator/ssplayer_render.h" - -#include "ss_macros.h" -#include "ss_loader_texture_impl.h" -#include "ss_texture_impl.h" -#include "gd_notifier.h" - -SsSdkUsing - -static SsTextureImpl s_TextureLoader; -static SSTextureFactory s_TextureFactory( &s_TextureLoader, false ); - -GdNodeSsPlayer::GdNodeSsPlayer() -: m_strAnimePackSelected( "" ) -, m_strAnimationSelected( "" ) -, m_iFrame( 0 ) -, m_fDelta( 0.0f ) -, m_iLive( 0 ) -, m_pLive( NULL ) -, m_bLoop( false ) -, m_bPlay( false ) -, m_bPause( false ) -, m_bTextureInterpolate( true ) -{ - GdNotifier::getInstance().addItem( this ); - - SsLoaderTextureImpl::setCallbacks(); - - m_Renderer.m_iSetup = 0; - SsCurrentRenderer::SetCurrentRender( &m_Renderer ); - - m_bAnimeDecoder = false; - m_AnimeDecoder.reset( new SsAnimeDecoder() ); - - m_CellMapList.reset( new SsCellMapList() ); -} - -GdNodeSsPlayer::~GdNodeSsPlayer() -{ - GdNotifier::getInstance().removeItem( this ); - - m_Renderer.m_iSetup = 0; - SsCurrentRenderer::SetCurrentRender( &m_Renderer ); - - // 二重解攟察策SsAnimeDecoder 偎に生ポむンタの所有暩を枡しおいない堎合に限り解攟する。 - if (m_bAnimeDecoder) - { - // 解攟のみ - m_CellMapList.release(); - } - else - { - // ここで削陀 - m_CellMapList.reset(); - } - - m_bAnimeDecoder = false; - m_AnimeDecoder.reset(); - //m_CellMapList.reset(); - - m_bAnimeDecoder = false; - //m_AnimeDecoder = 0; - //m_CellMapList = 0; -} - -void GdNodeSsPlayer::resourcePlayerChanged( const Ref& resPlayer ) -{ - fetchAnimation(); - - NOTIFY_PROPERTY_LIST_CHANGED(); -} - -void GdNodeSsPlayer::resourceProjectChanged( const Ref& resProject ) -{ - fetchAnimation(); - - NOTIFY_PROPERTY_LIST_CHANGED(); -} - -void GdNodeSsPlayer::resourceAnimePackChanged( const Ref& resAnimePack ) -{ - fetchAnimation(); - - NOTIFY_PROPERTY_LIST_CHANGED(); -} - -void GdNodeSsPlayer::resourceCellMapChanged( const Ref& resCellMap ) -{ - fetchAnimation(); - - NOTIFY_PROPERTY_LIST_CHANGED(); -} - -void GdNodeSsPlayer::setPlayerResource( const Ref& resPlayer ) -{ - m_ResPlayer = resPlayer; - - m_strAnimationSelected = ""; - fetchAnimation(); - - NOTIFY_PROPERTY_LIST_CHANGED(); -} - -Ref GdNodeSsPlayer::getPlayerResource() const -{ - return m_ResPlayer; -} - -void GdNodeSsPlayer::setAnimePack( const String& strName ) -{ - m_strAnimePackSelected = strName; - - Ref resProject = m_ResPlayer->getProjectResource(); - Ref resAnimePack; - - if ( !resProject.is_null() ) { - resAnimePack = resProject->getAnimePackResource( m_strAnimePackSelected ); - } - - m_ResAnimePack = resAnimePack; - - if ( m_ResAnimePack.is_null() ) { - ERR_PRINT( "AnimePack Load Error : " + m_strAnimePackSelected ); - return; - } - - postAnimePackChanged( m_strAnimePackSelected ); - - m_strAnimationSelected = ""; - fetchAnimation(); - - NOTIFY_PROPERTY_LIST_CHANGED(); -} - -String GdNodeSsPlayer::getAnimePack() const -{ - return m_strAnimePackSelected; -} - -void GdNodeSsPlayer::setAnimation( const String& strName ) -{ - m_strAnimationSelected = strName; - - postAnimationChanged( m_strAnimationSelected ); - - fetchAnimation(); - - NOTIFY_PROPERTY_LIST_CHANGED(); -} - -String GdNodeSsPlayer::getAnimation() const -{ - return m_strAnimationSelected; -} - -void GdNodeSsPlayer::setFrame( int iFrame ) -{ - m_iFrame = iFrame; - - if ( m_ResAnimePack.is_null() ) { - return; - } - - auto c = m_strAnimationSelected.utf8(); - SsString strAnimationName = c.ptr() ? SsString( c.ptr() ) : SsString( "" ); - SsAnimePack* pAnimePack = m_ResAnimePack->getAnimePack(); - - if ( !pAnimePack ) { - return; - } - - SsAnimation* pAnimation = pAnimePack->findAnimation( strAnimationName ); - - if ( pAnimation ) { - int iRange = pAnimation->settings.endFrame - pAnimation->settings.startFrame + 1; - int iRel = iFrame - pAnimation->settings.startFrame; - - while ( iRel < 0 ) { - iRel += iRange; - } - while ( iRel >= iRange ) { - iRel -= iRange; - } - - iFrame = iRel + pAnimation->settings.startFrame; - } - - if ( m_bAnimeDecoder && m_AnimeDecoder ) { - m_Renderer.m_iSetup = 0; - SsCurrentRenderer::SetCurrentRender( &m_Renderer ); - - m_AnimeDecoder->setPlayFrame( iFrame ); - - auto mapUserData = m_Renderer.getUserData(); - - if ( mapUserData.find( iFrame ) != mapUserData.end() ) { - auto userData = mapUserData[iFrame]; - int iFlag; - int iIntValue; - Rect2 rectValue; - Point2 pointValue; - String strStringValue; - - iFlag = 0; - if ( userData.useInteger ) iFlag |= 0x01; - if ( userData.useRect ) iFlag |= 0x02; - if ( userData.usePoint ) iFlag |= 0x04; - if ( userData.useString ) iFlag |= 0x08; - - iIntValue = userData.integer; - - rectValue.position.x = userData.rect.x; - rectValue.position.y = userData.rect.y; - rectValue.size.width = userData.rect.w; - rectValue.size.height = userData.rect.h; - - pointValue.x = userData.point.x; - pointValue.y = userData.point.y; - - strStringValue = String::utf8( userData.string.c_str() ); - - postUserData( iFlag, iIntValue, rectValue, pointValue, strStringValue ); - } - - auto mapSignal = m_Renderer.getSignal(); - - if ( mapSignal.find( iFrame ) != mapSignal.end() ) { - auto signalAttr = mapSignal[iFrame]; - - const std::vector& vec = signalAttr.commands; - - for ( int j = 0; j < vec.size(); j++ ) { - const SsSignalCommand& command = vec.at( j ); - String strCommandId = String::utf8( command.commandId.c_str() ); - - if ( command.active ) { - Dictionary dic; - - for ( int k = 0; k < command.params.size(); k++ ) { - const SsSignalParam& param = command.params.at( k ); - String strParamId = String::utf8( param.paramId.c_str() ); - - switch ( static_cast(param.type) ) { - case SsSignalParamType::index : - case SsSignalParamType::integer : - dic[strParamId] = Variant( param.value.i ); - break; - case SsSignalParamType::floating : - dic[strParamId] = Variant( param.value.f ); - break; - } - } - - postSignal( strCommandId, dic ); - } - } - } - } - - postFrameChanged( m_iFrame ); -} - -int GdNodeSsPlayer::getFrame() const -{ - return m_iFrame; -} - -int GdNodeSsPlayer::getStartFrame() const -{ - if ( !m_ResAnimePack.is_null() ) { - auto c = m_strAnimationSelected.utf8(); - SsString strAnimationName = c.ptr() ? SsString( c.ptr() ) : SsString( "" ); - SsAnimePack* pAnimePack = m_ResAnimePack->getAnimePack(); - - if ( !pAnimePack ) { - return 0; - } - - SsAnimation* pAnimation = pAnimePack->findAnimation( strAnimationName ); - - if ( pAnimation ) { - return pAnimation->settings.startFrame; - } - } - - return 0; -} - -int GdNodeSsPlayer::getEndFrame() const -{ - if ( !m_ResAnimePack.is_null() ) { - auto c = m_strAnimationSelected.utf8(); - SsString strAnimationName = c.ptr() ? SsString( c.ptr() ) : SsString( "" ); - SsAnimePack* pAnimePack = m_ResAnimePack->getAnimePack(); - - if ( !pAnimePack ) { - return 0; - } - - SsAnimation* pAnimation = pAnimePack->findAnimation( strAnimationName ); - - if ( pAnimation ) { - return pAnimation->settings.endFrame; - } - } - - return 0; -} - -int GdNodeSsPlayer::getFps() const -{ - if ( !m_ResAnimePack.is_null() ) { - auto c = m_strAnimationSelected.utf8(); - SsString strAnimationName = c.ptr() ? SsString( c.ptr() ) : SsString( "" ); - SsAnimePack* pAnimePack = m_ResAnimePack->getAnimePack(); - - if ( !pAnimePack ) { - return 0; - } - - SsAnimation* pAnimation = pAnimePack->findAnimation( strAnimationName ); - - if ( pAnimation ) { - return pAnimation->settings.fps; - } - } - - return 0; -} - -void GdNodeSsPlayer::setTextureInterpolate( bool bSwitch ) -{ - m_bTextureInterpolate = bSwitch; -} - -bool GdNodeSsPlayer::getTextureInterpolate() const -{ - return m_bTextureInterpolate; -} - -void GdNodeSsPlayer::setLoop( bool bLoop ) -{ - m_bLoop = bLoop; -} - -bool GdNodeSsPlayer::getLoop() const -{ - return m_bLoop; -} - -void GdNodeSsPlayer::setPlay( bool bPlay ) -{ - m_bPlay = bPlay; - - if ( bPlay ) { - int iFrame = getFrame(); - int iRange = getEndFrame() - getStartFrame() + 1; - - if ( false ) { - if ( iFrame <= getStartFrame() ) { - while ( iFrame <= getStartFrame() ) { - iFrame += iRange; - } - setFrame( iFrame ); - } - }else{ - if ( iFrame >= getEndFrame() ) { - while ( iFrame >= getEndFrame() ) { - iFrame -= iRange; - } - setFrame( iFrame ); - } - } - - pause( false ); - } - - if ( m_AnimeDecoder ) { - std::vector& anim = m_AnimeDecoder->getPartAnime(); - - if ( m_pLive && anim.size() != m_iLive ) { - delete[] m_pLive; - m_pLive = NULL; - } - m_iLive = anim.size(); - if ( !m_pLive && m_iLive ) { - m_pLive = new float[m_iLive]; - } - if ( m_pLive && m_iLive ) { - memset( m_pLive, 0, sizeof( float ) * m_iLive ); - } - } -} - -bool GdNodeSsPlayer::getPlay() const -{ - return m_bPlay; -} - -void GdNodeSsPlayer::play() -{ - setFrame( 0 ); - setPlay( true ); -} - -void GdNodeSsPlayer::pause( bool b ) -{ - m_bPause = b; -} - -void GdNodeSsPlayer::stop() -{ - setPlay( false ); - setFrame( 0 ); -} - -void GdNodeSsPlayer::_bind_methods() -{ - ClassDB::bind_method( D_METHOD( "set_player_resource", "res_player" ), &GdNodeSsPlayer::setPlayerResource ); - ClassDB::bind_method( D_METHOD( "get_player_resource" ), &GdNodeSsPlayer::getPlayerResource ); - ClassDB::bind_method( D_METHOD( "set_anime_pack", "name" ), &GdNodeSsPlayer::setAnimePack ); - ClassDB::bind_method( D_METHOD( "get_anime_pack" ), &GdNodeSsPlayer::getAnimePack ); - ClassDB::bind_method( D_METHOD( "set_animation", "name" ), &GdNodeSsPlayer::setAnimation ); - ClassDB::bind_method( D_METHOD( "get_animation" ), &GdNodeSsPlayer::getAnimation ); - ClassDB::bind_method( D_METHOD( "set_frame", "frame" ), &GdNodeSsPlayer::setFrame ); - ClassDB::bind_method( D_METHOD( "get_frame" ), &GdNodeSsPlayer::getFrame ); - ClassDB::bind_method( D_METHOD( "get_start_frame" ), &GdNodeSsPlayer::getStartFrame ); - ClassDB::bind_method( D_METHOD( "get_end_frame" ), &GdNodeSsPlayer::getEndFrame ); - ClassDB::bind_method( D_METHOD( "get_fps" ), &GdNodeSsPlayer::getFps ); - ClassDB::bind_method( D_METHOD( "set_loop", "loop" ), &GdNodeSsPlayer::setLoop ); - ClassDB::bind_method( D_METHOD( "get_loop" ), &GdNodeSsPlayer::getLoop ); - ClassDB::bind_method( D_METHOD( "set_play", "play" ), &GdNodeSsPlayer::setPlay ); - ClassDB::bind_method( D_METHOD( "get_play" ), &GdNodeSsPlayer::getPlay ); - ClassDB::bind_method( D_METHOD( "set_texture_interpolate", "interpolate" ), &GdNodeSsPlayer::setTextureInterpolate ); - ClassDB::bind_method( D_METHOD( "get_texture_interpolate" ), &GdNodeSsPlayer::getTextureInterpolate ); - ClassDB::bind_method( D_METHOD( "play" ), &GdNodeSsPlayer::play ); - ClassDB::bind_method( D_METHOD( "pause", "b" ), &GdNodeSsPlayer::pause ); - ClassDB::bind_method( D_METHOD( "stop" ), &GdNodeSsPlayer::stop ); - - ADD_SIGNAL( MethodInfo( "anime_pack_changed", PropertyInfo( Variant::STRING, GdUiText( "name" ) ) ) ); - ADD_SIGNAL( MethodInfo( "animation_changed", PropertyInfo( Variant::STRING, GdUiText( "name" ) ) ) ); - ADD_SIGNAL( MethodInfo( "animation_finished", PropertyInfo( Variant::STRING, GdUiText( "name" ) ) ) ); - ADD_SIGNAL( MethodInfo( "frame_changed", PropertyInfo( Variant::INT, GdUiText( "frame" ) ) ) ); - - ADD_SIGNAL( - MethodInfo( - "user_data", - PropertyInfo( - Variant::INT, - GdUiText( "flag" ) - ), - PropertyInfo( - Variant::INT, - GdUiText( "int_value" ) - ), - PropertyInfo( - Variant::RECT2, - GdUiText( "rect_value" ) - ), - PropertyInfo( - Variant::VECTOR2, - GdUiText( "point_value" ) - ), - PropertyInfo( - Variant::STRING, - GdUiText( "string_value" ) - ) - ) - ); - ADD_SIGNAL( - MethodInfo( - "signal", - PropertyInfo( - Variant::STRING, - GdUiText( "command" ) - ), - PropertyInfo( - Variant::DICTIONARY, - GdUiText( "value" ) - ) - ) - ); - - ADD_PROPERTY( - PropertyInfo( - Variant::OBJECT, - GdUiText( "res_player" ), - PropertyHint::PROPERTY_HINT_RESOURCE_TYPE, - "GdResourceSsPlayer" - ), - "set_player_resource", - "get_player_resource" - ); - - ADD_GROUP( GdUiText( "Animation Settings" ), "" ); -} - -bool GdNodeSsPlayer::_set( const StringName& p_name, const Variant& p_property ) -{ - if ( p_name == StringName(GdUiText( "anime_pack" )) ) { - setAnimePack( p_property ); - - if ( !m_ResAnimePack.is_null() ) { - SsAnimePack* pAnimePack = m_ResAnimePack->getAnimePack(); - - if ( !pAnimePack ) { - return true; - } - - const std::vector& listAnimation = pAnimePack->animeList; - - for ( int i = 0; i < listAnimation.size(); i++ ) { - SsAnimation* pAnimation = listAnimation[i]; - - if ( !pAnimation->isSetup ) { - String strName = String::utf8( pAnimation->name.c_str() ); - - setAnimation( strName ); - break; - } - } - } - - return true; - }else - if ( p_name == StringName(GdUiText( "animation" )) ) { - setAnimation( p_property ); - - return true; - }else - if ( p_name == StringName(GdUiText( "frame" )) ) { - setFrame( p_property ); - - return true; - }else - if ( p_name == StringName(GdUiText( "loop" )) ) { - setLoop( p_property ); - - return true; - }else - if ( p_name == StringName(GdUiText( "playing" )) ) { - setPlay( p_property ); - - return true; - } - if ( p_name == StringName(GdUiText( "texture_interpolate" )) ) { - setTextureInterpolate( p_property ); - - return true; - } - - return false; -} - -bool GdNodeSsPlayer::_get( const StringName& p_name, Variant& r_property ) const -{ - if ( p_name == StringName(GdUiText( "anime_pack" )) ) { - r_property = getAnimePack(); - - return true; - }else - if ( p_name == StringName(GdUiText( "animation" )) ) { - r_property = getAnimation(); - - return true; - }else - if ( p_name == StringName(GdUiText( "frame" )) ) { - r_property = getFrame(); - - return true; - }else - if ( p_name == StringName(GdUiText( "loop" )) ) { - r_property = getLoop(); - - return true; - }else - if ( p_name == StringName(GdUiText( "playing" )) ) { - r_property = getPlay(); - - return true; - } - if ( p_name == StringName(GdUiText( "texture_interpolate" )) ) { - r_property = getTextureInterpolate(); - - return true; - } - - return false; -} - -void GdNodeSsPlayer::_get_property_list( List* p_list ) const -{ -#ifdef SPRITESTUDIO_GODOT_EXTENSION - PackedStringArray vecAnimePackName; -#else - Vector vecAnimePackName; -#endif - - vecAnimePackName.insert( 0, GdUiText( "-- Empty --" ) ); - - if ( !m_ResPlayer.is_null() ) { - Ref resProject = m_ResPlayer->getProjectResource(); - - if ( !resProject.is_null() ) { - auto vec = resProject->getAnimePackNames(); - - for ( int i = 0; i < vec.size(); i++ ) { -#ifdef SPRITESTUDIO_GODOT_EXTENSION - String str = vec[ i ]; -#else - String str = vec.get( i ); -#endif - - vecAnimePackName.push_back( str ); - } - } - } - - PropertyInfo animePacksPropertyInfo; - - animePacksPropertyInfo.name = GdUiText( "anime_pack" ); - animePacksPropertyInfo.type = Variant::STRING; - animePacksPropertyInfo.usage = PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE; - animePacksPropertyInfo.hint_string = String( "," ).join( vecAnimePackName ); - animePacksPropertyInfo.hint = PROPERTY_HINT_ENUM; - - p_list->push_back( animePacksPropertyInfo ); - - if ( !m_ResAnimePack.is_null() ) { - PropertyInfo animationsPropertyInfo; -#ifdef SPRITESTUDIO_GODOT_EXTENSION - PackedStringArray vecAnimationName = m_ResAnimePack->getAnimationNames(); -#else - Vector vecAnimationName = m_ResAnimePack->getAnimationNames(); -#endif - - animationsPropertyInfo.name = GdUiText( "animation" ); - animationsPropertyInfo.type = Variant::STRING; - animationsPropertyInfo.usage = PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE; - animationsPropertyInfo.hint_string = String( "," ).join( vecAnimationName ); - animationsPropertyInfo.hint = PROPERTY_HINT_ENUM; - - p_list->push_back( animationsPropertyInfo ); - - auto c = m_strAnimationSelected.utf8(); - SsString strAnimationName = c.ptr() ? SsString( c.ptr() ) : SsString( "" ); - SsAnimePack* pAnimePack = m_ResAnimePack->getAnimePack(); - - if ( !pAnimePack ) { - return; - } - - SsAnimation* pAnimation = pAnimePack->findAnimation( strAnimationName ); - - if ( pAnimation ) { -#ifdef SPRITESTUDIO_GODOT_EXTENSION - PackedStringArray vecRange; -#else - Vector vecRange; -#endif - - vecRange.push_back( String::num( pAnimation->settings.startFrame ) ); - vecRange.push_back( String::num( pAnimation->settings.endFrame ) ); - vecRange.push_back( String::num( 0.1 ) ); - - animationsPropertyInfo.name = GdUiText( "frame" ); - animationsPropertyInfo.type = VARIANT_FLOAT; - - animationsPropertyInfo.usage = PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE; - animationsPropertyInfo.hint_string = String( "," ).join( vecRange ); - animationsPropertyInfo.hint = PROPERTY_HINT_RANGE; - - p_list->push_back( animationsPropertyInfo ); - - animationsPropertyInfo.name = GdUiText( "loop" ); - animationsPropertyInfo.type = Variant::BOOL; - animationsPropertyInfo.usage = PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE; - animationsPropertyInfo.hint = PROPERTY_HINT_NONE; - - p_list->push_back( animationsPropertyInfo ); - - animationsPropertyInfo.name = GdUiText( "playing" ); - animationsPropertyInfo.type = Variant::BOOL; - animationsPropertyInfo.usage = PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE; - animationsPropertyInfo.hint = PROPERTY_HINT_NONE; - - p_list->push_back( animationsPropertyInfo ); - - animationsPropertyInfo.name = GdUiText( "texture_interpolate" ); - animationsPropertyInfo.type = Variant::BOOL; - animationsPropertyInfo.usage = PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE; - animationsPropertyInfo.hint = PROPERTY_HINT_NONE; - - p_list->push_back( animationsPropertyInfo ); - } - } -} - -void GdNodeSsPlayer::_notification( int p_notification ) -{ - switch ( p_notification ) { - case NOTIFICATION_READY : - set_process_internal( true ); - - break; - case NOTIFICATION_INTERNAL_PROCESS : - updateAnimation( get_process_delta_time() ); - - break; - case NOTIFICATION_DRAW : - drawAnimation(); - - break; - default : - break; - } -} - -void GdNodeSsPlayer::postAnimePackChanged( const String& strName ) -{ - Error err; - - err = emit_signal( "anime_pack_changed", Variant( strName ) ); -} - -void GdNodeSsPlayer::postAnimationChanged( const String& strName ) -{ - Error err; - - err = emit_signal( "animation_changed", Variant( strName ) ); -} - -void GdNodeSsPlayer::postAnimationFinished( const String& strName ) -{ - Error err; - - err = emit_signal( "animation_finished", Variant( strName ) ); -} - -void GdNodeSsPlayer::postFrameChanged( int iFrame ) -{ - Error err; - - err = emit_signal( "frame_changed", Variant( iFrame ) ); -} - -void GdNodeSsPlayer::postUserData( int iFlag, int iIntValue, const Rect2& rectValue, const Vector2& pointValue, const String& strStringValue ) -{ - Error err; - - err = emit_signal( "user_data", Variant( iFlag ), Variant( iIntValue ), Variant( rectValue ), Variant( pointValue ), Variant( strStringValue ) ); -} - -void GdNodeSsPlayer::postSignal( const String& strName, const Dictionary& dicParam ) -{ - Error err; - - err = emit_signal( "signal", Variant( strName ), Variant( dicParam ) ); -} - -void GdNodeSsPlayer::updateAnimation( float delta ) -{ - int iDelta = 0; - - if ( getPlay() ) { - if ( m_bPause ) { - }else{ - m_fDelta += delta * m_Renderer.getFps(); - - iDelta = (int)m_fDelta; - - if ( iDelta != 0 ) { - int iFrame = getFrame() + iDelta; - int iRange = getEndFrame() - getStartFrame() + 1; - - m_fDelta -= iDelta; - - if ( iFrame < getStartFrame() ) { - if ( getLoop() ) { - while ( iFrame < getStartFrame() ) { - iFrame += iRange; - - postAnimationFinished( m_strAnimationSelected ); - } - }else{ - iFrame = getStartFrame(); - - postAnimationFinished( m_strAnimationSelected ); - - pause( true ); - } - }else - if ( iFrame > getEndFrame() ) { - if ( getLoop() ) { - while ( iFrame > getEndFrame() ) { - iFrame -= iRange; - - postAnimationFinished( m_strAnimationSelected ); - } - }else{ - iFrame = getEndFrame(); - - postAnimationFinished( m_strAnimationSelected ); - - pause( true ); - } - } - - set( "frame", iFrame ); - } - } - } - - if ( iDelta != 0 ) { - std::vector& anim = m_AnimeDecoder->getPartAnime(); - std::vector& stat = m_AnimeDecoder->getPartState(); - - if ( m_pLive && anim.size() != m_iLive ) { - delete[] m_pLive; - m_pLive = NULL; - } - m_iLive = anim.size(); - if ( !m_pLive && m_iLive ) { - m_pLive = new float[m_iLive]; - memset( m_pLive, 0, sizeof( float ) * m_iLive ); - } - - int i = 0; - - for ( auto it = anim.begin(); it != anim.end(); it++ ) { - SsPart* part = it->first; - SsPartAnime* anime = it->second; - SsPartState* state = &stat[i]; - - i++; - - if ( part->type == SsPartType::instance ) { - SsInstanceAttr& attr = state->instanceValue; - - if ( attr.independent ) { - attr.liveFrame -= iDelta * ( attr.speed - 1 ); - }else{ - if ( m_pLive && i < m_iLive ) { - attr.liveFrame = m_pLive[i]; - } - attr.liveFrame += iDelta; - } - - if ( m_pLive && i < m_iLive ) { - m_pLive[i] = attr.liveFrame; - } - }else - if ( part->type == SsPartType::effect ) { - SsEffectAttr& attr = state->effectValue; - - if ( attr.independent ) { - float fNext = state->effectTimeTotal + iDelta * state->effectValue.speed; - - if ( fNext > state->refEffect->getEffectTimeLength() ) { - fNext = state->refEffect->getEffectTimeLength(); - fNext -= iDelta * state->effectValue.speed; - fNext -= 1; - - state->effectTimeTotal = fNext; - } - } - } - } - } - - if ( m_bAnimeDecoder && m_AnimeDecoder ) { - m_Renderer.m_iSetup = 0; - SsCurrentRenderer::SetCurrentRender( &m_Renderer ); - - m_AnimeDecoder->update( iDelta ); - } - -#if defined(GD_V4) || defined(SPRITESTUDIO_GODOT_EXTENSION) - queue_redraw(); -#endif -#ifdef GD_V3 - update(); -#endif -} - -void GdNodeSsPlayer::drawAnimation() -{ - if ( m_bAnimeDecoder && m_AnimeDecoder ) { - m_Renderer.m_iSetup = 0; - SsCurrentRenderer::SetCurrentRender( &m_Renderer ); - - m_AnimeDecoder->draw(); - - m_Renderer.setTextureInterpolate( m_bTextureInterpolate ); - m_Renderer.draw( get_canvas_item() ); - } -} - -void GdNodeSsPlayer::fetchAnimation() -{ - m_bAnimeDecoder = false; - if ( !EMPTY(m_strAnimationSelected) ) { - if ( m_ResPlayer.is_null() ) { - return; - } - if ( m_ResAnimePack.is_null() ) { - return; - } - - Ref resProject = m_ResPlayer->getProjectResource(); - - if ( resProject.is_null() ) { - return; - } - - SsProject* pProject = resProject->getProject(); - - if ( !pProject ) { - return; - } - - auto c = m_strAnimationSelected.utf8(); - SsString strAnimationName = c.ptr() ? SsString( c.ptr() ) : SsString( "" ); - SsAnimePack* pAnimePack = m_ResAnimePack->getAnimePack(); - - if ( !pAnimePack ) { - return; - } - - SsAnimation* pAnimation = pAnimePack->findAnimation( strAnimationName ); - - if ( !pAnimation ) { - return; - } - - if ( !pAnimation ) { - ERR_PRINT( "Select Anime is Null" ); - } - - m_CellMapList->clear(); - - int idx = 0; - - for ( int i = 0; i < pAnimePack->cellmapNames.size(); i++ ) { - Ref resCellMap = resProject->getCellMapResource( pAnimePack->cellmapNames[i] ); - - if ( resCellMap.is_null() ) { - continue; - } - - SsCellMap* pCellMap = resCellMap->getCellMap(); - - if ( pCellMap ) { - m_CellMapList->addIndex( pCellMap ); - m_CellMapList->addMap( pCellMap ); - - ( (SsTextureImpl*)m_CellMapList->getCellMapLink( idx++ )->tex )->setTexture( resCellMap->getTexture() ); - } - } - for ( int i = 0; i < pProject->cellmapNames.size(); i++ ) { - Ref resCellMap = resProject->getCellMapResource( pProject->cellmapNames[i] ); - - if ( resCellMap.is_null() ) { - continue; - } - - SsCellMap* pCellMap = resCellMap->getCellMap(); - - if ( pCellMap ) { - m_CellMapList->addIndex( pCellMap ); - m_CellMapList->addMap( pCellMap ); - - ( (SsTextureImpl*)m_CellMapList->getCellMapLink( idx++ )->tex )->setTexture( resCellMap->getTexture() ); - } - } - - if ( m_AnimeDecoder ) { - m_Renderer.m_iSetup = 0; - SsCurrentRenderer::SetCurrentRender( &m_Renderer ); - - if ( pAnimation ) { - float fW = pAnimation->settings.canvasSize.x; - float fH = pAnimation->settings.canvasSize.y; - float fX = ( pAnimation->settings.pivot.x + 0.5f ) * fW; - float fY = ( pAnimation->settings.pivot.y + 0.5f ) * fH; - int iFps = pAnimation->settings.fps; - - m_Renderer.setCanvasItem( get_canvas_item() ); - m_Renderer.setCanvasSize( fW, fH ); - m_Renderer.setCanvasCenter( fX, fY ); - m_Renderer.setFps( iFps ); -// m_Renderer.setTextureInterpolate( m_bTextureInterpolate ); /* Updated in drawAnimation() */ - } - - m_Renderer.createPartSprites( &pAnimePack->Model, pProject ); - - m_bAnimeDecoder = true; - m_AnimeDecoder->setAnimation( - &pAnimePack->Model, - pAnimation, - m_CellMapList.get(), - pProject - ); - - setFrame( m_iFrame ); - } - } -} diff --git a/gd_spritestudio/gd_node_ssplayer.h b/gd_spritestudio/gd_node_ssplayer.h deleted file mode 100644 index bb8f6fe..0000000 --- a/gd_spritestudio/gd_node_ssplayer.h +++ /dev/null @@ -1,110 +0,0 @@ -/*! -* \file gd_node_ssplayer.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_NODE_SSPLAYER_H -#define GD_NODE_SSPLAYER_H - - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -using namespace godot; -#else -#include "scene/2d/node_2d.h" -#endif - - -#include "SpriteStudio6-SDK/Common/Animator/ssplayer_animedecode.h" - -#include "gd_macros.h" -#include "ss_macros.h" -#include "gd_resource_ssplayer.h" -#include "gd_resource_ssanimepack.h" -#include "ss_renderer_impl.h" -#include "gd_notifier_item.h" - -SsSdkUsing - -class GdNodeSsPlayer : public Node2D, public GdNotifierItem -{ - GDCLASS( GdNodeSsPlayer, Node2D ) - -public : - GdNodeSsPlayer(); - virtual ~GdNodeSsPlayer(); - - virtual void resourcePlayerChanged( const Ref& resPlayer ) override; - virtual void resourceProjectChanged( const Ref& resProject ) override; - virtual void resourceAnimePackChanged( const Ref& resAnimePack ) override; - virtual void resourceCellMapChanged( const Ref& resCellMap ) override; - - void setPlayerResource( const Ref& resPlayer ); - Ref getPlayerResource() const; - - void setAnimePack( const String& strName ); - String getAnimePack() const; - void setAnimation( const String& strName ); - String getAnimation() const; - void setFrame( int iFrame ); - int getFrame() const; - - int getStartFrame() const; - int getEndFrame() const; - int getFps() const; - - void setTextureInterpolate( bool bSwitch ); - bool getTextureInterpolate() const; - - void setLoop( bool bLoop ); - bool getLoop() const; - void setPlay( bool bPlay ); - bool getPlay() const; - void play(); - void pause( bool b ); - void stop(); - -protected : - GdMultilevelCall static void _bind_methods(); - - GdMultilevelCall bool _set( const StringName& p_name, const Variant& p_property ); - GdMultilevelCall bool _get( const StringName& p_name, Variant& r_property ) const; - GdMultilevelCall void _get_property_list( List* p_list ) const; - GdMultilevelCall void _notification( int p_notification ); - -private : - void postAnimePackChanged( const String& strName ); - void postAnimationChanged( const String& strName ); - void postAnimationFinished( const String& strName ); - void postFrameChanged( int iFrame ); - void postUserData( int iFlag, int iIntValue, const Rect2& rectValue, const Vector2& pointValue, const String& strStringValue ); - void postSignal( const String& strName, const Dictionary& dicParam ); - - void updateAnimation( float delta ); - void drawAnimation(); - - void fetchAnimation(); - - Ref m_ResPlayer; - Ref m_ResAnimePack; - - SsRendererImpl m_Renderer; - - bool m_bAnimeDecoder; - std::unique_ptr m_AnimeDecoder; - std::unique_ptr m_CellMapList; - - String m_strAnimePackSelected; - String m_strAnimationSelected; - int m_iFrame; - float m_fDelta; - int m_iLive; - float* m_pLive; - - bool m_bLoop; - bool m_bPlay; - bool m_bPause; - - bool m_bTextureInterpolate; -}; - -#endif // GD_NODE_SSPLAYER_H diff --git a/gd_spritestudio/gd_notifier.cpp b/gd_spritestudio/gd_notifier.cpp deleted file mode 100644 index 6d42482..0000000 --- a/gd_spritestudio/gd_notifier.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/*! -* \file gd_notifier.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_notifier.h" - -GdNotifier::GdNotifier() -{ - m_vecItem.clear(); -} - -GdNotifier::~GdNotifier() -{ - m_vecItem.clear(); -} - -GdNotifier& GdNotifier::getInstance() -{ - static GdNotifier m_Self; - - return m_Self; -} - -void GdNotifier::addItem( GdNotifierItem* pItem ) -{ - if ( !pItem ) { - return; - } - - if ( m_vecItem.find( pItem ) >= 0 ) { - return; - } - - m_vecItem.push_back( pItem ); -} - -void GdNotifier::removeItem( GdNotifierItem* pItem ) -{ - int iIndex = m_vecItem.find( pItem ); - - if ( iIndex < 0 ) { - return; - } - -#if defined(GD_V4) || defined(SPRITESTUDIO_GODOT_EXTENSION) - m_vecItem.remove_at( iIndex ); -#endif -#ifdef GD_V3 - m_vecItem.remove( iIndex ); -#endif -} - -void GdNotifier::notifyResourcePlayerChanged( const Ref& resPlayer ) -{ - for ( int i = 0; i < m_vecItem.size(); i++ ) { - auto e = m_vecItem[i]; - - e->resourcePlayerChanged( resPlayer ); - } -} - -void GdNotifier::notifyResourceProjectChanged( const Ref& resProject ) -{ - for ( int i = 0; i < m_vecItem.size(); i++ ) { - auto e = m_vecItem[i]; - - e->resourceProjectChanged( resProject ); - } -} - -void GdNotifier::notifyResourceAnimePackChanged( const Ref& resAnimePack ) -{ - for ( int i = 0; i < m_vecItem.size(); i++ ) { - auto e = m_vecItem[i]; - - e->resourceAnimePackChanged( resAnimePack ); - } -} - -void GdNotifier::notifyResourceCellMapChanged( const Ref& resCellMap ) -{ - for ( int i = 0; i < m_vecItem.size(); i++ ) { - auto e = m_vecItem[i]; - - e->resourceCellMapChanged( resCellMap ); - } -} diff --git a/gd_spritestudio/gd_notifier.h b/gd_spritestudio/gd_notifier.h deleted file mode 100644 index 8ff8107..0000000 --- a/gd_spritestudio/gd_notifier.h +++ /dev/null @@ -1,32 +0,0 @@ -/*! -* \file gd_notifier.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_NOTIFIER_H -#define GD_NOTIFIER_H - -#include "gd_notifier_item.h" - -class GdNotifier -{ -private : - GdNotifier(); - -public : - virtual ~GdNotifier(); - - static GdNotifier& getInstance(); - - void addItem( GdNotifierItem* pItem ); - void removeItem( GdNotifierItem* pItem ); - - void notifyResourcePlayerChanged( const Ref& resPlayer ); - void notifyResourceProjectChanged( const Ref& resProject ); - void notifyResourceAnimePackChanged( const Ref& resAnimePack ); - void notifyResourceCellMapChanged( const Ref& resCellMap ); - -private : - Vector m_vecItem; -}; - -#endif // GD_NOTIFIER_H diff --git a/gd_spritestudio/gd_notifier_item.cpp b/gd_spritestudio/gd_notifier_item.cpp deleted file mode 100644 index 849acd7..0000000 --- a/gd_spritestudio/gd_notifier_item.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/*! -* \file gd_notifier_item.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_notifier_item.h" - -GdNotifierItem::GdNotifierItem() -{ -} - -GdNotifierItem::~GdNotifierItem() -{ -} - -void GdNotifierItem::resourcePlayerChanged( const Ref& resPlayer ) -{ -} - -void GdNotifierItem::resourceProjectChanged( const Ref& resProject ) -{ -} - -void GdNotifierItem::resourceAnimePackChanged( const Ref& resAnimePack ) -{ -} - -void GdNotifierItem::resourceCellMapChanged( const Ref& resCellMap ) -{ -} diff --git a/gd_spritestudio/gd_notifier_item.h b/gd_spritestudio/gd_notifier_item.h deleted file mode 100644 index 325a659..0000000 --- a/gd_spritestudio/gd_notifier_item.h +++ /dev/null @@ -1,25 +0,0 @@ -/*! -* \file gd_notifier_item.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_NOTIFIER_ITEM_H -#define GD_NOTIFIER_ITEM_H - -#include "gd_resource_ssplayer.h" -#include "gd_resource_ssproject.h" -#include "gd_resource_ssanimepack.h" -#include "gd_resource_sscellmap.h" - -class GdNotifierItem -{ -public : - GdNotifierItem(); - virtual ~GdNotifierItem(); - - virtual void resourcePlayerChanged( const Ref& resPlayer ); - virtual void resourceProjectChanged( const Ref& resProject ); - virtual void resourceAnimePackChanged( const Ref& resAnimePack ); - virtual void resourceCellMapChanged( const Ref& resCellMap ); -}; - -#endif // GD_NOTIFIER_ITEM_H diff --git a/gd_spritestudio/gd_packet_ssanimepack.cpp b/gd_spritestudio/gd_packet_ssanimepack.cpp deleted file mode 100644 index 53487bc..0000000 --- a/gd_spritestudio/gd_packet_ssanimepack.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/*! -* \file gd_packet_ssanimepack.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_packet_ssanimepack.h" - -#include "ss_io.h" - -GdPacketSsAnimePack::GdPacketSsAnimePack() -{ -} - -GdPacketSsAnimePack::~GdPacketSsAnimePack() -{ -} - -bool GdPacketSsAnimePack::write( const String& strRaw ) -{ - auto c = strRaw.utf8(); - - if ( c.length() > 0 ) { - libXML::XMLDocument xml; - - if ( libXML::XML_SUCCESS == xml.Parse( c.get_data(), c.length() ) ) { - SsXmlIArchiver ar( xml.GetDocument(), "SpriteStudioAnimePack" ); - SsAnimePack animePack; - - animePack.__Serialize( &ar ); - - SsIO::push( *this, animePack ); - } - } - - return true; -} - -bool GdPacketSsAnimePack::read( SsAnimePack* pAnimePack, const PoolByteArray& bytes ) -{ - if ( !pAnimePack ) { - return false; - } - - set_data_array( bytes ); - - SsIO::pull( *this, *pAnimePack ); - - return true; -} - -PoolByteArray GdPacketSsAnimePack::getBytes() const -{ - return get_data_array(); -} diff --git a/gd_spritestudio/gd_packet_ssanimepack.h b/gd_spritestudio/gd_packet_ssanimepack.h deleted file mode 100644 index 40dee08..0000000 --- a/gd_spritestudio/gd_packet_ssanimepack.h +++ /dev/null @@ -1,44 +0,0 @@ -/*! -* \file gd_packet_ssanimepack.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_PACKET_SSANIMEPACK_H -#define GD_PACKET_SSANIMEPACK_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -using namespace godot; -#define PoolByteArray PackedByteArray -#else -#ifdef GD_V4 -#include "core/io/stream_peer.h" -#define PoolByteArray PackedByteArray -#endif -#ifdef GD_V3 -#include "core/io/stream_peer.h" -#endif -#endif - -#include "SpriteStudio6-SDK/Common/Loader/ssloader_ssae.h" - -#include "ss_macros.h" - -SsSdkUsing - -class GdPacketSsAnimePack : public StreamPeerBuffer -{ -public : - GdPacketSsAnimePack(); - virtual ~GdPacketSsAnimePack(); - - bool write( const String& strRaw ); - - bool read( SsAnimePack* pAnimePack, const PoolByteArray& bytes ); - - PoolByteArray getBytes() const; -}; - -#endif // GD_PACKET_SSANIMEPACK_H diff --git a/gd_spritestudio/gd_packet_sscellmap.cpp b/gd_spritestudio/gd_packet_sscellmap.cpp deleted file mode 100644 index 67cc405..0000000 --- a/gd_spritestudio/gd_packet_sscellmap.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/*! -* \file gd_packet_sscellmap.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_packet_sscellmap.h" - -#include "ss_io.h" - -GdPacketSsCellMap::GdPacketSsCellMap() -{ -} - -GdPacketSsCellMap::~GdPacketSsCellMap() -{ -} - -bool GdPacketSsCellMap::write( const String& strRaw ) -{ - auto c = strRaw.utf8(); - - if ( c.length() > 0 ) { - libXML::XMLDocument xml; - - if ( libXML::XML_SUCCESS == xml.Parse( c.get_data(), c.length() ) ) { - SsXmlIArchiver ar( xml.GetDocument(), "SpriteStudioCellMap" ); - SsCellMap cellMap; - - cellMap.__Serialize( &ar ); - - SsIO::push( *this, cellMap ); - } - } - - return true; -} - -bool GdPacketSsCellMap::read( SsCellMap* pCellMap, const PoolByteArray& bytes ) -{ - if ( !pCellMap ) { - return false; - } - - set_data_array( bytes ); - - SsIO::pull( *this, *pCellMap ); - - return true; -} - -PoolByteArray GdPacketSsCellMap::getBytes() const -{ - return get_data_array(); -} diff --git a/gd_spritestudio/gd_packet_sscellmap.h b/gd_spritestudio/gd_packet_sscellmap.h deleted file mode 100644 index 5fd9a7c..0000000 --- a/gd_spritestudio/gd_packet_sscellmap.h +++ /dev/null @@ -1,44 +0,0 @@ -/*! -* \file gd_packet_sscellmap.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_PACKET_SSCELLMAP_H -#define GD_PACKET_SSCELLMAP_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -using namespace godot; -#define PoolByteArray PackedByteArray -#else -#ifdef GD_V4 -#include "core/io/stream_peer.h" -#define PoolByteArray PackedByteArray -#endif -#ifdef GD_V3 -#include "core/io/stream_peer.h" -#endif -#endif - -#include "SpriteStudio6-SDK/Common/Loader/ssloader_ssce.h" - -#include "ss_macros.h" - -SsSdkUsing - -class GdPacketSsCellMap : public StreamPeerBuffer -{ -public : - GdPacketSsCellMap(); - virtual ~GdPacketSsCellMap(); - - bool write( const String& strRaw ); - - bool read( SsCellMap* pCellMap, const PoolByteArray& bytes ); - - PoolByteArray getBytes() const; -}; - -#endif // GD_PACKET_SSCELLMAP_H diff --git a/gd_spritestudio/gd_packet_sseffect.cpp b/gd_spritestudio/gd_packet_sseffect.cpp deleted file mode 100644 index f24c633..0000000 --- a/gd_spritestudio/gd_packet_sseffect.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/*! -* \file gd_packet_sseffect.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_packet_sseffect.h" - -#include "ss_io.h" - -GdPacketSsEffect::GdPacketSsEffect() -{ -} - -GdPacketSsEffect::~GdPacketSsEffect() -{ -} - -bool GdPacketSsEffect::write( const String& strRaw ) -{ - auto c = strRaw.utf8(); - - if ( c.length() > 0 ) { - libXML::XMLDocument xml; - - if ( libXML::XML_SUCCESS == xml.Parse( c.get_data(), c.length() ) ) { - SsXmlIArchiver ar( xml.GetDocument(), "SpriteStudioEffect" ); - SsEffectFile effect; - - effect.__Serialize( &ar ); - - SsIO::push( *this, effect ); - } - } - - return true; -} - -bool GdPacketSsEffect::read( SsEffectFile* pEffect, const PoolByteArray& bytes ) -{ - if ( !pEffect ) { - return false; - } - - set_data_array( bytes ); - - SsIO::pull( *this, *pEffect ); - - return true; -} - -PoolByteArray GdPacketSsEffect::getBytes() const -{ - return get_data_array(); -} diff --git a/gd_spritestudio/gd_packet_sseffect.h b/gd_spritestudio/gd_packet_sseffect.h deleted file mode 100644 index 9b7ae90..0000000 --- a/gd_spritestudio/gd_packet_sseffect.h +++ /dev/null @@ -1,44 +0,0 @@ -/*! -* \file gd_packet_sseffect.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_PACKET_SSEFFECT_H -#define GD_PACKET_SSEFFECT_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -using namespace godot; -#define PoolByteArray PackedByteArray -#else -#ifdef GD_V4 -#include "core/io/stream_peer.h" -#define PoolByteArray PackedByteArray -#endif -#ifdef GD_V3 -#include "core/io/stream_peer.h" -#endif -#endif - -#include "SpriteStudio6-SDK/Common/Loader/ssloader_ssee.h" - -#include "ss_macros.h" - -SsSdkUsing - -class GdPacketSsEffect : public StreamPeerBuffer -{ -public : - GdPacketSsEffect(); - virtual ~GdPacketSsEffect(); - - bool write( const String& strRaw ); - - bool read( SsEffectFile* pEffect, const PoolByteArray& bytes ); - - PoolByteArray getBytes() const; -}; - -#endif // GD_PACKET_SSEFFECT_H diff --git a/gd_spritestudio/gd_packet_ssproject.cpp b/gd_spritestudio/gd_packet_ssproject.cpp deleted file mode 100644 index 4fb93fa..0000000 --- a/gd_spritestudio/gd_packet_ssproject.cpp +++ /dev/null @@ -1,53 +0,0 @@ -/*! -* \file gd_packet_ssproject.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_packet_ssproject.h" - -#include "ss_io.h" - -GdPacketSsProject::GdPacketSsProject() -{ -} - -GdPacketSsProject::~GdPacketSsProject() -{ -} - -bool GdPacketSsProject::write( const String& strRaw ) -{ - auto c = strRaw.utf8(); - - if ( c.length() > 0 ) { - libXML::XMLDocument xml; - - if ( libXML::XML_SUCCESS == xml.Parse( c.get_data(), c.length() ) ) { - SsXmlIArchiver ar( xml.GetDocument(), "SpriteStudioProject" ); - SsProject project; - - project.__Serialize( &ar ); - - SsIO::push( *this, project ); - } - } - - return true; -} - -bool GdPacketSsProject::read( SsProject* pProject, const PoolByteArray& bytes ) -{ - if ( !pProject ) { - return false; - } - - set_data_array( bytes ); - - SsIO::pull( *this, *pProject ); - - return true; -} - -PoolByteArray GdPacketSsProject::getBytes() const -{ - return get_data_array(); -} diff --git a/gd_spritestudio/gd_packet_ssproject.h b/gd_spritestudio/gd_packet_ssproject.h deleted file mode 100644 index ee4e66e..0000000 --- a/gd_spritestudio/gd_packet_ssproject.h +++ /dev/null @@ -1,44 +0,0 @@ -/*! -* \file gd_packet_ssproject.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_PACKET_SSPROJECT_H -#define GD_PACKET_SSPROJECT_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -using namespace godot; -#define PoolByteArray PackedByteArray -#else -#ifdef GD_V4 -#include "core/io/stream_peer.h" -#define PoolByteArray PackedByteArray -#endif -#ifdef GD_V3 -#include "core/io/stream_peer.h" -#endif -#endif - -#include "SpriteStudio6-SDK/Common/Loader/ssloader_sspj.h" - -#include "ss_macros.h" - -SsSdkUsing - -class GdPacketSsProject : public StreamPeerBuffer -{ -public : - GdPacketSsProject(); - virtual ~GdPacketSsProject(); - - bool write( const String& strRaw ); - - bool read( SsProject* pProject, const PoolByteArray& bytes ); - - PoolByteArray getBytes() const; -}; - -#endif // GD_PACKET_SSPROJECT_H diff --git a/gd_spritestudio/gd_progress_dialog.cpp b/gd_spritestudio/gd_progress_dialog.cpp new file mode 100644 index 0000000..fe01bb9 --- /dev/null +++ b/gd_spritestudio/gd_progress_dialog.cpp @@ -0,0 +1,108 @@ +#ifdef TOOLS_ENABLED + +#include "gd_macros.h" +#include "gd_progress_dialog.h" + +#ifdef SPRITESTUDIO_GODOT_EXTENSION + #include + #include + #include + #include + + using namespace godot; +#else +#if VERSION_MAJOR >= 4 + #if VERSION_MINOR >= 6 + #include "servers/display/display_server.h" + #include "servers/rendering/rendering_server.h" + #else + #include "servers/display_server.h" + #include "servers/rendering_server.h" + #endif +#endif + #include "core/os/time.h" + #include "scene/gui/panel.h" + #include "core/object/message_queue.h" +#endif + +void GdProgressDialog::_bind_methods() { + // ClassDB::bind_method(D_METHOD("_on_cancel_pressed"), &GdProgressDialog::_on_cancel_pressed); +} + +GdProgressDialog::GdProgressDialog() { + set_wrap_controls(true); + set_visible(false); + set_transient(true); + set_exclusive(true); + set_keep_title_visible(true); + +#ifndef SPRITESTUDIO_GODOT_EXTENSION + set_clamp_to_embedder(true); +#if VERSION_MAJOR >= 4 + #if VERSION_MINOR >= 5 + set_flag(FLAG_MINIMIZE_DISABLED, true); + set_flag(FLAG_MAXIMIZE_DISABLED, true); + #else + set_flag(FLAG_RESIZE_DISABLED, true); + #endif +#endif +#endif + set_title("Processing..."); + + Panel *background = memnew(Panel); + background->set_anchors_and_offsets_preset(Control::PRESET_FULL_RECT); + add_child(background); + + vbox = memnew(VBoxContainer); + background->add_child(vbox); + vbox->set_anchors_and_offsets_preset(Control::PRESET_FULL_RECT, Control::PRESET_MODE_KEEP_SIZE, 10); + // add_child(vbox); + + status_label = memnew(Label); + status_label->set_text("Please wait..."); + status_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); + vbox->add_child(status_label); + + progress_bar = memnew(ProgressBar); + vbox->add_child(progress_bar); + + // cancel_button = memnew(Button); + // cancel_button->set_text("Cancel"); + // vbox->add_child(cancel_button); + // cancel_button->connect("pressed", Callable(this, "_on_cancel_pressed")); + + set_size(Size2(300, 130)); +} + + +void GdProgressDialog::show_progress(const String &title, int total_steps) { + // canceled = false; + // cancel_button->set_disabled(false); + set_title(title); + progress_bar->set_max(total_steps); + progress_bar->set_value(0); + + popup_centered(); +} + +void GdProgressDialog::step(const String &message, int step_value) { + status_label->set_text(message); + progress_bar->set_value(step_value); +} + +// void GdProgressDialog::_on_cancel_pressed() { +// canceled = true; +// status_label->set_text("Canceling..."); +// cancel_button->set_disabled(true); // 二重抌し防止 +// } + +// bool GdProgressDialog::is_canceled() const { +// return canceled; +// } + +void GdProgressDialog::finish() { + hide(); + queue_free(); +} + +#endif // #ifdef TOOLS_ENABLED diff --git a/gd_spritestudio/gd_progress_dialog.h b/gd_spritestudio/gd_progress_dialog.h new file mode 100644 index 0000000..b83bdee --- /dev/null +++ b/gd_spritestudio/gd_progress_dialog.h @@ -0,0 +1,47 @@ +#pragma once + +#ifdef TOOLS_ENABLED + +#ifdef SPRITESTUDIO_GODOT_EXTENSION + #include + #include + #include + #include + #include + + using namespace godot; +#else + #include "scene/main/window.h" + #include "scene/gui/button.h" + #include "scene/gui/box_container.h" + #include "scene/gui/label.h" + #include "scene/gui/progress_bar.h" +#endif + + +class GdProgressDialog : public Window { + GDCLASS(GdProgressDialog, Window); + +private: + VBoxContainer *vbox = nullptr; + Label *status_label = nullptr; + ProgressBar *progress_bar = nullptr; + + // Button *cancel_button = nullptr; + // bool canceled = false; + +protected: + static void _bind_methods(); + + // void _on_cancel_pressed(); + + public: + GdProgressDialog(); + + void show_progress(const String &title, int total_steps); + void step(const String &message, int step_value); + void finish(); + + // bool is_canceled() const; +}; +#endif // #ifdef TOOLS_ENABLED diff --git a/gd_spritestudio/gd_renderer.cpp b/gd_spritestudio/gd_renderer.cpp deleted file mode 100644 index 075f219..0000000 --- a/gd_spritestudio/gd_renderer.cpp +++ /dev/null @@ -1,147 +0,0 @@ -/*! -* \file gd_renderer.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_renderer.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#define VisualServer RenderingServer -using namespace godot; -#else -#ifdef GD_V4 -#include "servers/rendering_server.h" -#define VisualServer RenderingServer -#endif -#ifdef GD_V3 -#include "servers/visual_server.h" -#endif -#endif - -static inline void safeFree( RID& rid ) -{ - if ( rid.is_valid() ) { -#ifdef SPRITESTUDIO_GODOT_EXTENSION - VisualServer::get_singleton()->free_rid( rid ); -#else - VisualServer::get_singleton()->free( rid ); -#endif - rid = RID(); - } -} - -GdRenderer::GdRenderer() -{ - m_ViewPortId = RID(); - m_TextureId = RID(); - m_CanvasId = RID(); - m_CanvasItemId = RID(); - - m_Size = Rect2(); -} - -GdRenderer::~GdRenderer() -{ - term(); -} - -void GdRenderer::init() -{ - VisualServer* pVisualServer = VisualServer::get_singleton(); - - term(); - - m_ViewPortId = pVisualServer->viewport_create(); - m_CanvasId = pVisualServer->canvas_create(); - m_CanvasItemId = pVisualServer->canvas_item_create(); - - setSize( 16, 16 ); - - pVisualServer->canvas_item_set_parent( m_CanvasItemId, m_CanvasId ); - - pVisualServer->viewport_set_transparent_background( m_ViewPortId, true ); - - pVisualServer->viewport_attach_canvas( m_ViewPortId, m_CanvasId ); - -#ifdef SPRITESTUDIO_GODOT_EXTENSION - RID viewPortTextureId = pVisualServer->viewport_get_texture( m_ViewPortId ); - Ref viewPortTextureData = pVisualServer->texture_2d_get( viewPortTextureId ); - - m_TextureId = pVisualServer->texture_2d_create( viewPortTextureData ); - -// pVisualServer->texture_set_proxy( m_TextureId, viewPortTextureId ); - m_TextureId = viewPortTextureId; -#else -#ifdef GD_V4 - RID viewPortTextureId = pVisualServer->viewport_get_texture( m_ViewPortId ); - Ref viewPortTextureData = pVisualServer->texture_2d_get( viewPortTextureId ); - - m_TextureId = pVisualServer->texture_2d_create( viewPortTextureData ); - -// pVisualServer->texture_set_proxy( m_TextureId, viewPortTextureId ); - m_TextureId = viewPortTextureId; -#endif -#ifdef GD_V3 - RID viewPortTextureId = pVisualServer->viewport_get_texture( m_ViewPortId ); - Ref viewPortTextureData = pVisualServer->texture_get_data( viewPortTextureId ); - - m_TextureId = pVisualServer->texture_create_from_image( viewPortTextureData ); - - pVisualServer->texture_set_proxy( m_TextureId, viewPortTextureId ); -#endif -#endif - - pVisualServer->viewport_set_active( m_ViewPortId, true ); -} - -void GdRenderer::term() -{ - safeFree( m_ViewPortId ); - safeFree( m_TextureId ); - safeFree( m_CanvasId ); - safeFree( m_CanvasItemId ); -} - -void GdRenderer::setTranslate( float fX, float fY ) -{ - VisualServer* pVisualServer = VisualServer::get_singleton(); - Transform2D trans; - -#if defined(GD_V4) || defined(SPRITESTUDIO_GODOT_EXTENSION) - trans.translate_local( fX, fY ); -#endif -#ifdef GD_V3 - trans.translate( fX, fY ); -#endif - - pVisualServer->viewport_set_canvas_transform( m_ViewPortId, m_CanvasId, trans ); -} - -void GdRenderer::setSize( int iWidth, int iHeight ) -{ - VisualServer* pVisualServer = VisualServer::get_singleton(); - - m_Size = Rect2( 0, 0, iWidth, iHeight ); - - pVisualServer->viewport_set_size( m_ViewPortId, iWidth, iHeight ); -} - -Rect2 GdRenderer::getSize() const -{ - return m_Size; -} - -RID GdRenderer::getTextureRid() const -{ - return m_TextureId; -} - -RID GdRenderer::getCanvasRid() const -{ - return m_CanvasId; -} - -RID GdRenderer::getCanvasItemRid() const -{ - return m_CanvasItemId; -} diff --git a/gd_spritestudio/gd_renderer.h b/gd_spritestudio/gd_renderer.h deleted file mode 100644 index 01bc809..0000000 --- a/gd_spritestudio/gd_renderer.h +++ /dev/null @@ -1,51 +0,0 @@ -/*! -* \file gd_renderer.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_RENDERER_H -#define GD_RENDERER_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -using namespace godot; -#else -#ifdef GD_V4 -#include "core/templates/rid.h" -#endif -#ifdef GD_V3 -#include "core/rid.h" -#endif -#include "core/math/rect2.h" -#endif - -class GdRenderer -{ -public : - GdRenderer(); - virtual ~GdRenderer(); - - void init(); - void term(); - - void setTranslate( float fX, float fY ); - void setSize( int iWidth, int iHeight ); - - Rect2 getSize() const; - - RID getTextureRid() const; - RID getCanvasRid() const; - RID getCanvasItemRid() const; - -private : - RID m_ViewPortId; - RID m_TextureId; - RID m_CanvasId; - RID m_CanvasItemId; - - Rect2 m_Size; -}; - -#endif // GD_RENDERER_H diff --git a/gd_spritestudio/gd_renderer_item.cpp b/gd_spritestudio/gd_renderer_item.cpp deleted file mode 100644 index 0d35e89..0000000 --- a/gd_spritestudio/gd_renderer_item.cpp +++ /dev/null @@ -1,13 +0,0 @@ -/*! -* \file gd_renderer_item.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_renderer_item.h" - -GdRendererItem::GdRendererItem() -{ -} - -GdRendererItem::~GdRendererItem() -{ -} diff --git a/gd_spritestudio/gd_renderer_item.h b/gd_spritestudio/gd_renderer_item.h deleted file mode 100644 index 43b4528..0000000 --- a/gd_spritestudio/gd_renderer_item.h +++ /dev/null @@ -1,15 +0,0 @@ -/*! -* \file gd_renderer_item.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_RENDERER_ITEM_H -#define GD_RENDERER_ITEM_H - -class GdRendererItem -{ -public : - GdRendererItem(); - virtual ~GdRendererItem(); -}; - -#endif // GD_RENDERER_ITEM_H diff --git a/gd_spritestudio/gd_resource_ssanimepack.cpp b/gd_spritestudio/gd_resource_ssanimepack.cpp deleted file mode 100644 index f018f38..0000000 --- a/gd_spritestudio/gd_resource_ssanimepack.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/*! -* \file gd_resource_ssanimepack.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_resource_ssanimepack.h" - -#include "ss_macros.h" -#include "ss_container.h" -#include "gd_notifier.h" - -SsSdkUsing - -GdResourceSsAnimePack::GdResourceSsAnimePack() -{ - m_pAnimePack = NULL; -} - -GdResourceSsAnimePack::~GdResourceSsAnimePack() -{ - if ( m_pAnimePack ) { - SsContainer::getInstance().unloadAnimePack( m_pAnimePack ); - m_pAnimePack = NULL; - } -} - -Error GdResourceSsAnimePack::loadFromFile( const String& strPath, const String& strOrgPath ) -{ - m_pAnimePack = SsContainer::getInstance().loadAnimePackFromFile( strPath, false ); - - if ( !m_pAnimePack ) { - ERR_PRINT( String( "SpriteStudio ssae file load failed : " ) + strPath ); - return FAILED; - } - - return OK; -} - -Error GdResourceSsAnimePack::saveToFile( const String& strPath, const Ref& res ) -{ - return FAILED; -} - -int GdResourceSsAnimePack::getAnimationCount() const -{ - if ( m_pAnimePack ) { - return m_pAnimePack->animeList.size(); - } - - return 0; -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdResourceSsAnimePack::getAnimationNames() const -#else -Vector GdResourceSsAnimePack::getAnimationNames() const -#endif -{ -#ifdef SPRITESTUDIO_GODOT_EXTENSION - PackedStringArray vec; -#else - Vector vec; -#endif - - if ( m_pAnimePack ) { - for ( int i = 0; i < m_pAnimePack->animeList.size(); i++ ) { - SsAnimation* pAnimation = m_pAnimePack->animeList[i]; - - vec.push_back( Variant( String::utf8( pAnimation->name.c_str() ) ) ); - } - } - - return vec; -} - -SsAnimePack* GdResourceSsAnimePack::getAnimePack() const -{ - return m_pAnimePack; -} - -SsModel* GdResourceSsAnimePack::getModel() const -{ - if ( m_pAnimePack ) { - return &m_pAnimePack->Model; - } - - return NULL; -} - -SsAnimation* GdResourceSsAnimePack::findAnimation( String strName ) const -{ - return NULL; -} - -void GdResourceSsAnimePack::_bind_methods() -{ - ClassDB::bind_method( D_METHOD( "get_animation_count" ), &GdResourceSsAnimePack::getAnimationCount ); - - ClassDB::bind_method( D_METHOD( "get_animation_names" ), &GdResourceSsAnimePack::getAnimationNames ); -} diff --git a/gd_spritestudio/gd_resource_ssanimepack.h b/gd_spritestudio/gd_resource_ssanimepack.h deleted file mode 100644 index d61feb1..0000000 --- a/gd_spritestudio/gd_resource_ssanimepack.h +++ /dev/null @@ -1,64 +0,0 @@ -/*! -* \file gd_resource_ssanimepack.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_RESOURCE_SSANIMEPACK_H -#define GD_RESOURCE_SSANIMEPACK_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -using namespace godot; -#else -#ifdef GD_V4 -#include "core/io/resource.h" -#endif -#ifdef GD_V3 -#include "core/resource.h" -#endif -#endif - -#include "SpriteStudio6-SDK/Common/Loader/ssloader_ssae.h" - -#include "ss_macros.h" -#include "gd_resource_sscellmap.h" - -SsSdkUsing - -class GdResourceSsAnimePack : public Resource -{ - GDCLASS( GdResourceSsAnimePack, Resource ); - -public : - GdResourceSsAnimePack(); - virtual ~GdResourceSsAnimePack(); - - void setCellMapResource( const Ref& resCellMap, int iIndex ); - Ref getCellMapResource( int iIndex ) const; - - Error loadFromFile( const String& strPath, const String& strOrgPath = "" ); - Error saveToFile( const String& strPath, const Ref& res ); - - int getAnimationCount() const; - -#ifdef SPRITESTUDIO_GODOT_EXTENSION - PackedStringArray getAnimationNames() const; -#else - Vector getAnimationNames() const; -#endif - - SsAnimePack* getAnimePack() const; - - SsModel* getModel() const; - - SsAnimation* findAnimation( String strName ) const; - -protected : - GdMultilevelCall static void _bind_methods(); - -private : - SsAnimePack* m_pAnimePack; -}; - -#endif // GD_RESOURCE_SSANIMEPACK_H diff --git a/gd_spritestudio/gd_resource_sscellmap.cpp b/gd_spritestudio/gd_resource_sscellmap.cpp deleted file mode 100644 index a34f2ef..0000000 --- a/gd_spritestudio/gd_resource_sscellmap.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/*! -* \file gd_resource_sscellmap.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_resource_sscellmap.h" - -#include "ss_macros.h" -#include "ss_container.h" -#include "gd_notifier.h" - -SsSdkUsing - -GdResourceSsCellMap::GdResourceSsCellMap() -{ - m_pCellMap = NULL; -} - -GdResourceSsCellMap::~GdResourceSsCellMap() -{ - if ( m_pCellMap ) { - SsContainer::getInstance().unloadCellMap( m_pCellMap ); - m_pCellMap = NULL; - } -} - -void GdResourceSsCellMap::setTexture( Ref texture ) -{ - m_Texture = texture; - - GdNotifier::getInstance().notifyResourceCellMapChanged( this ); -} - -Ref GdResourceSsCellMap::getTexture() const -{ - return m_Texture; -} - -Error GdResourceSsCellMap::loadFromFile( const String& strPath, const String& strOrgPath ) -{ - Error err; - String strRel = strOrgPath.length() == 0 ? strPath : strOrgPath; - - m_pCellMap = SsContainer::getInstance().loadCellMapFromFile( strPath, false ); - - if ( !m_pCellMap ) { - ERR_PRINT( String( "SpriteStudio ssce file load failed : " ) + strPath ); - return FAILED; - } - - { - auto c = SsContainer::getInstance().getImageDir().utf8(); - SsString strRoot = c.ptr() ? SsString( c.ptr() ) : SsString( "" ); - - m_pCellMap->imagePath = strRoot + m_pCellMap->imagePath; - } - - auto c = strRel.utf8(); - - m_pCellMap->fname = c.ptr() ? SsString( c.ptr() ) : SsString( "" ); - - String str = String::utf8( m_pCellMap->imagePath.c_str() ); - -#ifdef SPRITESTUDIO_GODOT_EXTENSION - m_Texture = ResourceLoader::get_singleton()->load( str, "", ResourceLoader::CACHE_MODE_REUSE); - err = OK; // TODO: improve -#else -#ifdef GD_V4 - m_Texture = ResourceLoader::load( str, "", ResourceFormatLoader::CACHE_MODE_REUSE, &err ); -#endif -#ifdef GD_V3 - m_Texture = ResourceLoader::load( str, "", false, &err ); -#endif -#endif - - return err; -} - -Error GdResourceSsCellMap::saveToFile( const String& strPath, const Ref& res ) -{ - return FAILED; -} - -SsCellMap* GdResourceSsCellMap::getCellMap() const -{ - return m_pCellMap; -} - -void GdResourceSsCellMap::_bind_methods() -{ - ClassDB::bind_method( D_METHOD( "set_texture", "texture" ), &GdResourceSsCellMap::setTexture ); - ClassDB::bind_method( D_METHOD( "get_texture" ), &GdResourceSsCellMap::getTexture ); - - ADD_PROPERTY( - PropertyInfo( - Variant::OBJECT, - "texture", - PropertyHint::PROPERTY_HINT_RESOURCE_TYPE, - "Texture" - ), - "set_texture", - "get_texture" - ); -} diff --git a/gd_spritestudio/gd_resource_sscellmap.h b/gd_spritestudio/gd_resource_sscellmap.h deleted file mode 100644 index 8e1c661..0000000 --- a/gd_spritestudio/gd_resource_sscellmap.h +++ /dev/null @@ -1,56 +0,0 @@ -/*! -* \file gd_resource_sscellmap.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_RESOURCE_SSCELLMAP_H -#define GD_RESOURCE_SSCELLMAP_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -using namespace godot; -#else -#ifdef GD_V4 -#include "core/io/resource.h" -#endif -#ifdef GD_V3 -#include "core/resource.h" -#endif -#include "scene/resources/texture.h" -#endif - -#include "SpriteStudio6-SDK/Common/Loader/ssloader_ssce.h" - -#include "ss_macros.h" - -SsSdkUsing - -class GdResourceSsCellMap : public Resource -{ - GDCLASS( GdResourceSsCellMap, Resource ); - -public : - GdResourceSsCellMap(); - virtual ~GdResourceSsCellMap(); - - void setTexture( Ref texture ); - Ref getTexture() const; - - Error loadFromFile( const String& strPath, const String& strOrgPath = "" ); - Error saveToFile( const String& strPath, const Ref& res ); - - SsCellMap* getCellMap() const; - String getRoot() const; - -protected : - GdMultilevelCall static void _bind_methods(); - -private : - SsCellMap* m_pCellMap; - - Ref m_Texture; -}; - -#endif // GD_RESOURCE_SSCELLMAP_H diff --git a/gd_spritestudio/gd_resource_ssdocument.cpp b/gd_spritestudio/gd_resource_ssdocument.cpp deleted file mode 100644 index e55b39f..0000000 --- a/gd_spritestudio/gd_resource_ssdocument.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/*! -* \file gd_resource_ssdocument.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_resource_ssdocument.h" - -#include "gd_io.h" - -GdResourceSsDocument::GdResourceSsDocument() -{ - m_strSource = ""; -} - -GdResourceSsDocument::~GdResourceSsDocument() -{ -} - -Error GdResourceSsDocument::loadFromFile( const String& strPath, const String& strOrgPath ) -{ - m_strSource = GdIO::loadStringFromFile( strPath ); - - return OK; -} - -Error GdResourceSsDocument::saveToFile( const String& strPath, const Ref& res ) -{ - return FAILED; -} - -String GdResourceSsDocument::getSource() const -{ - return m_strSource; -} - -void GdResourceSsDocument::_bind_methods() -{ - ClassDB::bind_method( D_METHOD( "load_from_file", "path", "org_path" ), &GdResourceSsDocument::loadFromFile ); -} diff --git a/gd_spritestudio/gd_resource_ssdocument.h b/gd_spritestudio/gd_resource_ssdocument.h deleted file mode 100644 index c81250e..0000000 --- a/gd_spritestudio/gd_resource_ssdocument.h +++ /dev/null @@ -1,42 +0,0 @@ -/*! -* \file gd_resource_ssdocument.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_RESOURCE_SSDOCUMENT_H -#define GD_RESOURCE_SSDOCUMENT_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -using namespace godot; -#else -#ifdef GD_V4 -#include "core/io/resource.h" -#endif -#ifdef GD_V3 -#include "core/resource.h" -#endif -#endif - -class GdResourceSsDocument : public Resource -{ - GDCLASS( GdResourceSsDocument, Resource ); - -public : - GdResourceSsDocument(); - virtual ~GdResourceSsDocument(); - - Error loadFromFile( const String& strPath, const String& strOrgPath = "" ); - Error saveToFile( const String& strPath, const Ref& res ); - - String getSource() const; - -protected : - GdMultilevelCall static void _bind_methods(); - -private : - String m_strSource; -}; - -#endif // GD_RESOURCE_SSDOCUMENT_H diff --git a/gd_spritestudio/gd_resource_sseffect.cpp b/gd_spritestudio/gd_resource_sseffect.cpp deleted file mode 100644 index 365920b..0000000 --- a/gd_spritestudio/gd_resource_sseffect.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/*! -* \file gd_resource_sseffect.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_resource_sseffect.h" - -#include "ss_macros.h" -#include "ss_container.h" - -SsSdkUsing - -GdResourceSsEffect::GdResourceSsEffect() -{ - m_pEffect = NULL; -} - -GdResourceSsEffect::~GdResourceSsEffect() -{ - if ( m_pEffect ) { - SsContainer::getInstance().unloadEffect( m_pEffect ); - m_pEffect = NULL; - } -} - -Error GdResourceSsEffect::loadFromFile( const String& strPath, const String& strOrgPath ) -{ - m_pEffect = SsContainer::getInstance().loadEffectFromFile( strPath, false ); - - if ( !m_pEffect ) { - ERR_PRINT( String( "SpriteStudio ssee file load failed : " ) + strPath ); - return FAILED; - } - - return OK; -} - -Error GdResourceSsEffect::saveToFile( const String& strPath, const Ref& res ) -{ - return FAILED; -} - -SsEffectFile* GdResourceSsEffect::getEffect() const -{ - return m_pEffect; -} - -void GdResourceSsEffect::_bind_methods() -{ -} diff --git a/gd_spritestudio/gd_resource_sseffect.h b/gd_spritestudio/gd_resource_sseffect.h deleted file mode 100644 index 9540bff..0000000 --- a/gd_spritestudio/gd_resource_sseffect.h +++ /dev/null @@ -1,48 +0,0 @@ -/*! -* \file gd_resource_sseffect.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_RESOURCE_SSEFFECT_H -#define GD_RESOURCE_SSEFFECT_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -using namespace godot; -#else -#ifdef GD_V4 -#include "core/io/resource.h" -#endif -#ifdef GD_V3 -#include "core/resource.h" -#endif -#endif - -#include "SpriteStudio6-SDK/Common/Loader/ssloader_ssee.h" - -#include "ss_macros.h" - -SsSdkUsing - -class GdResourceSsEffect : public Resource -{ - GDCLASS( GdResourceSsEffect, Resource ); - -public : - GdResourceSsEffect(); - virtual ~GdResourceSsEffect(); - - Error loadFromFile( const String& strPath, const String& strOrgPath = "" ); - Error saveToFile( const String& strPath, const Ref& res ); - - SsEffectFile* getEffect() const; - -protected : - GdMultilevelCall static void _bind_methods(); - -private : - SsEffectFile* m_pEffect; -}; - -#endif // GD_RESOURCE_SSEFFECT_H diff --git a/gd_spritestudio/gd_resource_ssplayer.cpp b/gd_spritestudio/gd_resource_ssplayer.cpp deleted file mode 100644 index ee99e81..0000000 --- a/gd_spritestudio/gd_resource_ssplayer.cpp +++ /dev/null @@ -1,44 +0,0 @@ -/*! -* \file gd_resource_ssplayer.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_resource_ssplayer.h" - -#include "gd_notifier.h" - -GdResourceSsPlayer::GdResourceSsPlayer() -{ -} - -GdResourceSsPlayer::~GdResourceSsPlayer() -{ -} - -void GdResourceSsPlayer::setProjectResource( const Ref& resProject ) -{ - m_ResProject = resProject; - - GdNotifier::getInstance().notifyResourcePlayerChanged( this ); -} - -Ref GdResourceSsPlayer::getProjectResource() const -{ - return m_ResProject; -} - -void GdResourceSsPlayer::_bind_methods() -{ - ClassDB::bind_method( D_METHOD( "set_project_resource", "res_project" ), &GdResourceSsPlayer::setProjectResource ); - ClassDB::bind_method( D_METHOD( "get_project_resource" ), &GdResourceSsPlayer::getProjectResource ); - - ADD_PROPERTY( - PropertyInfo( - Variant::OBJECT, - GdUiText( "res_project" ), - PropertyHint::PROPERTY_HINT_RESOURCE_TYPE, - "GdResourceSsProject" - ), - "set_project_resource", - "get_project_resource" - ); -} diff --git a/gd_spritestudio/gd_resource_ssplayer.h b/gd_spritestudio/gd_resource_ssplayer.h deleted file mode 100644 index 4a60c1b..0000000 --- a/gd_spritestudio/gd_resource_ssplayer.h +++ /dev/null @@ -1,43 +0,0 @@ -/*! -* \file gd_resource_ssplayer.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_RESOURCE_SSPLAYER_H -#define GD_RESOURCE_SSPLAYER_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -using namespace godot; -#else -#ifdef GD_V4 -#include "core/io/resource.h" -#endif -#ifdef GD_V3 -#include "core/resource.h" -#endif -#endif - -#include "gd_resource_ssproject.h" - -class GdResourceSsPlayer : public Resource -{ - GDCLASS( GdResourceSsPlayer, Resource ); - -public : - GdResourceSsPlayer(); - virtual ~GdResourceSsPlayer(); - - void setProjectResource( const Ref& resProject ); - Ref getProjectResource() const; - -protected : - GdMultilevelCall static void _bind_methods(); - -private : - Ref m_ResProject; -}; - - -#endif // GD_RESOURCE_SSPLAYER_H diff --git a/gd_spritestudio/gd_resource_ssproject.cpp b/gd_spritestudio/gd_resource_ssproject.cpp deleted file mode 100644 index 5587290..0000000 --- a/gd_spritestudio/gd_resource_ssproject.cpp +++ /dev/null @@ -1,525 +0,0 @@ -/*! -* \file gd_resource_ssproject.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_resource_ssproject.h" - -#include "ss_macros.h" -#include "ss_container.h" -#include "gd_notifier.h" - -SsSdkUsing - -GdResourceSsProject::GdResourceSsProject() -{ - m_pProject = NULL; - m_strRoot = ""; - - m_mapResAnimePack.clear(); - m_vecResCellMap.clear(); - m_vecResEffect.clear(); -} - -GdResourceSsProject::~GdResourceSsProject() -{ - if ( m_pProject ) { - SsContainer::getInstance().unloadProject( m_pProject ); - m_pProject = NULL; - } - - m_mapResAnimePack.clear(); - m_vecResCellMap.clear(); - m_vecResEffect.clear(); -} - -void GdResourceSsProject::setAnimePackResource( const Ref& resAnimePack, const String& strName ) -{ - if ( !m_mapResAnimePack.has( strName ) ) { - return; - } - - m_mapResAnimePack[strName] = resAnimePack; - - NOTIFY_PROPERTY_LIST_CHANGED(); - - GdNotifier::getInstance().notifyResourceProjectChanged( this ); -} - -Ref GdResourceSsProject::getAnimePackResource( const String& strName ) const -{ - if ( !m_mapResAnimePack.has( strName ) ) { - return NULL; - } - - return m_mapResAnimePack[strName]; -} - -void GdResourceSsProject::setCellMapResource( const Ref& resCellMap, int iIndex ) -{ - if ( ( iIndex < 0 ) || ( iIndex >= getCellMapCount() ) ) { - return; - } - - m_vecResCellMap.set( iIndex, resCellMap ); - - NOTIFY_PROPERTY_LIST_CHANGED(); - - GdNotifier::getInstance().notifyResourceProjectChanged( this ); -} - -Ref GdResourceSsProject::getCellMapResourceFromIndex( int iIndex ) const -{ - if ( ( iIndex < 0 ) || ( iIndex >= getCellMapCount() ) ) { - return NULL; - } - - return m_vecResCellMap.get( iIndex ); -} - -Ref GdResourceSsProject::getCellMapResourceFromName( const String& strName ) const -{ - if ( m_pProject ) { - for ( int i = 0; i < m_pProject->cellmapNames.size(); i++ ) { - if ( m_pProject->cellmapNames[i].c_str() == strName ) { - return getCellMapResourceFromIndex( i ); - } - } - } - - return NULL; -} - -Ref GdResourceSsProject::getCellMapResource( const SsString& strName ) const -{ - if ( m_pProject ) { - for ( int i = 0; i < m_pProject->cellmapNames.size(); i++ ) { - if ( m_pProject->cellmapNames[i] == strName ) { - return getCellMapResourceFromIndex( i ); - } - } - } - - return NULL; -} - -void GdResourceSsProject::setEffectResource( const Ref& resEffect, int iIndex ) -{ - if ( ( iIndex < 0 ) || ( iIndex >= getEffectCount() ) ) { - return; - } - - m_vecResEffect.set( iIndex, resEffect ); - - NOTIFY_PROPERTY_LIST_CHANGED(); - - GdNotifier::getInstance().notifyResourceProjectChanged( this ); -} - -Ref GdResourceSsProject::getEffectResource( int iIndex ) const -{ - if ( ( iIndex < 0 ) || ( iIndex >= getEffectCount() ) ) { - return NULL; - } - - return m_vecResEffect.get( iIndex ); -} - -Error GdResourceSsProject::loadFromFile( const String& strPath, const String& strOrgPath ) -{ - Error err; - String strRel = strOrgPath.length() == 0 ? strPath : strOrgPath; - - m_vecResCellMap.clear(); - m_vecResEffect.clear(); - - m_pProject = SsContainer::getInstance().loadProjectFromFile( strPath, false ); - m_strRoot = ""; - - if ( !m_pProject ) { - ERR_PRINT( String( "SpriteStudio sspj file load failed : " ) + strPath ); - return FAILED; - } - - m_strRoot = strRel.get_base_dir(); - m_strRoot = m_strRoot.replace( "res://", "" ); - if ( !EMPTY(m_strRoot) && !m_strRoot.ends_with( "/" ) ) - { - m_strRoot += "/"; - } - - m_strAnimePack = m_strRoot + String::utf8( m_pProject->settings.animeBaseDirectory.c_str() ); - if ( !EMPTY(m_strAnimePack) && !m_strAnimePack.ends_with( "/" ) ) - { - m_strAnimePack += "/"; - } - m_strCellMap = m_strRoot + String::utf8( m_pProject->settings.cellMapBaseDirectory.c_str() ); - if ( !EMPTY(m_strCellMap) && !m_strCellMap.ends_with( "/" ) ) - { - m_strCellMap += "/"; - } - m_strImage = m_strRoot + String::utf8( m_pProject->settings.imageBaseDirectory.c_str() ); - if ( !EMPTY(m_strImage) && !m_strImage.ends_with( "/" ) ) - { - m_strImage += "/"; - } - m_strEffect = m_strRoot + String::utf8( m_pProject->settings.effectBaseDirectory.c_str() ); - if ( !EMPTY(m_strEffect) && !m_strEffect.ends_with( "/" ) ) - { - m_strEffect += "/"; - } - - SsContainer::getInstance().setAnimePackDir( m_strAnimePack ); - SsContainer::getInstance().setCellMapDir( m_strCellMap ); - SsContainer::getInstance().setImageDir( m_strImage ); - SsContainer::getInstance().setEffectDir( m_strEffect ); - - for ( int i = 0; i < m_pProject->animepackNames.size(); i++ ) { - String strName = String::utf8( m_pProject->animepackNames[i].c_str() ); -#ifdef SPRITESTUDIO_GODOT_EXTENSION - Ref resAnimePack = ResourceLoader::get_singleton()->load( m_strAnimePack + strName, "", ResourceLoader::CacheMode::CACHE_MODE_REUSE); - err = OK; // TODO: improve -#else -#ifdef GD_V4 - Ref resAnimePack = ResourceLoader::load( m_strAnimePack + strName, "", ResourceFormatLoader::CacheMode::CACHE_MODE_REUSE); - err = OK; // TODO: improve -#endif -#ifdef GD_V3 - Ref resAnimePack = ResourceLoader::load( m_strAnimePack + strName, "", false, &err ); -#endif -#endif - m_mapResAnimePack[strName] = resAnimePack; - - if ( err != OK ) { - ERR_PRINT( String( "SpriteStudio sspj ref ssae file load failed : " ) + strName ); - } - - SsAnimePack* pAnimePack = resAnimePack->getAnimePack(); - - if ( !pAnimePack ) { - continue; - } - - m_pProject->animeList.push_back( std::move( std::unique_ptr( pAnimePack ) ) ); - } - - for ( int i = 0; i < m_pProject->cellmapNames.size(); i++ ) { - String strName = String::utf8( m_pProject->cellmapNames[i].c_str() ); - -#ifdef SPRITESTUDIO_GODOT_EXTENSION - Ref resCellMap = ResourceLoader::get_singleton()->load( m_strCellMap + strName, "", ResourceLoader::CacheMode::CACHE_MODE_REUSE); - err = OK; // TODO: improve -#else -#ifdef GD_V4 - Ref resCellMap = ResourceLoader::load( m_strCellMap + strName, "", ResourceFormatLoader::CACHE_MODE_REUSE, &err ); -#endif -#ifdef GD_V3 - Ref resCellMap = ResourceLoader::load( m_strCellMap + strName, "", false, &err ); -#endif -#endif - - m_vecResCellMap.push_back( resCellMap ); - - if ( err != OK ) { - ERR_PRINT( String( "SpriteStudio sspj ref ssce file load failed : " ) + strName ); - } - - SsCellMap* pCellMap = resCellMap->getCellMap(); - - if ( !pCellMap ) { - continue; - } - - auto c = strName.utf8(); - - pCellMap->loadFilepath = c.ptr() ? SsString( c.ptr() ) : SsString( "" ); - - m_pProject->cellmapList.push_back( std::move( std::unique_ptr( pCellMap ) ) ); - } - - for ( int i = 0; i < m_pProject->effectFileNames.size(); i++ ) { - String strName = String::utf8( m_pProject->effectFileNames[i].c_str() ); - - -#ifdef SPRITESTUDIO_GODOT_EXTENSION - Ref resEffect = ResourceLoader::get_singleton()->load( m_strEffect + strName, "", ResourceLoader::CACHE_MODE_REUSE); - err = OK; // TODO: improve -#else -#ifdef GD_V4 - Ref resEffect = ResourceLoader::load( m_strEffect + strName, "", ResourceFormatLoader::CACHE_MODE_REUSE, &err ); -#endif -#ifdef GD_V3 - Ref resEffect = ResourceLoader::load( m_strEffect + strName, "", false, &err ); -#endif -#endif - - m_vecResEffect.push_back( resEffect ); - - if ( err != OK ) { - ERR_PRINT( String( "SpriteStudio sspj ref ssee file load failed : " ) + strName ); - } - - SsEffectFile* pEffect = resEffect->getEffect(); - - if ( !pEffect ) { - continue; - } - - ssloader_ssee::loadPostProcessing( pEffect, m_pProject ); - - m_pProject->effectfileList.push_back( std::move( std::unique_ptr( pEffect ) ) ); - } - - SsContainer::getInstance().setAnimePackDir( "" ); - SsContainer::getInstance().setCellMapDir( "" ); - SsContainer::getInstance().setImageDir( "" ); - SsContainer::getInstance().setEffectDir( "" ); - - return OK; -} - -Error GdResourceSsProject::saveToFile( const String& strPath, const Ref& res ) -{ - return FAILED; -} - -int GdResourceSsProject::getAnimePackCount() const -{ - if ( m_pProject ) { - return m_pProject->getAnimePackNum(); - } - - return 0; -} - -int GdResourceSsProject::getCellMapCount() const -{ - if ( m_pProject ) { - return m_pProject->getCellMapNum(); - } - - return 0; -} - -int GdResourceSsProject::getEffectCount() const -{ - if ( m_pProject ) { - return m_pProject->getEffectFileNum(); - } - - return 0; -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdResourceSsProject::getAnimePackNames() const -#else -Vector GdResourceSsProject::getAnimePackNames() const -#endif -{ -#ifdef SPRITESTUDIO_GODOT_EXTENSION - PackedStringArray vec; -#else - Vector vec; -#endif - - if ( m_pProject ) { - for ( int i = 0; i < m_pProject->getAnimePackNum(); i++ ) { - SsString strPath = m_pProject->getAnimePackFilePath( i, false ); - - vec.push_back( Variant( String::utf8( strPath.c_str() ) ) ); - } - } - - return vec; -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdResourceSsProject::getCellMapNames() const -#else -Vector GdResourceSsProject::getCellMapNames() const -#endif -{ -#ifdef SPRITESTUDIO_GODOT_EXTENSION - PackedStringArray vec; -#else - Vector vec; -#endif - - if ( m_pProject ) { - for ( int i = 0; i < m_pProject->getCellMapNum(); i++ ) { - SsString strPath = m_pProject->getCelMapFileOriginalPath( i ); - - vec.push_back( Variant( String::utf8( strPath.c_str() ) ) ); - } - } - - return vec; -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdResourceSsProject::getEffectNames() const -#else -Vector GdResourceSsProject::getEffectNames() const -#endif -{ -#ifdef SPRITESTUDIO_GODOT_EXTENSION - PackedStringArray vec; -#else - Vector vec; -#endif - - if ( m_pProject ) { - for ( int i = 0; i < m_pProject->getEffectFileNum(); i++ ) { - SsString strPath = m_pProject->getEffectFilePath( i ); - - vec.push_back( Variant( String::utf8( strPath.c_str() ) ) ); - } - } - - return vec; -} - -SsProject* GdResourceSsProject::getProject() const -{ - return m_pProject; -} - -String GdResourceSsProject::getRoot() const -{ - return m_strRoot; -} - -void GdResourceSsProject::_bind_methods() -{ - ClassDB::bind_method( D_METHOD( "get_anime_pack_count" ), &GdResourceSsProject::getAnimePackCount ); - ClassDB::bind_method( D_METHOD( "get_cell_map_count" ), &GdResourceSsProject::getCellMapCount ); - ClassDB::bind_method( D_METHOD( "get_effect_count" ), &GdResourceSsProject::getEffectCount ); - - ClassDB::bind_method( D_METHOD( "get_anime_pack_names" ), &GdResourceSsProject::getAnimePackNames ); - ClassDB::bind_method( D_METHOD( "get_cell_map_names" ), &GdResourceSsProject::getCellMapNames ); - ClassDB::bind_method( D_METHOD( "get_effect_names" ), &GdResourceSsProject::getEffectNames ); - - ClassDB::bind_method( D_METHOD( "set_anime_pack_resource", "res_anime_pack", "name" ), &GdResourceSsProject::setAnimePackResource ); - ClassDB::bind_method( D_METHOD( "get_anime_pack_resource", "name" ), &GdResourceSsProject::getAnimePackResource ); - - ClassDB::bind_method( D_METHOD( "set_cell_map_resource", "res_cell_map", "index" ), &GdResourceSsProject::setCellMapResource ); - ClassDB::bind_method( D_METHOD( "get_cell_map_resource_from_index", "index" ), &GdResourceSsProject::getCellMapResourceFromIndex ); - ClassDB::bind_method( D_METHOD( "get_cell_map_resource_from_name", "name" ), &GdResourceSsProject::getCellMapResourceFromName ); - - ClassDB::bind_method( D_METHOD( "set_effect_resource", "res_effect", "index" ), &GdResourceSsProject::setEffectResource ); - ClassDB::bind_method( D_METHOD( "get_effect_resource", "index" ), &GdResourceSsProject::getEffectResource ); - - ADD_GROUP( GdUiText( "Cellmap Settings" ), "" ); -// ADD_GROUP( GdUiText( "effect_settings" ), "" ); -} - -bool GdResourceSsProject::_set( const StringName& p_name, const Variant& p_property ) -{ - if ( !m_pProject ) { - return false; - } - - for ( int i = 0; i < getCellMapCount(); i++ ) { - auto e = m_vecResCellMap[i]; - String strName = String::utf8( m_pProject->cellmapNames[i].c_str() ); - - if ( p_name == strName ) { - const Ref& resCellMap = p_property; - - if ( resCellMap.is_null() ) { - continue; - } - - SsCellMap* pCellMap = const_cast( resCellMap->getCellMap() ); - - if ( !pCellMap ) { - continue; - } - - auto c = strName.utf8(); - - pCellMap->loadFilepath = c.ptr() ? SsString( c.ptr() ) : SsString( "" ); - - setCellMapResource( p_property, i ); - - return true; - } - } -/* - for ( int i = 0; i < getEffectCount(); i++ ) { - auto e = m_vecResEffect[i]; - String strName = String::utf8( m_pProject->effectFileNames[i].c_str() ); - - if ( p_name == strName ) { - setEffectResource( p_property, i ); - - return true; - } - } -*/ - return false; -} - -bool GdResourceSsProject::_get( const StringName& p_name, Variant& r_property ) const -{ - if ( !m_pProject ) { - return false; - } - - for ( int i = 0; i < getCellMapCount(); i++ ) { - auto e = m_vecResCellMap[i]; - String strName = String::utf8( m_pProject->cellmapNames[i].c_str() ); - - if ( p_name == strName ) { - r_property = getCellMapResourceFromIndex( i ); - - return true; - } - } -/* - for ( int i = 0; i < getEffectCount(); i++ ) { - auto e = m_vecResEffect[i]; - String strName = String::utf8( m_pProject->effectFileNames[i].c_str() ); - - if ( p_name == strName ) { - r_property = getEffectResource( i ); - - return true; - } - } -*/ - return false; -} - -void GdResourceSsProject::_get_property_list( List* p_list ) const -{ - if ( !m_pProject ) { - return; - } - - PropertyInfo propertyInfo; - - for ( int i = 0; i < getCellMapCount(); i++ ) { - auto e = m_vecResCellMap[i]; - String strName = String::utf8( m_pProject->cellmapNames[i].c_str() ); - - propertyInfo.name = strName; - propertyInfo.type = Variant::OBJECT; - propertyInfo.hint_string = "GdResourceSsCellMap"; - propertyInfo.hint = PROPERTY_HINT_RESOURCE_TYPE; - - p_list->push_back( propertyInfo ); - } -/* - for ( int i = 0; i < getEffectCount(); i++ ) { - auto e = m_vecResEffect[i]; - String strName = String::utf8( m_pProject->effectFileNames[i].c_str() ); - - propertyInfo.name = strName; - propertyInfo.type = Variant::OBJECT; - propertyInfo.hint_string = "GdResourceSsEffect"; - propertyInfo.hint = PROPERTY_HINT_RESOURCE_TYPE; - - p_list->push_back( propertyInfo ); - } -*/ -} diff --git a/gd_spritestudio/gd_resource_ssproject.h b/gd_spritestudio/gd_resource_ssproject.h deleted file mode 100644 index 477e9c4..0000000 --- a/gd_spritestudio/gd_resource_ssproject.h +++ /dev/null @@ -1,94 +0,0 @@ -/*! -* \file gd_resource_ssproject.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_RESOURCE_SSPROJECT_H -#define GD_RESOURCE_SSPROJECT_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#ifdef GD_V4 -#include "core/io/resource.h" -#include "core/io/resource_loader.h" -#include "core/templates/hash_map.h" -#endif -#ifdef GD_V3 -#include "core/resource.h" -#endif -#endif - -#include "SpriteStudio6-SDK/Common/Loader/ssloader_sspj.h" - -#include "ss_macros.h" -#include "gd_resource_ssanimepack.h" -#include "gd_resource_sscellmap.h" -#include "gd_resource_sseffect.h" - -SsSdkUsing - -class GdResourceSsProject : public Resource -{ - GDCLASS( GdResourceSsProject, Resource ); - -public : - GdResourceSsProject(); - virtual ~GdResourceSsProject(); - - void setAnimePackResource( const Ref& resAnimePack, const String& strName ); - Ref getAnimePackResource( const String& strName ) const; - - void setCellMapResource( const Ref& resCellMap, int iIndex ); - Ref getCellMapResourceFromIndex( int iIndex ) const; - Ref getCellMapResourceFromName( const String& strName ) const; - Ref getCellMapResource( const SsString& strName ) const; - - void setEffectResource( const Ref& resEffect, int iIndex ); - Ref getEffectResource( int iIndex ) const; - - Error loadFromFile( const String& strPath, const String& strOrgPath = "" ); - Error saveToFile( const String& strPath, const Ref& res ); - - int getAnimePackCount() const; - int getCellMapCount() const; - int getEffectCount() const; - -#ifdef SPRITESTUDIO_GODOT_EXTENSION - PackedStringArray getAnimePackNames() const; - PackedStringArray getCellMapNames() const; - PackedStringArray getEffectNames() const; -#else - Vector getAnimePackNames() const; - Vector getCellMapNames() const; - Vector getEffectNames() const; -#endif - - SsProject* getProject() const; - String getRoot() const; - -protected : - GdMultilevelCall static void _bind_methods(); - - GdMultilevelCall bool _set( const StringName& p_name, const Variant& p_property ); - GdMultilevelCall bool _get( const StringName& p_name, Variant& r_property ) const; - GdMultilevelCall void _get_property_list( List* p_list ) const; - -private : - SsProject* m_pProject; - String m_strRoot; - String m_strAnimePack; - String m_strCellMap; - String m_strImage; - String m_strEffect; - - HashMap> m_mapResAnimePack; - Vector> m_vecResCellMap; - Vector> m_vecResEffect; -}; - -#endif // GD_RESOURCE_SSPROJECT_H diff --git a/gd_spritestudio/gd_saver_bssanimepack.cpp b/gd_spritestudio/gd_saver_bssanimepack.cpp deleted file mode 100644 index 2f9d2c0..0000000 --- a/gd_spritestudio/gd_saver_bssanimepack.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/*! -* \file gd_saver_bssanimepack.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_saver_bssanimepack.h" - -#include "gd_io.h" -#include "gd_resource_ssdocument.h" - -#include "ss_io.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Error GdSaverBssAnimePack::_save(const Ref &p_resource, const String &p_path, uint32_t p_flags) -#else -#ifdef GD_V4 -Error GdSaverBssAnimePack::save( const Ref& p_resource, const String& p_path, uint32_t p_flags ) -#endif -#ifdef GD_V3 -Error GdSaverBssAnimePack::save( const String& p_path, const RES& p_resource, uint32_t p_flags ) -#endif -#endif -{ - if ( !Object::cast_to( *p_resource ) ) { - return FAILED; - } - - Ref resDocument = p_resource; - - if ( resDocument.is_null() ) { - return FAILED; -} - - String strSource = resDocument->getSource(); - - if ( strSource.length() == 0 ) { - return FAILED; - } - - return GdIO::saveVariantToFile( p_path, SsIO::toAnimePackVariant( strSource ) ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdSaverBssAnimePack::_recognize(const Ref &p_resource) -#else -#ifdef GD_V4 -bool GdSaverBssAnimePack::recognize( const Ref& p_resource ) const -#endif -#ifdef GD_V3 -bool GdSaverBssAnimePack::recognize( const RES& p_resource ) const -#endif -#endif -{ - return ( Object::cast_to( *p_resource ) != NULL ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdSaverBssAnimePack::_get_recognized_extensions(const Ref &resource) -{ - PackedStringArray extensions; - if (Object::cast_to(*resource)) { - extensions.push_back("gdssae"); - } - return extensions; -} -#else -#ifdef GD_V4 -void GdSaverBssAnimePack::get_recognized_extensions( const Ref& p_resource, List* p_extensions ) const -#endif -#ifdef GD_V3 -void GdSaverBssAnimePack::get_recognized_extensions( const RES& p_resource, List* p_extensions ) const -#endif -{ - if ( Object::cast_to( *p_resource ) ) { - p_extensions->push_back( "gdssae" ); - } -} -#endif diff --git a/gd_spritestudio/gd_saver_bssanimepack.h b/gd_spritestudio/gd_saver_bssanimepack.h deleted file mode 100644 index 5e9fe50..0000000 --- a/gd_spritestudio/gd_saver_bssanimepack.h +++ /dev/null @@ -1,43 +0,0 @@ -/*! -* \file gd_saver_bssanimepack.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_SAVER_BSSANIMEPACK_H -#define GD_SAVER_BSSANIMEPACK_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_saver.h" -#endif - -class GdSaverBssAnimePack : public ResourceFormatSaver -{ - GDCLASS( GdSaverBssAnimePack, ResourceFormatSaver ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - Error _save(const Ref &p_resource, const String &p_path, uint32_t p_flags) override; - bool _recognize(const Ref &p_resource); - PackedStringArray _get_recognized_extensions(const Ref &p_resource); -#else -#ifdef GD_V4 - virtual Error save( const Ref& p_resource, const String& p_path, uint32_t p_flags = 0 ) override; - virtual bool recognize( const Ref& p_resource ) const override; - virtual void get_recognized_extensions( const Ref& p_resource, List* p_extensions ) const override; -#endif -#ifdef GD_V3 - virtual Error save( const String& p_path, const RES& p_resource, uint32_t p_flags = 0 ) override; - virtual bool recognize( const RES& p_resource ) const override; - virtual void get_recognized_extensions( const RES& p_resource, List* p_extensions ) const override; -#endif -#endif -}; - -#endif // GD_SAVER_BSSANIMEPACK_H diff --git a/gd_spritestudio/gd_saver_bsscellmap.cpp b/gd_spritestudio/gd_saver_bsscellmap.cpp deleted file mode 100644 index 9352acf..0000000 --- a/gd_spritestudio/gd_saver_bsscellmap.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/*! -* \file gd_saver_bsscellmap.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_saver_bsscellmap.h" - -#include "gd_io.h" -#include "gd_resource_ssdocument.h" - -#include "ss_io.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Error GdSaverBssCellMap::_save(const Ref &p_resource, const String &p_path, uint32_t p_flags) -#else -#ifdef GD_V4 -Error GdSaverBssCellMap::save( const Ref& p_resource, const String& p_path, uint32_t p_flags ) -#endif -#ifdef GD_V3 -Error GdSaverBssCellMap::save( const String& p_path, const RES& p_resource, uint32_t p_flags ) -#endif -#endif -{ - if ( !Object::cast_to( *p_resource ) ) { - return FAILED; - } - - Ref resDocument = p_resource; - - if ( resDocument.is_null() ) { - return FAILED; -} - - String strSource = resDocument->getSource(); - - if ( strSource.length() == 0 ) { - return FAILED; - } - - return GdIO::saveVariantToFile( p_path, SsIO::toCellMapVariant( strSource ) ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdSaverBssCellMap::_recognize(const Ref &p_resource) -#else -#ifdef GD_V4 -bool GdSaverBssCellMap::recognize( const Ref& p_resource ) const -#endif -#ifdef GD_V3 -bool GdSaverBssCellMap::recognize( const RES& p_resource ) const -#endif -#endif -{ - return ( Object::cast_to( *p_resource ) != NULL ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdSaverBssCellMap::_get_recognized_extensions(const Ref &resource) -{ - PackedStringArray extensions; - if (Object::cast_to(*resource)) { - extensions.push_back("gdssce"); - } - return extensions; -} -#else -#ifdef GD_V4 -void GdSaverBssCellMap::get_recognized_extensions( const Ref& p_resource, List* p_extensions ) const -#endif -#ifdef GD_V3 -void GdSaverBssCellMap::get_recognized_extensions( const RES& p_resource, List* p_extensions ) const -#endif -{ - if ( Object::cast_to( *p_resource ) ) { - p_extensions->push_back( "gdssce" ); - } -} -#endif \ No newline at end of file diff --git a/gd_spritestudio/gd_saver_bsscellmap.h b/gd_spritestudio/gd_saver_bsscellmap.h deleted file mode 100644 index a25b96d..0000000 --- a/gd_spritestudio/gd_saver_bsscellmap.h +++ /dev/null @@ -1,43 +0,0 @@ -/*! -* \file gd_saver_bsscellmap.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_SAVER_BSSCELLMAP_H -#define GD_SAVER_BSSCELLMAP_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_saver.h" -#endif - -class GdSaverBssCellMap : public ResourceFormatSaver -{ - GDCLASS( GdSaverBssCellMap, ResourceFormatSaver ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - Error _save(const Ref &p_resource, const String &p_path, uint32_t p_flags) override; - bool _recognize(const Ref &p_resource); - PackedStringArray _get_recognized_extensions(const Ref &p_resource); -#else -#ifdef GD_V4 - virtual Error save( const Ref& p_resource, const String& p_path, uint32_t p_flags = 0 ) override; - virtual bool recognize( const Ref& p_resource ) const override; - virtual void get_recognized_extensions( const Ref& p_resource, List* p_extensions ) const override; -#endif -#ifdef GD_V3 - virtual Error save( const String& p_path, const RES& p_resource, uint32_t p_flags = 0 ) override; - virtual bool recognize( const RES& p_resource ) const override; - virtual void get_recognized_extensions( const RES& p_resource, List* p_extensions ) const override; -#endif -#endif -}; - -#endif // GD_SAVER_BSSCELLMAP_H diff --git a/gd_spritestudio/gd_saver_bsseffect.cpp b/gd_spritestudio/gd_saver_bsseffect.cpp deleted file mode 100644 index b06e720..0000000 --- a/gd_spritestudio/gd_saver_bsseffect.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/*! -* \file gd_saver_bsseffect.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_saver_bsseffect.h" - -#include "gd_io.h" -#include "gd_resource_ssdocument.h" - -#include "ss_io.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Error GdSaverBssEffect::_save(const Ref &p_resource, const String &p_path, uint32_t p_flags) -#else -#ifdef GD_V4 -Error GdSaverBssEffect::save( const Ref& p_resource, const String& p_path, uint32_t p_flags ) -#endif -#ifdef GD_V3 -Error GdSaverBssEffect::save( const String& p_path, const RES& p_resource, uint32_t p_flags ) -#endif -#endif -{ - if ( !Object::cast_to( *p_resource ) ) { - return FAILED; - } - - Ref resDocument = p_resource; - - if ( resDocument.is_null() ) { - return FAILED; -} - - String strSource = resDocument->getSource(); - - if ( strSource.length() == 0 ) { - return FAILED; - } - - return GdIO::saveVariantToFile( p_path, SsIO::toEffectVariant( strSource ) ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdSaverBssEffect::_recognize(const Ref &p_resource) -#else -#ifdef GD_V4 -bool GdSaverBssEffect::recognize( const Ref& p_resource ) const -#endif -#ifdef GD_V3 -bool GdSaverBssEffect::recognize( const RES& p_resource ) const -#endif -#endif -{ - return ( Object::cast_to( *p_resource ) != NULL ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdSaverBssEffect::_get_recognized_extensions(const Ref &resource) -{ - PackedStringArray extensions; - if (Object::cast_to(*resource)) { - extensions.push_back("gdssee"); - } - return extensions; -} -#else -#ifdef GD_V4 -void GdSaverBssEffect::get_recognized_extensions( const Ref& p_resource, List* p_extensions ) const -#endif -#ifdef GD_V3 -void GdSaverBssEffect::get_recognized_extensions( const RES& p_resource, List* p_extensions ) const -#endif -{ - if ( Object::cast_to( *p_resource ) ) { - p_extensions->push_back( "gdssee" ); - } -} -#endif \ No newline at end of file diff --git a/gd_spritestudio/gd_saver_bsseffect.h b/gd_spritestudio/gd_saver_bsseffect.h deleted file mode 100644 index 807edb3..0000000 --- a/gd_spritestudio/gd_saver_bsseffect.h +++ /dev/null @@ -1,43 +0,0 @@ -/*! -* \file gd_saver_bsseffect.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_SAVER_BSSEFFECT_H -#define GD_SAVER_BSSEFFECT_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_saver.h" -#endif - -class GdSaverBssEffect : public ResourceFormatSaver -{ - GDCLASS( GdSaverBssEffect, ResourceFormatSaver ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - Error _save(const Ref &p_resource, const String &p_path, uint32_t p_flags) override; - bool _recognize(const Ref &p_resource); - PackedStringArray _get_recognized_extensions(const Ref &p_resource); -#else -#ifdef GD_V4 - virtual Error save( const Ref& p_resource, const String& p_path, uint32_t p_flags = 0 ) override; - virtual bool recognize( const Ref& p_resource ) const override; - virtual void get_recognized_extensions( const Ref& p_resource, List* p_extensions ) const override; -#endif -#ifdef GD_V3 - virtual Error save( const String& p_path, const RES& p_resource, uint32_t p_flags = 0 ) override; - virtual bool recognize( const RES& p_resource ) const override; - virtual void get_recognized_extensions( const RES& p_resource, List* p_extensions ) const override; -#endif -#endif -}; - -#endif // GD_SAVER_BSSEFFECT_H diff --git a/gd_spritestudio/gd_saver_bssproject.cpp b/gd_spritestudio/gd_saver_bssproject.cpp deleted file mode 100644 index 86bc163..0000000 --- a/gd_spritestudio/gd_saver_bssproject.cpp +++ /dev/null @@ -1,77 +0,0 @@ -/*! -* \file gd_saver_bssproject.cpp -* \author CRI Middleware Co., Ltd. -*/ -#include "gd_saver_bssproject.h" - -#include "gd_io.h" -#include "gd_resource_ssdocument.h" - -#include "ss_io.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -Error GdSaverBssProject::_save(const Ref &p_resource, const String &p_path, uint32_t p_flags) -#else -#ifdef GD_V4 -Error GdSaverBssProject::save( const Ref& p_resource, const String& p_path, uint32_t p_flags ) -#endif -#ifdef GD_V3 -Error GdSaverBssProject::save( const String& p_path, const RES& p_resource, uint32_t p_flags ) -#endif -#endif -{ - if ( !Object::cast_to( *p_resource ) ) { - return FAILED; - } - - Ref resDocument = p_resource; - - if ( resDocument.is_null() ) { - return FAILED; -} - - String strSource = resDocument->getSource(); - - if ( strSource.length() == 0 ) { - return FAILED; - } - - return GdIO::saveVariantToFile( p_path, SsIO::toProjectVariant( strSource ) ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -bool GdSaverBssProject::_recognize(const Ref &p_resource) -#else -#ifdef GD_V4 -bool GdSaverBssProject::recognize( const Ref& p_resource ) const -#endif -#ifdef GD_V3 -bool GdSaverBssProject::recognize( const RES& p_resource ) const -#endif -#endif -{ - return ( Object::cast_to( *p_resource ) != NULL ); -} - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -PackedStringArray GdSaverBssProject::_get_recognized_extensions(const Ref &resource) -{ - PackedStringArray extensions; - if (Object::cast_to(*resource)) { - extensions.push_back("gdsspj"); - } - return extensions; -} -#else -#ifdef GD_V4 -void GdSaverBssProject::get_recognized_extensions( const Ref& p_resource, List* p_extensions ) const -#endif -#ifdef GD_V3 -void GdSaverBssProject::get_recognized_extensions( const RES& p_resource, List* p_extensions ) const -#endif -{ - if ( Object::cast_to( *p_resource ) ) { - p_extensions->push_back( "gdsspj" ); - } -} -#endif \ No newline at end of file diff --git a/gd_spritestudio/gd_saver_bssproject.h b/gd_spritestudio/gd_saver_bssproject.h deleted file mode 100644 index 7334c09..0000000 --- a/gd_spritestudio/gd_saver_bssproject.h +++ /dev/null @@ -1,43 +0,0 @@ -/*! -* \file gd_saver_bssproject.h -* \author CRI Middleware Co., Ltd. -*/ -#ifndef GD_SAVER_BSSPROJECT_H -#define GD_SAVER_BSSPROJECT_H - -#include "gd_macros.h" - -#ifdef SPRITESTUDIO_GODOT_EXTENSION -#include -#include -#include -using namespace godot; -#else -#include "core/io/resource_saver.h" -#endif - -class GdSaverBssProject : public ResourceFormatSaver -{ - GDCLASS( GdSaverBssProject, ResourceFormatSaver ); - -public : -#ifdef SPRITESTUDIO_GODOT_EXTENSION - static void _bind_methods(){}; - Error _save(const Ref &p_resource, const String &p_path, uint32_t p_flags) override; - bool _recognize(const Ref &p_resource); - PackedStringArray _get_recognized_extensions(const Ref &p_resource); -#else -#ifdef GD_V4 - virtual Error save( const Ref& p_resource, const String& p_path, uint32_t p_flags = 0 ) override; - virtual bool recognize( const Ref& p_resource ) const override; - virtual void get_recognized_extensions( const Ref& p_resource, List* p_extensions ) const override; -#endif -#ifdef GD_V3 - virtual Error save( const String& p_path, const RES& p_resource, uint32_t p_flags = 0 ) override; - virtual bool recognize( const RES& p_resource ) const override; - virtual void get_recognized_extensions( const RES& p_resource, List* p_extensions ) const override; -#endif -#endif -}; - -#endif // GD_SAVER_BSSPROJECT_H diff --git a/gd_spritestudio/gd_ss_editor_plugin.cpp b/gd_spritestudio/gd_ss_editor_plugin.cpp new file mode 100644 index 0000000..d7d407b --- /dev/null +++ b/gd_spritestudio/gd_ss_editor_plugin.cpp @@ -0,0 +1,34 @@ +#ifdef TOOLS_ENABLED + +#include "gd_ss_editor_plugin.h" + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +GdSsEditorPlugin::GdSsEditorPlugin() { +} +#else +#include "editor/editor_node.h" +GdSsEditorPlugin::GdSsEditorPlugin(EditorNode *node) { +} +#endif + +void GdSsEditorPlugin::_notification(int what) { + switch (what) { + case NOTIFICATION_ENTER_TREE: { + if (this->import_dock == nullptr) { + this->import_dock = memnew(GdSsImportControl); + this->import_dock->set_name(String::utf8("SSPJ")); + add_control_to_dock(EditorPlugin::DOCK_SLOT_RIGHT_UL, this->import_dock, Ref()); + } + } break; + + case NOTIFICATION_EXIT_TREE: { + if (this->import_dock) { + remove_control_from_docks(this->import_dock); + this->import_dock->queue_free(); + this->import_dock = nullptr; + } + } break; + } +} + +#endif // #ifdef TOOLS_ENABLED diff --git a/gd_spritestudio/gd_ss_editor_plugin.h b/gd_spritestudio/gd_ss_editor_plugin.h new file mode 100644 index 0000000..df8dc0d --- /dev/null +++ b/gd_spritestudio/gd_ss_editor_plugin.h @@ -0,0 +1,48 @@ +#pragma once + +#ifdef TOOLS_ENABLED + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +#include +using namespace godot; +#else +#include "editor/plugins/editor_plugin.h" +#include "editor/editor_node.h" +#endif + +#include "gd_ss_import_dock.h" + +class GdSsEditorPlugin : public EditorPlugin { + GDCLASS(GdSsEditorPlugin, EditorPlugin) + + GdSsImportControl *import_dock = nullptr; + +protected: + static void _bind_methods() {} + void _notification(int what); + +public: +#ifdef SPRITESTUDIO_GODOT_EXTENSION + explicit GdSsEditorPlugin(); +#else + explicit GdSsEditorPlugin(EditorNode *node); +#endif + +#ifdef SPRITESTUDIO_GODOT_EXTENSION + String _get_plugin_name() const override { + return "SpriteStudioEditorPlugin"; + } +#else +#if VERSION_MAJOR > 3 && VERSION_MINOR > 3 + String get_plugin_name() const override { + return "SpriteStudioEditorPlugin"; + } +#else + String get_name() const override { + return "SpriteStudioEditorPlugin"; + } +#endif +#endif +}; + +#endif // #ifdef TOOLS_ENABLED diff --git a/gd_spritestudio/gd_ss_import_dock.cpp b/gd_spritestudio/gd_ss_import_dock.cpp new file mode 100644 index 0000000..7d29e6c --- /dev/null +++ b/gd_spritestudio/gd_ss_import_dock.cpp @@ -0,0 +1,393 @@ +#ifdef TOOLS_ENABLED + +#include "gd_macros.h" + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +#include +#include +#include +#include +using namespace godot; +#else +#include "core/io/dir_access.h" +#include "editor/editor_interface.h" +#if VERSION_MAJOR >= 4 + #if VERSION_MINOR >= 5 + #include "editor/file_system/editor_file_system.h" + #else + #include "editor/editor_file_system.h" + #endif +#endif +#include "scene/main/window.h" +#endif + +#include "gd_clickable_label.h" +#include "gd_ss_import_dock.h" +#include "gd_progress_dialog.h" +#include "ssconverter.h" + +void GdSsImportControl::_bind_methods() { + ClassDB::bind_method(D_METHOD("_on_window_files_dropped", "files"), &GdSsImportControl::_on_window_files_dropped); + ClassDB::bind_method(D_METHOD("_on_line_edit_submitted", "text"), &GdSsImportControl::_on_line_edit_submitted); + ClassDB::bind_method(D_METHOD("_on_browse_button_pressed"), &GdSsImportControl::_on_browse_button_pressed); + ClassDB::bind_method(D_METHOD("_on_reset_button_pressed"), &GdSsImportControl::_on_reset_button_pressed); + ClassDB::bind_method(D_METHOD("_on_dir_selected"), &GdSsImportControl::_on_dir_selected); +} + + +GdSsImportControl::GdSsImportControl() { + set_h_size_flags(Control::SIZE_EXPAND_FILL); + set_v_size_flags(Control::SIZE_EXPAND_FILL); + + HBoxContainer *hbox = memnew(HBoxContainer); + add_child(hbox); + Label *label = memnew(Label); + label->set_text("converter version:"); + hbox->add_child(label); + + GdClickableLabel *clickable_label = memnew(GdClickableLabel); + const char *v = ss_converter_version(); + String version = String(v); + clickable_label->set_text(version); + ss_converter_version_free((char*)v); + v = nullptr; + hbox->add_child(clickable_label); + + hbox = memnew(HBoxContainer); + add_child(hbox); + + label = memnew(Label); + label->set_text("Output Dir:"); + hbox->add_child(label); + + path_line_edit = memnew(LineEdit); + path_line_edit->set_h_size_flags(SIZE_EXPAND_FILL); + path_line_edit->set_editable(true); + path_line_edit->connect("text_submitted", Callable(this, "_on_line_edit_submitted")); + hbox->add_child(path_line_edit); + + browse_button = memnew(Button); + browse_button->set_text("..."); + browse_button->set_tooltip_text("open EditorFileDialog"); + browse_button->connect("pressed", Callable(this, "_on_browse_button_pressed")); + hbox->add_child(browse_button); + + reset_button = memnew(Button); + reset_button->set_text(L"⟲"); + reset_button->set_tooltip_text("Reset to default directory"); + reset_button->connect("pressed", callable_mp(this, &GdSsImportControl::_on_reset_button_pressed)); + hbox->add_child(reset_button); + + file_dialog = memnew(EditorFileDialog); + file_dialog->set_access(EditorFileDialog::ACCESS_RESOURCES); + file_dialog->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_DIR); + file_dialog->connect("dir_selected", Callable(this, "_on_dir_selected")); + add_child(file_dialog); + + background_panel = memnew(Panel); + background_panel->set_v_size_flags(Control::SIZE_EXPAND_FILL); + background_panel->set_h_size_flags(Control::SIZE_EXPAND_FILL); + background_panel->set_mouse_filter(Control::MOUSE_FILTER_IGNORE); + + Ref panel_style = memnew(StyleBoxFlat); + panel_style->set_bg_color(Color(0.2, 0.2, 0.25, 0.6)); + panel_style->set_border_width_all(2); + panel_style->set_border_color(Color(0.4, 0.4, 0.5, 0.8)); + panel_style->set_corner_radius_all(6); +#ifdef SPRITESTUDIO_GODOT_EXTENSION + background_panel->add_theme_stylebox_override("panel", panel_style); +#else + background_panel->add_theme_style_override("panel", panel_style); +#endif + + add_child(background_panel); + + instruction_label = memnew(Label); + instruction_label->set_text(L"Drop a sspj file here\n from out of the godot project"); + instruction_label->set_horizontal_alignment(HORIZONTAL_ALIGNMENT_CENTER); + instruction_label->set_vertical_alignment(VERTICAL_ALIGNMENT_CENTER); + instruction_label->set_anchors_preset(Control::PRESET_FULL_RECT); + instruction_label->set_mouse_filter(Control::MOUSE_FILTER_IGNORE); + background_panel->add_child(instruction_label); + + _load_settings(); +} + +GdSsImportControl::~GdSsImportControl() { + stop_intercepting(); + +} + +void GdSsImportControl::_notification(int p_what) { + switch(p_what) { + case NOTIFICATION_ENTER_TREE: { + start_intercepting(); + } break; + case NOTIFICATION_EXIT_TREE: { + stop_intercepting(); + } break; + case NOTIFICATION_PROCESS: { + if (is_importing) { + bool wait_for_finish = false; + + for (size_t i = 0; i < import_contexts.size(); ++i) { + void* ctx = import_contexts[i]; + bool ret = ss_converter_is_finished((Context *)ctx); + if (!ret) { + wait_for_finish = true; + } else { + import_finished_contexts.set(i, true); + } + } + + int finished_num = 0; + for (size_t i = 0; i < import_finished_contexts.size(); ++i) { + if (import_finished_contexts[i]) { + finished_num++; + } + } + + if (finished_num != import_prev_num) { + import_dialog->step(vformat("Importing SSPJ: %d/%d", finished_num, import_finished_contexts.size()), finished_num); + import_prev_num = finished_num; + } + + if (!wait_for_finish) { + import_dialog->finish(); + for (size_t i = 0; i < import_contexts.size(); ++i) { + void* ctx = import_contexts[i]; + ss_converter_destroy((Context*)ctx); + } + import_contexts.clear(); + import_finished_contexts.clear(); + import_dialog = nullptr; + is_importing = false; + set_process(false); + +#if defined(SPRITESTUDIO_GODOT_EXTENSION) || (VERSION_MAJOR >= 4 && VERSION_MINOR >= 6) + EditorInterface::get_singleton()->get_resource_filesystem()->scan(); +#else + EditorInterface::get_singleton()->get_resource_file_system()->scan(); +#endif + } + } + } break; + } +} + +void* GdSsImportControl::process_file(const String &source_sspj_path, const String &dst_dir_path) { + auto ctx = ss_converter_create(); + + // Keep CharString alive until the end of this function call + CharString src_utf8 = source_sspj_path.utf8(); + CharString dst_utf8 = dst_dir_path.utf8(); + + ss_converter_convert(ctx, src_utf8.get_data(), dst_utf8.get_data(), [](const char *msg){ + print_line(String::utf8(msg)); + }); + + return ctx; +} + +void GdSsImportControl::start_intercepting() { + if (is_intercepting) return; + + auto window = get_window(); + if (!window) return; + +#ifdef SPRITESTUDIO_GODOT_EXTENSION + TypedArray connections = window->get_signal_connection_list("files_dropped"); +#else + List connections; + window->get_signal_connection_list("files_dropped", &connections); +#endif + +#ifdef SPRITESTUDIO_GODOT_EXTENSION + for (int i = 0; i < connections.size(); i++) { + Dictionary conn = connections[i]; + Callable target = conn["callable"]; +#else + for (const Connection &conn : connections) { + Callable target = conn.callable; +#endif + + if (target.get_object() == this) continue; + + original_drop_handler = target; + window->disconnect("files_dropped", original_drop_handler); + + break; + } + + if (!window->is_connected("files_dropped", Callable(this, "_on_window_files_dropped"))) { + window->connect("files_dropped", Callable(this, "_on_window_files_dropped")); + } + + is_intercepting = true; +} + +void GdSsImportControl::stop_intercepting() { + if (!is_intercepting) return; + + auto window = get_window(); + if (!window) return; + + if (window->is_connected("files_dropped", Callable(this, "_on_window_files_dropped"))) { + window->disconnect("files_dropped", Callable(this, "_on_window_files_dropped")); + } + + if (original_drop_handler.is_valid()) { + if (!window->is_connected("files_dropped", original_drop_handler)) { + window->connect("files_dropped", original_drop_handler); + } + } + + is_intercepting = false; +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +void GdSsImportControl::_on_window_files_dropped(const PackedStringArray &p_files) { +#else +void GdSsImportControl::_on_window_files_dropped(const Vector &p_files) { +#endif + if (is_reemitting) return; + + if (!is_visible_in_tree()) { + _perform_default_drop_logic(p_files); + return; + } + + if (get_global_rect().has_point(get_global_mouse_position())) { + + if (is_importing) { + print_line("GdSsImportControl: Already importing. Please wait."); + return; + } + + // print_line("GdSsImportControl: Processing custom file drop..."); + + // validate sspj file +#ifdef SPRITESTUDIO_GODOT_EXTENSION + PackedStringArray sspj_files; +#else + Vector sspj_files; +#endif + for (int i = 0; i < p_files.size(); i++) { + String file_path = p_files[i]; + String ext = file_path.get_extension(); + if (ext == "sspj") { + sspj_files.push_back(file_path); + } + } + if (sspj_files.is_empty()) { + print_line("GdSsImportControl: sspj files not found."); + return; + } + + String output_dir = path_line_edit->get_text(); + + Ref da = DirAccess::open("res://"); + if (!da->dir_exists(output_dir)) { + //UtilityFunctions::printerr("Output directory does not exist, using default: " + output_dir); + da->make_dir_recursive(output_dir); + } + + for (int i = 0; i < sspj_files.size(); i++) { + String src_file_path = sspj_files[i]; + String src_file = src_file_path.get_file(); + String src_stem = src_file.get_basename(); + String dst_dir = output_dir.path_join(src_stem); + String global_dst_dir = ProjectSettings::get_singleton()->globalize_path(dst_dir); + String global_src_file_path = ProjectSettings::get_singleton()->globalize_path(src_file_path); + void *ctx = process_file(global_src_file_path, global_dst_dir); + print_line("GdSsImportControl: convert sspj file: " + src_file_path + ", to ssab files: " + dst_dir); + import_contexts.push_back(ctx); + } + + import_dialog = memnew(GdProgressDialog); + EditorInterface::get_singleton()->get_base_control()->add_child(import_dialog); + import_dialog->show_progress("Importing SSPJ...", import_contexts.size()); + + import_finished_contexts.resize(import_contexts.size()); + import_prev_num = 0; + is_importing = true; + import_dialog->step(vformat("Importing SSPJ: %d/%d", 0, import_finished_contexts.size()), 0); + + set_process(true); + } else { + _perform_default_drop_logic(p_files); + } +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +void GdSsImportControl::_perform_default_drop_logic(const PackedStringArray &p_files) { + +#else +void GdSsImportControl::_perform_default_drop_logic(const Vector &p_files) { +#endif + Window *window = get_window(); + if (!window || !original_drop_handler.is_valid()) return; + + is_reemitting = true; + + if (!window->is_connected("files_dropped", original_drop_handler)) { + window->connect("files_dropped", original_drop_handler); + } + + window->emit_signal("files_dropped", p_files); + + if (window->is_connected("files_dropped", original_drop_handler)) { + window->disconnect("files_dropped", original_drop_handler); + } + + is_reemitting = false; +} + +void GdSsImportControl::_on_line_edit_submitted(const String& p_path) { + _save_settings(); +} + +void GdSsImportControl::_on_browse_button_pressed() { + auto p = path_line_edit->get_text(); + Ref da = DirAccess::open("res://"); + String dir; + if (da->dir_exists(p)) { + dir = p; + } else { + dir = "res://"; + } + + file_dialog->set_current_dir(dir); + file_dialog->popup_file_dialog(); +} + +void GdSsImportControl::_on_reset_button_pressed() { + path_line_edit->set_text(DEFAULT_PATH); + _save_settings(); +} + +void GdSsImportControl::_on_dir_selected(const String &p_path) { + path_line_edit->set_text(p_path); + _save_settings(); +} + +void GdSsImportControl::_load_settings() { + ProjectSettings *ps = ProjectSettings::get_singleton(); + String path = DEFAULT_PATH; + + if (ps->has_setting(SETTING_KEY)) { + path = ps->get_setting(SETTING_KEY); + } else { + ps->set_setting(SETTING_KEY, DEFAULT_PATH); + } + + path_line_edit->set_text(path); +} + +void GdSsImportControl::_save_settings() { + ProjectSettings *ps = ProjectSettings::get_singleton(); + ps->set_setting(SETTING_KEY, path_line_edit->get_text()); + ps->save(); +} + +#endif // #ifdef TOOLS_ENABLED diff --git a/gd_spritestudio/gd_ss_import_dock.h b/gd_spritestudio/gd_ss_import_dock.h new file mode 100644 index 0000000..662f872 --- /dev/null +++ b/gd_spritestudio/gd_ss_import_dock.h @@ -0,0 +1,87 @@ +#pragma once + +#ifdef TOOLS_ENABLED + +#include "gd_macros.h" + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +using namespace godot; +#else +#include "scene/gui/control.h" +#include "scene/gui/panel.h" +#include "scene/gui/label.h" +#include "scene/resources/style_box_flat.h" + +#include "scene/gui/box_container.h" +#include "scene/gui/line_edit.h" +#include "scene/gui/button.h" +#include "editor/gui/editor_file_dialog.h" +#include "core/config/project_settings.h" +#endif + +class GdSsImportControl : public VBoxContainer { + GDCLASS(GdSsImportControl, VBoxContainer) + +protected: + static void _bind_methods(); + +public: + GdSsImportControl(); + ~GdSsImportControl(); + + void _notification(int p_what); + + void* process_file(const String &source_sspj_path, const String &dst_dir_path); + + void start_intercepting(); + void stop_intercepting(); + +private: + Callable original_drop_handler; + bool is_intercepting = false; + bool is_reemitting = false; + + Vector import_contexts; + class GdProgressDialog* import_dialog = nullptr; + Vector import_finished_contexts; + int import_prev_num = 0; + bool is_importing = false; + +#ifdef SPRITESTUDIO_GODOT_EXTENSION + void _on_window_files_dropped(const PackedStringArray &p_files); + void _perform_default_drop_logic(const PackedStringArray &p_files); +#else + void _on_window_files_dropped(const Vector &p_files); + void _perform_default_drop_logic(const Vector &p_files); +#endif + + Label *instruction_label = nullptr; + Panel *background_panel = nullptr; + + LineEdit *path_line_edit = nullptr; + Button *browse_button = nullptr; + Button *reset_button = nullptr; + EditorFileDialog *file_dialog = nullptr; + + const String SETTING_KEY = "spritestudio/output_directory"; + const String DEFAULT_PATH = "res://ssab_generated"; + + void _on_line_edit_submitted(const String& p_path); + void _on_browse_button_pressed(); + void _on_reset_button_pressed(); + void _on_dir_selected(const String &p_path); + void _load_settings(); + void _save_settings(); +}; +#endif // #ifdef TOOLS_ENABLED diff --git a/gd_spritestudio/gd_ssab_resource.cpp b/gd_spritestudio/gd_ssab_resource.cpp new file mode 100644 index 0000000..bdcff92 --- /dev/null +++ b/gd_spritestudio/gd_ssab_resource.cpp @@ -0,0 +1,227 @@ + +#include "gd_ssab_resource.h" +#ifdef SPRITESTUDIO_GODOT_EXTENSION +#include +#include +#else +#include "core/error/error_list.h" +#include "core/error/error_macros.h" +#include "core/io/file_access.h" +#endif + +void GdSsabResource::_bind_methods() { + ClassDB::bind_method(D_METHOD("load_from_file", "path"), &GdSsabResource::load_from_file); + ClassDB::bind_method(D_METHOD("save_to_file", "path"), &GdSsabResource::save_to_file); + ClassDB::bind_method(D_METHOD("is_valid"), &GdSsabResource::is_valid); + ClassDB::bind_method(D_METHOD("get_animation_count"), &GdSsabResource::get_animation_count); + ClassDB::bind_method(D_METHOD("get_animation_names"), &GdSsabResource::get_animation_names); +} + +bool GdSsabResource::is_valid() const { + if (binary.size() == 0) { + return false; + } + + ::flatbuffers::Verifier verifier(binary.ptr(), binary.size()); + if (!ss::format::VerifySsAnimeBinaryBuffer(verifier)) { + return false; + } + + const ss::format::SsAnimeBinary *ssab = ss::format::GetSsAnimeBinary(binary.ptr()); + if (ssab->parts() == nullptr || ssab->parts()->size() == 0) { + return false; + } + + if (ssab->animations() == nullptr || ssab->animations()->size() == 0) { + return false; + } + + return true; +} + +Error GdSsabResource::load_from_file(const String &path) { + Error error = OK; + _parent_dir = path.get_base_dir(); +#ifdef SPRITESTUDIO_GODOT_EXTENSION + binary = FileAccess::get_file_as_bytes(path); + if (binary.size() == 0) { + return ERR_INVALID_DATA; + } +#else + binary = FileAccess::get_file_as_bytes(path, &error); + if (error != OK) { + return error; + } +#endif + + if (!is_valid()) { + binary.clear(); + return ERR_INVALID_DATA; + } + + return OK; +} + +Error GdSsabResource::save_to_file(const String &path) { + Error error; +#ifdef SPRITESTUDIO_GODOT_EXTENSION + Ref file = FileAccess::open(path, FileAccess::WRITE); + if (!file.is_valid()) + return ERR_FILE_CANT_OPEN; +#else + Ref file = FileAccess::open(path, FileAccess::WRITE, &error); + if (error != OK) + return error; +#endif + file->store_buffer(binary.ptr(), binary.size()); + file->flush(); + return OK; +} + +int GdSsabResource::get_animation_count() { + auto ss_anime_binary = this->get_ss_anime_binary(); + return ss_anime_binary->animations()->size(); +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +PackedStringArray GdSsabResource::get_animation_names() { + PackedStringArray vec; +#else +Vector GdSsabResource::get_animation_names() { + Vector vec; +#endif + auto ss_anime_binary = this->get_ss_anime_binary(); + auto num = ss_anime_binary->animations()->size(); + for (int i=0; i < num; i++) { + auto animation = ss_anime_binary->animations()->Get(i); + auto name = animation->name(); + vec.push_back(String(name->c_str())); + } + return vec; +} + +const ss::format::SsAnimeBinary *GdSsabResource::get_ss_anime_binary() { + return ss::format::GetSsAnimeBinary(this->binary.ptr()); +} + +const uint8_t *GdSsabResource::get_data_ptr() { + return this->binary.ptr(); +} + +int64_t GdSsabResource::get_data_size() { + return this->binary.size(); +} + +ss::format::AnimationData *GdSsabResource::find_animation(const String &name) { + auto ss_anime_binary = this->get_ss_anime_binary(); + auto num = ss_anime_binary->animations()->size(); + for (int i=0; i < num; i++) { + auto animation = ss_anime_binary->animations()->Get(i); + auto anim_name = animation->name(); + if (name == String(anim_name->c_str())) { + return (ss::format::AnimationData *)animation; + } + } + return nullptr; +} + +String GdSsabResource::get_parent_dir() const { + return this->_parent_dir; +} + +#ifndef SPRITESTUDIO_GODOT_EXTENSION +Error GdSsabResource::copy_from(const Ref &p_resource) { + auto error = Resource::copy_from(p_resource); + if (error != OK) + return error; + const Ref &ssabFile = + static_cast &>(p_resource); + this->binary = ssabFile->binary; + emit_signal(SNAME("ssab_file_changed")); + return OK; +} +#endif + + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +Variant GdSsabResourceFormatLoader::_load(const String &path, + const String &original_path, + bool use_sub_threads, + int32_t cache_mode) { +#else +Ref GdSsabResourceFormatLoader::load(const String &path, + const String &original_path, + Error *error, bool use_sub_threads, + float *progress, + CacheMode cache_mode) { +#endif + Ref ssab_file = memnew(GdSsabResource); + ssab_file->load_from_file(path); +#ifndef SPRITESTUDIO_GODOT_EXTENSION + if (error) + *error = OK; +#endif + return ssab_file; +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +PackedStringArray GdSsabResourceFormatLoader::_get_recognized_extensions() { + PackedStringArray extensions; + extensions.push_back("ssab"); + return extensions; +} +#else +void GdSsabResourceFormatLoader::get_recognized_extensions(List *extensions) const { + extensions->push_back("ssab"); +} +#endif + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +String GdSsabResourceFormatLoader::_get_resource_type(const String &path) { +#else +String GdSsabResourceFormatLoader::get_resource_type(const String &path) const { +#endif + return path.ends_with(".ssab") ? "GdSsabResource" : ""; +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +bool GdSsabResourceFormatLoader::_handles_type(const StringName &type) { +#else +bool GdSsabResourceFormatLoader::handles_type(const String &type) const { +#endif + return type == StringName("GdSsabResource") || ClassDB::is_parent_class(type, "GdSsabResource"); +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +Error GdSsabResourceFormatSaver::_save(const Ref &resource, const String &path, uint32_t flags) { +#else +Error GdSsabResourceFormatSaver::save(const Ref &resource, const String &path, uint32_t flags) { +#endif + Ref res = resource; + Error error = res->save_to_file(path); + return error; +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +PackedStringArray GdSsabResourceFormatSaver::_get_recognized_extensions(const Ref &resource) { + PackedStringArray extensions; + if (Object::cast_to(*resource)) { + extensions.push_back("bssab"); + } + return extensions; +} +#else +void GdSsabResourceFormatSaver::get_recognized_extensions(const Ref &resource, List *p_extensions) const { + if (Object::cast_to(*resource)) { + p_extensions->push_back("bssab"); + } +} +#endif + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +bool GdSsabResourceFormatSaver::_recognize(const Ref &resource) { +#else +bool GdSsabResourceFormatSaver::recognize(const Ref &resource) const { +#endif + return Object::cast_to(*resource) != nullptr; +} diff --git a/gd_spritestudio/gd_ssab_resource.h b/gd_spritestudio/gd_ssab_resource.h new file mode 100644 index 0000000..d98aca0 --- /dev/null +++ b/gd_spritestudio/gd_ssab_resource.h @@ -0,0 +1,106 @@ +#pragma once + +#include "gd_macros.h" + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +#include +#include +#include +#include +#include +#include +using namespace godot; +#else +#include "core/io/resource_loader.h" +#include "core/io/resource_saver.h" +#endif + +#include "runtime/ssab.h" + +class GdSsabResource : public Resource { + GDCLASS(GdSsabResource, Resource); + +protected: + static void _bind_methods(); + +#ifdef SPRITESTUDIO_GODOT_EXTENSION + PackedByteArray binary; +#else + Vector binary; +#endif + +public: + Error load_from_file(const String &path); + Error save_to_file(const String &path); + bool is_valid() const; + int get_animation_count(); +#ifdef SPRITESTUDIO_GODOT_EXTENSION + PackedStringArray get_animation_names(); +#else + Vector get_animation_names(); +#endif + + const ss::format::SsAnimeBinary *get_ss_anime_binary(); + const uint8_t *get_data_ptr(); + int64_t get_data_size(); + ss::format::AnimationData *find_animation(const String &name); + String get_parent_dir() const; + +#ifndef SPRITESTUDIO_GODOT_EXTENSION + virtual Error copy_from(const Ref &p_resource); +#endif +private: + String _parent_dir; +}; + +class GdSsabResourceFormatLoader : public ResourceFormatLoader { + GDCLASS(GdSsabResourceFormatLoader, ResourceFormatLoader); + +public: +#ifdef SPRITESTUDIO_GODOT_EXTENSION + static void _bind_methods() {}; + + PackedStringArray _get_recognized_extensions(); + + bool _handles_type(const StringName &type); + + String _get_resource_type(const String &path); + + Variant _load(const String &path, const String &original_path, + bool use_sub_threads, int32_t cache_mode); +#else + Ref load(const String &path, const String &original_path, + Error *error, bool use_sub_threads, float *progress, + CacheMode cache_mode) override; + + void get_recognized_extensions(List *extensions) const override; + + bool handles_type(const String &type) const override; + + String get_resource_type(const String &path) const override; +#endif +}; + +class GdSsabResourceFormatSaver : public ResourceFormatSaver { + GDCLASS(GdSsabResourceFormatSaver, ResourceFormatSaver); + +public: +#ifdef SPRITESTUDIO_GODOT_EXTENSION + static void _bind_methods() {}; + + Error _save(const Ref &resource, const String &path, + uint32_t flags) override; + + bool _recognize(const Ref &resource); + + PackedStringArray _get_recognized_extensions(const Ref &resource); +#else + Error save(const Ref &resource, const String &path, + uint32_t flags) override; + + void get_recognized_extensions(const Ref &resource, + List *p_extensions) const override; + + bool recognize(const Ref &p_resource) const override; +#endif +}; diff --git a/gd_spritestudio/gd_ssplayer_node2d.cpp b/gd_spritestudio/gd_ssplayer_node2d.cpp new file mode 100644 index 0000000..5d10d99 --- /dev/null +++ b/gd_spritestudio/gd_ssplayer_node2d.cpp @@ -0,0 +1,612 @@ +#include "gd_ssplayer_node2d.h" +#include "runtime/ssab.h" +#include "runtime/ssruntime.h" +#include "runtime/framedata.h" + +GdSsPlayerNode2D::GdSsPlayerNode2D() { + runtime_ctx = ss_runtime_create(); +} + +GdSsPlayerNode2D::~GdSsPlayerNode2D() { + _clear_canvas_items(); + if (runtime_ctx != nullptr) { + ss_runtime_destroy(runtime_ctx); + runtime_ctx = nullptr; + } + if (rutime_res != nullptr) { + ss_resource_destroy(rutime_res); + rutime_res = nullptr; + } +} + +void GdSsPlayerNode2D::_clear_canvas_items() { + RenderingServer *rs = RenderingServer::get_singleton(); + for (int i = 0; i < _canvas_items.size(); i++) { + rs->free_rid(_canvas_items[i]); + } + _canvas_items.clear(); +} + +void GdSsPlayerNode2D::setSsabResource( const Ref& ssabRes ) { + _ssabRes = ssabRes; + _strAnimationSelected = ""; + + if ( !_ssabRes.is_null() ) { + if (!_ssabRes->is_valid()) { + ERR_PRINT("SSAB Error: Assigned resource is invalid (missing parts or animations)."); + _ssabRes = Ref(); // 無効な堎合はリセット + } else { + auto vecAnimeName = _ssabRes->get_animation_names(); + if ( vecAnimeName.size() > 0 ) + _strAnimationSelected = vecAnimeName[0]; + loadTextures(_ssabRes); + } + } + + fetchAnimation(); + NOTIFY_PROPERTY_LIST_CHANGED(); +} + +Ref GdSsPlayerNode2D::getSsabResource() const { + return _ssabRes; +} + +void GdSsPlayerNode2D::setAnimation( const String& strName ) { + _strAnimationSelected = strName; + + // postAnimationChanged( _strAnimationSelected ); + + fetchAnimation(); + NOTIFY_PROPERTY_LIST_CHANGED(); +} + +String GdSsPlayerNode2D::getAnimation() const { + return _strAnimationSelected; +} + +bool GdSsPlayerNode2D::isPlaying() const { + return ss_runtime_is_playing(runtime_ctx); +} + +void GdSsPlayerNode2D::play( int p_start_frame ) { + if ( p_start_frame >= 0 ) { + ss_runtime_play_with_start_frame(runtime_ctx, p_start_frame); + } else { + ss_runtime_play(runtime_ctx); + } +} + +bool GdSsPlayerNode2D::isPausing() const { + return ss_runtime_is_pausing(runtime_ctx); +} + +void GdSsPlayerNode2D::pause() { + ss_runtime_pause(runtime_ctx); +} + +void GdSsPlayerNode2D::stop() { + ss_runtime_stop(runtime_ctx); +} + +void GdSsPlayerNode2D::setSpeed( float p_speed ) { + _speed_rate = p_speed; + ss_runtime_set_animation_speed(runtime_ctx, p_speed); +} + +float GdSsPlayerNode2D::getSpeed() const { + return _speed_rate; +} + +void GdSsPlayerNode2D::setFrame( int p_frame ) { + ss_runtime_set_frame_no(runtime_ctx, p_frame); +} + +int GdSsPlayerNode2D::getFrame() const { + return ss_runtime_get_frame_no(runtime_ctx); +} + +float GdSsPlayerNode2D::getFrameDecimal() const { + return ss_runtime_get_frame_no_decimal(runtime_ctx); +} + +int GdSsPlayerNode2D::getTotalFrames() const { + return ss_runtime_get_end_frame(runtime_ctx) - ss_runtime_get_start_frame(runtime_ctx) + 1; +} + +void GdSsPlayerNode2D::setFrameRate( int p_fps ) { + ss_runtime_set_frame_rate(runtime_ctx, p_fps); +} + +int GdSsPlayerNode2D::getFrameRate() const { + return ss_runtime_get_fps(runtime_ctx); +} + +void GdSsPlayerNode2D::setAnimationSection( int p_start, int p_end ) { + ss_runtime_set_animation_section(runtime_ctx, p_start, p_end); +} + +int GdSsPlayerNode2D::getAnimationSectionStart() const { + return ss_runtime_get_start_frame(runtime_ctx); +} + +int GdSsPlayerNode2D::getAnimationSectionEnd() const { + return ss_runtime_get_end_frame(runtime_ctx); +} + +void GdSsPlayerNode2D::setPlaybackDirection( int p_direction, int p_style ) { + ss_runtime_set_playback_direction(runtime_ctx, p_direction, p_style); +} + +int GdSsPlayerNode2D::getPlaybackDirection() const { + return ss_runtime_get_playback_direction(runtime_ctx); +} + +int GdSsPlayerNode2D::getPlaybackStyle() const { + return ss_runtime_get_playback_style(runtime_ctx); +} + +void GdSsPlayerNode2D::setLoop( int p_count ) { + ss_runtime_set_loop(runtime_ctx, p_count); +} + +int GdSsPlayerNode2D::getLoop() const { + return ss_runtime_get_loops(runtime_ctx); +} + +void GdSsPlayerNode2D::setSkipFrames( bool p_skip ) { + ss_runtime_set_skip_frames(runtime_ctx, p_skip); +} + +bool GdSsPlayerNode2D::isSkipFrames() const { + return ss_runtime_get_skip_frames(runtime_ctx); +} + + +void GdSsPlayerNode2D::_bind_methods() { + ClassDB::bind_method( D_METHOD( "set_ssab_resource", "res_ssab" ), &GdSsPlayerNode2D::setSsabResource ); + ClassDB::bind_method( D_METHOD( "get_ssab_resource" ), &GdSsPlayerNode2D::getSsabResource ); + ClassDB::bind_method( D_METHOD( "set_animation", "name" ), &GdSsPlayerNode2D::setAnimation ); + ClassDB::bind_method( D_METHOD( "get_animation" ), &GdSsPlayerNode2D::getAnimation ); + + ClassDB::bind_method( D_METHOD( "is_playing" ), &GdSsPlayerNode2D::isPlaying ); + ClassDB::bind_method( D_METHOD( "play", "start_frame" ), &GdSsPlayerNode2D::play, DEFVAL(-1) ); + ClassDB::bind_method( D_METHOD( "is_pausing" ), &GdSsPlayerNode2D::isPausing ); + ClassDB::bind_method( D_METHOD( "pause" ), &GdSsPlayerNode2D::pause ); + ClassDB::bind_method( D_METHOD( "stop" ), &GdSsPlayerNode2D::stop ); + + ClassDB::bind_method( D_METHOD( "set_speed", "speed" ), &GdSsPlayerNode2D::setSpeed ); + ClassDB::bind_method( D_METHOD( "get_speed" ), &GdSsPlayerNode2D::getSpeed ); + ClassDB::bind_method( D_METHOD( "set_frame", "frame" ), &GdSsPlayerNode2D::setFrame ); + ClassDB::bind_method( D_METHOD( "get_frame" ), &GdSsPlayerNode2D::getFrame ); + ClassDB::bind_method( D_METHOD( "get_frame_decimal" ), &GdSsPlayerNode2D::getFrameDecimal ); + + ClassDB::bind_method( D_METHOD( "get_total_frames" ), &GdSsPlayerNode2D::getTotalFrames ); + + ClassDB::bind_method( D_METHOD( "set_frame_rate", "fps" ), &GdSsPlayerNode2D::setFrameRate ); + ClassDB::bind_method( D_METHOD( "get_frame_rate" ), &GdSsPlayerNode2D::getFrameRate ); + + ClassDB::bind_method( D_METHOD( "set_animation_section", "start", "end" ), &GdSsPlayerNode2D::setAnimationSection ); + ClassDB::bind_method( D_METHOD( "get_animation_section_start" ), &GdSsPlayerNode2D::getAnimationSectionStart ); + ClassDB::bind_method( D_METHOD( "get_animation_section_end" ), &GdSsPlayerNode2D::getAnimationSectionEnd ); + + ClassDB::bind_method( D_METHOD( "set_playback_direction", "direction", "style" ), &GdSsPlayerNode2D::setPlaybackDirection ); + ClassDB::bind_method( D_METHOD( "get_playback_direction" ), &GdSsPlayerNode2D::getPlaybackDirection ); + ClassDB::bind_method( D_METHOD( "get_playback_style" ), &GdSsPlayerNode2D::getPlaybackStyle ); + + ClassDB::bind_method( D_METHOD( "set_loop", "count" ), &GdSsPlayerNode2D::setLoop ); + ClassDB::bind_method( D_METHOD( "get_loop" ), &GdSsPlayerNode2D::getLoop ); + + ClassDB::bind_method( D_METHOD( "set_skip_frames", "skip" ), &GdSsPlayerNode2D::setSkipFrames ); + ClassDB::bind_method( D_METHOD( "is_skip_frames" ), &GdSsPlayerNode2D::isSkipFrames ); + + ADD_SIGNAL( + MethodInfo( + "user_data", + PropertyInfo( + Variant::INT, + "flag" + ), + PropertyInfo( + Variant::INT, + "int_value" + ), + PropertyInfo( + Variant::RECT2, + "rect_value" + ), + PropertyInfo( + Variant::VECTOR2, + "point_value" + ), + PropertyInfo( + Variant::STRING, + "string_value" + ) + ) + ); + ADD_SIGNAL( + MethodInfo( + "signal", + PropertyInfo( + Variant::STRING, + "command" + ), + PropertyInfo( + Variant::DICTIONARY, + "value" + ) + ) + ); + + ADD_PROPERTY( + PropertyInfo( + Variant::OBJECT, + "ssab", + PropertyHint::PROPERTY_HINT_RESOURCE_TYPE, + "GdSsabResource" + ), + "set_ssab_resource", + "get_ssab_resource" + ); + + ADD_PROPERTY( + PropertyInfo( + Variant::FLOAT, + "speed" + ), + "set_speed", + "get_speed" + ); + + ADD_PROPERTY( + PropertyInfo( + Variant::INT, + "loop" + ), + "set_loop", + "get_loop" + ); + + ADD_PROPERTY( + PropertyInfo( + Variant::BOOL, + "skip_frames" + ), + "set_skip_frames", + "is_skip_frames" + ); + + ADD_GROUP( "Animation Settings", "" ); +} + +bool GdSsPlayerNode2D::_set( const StringName& p_name, const Variant& p_property ) { + if ( p_name == StringName("animation")) { + setAnimation( p_property ); + + return true; + } else if ( p_name == StringName("frame")) { + setFrame( p_property ); + + return true; + } else if ( p_name == StringName("loop")) { + setLoop( p_property ); + + return true; + } else if ( p_name == StringName("speed")) { + setSpeed( p_property ); + + return true; + } else if ( p_name == StringName("skip_frames")) { + setSkipFrames( p_property ); + + return true; + } else if ( p_name == StringName("playing")) { + if (p_property) { + play(); + } else { + stop(); + } + return true; + } + + return false; +} + +bool GdSsPlayerNode2D::_get( const StringName& p_name, Variant& r_property ) const { + if ( p_name == StringName("animation")) { + r_property = getAnimation(); + + return true; + } else if ( p_name == StringName("frame") ) { + r_property = getFrame(); + + return true; + } else if ( p_name == StringName("loop") ) { + r_property = getLoop(); + + return true; + } else if ( p_name == StringName("speed") ) { + r_property = getSpeed(); + + return true; + } else if ( p_name == StringName("skip_frames") ) { + r_property = isSkipFrames(); + + return true; + } else if ( p_name == StringName("playing") ) { + r_property = isPlaying(); + + return true; + } + + return false; +} + +void GdSsPlayerNode2D::_get_property_list( List* p_list ) const { +#ifdef SPRITESTUDIO_GODOT_EXTENSION + PackedStringArray vecAnimeName; +#else + Vector vecAnimeName; +#endif + + vecAnimeName.insert(0, "-- Empty --"); + + if (!_ssabRes.is_null()) { + vecAnimeName = _ssabRes->get_animation_names(); + } + + PropertyInfo animasPropertyInfo; + animasPropertyInfo.name = "animation"; + animasPropertyInfo.type = Variant::STRING; + animasPropertyInfo.usage = PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE; + animasPropertyInfo.hint_string = String( "," ).join( vecAnimeName ); + animasPropertyInfo.hint = PROPERTY_HINT_ENUM; + p_list->push_back( animasPropertyInfo ); + + animasPropertyInfo.name = "playing"; + animasPropertyInfo.type = Variant::BOOL; + animasPropertyInfo.usage = PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_STORAGE; + animasPropertyInfo.hint = PROPERTY_HINT_NONE; + p_list->push_back( animasPropertyInfo ); + + animasPropertyInfo.name = "frame"; + animasPropertyInfo.type = Variant::INT; + animasPropertyInfo.usage = PROPERTY_USAGE_EDITOR; + animasPropertyInfo.hint = PROPERTY_HINT_RANGE; + animasPropertyInfo.hint_string = "0," + String::num(getTotalFrames()-1) + ",1"; + p_list->push_back( animasPropertyInfo ); + +} + +void GdSsPlayerNode2D::_notification( int p_notification ) { + switch ( p_notification ) { + case NOTIFICATION_READY: + set_process_internal( true ); + + break; + case NOTIFICATION_INTERNAL_PROCESS: + updateAnimation( (float)get_process_delta_time() ); + + break; + default: + break; + } +} + +void GdSsPlayerNode2D::loadTextures(const Ref& ssabRes) { + auto a = ssabRes->get_ss_anime_binary(); + _textures.clear(); + if (a->cellmaps() != nullptr) { + for (int i = 0; i < a->cellmaps()->size(); i++) { + auto cellmap = a->cellmaps()->Get(i); + String strImage = _ssabRes->get_parent_dir().path_join(String::utf8(cellmap->image_path()->c_str())); + Ref texture = + #ifdef SPRITESTUDIO_GODOT_EXTENSION + ResourceLoader::get_singleton()->load( strImage, "", ResourceLoader::CACHE_MODE_REUSE); + #else + ResourceLoader::load( strImage, "", ResourceFormatLoader::CACHE_MODE_REUSE, nullptr ); + #endif + _textures[cellmap->name_hash()] = texture; + } + } + if (a->external_textures() != nullptr) { + for (int i = 0; i < a->external_textures()->size(); i++) { + auto etexture = a->external_textures()->Get(i); + String strImage = _ssabRes->get_parent_dir().path_join(String::utf8(etexture->name()->c_str())); + Ref texture = + #ifdef SPRITESTUDIO_GODOT_EXTENSION + ResourceLoader::get_singleton()->load( strImage, "", ResourceLoader::CACHE_MODE_REUSE); + #else + ResourceLoader::load( strImage, "", ResourceFormatLoader::CACHE_MODE_REUSE, nullptr ); + #endif + _textures[etexture->name_hash()] = texture; + } + } +} + + +void GdSsPlayerNode2D::updateAnimation( float delta ) { + if (ss_runtime_is_playing(runtime_ctx)) { + auto d = delta * 1000.0f; + auto frame_no = ss_runtime_update(runtime_ctx, d); + + if (previous_frame_no == frame_no) { + // print_line("skip: " + String::num(frame_no)); + return; + } + + // TODO: implement event handling + /* + if (_currentAnimationData->events() != nullptr) { + int event_count = ss_runtime_get_passed_event_count(runtime_ctx); + for (int i = 0; i < event_count; i++) { + int event_idx = ss_runtime_get_passed_event_index(runtime_ctx, i); + auto events_per_frame = _currentAnimationData->events()->Get(event_idx); + + if (auto users = events_per_frame->users()) { + for (auto user : *users) { + // TODO: impl + } + } + + if (auto signals = events_per_frame->signals()) { + for (auto signal : *signals) { + // TODO: impl + } + } + + if (auto audios = events_per_frame->audios()) { + for (auto audio : *audios) { + // TODO: impl + } + } + + if (auto instances = events_per_frame->instances()) { + for (auto instance : *instances) { + // TODO: impl + } + } + + if (auto effects = events_per_frame->effects()) { + for (auto effect : *effects) { + // TODO: impl + } + } + } + } + */ + previous_frame_no = frame_no; + drawAnimation(); + } +} + +void GdSsPlayerNode2D::drawAnimation() { + unsigned char *data = nullptr; + uintptr_t len = 0; + ss_runtime_get_frame_data(runtime_ctx, ss_runtime_get_frame_no(runtime_ctx), &data, &len); + if (!data) { + return; + } + + auto frameData = ss::runtime::GetFrameData(data); + auto parts = frameData->parts(); + + auto binary = _ssabRes->get_ss_anime_binary(); + RenderingServer *rs = RenderingServer::get_singleton(); + + for (uint32_t i = 0; i < parts->size(); i++) { + auto part = parts->Get(i); + if (i >= (uint32_t)_canvas_items.size()) { + break; + } + + if (part->update_flag() == 0) { + // RenderingServer retains state, so we don't need to redraw if nothing changed + continue; + } + + RID ci = _canvas_items[i]; + rs->canvas_item_clear(ci); + + if (part->hide()) { + continue; + } + + auto frameDataCellIndex = part->cell(); + auto frameDataCell = frameData->cells()->Get(frameDataCellIndex); + + // 1. CellMap (テクスチャ情報) の取埗 + auto cellmap = binary->cellmaps()->Get(frameDataCell->map_id()); + + // 2. テクスチャの取埗 (CellMap のハッシュを䜿甚) + uint32_t texHash = cellmap->name_hash(); + if (!_textures.has(texHash)) { + continue; + } + Ref tex = _textures[texHash]; + + // 3. Cell (矩圢情報) の取埗 + auto cell = cellmap->cells()->LookupByKey(frameDataCell->name_hash()); + if (!cell) { + continue; + } + + auto rect = cell->rectangle(); + auto pivot = cell->pivot(); + + // --- 描画準備 --- + Transform2D t; + t.set_origin(Vector2(part->position_x(), part->position_y())); + t.set_rotation(part->rotation_z()); + t.set_scale(Vector2(part->scale_x(), part->scale_y())); + + rs->canvas_item_set_transform(ci, t); + + Rect2 src_rect(rect->x1(), rect->y1(), rect->x2() - rect->x1(), rect->y2() - rect->y1()); + Vector2 draw_pos = Vector2(-src_rect.size.x * (pivot->v1() + 0.5f), + -src_rect.size.y * (0.5f - pivot->v2())); + + rs->canvas_item_add_texture_rect_region(ci, Rect2(draw_pos, src_rect.size), tex->get_rid(), src_rect, Color(1, 1, 1, part->alpha())); + } + + // draw_set_transform_matrix(Transform2D()); // No longer needed for RenderingServer +} + +void GdSsPlayerNode2D::fetchAnimation() { + if ( _strAnimationSelected.is_empty() || _ssabRes.is_null() ) { + ss_runtime_reset(runtime_ctx); + if (rutime_res != nullptr) { + ss_resource_destroy(rutime_res); + rutime_res = nullptr; + } + _currentAnimationData = nullptr; + _clear_canvas_items(); + return; + } + + // Initialize RenderingServer CanvasItems + _clear_canvas_items(); + + if (rutime_res != nullptr) { + ss_resource_destroy(rutime_res); + rutime_res = nullptr; + } + + rutime_res = ss_resource_create_borrow(_ssabRes->get_data_ptr(), _ssabRes->get_data_size()); + if (rutime_res == nullptr) { + ERR_PRINT( "SSAB Resource Create Failed" ); + return; + } + + bool binded = ss_runtime_bind_resource(runtime_ctx, rutime_res); + if ( !binded ) { + ERR_PRINT( "SSAB Resource Bind Failed" ); + return; + } + + auto binary = _ssabRes->get_ss_anime_binary(); + if (binary->parts() != nullptr) { + RenderingServer *rs = RenderingServer::get_singleton(); + for (int i = 0; i < binary->parts()->size(); i++) { + RID ci = rs->canvas_item_create(); + rs->canvas_item_set_parent(ci, get_canvas_item()); + _canvas_items.push_back(ci); + } + } + + auto c = _strAnimationSelected.utf8(); + auto animation = _ssabRes->find_animation( _strAnimationSelected ); + if ( !animation ) { + ERR_PRINT( "Select Anime is Null" ); + return; + } + _currentAnimationData = animation; + bool setup = ss_runtime_setup_animation(runtime_ctx, c.get_data()); + if ( !setup ) { + ERR_PRINT( "SSAB Setup Animation Failed: " + _strAnimationSelected ); + return; + } + + previous_frame_no = -1; + drawAnimation(); +} diff --git a/gd_spritestudio/gd_ssplayer_node2d.h b/gd_spritestudio/gd_ssplayer_node2d.h new file mode 100644 index 0000000..742e69c --- /dev/null +++ b/gd_spritestudio/gd_ssplayer_node2d.h @@ -0,0 +1,87 @@ +#pragma once + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +#include +#include +#include +using namespace godot; +#else +#include "scene/2d/node_2d.h" +#include "core/version.h" +#if VERSION_MAJOR >= 4 && VERSION_MINOR >= 6 +#include "servers/rendering/rendering_server.h" +#else +#include "servers/rendering_server.h" +#endif +#endif + +// #include "gd_ssplayer_resource.h" +#include "gd_ssab_resource.h" + +class GdSsPlayerNode2D : public Node2D { + GDCLASS( GdSsPlayerNode2D, Node2D ); + +protected: + GdSsPlayerNode2D(); + ~GdSsPlayerNode2D(); + static void _bind_methods(); + bool _set( const StringName& p_name, const Variant& p_property ); + bool _get( const StringName& p_name, Variant& r_property ) const; + void _get_property_list( List* p_list ) const; + void _notification( int p_notification ); + +public: + void setSsabResource( const Ref& ssabRes ); + Ref getSsabResource() const; + void setAnimation( const String& strName ); + String getAnimation() const; + + bool isPlaying() const; + void play( int p_start_frame = -1 ); + bool isPausing() const; + void pause(); + void stop(); + + void setSpeed( float p_speed ); + float getSpeed() const; + void setFrame( int p_frame ); + int getFrame() const; + float getFrameDecimal() const; + + int getTotalFrames() const; + + void setFrameRate( int p_fps ); + int getFrameRate() const; + + void setAnimationSection( int p_start, int p_end ); + int getAnimationSectionStart() const; + int getAnimationSectionEnd() const; + + void setPlaybackDirection( int p_direction, int p_style ); + int getPlaybackDirection() const; + int getPlaybackStyle() const; + + void setLoop( int p_count ); + int getLoop() const; + + void setSkipFrames( bool p_skip ); + bool isSkipFrames() const; + +private: + Ref _ssabRes; + HashMap> _textures; + Vector _canvas_items; + String _strAnimationSelected; + ss::format::AnimationData* _currentAnimationData = nullptr; + void *runtime_ctx = nullptr; + void *rutime_res = nullptr; + int previous_frame_no = -1; + float _speed_rate = 1.0f; + + void loadTextures(const Ref& ssabRes); + void updateAnimation(float delta); + void fetchAnimation(); + void drawAnimation(); + + void _clear_canvas_items(); +}; diff --git a/gd_spritestudio/gd_ssqb_resource.cpp b/gd_spritestudio/gd_ssqb_resource.cpp new file mode 100644 index 0000000..c611309 --- /dev/null +++ b/gd_spritestudio/gd_ssqb_resource.cpp @@ -0,0 +1,155 @@ + +#include "gd_ssqb_resource.h" +#include "runtime/ssqb.h" +#ifdef SPRITESTUDIO_GODOT_EXTENSION +#include +#include +#else +#include "core/error/error_list.h" +#include "core/error/error_macros.h" +#include "core/io/file_access.h" +#endif + +void GdSsqbResource::_bind_methods() { + ClassDB::bind_method(D_METHOD("load_from_file", "path"), &GdSsqbResource::load_from_file); + ClassDB::bind_method(D_METHOD("save_to_file", "path"), &GdSsqbResource::save_to_file); +} + +Error GdSsqbResource::load_from_file(const String &path) { + Error error = OK; +#ifdef SPRITESTUDIO_GODOT_EXTENSION + binary = FileAccess::get_file_as_bytes(path); + if (binary.size() == 0) + return ERR_INVALID_DATA; +#else + binary = FileAccess::get_file_as_bytes(path, &error); + if (error != OK) + return error; +#endif + + return error; + + // return ERR_FILE_UNRECOGNIZED; +} + +Error GdSsqbResource::save_to_file(const String &path) { + Error error; +#ifdef SPRITESTUDIO_GODOT_EXTENSION + Ref file = FileAccess::open(path, FileAccess::WRITE); + if (!file.is_valid()) + return ERR_FILE_CANT_OPEN; +#else + Ref file = FileAccess::open(path, FileAccess::WRITE, &error); + if (error != OK) + return error; +#endif + file->store_buffer(binary.ptr(), binary.size()); + file->flush(); + return OK; +} + +const ss::format::SsSequenceBinary *GdSsqbResource::get_ss_sequence_binary() { + return ss::format::GetSsSequenceBinary(this->binary.ptr()); +} + +const uint8_t *GdSsqbResource::get_data_ptr() { return this->binary.ptr(); } + +#ifndef SPRITESTUDIO_GODOT_EXTENSION +Error GdSsqbResource::copy_from(const Ref &p_resource) { + auto error = Resource::copy_from(p_resource); + if (error != OK) + return error; + const Ref &ssqbFile = + static_cast &>(p_resource); + this->binary = ssqbFile->binary; + emit_signal(SNAME("ssqb_file_changed")); + return OK; +} +#endif + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +Variant GdSsqbResourceFormatLoader::_load(const String &path, + const String &original_path, + bool use_sub_threads, + int32_t cache_mode) { +#else +Ref GdSsqbResourceFormatLoader::load( + const String &path, const String &original_path, Error *error, + bool use_sub_threads, float *progress, CacheMode cache_mode) { +#endif + Ref ssqb_file = memnew(GdSsqbResource); + ssqb_file->load_from_file(path); +#ifndef SPRITESTUDIO_GODOT_EXTENSION + if (error) + *error = OK; +#endif + return ssqb_file; +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +PackedStringArray GdSsqbResourceFormatLoader::_get_recognized_extensions() { + PackedStringArray extensions; + extensions.push_back("ssqb"); + return extensions; +} +#else +void GdSsqbResourceFormatLoader::get_recognized_extensions( + List *extensions) const { + extensions->push_back("ssqb"); +} +#endif + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +String GdSsqbResourceFormatLoader::_get_resource_type(const String &path) { +#else +String GdSsqbResourceFormatLoader::get_resource_type(const String &path) const { +#endif + return path.ends_with(".ssqb") ? "GdSsqbResource" : ""; +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +bool GdSsqbResourceFormatLoader::_handles_type(const StringName &type) { +#else +bool GdSsqbResourceFormatLoader::handles_type(const String &type) const { +#endif + return type == StringName("GdSsqbResource") || + ClassDB::is_parent_class(type, "GdSsqbResource"); +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +Error GdSsqbResourceFormatSaver::_save(const Ref &resource, + const String &path, uint32_t flags) { +#else +Error GdSsqbResourceFormatSaver::save(const Ref &resource, + const String &path, uint32_t flags) { +#endif + Ref res = resource; + Error error = res->save_to_file(path); + return error; +} + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +PackedStringArray GdSsqbResourceFormatSaver::_get_recognized_extensions( + const Ref &resource) { + PackedStringArray extensions; + if (Object::cast_to(*resource)) { + extensions.push_back("bssqb"); + } + return extensions; +} +#else +void GdSsqbResourceFormatSaver::get_recognized_extensions( + const Ref &resource, List *p_extensions) const { + if (Object::cast_to(*resource)) { + p_extensions->push_back("bssqb"); + } +} +#endif + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +bool GdSsqbResourceFormatSaver::_recognize(const Ref &resource) { +#else +bool GdSsqbResourceFormatSaver::recognize(const Ref &resource) const { +#endif + return Object::cast_to(*resource) != nullptr; +} diff --git a/gd_spritestudio/gd_ssqb_resource.h b/gd_spritestudio/gd_ssqb_resource.h new file mode 100644 index 0000000..9a3304f --- /dev/null +++ b/gd_spritestudio/gd_ssqb_resource.h @@ -0,0 +1,94 @@ +#pragma once + +#include "gd_macros.h" + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +#include +#include +#include +#include +#include +#include +using namespace godot; +#else +#include "core/io/resource_loader.h" +#include "core/io/resource_saver.h" +#endif + +#include "runtime/ssqb.h" + +class GdSsqbResource : public Resource { + GDCLASS(GdSsqbResource, Resource); + +protected: + static void _bind_methods(); + +#ifdef SPRITESTUDIO_GODOT_EXTENSION + PackedByteArray binary; +#else + Vector binary; +#endif + +public: + Error load_from_file(const String &path); + Error save_to_file(const String &path); + + const ss::format::SsSequenceBinary *get_ss_sequence_binary(); + const uint8_t *get_data_ptr(); + +#ifndef SPRITESTUDIO_GODOT_EXTENSION + virtual Error copy_from(const Ref &p_resource); +#endif +}; + +class GdSsqbResourceFormatLoader : public ResourceFormatLoader { + GDCLASS(GdSsqbResourceFormatLoader, ResourceFormatLoader); + +public: +#ifdef SPRITESTUDIO_GODOT_EXTENSION + static void _bind_methods() {}; + + PackedStringArray _get_recognized_extensions(); + + bool _handles_type(const StringName &type); + + String _get_resource_type(const String &path); + + Variant _load(const String &path, const String &original_path, + bool use_sub_threads, int32_t cache_mode); +#else + Ref load(const String &path, const String &original_path, + Error *error, bool use_sub_threads, float *progress, + CacheMode cache_mode) override; + + void get_recognized_extensions(List *extensions) const override; + + bool handles_type(const String &type) const override; + + String get_resource_type(const String &path) const override; +#endif +}; + +class GdSsqbResourceFormatSaver : public ResourceFormatSaver { + GDCLASS(GdSsqbResourceFormatSaver, ResourceFormatSaver); + +public: +#ifdef SPRITESTUDIO_GODOT_EXTENSION + static void _bind_methods() {}; + + Error _save(const Ref &resource, const String &path, + uint32_t flags) override; + + bool _recognize(const Ref &resource); + + PackedStringArray _get_recognized_extensions(const Ref &resource); +#else + Error save(const Ref &resource, const String &path, + uint32_t flags) override; + + void get_recognized_extensions(const Ref &resource, + List *p_extensions) const override; + + bool recognize(const Ref &p_resource) const override; +#endif +}; diff --git a/gd_spritestudio/register_types.cpp b/gd_spritestudio/register_types.cpp index 2b05506..298af6e 100644 --- a/gd_spritestudio/register_types.cpp +++ b/gd_spritestudio/register_types.cpp @@ -1,208 +1,163 @@ -/*! -* \file register_types.cpp -* \author CRI Middleware Co., Ltd. -*/ #include "register_types.h" +#include "defs.h" #ifdef SPRITESTUDIO_GODOT_EXTENSION -#include #include +#include using namespace godot; #else -#ifdef GD_V4 #include "core/object/class_db.h" #endif -#ifdef GD_V3 -#include "core/class_db.h" -#endif -#endif -#include "gd_node_ssplayer.h" -#include "gd_resource_ssdocument.h" -#include "gd_resource_ssplayer.h" -#include "gd_resource_ssproject.h" -#include "gd_resource_ssanimepack.h" -#include "gd_resource_sscellmap.h" -#include "gd_resource_sseffect.h" -#include "gd_loader_ssproject.h" -#include "gd_loader_ssanimepack.h" -#include "gd_loader_sscellmap.h" -#include "gd_loader_sseffect.h" -#include "gd_loader_bssproject.h" -#include "gd_loader_bssanimepack.h" -#include "gd_loader_bsscellmap.h" -#include "gd_loader_bsseffect.h" -#include "gd_saver_bssproject.h" -#include "gd_saver_bssanimepack.h" -#include "gd_saver_bsscellmap.h" -#include "gd_saver_bsseffect.h" - -static Ref s_LoaderSsProject; -static Ref s_LoaderSsAnimePack; -static Ref s_LoaderSsCellMap; -static Ref s_LoaderSsEffect; -static Ref s_LoaderBssProject; -static Ref s_LoaderBssAnimePack; -static Ref s_LoaderBssCellMap; -static Ref s_LoaderBssEffect; -static Ref s_SaverBssProject; -static Ref s_SaverBssAnimePack; -static Ref s_SaverBssCellMap; -static Ref s_SaverBssEffect; - -void register_gd_spritestudio_types() -{ - ClassDB::register_class(); - - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - ClassDB::register_class(); - - -#if defined(GD_V4) || defined(SPRITESTUDIO_GODOT_EXTENSION) - s_LoaderSsProject.instantiate(); - s_LoaderSsAnimePack.instantiate(); - s_LoaderSsCellMap.instantiate(); - s_LoaderSsEffect.instantiate(); - s_LoaderBssProject.instantiate(); - s_LoaderBssAnimePack.instantiate(); - s_LoaderBssCellMap.instantiate(); - s_LoaderBssEffect.instantiate(); - s_SaverBssProject.instantiate(); - s_SaverBssAnimePack.instantiate(); - s_SaverBssCellMap.instantiate(); - s_SaverBssEffect.instantiate(); +#ifdef TOOLS_ENABLED +#include "gd_clickable_label.h" +#include "gd_progress_dialog.h" +#include "gd_ss_editor_plugin.h" + +#ifdef SPRITESTUDIO_GODOT_EXTENSION +#include +#else +#include "editor/editor_node.h" + +static void editor_init_callback() { + EditorNode::get_singleton()->add_editor_plugin( + memnew(GdSsEditorPlugin(EditorNode::get_singleton()))); +} #endif -#ifdef GD_V3 - s_LoaderSsProject.instance(); - s_LoaderSsAnimePack.instance(); - s_LoaderSsCellMap.instance(); - s_LoaderSsEffect.instance(); - s_LoaderBssProject.instance(); - s_LoaderBssAnimePack.instance(); - s_LoaderBssCellMap.instance(); - s_LoaderBssEffect.instance(); - s_SaverBssProject.instance(); - s_SaverBssAnimePack.instance(); - s_SaverBssCellMap.instance(); - s_SaverBssEffect.instance(); #endif +#include "gd_ssab_resource.h" +#include "gd_ssplayer_node2d.h" +#include "gd_ssqb_resource.h" + +static GdSsabResourceFormatLoader *ssab_loader = nullptr; +static GdSsabResourceFormatSaver *ssab_saver = nullptr; +static GdSsqbResourceFormatLoader *ssqb_loader = nullptr; +static GdSsqbResourceFormatSaver *ssqb_saver = nullptr; + +void register_gd_spritestudio_types() { + + GDREGISTER_CLASS(GdSsabResource); + GDREGISTER_CLASS(GdSsabResourceFormatLoader); + GDREGISTER_CLASS(GdSsabResourceFormatSaver); + GDREGISTER_CLASS(GdSsqbResource); + GDREGISTER_CLASS(GdSsqbResourceFormatLoader); + GDREGISTER_CLASS(GdSsqbResourceFormatSaver); + #ifdef SPRITESTUDIO_GODOT_EXTENSION - ResourceLoader::get_singleton()->add_resource_format_loader( s_LoaderSsProject ); - ResourceLoader::get_singleton()->add_resource_format_loader( s_LoaderSsAnimePack ); - ResourceLoader::get_singleton()->add_resource_format_loader( s_LoaderSsCellMap ); - ResourceLoader::get_singleton()->add_resource_format_loader( s_LoaderSsEffect ); - ResourceLoader::get_singleton()->add_resource_format_loader( s_LoaderBssProject ); - ResourceLoader::get_singleton()->add_resource_format_loader( s_LoaderBssAnimePack ); - ResourceLoader::get_singleton()->add_resource_format_loader( s_LoaderBssCellMap ); - ResourceLoader::get_singleton()->add_resource_format_loader( s_LoaderBssEffect ); - ResourceSaver::get_singleton()->add_resource_format_saver( s_SaverBssProject ); - ResourceSaver::get_singleton()->add_resource_format_saver( s_SaverBssAnimePack ); - ResourceSaver::get_singleton()->add_resource_format_saver( s_SaverBssCellMap ); - ResourceSaver::get_singleton()->add_resource_format_saver( s_SaverBssEffect ); + ssab_loader = memnew(GdSsabResourceFormatLoader); + ResourceLoader::get_singleton()->add_resource_format_loader(ssab_loader); + + ssab_saver = memnew(GdSsabResourceFormatSaver); + ResourceSaver::get_singleton()->add_resource_format_saver(ssab_saver); + + ssqb_loader = memnew(GdSsqbResourceFormatLoader); + ResourceLoader::get_singleton()->add_resource_format_loader(ssqb_loader); + + ssqb_saver = memnew(GdSsqbResourceFormatSaver); + ResourceSaver::get_singleton()->add_resource_format_saver(ssqb_saver); + #else - ResourceLoader::add_resource_format_loader( s_LoaderSsProject ); - ResourceLoader::add_resource_format_loader( s_LoaderSsAnimePack ); - ResourceLoader::add_resource_format_loader( s_LoaderSsCellMap ); - ResourceLoader::add_resource_format_loader( s_LoaderSsEffect ); - ResourceLoader::add_resource_format_loader( s_LoaderBssProject ); - ResourceLoader::add_resource_format_loader( s_LoaderBssAnimePack ); - ResourceLoader::add_resource_format_loader( s_LoaderBssCellMap ); - ResourceLoader::add_resource_format_loader( s_LoaderBssEffect ); - ResourceSaver::add_resource_format_saver( s_SaverBssProject ); - ResourceSaver::add_resource_format_saver( s_SaverBssAnimePack ); - ResourceSaver::add_resource_format_saver( s_SaverBssCellMap ); - ResourceSaver::add_resource_format_saver( s_SaverBssEffect ); + ssab_loader = memnew(GdSsabResourceFormatLoader); + ResourceLoader::add_resource_format_loader(ssab_loader); + + ssab_saver = memnew(GdSsabResourceFormatSaver); + ResourceSaver::add_resource_format_saver(ssab_saver); + + ssqb_loader = memnew(GdSsqbResourceFormatLoader); + ResourceLoader::add_resource_format_loader(ssqb_loader); + + ssqb_saver = memnew(GdSsqbResourceFormatSaver); + ResourceSaver::add_resource_format_saver(ssqb_saver); + #endif + + GDREGISTER_CLASS(GdSsPlayerNode2D); } -void unregister_gd_spritestudio_types() -{ +void unregister_gd_spritestudio_types() { #ifdef SPRITESTUDIO_GODOT_EXTENSION - ResourceSaver::get_singleton()->remove_resource_format_saver( s_SaverBssEffect ); - ResourceSaver::get_singleton()->remove_resource_format_saver( s_SaverBssCellMap ); - ResourceSaver::get_singleton()->remove_resource_format_saver( s_SaverBssAnimePack ); - ResourceSaver::get_singleton()->remove_resource_format_saver( s_SaverBssProject ); - ResourceLoader::get_singleton()->remove_resource_format_loader( s_LoaderBssEffect ); - ResourceLoader::get_singleton()->remove_resource_format_loader( s_LoaderBssCellMap ); - ResourceLoader::get_singleton()->remove_resource_format_loader( s_LoaderBssAnimePack ); - ResourceLoader::get_singleton()->remove_resource_format_loader( s_LoaderBssProject ); - ResourceLoader::get_singleton()->remove_resource_format_loader( s_LoaderSsEffect ); - ResourceLoader::get_singleton()->remove_resource_format_loader( s_LoaderSsCellMap ); - ResourceLoader::get_singleton()->remove_resource_format_loader( s_LoaderSsAnimePack ); - ResourceLoader::get_singleton()->remove_resource_format_loader( s_LoaderSsProject ); + if (ssab_loader) { + ResourceLoader::get_singleton()->remove_resource_format_loader(ssab_loader); + ssab_loader = nullptr; + } + if (ssab_saver) { + ResourceSaver::get_singleton()->remove_resource_format_saver(ssab_saver); + ssab_saver = nullptr; + } + + if (ssqb_loader) { + ResourceLoader::get_singleton()->remove_resource_format_loader(ssqb_loader); + ssqb_loader = nullptr; + } + if (ssqb_saver) { + ResourceSaver::get_singleton()->remove_resource_format_saver(ssqb_saver); + ssqb_saver = nullptr; + } + #else - ResourceSaver::remove_resource_format_saver( s_SaverBssEffect ); - ResourceSaver::remove_resource_format_saver( s_SaverBssCellMap ); - ResourceSaver::remove_resource_format_saver( s_SaverBssAnimePack ); - ResourceSaver::remove_resource_format_saver( s_SaverBssProject ); - ResourceLoader::remove_resource_format_loader( s_LoaderBssEffect ); - ResourceLoader::remove_resource_format_loader( s_LoaderBssCellMap ); - ResourceLoader::remove_resource_format_loader( s_LoaderBssAnimePack ); - ResourceLoader::remove_resource_format_loader( s_LoaderBssProject ); - ResourceLoader::remove_resource_format_loader( s_LoaderSsEffect ); - ResourceLoader::remove_resource_format_loader( s_LoaderSsCellMap ); - ResourceLoader::remove_resource_format_loader( s_LoaderSsAnimePack ); - ResourceLoader::remove_resource_format_loader( s_LoaderSsProject ); + if (ssab_loader) { + ResourceLoader::remove_resource_format_loader(ssab_loader); + ssab_loader = nullptr; + } + if (ssab_saver) { + ResourceSaver::remove_resource_format_saver(ssab_saver); + ssab_saver = nullptr; + } + + if (ssqb_loader) { + ResourceLoader::remove_resource_format_loader(ssqb_loader); + ssqb_loader = nullptr; + } + if (ssqb_saver) { + ResourceSaver::remove_resource_format_saver(ssqb_saver); + ssqb_saver = nullptr; + } + #endif - - s_SaverBssEffect.unref(); - s_SaverBssCellMap.unref(); - s_SaverBssAnimePack.unref(); - s_SaverBssProject.unref(); - s_LoaderBssEffect.unref(); - s_LoaderBssCellMap.unref(); - s_LoaderBssAnimePack.unref(); - s_LoaderBssProject.unref(); - s_LoaderSsEffect.unref(); - s_LoaderSsCellMap.unref(); - s_LoaderSsAnimePack.unref(); - s_LoaderSsProject.unref(); } -#if defined(GD_V4) || defined(SPRITESTUDIO_GODOT_EXTENSION) -void initialize_gd_spritestudio_module( ModuleInitializationLevel p_level ) -{ - if ( p_level != MODULE_INITIALIZATION_LEVEL_SCENE ) { - return; - } +void initialize_gd_spritestudio_module(ModuleInitializationLevel level) { + if (level == MODULE_INITIALIZATION_LEVEL_SCENE) { + register_gd_spritestudio_types(); + } - register_gd_spritestudio_types(); -} +#ifdef TOOLS_ENABLED + if (level == MODULE_INITIALIZATION_LEVEL_EDITOR) { -void uninitialize_gd_spritestudio_module( ModuleInitializationLevel p_level ) -{ - if ( p_level != MODULE_INITIALIZATION_LEVEL_SCENE ) { - return; - } + GDREGISTER_CLASS(GdSsImportControl); + GDREGISTER_CLASS(GdClickableLabel); + GDREGISTER_CLASS(GdProgressDialog); - unregister_gd_spritestudio_types(); -} +#ifdef SPRITESTUDIO_GODOT_EXTENSION + GDREGISTER_CLASS(GdSsEditorPlugin); + EditorPlugins::add_by_type(); +#else + EditorNode::add_init_callback(editor_init_callback); #endif + } +#endif +} + +void uninitialize_gd_spritestudio_module(ModuleInitializationLevel level) { + if (level == MODULE_INITIALIZATION_LEVEL_SCENE) { + unregister_gd_spritestudio_types(); + } +} #ifdef SPRITESTUDIO_GODOT_EXTENSION -extern "C" GDExtensionBool GDE_EXPORT spritestudio_godot_library_init(GDExtensionInterfaceGetProcAddress p_get_proc_address, GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization) { - godot::GDExtensionBinding::InitObject init_obj(p_get_proc_address, p_library, r_initialization); - init_obj.register_initializer(initialize_gd_spritestudio_module); - init_obj.register_terminator(uninitialize_gd_spritestudio_module); - init_obj.set_minimum_library_initialization_level(MODULE_INITIALIZATION_LEVEL_SCENE); - return init_obj.init(); +extern "C" GDExtensionBool GDE_EXPORT spritestudio_godot_library_init( + GDExtensionInterfaceGetProcAddress p_get_proc_address, + GDExtensionClassLibraryPtr p_library, + GDExtensionInitialization *r_initialization) { + godot::GDExtensionBinding::InitObject init_obj(p_get_proc_address, p_library, + r_initialization); + init_obj.register_initializer(initialize_gd_spritestudio_module); + init_obj.register_terminator(uninitialize_gd_spritestudio_module); + + init_obj.set_minimum_library_initialization_level( + MODULE_INITIALIZATION_LEVEL_SCENE); + + return init_obj.init(); } #endif diff --git a/gd_spritestudio/register_types.h b/gd_spritestudio/register_types.h index 7e5c667..fdf8c8b 100644 --- a/gd_spritestudio/register_types.h +++ b/gd_spritestudio/register_types.h @@ -1,4 +1,4 @@ -/*! +/*! * \file register_types.h * \author CRI Middleware Co., Ltd. */ @@ -10,16 +10,14 @@ #ifdef SPRITESTUDIO_GODOT_EXTENSION #include using namespace godot; -#elif defined(GD_V4) +#else #include "modules/register_module_types.h" #endif void register_gd_spritestudio_types(); void unregister_gd_spritestudio_types(); -#if defined(GD_V4) || defined(SPRITESTUDIO_GODOT_EXTENSION) void initialize_gd_spritestudio_module( ModuleInitializationLevel p_level ); void uninitialize_gd_spritestudio_module( ModuleInitializationLevel p_level ); -#endif -#endif // GD_SPRITESTUDIO_REGISTER_TYPES_H +#endif // GD_SPRITESTUDIO_REGISTER_TYPES_H \ No newline at end of file diff --git a/gd_spritestudio/runtime/defs.h b/gd_spritestudio/runtime/defs.h new file mode 100644 index 0000000..5c1942b --- /dev/null +++ b/gd_spritestudio/runtime/defs.h @@ -0,0 +1,15 @@ +#pragma once + +#include +#include +#include + +#if !defined(GDE_EXPORT) +#if defined(_WIN32) +#define GDE_EXPORT __declspec(dllexport) +#elif defined(__GNUC__) +#define GDE_EXPORT __attribute__((visibility("default"))) +#else +#define GDE_EXPORT +#endif +#endif // ! GDE_EXPORT diff --git a/gd_spritestudio/runtime/framedata.h b/gd_spritestudio/runtime/framedata.h new file mode 100644 index 0000000..9cf9977 --- /dev/null +++ b/gd_spritestudio/runtime/framedata.h @@ -0,0 +1,1000 @@ +// automatically generated by the FlatBuffers compiler, do not modify + + +#ifndef FLATBUFFERS_GENERATED_FRAMEDATA_SS_RUNTIME_H_ +#define FLATBUFFERS_GENERATED_FRAMEDATA_SS_RUNTIME_H_ + +#include "flatbuffers/flatbuffers.h" + +// Ensure the included flatbuffers.h is the same version as when this file was +// generated, otherwise it may not be compatible. +static_assert(FLATBUFFERS_VERSION_MAJOR == 25 && + FLATBUFFERS_VERSION_MINOR == 12 && + FLATBUFFERS_VERSION_REVISION == 19, + "Non-compatible flatbuffers version included"); + +namespace ss { +namespace runtime { + +struct PartAttributeCell; + +struct Vec2; + +struct U8Rect; + +struct SsAttributePartColorKeyValueColor; + +struct PartAttributePartColor; + +struct PartAttributeVertex; + +struct PartAttributeDeform; +struct PartAttributeDeformBuilder; + +struct PartAttributeShader; + +struct PartState; + +struct FrameData; +struct FrameDataBuilder; + +enum BlendType : uint8_t { + BlendType_Mix = 0, + BlendType_Mul = 1, + BlendType_Add = 2, + BlendType_Sub = 3, + BlendType_Mulalpha = 4, + BlendType_Screen = 5, + BlendType_Exclusion = 6, + BlendType_Invert = 7, + BlendType_Mul2 = 8, + BlendType_Div2 = 9, + BlendType_Screen2 = 10, + BlendType_Overlay2 = 11, + BlendType_MIN = BlendType_Mix, + BlendType_MAX = BlendType_Overlay2 +}; + +inline const BlendType (&EnumValuesBlendType())[12] { + static const BlendType values[] = { + BlendType_Mix, + BlendType_Mul, + BlendType_Add, + BlendType_Sub, + BlendType_Mulalpha, + BlendType_Screen, + BlendType_Exclusion, + BlendType_Invert, + BlendType_Mul2, + BlendType_Div2, + BlendType_Screen2, + BlendType_Overlay2 + }; + return values; +} + +inline const char * const *EnumNamesBlendType() { + static const char * const names[13] = { + "Mix", + "Mul", + "Add", + "Sub", + "Mulalpha", + "Screen", + "Exclusion", + "Invert", + "Mul2", + "Div2", + "Screen2", + "Overlay2", + nullptr + }; + return names; +} + +inline const char *EnumNameBlendType(BlendType e) { + if (::flatbuffers::IsOutRange(e, BlendType_Mix, BlendType_Overlay2)) return ""; + const size_t index = static_cast(e); + return EnumNamesBlendType()[index]; +} + +enum UpdateAttributeFlags : uint64_t { + UpdateAttributeFlags_AttributeCell = 1ULL, + UpdateAttributeFlags_AttributePosX = 2ULL, + UpdateAttributeFlags_AttributePosY = 4ULL, + UpdateAttributeFlags_AttributePosZ = 8ULL, + UpdateAttributeFlags_AttributeRotX = 16ULL, + UpdateAttributeFlags_AttributeRotY = 32ULL, + UpdateAttributeFlags_AttributeRotZ = 64ULL, + UpdateAttributeFlags_AttributeSclX = 128ULL, + UpdateAttributeFlags_AttributeSclY = 256ULL, + UpdateAttributeFlags_AttributeLosclX = 512ULL, + UpdateAttributeFlags_AttributeLosclY = 1024ULL, + UpdateAttributeFlags_AttributeAlpha = 2048ULL, + UpdateAttributeFlags_AttributeLoAlpha = 4096ULL, + UpdateAttributeFlags_AttributePrio = 8192ULL, + UpdateAttributeFlags_AttributeFlipH = 16384ULL, + UpdateAttributeFlags_AttributeFlipV = 32768ULL, + UpdateAttributeFlags_AttributeHide = 65536ULL, + UpdateAttributeFlags_AttributePartColor = 131072ULL, + UpdateAttributeFlags_AttributeShader = 262144ULL, + UpdateAttributeFlags_AttributeVertex = 524288ULL, + UpdateAttributeFlags_AttributePivotX = 1048576ULL, + UpdateAttributeFlags_AttributePivotY = 2097152ULL, + UpdateAttributeFlags_AttributeAnchorX = 4194304ULL, + UpdateAttributeFlags_AttributeAnchorY = 8388608ULL, + UpdateAttributeFlags_AttributeSizeX = 16777216ULL, + UpdateAttributeFlags_AttributeSizeY = 33554432ULL, + UpdateAttributeFlags_AttributeImgFlipH = 67108864ULL, + UpdateAttributeFlags_AttributeImgFlipV = 134217728ULL, + UpdateAttributeFlags_AttributeUvtX = 268435456ULL, + UpdateAttributeFlags_AttributeUvtY = 536870912ULL, + UpdateAttributeFlags_AttributeUvrZ = 1073741824ULL, + UpdateAttributeFlags_AttributeUvsX = 2147483648ULL, + UpdateAttributeFlags_AttributeUvsY = 4294967296ULL, + UpdateAttributeFlags_AttributeBoundr = 8589934592ULL, + UpdateAttributeFlags_AttributeMask = 17179869184ULL, + UpdateAttributeFlags_AttributeSkew = 34359738368ULL, + UpdateAttributeFlags_AttributeDeform = 68719476736ULL, + UpdateAttributeFlags_AttributeTexture = 137438953472ULL, + UpdateAttributeFlags_NONE = 0, + UpdateAttributeFlags_ANY = 274877906943ULL +}; + +inline const UpdateAttributeFlags (&EnumValuesUpdateAttributeFlags())[38] { + static const UpdateAttributeFlags values[] = { + UpdateAttributeFlags_AttributeCell, + UpdateAttributeFlags_AttributePosX, + UpdateAttributeFlags_AttributePosY, + UpdateAttributeFlags_AttributePosZ, + UpdateAttributeFlags_AttributeRotX, + UpdateAttributeFlags_AttributeRotY, + UpdateAttributeFlags_AttributeRotZ, + UpdateAttributeFlags_AttributeSclX, + UpdateAttributeFlags_AttributeSclY, + UpdateAttributeFlags_AttributeLosclX, + UpdateAttributeFlags_AttributeLosclY, + UpdateAttributeFlags_AttributeAlpha, + UpdateAttributeFlags_AttributeLoAlpha, + UpdateAttributeFlags_AttributePrio, + UpdateAttributeFlags_AttributeFlipH, + UpdateAttributeFlags_AttributeFlipV, + UpdateAttributeFlags_AttributeHide, + UpdateAttributeFlags_AttributePartColor, + UpdateAttributeFlags_AttributeShader, + UpdateAttributeFlags_AttributeVertex, + UpdateAttributeFlags_AttributePivotX, + UpdateAttributeFlags_AttributePivotY, + UpdateAttributeFlags_AttributeAnchorX, + UpdateAttributeFlags_AttributeAnchorY, + UpdateAttributeFlags_AttributeSizeX, + UpdateAttributeFlags_AttributeSizeY, + UpdateAttributeFlags_AttributeImgFlipH, + UpdateAttributeFlags_AttributeImgFlipV, + UpdateAttributeFlags_AttributeUvtX, + UpdateAttributeFlags_AttributeUvtY, + UpdateAttributeFlags_AttributeUvrZ, + UpdateAttributeFlags_AttributeUvsX, + UpdateAttributeFlags_AttributeUvsY, + UpdateAttributeFlags_AttributeBoundr, + UpdateAttributeFlags_AttributeMask, + UpdateAttributeFlags_AttributeSkew, + UpdateAttributeFlags_AttributeDeform, + UpdateAttributeFlags_AttributeTexture + }; + return values; +} + +inline const char *EnumNameUpdateAttributeFlags(UpdateAttributeFlags e) { + switch (e) { + case UpdateAttributeFlags_AttributeCell: return "AttributeCell"; + case UpdateAttributeFlags_AttributePosX: return "AttributePosX"; + case UpdateAttributeFlags_AttributePosY: return "AttributePosY"; + case UpdateAttributeFlags_AttributePosZ: return "AttributePosZ"; + case UpdateAttributeFlags_AttributeRotX: return "AttributeRotX"; + case UpdateAttributeFlags_AttributeRotY: return "AttributeRotY"; + case UpdateAttributeFlags_AttributeRotZ: return "AttributeRotZ"; + case UpdateAttributeFlags_AttributeSclX: return "AttributeSclX"; + case UpdateAttributeFlags_AttributeSclY: return "AttributeSclY"; + case UpdateAttributeFlags_AttributeLosclX: return "AttributeLosclX"; + case UpdateAttributeFlags_AttributeLosclY: return "AttributeLosclY"; + case UpdateAttributeFlags_AttributeAlpha: return "AttributeAlpha"; + case UpdateAttributeFlags_AttributeLoAlpha: return "AttributeLoAlpha"; + case UpdateAttributeFlags_AttributePrio: return "AttributePrio"; + case UpdateAttributeFlags_AttributeFlipH: return "AttributeFlipH"; + case UpdateAttributeFlags_AttributeFlipV: return "AttributeFlipV"; + case UpdateAttributeFlags_AttributeHide: return "AttributeHide"; + case UpdateAttributeFlags_AttributePartColor: return "AttributePartColor"; + case UpdateAttributeFlags_AttributeShader: return "AttributeShader"; + case UpdateAttributeFlags_AttributeVertex: return "AttributeVertex"; + case UpdateAttributeFlags_AttributePivotX: return "AttributePivotX"; + case UpdateAttributeFlags_AttributePivotY: return "AttributePivotY"; + case UpdateAttributeFlags_AttributeAnchorX: return "AttributeAnchorX"; + case UpdateAttributeFlags_AttributeAnchorY: return "AttributeAnchorY"; + case UpdateAttributeFlags_AttributeSizeX: return "AttributeSizeX"; + case UpdateAttributeFlags_AttributeSizeY: return "AttributeSizeY"; + case UpdateAttributeFlags_AttributeImgFlipH: return "AttributeImgFlipH"; + case UpdateAttributeFlags_AttributeImgFlipV: return "AttributeImgFlipV"; + case UpdateAttributeFlags_AttributeUvtX: return "AttributeUvtX"; + case UpdateAttributeFlags_AttributeUvtY: return "AttributeUvtY"; + case UpdateAttributeFlags_AttributeUvrZ: return "AttributeUvrZ"; + case UpdateAttributeFlags_AttributeUvsX: return "AttributeUvsX"; + case UpdateAttributeFlags_AttributeUvsY: return "AttributeUvsY"; + case UpdateAttributeFlags_AttributeBoundr: return "AttributeBoundr"; + case UpdateAttributeFlags_AttributeMask: return "AttributeMask"; + case UpdateAttributeFlags_AttributeSkew: return "AttributeSkew"; + case UpdateAttributeFlags_AttributeDeform: return "AttributeDeform"; + case UpdateAttributeFlags_AttributeTexture: return "AttributeTexture"; + default: return ""; + } +} + +FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) PartAttributeCell FLATBUFFERS_FINAL_CLASS { + private: + int32_t map_id_; + uint32_t name_hash_; + + public: + PartAttributeCell() + : map_id_(0), + name_hash_(0) { + } + PartAttributeCell(int32_t _map_id, uint32_t _name_hash) + : map_id_(::flatbuffers::EndianScalar(_map_id)), + name_hash_(::flatbuffers::EndianScalar(_name_hash)) { + } + int32_t map_id() const { + return ::flatbuffers::EndianScalar(map_id_); + } + uint32_t name_hash() const { + return ::flatbuffers::EndianScalar(name_hash_); + } +}; +FLATBUFFERS_STRUCT_END(PartAttributeCell, 8); + +FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) Vec2 FLATBUFFERS_FINAL_CLASS { + private: + float x_; + float y_; + + public: + Vec2() + : x_(0), + y_(0) { + } + Vec2(float _x, float _y) + : x_(::flatbuffers::EndianScalar(_x)), + y_(::flatbuffers::EndianScalar(_y)) { + } + float x() const { + return ::flatbuffers::EndianScalar(x_); + } + float y() const { + return ::flatbuffers::EndianScalar(y_); + } +}; +FLATBUFFERS_STRUCT_END(Vec2, 8); + +FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(1) U8Rect FLATBUFFERS_FINAL_CLASS { + private: + uint8_t a_; + uint8_t r_; + uint8_t g_; + uint8_t b_; + + public: + U8Rect() + : a_(0), + r_(0), + g_(0), + b_(0) { + } + U8Rect(uint8_t _a, uint8_t _r, uint8_t _g, uint8_t _b) + : a_(::flatbuffers::EndianScalar(_a)), + r_(::flatbuffers::EndianScalar(_r)), + g_(::flatbuffers::EndianScalar(_g)), + b_(::flatbuffers::EndianScalar(_b)) { + } + uint8_t a() const { + return ::flatbuffers::EndianScalar(a_); + } + uint8_t r() const { + return ::flatbuffers::EndianScalar(r_); + } + uint8_t g() const { + return ::flatbuffers::EndianScalar(g_); + } + uint8_t b() const { + return ::flatbuffers::EndianScalar(b_); + } +}; +FLATBUFFERS_STRUCT_END(U8Rect, 4); + +FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) SsAttributePartColorKeyValueColor FLATBUFFERS_FINAL_CLASS { + private: + ss::runtime::U8Rect rgba_; + float rate_; + + public: + SsAttributePartColorKeyValueColor() + : rgba_(), + rate_(0) { + } + SsAttributePartColorKeyValueColor(const ss::runtime::U8Rect &_rgba, float _rate) + : rgba_(_rgba), + rate_(::flatbuffers::EndianScalar(_rate)) { + } + const ss::runtime::U8Rect &rgba() const { + return rgba_; + } + float rate() const { + return ::flatbuffers::EndianScalar(rate_); + } +}; +FLATBUFFERS_STRUCT_END(SsAttributePartColorKeyValueColor, 8); + +FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) PartAttributePartColor FLATBUFFERS_FINAL_CLASS { + private: + uint8_t blend_type_; + int8_t padding0__; int16_t padding1__; + ss::runtime::SsAttributePartColorKeyValueColor lt_; + ss::runtime::SsAttributePartColorKeyValueColor rt_; + ss::runtime::SsAttributePartColorKeyValueColor lb_; + ss::runtime::SsAttributePartColorKeyValueColor rb_; + + public: + PartAttributePartColor() + : blend_type_(0), + padding0__(0), + padding1__(0), + lt_(), + rt_(), + lb_(), + rb_() { + (void)padding0__; + (void)padding1__; + } + PartAttributePartColor(ss::runtime::BlendType _blend_type, const ss::runtime::SsAttributePartColorKeyValueColor &_lt, const ss::runtime::SsAttributePartColorKeyValueColor &_rt, const ss::runtime::SsAttributePartColorKeyValueColor &_lb, const ss::runtime::SsAttributePartColorKeyValueColor &_rb) + : blend_type_(::flatbuffers::EndianScalar(static_cast(_blend_type))), + padding0__(0), + padding1__(0), + lt_(_lt), + rt_(_rt), + lb_(_lb), + rb_(_rb) { + (void)padding0__; + (void)padding1__; + } + ss::runtime::BlendType blend_type() const { + return static_cast(::flatbuffers::EndianScalar(blend_type_)); + } + const ss::runtime::SsAttributePartColorKeyValueColor <() const { + return lt_; + } + const ss::runtime::SsAttributePartColorKeyValueColor &rt() const { + return rt_; + } + const ss::runtime::SsAttributePartColorKeyValueColor &lb() const { + return lb_; + } + const ss::runtime::SsAttributePartColorKeyValueColor &rb() const { + return rb_; + } +}; +FLATBUFFERS_STRUCT_END(PartAttributePartColor, 36); + +FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) PartAttributeVertex FLATBUFFERS_FINAL_CLASS { + private: + ss::runtime::Vec2 lt_; + ss::runtime::Vec2 rt_; + ss::runtime::Vec2 lb_; + ss::runtime::Vec2 rb_; + + public: + PartAttributeVertex() + : lt_(), + rt_(), + lb_(), + rb_() { + } + PartAttributeVertex(const ss::runtime::Vec2 &_lt, const ss::runtime::Vec2 &_rt, const ss::runtime::Vec2 &_lb, const ss::runtime::Vec2 &_rb) + : lt_(_lt), + rt_(_rt), + lb_(_lb), + rb_(_rb) { + } + const ss::runtime::Vec2 <() const { + return lt_; + } + const ss::runtime::Vec2 &rt() const { + return rt_; + } + const ss::runtime::Vec2 &lb() const { + return lb_; + } + const ss::runtime::Vec2 &rb() const { + return rb_; + } +}; +FLATBUFFERS_STRUCT_END(PartAttributeVertex, 32); + +FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(4) PartAttributeShader FLATBUFFERS_FINAL_CLASS { + private: + uint32_t id_hash_; + float param0_; + float param1_; + float param2_; + float param3_; + float param4_; + float param5_; + float param6_; + float param7_; + int32_t map0_id_; + uint32_t map0_name_hash_; + int32_t map1_id_; + uint32_t map1_name_hash_; + + public: + PartAttributeShader() + : id_hash_(0), + param0_(0), + param1_(0), + param2_(0), + param3_(0), + param4_(0), + param5_(0), + param6_(0), + param7_(0), + map0_id_(0), + map0_name_hash_(0), + map1_id_(0), + map1_name_hash_(0) { + } + PartAttributeShader(uint32_t _id_hash, float _param0, float _param1, float _param2, float _param3, float _param4, float _param5, float _param6, float _param7, int32_t _map0_id, uint32_t _map0_name_hash, int32_t _map1_id, uint32_t _map1_name_hash) + : id_hash_(::flatbuffers::EndianScalar(_id_hash)), + param0_(::flatbuffers::EndianScalar(_param0)), + param1_(::flatbuffers::EndianScalar(_param1)), + param2_(::flatbuffers::EndianScalar(_param2)), + param3_(::flatbuffers::EndianScalar(_param3)), + param4_(::flatbuffers::EndianScalar(_param4)), + param5_(::flatbuffers::EndianScalar(_param5)), + param6_(::flatbuffers::EndianScalar(_param6)), + param7_(::flatbuffers::EndianScalar(_param7)), + map0_id_(::flatbuffers::EndianScalar(_map0_id)), + map0_name_hash_(::flatbuffers::EndianScalar(_map0_name_hash)), + map1_id_(::flatbuffers::EndianScalar(_map1_id)), + map1_name_hash_(::flatbuffers::EndianScalar(_map1_name_hash)) { + } + uint32_t id_hash() const { + return ::flatbuffers::EndianScalar(id_hash_); + } + float param0() const { + return ::flatbuffers::EndianScalar(param0_); + } + float param1() const { + return ::flatbuffers::EndianScalar(param1_); + } + float param2() const { + return ::flatbuffers::EndianScalar(param2_); + } + float param3() const { + return ::flatbuffers::EndianScalar(param3_); + } + float param4() const { + return ::flatbuffers::EndianScalar(param4_); + } + float param5() const { + return ::flatbuffers::EndianScalar(param5_); + } + float param6() const { + return ::flatbuffers::EndianScalar(param6_); + } + float param7() const { + return ::flatbuffers::EndianScalar(param7_); + } + int32_t map0_id() const { + return ::flatbuffers::EndianScalar(map0_id_); + } + uint32_t map0_name_hash() const { + return ::flatbuffers::EndianScalar(map0_name_hash_); + } + int32_t map1_id() const { + return ::flatbuffers::EndianScalar(map1_id_); + } + uint32_t map1_name_hash() const { + return ::flatbuffers::EndianScalar(map1_name_hash_); + } +}; +FLATBUFFERS_STRUCT_END(PartAttributeShader, 52); + +FLATBUFFERS_MANUALLY_ALIGNED_STRUCT(8) PartState FLATBUFFERS_FINAL_CLASS { + private: + uint64_t update_flag_; + float position_x_; + float position_y_; + float position_z_; + float rotation_x_; + float rotation_y_; + float rotation_z_; + float scale_x_; + float scale_y_; + float local_scale_x_; + float local_scale_y_; + float alpha_; + float local_alpha_; + float priority_; + float pivot_x_; + float pivot_y_; + float anchor_x_; + float anchor_y_; + float size_x_; + float size_y_; + float uv_translation_x_; + float uv_translation_y_; + float uv_rotation_z_; + float uv_scale_x_; + float uv_scale_y_; + float bounding_radius_; + float mask_; + float skew_x_; + float skew_y_; + uint32_t texture_; + int16_t part_index_; + int16_t cell_; + int16_t part_color_; + int16_t shader_; + int16_t vertex_; + int16_t deform_; + uint8_t flip_h_; + uint8_t flip_v_; + uint8_t hide_; + uint8_t img_flip_h_; + uint8_t img_flip_v_; + int8_t padding0__; int16_t padding1__; + + public: + PartState() + : update_flag_(0), + position_x_(0), + position_y_(0), + position_z_(0), + rotation_x_(0), + rotation_y_(0), + rotation_z_(0), + scale_x_(0), + scale_y_(0), + local_scale_x_(0), + local_scale_y_(0), + alpha_(0), + local_alpha_(0), + priority_(0), + pivot_x_(0), + pivot_y_(0), + anchor_x_(0), + anchor_y_(0), + size_x_(0), + size_y_(0), + uv_translation_x_(0), + uv_translation_y_(0), + uv_rotation_z_(0), + uv_scale_x_(0), + uv_scale_y_(0), + bounding_radius_(0), + mask_(0), + skew_x_(0), + skew_y_(0), + texture_(0), + part_index_(0), + cell_(0), + part_color_(0), + shader_(0), + vertex_(0), + deform_(0), + flip_h_(0), + flip_v_(0), + hide_(0), + img_flip_h_(0), + img_flip_v_(0), + padding0__(0), + padding1__(0) { + (void)padding0__; + (void)padding1__; + } + PartState(ss::runtime::UpdateAttributeFlags _update_flag, float _position_x, float _position_y, float _position_z, float _rotation_x, float _rotation_y, float _rotation_z, float _scale_x, float _scale_y, float _local_scale_x, float _local_scale_y, float _alpha, float _local_alpha, float _priority, float _pivot_x, float _pivot_y, float _anchor_x, float _anchor_y, float _size_x, float _size_y, float _uv_translation_x, float _uv_translation_y, float _uv_rotation_z, float _uv_scale_x, float _uv_scale_y, float _bounding_radius, float _mask, float _skew_x, float _skew_y, uint32_t _texture, int16_t _part_index, int16_t _cell, int16_t _part_color, int16_t _shader, int16_t _vertex, int16_t _deform, bool _flip_h, bool _flip_v, bool _hide, bool _img_flip_h, bool _img_flip_v) + : update_flag_(::flatbuffers::EndianScalar(static_cast(_update_flag))), + position_x_(::flatbuffers::EndianScalar(_position_x)), + position_y_(::flatbuffers::EndianScalar(_position_y)), + position_z_(::flatbuffers::EndianScalar(_position_z)), + rotation_x_(::flatbuffers::EndianScalar(_rotation_x)), + rotation_y_(::flatbuffers::EndianScalar(_rotation_y)), + rotation_z_(::flatbuffers::EndianScalar(_rotation_z)), + scale_x_(::flatbuffers::EndianScalar(_scale_x)), + scale_y_(::flatbuffers::EndianScalar(_scale_y)), + local_scale_x_(::flatbuffers::EndianScalar(_local_scale_x)), + local_scale_y_(::flatbuffers::EndianScalar(_local_scale_y)), + alpha_(::flatbuffers::EndianScalar(_alpha)), + local_alpha_(::flatbuffers::EndianScalar(_local_alpha)), + priority_(::flatbuffers::EndianScalar(_priority)), + pivot_x_(::flatbuffers::EndianScalar(_pivot_x)), + pivot_y_(::flatbuffers::EndianScalar(_pivot_y)), + anchor_x_(::flatbuffers::EndianScalar(_anchor_x)), + anchor_y_(::flatbuffers::EndianScalar(_anchor_y)), + size_x_(::flatbuffers::EndianScalar(_size_x)), + size_y_(::flatbuffers::EndianScalar(_size_y)), + uv_translation_x_(::flatbuffers::EndianScalar(_uv_translation_x)), + uv_translation_y_(::flatbuffers::EndianScalar(_uv_translation_y)), + uv_rotation_z_(::flatbuffers::EndianScalar(_uv_rotation_z)), + uv_scale_x_(::flatbuffers::EndianScalar(_uv_scale_x)), + uv_scale_y_(::flatbuffers::EndianScalar(_uv_scale_y)), + bounding_radius_(::flatbuffers::EndianScalar(_bounding_radius)), + mask_(::flatbuffers::EndianScalar(_mask)), + skew_x_(::flatbuffers::EndianScalar(_skew_x)), + skew_y_(::flatbuffers::EndianScalar(_skew_y)), + texture_(::flatbuffers::EndianScalar(_texture)), + part_index_(::flatbuffers::EndianScalar(_part_index)), + cell_(::flatbuffers::EndianScalar(_cell)), + part_color_(::flatbuffers::EndianScalar(_part_color)), + shader_(::flatbuffers::EndianScalar(_shader)), + vertex_(::flatbuffers::EndianScalar(_vertex)), + deform_(::flatbuffers::EndianScalar(_deform)), + flip_h_(::flatbuffers::EndianScalar(static_cast(_flip_h))), + flip_v_(::flatbuffers::EndianScalar(static_cast(_flip_v))), + hide_(::flatbuffers::EndianScalar(static_cast(_hide))), + img_flip_h_(::flatbuffers::EndianScalar(static_cast(_img_flip_h))), + img_flip_v_(::flatbuffers::EndianScalar(static_cast(_img_flip_v))), + padding0__(0), + padding1__(0) { + (void)padding0__; + (void)padding1__; + } + ss::runtime::UpdateAttributeFlags update_flag() const { + return static_cast(::flatbuffers::EndianScalar(update_flag_)); + } + float position_x() const { + return ::flatbuffers::EndianScalar(position_x_); + } + float position_y() const { + return ::flatbuffers::EndianScalar(position_y_); + } + float position_z() const { + return ::flatbuffers::EndianScalar(position_z_); + } + float rotation_x() const { + return ::flatbuffers::EndianScalar(rotation_x_); + } + float rotation_y() const { + return ::flatbuffers::EndianScalar(rotation_y_); + } + float rotation_z() const { + return ::flatbuffers::EndianScalar(rotation_z_); + } + float scale_x() const { + return ::flatbuffers::EndianScalar(scale_x_); + } + float scale_y() const { + return ::flatbuffers::EndianScalar(scale_y_); + } + float local_scale_x() const { + return ::flatbuffers::EndianScalar(local_scale_x_); + } + float local_scale_y() const { + return ::flatbuffers::EndianScalar(local_scale_y_); + } + float alpha() const { + return ::flatbuffers::EndianScalar(alpha_); + } + float local_alpha() const { + return ::flatbuffers::EndianScalar(local_alpha_); + } + float priority() const { + return ::flatbuffers::EndianScalar(priority_); + } + float pivot_x() const { + return ::flatbuffers::EndianScalar(pivot_x_); + } + float pivot_y() const { + return ::flatbuffers::EndianScalar(pivot_y_); + } + float anchor_x() const { + return ::flatbuffers::EndianScalar(anchor_x_); + } + float anchor_y() const { + return ::flatbuffers::EndianScalar(anchor_y_); + } + float size_x() const { + return ::flatbuffers::EndianScalar(size_x_); + } + float size_y() const { + return ::flatbuffers::EndianScalar(size_y_); + } + float uv_translation_x() const { + return ::flatbuffers::EndianScalar(uv_translation_x_); + } + float uv_translation_y() const { + return ::flatbuffers::EndianScalar(uv_translation_y_); + } + float uv_rotation_z() const { + return ::flatbuffers::EndianScalar(uv_rotation_z_); + } + float uv_scale_x() const { + return ::flatbuffers::EndianScalar(uv_scale_x_); + } + float uv_scale_y() const { + return ::flatbuffers::EndianScalar(uv_scale_y_); + } + float bounding_radius() const { + return ::flatbuffers::EndianScalar(bounding_radius_); + } + float mask() const { + return ::flatbuffers::EndianScalar(mask_); + } + float skew_x() const { + return ::flatbuffers::EndianScalar(skew_x_); + } + float skew_y() const { + return ::flatbuffers::EndianScalar(skew_y_); + } + uint32_t texture() const { + return ::flatbuffers::EndianScalar(texture_); + } + int16_t part_index() const { + return ::flatbuffers::EndianScalar(part_index_); + } + int16_t cell() const { + return ::flatbuffers::EndianScalar(cell_); + } + int16_t part_color() const { + return ::flatbuffers::EndianScalar(part_color_); + } + int16_t shader() const { + return ::flatbuffers::EndianScalar(shader_); + } + int16_t vertex() const { + return ::flatbuffers::EndianScalar(vertex_); + } + int16_t deform() const { + return ::flatbuffers::EndianScalar(deform_); + } + bool flip_h() const { + return ::flatbuffers::EndianScalar(flip_h_) != 0; + } + bool flip_v() const { + return ::flatbuffers::EndianScalar(flip_v_) != 0; + } + bool hide() const { + return ::flatbuffers::EndianScalar(hide_) != 0; + } + bool img_flip_h() const { + return ::flatbuffers::EndianScalar(img_flip_h_) != 0; + } + bool img_flip_v() const { + return ::flatbuffers::EndianScalar(img_flip_v_) != 0; + } +}; +FLATBUFFERS_STRUCT_END(PartState, 144); + +struct PartAttributeDeform FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartAttributeDeformBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_COORDINATE = 4, + VT_INDEX = 6 + }; + const ::flatbuffers::Vector *coordinate() const { + return GetPointer *>(VT_COORDINATE); + } + const ::flatbuffers::Vector *index() const { + return GetPointer *>(VT_INDEX); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_COORDINATE) && + verifier.VerifyVector(coordinate()) && + VerifyOffset(verifier, VT_INDEX) && + verifier.VerifyVector(index()) && + verifier.EndTable(); + } +}; + +struct PartAttributeDeformBuilder { + typedef PartAttributeDeform Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_coordinate(::flatbuffers::Offset<::flatbuffers::Vector> coordinate) { + fbb_.AddOffset(PartAttributeDeform::VT_COORDINATE, coordinate); + } + void add_index(::flatbuffers::Offset<::flatbuffers::Vector> index) { + fbb_.AddOffset(PartAttributeDeform::VT_INDEX, index); + } + explicit PartAttributeDeformBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartAttributeDeform( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset<::flatbuffers::Vector> coordinate = 0, + ::flatbuffers::Offset<::flatbuffers::Vector> index = 0) { + PartAttributeDeformBuilder builder_(_fbb); + builder_.add_index(index); + builder_.add_coordinate(coordinate); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreatePartAttributeDeformDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + const std::vector *coordinate = nullptr, + const std::vector *index = nullptr) { + auto coordinate__ = coordinate ? _fbb.CreateVectorOfStructs(*coordinate) : 0; + auto index__ = index ? _fbb.CreateVector(*index) : 0; + return ss::runtime::CreatePartAttributeDeform( + _fbb, + coordinate__, + index__); +} + +struct FrameData FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef FrameDataBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_PARTS = 4, + VT_CELLS = 6, + VT_PARTS_COLOR = 8, + VT_SHADERS = 10, + VT_VERTICES = 12, + VT_DEFORMS = 14 + }; + const ::flatbuffers::Vector *parts() const { + return GetPointer *>(VT_PARTS); + } + const ::flatbuffers::Vector *cells() const { + return GetPointer *>(VT_CELLS); + } + const ::flatbuffers::Vector *parts_color() const { + return GetPointer *>(VT_PARTS_COLOR); + } + const ::flatbuffers::Vector *shaders() const { + return GetPointer *>(VT_SHADERS); + } + const ::flatbuffers::Vector *vertices() const { + return GetPointer *>(VT_VERTICES); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *deforms() const { + return GetPointer> *>(VT_DEFORMS); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_PARTS) && + verifier.VerifyVector(parts()) && + VerifyOffset(verifier, VT_CELLS) && + verifier.VerifyVector(cells()) && + VerifyOffset(verifier, VT_PARTS_COLOR) && + verifier.VerifyVector(parts_color()) && + VerifyOffset(verifier, VT_SHADERS) && + verifier.VerifyVector(shaders()) && + VerifyOffset(verifier, VT_VERTICES) && + verifier.VerifyVector(vertices()) && + VerifyOffset(verifier, VT_DEFORMS) && + verifier.VerifyVector(deforms()) && + verifier.VerifyVectorOfTables(deforms()) && + verifier.EndTable(); + } +}; + +struct FrameDataBuilder { + typedef FrameData Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_parts(::flatbuffers::Offset<::flatbuffers::Vector> parts) { + fbb_.AddOffset(FrameData::VT_PARTS, parts); + } + void add_cells(::flatbuffers::Offset<::flatbuffers::Vector> cells) { + fbb_.AddOffset(FrameData::VT_CELLS, cells); + } + void add_parts_color(::flatbuffers::Offset<::flatbuffers::Vector> parts_color) { + fbb_.AddOffset(FrameData::VT_PARTS_COLOR, parts_color); + } + void add_shaders(::flatbuffers::Offset<::flatbuffers::Vector> shaders) { + fbb_.AddOffset(FrameData::VT_SHADERS, shaders); + } + void add_vertices(::flatbuffers::Offset<::flatbuffers::Vector> vertices) { + fbb_.AddOffset(FrameData::VT_VERTICES, vertices); + } + void add_deforms(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> deforms) { + fbb_.AddOffset(FrameData::VT_DEFORMS, deforms); + } + explicit FrameDataBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateFrameData( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset<::flatbuffers::Vector> parts = 0, + ::flatbuffers::Offset<::flatbuffers::Vector> cells = 0, + ::flatbuffers::Offset<::flatbuffers::Vector> parts_color = 0, + ::flatbuffers::Offset<::flatbuffers::Vector> shaders = 0, + ::flatbuffers::Offset<::flatbuffers::Vector> vertices = 0, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> deforms = 0) { + FrameDataBuilder builder_(_fbb); + builder_.add_deforms(deforms); + builder_.add_vertices(vertices); + builder_.add_shaders(shaders); + builder_.add_parts_color(parts_color); + builder_.add_cells(cells); + builder_.add_parts(parts); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateFrameDataDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + const std::vector *parts = nullptr, + const std::vector *cells = nullptr, + const std::vector *parts_color = nullptr, + const std::vector *shaders = nullptr, + const std::vector *vertices = nullptr, + const std::vector<::flatbuffers::Offset> *deforms = nullptr) { + auto parts__ = parts ? _fbb.CreateVectorOfStructs(*parts) : 0; + auto cells__ = cells ? _fbb.CreateVectorOfStructs(*cells) : 0; + auto parts_color__ = parts_color ? _fbb.CreateVectorOfStructs(*parts_color) : 0; + auto shaders__ = shaders ? _fbb.CreateVectorOfStructs(*shaders) : 0; + auto vertices__ = vertices ? _fbb.CreateVectorOfStructs(*vertices) : 0; + auto deforms__ = deforms ? _fbb.CreateVector<::flatbuffers::Offset>(*deforms) : 0; + return ss::runtime::CreateFrameData( + _fbb, + parts__, + cells__, + parts_color__, + shaders__, + vertices__, + deforms__); +} + +inline const ss::runtime::FrameData *GetFrameData(const void *buf) { + return ::flatbuffers::GetRoot(buf); +} + +inline const ss::runtime::FrameData *GetSizePrefixedFrameData(const void *buf) { + return ::flatbuffers::GetSizePrefixedRoot(buf); +} + +template +inline bool VerifyFrameDataBuffer( + ::flatbuffers::VerifierTemplate &verifier) { + return verifier.template VerifyBuffer(nullptr); +} + +template +inline bool VerifySizePrefixedFrameDataBuffer( + ::flatbuffers::VerifierTemplate &verifier) { + return verifier.template VerifySizePrefixedBuffer(nullptr); +} + +inline void FinishFrameDataBuffer( + ::flatbuffers::FlatBufferBuilder &fbb, + ::flatbuffers::Offset root) { + fbb.Finish(root); +} + +inline void FinishSizePrefixedFrameDataBuffer( + ::flatbuffers::FlatBufferBuilder &fbb, + ::flatbuffers::Offset root) { + fbb.FinishSizePrefixed(root); +} + +} // namespace runtime +} // namespace ss + +#endif // FLATBUFFERS_GENERATED_FRAMEDATA_SS_RUNTIME_H_ diff --git a/gd_spritestudio/runtime/ssab.h b/gd_spritestudio/runtime/ssab.h new file mode 100644 index 0000000..e367a03 --- /dev/null +++ b/gd_spritestudio/runtime/ssab.h @@ -0,0 +1,8285 @@ +// automatically generated by the FlatBuffers compiler, do not modify + + +#ifndef FLATBUFFERS_GENERATED_SSAB_SS_FORMAT_H_ +#define FLATBUFFERS_GENERATED_SSAB_SS_FORMAT_H_ + +#include "flatbuffers/flatbuffers.h" + +// Ensure the included flatbuffers.h is the same version as when this file was +// generated, otherwise it may not be compatible. +static_assert(FLATBUFFERS_VERSION_MAJOR == 25 && + FLATBUFFERS_VERSION_MINOR == 12 && + FLATBUFFERS_VERSION_REVISION == 19, + "Non-compatible flatbuffers version included"); + +namespace ss { +namespace format { + +struct Vec2; +struct Vec2Builder; + +struct Rect; +struct RectBuilder; + +struct U8Rect; +struct U8RectBuilder; + +struct NoneValueEntry; +struct NoneValueEntryBuilder; + +struct BoolValueEntry; +struct BoolValueEntryBuilder; + +struct IntValueEntry; +struct IntValueEntryBuilder; + +struct FloatValueEntry; +struct FloatValueEntryBuilder; + +struct StringValueEntry; +struct StringValueEntryBuilder; + +struct Vec2ValueEntry; +struct Vec2ValueEntryBuilder; + +struct RectValueEntry; +struct RectValueEntryBuilder; + +struct EventUserData; +struct EventUserDataBuilder; + +struct EventSignal; +struct EventSignalBuilder; + +struct EventAudio; +struct EventAudioBuilder; + +struct EventInstance; +struct EventInstanceBuilder; + +struct EventEffect; +struct EventEffectBuilder; + +struct EventsPerFrame; +struct EventsPerFrameBuilder; + +struct Cell; +struct CellBuilder; + +struct CellMap; +struct CellMapBuilder; + +struct EffectParticlePointGravity; +struct EffectParticlePointGravityBuilder; + +struct RectAndVec2ValueTable; +struct RectAndVec2ValueTableBuilder; + +struct EffectParticleElementTransColor; +struct EffectParticleElementTransColorBuilder; + +struct EffectParticleElementInitColor; +struct EffectParticleElementInitColorBuilder; + +struct EffectParticleElementRotationTrans; +struct EffectParticleElementRotationTransBuilder; + +struct EffectParticleElementRotation; +struct EffectParticleElementRotationBuilder; + +struct EffectParticleElementBasic; +struct EffectParticleElementBasicBuilder; + +struct EffectNodeBehaviorWrapper; +struct EffectNodeBehaviorWrapperBuilder; + +struct EffectNode; +struct EffectNodeBuilder; + +struct Effect; +struct EffectBuilder; + +struct SoundFile; +struct SoundFileBuilder; + +struct SoundList; +struct SoundListBuilder; + +struct FontGlyphBitmap; +struct FontGlyphBitmapBuilder; + +struct FontBitmap; +struct FontBitmapBuilder; + +struct PartAttributeCell; +struct PartAttributeCellBuilder; + +struct SsAttributePartColorKeyValueColor; +struct SsAttributePartColorKeyValueColorBuilder; + +struct PartAttributePartColor; +struct PartAttributePartColorBuilder; + +struct PartAttributeVertex; +struct PartAttributeVertexBuilder; + +struct PartAttributeInstance; +struct PartAttributeInstanceBuilder; + +struct PartAttributeEffect; +struct PartAttributeEffectBuilder; + +struct PartAttributeDeform; +struct PartAttributeDeformBuilder; + +struct PartAttributeShader; +struct PartAttributeShaderBuilder; + +struct PartAttributeUserData; +struct PartAttributeUserDataBuilder; + +struct SignalCommandParam; +struct SignalCommandParamBuilder; + +struct PartAttributeSignal; +struct PartAttributeSignalBuilder; + +struct PartAttributeAudio; +struct PartAttributeAudioBuilder; + +struct InitialPartAttributes; +struct InitialPartAttributesBuilder; + +struct InitialEvents; +struct InitialEventsBuilder; + +struct PartTypeShape; +struct PartTypeShapeBuilder; + +struct PartTypeText; +struct PartTypeTextBuilder; + +struct PartTypeNines; +struct PartTypeNinesBuilder; + +struct PartTypeInstance; +struct PartTypeInstanceBuilder; + +struct PartTypeEffect; +struct PartTypeEffectBuilder; + +struct PartData; +struct PartDataBuilder; + +struct Label; +struct LabelBuilder; + +struct PartAnimationDataCellValue; +struct PartAnimationDataCellValueBuilder; + +struct PartAnimationDataFloatValue; +struct PartAnimationDataFloatValueBuilder; + +struct PartAnimationDataIntValue; +struct PartAnimationDataIntValueBuilder; + +struct PartAnimationDataUIntValue; +struct PartAnimationDataUIntValueBuilder; + +struct PartAnimationDataBoolValue; +struct PartAnimationDataBoolValueBuilder; + +struct PartAnimationDataPartColor; +struct PartAnimationDataPartColorBuilder; + +struct PartAnimationDataShader; +struct PartAnimationDataShaderBuilder; + +struct PartAnimationDataVertex; +struct PartAnimationDataVertexBuilder; + +struct PartAnimationDataInstance; +struct PartAnimationDataInstanceBuilder; + +struct PartAnimationDataEffect; +struct PartAnimationDataEffectBuilder; + +struct PartAnimationDataVec2; +struct PartAnimationDataVec2Builder; + +struct PartAnimationDataDeform; +struct PartAnimationDataDeformBuilder; + +struct PartAnimationData; +struct PartAnimationDataBuilder; + +struct PartMeshData; +struct PartMeshDataBuilder; + +struct AnimationData; +struct AnimationDataBuilder; + +struct ExternalTexture; +struct ExternalTextureBuilder; + +struct EmbeddedAsset; +struct EmbeddedAssetBuilder; + +struct SsAnimeBinary; +struct SsAnimeBinaryBuilder; + +enum TexFilterMode : uint8_t { + TexFilterMode_Nearest = 0, + TexFilterMode_Linear = 1, + TexFilterMode_MIN = TexFilterMode_Nearest, + TexFilterMode_MAX = TexFilterMode_Linear +}; + +inline const TexFilterMode (&EnumValuesTexFilterMode())[2] { + static const TexFilterMode values[] = { + TexFilterMode_Nearest, + TexFilterMode_Linear + }; + return values; +} + +inline const char * const *EnumNamesTexFilterMode() { + static const char * const names[3] = { + "Nearest", + "Linear", + nullptr + }; + return names; +} + +inline const char *EnumNameTexFilterMode(TexFilterMode e) { + if (::flatbuffers::IsOutRange(e, TexFilterMode_Nearest, TexFilterMode_Linear)) return ""; + const size_t index = static_cast(e); + return EnumNamesTexFilterMode()[index]; +} + +enum RenderBlendType : uint8_t { + RenderBlendType_Mix = 0, + RenderBlendType_Add = 1, + RenderBlendType_MIN = RenderBlendType_Mix, + RenderBlendType_MAX = RenderBlendType_Add +}; + +inline const RenderBlendType (&EnumValuesRenderBlendType())[2] { + static const RenderBlendType values[] = { + RenderBlendType_Mix, + RenderBlendType_Add + }; + return values; +} + +inline const char * const *EnumNamesRenderBlendType() { + static const char * const names[3] = { + "Mix", + "Add", + nullptr + }; + return names; +} + +inline const char *EnumNameRenderBlendType(RenderBlendType e) { + if (::flatbuffers::IsOutRange(e, RenderBlendType_Mix, RenderBlendType_Add)) return ""; + const size_t index = static_cast(e); + return EnumNamesRenderBlendType()[index]; +} + +enum TexWrapMode : uint8_t { + TexWrapMode_Clamp = 0, + TexWrapMode_Repeat = 1, + TexWrapMode_Mirror = 2, + TexWrapMode_MIN = TexWrapMode_Clamp, + TexWrapMode_MAX = TexWrapMode_Mirror +}; + +inline const TexWrapMode (&EnumValuesTexWrapMode())[3] { + static const TexWrapMode values[] = { + TexWrapMode_Clamp, + TexWrapMode_Repeat, + TexWrapMode_Mirror + }; + return values; +} + +inline const char * const *EnumNamesTexWrapMode() { + static const char * const names[4] = { + "Clamp", + "Repeat", + "Mirror", + nullptr + }; + return names; +} + +inline const char *EnumNameTexWrapMode(TexWrapMode e) { + if (::flatbuffers::IsOutRange(e, TexWrapMode_Clamp, TexWrapMode_Mirror)) return ""; + const size_t index = static_cast(e); + return EnumNamesTexWrapMode()[index]; +} + +enum MeshDivType : uint8_t { + MeshDivType_Unknown = 0, + MeshDivType_PolylineBase = 1, + MeshDivType_Boxdiv = 2, + MeshDivType_MIN = MeshDivType_Unknown, + MeshDivType_MAX = MeshDivType_Boxdiv +}; + +inline const MeshDivType (&EnumValuesMeshDivType())[3] { + static const MeshDivType values[] = { + MeshDivType_Unknown, + MeshDivType_PolylineBase, + MeshDivType_Boxdiv + }; + return values; +} + +inline const char * const *EnumNamesMeshDivType() { + static const char * const names[4] = { + "Unknown", + "PolylineBase", + "Boxdiv", + nullptr + }; + return names; +} + +inline const char *EnumNameMeshDivType(MeshDivType e) { + if (::flatbuffers::IsOutRange(e, MeshDivType_Unknown, MeshDivType_Boxdiv)) return ""; + const size_t index = static_cast(e); + return EnumNamesMeshDivType()[index]; +} + +enum BoundsType : uint8_t { + BoundsType_None = 0, + BoundsType_Quad = 1, + BoundsType_Aabb = 2, + BoundsType_Circle = 3, + BoundsType_CircleSmin = 4, + BoundsType_CircleSmax = 5, + BoundsType_MIN = BoundsType_None, + BoundsType_MAX = BoundsType_CircleSmax +}; + +inline const BoundsType (&EnumValuesBoundsType())[6] { + static const BoundsType values[] = { + BoundsType_None, + BoundsType_Quad, + BoundsType_Aabb, + BoundsType_Circle, + BoundsType_CircleSmin, + BoundsType_CircleSmax + }; + return values; +} + +inline const char * const *EnumNamesBoundsType() { + static const char * const names[7] = { + "None", + "Quad", + "Aabb", + "Circle", + "CircleSmin", + "CircleSmax", + nullptr + }; + return names; +} + +inline const char *EnumNameBoundsType(BoundsType e) { + if (::flatbuffers::IsOutRange(e, BoundsType_None, BoundsType_CircleSmax)) return ""; + const size_t index = static_cast(e); + return EnumNamesBoundsType()[index]; +} + +enum InheritType : uint8_t { + InheritType_Parent = 0, + InheritType_Self = 1, + InheritType_MIN = InheritType_Parent, + InheritType_MAX = InheritType_Self +}; + +inline const InheritType (&EnumValuesInheritType())[2] { + static const InheritType values[] = { + InheritType_Parent, + InheritType_Self + }; + return values; +} + +inline const char * const *EnumNamesInheritType() { + static const char * const names[3] = { + "Parent", + "Self", + nullptr + }; + return names; +} + +inline const char *EnumNameInheritType(InheritType e) { + if (::flatbuffers::IsOutRange(e, InheritType_Parent, InheritType_Self)) return ""; + const size_t index = static_cast(e); + return EnumNamesInheritType()[index]; +} + +enum BlendType : uint8_t { + BlendType_Mix = 0, + BlendType_Mul = 1, + BlendType_Add = 2, + BlendType_Sub = 3, + BlendType_Mulalpha = 4, + BlendType_Screen = 5, + BlendType_Exclusion = 6, + BlendType_Invert = 7, + BlendType_Mul2 = 8, + BlendType_Div2 = 9, + BlendType_Screen2 = 10, + BlendType_Overlay2 = 11, + BlendType_MIN = BlendType_Mix, + BlendType_MAX = BlendType_Overlay2 +}; + +inline const BlendType (&EnumValuesBlendType())[12] { + static const BlendType values[] = { + BlendType_Mix, + BlendType_Mul, + BlendType_Add, + BlendType_Sub, + BlendType_Mulalpha, + BlendType_Screen, + BlendType_Exclusion, + BlendType_Invert, + BlendType_Mul2, + BlendType_Div2, + BlendType_Screen2, + BlendType_Overlay2 + }; + return values; +} + +inline const char * const *EnumNamesBlendType() { + static const char * const names[13] = { + "Mix", + "Mul", + "Add", + "Sub", + "Mulalpha", + "Screen", + "Exclusion", + "Invert", + "Mul2", + "Div2", + "Screen2", + "Overlay2", + nullptr + }; + return names; +} + +inline const char *EnumNameBlendType(BlendType e) { + if (::flatbuffers::IsOutRange(e, BlendType_Mix, BlendType_Overlay2)) return ""; + const size_t index = static_cast(e); + return EnumNamesBlendType()[index]; +} + +enum InterpolationType : uint8_t { + InterpolationType_None = 0, + InterpolationType_Linear = 1, + InterpolationType_Hermite = 2, + InterpolationType_Bezier = 3, + InterpolationType_Acceleration = 4, + InterpolationType_Deceleration = 5, + InterpolationType_EaseIn = 6, + InterpolationType_EaseOut = 7, + InterpolationType_EaseInOut = 8, + InterpolationType_EaseExponentialIn = 9, + InterpolationType_EaseExponentialOut = 10, + InterpolationType_EaseExponentialInOut = 11, + InterpolationType_EaseSineIn = 12, + InterpolationType_EaseSineOut = 13, + InterpolationType_EaseSineInOut = 14, + InterpolationType_EaseElasticIn = 15, + InterpolationType_EaseElasticOut = 16, + InterpolationType_EaseElasticInOut = 17, + InterpolationType_EaseBounceIn = 18, + InterpolationType_EaseBounceOut = 19, + InterpolationType_EaseBounceInOut = 20, + InterpolationType_EaseBackIn = 21, + InterpolationType_EaseBackOut = 22, + InterpolationType_EaseBackInOut = 23, + InterpolationType_MIN = InterpolationType_None, + InterpolationType_MAX = InterpolationType_EaseBackInOut +}; + +inline const InterpolationType (&EnumValuesInterpolationType())[24] { + static const InterpolationType values[] = { + InterpolationType_None, + InterpolationType_Linear, + InterpolationType_Hermite, + InterpolationType_Bezier, + InterpolationType_Acceleration, + InterpolationType_Deceleration, + InterpolationType_EaseIn, + InterpolationType_EaseOut, + InterpolationType_EaseInOut, + InterpolationType_EaseExponentialIn, + InterpolationType_EaseExponentialOut, + InterpolationType_EaseExponentialInOut, + InterpolationType_EaseSineIn, + InterpolationType_EaseSineOut, + InterpolationType_EaseSineInOut, + InterpolationType_EaseElasticIn, + InterpolationType_EaseElasticOut, + InterpolationType_EaseElasticInOut, + InterpolationType_EaseBounceIn, + InterpolationType_EaseBounceOut, + InterpolationType_EaseBounceInOut, + InterpolationType_EaseBackIn, + InterpolationType_EaseBackOut, + InterpolationType_EaseBackInOut + }; + return values; +} + +inline const char * const *EnumNamesInterpolationType() { + static const char * const names[25] = { + "None", + "Linear", + "Hermite", + "Bezier", + "Acceleration", + "Deceleration", + "EaseIn", + "EaseOut", + "EaseInOut", + "EaseExponentialIn", + "EaseExponentialOut", + "EaseExponentialInOut", + "EaseSineIn", + "EaseSineOut", + "EaseSineInOut", + "EaseElasticIn", + "EaseElasticOut", + "EaseElasticInOut", + "EaseBounceIn", + "EaseBounceOut", + "EaseBounceInOut", + "EaseBackIn", + "EaseBackOut", + "EaseBackInOut", + nullptr + }; + return names; +} + +inline const char *EnumNameInterpolationType(InterpolationType e) { + if (::flatbuffers::IsOutRange(e, InterpolationType_None, InterpolationType_EaseBackInOut)) return ""; + const size_t index = static_cast(e); + return EnumNamesInterpolationType()[index]; +} + +enum EffectNodeType : uint8_t { + EffectNodeType_Root = 0, + EffectNodeType_Emitter = 1, + EffectNodeType_Particle = 2, + EffectNodeType_MIN = EffectNodeType_Root, + EffectNodeType_MAX = EffectNodeType_Particle +}; + +inline const EffectNodeType (&EnumValuesEffectNodeType())[3] { + static const EffectNodeType values[] = { + EffectNodeType_Root, + EffectNodeType_Emitter, + EffectNodeType_Particle + }; + return values; +} + +inline const char * const *EnumNamesEffectNodeType() { + static const char * const names[4] = { + "Root", + "Emitter", + "Particle", + nullptr + }; + return names; +} + +inline const char *EnumNameEffectNodeType(EffectNodeType e) { + if (::flatbuffers::IsOutRange(e, EffectNodeType_Root, EffectNodeType_Particle)) return ""; + const size_t index = static_cast(e); + return EnumNamesEffectNodeType()[index]; +} + +enum EffectNodeBehavior : uint8_t { + EffectNodeBehavior_NONE = 0, + EffectNodeBehavior_EffectParticleElementBasic = 1, + EffectNodeBehavior_EffectParticleElementRndSeedChange = 2, + EffectNodeBehavior_EffectParticleElementDelay = 3, + EffectNodeBehavior_EffectParticleElementGravity = 4, + EffectNodeBehavior_EffectParticleElementPosition = 5, + EffectNodeBehavior_EffectParticleElementRotation = 6, + EffectNodeBehavior_EffectParticleElementRotationTrans = 7, + EffectNodeBehavior_EffectParticleElementTransSpeed = 8, + EffectNodeBehavior_EffectParticleElementTangentialAcceleration = 9, + EffectNodeBehavior_EffectParticleElementInitColor = 10, + EffectNodeBehavior_EffectParticleElementTransColor = 11, + EffectNodeBehavior_EffectParticleElementAlphaFade = 12, + EffectNodeBehavior_EffectParticleElementSize = 13, + EffectNodeBehavior_EffectParticleElementTransSize = 14, + EffectNodeBehavior_EffectParticlePointGravity = 15, + EffectNodeBehavior_EffectParticleTurnToDirectionEnabled = 16, + EffectNodeBehavior_EffectParticleInfiniteEmitEnabled = 17, + EffectNodeBehavior_MIN = EffectNodeBehavior_NONE, + EffectNodeBehavior_MAX = EffectNodeBehavior_EffectParticleInfiniteEmitEnabled +}; + +inline const EffectNodeBehavior (&EnumValuesEffectNodeBehavior())[18] { + static const EffectNodeBehavior values[] = { + EffectNodeBehavior_NONE, + EffectNodeBehavior_EffectParticleElementBasic, + EffectNodeBehavior_EffectParticleElementRndSeedChange, + EffectNodeBehavior_EffectParticleElementDelay, + EffectNodeBehavior_EffectParticleElementGravity, + EffectNodeBehavior_EffectParticleElementPosition, + EffectNodeBehavior_EffectParticleElementRotation, + EffectNodeBehavior_EffectParticleElementRotationTrans, + EffectNodeBehavior_EffectParticleElementTransSpeed, + EffectNodeBehavior_EffectParticleElementTangentialAcceleration, + EffectNodeBehavior_EffectParticleElementInitColor, + EffectNodeBehavior_EffectParticleElementTransColor, + EffectNodeBehavior_EffectParticleElementAlphaFade, + EffectNodeBehavior_EffectParticleElementSize, + EffectNodeBehavior_EffectParticleElementTransSize, + EffectNodeBehavior_EffectParticlePointGravity, + EffectNodeBehavior_EffectParticleTurnToDirectionEnabled, + EffectNodeBehavior_EffectParticleInfiniteEmitEnabled + }; + return values; +} + +inline const char * const *EnumNamesEffectNodeBehavior() { + static const char * const names[19] = { + "NONE", + "EffectParticleElementBasic", + "EffectParticleElementRndSeedChange", + "EffectParticleElementDelay", + "EffectParticleElementGravity", + "EffectParticleElementPosition", + "EffectParticleElementRotation", + "EffectParticleElementRotationTrans", + "EffectParticleElementTransSpeed", + "EffectParticleElementTangentialAcceleration", + "EffectParticleElementInitColor", + "EffectParticleElementTransColor", + "EffectParticleElementAlphaFade", + "EffectParticleElementSize", + "EffectParticleElementTransSize", + "EffectParticlePointGravity", + "EffectParticleTurnToDirectionEnabled", + "EffectParticleInfiniteEmitEnabled", + nullptr + }; + return names; +} + +inline const char *EnumNameEffectNodeBehavior(EffectNodeBehavior e) { + if (::flatbuffers::IsOutRange(e, EffectNodeBehavior_NONE, EffectNodeBehavior_EffectParticleInfiniteEmitEnabled)) return ""; + const size_t index = static_cast(e); + return EnumNamesEffectNodeBehavior()[index]; +} + +template +bool VerifyEffectNodeBehavior(::flatbuffers::VerifierTemplate &verifier, const void *obj, EffectNodeBehavior type); +template +bool VerifyEffectNodeBehaviorVector(::flatbuffers::VerifierTemplate &verifier, const ::flatbuffers::Vector<::flatbuffers::Offset> *values, const ::flatbuffers::Vector *types); + +enum SignalCommandParamType : uint8_t { + SignalCommandParamType_Bool = 0, + SignalCommandParamType_Index = 1, + SignalCommandParamType_Integer = 2, + SignalCommandParamType_Floating = 3, + SignalCommandParamType_Text = 4, + SignalCommandParamType_None = 5, + SignalCommandParamType_MIN = SignalCommandParamType_Bool, + SignalCommandParamType_MAX = SignalCommandParamType_None +}; + +inline const SignalCommandParamType (&EnumValuesSignalCommandParamType())[6] { + static const SignalCommandParamType values[] = { + SignalCommandParamType_Bool, + SignalCommandParamType_Index, + SignalCommandParamType_Integer, + SignalCommandParamType_Floating, + SignalCommandParamType_Text, + SignalCommandParamType_None + }; + return values; +} + +inline const char * const *EnumNamesSignalCommandParamType() { + static const char * const names[7] = { + "Bool", + "Index", + "Integer", + "Floating", + "Text", + "None", + nullptr + }; + return names; +} + +inline const char *EnumNameSignalCommandParamType(SignalCommandParamType e) { + if (::flatbuffers::IsOutRange(e, SignalCommandParamType_Bool, SignalCommandParamType_None)) return ""; + const size_t index = static_cast(e); + return EnumNamesSignalCommandParamType()[index]; +} + +enum SignalCommandParamValue : uint8_t { + SignalCommandParamValue_NONE = 0, + SignalCommandParamValue_Bool = 1, + SignalCommandParamValue_Index = 2, + SignalCommandParamValue_Integer = 3, + SignalCommandParamValue_Floating = 4, + SignalCommandParamValue_Text = 5, + SignalCommandParamValue_None = 6, + SignalCommandParamValue_MIN = SignalCommandParamValue_NONE, + SignalCommandParamValue_MAX = SignalCommandParamValue_None +}; + +inline const SignalCommandParamValue (&EnumValuesSignalCommandParamValue())[7] { + static const SignalCommandParamValue values[] = { + SignalCommandParamValue_NONE, + SignalCommandParamValue_Bool, + SignalCommandParamValue_Index, + SignalCommandParamValue_Integer, + SignalCommandParamValue_Floating, + SignalCommandParamValue_Text, + SignalCommandParamValue_None + }; + return values; +} + +inline const char * const *EnumNamesSignalCommandParamValue() { + static const char * const names[8] = { + "NONE", + "Bool", + "Index", + "Integer", + "Floating", + "Text", + "None", + nullptr + }; + return names; +} + +inline const char *EnumNameSignalCommandParamValue(SignalCommandParamValue e) { + if (::flatbuffers::IsOutRange(e, SignalCommandParamValue_NONE, SignalCommandParamValue_None)) return ""; + const size_t index = static_cast(e); + return EnumNamesSignalCommandParamValue()[index]; +} + +template +bool VerifySignalCommandParamValue(::flatbuffers::VerifierTemplate &verifier, const void *obj, SignalCommandParamValue type); +template +bool VerifySignalCommandParamValueVector(::flatbuffers::VerifierTemplate &verifier, const ::flatbuffers::Vector<::flatbuffers::Offset> *values, const ::flatbuffers::Vector *types); + +enum PartAttributesUpdateFlags : uint64_t { + PartAttributesUpdateFlags_AttributeCell = 1ULL, + PartAttributesUpdateFlags_AttributePosX = 2ULL, + PartAttributesUpdateFlags_AttributePosY = 4ULL, + PartAttributesUpdateFlags_AttributePosZ = 8ULL, + PartAttributesUpdateFlags_AttributeRotX = 16ULL, + PartAttributesUpdateFlags_AttributeRotY = 32ULL, + PartAttributesUpdateFlags_AttributeRotZ = 64ULL, + PartAttributesUpdateFlags_AttributeSclX = 128ULL, + PartAttributesUpdateFlags_AttributeSclY = 256ULL, + PartAttributesUpdateFlags_AttributeLosclX = 512ULL, + PartAttributesUpdateFlags_AttributeLosclY = 1024ULL, + PartAttributesUpdateFlags_AttributeAlpha = 2048ULL, + PartAttributesUpdateFlags_AttributeLoAlpha = 4096ULL, + PartAttributesUpdateFlags_AttributePrio = 8192ULL, + PartAttributesUpdateFlags_AttributeFlipH = 16384ULL, + PartAttributesUpdateFlags_AttributeFlipV = 32768ULL, + PartAttributesUpdateFlags_AttributeHide = 65536ULL, + PartAttributesUpdateFlags_AttributePartColor = 131072ULL, + PartAttributesUpdateFlags_AttributeShader = 262144ULL, + PartAttributesUpdateFlags_AttributeVertex = 524288ULL, + PartAttributesUpdateFlags_AttributePivotX = 1048576ULL, + PartAttributesUpdateFlags_AttributePivotY = 2097152ULL, + PartAttributesUpdateFlags_AttributeAnchorX = 4194304ULL, + PartAttributesUpdateFlags_AttributeAnchorY = 8388608ULL, + PartAttributesUpdateFlags_AttributeSizeX = 16777216ULL, + PartAttributesUpdateFlags_AttributeSizeY = 33554432ULL, + PartAttributesUpdateFlags_AttributeImgFlipH = 67108864ULL, + PartAttributesUpdateFlags_AttributeImgFlipV = 134217728ULL, + PartAttributesUpdateFlags_AttributeUvtX = 268435456ULL, + PartAttributesUpdateFlags_AttributeUvtY = 536870912ULL, + PartAttributesUpdateFlags_AttributeUvrZ = 1073741824ULL, + PartAttributesUpdateFlags_AttributeUvsX = 2147483648ULL, + PartAttributesUpdateFlags_AttributeUvsY = 4294967296ULL, + PartAttributesUpdateFlags_AttributeBoundr = 8589934592ULL, + PartAttributesUpdateFlags_AttributeMask = 17179869184ULL, + PartAttributesUpdateFlags_AttributeSkew = 34359738368ULL, + PartAttributesUpdateFlags_AttributeDeform = 68719476736ULL, + PartAttributesUpdateFlags_AttributeTexture = 137438953472ULL, + PartAttributesUpdateFlags_NONE = 0, + PartAttributesUpdateFlags_ANY = 274877906943ULL +}; + +inline const PartAttributesUpdateFlags (&EnumValuesPartAttributesUpdateFlags())[38] { + static const PartAttributesUpdateFlags values[] = { + PartAttributesUpdateFlags_AttributeCell, + PartAttributesUpdateFlags_AttributePosX, + PartAttributesUpdateFlags_AttributePosY, + PartAttributesUpdateFlags_AttributePosZ, + PartAttributesUpdateFlags_AttributeRotX, + PartAttributesUpdateFlags_AttributeRotY, + PartAttributesUpdateFlags_AttributeRotZ, + PartAttributesUpdateFlags_AttributeSclX, + PartAttributesUpdateFlags_AttributeSclY, + PartAttributesUpdateFlags_AttributeLosclX, + PartAttributesUpdateFlags_AttributeLosclY, + PartAttributesUpdateFlags_AttributeAlpha, + PartAttributesUpdateFlags_AttributeLoAlpha, + PartAttributesUpdateFlags_AttributePrio, + PartAttributesUpdateFlags_AttributeFlipH, + PartAttributesUpdateFlags_AttributeFlipV, + PartAttributesUpdateFlags_AttributeHide, + PartAttributesUpdateFlags_AttributePartColor, + PartAttributesUpdateFlags_AttributeShader, + PartAttributesUpdateFlags_AttributeVertex, + PartAttributesUpdateFlags_AttributePivotX, + PartAttributesUpdateFlags_AttributePivotY, + PartAttributesUpdateFlags_AttributeAnchorX, + PartAttributesUpdateFlags_AttributeAnchorY, + PartAttributesUpdateFlags_AttributeSizeX, + PartAttributesUpdateFlags_AttributeSizeY, + PartAttributesUpdateFlags_AttributeImgFlipH, + PartAttributesUpdateFlags_AttributeImgFlipV, + PartAttributesUpdateFlags_AttributeUvtX, + PartAttributesUpdateFlags_AttributeUvtY, + PartAttributesUpdateFlags_AttributeUvrZ, + PartAttributesUpdateFlags_AttributeUvsX, + PartAttributesUpdateFlags_AttributeUvsY, + PartAttributesUpdateFlags_AttributeBoundr, + PartAttributesUpdateFlags_AttributeMask, + PartAttributesUpdateFlags_AttributeSkew, + PartAttributesUpdateFlags_AttributeDeform, + PartAttributesUpdateFlags_AttributeTexture + }; + return values; +} + +inline const char *EnumNamePartAttributesUpdateFlags(PartAttributesUpdateFlags e) { + switch (e) { + case PartAttributesUpdateFlags_AttributeCell: return "AttributeCell"; + case PartAttributesUpdateFlags_AttributePosX: return "AttributePosX"; + case PartAttributesUpdateFlags_AttributePosY: return "AttributePosY"; + case PartAttributesUpdateFlags_AttributePosZ: return "AttributePosZ"; + case PartAttributesUpdateFlags_AttributeRotX: return "AttributeRotX"; + case PartAttributesUpdateFlags_AttributeRotY: return "AttributeRotY"; + case PartAttributesUpdateFlags_AttributeRotZ: return "AttributeRotZ"; + case PartAttributesUpdateFlags_AttributeSclX: return "AttributeSclX"; + case PartAttributesUpdateFlags_AttributeSclY: return "AttributeSclY"; + case PartAttributesUpdateFlags_AttributeLosclX: return "AttributeLosclX"; + case PartAttributesUpdateFlags_AttributeLosclY: return "AttributeLosclY"; + case PartAttributesUpdateFlags_AttributeAlpha: return "AttributeAlpha"; + case PartAttributesUpdateFlags_AttributeLoAlpha: return "AttributeLoAlpha"; + case PartAttributesUpdateFlags_AttributePrio: return "AttributePrio"; + case PartAttributesUpdateFlags_AttributeFlipH: return "AttributeFlipH"; + case PartAttributesUpdateFlags_AttributeFlipV: return "AttributeFlipV"; + case PartAttributesUpdateFlags_AttributeHide: return "AttributeHide"; + case PartAttributesUpdateFlags_AttributePartColor: return "AttributePartColor"; + case PartAttributesUpdateFlags_AttributeShader: return "AttributeShader"; + case PartAttributesUpdateFlags_AttributeVertex: return "AttributeVertex"; + case PartAttributesUpdateFlags_AttributePivotX: return "AttributePivotX"; + case PartAttributesUpdateFlags_AttributePivotY: return "AttributePivotY"; + case PartAttributesUpdateFlags_AttributeAnchorX: return "AttributeAnchorX"; + case PartAttributesUpdateFlags_AttributeAnchorY: return "AttributeAnchorY"; + case PartAttributesUpdateFlags_AttributeSizeX: return "AttributeSizeX"; + case PartAttributesUpdateFlags_AttributeSizeY: return "AttributeSizeY"; + case PartAttributesUpdateFlags_AttributeImgFlipH: return "AttributeImgFlipH"; + case PartAttributesUpdateFlags_AttributeImgFlipV: return "AttributeImgFlipV"; + case PartAttributesUpdateFlags_AttributeUvtX: return "AttributeUvtX"; + case PartAttributesUpdateFlags_AttributeUvtY: return "AttributeUvtY"; + case PartAttributesUpdateFlags_AttributeUvrZ: return "AttributeUvrZ"; + case PartAttributesUpdateFlags_AttributeUvsX: return "AttributeUvsX"; + case PartAttributesUpdateFlags_AttributeUvsY: return "AttributeUvsY"; + case PartAttributesUpdateFlags_AttributeBoundr: return "AttributeBoundr"; + case PartAttributesUpdateFlags_AttributeMask: return "AttributeMask"; + case PartAttributesUpdateFlags_AttributeSkew: return "AttributeSkew"; + case PartAttributesUpdateFlags_AttributeDeform: return "AttributeDeform"; + case PartAttributesUpdateFlags_AttributeTexture: return "AttributeTexture"; + default: return ""; + } +} + +enum ShapeType : uint8_t { + ShapeType_Unknown = 0, + ShapeType_Triangle = 1, + ShapeType_Rectangle = 2, + ShapeType_Arrow = 3, + ShapeType_Star = 4, + ShapeType_MIN = ShapeType_Unknown, + ShapeType_MAX = ShapeType_Star +}; + +inline const ShapeType (&EnumValuesShapeType())[5] { + static const ShapeType values[] = { + ShapeType_Unknown, + ShapeType_Triangle, + ShapeType_Rectangle, + ShapeType_Arrow, + ShapeType_Star + }; + return values; +} + +inline const char * const *EnumNamesShapeType() { + static const char * const names[6] = { + "Unknown", + "Triangle", + "Rectangle", + "Arrow", + "Star", + nullptr + }; + return names; +} + +inline const char *EnumNameShapeType(ShapeType e) { + if (::flatbuffers::IsOutRange(e, ShapeType_Unknown, ShapeType_Star)) return ""; + const size_t index = static_cast(e); + return EnumNamesShapeType()[index]; +} + +enum TextAnchor : uint8_t { + TextAnchor_LT = 0, + TextAnchor_LC = 1, + TextAnchor_LB = 2, + TextAnchor_CT = 16, + TextAnchor_CC = 17, + TextAnchor_CB = 18, + TextAnchor_RT = 32, + TextAnchor_RC = 33, + TextAnchor_RB = 34, + TextAnchor_NO = 255, + TextAnchor_MIN = TextAnchor_LT, + TextAnchor_MAX = TextAnchor_NO +}; + +inline const TextAnchor (&EnumValuesTextAnchor())[10] { + static const TextAnchor values[] = { + TextAnchor_LT, + TextAnchor_LC, + TextAnchor_LB, + TextAnchor_CT, + TextAnchor_CC, + TextAnchor_CB, + TextAnchor_RT, + TextAnchor_RC, + TextAnchor_RB, + TextAnchor_NO + }; + return values; +} + +inline const char *EnumNameTextAnchor(TextAnchor e) { + switch (e) { + case TextAnchor_LT: return "LT"; + case TextAnchor_LC: return "LC"; + case TextAnchor_LB: return "LB"; + case TextAnchor_CT: return "CT"; + case TextAnchor_CC: return "CC"; + case TextAnchor_CB: return "CB"; + case TextAnchor_RT: return "RT"; + case TextAnchor_RC: return "RC"; + case TextAnchor_RB: return "RB"; + case TextAnchor_NO: return "NO"; + default: return ""; + } +} + +enum PartType : uint8_t { + PartType_NONE = 0, + PartType_PartTypeNull = 1, + PartType_PartTypeNormal = 2, + PartType_PartTypeShape = 3, + PartType_PartTypeText = 4, + PartType_PartTypeNines = 5, + PartType_PartTypeInstance = 6, + PartType_PartTypeArmature = 7, + PartType_PartTypeEffect = 8, + PartType_PartTypeMesh = 9, + PartType_PartTypeMovenode = 10, + PartType_PartTypeConstraint = 11, + PartType_PartTypeMask = 12, + PartType_PartTypeJoint = 13, + PartType_PartTypeBonepoint = 14, + PartType_PartTypeTransformConstraint = 15, + PartType_PartTypeCamera = 16, + PartType_PartTypeAudio = 17, + PartType_MIN = PartType_NONE, + PartType_MAX = PartType_PartTypeAudio +}; + +inline const PartType (&EnumValuesPartType())[18] { + static const PartType values[] = { + PartType_NONE, + PartType_PartTypeNull, + PartType_PartTypeNormal, + PartType_PartTypeShape, + PartType_PartTypeText, + PartType_PartTypeNines, + PartType_PartTypeInstance, + PartType_PartTypeArmature, + PartType_PartTypeEffect, + PartType_PartTypeMesh, + PartType_PartTypeMovenode, + PartType_PartTypeConstraint, + PartType_PartTypeMask, + PartType_PartTypeJoint, + PartType_PartTypeBonepoint, + PartType_PartTypeTransformConstraint, + PartType_PartTypeCamera, + PartType_PartTypeAudio + }; + return values; +} + +inline const char * const *EnumNamesPartType() { + static const char * const names[19] = { + "NONE", + "PartTypeNull", + "PartTypeNormal", + "PartTypeShape", + "PartTypeText", + "PartTypeNines", + "PartTypeInstance", + "PartTypeArmature", + "PartTypeEffect", + "PartTypeMesh", + "PartTypeMovenode", + "PartTypeConstraint", + "PartTypeMask", + "PartTypeJoint", + "PartTypeBonepoint", + "PartTypeTransformConstraint", + "PartTypeCamera", + "PartTypeAudio", + nullptr + }; + return names; +} + +inline const char *EnumNamePartType(PartType e) { + if (::flatbuffers::IsOutRange(e, PartType_NONE, PartType_PartTypeAudio)) return ""; + const size_t index = static_cast(e); + return EnumNamesPartType()[index]; +} + +template +bool VerifyPartType(::flatbuffers::VerifierTemplate &verifier, const void *obj, PartType type); +template +bool VerifyPartTypeVector(::flatbuffers::VerifierTemplate &verifier, const ::flatbuffers::Vector<::flatbuffers::Offset> *values, const ::flatbuffers::Vector *types); + +struct Vec2 FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef Vec2Builder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_V1 = 4, + VT_V2 = 6 + }; + float v1() const { + return GetField(VT_V1, 0.0f); + } + float v2() const { + return GetField(VT_V2, 0.0f); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_V1, 4) && + VerifyField(verifier, VT_V2, 4) && + verifier.EndTable(); + } +}; + +struct Vec2Builder { + typedef Vec2 Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_v1(float v1) { + fbb_.AddElement(Vec2::VT_V1, v1, 0.0f); + } + void add_v2(float v2) { + fbb_.AddElement(Vec2::VT_V2, v2, 0.0f); + } + explicit Vec2Builder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateVec2( + ::flatbuffers::FlatBufferBuilder &_fbb, + float v1 = 0.0f, + float v2 = 0.0f) { + Vec2Builder builder_(_fbb); + builder_.add_v2(v2); + builder_.add_v1(v1); + return builder_.Finish(); +} + +struct Rect FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef RectBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_X1 = 4, + VT_Y1 = 6, + VT_X2 = 8, + VT_Y2 = 10 + }; + float x1() const { + return GetField(VT_X1, 0.0f); + } + float y1() const { + return GetField(VT_Y1, 0.0f); + } + float x2() const { + return GetField(VT_X2, 0.0f); + } + float y2() const { + return GetField(VT_Y2, 0.0f); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_X1, 4) && + VerifyField(verifier, VT_Y1, 4) && + VerifyField(verifier, VT_X2, 4) && + VerifyField(verifier, VT_Y2, 4) && + verifier.EndTable(); + } +}; + +struct RectBuilder { + typedef Rect Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_x1(float x1) { + fbb_.AddElement(Rect::VT_X1, x1, 0.0f); + } + void add_y1(float y1) { + fbb_.AddElement(Rect::VT_Y1, y1, 0.0f); + } + void add_x2(float x2) { + fbb_.AddElement(Rect::VT_X2, x2, 0.0f); + } + void add_y2(float y2) { + fbb_.AddElement(Rect::VT_Y2, y2, 0.0f); + } + explicit RectBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateRect( + ::flatbuffers::FlatBufferBuilder &_fbb, + float x1 = 0.0f, + float y1 = 0.0f, + float x2 = 0.0f, + float y2 = 0.0f) { + RectBuilder builder_(_fbb); + builder_.add_y2(y2); + builder_.add_x2(x2); + builder_.add_y1(y1); + builder_.add_x1(x1); + return builder_.Finish(); +} + +struct U8Rect FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef U8RectBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_A = 4, + VT_R = 6, + VT_G = 8, + VT_B = 10 + }; + uint8_t a() const { + return GetField(VT_A, 0); + } + uint8_t r() const { + return GetField(VT_R, 0); + } + uint8_t g() const { + return GetField(VT_G, 0); + } + uint8_t b() const { + return GetField(VT_B, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_A, 1) && + VerifyField(verifier, VT_R, 1) && + VerifyField(verifier, VT_G, 1) && + VerifyField(verifier, VT_B, 1) && + verifier.EndTable(); + } +}; + +struct U8RectBuilder { + typedef U8Rect Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_a(uint8_t a) { + fbb_.AddElement(U8Rect::VT_A, a, 0); + } + void add_r(uint8_t r) { + fbb_.AddElement(U8Rect::VT_R, r, 0); + } + void add_g(uint8_t g) { + fbb_.AddElement(U8Rect::VT_G, g, 0); + } + void add_b(uint8_t b) { + fbb_.AddElement(U8Rect::VT_B, b, 0); + } + explicit U8RectBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateU8Rect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint8_t a = 0, + uint8_t r = 0, + uint8_t g = 0, + uint8_t b = 0) { + U8RectBuilder builder_(_fbb); + builder_.add_b(b); + builder_.add_g(g); + builder_.add_r(r); + builder_.add_a(a); + return builder_.Finish(); +} + +struct NoneValueEntry FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef NoneValueEntryBuilder Builder; + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + verifier.EndTable(); + } +}; + +struct NoneValueEntryBuilder { + typedef NoneValueEntry Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + explicit NoneValueEntryBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateNoneValueEntry( + ::flatbuffers::FlatBufferBuilder &_fbb) { + NoneValueEntryBuilder builder_(_fbb); + return builder_.Finish(); +} + +struct BoolValueEntry FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef BoolValueEntryBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_VALUE = 4 + }; + bool value() const { + return GetField(VT_VALUE, 0) != 0; + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_VALUE, 1) && + verifier.EndTable(); + } +}; + +struct BoolValueEntryBuilder { + typedef BoolValueEntry Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_value(bool value) { + fbb_.AddElement(BoolValueEntry::VT_VALUE, static_cast(value), 0); + } + explicit BoolValueEntryBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateBoolValueEntry( + ::flatbuffers::FlatBufferBuilder &_fbb, + bool value = false) { + BoolValueEntryBuilder builder_(_fbb); + builder_.add_value(value); + return builder_.Finish(); +} + +struct IntValueEntry FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef IntValueEntryBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_VALUE = 4 + }; + int32_t value() const { + return GetField(VT_VALUE, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_VALUE, 4) && + verifier.EndTable(); + } +}; + +struct IntValueEntryBuilder { + typedef IntValueEntry Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_value(int32_t value) { + fbb_.AddElement(IntValueEntry::VT_VALUE, value, 0); + } + explicit IntValueEntryBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateIntValueEntry( + ::flatbuffers::FlatBufferBuilder &_fbb, + int32_t value = 0) { + IntValueEntryBuilder builder_(_fbb); + builder_.add_value(value); + return builder_.Finish(); +} + +struct FloatValueEntry FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef FloatValueEntryBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_VALUE = 4 + }; + float value() const { + return GetField(VT_VALUE, 0.0f); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_VALUE, 4) && + verifier.EndTable(); + } +}; + +struct FloatValueEntryBuilder { + typedef FloatValueEntry Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_value(float value) { + fbb_.AddElement(FloatValueEntry::VT_VALUE, value, 0.0f); + } + explicit FloatValueEntryBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateFloatValueEntry( + ::flatbuffers::FlatBufferBuilder &_fbb, + float value = 0.0f) { + FloatValueEntryBuilder builder_(_fbb); + builder_.add_value(value); + return builder_.Finish(); +} + +struct StringValueEntry FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef StringValueEntryBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_VALUE = 4 + }; + const ::flatbuffers::String *value() const { + return GetPointer(VT_VALUE); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_VALUE) && + verifier.VerifyString(value()) && + verifier.EndTable(); + } +}; + +struct StringValueEntryBuilder { + typedef StringValueEntry Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_value(::flatbuffers::Offset<::flatbuffers::String> value) { + fbb_.AddOffset(StringValueEntry::VT_VALUE, value); + } + explicit StringValueEntryBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateStringValueEntry( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset<::flatbuffers::String> value = 0) { + StringValueEntryBuilder builder_(_fbb); + builder_.add_value(value); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateStringValueEntryDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + const char *value = nullptr) { + auto value__ = value ? _fbb.CreateString(value) : 0; + return ss::format::CreateStringValueEntry( + _fbb, + value__); +} + +struct Vec2ValueEntry FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef Vec2ValueEntryBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_VALUE = 4 + }; + const ss::format::Vec2 *value() const { + return GetPointer(VT_VALUE); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_VALUE) && + verifier.VerifyTable(value()) && + verifier.EndTable(); + } +}; + +struct Vec2ValueEntryBuilder { + typedef Vec2ValueEntry Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_value(::flatbuffers::Offset value) { + fbb_.AddOffset(Vec2ValueEntry::VT_VALUE, value); + } + explicit Vec2ValueEntryBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateVec2ValueEntry( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset value = 0) { + Vec2ValueEntryBuilder builder_(_fbb); + builder_.add_value(value); + return builder_.Finish(); +} + +struct RectValueEntry FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef RectValueEntryBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_VALUE = 4 + }; + const ss::format::Rect *value() const { + return GetPointer(VT_VALUE); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_VALUE) && + verifier.VerifyTable(value()) && + verifier.EndTable(); + } +}; + +struct RectValueEntryBuilder { + typedef RectValueEntry Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_value(::flatbuffers::Offset value) { + fbb_.AddOffset(RectValueEntry::VT_VALUE, value); + } + explicit RectValueEntryBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateRectValueEntry( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset value = 0) { + RectValueEntryBuilder builder_(_fbb); + builder_.add_value(value); + return builder_.Finish(); +} + +struct EventUserData FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EventUserDataBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_PART_INDEX = 4, + VT_VALUE = 6 + }; + uint16_t part_index() const { + return GetField(VT_PART_INDEX, 0); + } + bool KeyCompareLessThan(const EventUserData * const o) const { + return part_index() < o->part_index(); + } + int KeyCompareWithValue(uint16_t _part_index) const { + return static_cast(part_index() > _part_index) - static_cast(part_index() < _part_index); + } + const ss::format::PartAttributeUserData *value() const { + return GetPointer(VT_VALUE); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_PART_INDEX, 2) && + VerifyOffset(verifier, VT_VALUE) && + verifier.VerifyTable(value()) && + verifier.EndTable(); + } +}; + +struct EventUserDataBuilder { + typedef EventUserData Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_part_index(uint16_t part_index) { + fbb_.AddElement(EventUserData::VT_PART_INDEX, part_index, 0); + } + void add_value(::flatbuffers::Offset value) { + fbb_.AddOffset(EventUserData::VT_VALUE, value); + } + explicit EventUserDataBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEventUserData( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint16_t part_index = 0, + ::flatbuffers::Offset value = 0) { + EventUserDataBuilder builder_(_fbb); + builder_.add_value(value); + builder_.add_part_index(part_index); + return builder_.Finish(); +} + +struct EventSignal FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EventSignalBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_PART_INDEX = 4, + VT_VALUE = 6 + }; + uint16_t part_index() const { + return GetField(VT_PART_INDEX, 0); + } + bool KeyCompareLessThan(const EventSignal * const o) const { + return part_index() < o->part_index(); + } + int KeyCompareWithValue(uint16_t _part_index) const { + return static_cast(part_index() > _part_index) - static_cast(part_index() < _part_index); + } + const ss::format::PartAttributeSignal *value() const { + return GetPointer(VT_VALUE); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_PART_INDEX, 2) && + VerifyOffset(verifier, VT_VALUE) && + verifier.VerifyTable(value()) && + verifier.EndTable(); + } +}; + +struct EventSignalBuilder { + typedef EventSignal Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_part_index(uint16_t part_index) { + fbb_.AddElement(EventSignal::VT_PART_INDEX, part_index, 0); + } + void add_value(::flatbuffers::Offset value) { + fbb_.AddOffset(EventSignal::VT_VALUE, value); + } + explicit EventSignalBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEventSignal( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint16_t part_index = 0, + ::flatbuffers::Offset value = 0) { + EventSignalBuilder builder_(_fbb); + builder_.add_value(value); + builder_.add_part_index(part_index); + return builder_.Finish(); +} + +struct EventAudio FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EventAudioBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_PART_INDEX = 4, + VT_VALUE = 6 + }; + uint16_t part_index() const { + return GetField(VT_PART_INDEX, 0); + } + bool KeyCompareLessThan(const EventAudio * const o) const { + return part_index() < o->part_index(); + } + int KeyCompareWithValue(uint16_t _part_index) const { + return static_cast(part_index() > _part_index) - static_cast(part_index() < _part_index); + } + const ss::format::PartAttributeAudio *value() const { + return GetPointer(VT_VALUE); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_PART_INDEX, 2) && + VerifyOffset(verifier, VT_VALUE) && + verifier.VerifyTable(value()) && + verifier.EndTable(); + } +}; + +struct EventAudioBuilder { + typedef EventAudio Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_part_index(uint16_t part_index) { + fbb_.AddElement(EventAudio::VT_PART_INDEX, part_index, 0); + } + void add_value(::flatbuffers::Offset value) { + fbb_.AddOffset(EventAudio::VT_VALUE, value); + } + explicit EventAudioBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEventAudio( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint16_t part_index = 0, + ::flatbuffers::Offset value = 0) { + EventAudioBuilder builder_(_fbb); + builder_.add_value(value); + builder_.add_part_index(part_index); + return builder_.Finish(); +} + +struct EventInstance FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EventInstanceBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_PART_INDEX = 4, + VT_VALUE = 6 + }; + uint16_t part_index() const { + return GetField(VT_PART_INDEX, 0); + } + bool KeyCompareLessThan(const EventInstance * const o) const { + return part_index() < o->part_index(); + } + int KeyCompareWithValue(uint16_t _part_index) const { + return static_cast(part_index() > _part_index) - static_cast(part_index() < _part_index); + } + const ss::format::PartAttributeInstance *value() const { + return GetPointer(VT_VALUE); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_PART_INDEX, 2) && + VerifyOffset(verifier, VT_VALUE) && + verifier.VerifyTable(value()) && + verifier.EndTable(); + } +}; + +struct EventInstanceBuilder { + typedef EventInstance Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_part_index(uint16_t part_index) { + fbb_.AddElement(EventInstance::VT_PART_INDEX, part_index, 0); + } + void add_value(::flatbuffers::Offset value) { + fbb_.AddOffset(EventInstance::VT_VALUE, value); + } + explicit EventInstanceBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEventInstance( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint16_t part_index = 0, + ::flatbuffers::Offset value = 0) { + EventInstanceBuilder builder_(_fbb); + builder_.add_value(value); + builder_.add_part_index(part_index); + return builder_.Finish(); +} + +struct EventEffect FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EventEffectBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_PART_INDEX = 4, + VT_VALUE = 6 + }; + uint16_t part_index() const { + return GetField(VT_PART_INDEX, 0); + } + bool KeyCompareLessThan(const EventEffect * const o) const { + return part_index() < o->part_index(); + } + int KeyCompareWithValue(uint16_t _part_index) const { + return static_cast(part_index() > _part_index) - static_cast(part_index() < _part_index); + } + const ss::format::PartAttributeEffect *value() const { + return GetPointer(VT_VALUE); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_PART_INDEX, 2) && + VerifyOffset(verifier, VT_VALUE) && + verifier.VerifyTable(value()) && + verifier.EndTable(); + } +}; + +struct EventEffectBuilder { + typedef EventEffect Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_part_index(uint16_t part_index) { + fbb_.AddElement(EventEffect::VT_PART_INDEX, part_index, 0); + } + void add_value(::flatbuffers::Offset value) { + fbb_.AddOffset(EventEffect::VT_VALUE, value); + } + explicit EventEffectBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEventEffect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint16_t part_index = 0, + ::flatbuffers::Offset value = 0) { + EventEffectBuilder builder_(_fbb); + builder_.add_value(value); + builder_.add_part_index(part_index); + return builder_.Finish(); +} + +struct EventsPerFrame FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EventsPerFrameBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_FRAME_INDEX = 4, + VT_USERS = 6, + VT_SIGNALS = 8, + VT_AUDIOS = 10, + VT_INSTANCES = 12, + VT_EFFECTS = 14 + }; + uint16_t frame_index() const { + return GetField(VT_FRAME_INDEX, 0); + } + bool KeyCompareLessThan(const EventsPerFrame * const o) const { + return frame_index() < o->frame_index(); + } + int KeyCompareWithValue(uint16_t _frame_index) const { + return static_cast(frame_index() > _frame_index) - static_cast(frame_index() < _frame_index); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *users() const { + return GetPointer> *>(VT_USERS); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *signals() const { + return GetPointer> *>(VT_SIGNALS); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *audios() const { + return GetPointer> *>(VT_AUDIOS); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *instances() const { + return GetPointer> *>(VT_INSTANCES); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *effects() const { + return GetPointer> *>(VT_EFFECTS); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_FRAME_INDEX, 2) && + VerifyOffset(verifier, VT_USERS) && + verifier.VerifyVector(users()) && + verifier.VerifyVectorOfTables(users()) && + VerifyOffset(verifier, VT_SIGNALS) && + verifier.VerifyVector(signals()) && + verifier.VerifyVectorOfTables(signals()) && + VerifyOffset(verifier, VT_AUDIOS) && + verifier.VerifyVector(audios()) && + verifier.VerifyVectorOfTables(audios()) && + VerifyOffset(verifier, VT_INSTANCES) && + verifier.VerifyVector(instances()) && + verifier.VerifyVectorOfTables(instances()) && + VerifyOffset(verifier, VT_EFFECTS) && + verifier.VerifyVector(effects()) && + verifier.VerifyVectorOfTables(effects()) && + verifier.EndTable(); + } +}; + +struct EventsPerFrameBuilder { + typedef EventsPerFrame Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_frame_index(uint16_t frame_index) { + fbb_.AddElement(EventsPerFrame::VT_FRAME_INDEX, frame_index, 0); + } + void add_users(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> users) { + fbb_.AddOffset(EventsPerFrame::VT_USERS, users); + } + void add_signals(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> signals) { + fbb_.AddOffset(EventsPerFrame::VT_SIGNALS, signals); + } + void add_audios(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> audios) { + fbb_.AddOffset(EventsPerFrame::VT_AUDIOS, audios); + } + void add_instances(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> instances) { + fbb_.AddOffset(EventsPerFrame::VT_INSTANCES, instances); + } + void add_effects(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> effects) { + fbb_.AddOffset(EventsPerFrame::VT_EFFECTS, effects); + } + explicit EventsPerFrameBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEventsPerFrame( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint16_t frame_index = 0, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> users = 0, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> signals = 0, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> audios = 0, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> instances = 0, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> effects = 0) { + EventsPerFrameBuilder builder_(_fbb); + builder_.add_effects(effects); + builder_.add_instances(instances); + builder_.add_audios(audios); + builder_.add_signals(signals); + builder_.add_users(users); + builder_.add_frame_index(frame_index); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateEventsPerFrameDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint16_t frame_index = 0, + std::vector<::flatbuffers::Offset> *users = nullptr, + std::vector<::flatbuffers::Offset> *signals = nullptr, + std::vector<::flatbuffers::Offset> *audios = nullptr, + std::vector<::flatbuffers::Offset> *instances = nullptr, + std::vector<::flatbuffers::Offset> *effects = nullptr) { + auto users__ = users ? _fbb.CreateVectorOfSortedTables(users) : 0; + auto signals__ = signals ? _fbb.CreateVectorOfSortedTables(signals) : 0; + auto audios__ = audios ? _fbb.CreateVectorOfSortedTables(audios) : 0; + auto instances__ = instances ? _fbb.CreateVectorOfSortedTables(instances) : 0; + auto effects__ = effects ? _fbb.CreateVectorOfSortedTables(effects) : 0; + return ss::format::CreateEventsPerFrame( + _fbb, + frame_index, + users__, + signals__, + audios__, + instances__, + effects__); +} + +struct Cell FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef CellBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_NAME_HASH = 4, + VT_NAME = 6, + VT_RECTANGLE = 8, + VT_PIVOT = 10, + VT_ROTATED = 12, + VT_TABLE_COORDINATE = 14, + VT_TABLE_INDEX_VERTEX = 16 + }; + uint32_t name_hash() const { + return GetField(VT_NAME_HASH, 0); + } + bool KeyCompareLessThan(const Cell * const o) const { + return name_hash() < o->name_hash(); + } + int KeyCompareWithValue(uint32_t _name_hash) const { + return static_cast(name_hash() > _name_hash) - static_cast(name_hash() < _name_hash); + } + const ::flatbuffers::String *name() const { + return GetPointer(VT_NAME); + } + const ss::format::Rect *rectangle() const { + return GetPointer(VT_RECTANGLE); + } + const ss::format::Vec2 *pivot() const { + return GetPointer(VT_PIVOT); + } + bool rotated() const { + return GetField(VT_ROTATED, 0) != 0; + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *table_coordinate() const { + return GetPointer> *>(VT_TABLE_COORDINATE); + } + const ::flatbuffers::Vector *table_index_vertex() const { + return GetPointer *>(VT_TABLE_INDEX_VERTEX); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_NAME_HASH, 4) && + VerifyOffset(verifier, VT_NAME) && + verifier.VerifyString(name()) && + VerifyOffset(verifier, VT_RECTANGLE) && + verifier.VerifyTable(rectangle()) && + VerifyOffset(verifier, VT_PIVOT) && + verifier.VerifyTable(pivot()) && + VerifyField(verifier, VT_ROTATED, 1) && + VerifyOffset(verifier, VT_TABLE_COORDINATE) && + verifier.VerifyVector(table_coordinate()) && + verifier.VerifyVectorOfTables(table_coordinate()) && + VerifyOffset(verifier, VT_TABLE_INDEX_VERTEX) && + verifier.VerifyVector(table_index_vertex()) && + verifier.EndTable(); + } +}; + +struct CellBuilder { + typedef Cell Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_name_hash(uint32_t name_hash) { + fbb_.AddElement(Cell::VT_NAME_HASH, name_hash, 0); + } + void add_name(::flatbuffers::Offset<::flatbuffers::String> name) { + fbb_.AddOffset(Cell::VT_NAME, name); + } + void add_rectangle(::flatbuffers::Offset rectangle) { + fbb_.AddOffset(Cell::VT_RECTANGLE, rectangle); + } + void add_pivot(::flatbuffers::Offset pivot) { + fbb_.AddOffset(Cell::VT_PIVOT, pivot); + } + void add_rotated(bool rotated) { + fbb_.AddElement(Cell::VT_ROTATED, static_cast(rotated), 0); + } + void add_table_coordinate(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> table_coordinate) { + fbb_.AddOffset(Cell::VT_TABLE_COORDINATE, table_coordinate); + } + void add_table_index_vertex(::flatbuffers::Offset<::flatbuffers::Vector> table_index_vertex) { + fbb_.AddOffset(Cell::VT_TABLE_INDEX_VERTEX, table_index_vertex); + } + explicit CellBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateCell( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + ::flatbuffers::Offset<::flatbuffers::String> name = 0, + ::flatbuffers::Offset rectangle = 0, + ::flatbuffers::Offset pivot = 0, + bool rotated = false, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> table_coordinate = 0, + ::flatbuffers::Offset<::flatbuffers::Vector> table_index_vertex = 0) { + CellBuilder builder_(_fbb); + builder_.add_table_index_vertex(table_index_vertex); + builder_.add_table_coordinate(table_coordinate); + builder_.add_pivot(pivot); + builder_.add_rectangle(rectangle); + builder_.add_name(name); + builder_.add_name_hash(name_hash); + builder_.add_rotated(rotated); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateCellDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + const char *name = nullptr, + ::flatbuffers::Offset rectangle = 0, + ::flatbuffers::Offset pivot = 0, + bool rotated = false, + const std::vector<::flatbuffers::Offset> *table_coordinate = nullptr, + const std::vector *table_index_vertex = nullptr) { + auto name__ = name ? _fbb.CreateString(name) : 0; + auto table_coordinate__ = table_coordinate ? _fbb.CreateVector<::flatbuffers::Offset>(*table_coordinate) : 0; + auto table_index_vertex__ = table_index_vertex ? _fbb.CreateVector(*table_index_vertex) : 0; + return ss::format::CreateCell( + _fbb, + name_hash, + name__, + rectangle, + pivot, + rotated, + table_coordinate__, + table_index_vertex__); +} + +struct CellMap FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef CellMapBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_NAME_HASH = 4, + VT_NAME = 6, + VT_IMAGE_PATH = 8, + VT_IMAGE_PATH_HASH = 10, + VT_SIZE_ORIGINAL = 12, + VT_WRAP_MODE = 14, + VT_FILTER_MODE = 16, + VT_CELLS = 18 + }; + uint32_t name_hash() const { + return GetField(VT_NAME_HASH, 0); + } + bool KeyCompareLessThan(const CellMap * const o) const { + return name_hash() < o->name_hash(); + } + int KeyCompareWithValue(uint32_t _name_hash) const { + return static_cast(name_hash() > _name_hash) - static_cast(name_hash() < _name_hash); + } + const ::flatbuffers::String *name() const { + return GetPointer(VT_NAME); + } + const ::flatbuffers::String *image_path() const { + return GetPointer(VT_IMAGE_PATH); + } + uint32_t image_path_hash() const { + return GetField(VT_IMAGE_PATH_HASH, 0); + } + const ss::format::Vec2 *size_original() const { + return GetPointer(VT_SIZE_ORIGINAL); + } + ss::format::TexWrapMode wrap_mode() const { + return static_cast(GetField(VT_WRAP_MODE, 0)); + } + ss::format::TexFilterMode filter_mode() const { + return static_cast(GetField(VT_FILTER_MODE, 0)); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *cells() const { + return GetPointer> *>(VT_CELLS); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_NAME_HASH, 4) && + VerifyOffset(verifier, VT_NAME) && + verifier.VerifyString(name()) && + VerifyOffset(verifier, VT_IMAGE_PATH) && + verifier.VerifyString(image_path()) && + VerifyField(verifier, VT_IMAGE_PATH_HASH, 4) && + VerifyOffset(verifier, VT_SIZE_ORIGINAL) && + verifier.VerifyTable(size_original()) && + VerifyField(verifier, VT_WRAP_MODE, 1) && + VerifyField(verifier, VT_FILTER_MODE, 1) && + VerifyOffset(verifier, VT_CELLS) && + verifier.VerifyVector(cells()) && + verifier.VerifyVectorOfTables(cells()) && + verifier.EndTable(); + } +}; + +struct CellMapBuilder { + typedef CellMap Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_name_hash(uint32_t name_hash) { + fbb_.AddElement(CellMap::VT_NAME_HASH, name_hash, 0); + } + void add_name(::flatbuffers::Offset<::flatbuffers::String> name) { + fbb_.AddOffset(CellMap::VT_NAME, name); + } + void add_image_path(::flatbuffers::Offset<::flatbuffers::String> image_path) { + fbb_.AddOffset(CellMap::VT_IMAGE_PATH, image_path); + } + void add_image_path_hash(uint32_t image_path_hash) { + fbb_.AddElement(CellMap::VT_IMAGE_PATH_HASH, image_path_hash, 0); + } + void add_size_original(::flatbuffers::Offset size_original) { + fbb_.AddOffset(CellMap::VT_SIZE_ORIGINAL, size_original); + } + void add_wrap_mode(ss::format::TexWrapMode wrap_mode) { + fbb_.AddElement(CellMap::VT_WRAP_MODE, static_cast(wrap_mode), 0); + } + void add_filter_mode(ss::format::TexFilterMode filter_mode) { + fbb_.AddElement(CellMap::VT_FILTER_MODE, static_cast(filter_mode), 0); + } + void add_cells(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> cells) { + fbb_.AddOffset(CellMap::VT_CELLS, cells); + } + explicit CellMapBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateCellMap( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + ::flatbuffers::Offset<::flatbuffers::String> name = 0, + ::flatbuffers::Offset<::flatbuffers::String> image_path = 0, + uint32_t image_path_hash = 0, + ::flatbuffers::Offset size_original = 0, + ss::format::TexWrapMode wrap_mode = ss::format::TexWrapMode_Clamp, + ss::format::TexFilterMode filter_mode = ss::format::TexFilterMode_Nearest, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> cells = 0) { + CellMapBuilder builder_(_fbb); + builder_.add_cells(cells); + builder_.add_size_original(size_original); + builder_.add_image_path_hash(image_path_hash); + builder_.add_image_path(image_path); + builder_.add_name(name); + builder_.add_name_hash(name_hash); + builder_.add_filter_mode(filter_mode); + builder_.add_wrap_mode(wrap_mode); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateCellMapDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + const char *name = nullptr, + const char *image_path = nullptr, + uint32_t image_path_hash = 0, + ::flatbuffers::Offset size_original = 0, + ss::format::TexWrapMode wrap_mode = ss::format::TexWrapMode_Clamp, + ss::format::TexFilterMode filter_mode = ss::format::TexFilterMode_Nearest, + std::vector<::flatbuffers::Offset> *cells = nullptr) { + auto name__ = name ? _fbb.CreateString(name) : 0; + auto image_path__ = image_path ? _fbb.CreateString(image_path) : 0; + auto cells__ = cells ? _fbb.CreateVectorOfSortedTables(cells) : 0; + return ss::format::CreateCellMap( + _fbb, + name_hash, + name__, + image_path__, + image_path_hash, + size_original, + wrap_mode, + filter_mode, + cells__); +} + +struct EffectParticlePointGravity FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EffectParticlePointGravityBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_POSITION = 4, + VT_POWER = 6 + }; + const ss::format::Vec2 *position() const { + return GetPointer(VT_POSITION); + } + float power() const { + return GetField(VT_POWER, 0.0f); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_POSITION) && + verifier.VerifyTable(position()) && + VerifyField(verifier, VT_POWER, 4) && + verifier.EndTable(); + } +}; + +struct EffectParticlePointGravityBuilder { + typedef EffectParticlePointGravity Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_position(::flatbuffers::Offset position) { + fbb_.AddOffset(EffectParticlePointGravity::VT_POSITION, position); + } + void add_power(float power) { + fbb_.AddElement(EffectParticlePointGravity::VT_POWER, power, 0.0f); + } + explicit EffectParticlePointGravityBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEffectParticlePointGravity( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset position = 0, + float power = 0.0f) { + EffectParticlePointGravityBuilder builder_(_fbb); + builder_.add_power(power); + builder_.add_position(position); + return builder_.Finish(); +} + +struct RectAndVec2ValueTable FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef RectAndVec2ValueTableBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_SIZE = 4, + VT_SCALE_FACTOR_VALUE = 6 + }; + const ss::format::Rect *size() const { + return GetPointer(VT_SIZE); + } + const ss::format::Vec2 *scale_factor_value() const { + return GetPointer(VT_SCALE_FACTOR_VALUE); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_SIZE) && + verifier.VerifyTable(size()) && + VerifyOffset(verifier, VT_SCALE_FACTOR_VALUE) && + verifier.VerifyTable(scale_factor_value()) && + verifier.EndTable(); + } +}; + +struct RectAndVec2ValueTableBuilder { + typedef RectAndVec2ValueTable Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_size(::flatbuffers::Offset size) { + fbb_.AddOffset(RectAndVec2ValueTable::VT_SIZE, size); + } + void add_scale_factor_value(::flatbuffers::Offset scale_factor_value) { + fbb_.AddOffset(RectAndVec2ValueTable::VT_SCALE_FACTOR_VALUE, scale_factor_value); + } + explicit RectAndVec2ValueTableBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateRectAndVec2ValueTable( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset size = 0, + ::flatbuffers::Offset scale_factor_value = 0) { + RectAndVec2ValueTableBuilder builder_(_fbb); + builder_.add_scale_factor_value(scale_factor_value); + builder_.add_size(size); + return builder_.Finish(); +} + +struct EffectParticleElementTransColor FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EffectParticleElementTransColorBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_COLOR_MIN_VALUE = 4, + VT_COLOR_MAX_VALUE = 6 + }; + uint32_t color_min_value() const { + return GetField(VT_COLOR_MIN_VALUE, 0); + } + uint32_t color_max_value() const { + return GetField(VT_COLOR_MAX_VALUE, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_COLOR_MIN_VALUE, 4) && + VerifyField(verifier, VT_COLOR_MAX_VALUE, 4) && + verifier.EndTable(); + } +}; + +struct EffectParticleElementTransColorBuilder { + typedef EffectParticleElementTransColor Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_color_min_value(uint32_t color_min_value) { + fbb_.AddElement(EffectParticleElementTransColor::VT_COLOR_MIN_VALUE, color_min_value, 0); + } + void add_color_max_value(uint32_t color_max_value) { + fbb_.AddElement(EffectParticleElementTransColor::VT_COLOR_MAX_VALUE, color_max_value, 0); + } + explicit EffectParticleElementTransColorBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEffectParticleElementTransColor( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t color_min_value = 0, + uint32_t color_max_value = 0) { + EffectParticleElementTransColorBuilder builder_(_fbb); + builder_.add_color_max_value(color_max_value); + builder_.add_color_min_value(color_min_value); + return builder_.Finish(); +} + +struct EffectParticleElementInitColor FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EffectParticleElementInitColorBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_COLOR_MIN_VALUE = 4, + VT_COLOR_MAX_VALUE = 6 + }; + uint32_t color_min_value() const { + return GetField(VT_COLOR_MIN_VALUE, 0); + } + uint32_t color_max_value() const { + return GetField(VT_COLOR_MAX_VALUE, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_COLOR_MIN_VALUE, 4) && + VerifyField(verifier, VT_COLOR_MAX_VALUE, 4) && + verifier.EndTable(); + } +}; + +struct EffectParticleElementInitColorBuilder { + typedef EffectParticleElementInitColor Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_color_min_value(uint32_t color_min_value) { + fbb_.AddElement(EffectParticleElementInitColor::VT_COLOR_MIN_VALUE, color_min_value, 0); + } + void add_color_max_value(uint32_t color_max_value) { + fbb_.AddElement(EffectParticleElementInitColor::VT_COLOR_MAX_VALUE, color_max_value, 0); + } + explicit EffectParticleElementInitColorBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEffectParticleElementInitColor( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t color_min_value = 0, + uint32_t color_max_value = 0) { + EffectParticleElementInitColorBuilder builder_(_fbb); + builder_.add_color_max_value(color_max_value); + builder_.add_color_min_value(color_min_value); + return builder_.Finish(); +} + +struct EffectParticleElementRotationTrans FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EffectParticleElementRotationTransBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_ROTATION_FACTOR = 4, + VT_END_LIFE_TIME_PER = 6 + }; + float rotation_factor() const { + return GetField(VT_ROTATION_FACTOR, 0.0f); + } + float end_life_time_per() const { + return GetField(VT_END_LIFE_TIME_PER, 0.0f); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_ROTATION_FACTOR, 4) && + VerifyField(verifier, VT_END_LIFE_TIME_PER, 4) && + verifier.EndTable(); + } +}; + +struct EffectParticleElementRotationTransBuilder { + typedef EffectParticleElementRotationTrans Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_rotation_factor(float rotation_factor) { + fbb_.AddElement(EffectParticleElementRotationTrans::VT_ROTATION_FACTOR, rotation_factor, 0.0f); + } + void add_end_life_time_per(float end_life_time_per) { + fbb_.AddElement(EffectParticleElementRotationTrans::VT_END_LIFE_TIME_PER, end_life_time_per, 0.0f); + } + explicit EffectParticleElementRotationTransBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEffectParticleElementRotationTrans( + ::flatbuffers::FlatBufferBuilder &_fbb, + float rotation_factor = 0.0f, + float end_life_time_per = 0.0f) { + EffectParticleElementRotationTransBuilder builder_(_fbb); + builder_.add_end_life_time_per(end_life_time_per); + builder_.add_rotation_factor(rotation_factor); + return builder_.Finish(); +} + +struct EffectParticleElementRotation FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EffectParticleElementRotationBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_ROTATION_VALUE = 4, + VT_ROTATION_ADD_VALUE = 6 + }; + const ss::format::Vec2 *rotation_value() const { + return GetPointer(VT_ROTATION_VALUE); + } + const ss::format::Vec2 *rotation_add_value() const { + return GetPointer(VT_ROTATION_ADD_VALUE); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_ROTATION_VALUE) && + verifier.VerifyTable(rotation_value()) && + VerifyOffset(verifier, VT_ROTATION_ADD_VALUE) && + verifier.VerifyTable(rotation_add_value()) && + verifier.EndTable(); + } +}; + +struct EffectParticleElementRotationBuilder { + typedef EffectParticleElementRotation Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_rotation_value(::flatbuffers::Offset rotation_value) { + fbb_.AddOffset(EffectParticleElementRotation::VT_ROTATION_VALUE, rotation_value); + } + void add_rotation_add_value(::flatbuffers::Offset rotation_add_value) { + fbb_.AddOffset(EffectParticleElementRotation::VT_ROTATION_ADD_VALUE, rotation_add_value); + } + explicit EffectParticleElementRotationBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEffectParticleElementRotation( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset rotation_value = 0, + ::flatbuffers::Offset rotation_add_value = 0) { + EffectParticleElementRotationBuilder builder_(_fbb); + builder_.add_rotation_add_value(rotation_add_value); + builder_.add_rotation_value(rotation_value); + return builder_.Finish(); +} + +struct EffectParticleElementBasic FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EffectParticleElementBasicBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_PRIORITY = 4, + VT_MAXIMUM_PARTICLE = 6, + VT_ATTIME_CREATE = 8, + VT_INTERVAL = 10, + VT_LIFETIME = 12, + VT_SPEED_MIN_VALUE = 14, + VT_SPEED_MAX_VALUE = 16, + VT_LIFESPAN_MIN_VALUE = 18, + VT_LIFESPAN_MAX_VALUE = 20, + VT_ANGLE = 22, + VT_ANGLE_VARIANCE = 24 + }; + int32_t priority() const { + return GetField(VT_PRIORITY, 0); + } + int32_t maximum_particle() const { + return GetField(VT_MAXIMUM_PARTICLE, 0); + } + int32_t attime_create() const { + return GetField(VT_ATTIME_CREATE, 0); + } + int32_t interval() const { + return GetField(VT_INTERVAL, 0); + } + int32_t lifetime() const { + return GetField(VT_LIFETIME, 0); + } + float speed_min_value() const { + return GetField(VT_SPEED_MIN_VALUE, 0.0f); + } + float speed_max_value() const { + return GetField(VT_SPEED_MAX_VALUE, 0.0f); + } + int32_t lifespan_min_value() const { + return GetField(VT_LIFESPAN_MIN_VALUE, 0); + } + int32_t lifespan_max_value() const { + return GetField(VT_LIFESPAN_MAX_VALUE, 0); + } + float angle() const { + return GetField(VT_ANGLE, 0.0f); + } + float angle_variance() const { + return GetField(VT_ANGLE_VARIANCE, 0.0f); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_PRIORITY, 4) && + VerifyField(verifier, VT_MAXIMUM_PARTICLE, 4) && + VerifyField(verifier, VT_ATTIME_CREATE, 4) && + VerifyField(verifier, VT_INTERVAL, 4) && + VerifyField(verifier, VT_LIFETIME, 4) && + VerifyField(verifier, VT_SPEED_MIN_VALUE, 4) && + VerifyField(verifier, VT_SPEED_MAX_VALUE, 4) && + VerifyField(verifier, VT_LIFESPAN_MIN_VALUE, 4) && + VerifyField(verifier, VT_LIFESPAN_MAX_VALUE, 4) && + VerifyField(verifier, VT_ANGLE, 4) && + VerifyField(verifier, VT_ANGLE_VARIANCE, 4) && + verifier.EndTable(); + } +}; + +struct EffectParticleElementBasicBuilder { + typedef EffectParticleElementBasic Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_priority(int32_t priority) { + fbb_.AddElement(EffectParticleElementBasic::VT_PRIORITY, priority, 0); + } + void add_maximum_particle(int32_t maximum_particle) { + fbb_.AddElement(EffectParticleElementBasic::VT_MAXIMUM_PARTICLE, maximum_particle, 0); + } + void add_attime_create(int32_t attime_create) { + fbb_.AddElement(EffectParticleElementBasic::VT_ATTIME_CREATE, attime_create, 0); + } + void add_interval(int32_t interval) { + fbb_.AddElement(EffectParticleElementBasic::VT_INTERVAL, interval, 0); + } + void add_lifetime(int32_t lifetime) { + fbb_.AddElement(EffectParticleElementBasic::VT_LIFETIME, lifetime, 0); + } + void add_speed_min_value(float speed_min_value) { + fbb_.AddElement(EffectParticleElementBasic::VT_SPEED_MIN_VALUE, speed_min_value, 0.0f); + } + void add_speed_max_value(float speed_max_value) { + fbb_.AddElement(EffectParticleElementBasic::VT_SPEED_MAX_VALUE, speed_max_value, 0.0f); + } + void add_lifespan_min_value(int32_t lifespan_min_value) { + fbb_.AddElement(EffectParticleElementBasic::VT_LIFESPAN_MIN_VALUE, lifespan_min_value, 0); + } + void add_lifespan_max_value(int32_t lifespan_max_value) { + fbb_.AddElement(EffectParticleElementBasic::VT_LIFESPAN_MAX_VALUE, lifespan_max_value, 0); + } + void add_angle(float angle) { + fbb_.AddElement(EffectParticleElementBasic::VT_ANGLE, angle, 0.0f); + } + void add_angle_variance(float angle_variance) { + fbb_.AddElement(EffectParticleElementBasic::VT_ANGLE_VARIANCE, angle_variance, 0.0f); + } + explicit EffectParticleElementBasicBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEffectParticleElementBasic( + ::flatbuffers::FlatBufferBuilder &_fbb, + int32_t priority = 0, + int32_t maximum_particle = 0, + int32_t attime_create = 0, + int32_t interval = 0, + int32_t lifetime = 0, + float speed_min_value = 0.0f, + float speed_max_value = 0.0f, + int32_t lifespan_min_value = 0, + int32_t lifespan_max_value = 0, + float angle = 0.0f, + float angle_variance = 0.0f) { + EffectParticleElementBasicBuilder builder_(_fbb); + builder_.add_angle_variance(angle_variance); + builder_.add_angle(angle); + builder_.add_lifespan_max_value(lifespan_max_value); + builder_.add_lifespan_min_value(lifespan_min_value); + builder_.add_speed_max_value(speed_max_value); + builder_.add_speed_min_value(speed_min_value); + builder_.add_lifetime(lifetime); + builder_.add_interval(interval); + builder_.add_attime_create(attime_create); + builder_.add_maximum_particle(maximum_particle); + builder_.add_priority(priority); + return builder_.Finish(); +} + +struct EffectNodeBehaviorWrapper FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EffectNodeBehaviorWrapperBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_VALUE_TYPE = 4, + VT_VALUE = 6 + }; + ss::format::EffectNodeBehavior value_type() const { + return static_cast(GetField(VT_VALUE_TYPE, 0)); + } + const void *value() const { + return GetPointer(VT_VALUE); + } + const ss::format::EffectParticleElementBasic *value_as_EffectParticleElementBasic() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementBasic ? static_cast(value()) : nullptr; + } + const ss::format::IntValueEntry *value_as_EffectParticleElementRndSeedChange() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementRndSeedChange ? static_cast(value()) : nullptr; + } + const ss::format::IntValueEntry *value_as_EffectParticleElementDelay() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementDelay ? static_cast(value()) : nullptr; + } + const ss::format::Vec2ValueEntry *value_as_EffectParticleElementGravity() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementGravity ? static_cast(value()) : nullptr; + } + const ss::format::RectValueEntry *value_as_EffectParticleElementPosition() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementPosition ? static_cast(value()) : nullptr; + } + const ss::format::EffectParticleElementRotation *value_as_EffectParticleElementRotation() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementRotation ? static_cast(value()) : nullptr; + } + const ss::format::EffectParticleElementRotationTrans *value_as_EffectParticleElementRotationTrans() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementRotationTrans ? static_cast(value()) : nullptr; + } + const ss::format::Vec2ValueEntry *value_as_EffectParticleElementTransSpeed() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementTransSpeed ? static_cast(value()) : nullptr; + } + const ss::format::Vec2ValueEntry *value_as_EffectParticleElementTangentialAcceleration() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementTangentialAcceleration ? static_cast(value()) : nullptr; + } + const ss::format::EffectParticleElementInitColor *value_as_EffectParticleElementInitColor() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementInitColor ? static_cast(value()) : nullptr; + } + const ss::format::EffectParticleElementTransColor *value_as_EffectParticleElementTransColor() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementTransColor ? static_cast(value()) : nullptr; + } + const ss::format::Vec2ValueEntry *value_as_EffectParticleElementAlphaFade() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementAlphaFade ? static_cast(value()) : nullptr; + } + const ss::format::RectAndVec2ValueTable *value_as_EffectParticleElementSize() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementSize ? static_cast(value()) : nullptr; + } + const ss::format::RectAndVec2ValueTable *value_as_EffectParticleElementTransSize() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleElementTransSize ? static_cast(value()) : nullptr; + } + const ss::format::EffectParticlePointGravity *value_as_EffectParticlePointGravity() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticlePointGravity ? static_cast(value()) : nullptr; + } + const ss::format::FloatValueEntry *value_as_EffectParticleTurnToDirectionEnabled() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleTurnToDirectionEnabled ? static_cast(value()) : nullptr; + } + const ss::format::IntValueEntry *value_as_EffectParticleInfiniteEmitEnabled() const { + return value_type() == ss::format::EffectNodeBehavior_EffectParticleInfiniteEmitEnabled ? static_cast(value()) : nullptr; + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_VALUE_TYPE, 1) && + VerifyOffset(verifier, VT_VALUE) && + VerifyEffectNodeBehavior(verifier, value(), value_type()) && + verifier.EndTable(); + } +}; + +struct EffectNodeBehaviorWrapperBuilder { + typedef EffectNodeBehaviorWrapper Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_value_type(ss::format::EffectNodeBehavior value_type) { + fbb_.AddElement(EffectNodeBehaviorWrapper::VT_VALUE_TYPE, static_cast(value_type), 0); + } + void add_value(::flatbuffers::Offset value) { + fbb_.AddOffset(EffectNodeBehaviorWrapper::VT_VALUE, value); + } + explicit EffectNodeBehaviorWrapperBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEffectNodeBehaviorWrapper( + ::flatbuffers::FlatBufferBuilder &_fbb, + ss::format::EffectNodeBehavior value_type = ss::format::EffectNodeBehavior_NONE, + ::flatbuffers::Offset value = 0) { + EffectNodeBehaviorWrapperBuilder builder_(_fbb); + builder_.add_value(value); + builder_.add_value_type(value_type); + return builder_.Finish(); +} + +struct EffectNode FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EffectNodeBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_INDEX = 4, + VT_PARENT_INDEX = 6, + VT_EFFECT_NODE_TYPE = 8, + VT_CELL_INDEX = 10, + VT_BLEND_TYPE = 12, + VT_BEHAVIOR = 14 + }; + int16_t index() const { + return GetField(VT_INDEX, 0); + } + int16_t parent_index() const { + return GetField(VT_PARENT_INDEX, 0); + } + ss::format::EffectNodeType effect_node_type() const { + return static_cast(GetField(VT_EFFECT_NODE_TYPE, 0)); + } + int16_t cell_index() const { + return GetField(VT_CELL_INDEX, 0); + } + ss::format::RenderBlendType blend_type() const { + return static_cast(GetField(VT_BLEND_TYPE, 0)); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *behavior() const { + return GetPointer> *>(VT_BEHAVIOR); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_INDEX, 2) && + VerifyField(verifier, VT_PARENT_INDEX, 2) && + VerifyField(verifier, VT_EFFECT_NODE_TYPE, 1) && + VerifyField(verifier, VT_CELL_INDEX, 2) && + VerifyField(verifier, VT_BLEND_TYPE, 1) && + VerifyOffset(verifier, VT_BEHAVIOR) && + verifier.VerifyVector(behavior()) && + verifier.VerifyVectorOfTables(behavior()) && + verifier.EndTable(); + } +}; + +struct EffectNodeBuilder { + typedef EffectNode Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_index(int16_t index) { + fbb_.AddElement(EffectNode::VT_INDEX, index, 0); + } + void add_parent_index(int16_t parent_index) { + fbb_.AddElement(EffectNode::VT_PARENT_INDEX, parent_index, 0); + } + void add_effect_node_type(ss::format::EffectNodeType effect_node_type) { + fbb_.AddElement(EffectNode::VT_EFFECT_NODE_TYPE, static_cast(effect_node_type), 0); + } + void add_cell_index(int16_t cell_index) { + fbb_.AddElement(EffectNode::VT_CELL_INDEX, cell_index, 0); + } + void add_blend_type(ss::format::RenderBlendType blend_type) { + fbb_.AddElement(EffectNode::VT_BLEND_TYPE, static_cast(blend_type), 0); + } + void add_behavior(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> behavior) { + fbb_.AddOffset(EffectNode::VT_BEHAVIOR, behavior); + } + explicit EffectNodeBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEffectNode( + ::flatbuffers::FlatBufferBuilder &_fbb, + int16_t index = 0, + int16_t parent_index = 0, + ss::format::EffectNodeType effect_node_type = ss::format::EffectNodeType_Root, + int16_t cell_index = 0, + ss::format::RenderBlendType blend_type = ss::format::RenderBlendType_Mix, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> behavior = 0) { + EffectNodeBuilder builder_(_fbb); + builder_.add_behavior(behavior); + builder_.add_cell_index(cell_index); + builder_.add_parent_index(parent_index); + builder_.add_index(index); + builder_.add_blend_type(blend_type); + builder_.add_effect_node_type(effect_node_type); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateEffectNodeDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + int16_t index = 0, + int16_t parent_index = 0, + ss::format::EffectNodeType effect_node_type = ss::format::EffectNodeType_Root, + int16_t cell_index = 0, + ss::format::RenderBlendType blend_type = ss::format::RenderBlendType_Mix, + const std::vector<::flatbuffers::Offset> *behavior = nullptr) { + auto behavior__ = behavior ? _fbb.CreateVector<::flatbuffers::Offset>(*behavior) : 0; + return ss::format::CreateEffectNode( + _fbb, + index, + parent_index, + effect_node_type, + cell_index, + blend_type, + behavior__); +} + +struct Effect FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef EffectBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_NAME_HASH = 4, + VT_NAME = 6, + VT_FPS = 8, + VT_IS_LOCK_RAND_SEED = 10, + VT_LOCK_RAND_SEED = 12, + VT_LAYOUT_SCALE = 14, + VT_EFFECT_NODE = 16 + }; + uint32_t name_hash() const { + return GetField(VT_NAME_HASH, 0); + } + bool KeyCompareLessThan(const Effect * const o) const { + return name_hash() < o->name_hash(); + } + int KeyCompareWithValue(uint32_t _name_hash) const { + return static_cast(name_hash() > _name_hash) - static_cast(name_hash() < _name_hash); + } + const ::flatbuffers::String *name() const { + return GetPointer(VT_NAME); + } + int16_t fps() const { + return GetField(VT_FPS, 0); + } + bool is_lock_rand_seed() const { + return GetField(VT_IS_LOCK_RAND_SEED, 0) != 0; + } + int16_t lock_rand_seed() const { + return GetField(VT_LOCK_RAND_SEED, 0); + } + const ss::format::Vec2 *layout_scale() const { + return GetPointer(VT_LAYOUT_SCALE); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *effect_node() const { + return GetPointer> *>(VT_EFFECT_NODE); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_NAME_HASH, 4) && + VerifyOffset(verifier, VT_NAME) && + verifier.VerifyString(name()) && + VerifyField(verifier, VT_FPS, 2) && + VerifyField(verifier, VT_IS_LOCK_RAND_SEED, 1) && + VerifyField(verifier, VT_LOCK_RAND_SEED, 2) && + VerifyOffset(verifier, VT_LAYOUT_SCALE) && + verifier.VerifyTable(layout_scale()) && + VerifyOffset(verifier, VT_EFFECT_NODE) && + verifier.VerifyVector(effect_node()) && + verifier.VerifyVectorOfTables(effect_node()) && + verifier.EndTable(); + } +}; + +struct EffectBuilder { + typedef Effect Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_name_hash(uint32_t name_hash) { + fbb_.AddElement(Effect::VT_NAME_HASH, name_hash, 0); + } + void add_name(::flatbuffers::Offset<::flatbuffers::String> name) { + fbb_.AddOffset(Effect::VT_NAME, name); + } + void add_fps(int16_t fps) { + fbb_.AddElement(Effect::VT_FPS, fps, 0); + } + void add_is_lock_rand_seed(bool is_lock_rand_seed) { + fbb_.AddElement(Effect::VT_IS_LOCK_RAND_SEED, static_cast(is_lock_rand_seed), 0); + } + void add_lock_rand_seed(int16_t lock_rand_seed) { + fbb_.AddElement(Effect::VT_LOCK_RAND_SEED, lock_rand_seed, 0); + } + void add_layout_scale(::flatbuffers::Offset layout_scale) { + fbb_.AddOffset(Effect::VT_LAYOUT_SCALE, layout_scale); + } + void add_effect_node(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> effect_node) { + fbb_.AddOffset(Effect::VT_EFFECT_NODE, effect_node); + } + explicit EffectBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateEffect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + ::flatbuffers::Offset<::flatbuffers::String> name = 0, + int16_t fps = 0, + bool is_lock_rand_seed = false, + int16_t lock_rand_seed = 0, + ::flatbuffers::Offset layout_scale = 0, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> effect_node = 0) { + EffectBuilder builder_(_fbb); + builder_.add_effect_node(effect_node); + builder_.add_layout_scale(layout_scale); + builder_.add_name(name); + builder_.add_name_hash(name_hash); + builder_.add_lock_rand_seed(lock_rand_seed); + builder_.add_fps(fps); + builder_.add_is_lock_rand_seed(is_lock_rand_seed); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateEffectDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + const char *name = nullptr, + int16_t fps = 0, + bool is_lock_rand_seed = false, + int16_t lock_rand_seed = 0, + ::flatbuffers::Offset layout_scale = 0, + const std::vector<::flatbuffers::Offset> *effect_node = nullptr) { + auto name__ = name ? _fbb.CreateString(name) : 0; + auto effect_node__ = effect_node ? _fbb.CreateVector<::flatbuffers::Offset>(*effect_node) : 0; + return ss::format::CreateEffect( + _fbb, + name_hash, + name__, + fps, + is_lock_rand_seed, + lock_rand_seed, + layout_scale, + effect_node__); +} + +struct SoundFile FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef SoundFileBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_NAME_HASH = 4, + VT_NAME = 6, + VT_FILE_PATH = 8, + VT_TIME_TOTAL = 10 + }; + uint32_t name_hash() const { + return GetField(VT_NAME_HASH, 0); + } + bool KeyCompareLessThan(const SoundFile * const o) const { + return name_hash() < o->name_hash(); + } + int KeyCompareWithValue(uint32_t _name_hash) const { + return static_cast(name_hash() > _name_hash) - static_cast(name_hash() < _name_hash); + } + const ::flatbuffers::String *name() const { + return GetPointer(VT_NAME); + } + const ::flatbuffers::String *file_path() const { + return GetPointer(VT_FILE_PATH); + } + uint32_t time_total() const { + return GetField(VT_TIME_TOTAL, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_NAME_HASH, 4) && + VerifyOffset(verifier, VT_NAME) && + verifier.VerifyString(name()) && + VerifyOffset(verifier, VT_FILE_PATH) && + verifier.VerifyString(file_path()) && + VerifyField(verifier, VT_TIME_TOTAL, 4) && + verifier.EndTable(); + } +}; + +struct SoundFileBuilder { + typedef SoundFile Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_name_hash(uint32_t name_hash) { + fbb_.AddElement(SoundFile::VT_NAME_HASH, name_hash, 0); + } + void add_name(::flatbuffers::Offset<::flatbuffers::String> name) { + fbb_.AddOffset(SoundFile::VT_NAME, name); + } + void add_file_path(::flatbuffers::Offset<::flatbuffers::String> file_path) { + fbb_.AddOffset(SoundFile::VT_FILE_PATH, file_path); + } + void add_time_total(uint32_t time_total) { + fbb_.AddElement(SoundFile::VT_TIME_TOTAL, time_total, 0); + } + explicit SoundFileBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateSoundFile( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + ::flatbuffers::Offset<::flatbuffers::String> name = 0, + ::flatbuffers::Offset<::flatbuffers::String> file_path = 0, + uint32_t time_total = 0) { + SoundFileBuilder builder_(_fbb); + builder_.add_time_total(time_total); + builder_.add_file_path(file_path); + builder_.add_name(name); + builder_.add_name_hash(name_hash); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateSoundFileDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + const char *name = nullptr, + const char *file_path = nullptr, + uint32_t time_total = 0) { + auto name__ = name ? _fbb.CreateString(name) : 0; + auto file_path__ = file_path ? _fbb.CreateString(file_path) : 0; + return ss::format::CreateSoundFile( + _fbb, + name_hash, + name__, + file_path__, + time_total); +} + +struct SoundList FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef SoundListBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_NAME_HASH = 4, + VT_NAME = 6, + VT_TABLE_DATA = 8 + }; + uint32_t name_hash() const { + return GetField(VT_NAME_HASH, 0); + } + bool KeyCompareLessThan(const SoundList * const o) const { + return name_hash() < o->name_hash(); + } + int KeyCompareWithValue(uint32_t _name_hash) const { + return static_cast(name_hash() > _name_hash) - static_cast(name_hash() < _name_hash); + } + const ::flatbuffers::String *name() const { + return GetPointer(VT_NAME); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *table_data() const { + return GetPointer> *>(VT_TABLE_DATA); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_NAME_HASH, 4) && + VerifyOffset(verifier, VT_NAME) && + verifier.VerifyString(name()) && + VerifyOffset(verifier, VT_TABLE_DATA) && + verifier.VerifyVector(table_data()) && + verifier.VerifyVectorOfTables(table_data()) && + verifier.EndTable(); + } +}; + +struct SoundListBuilder { + typedef SoundList Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_name_hash(uint32_t name_hash) { + fbb_.AddElement(SoundList::VT_NAME_HASH, name_hash, 0); + } + void add_name(::flatbuffers::Offset<::flatbuffers::String> name) { + fbb_.AddOffset(SoundList::VT_NAME, name); + } + void add_table_data(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> table_data) { + fbb_.AddOffset(SoundList::VT_TABLE_DATA, table_data); + } + explicit SoundListBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateSoundList( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + ::flatbuffers::Offset<::flatbuffers::String> name = 0, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> table_data = 0) { + SoundListBuilder builder_(_fbb); + builder_.add_table_data(table_data); + builder_.add_name(name); + builder_.add_name_hash(name_hash); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateSoundListDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + const char *name = nullptr, + std::vector<::flatbuffers::Offset> *table_data = nullptr) { + auto name__ = name ? _fbb.CreateString(name) : 0; + auto table_data__ = table_data ? _fbb.CreateVectorOfSortedTables(table_data) : 0; + return ss::format::CreateSoundList( + _fbb, + name_hash, + name__, + table_data__); +} + +struct FontGlyphBitmap FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef FontGlyphBitmapBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_ID = 4, + VT_ATLAS = 6, + VT_OFFSET = 8, + VT_WIDTH_ADVANCE = 10, + VT_TEXT = 12, + VT_PAGE = 14, + VT_CHANNEL = 16 + }; + uint16_t id() const { + return GetField(VT_ID, 0); + } + bool KeyCompareLessThan(const FontGlyphBitmap * const o) const { + return id() < o->id(); + } + int KeyCompareWithValue(uint16_t _id) const { + return static_cast(id() > _id) - static_cast(id() < _id); + } + const ss::format::Rect *atlas() const { + return GetPointer(VT_ATLAS); + } + const ss::format::Vec2 *offset() const { + return GetPointer(VT_OFFSET); + } + float width_advance() const { + return GetField(VT_WIDTH_ADVANCE, 0.0f); + } + const ::flatbuffers::String *text() const { + return GetPointer(VT_TEXT); + } + int8_t page() const { + return GetField(VT_PAGE, 0); + } + int8_t channel() const { + return GetField(VT_CHANNEL, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_ID, 2) && + VerifyOffset(verifier, VT_ATLAS) && + verifier.VerifyTable(atlas()) && + VerifyOffset(verifier, VT_OFFSET) && + verifier.VerifyTable(offset()) && + VerifyField(verifier, VT_WIDTH_ADVANCE, 4) && + VerifyOffset(verifier, VT_TEXT) && + verifier.VerifyString(text()) && + VerifyField(verifier, VT_PAGE, 1) && + VerifyField(verifier, VT_CHANNEL, 1) && + verifier.EndTable(); + } +}; + +struct FontGlyphBitmapBuilder { + typedef FontGlyphBitmap Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_id(uint16_t id) { + fbb_.AddElement(FontGlyphBitmap::VT_ID, id, 0); + } + void add_atlas(::flatbuffers::Offset atlas) { + fbb_.AddOffset(FontGlyphBitmap::VT_ATLAS, atlas); + } + void add_offset(::flatbuffers::Offset offset) { + fbb_.AddOffset(FontGlyphBitmap::VT_OFFSET, offset); + } + void add_width_advance(float width_advance) { + fbb_.AddElement(FontGlyphBitmap::VT_WIDTH_ADVANCE, width_advance, 0.0f); + } + void add_text(::flatbuffers::Offset<::flatbuffers::String> text) { + fbb_.AddOffset(FontGlyphBitmap::VT_TEXT, text); + } + void add_page(int8_t page) { + fbb_.AddElement(FontGlyphBitmap::VT_PAGE, page, 0); + } + void add_channel(int8_t channel) { + fbb_.AddElement(FontGlyphBitmap::VT_CHANNEL, channel, 0); + } + explicit FontGlyphBitmapBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateFontGlyphBitmap( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint16_t id = 0, + ::flatbuffers::Offset atlas = 0, + ::flatbuffers::Offset offset = 0, + float width_advance = 0.0f, + ::flatbuffers::Offset<::flatbuffers::String> text = 0, + int8_t page = 0, + int8_t channel = 0) { + FontGlyphBitmapBuilder builder_(_fbb); + builder_.add_text(text); + builder_.add_width_advance(width_advance); + builder_.add_offset(offset); + builder_.add_atlas(atlas); + builder_.add_id(id); + builder_.add_channel(channel); + builder_.add_page(page); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateFontGlyphBitmapDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint16_t id = 0, + ::flatbuffers::Offset atlas = 0, + ::flatbuffers::Offset offset = 0, + float width_advance = 0.0f, + const char *text = nullptr, + int8_t page = 0, + int8_t channel = 0) { + auto text__ = text ? _fbb.CreateString(text) : 0; + return ss::format::CreateFontGlyphBitmap( + _fbb, + id, + atlas, + offset, + width_advance, + text__, + page, + channel); +} + +struct FontBitmap FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef FontBitmapBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_NAME_HASH = 4, + VT_NAME = 6, + VT_NAME_FACE = 8, + VT_SIZE = 10, + VT_PADDING_L = 12, + VT_PADDING_R = 14, + VT_PADDING_U = 16, + VT_PADDING_D = 18, + VT_BASE = 20, + VT_HEIGHT_LINE = 22, + VT_SCALE = 24, + VT_SPACING = 26, + VT_SIZE_TEXTURE_ORIGINAL = 28, + VT_NAME_TEXTURE = 30, + VT_TABLE_DATA = 32 + }; + uint32_t name_hash() const { + return GetField(VT_NAME_HASH, 0); + } + bool KeyCompareLessThan(const FontBitmap * const o) const { + return name_hash() < o->name_hash(); + } + int KeyCompareWithValue(uint32_t _name_hash) const { + return static_cast(name_hash() > _name_hash) - static_cast(name_hash() < _name_hash); + } + const ::flatbuffers::String *name() const { + return GetPointer(VT_NAME); + } + const ::flatbuffers::String *name_face() const { + return GetPointer(VT_NAME_FACE); + } + uint16_t size() const { + return GetField(VT_SIZE, 0); + } + uint16_t padding_l() const { + return GetField(VT_PADDING_L, 0); + } + uint16_t padding_r() const { + return GetField(VT_PADDING_R, 0); + } + uint16_t padding_u() const { + return GetField(VT_PADDING_U, 0); + } + uint16_t padding_d() const { + return GetField(VT_PADDING_D, 0); + } + int16_t base() const { + return GetField(VT_BASE, 0); + } + int16_t height_line() const { + return GetField(VT_HEIGHT_LINE, 0); + } + const ss::format::Vec2 *scale() const { + return GetPointer(VT_SCALE); + } + const ss::format::Vec2 *spacing() const { + return GetPointer(VT_SPACING); + } + const ss::format::Vec2 *size_texture_original() const { + return GetPointer(VT_SIZE_TEXTURE_ORIGINAL); + } + const ::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>> *name_texture() const { + return GetPointer> *>(VT_NAME_TEXTURE); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *table_data() const { + return GetPointer> *>(VT_TABLE_DATA); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_NAME_HASH, 4) && + VerifyOffset(verifier, VT_NAME) && + verifier.VerifyString(name()) && + VerifyOffset(verifier, VT_NAME_FACE) && + verifier.VerifyString(name_face()) && + VerifyField(verifier, VT_SIZE, 2) && + VerifyField(verifier, VT_PADDING_L, 2) && + VerifyField(verifier, VT_PADDING_R, 2) && + VerifyField(verifier, VT_PADDING_U, 2) && + VerifyField(verifier, VT_PADDING_D, 2) && + VerifyField(verifier, VT_BASE, 2) && + VerifyField(verifier, VT_HEIGHT_LINE, 2) && + VerifyOffset(verifier, VT_SCALE) && + verifier.VerifyTable(scale()) && + VerifyOffset(verifier, VT_SPACING) && + verifier.VerifyTable(spacing()) && + VerifyOffset(verifier, VT_SIZE_TEXTURE_ORIGINAL) && + verifier.VerifyTable(size_texture_original()) && + VerifyOffset(verifier, VT_NAME_TEXTURE) && + verifier.VerifyVector(name_texture()) && + verifier.VerifyVectorOfStrings(name_texture()) && + VerifyOffset(verifier, VT_TABLE_DATA) && + verifier.VerifyVector(table_data()) && + verifier.VerifyVectorOfTables(table_data()) && + verifier.EndTable(); + } +}; + +struct FontBitmapBuilder { + typedef FontBitmap Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_name_hash(uint32_t name_hash) { + fbb_.AddElement(FontBitmap::VT_NAME_HASH, name_hash, 0); + } + void add_name(::flatbuffers::Offset<::flatbuffers::String> name) { + fbb_.AddOffset(FontBitmap::VT_NAME, name); + } + void add_name_face(::flatbuffers::Offset<::flatbuffers::String> name_face) { + fbb_.AddOffset(FontBitmap::VT_NAME_FACE, name_face); + } + void add_size(uint16_t size) { + fbb_.AddElement(FontBitmap::VT_SIZE, size, 0); + } + void add_padding_l(uint16_t padding_l) { + fbb_.AddElement(FontBitmap::VT_PADDING_L, padding_l, 0); + } + void add_padding_r(uint16_t padding_r) { + fbb_.AddElement(FontBitmap::VT_PADDING_R, padding_r, 0); + } + void add_padding_u(uint16_t padding_u) { + fbb_.AddElement(FontBitmap::VT_PADDING_U, padding_u, 0); + } + void add_padding_d(uint16_t padding_d) { + fbb_.AddElement(FontBitmap::VT_PADDING_D, padding_d, 0); + } + void add_base(int16_t base) { + fbb_.AddElement(FontBitmap::VT_BASE, base, 0); + } + void add_height_line(int16_t height_line) { + fbb_.AddElement(FontBitmap::VT_HEIGHT_LINE, height_line, 0); + } + void add_scale(::flatbuffers::Offset scale) { + fbb_.AddOffset(FontBitmap::VT_SCALE, scale); + } + void add_spacing(::flatbuffers::Offset spacing) { + fbb_.AddOffset(FontBitmap::VT_SPACING, spacing); + } + void add_size_texture_original(::flatbuffers::Offset size_texture_original) { + fbb_.AddOffset(FontBitmap::VT_SIZE_TEXTURE_ORIGINAL, size_texture_original); + } + void add_name_texture(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> name_texture) { + fbb_.AddOffset(FontBitmap::VT_NAME_TEXTURE, name_texture); + } + void add_table_data(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> table_data) { + fbb_.AddOffset(FontBitmap::VT_TABLE_DATA, table_data); + } + explicit FontBitmapBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateFontBitmap( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + ::flatbuffers::Offset<::flatbuffers::String> name = 0, + ::flatbuffers::Offset<::flatbuffers::String> name_face = 0, + uint16_t size = 0, + uint16_t padding_l = 0, + uint16_t padding_r = 0, + uint16_t padding_u = 0, + uint16_t padding_d = 0, + int16_t base = 0, + int16_t height_line = 0, + ::flatbuffers::Offset scale = 0, + ::flatbuffers::Offset spacing = 0, + ::flatbuffers::Offset size_texture_original = 0, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset<::flatbuffers::String>>> name_texture = 0, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> table_data = 0) { + FontBitmapBuilder builder_(_fbb); + builder_.add_table_data(table_data); + builder_.add_name_texture(name_texture); + builder_.add_size_texture_original(size_texture_original); + builder_.add_spacing(spacing); + builder_.add_scale(scale); + builder_.add_name_face(name_face); + builder_.add_name(name); + builder_.add_name_hash(name_hash); + builder_.add_height_line(height_line); + builder_.add_base(base); + builder_.add_padding_d(padding_d); + builder_.add_padding_u(padding_u); + builder_.add_padding_r(padding_r); + builder_.add_padding_l(padding_l); + builder_.add_size(size); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateFontBitmapDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t name_hash = 0, + const char *name = nullptr, + const char *name_face = nullptr, + uint16_t size = 0, + uint16_t padding_l = 0, + uint16_t padding_r = 0, + uint16_t padding_u = 0, + uint16_t padding_d = 0, + int16_t base = 0, + int16_t height_line = 0, + ::flatbuffers::Offset scale = 0, + ::flatbuffers::Offset spacing = 0, + ::flatbuffers::Offset size_texture_original = 0, + const std::vector<::flatbuffers::Offset<::flatbuffers::String>> *name_texture = nullptr, + std::vector<::flatbuffers::Offset> *table_data = nullptr) { + auto name__ = name ? _fbb.CreateString(name) : 0; + auto name_face__ = name_face ? _fbb.CreateString(name_face) : 0; + auto name_texture__ = name_texture ? _fbb.CreateVector<::flatbuffers::Offset<::flatbuffers::String>>(*name_texture) : 0; + auto table_data__ = table_data ? _fbb.CreateVectorOfSortedTables(table_data) : 0; + return ss::format::CreateFontBitmap( + _fbb, + name_hash, + name__, + name_face__, + size, + padding_l, + padding_r, + padding_u, + padding_d, + base, + height_line, + scale, + spacing, + size_texture_original, + name_texture__, + table_data__); +} + +struct PartAttributeCell FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartAttributeCellBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_MAP_ID = 4, + VT_NAME_HASH = 6 + }; + int32_t map_id() const { + return GetField(VT_MAP_ID, 0); + } + uint32_t name_hash() const { + return GetField(VT_NAME_HASH, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_MAP_ID, 4) && + VerifyField(verifier, VT_NAME_HASH, 4) && + verifier.EndTable(); + } +}; + +struct PartAttributeCellBuilder { + typedef PartAttributeCell Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_map_id(int32_t map_id) { + fbb_.AddElement(PartAttributeCell::VT_MAP_ID, map_id, 0); + } + void add_name_hash(uint32_t name_hash) { + fbb_.AddElement(PartAttributeCell::VT_NAME_HASH, name_hash, 0); + } + explicit PartAttributeCellBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartAttributeCell( + ::flatbuffers::FlatBufferBuilder &_fbb, + int32_t map_id = 0, + uint32_t name_hash = 0) { + PartAttributeCellBuilder builder_(_fbb); + builder_.add_name_hash(name_hash); + builder_.add_map_id(map_id); + return builder_.Finish(); +} + +struct SsAttributePartColorKeyValueColor FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef SsAttributePartColorKeyValueColorBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_RGBA = 4, + VT_RATE = 6 + }; + const ss::format::U8Rect *rgba() const { + return GetPointer(VT_RGBA); + } + float rate() const { + return GetField(VT_RATE, 0.0f); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_RGBA) && + verifier.VerifyTable(rgba()) && + VerifyField(verifier, VT_RATE, 4) && + verifier.EndTable(); + } +}; + +struct SsAttributePartColorKeyValueColorBuilder { + typedef SsAttributePartColorKeyValueColor Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_rgba(::flatbuffers::Offset rgba) { + fbb_.AddOffset(SsAttributePartColorKeyValueColor::VT_RGBA, rgba); + } + void add_rate(float rate) { + fbb_.AddElement(SsAttributePartColorKeyValueColor::VT_RATE, rate, 0.0f); + } + explicit SsAttributePartColorKeyValueColorBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateSsAttributePartColorKeyValueColor( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset rgba = 0, + float rate = 0.0f) { + SsAttributePartColorKeyValueColorBuilder builder_(_fbb); + builder_.add_rate(rate); + builder_.add_rgba(rgba); + return builder_.Finish(); +} + +struct PartAttributePartColor FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartAttributePartColorBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_BLEND_TYPE = 4, + VT_LT = 6, + VT_RT = 8, + VT_LB = 10, + VT_RB = 12 + }; + ss::format::BlendType blend_type() const { + return static_cast(GetField(VT_BLEND_TYPE, 0)); + } + const ss::format::SsAttributePartColorKeyValueColor *lt() const { + return GetPointer(VT_LT); + } + const ss::format::SsAttributePartColorKeyValueColor *rt() const { + return GetPointer(VT_RT); + } + const ss::format::SsAttributePartColorKeyValueColor *lb() const { + return GetPointer(VT_LB); + } + const ss::format::SsAttributePartColorKeyValueColor *rb() const { + return GetPointer(VT_RB); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_BLEND_TYPE, 1) && + VerifyOffset(verifier, VT_LT) && + verifier.VerifyTable(lt()) && + VerifyOffset(verifier, VT_RT) && + verifier.VerifyTable(rt()) && + VerifyOffset(verifier, VT_LB) && + verifier.VerifyTable(lb()) && + VerifyOffset(verifier, VT_RB) && + verifier.VerifyTable(rb()) && + verifier.EndTable(); + } +}; + +struct PartAttributePartColorBuilder { + typedef PartAttributePartColor Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_blend_type(ss::format::BlendType blend_type) { + fbb_.AddElement(PartAttributePartColor::VT_BLEND_TYPE, static_cast(blend_type), 0); + } + void add_lt(::flatbuffers::Offset lt) { + fbb_.AddOffset(PartAttributePartColor::VT_LT, lt); + } + void add_rt(::flatbuffers::Offset rt) { + fbb_.AddOffset(PartAttributePartColor::VT_RT, rt); + } + void add_lb(::flatbuffers::Offset lb) { + fbb_.AddOffset(PartAttributePartColor::VT_LB, lb); + } + void add_rb(::flatbuffers::Offset rb) { + fbb_.AddOffset(PartAttributePartColor::VT_RB, rb); + } + explicit PartAttributePartColorBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartAttributePartColor( + ::flatbuffers::FlatBufferBuilder &_fbb, + ss::format::BlendType blend_type = ss::format::BlendType_Mix, + ::flatbuffers::Offset lt = 0, + ::flatbuffers::Offset rt = 0, + ::flatbuffers::Offset lb = 0, + ::flatbuffers::Offset rb = 0) { + PartAttributePartColorBuilder builder_(_fbb); + builder_.add_rb(rb); + builder_.add_lb(lb); + builder_.add_rt(rt); + builder_.add_lt(lt); + builder_.add_blend_type(blend_type); + return builder_.Finish(); +} + +struct PartAttributeVertex FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartAttributeVertexBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_LT = 4, + VT_RT = 6, + VT_LB = 8, + VT_RB = 10 + }; + const ss::format::Vec2 *lt() const { + return GetPointer(VT_LT); + } + const ss::format::Vec2 *rt() const { + return GetPointer(VT_RT); + } + const ss::format::Vec2 *lb() const { + return GetPointer(VT_LB); + } + const ss::format::Vec2 *rb() const { + return GetPointer(VT_RB); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_LT) && + verifier.VerifyTable(lt()) && + VerifyOffset(verifier, VT_RT) && + verifier.VerifyTable(rt()) && + VerifyOffset(verifier, VT_LB) && + verifier.VerifyTable(lb()) && + VerifyOffset(verifier, VT_RB) && + verifier.VerifyTable(rb()) && + verifier.EndTable(); + } +}; + +struct PartAttributeVertexBuilder { + typedef PartAttributeVertex Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_lt(::flatbuffers::Offset lt) { + fbb_.AddOffset(PartAttributeVertex::VT_LT, lt); + } + void add_rt(::flatbuffers::Offset rt) { + fbb_.AddOffset(PartAttributeVertex::VT_RT, rt); + } + void add_lb(::flatbuffers::Offset lb) { + fbb_.AddOffset(PartAttributeVertex::VT_LB, lb); + } + void add_rb(::flatbuffers::Offset rb) { + fbb_.AddOffset(PartAttributeVertex::VT_RB, rb); + } + explicit PartAttributeVertexBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartAttributeVertex( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset lt = 0, + ::flatbuffers::Offset rt = 0, + ::flatbuffers::Offset lb = 0, + ::flatbuffers::Offset rb = 0) { + PartAttributeVertexBuilder builder_(_fbb); + builder_.add_rb(rb); + builder_.add_lb(lb); + builder_.add_rt(rt); + builder_.add_lt(lt); + return builder_.Finish(); +} + +struct PartAttributeInstance FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartAttributeInstanceBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_PINGPONG = 4, + VT_INDEPENDENT = 6, + VT_LOOP_NUM = 8, + VT_START_LABEL_HASH = 10, + VT_START_OFFSET = 12, + VT_END_LABEL_HASH = 14, + VT_END_OFFSET = 16, + VT_SPEED = 18 + }; + bool pingpong() const { + return GetField(VT_PINGPONG, 0) != 0; + } + bool independent() const { + return GetField(VT_INDEPENDENT, 0) != 0; + } + int32_t loop_num() const { + return GetField(VT_LOOP_NUM, 0); + } + uint32_t start_label_hash() const { + return GetField(VT_START_LABEL_HASH, 0); + } + int32_t start_offset() const { + return GetField(VT_START_OFFSET, 0); + } + uint32_t end_label_hash() const { + return GetField(VT_END_LABEL_HASH, 0); + } + int32_t end_offset() const { + return GetField(VT_END_OFFSET, 0); + } + float speed() const { + return GetField(VT_SPEED, 0.0f); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_PINGPONG, 1) && + VerifyField(verifier, VT_INDEPENDENT, 1) && + VerifyField(verifier, VT_LOOP_NUM, 4) && + VerifyField(verifier, VT_START_LABEL_HASH, 4) && + VerifyField(verifier, VT_START_OFFSET, 4) && + VerifyField(verifier, VT_END_LABEL_HASH, 4) && + VerifyField(verifier, VT_END_OFFSET, 4) && + VerifyField(verifier, VT_SPEED, 4) && + verifier.EndTable(); + } +}; + +struct PartAttributeInstanceBuilder { + typedef PartAttributeInstance Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_pingpong(bool pingpong) { + fbb_.AddElement(PartAttributeInstance::VT_PINGPONG, static_cast(pingpong), 0); + } + void add_independent(bool independent) { + fbb_.AddElement(PartAttributeInstance::VT_INDEPENDENT, static_cast(independent), 0); + } + void add_loop_num(int32_t loop_num) { + fbb_.AddElement(PartAttributeInstance::VT_LOOP_NUM, loop_num, 0); + } + void add_start_label_hash(uint32_t start_label_hash) { + fbb_.AddElement(PartAttributeInstance::VT_START_LABEL_HASH, start_label_hash, 0); + } + void add_start_offset(int32_t start_offset) { + fbb_.AddElement(PartAttributeInstance::VT_START_OFFSET, start_offset, 0); + } + void add_end_label_hash(uint32_t end_label_hash) { + fbb_.AddElement(PartAttributeInstance::VT_END_LABEL_HASH, end_label_hash, 0); + } + void add_end_offset(int32_t end_offset) { + fbb_.AddElement(PartAttributeInstance::VT_END_OFFSET, end_offset, 0); + } + void add_speed(float speed) { + fbb_.AddElement(PartAttributeInstance::VT_SPEED, speed, 0.0f); + } + explicit PartAttributeInstanceBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartAttributeInstance( + ::flatbuffers::FlatBufferBuilder &_fbb, + bool pingpong = false, + bool independent = false, + int32_t loop_num = 0, + uint32_t start_label_hash = 0, + int32_t start_offset = 0, + uint32_t end_label_hash = 0, + int32_t end_offset = 0, + float speed = 0.0f) { + PartAttributeInstanceBuilder builder_(_fbb); + builder_.add_speed(speed); + builder_.add_end_offset(end_offset); + builder_.add_end_label_hash(end_label_hash); + builder_.add_start_offset(start_offset); + builder_.add_start_label_hash(start_label_hash); + builder_.add_loop_num(loop_num); + builder_.add_independent(independent); + builder_.add_pingpong(pingpong); + return builder_.Finish(); +} + +struct PartAttributeEffect FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartAttributeEffectBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_CUR_KEYFRAME = 4, + VT_START_TIME = 6, + VT_SPEED = 8, + VT_LOOPFLAG = 10 + }; + int32_t cur_keyframe() const { + return GetField(VT_CUR_KEYFRAME, 0); + } + int32_t start_time() const { + return GetField(VT_START_TIME, 0); + } + float speed() const { + return GetField(VT_SPEED, 0.0f); + } + int32_t loopflag() const { + return GetField(VT_LOOPFLAG, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_CUR_KEYFRAME, 4) && + VerifyField(verifier, VT_START_TIME, 4) && + VerifyField(verifier, VT_SPEED, 4) && + VerifyField(verifier, VT_LOOPFLAG, 4) && + verifier.EndTable(); + } +}; + +struct PartAttributeEffectBuilder { + typedef PartAttributeEffect Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_cur_keyframe(int32_t cur_keyframe) { + fbb_.AddElement(PartAttributeEffect::VT_CUR_KEYFRAME, cur_keyframe, 0); + } + void add_start_time(int32_t start_time) { + fbb_.AddElement(PartAttributeEffect::VT_START_TIME, start_time, 0); + } + void add_speed(float speed) { + fbb_.AddElement(PartAttributeEffect::VT_SPEED, speed, 0.0f); + } + void add_loopflag(int32_t loopflag) { + fbb_.AddElement(PartAttributeEffect::VT_LOOPFLAG, loopflag, 0); + } + explicit PartAttributeEffectBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartAttributeEffect( + ::flatbuffers::FlatBufferBuilder &_fbb, + int32_t cur_keyframe = 0, + int32_t start_time = 0, + float speed = 0.0f, + int32_t loopflag = 0) { + PartAttributeEffectBuilder builder_(_fbb); + builder_.add_loopflag(loopflag); + builder_.add_speed(speed); + builder_.add_start_time(start_time); + builder_.add_cur_keyframe(cur_keyframe); + return builder_.Finish(); +} + +struct PartAttributeDeform FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartAttributeDeformBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_COORDINATE = 4, + VT_INDEX = 6 + }; + const ::flatbuffers::Vector<::flatbuffers::Offset> *coordinate() const { + return GetPointer> *>(VT_COORDINATE); + } + const ::flatbuffers::Vector *index() const { + return GetPointer *>(VT_INDEX); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_COORDINATE) && + verifier.VerifyVector(coordinate()) && + verifier.VerifyVectorOfTables(coordinate()) && + VerifyOffset(verifier, VT_INDEX) && + verifier.VerifyVector(index()) && + verifier.EndTable(); + } +}; + +struct PartAttributeDeformBuilder { + typedef PartAttributeDeform Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_coordinate(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> coordinate) { + fbb_.AddOffset(PartAttributeDeform::VT_COORDINATE, coordinate); + } + void add_index(::flatbuffers::Offset<::flatbuffers::Vector> index) { + fbb_.AddOffset(PartAttributeDeform::VT_INDEX, index); + } + explicit PartAttributeDeformBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartAttributeDeform( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> coordinate = 0, + ::flatbuffers::Offset<::flatbuffers::Vector> index = 0) { + PartAttributeDeformBuilder builder_(_fbb); + builder_.add_index(index); + builder_.add_coordinate(coordinate); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreatePartAttributeDeformDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + const std::vector<::flatbuffers::Offset> *coordinate = nullptr, + const std::vector *index = nullptr) { + auto coordinate__ = coordinate ? _fbb.CreateVector<::flatbuffers::Offset>(*coordinate) : 0; + auto index__ = index ? _fbb.CreateVector(*index) : 0; + return ss::format::CreatePartAttributeDeform( + _fbb, + coordinate__, + index__); +} + +struct PartAttributeShader FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartAttributeShaderBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_ID = 4, + VT_ID_HASH = 6, + VT_PARAM0 = 8, + VT_PARAM1 = 10, + VT_PARAM2 = 12, + VT_PARAM3 = 14, + VT_PARAM4 = 16, + VT_PARAM5 = 18, + VT_PARAM6 = 20, + VT_PARAM7 = 22, + VT_MAP0_ID = 24, + VT_MAP0_NAME_HASH = 26, + VT_MAP1_ID = 28, + VT_MAP1_NAME_HASH = 30 + }; + const ::flatbuffers::String *id() const { + return GetPointer(VT_ID); + } + uint32_t id_hash() const { + return GetField(VT_ID_HASH, 0); + } + float param0() const { + return GetField(VT_PARAM0, 0.0f); + } + float param1() const { + return GetField(VT_PARAM1, 0.0f); + } + float param2() const { + return GetField(VT_PARAM2, 0.0f); + } + float param3() const { + return GetField(VT_PARAM3, 0.0f); + } + float param4() const { + return GetField(VT_PARAM4, 0.0f); + } + float param5() const { + return GetField(VT_PARAM5, 0.0f); + } + float param6() const { + return GetField(VT_PARAM6, 0.0f); + } + float param7() const { + return GetField(VT_PARAM7, 0.0f); + } + int32_t map0_id() const { + return GetField(VT_MAP0_ID, 0); + } + uint32_t map0_name_hash() const { + return GetField(VT_MAP0_NAME_HASH, 0); + } + int32_t map1_id() const { + return GetField(VT_MAP1_ID, 0); + } + uint32_t map1_name_hash() const { + return GetField(VT_MAP1_NAME_HASH, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_ID) && + verifier.VerifyString(id()) && + VerifyField(verifier, VT_ID_HASH, 4) && + VerifyField(verifier, VT_PARAM0, 4) && + VerifyField(verifier, VT_PARAM1, 4) && + VerifyField(verifier, VT_PARAM2, 4) && + VerifyField(verifier, VT_PARAM3, 4) && + VerifyField(verifier, VT_PARAM4, 4) && + VerifyField(verifier, VT_PARAM5, 4) && + VerifyField(verifier, VT_PARAM6, 4) && + VerifyField(verifier, VT_PARAM7, 4) && + VerifyField(verifier, VT_MAP0_ID, 4) && + VerifyField(verifier, VT_MAP0_NAME_HASH, 4) && + VerifyField(verifier, VT_MAP1_ID, 4) && + VerifyField(verifier, VT_MAP1_NAME_HASH, 4) && + verifier.EndTable(); + } +}; + +struct PartAttributeShaderBuilder { + typedef PartAttributeShader Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_id(::flatbuffers::Offset<::flatbuffers::String> id) { + fbb_.AddOffset(PartAttributeShader::VT_ID, id); + } + void add_id_hash(uint32_t id_hash) { + fbb_.AddElement(PartAttributeShader::VT_ID_HASH, id_hash, 0); + } + void add_param0(float param0) { + fbb_.AddElement(PartAttributeShader::VT_PARAM0, param0, 0.0f); + } + void add_param1(float param1) { + fbb_.AddElement(PartAttributeShader::VT_PARAM1, param1, 0.0f); + } + void add_param2(float param2) { + fbb_.AddElement(PartAttributeShader::VT_PARAM2, param2, 0.0f); + } + void add_param3(float param3) { + fbb_.AddElement(PartAttributeShader::VT_PARAM3, param3, 0.0f); + } + void add_param4(float param4) { + fbb_.AddElement(PartAttributeShader::VT_PARAM4, param4, 0.0f); + } + void add_param5(float param5) { + fbb_.AddElement(PartAttributeShader::VT_PARAM5, param5, 0.0f); + } + void add_param6(float param6) { + fbb_.AddElement(PartAttributeShader::VT_PARAM6, param6, 0.0f); + } + void add_param7(float param7) { + fbb_.AddElement(PartAttributeShader::VT_PARAM7, param7, 0.0f); + } + void add_map0_id(int32_t map0_id) { + fbb_.AddElement(PartAttributeShader::VT_MAP0_ID, map0_id, 0); + } + void add_map0_name_hash(uint32_t map0_name_hash) { + fbb_.AddElement(PartAttributeShader::VT_MAP0_NAME_HASH, map0_name_hash, 0); + } + void add_map1_id(int32_t map1_id) { + fbb_.AddElement(PartAttributeShader::VT_MAP1_ID, map1_id, 0); + } + void add_map1_name_hash(uint32_t map1_name_hash) { + fbb_.AddElement(PartAttributeShader::VT_MAP1_NAME_HASH, map1_name_hash, 0); + } + explicit PartAttributeShaderBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartAttributeShader( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset<::flatbuffers::String> id = 0, + uint32_t id_hash = 0, + float param0 = 0.0f, + float param1 = 0.0f, + float param2 = 0.0f, + float param3 = 0.0f, + float param4 = 0.0f, + float param5 = 0.0f, + float param6 = 0.0f, + float param7 = 0.0f, + int32_t map0_id = 0, + uint32_t map0_name_hash = 0, + int32_t map1_id = 0, + uint32_t map1_name_hash = 0) { + PartAttributeShaderBuilder builder_(_fbb); + builder_.add_map1_name_hash(map1_name_hash); + builder_.add_map1_id(map1_id); + builder_.add_map0_name_hash(map0_name_hash); + builder_.add_map0_id(map0_id); + builder_.add_param7(param7); + builder_.add_param6(param6); + builder_.add_param5(param5); + builder_.add_param4(param4); + builder_.add_param3(param3); + builder_.add_param2(param2); + builder_.add_param1(param1); + builder_.add_param0(param0); + builder_.add_id_hash(id_hash); + builder_.add_id(id); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreatePartAttributeShaderDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + const char *id = nullptr, + uint32_t id_hash = 0, + float param0 = 0.0f, + float param1 = 0.0f, + float param2 = 0.0f, + float param3 = 0.0f, + float param4 = 0.0f, + float param5 = 0.0f, + float param6 = 0.0f, + float param7 = 0.0f, + int32_t map0_id = 0, + uint32_t map0_name_hash = 0, + int32_t map1_id = 0, + uint32_t map1_name_hash = 0) { + auto id__ = id ? _fbb.CreateString(id) : 0; + return ss::format::CreatePartAttributeShader( + _fbb, + id__, + id_hash, + param0, + param1, + param2, + param3, + param4, + param5, + param6, + param7, + map0_id, + map0_name_hash, + map1_id, + map1_name_hash); +} + +struct PartAttributeUserData FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartAttributeUserDataBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_INTEGER = 4, + VT_RECT = 6, + VT_POINT = 8, + VT_STR = 10 + }; + const ss::format::IntValueEntry *integer() const { + return GetPointer(VT_INTEGER); + } + const ss::format::Rect *rect() const { + return GetPointer(VT_RECT); + } + const ss::format::Vec2 *point() const { + return GetPointer(VT_POINT); + } + const ::flatbuffers::String *str() const { + return GetPointer(VT_STR); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_INTEGER) && + verifier.VerifyTable(integer()) && + VerifyOffset(verifier, VT_RECT) && + verifier.VerifyTable(rect()) && + VerifyOffset(verifier, VT_POINT) && + verifier.VerifyTable(point()) && + VerifyOffset(verifier, VT_STR) && + verifier.VerifyString(str()) && + verifier.EndTable(); + } +}; + +struct PartAttributeUserDataBuilder { + typedef PartAttributeUserData Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_integer(::flatbuffers::Offset integer) { + fbb_.AddOffset(PartAttributeUserData::VT_INTEGER, integer); + } + void add_rect(::flatbuffers::Offset rect) { + fbb_.AddOffset(PartAttributeUserData::VT_RECT, rect); + } + void add_point(::flatbuffers::Offset point) { + fbb_.AddOffset(PartAttributeUserData::VT_POINT, point); + } + void add_str(::flatbuffers::Offset<::flatbuffers::String> str) { + fbb_.AddOffset(PartAttributeUserData::VT_STR, str); + } + explicit PartAttributeUserDataBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartAttributeUserData( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset integer = 0, + ::flatbuffers::Offset rect = 0, + ::flatbuffers::Offset point = 0, + ::flatbuffers::Offset<::flatbuffers::String> str = 0) { + PartAttributeUserDataBuilder builder_(_fbb); + builder_.add_str(str); + builder_.add_point(point); + builder_.add_rect(rect); + builder_.add_integer(integer); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreatePartAttributeUserDataDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset integer = 0, + ::flatbuffers::Offset rect = 0, + ::flatbuffers::Offset point = 0, + const char *str = nullptr) { + auto str__ = str ? _fbb.CreateString(str) : 0; + return ss::format::CreatePartAttributeUserData( + _fbb, + integer, + rect, + point, + str__); +} + +struct SignalCommandParam FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef SignalCommandParamBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_PARAM_ID = 4, + VT_TYPE = 6, + VT_VALUE_TYPE = 8, + VT_VALUE = 10 + }; + const ::flatbuffers::String *param_id() const { + return GetPointer(VT_PARAM_ID); + } + ss::format::SignalCommandParamType type() const { + return static_cast(GetField(VT_TYPE, 0)); + } + ss::format::SignalCommandParamValue value_type() const { + return static_cast(GetField(VT_VALUE_TYPE, 0)); + } + const void *value() const { + return GetPointer(VT_VALUE); + } + const ss::format::BoolValueEntry *value_as_Bool() const { + return value_type() == ss::format::SignalCommandParamValue_Bool ? static_cast(value()) : nullptr; + } + const ss::format::IntValueEntry *value_as_Index() const { + return value_type() == ss::format::SignalCommandParamValue_Index ? static_cast(value()) : nullptr; + } + const ss::format::IntValueEntry *value_as_Integer() const { + return value_type() == ss::format::SignalCommandParamValue_Integer ? static_cast(value()) : nullptr; + } + const ss::format::FloatValueEntry *value_as_Floating() const { + return value_type() == ss::format::SignalCommandParamValue_Floating ? static_cast(value()) : nullptr; + } + const ss::format::StringValueEntry *value_as_Text() const { + return value_type() == ss::format::SignalCommandParamValue_Text ? static_cast(value()) : nullptr; + } + const ss::format::NoneValueEntry *value_as_None() const { + return value_type() == ss::format::SignalCommandParamValue_None ? static_cast(value()) : nullptr; + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_PARAM_ID) && + verifier.VerifyString(param_id()) && + VerifyField(verifier, VT_TYPE, 1) && + VerifyField(verifier, VT_VALUE_TYPE, 1) && + VerifyOffset(verifier, VT_VALUE) && + VerifySignalCommandParamValue(verifier, value(), value_type()) && + verifier.EndTable(); + } +}; + +struct SignalCommandParamBuilder { + typedef SignalCommandParam Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_param_id(::flatbuffers::Offset<::flatbuffers::String> param_id) { + fbb_.AddOffset(SignalCommandParam::VT_PARAM_ID, param_id); + } + void add_type(ss::format::SignalCommandParamType type) { + fbb_.AddElement(SignalCommandParam::VT_TYPE, static_cast(type), 0); + } + void add_value_type(ss::format::SignalCommandParamValue value_type) { + fbb_.AddElement(SignalCommandParam::VT_VALUE_TYPE, static_cast(value_type), 0); + } + void add_value(::flatbuffers::Offset value) { + fbb_.AddOffset(SignalCommandParam::VT_VALUE, value); + } + explicit SignalCommandParamBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateSignalCommandParam( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset<::flatbuffers::String> param_id = 0, + ss::format::SignalCommandParamType type = ss::format::SignalCommandParamType_Bool, + ss::format::SignalCommandParamValue value_type = ss::format::SignalCommandParamValue_NONE, + ::flatbuffers::Offset value = 0) { + SignalCommandParamBuilder builder_(_fbb); + builder_.add_value(value); + builder_.add_param_id(param_id); + builder_.add_value_type(value_type); + builder_.add_type(type); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreateSignalCommandParamDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + const char *param_id = nullptr, + ss::format::SignalCommandParamType type = ss::format::SignalCommandParamType_Bool, + ss::format::SignalCommandParamValue value_type = ss::format::SignalCommandParamValue_NONE, + ::flatbuffers::Offset value = 0) { + auto param_id__ = param_id ? _fbb.CreateString(param_id) : 0; + return ss::format::CreateSignalCommandParam( + _fbb, + param_id__, + type, + value_type, + value); +} + +struct PartAttributeSignal FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartAttributeSignalBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_ACTIVE = 4, + VT_COMMAND_ID = 6, + VT_PARAMS = 8 + }; + bool active() const { + return GetField(VT_ACTIVE, 0) != 0; + } + const ::flatbuffers::String *command_id() const { + return GetPointer(VT_COMMAND_ID); + } + const ::flatbuffers::Vector<::flatbuffers::Offset> *params() const { + return GetPointer> *>(VT_PARAMS); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_ACTIVE, 1) && + VerifyOffset(verifier, VT_COMMAND_ID) && + verifier.VerifyString(command_id()) && + VerifyOffset(verifier, VT_PARAMS) && + verifier.VerifyVector(params()) && + verifier.VerifyVectorOfTables(params()) && + verifier.EndTable(); + } +}; + +struct PartAttributeSignalBuilder { + typedef PartAttributeSignal Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_active(bool active) { + fbb_.AddElement(PartAttributeSignal::VT_ACTIVE, static_cast(active), 0); + } + void add_command_id(::flatbuffers::Offset<::flatbuffers::String> command_id) { + fbb_.AddOffset(PartAttributeSignal::VT_COMMAND_ID, command_id); + } + void add_params(::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> params) { + fbb_.AddOffset(PartAttributeSignal::VT_PARAMS, params); + } + explicit PartAttributeSignalBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartAttributeSignal( + ::flatbuffers::FlatBufferBuilder &_fbb, + bool active = false, + ::flatbuffers::Offset<::flatbuffers::String> command_id = 0, + ::flatbuffers::Offset<::flatbuffers::Vector<::flatbuffers::Offset>> params = 0) { + PartAttributeSignalBuilder builder_(_fbb); + builder_.add_params(params); + builder_.add_command_id(command_id); + builder_.add_active(active); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreatePartAttributeSignalDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + bool active = false, + const char *command_id = nullptr, + const std::vector<::flatbuffers::Offset> *params = nullptr) { + auto command_id__ = command_id ? _fbb.CreateString(command_id) : 0; + auto params__ = params ? _fbb.CreateVector<::flatbuffers::Offset>(*params) : 0; + return ss::format::CreatePartAttributeSignal( + _fbb, + active, + command_id__, + params__); +} + +struct PartAttributeAudio FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartAttributeAudioBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_SOUND_LIST_ID = 4, + VT_SOUND_NAME = 6, + VT_LOOP_NUM = 8 + }; + int32_t sound_list_id() const { + return GetField(VT_SOUND_LIST_ID, 0); + } + const ::flatbuffers::String *sound_name() const { + return GetPointer(VT_SOUND_NAME); + } + int32_t loop_num() const { + return GetField(VT_LOOP_NUM, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_SOUND_LIST_ID, 4) && + VerifyOffset(verifier, VT_SOUND_NAME) && + verifier.VerifyString(sound_name()) && + VerifyField(verifier, VT_LOOP_NUM, 4) && + verifier.EndTable(); + } +}; + +struct PartAttributeAudioBuilder { + typedef PartAttributeAudio Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_sound_list_id(int32_t sound_list_id) { + fbb_.AddElement(PartAttributeAudio::VT_SOUND_LIST_ID, sound_list_id, 0); + } + void add_sound_name(::flatbuffers::Offset<::flatbuffers::String> sound_name) { + fbb_.AddOffset(PartAttributeAudio::VT_SOUND_NAME, sound_name); + } + void add_loop_num(int32_t loop_num) { + fbb_.AddElement(PartAttributeAudio::VT_LOOP_NUM, loop_num, 0); + } + explicit PartAttributeAudioBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartAttributeAudio( + ::flatbuffers::FlatBufferBuilder &_fbb, + int32_t sound_list_id = 0, + ::flatbuffers::Offset<::flatbuffers::String> sound_name = 0, + int32_t loop_num = 0) { + PartAttributeAudioBuilder builder_(_fbb); + builder_.add_loop_num(loop_num); + builder_.add_sound_name(sound_name); + builder_.add_sound_list_id(sound_list_id); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreatePartAttributeAudioDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + int32_t sound_list_id = 0, + const char *sound_name = nullptr, + int32_t loop_num = 0) { + auto sound_name__ = sound_name ? _fbb.CreateString(sound_name) : 0; + return ss::format::CreatePartAttributeAudio( + _fbb, + sound_list_id, + sound_name__, + loop_num); +} + +struct InitialPartAttributes FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef InitialPartAttributesBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_UPDATE_FLAG = 4, + VT_CELL = 6, + VT_POSITION_X = 8, + VT_POSITION_Y = 10, + VT_POSITION_Z = 12, + VT_ROTATION_X = 14, + VT_ROTATION_Y = 16, + VT_ROTATION_Z = 18, + VT_SCALE_X = 20, + VT_SCALE_Y = 22, + VT_LOCAL_SCALE_X = 24, + VT_LOCAL_SCALE_Y = 26, + VT_ALPHA = 28, + VT_LOCAL_ALPHA = 30, + VT_PRIORITY = 32, + VT_FLIP_H = 34, + VT_FLIP_V = 36, + VT_HIDE = 38, + VT_PART_COLOR = 40, + VT_SHADER = 42, + VT_VERTEX = 44, + VT_PIVOT_X = 46, + VT_PIVOT_Y = 48, + VT_ANCHOR_X = 50, + VT_ANCHOR_Y = 52, + VT_SIZE_X = 54, + VT_SIZE_Y = 56, + VT_IMG_FLIP_H = 58, + VT_IMG_FLIP_V = 60, + VT_UV_TRANSLATION_X = 62, + VT_UV_TRANSLATION_Y = 64, + VT_UV_ROTATION_Z = 66, + VT_UV_SCALE_X = 68, + VT_UV_SCALE_Y = 70, + VT_BOUNDING_RADIUS = 72, + VT_MASK = 74, + VT_SKEW_X = 76, + VT_SKEW_Y = 78, + VT_DEFORM = 80, + VT_TEXTURE = 82 + }; + ss::format::PartAttributesUpdateFlags update_flag() const { + return static_cast(GetField(VT_UPDATE_FLAG, 0)); + } + const ss::format::PartAttributeCell *cell() const { + return GetPointer(VT_CELL); + } + float position_x() const { + return GetField(VT_POSITION_X, 0.0f); + } + float position_y() const { + return GetField(VT_POSITION_Y, 0.0f); + } + float position_z() const { + return GetField(VT_POSITION_Z, 0.0f); + } + float rotation_x() const { + return GetField(VT_ROTATION_X, 0.0f); + } + float rotation_y() const { + return GetField(VT_ROTATION_Y, 0.0f); + } + float rotation_z() const { + return GetField(VT_ROTATION_Z, 0.0f); + } + float scale_x() const { + return GetField(VT_SCALE_X, 1.0f); + } + float scale_y() const { + return GetField(VT_SCALE_Y, 1.0f); + } + float local_scale_x() const { + return GetField(VT_LOCAL_SCALE_X, 1.0f); + } + float local_scale_y() const { + return GetField(VT_LOCAL_SCALE_Y, 1.0f); + } + float alpha() const { + return GetField(VT_ALPHA, 1.0f); + } + float local_alpha() const { + return GetField(VT_LOCAL_ALPHA, 1.0f); + } + float priority() const { + return GetField(VT_PRIORITY, 0.0f); + } + bool flip_h() const { + return GetField(VT_FLIP_H, 0) != 0; + } + bool flip_v() const { + return GetField(VT_FLIP_V, 0) != 0; + } + bool hide() const { + return GetField(VT_HIDE, 0) != 0; + } + const ss::format::PartAttributePartColor *part_color() const { + return GetPointer(VT_PART_COLOR); + } + const ss::format::PartAttributeShader *shader() const { + return GetPointer(VT_SHADER); + } + const ss::format::PartAttributeVertex *vertex() const { + return GetPointer(VT_VERTEX); + } + float pivot_x() const { + return GetField(VT_PIVOT_X, 0.0f); + } + float pivot_y() const { + return GetField(VT_PIVOT_Y, 0.0f); + } + float anchor_x() const { + return GetField(VT_ANCHOR_X, 0.0f); + } + float anchor_y() const { + return GetField(VT_ANCHOR_Y, 0.0f); + } + float size_x() const { + return GetField(VT_SIZE_X, 1.0f); + } + float size_y() const { + return GetField(VT_SIZE_Y, 1.0f); + } + bool img_flip_h() const { + return GetField(VT_IMG_FLIP_H, 0) != 0; + } + bool img_flip_v() const { + return GetField(VT_IMG_FLIP_V, 0) != 0; + } + float uv_translation_x() const { + return GetField(VT_UV_TRANSLATION_X, 0.0f); + } + float uv_translation_y() const { + return GetField(VT_UV_TRANSLATION_Y, 0.0f); + } + float uv_rotation_z() const { + return GetField(VT_UV_ROTATION_Z, 0.0f); + } + float uv_scale_x() const { + return GetField(VT_UV_SCALE_X, 1.0f); + } + float uv_scale_y() const { + return GetField(VT_UV_SCALE_Y, 1.0f); + } + float bounding_radius() const { + return GetField(VT_BOUNDING_RADIUS, 0.0f); + } + float mask() const { + return GetField(VT_MASK, 0.0f); + } + float skew_x() const { + return GetField(VT_SKEW_X, 0.0f); + } + float skew_y() const { + return GetField(VT_SKEW_Y, 0.0f); + } + const ss::format::PartAttributeDeform *deform() const { + return GetPointer(VT_DEFORM); + } + uint32_t texture() const { + return GetField(VT_TEXTURE, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_UPDATE_FLAG, 8) && + VerifyOffset(verifier, VT_CELL) && + verifier.VerifyTable(cell()) && + VerifyField(verifier, VT_POSITION_X, 4) && + VerifyField(verifier, VT_POSITION_Y, 4) && + VerifyField(verifier, VT_POSITION_Z, 4) && + VerifyField(verifier, VT_ROTATION_X, 4) && + VerifyField(verifier, VT_ROTATION_Y, 4) && + VerifyField(verifier, VT_ROTATION_Z, 4) && + VerifyField(verifier, VT_SCALE_X, 4) && + VerifyField(verifier, VT_SCALE_Y, 4) && + VerifyField(verifier, VT_LOCAL_SCALE_X, 4) && + VerifyField(verifier, VT_LOCAL_SCALE_Y, 4) && + VerifyField(verifier, VT_ALPHA, 4) && + VerifyField(verifier, VT_LOCAL_ALPHA, 4) && + VerifyField(verifier, VT_PRIORITY, 4) && + VerifyField(verifier, VT_FLIP_H, 1) && + VerifyField(verifier, VT_FLIP_V, 1) && + VerifyField(verifier, VT_HIDE, 1) && + VerifyOffset(verifier, VT_PART_COLOR) && + verifier.VerifyTable(part_color()) && + VerifyOffset(verifier, VT_SHADER) && + verifier.VerifyTable(shader()) && + VerifyOffset(verifier, VT_VERTEX) && + verifier.VerifyTable(vertex()) && + VerifyField(verifier, VT_PIVOT_X, 4) && + VerifyField(verifier, VT_PIVOT_Y, 4) && + VerifyField(verifier, VT_ANCHOR_X, 4) && + VerifyField(verifier, VT_ANCHOR_Y, 4) && + VerifyField(verifier, VT_SIZE_X, 4) && + VerifyField(verifier, VT_SIZE_Y, 4) && + VerifyField(verifier, VT_IMG_FLIP_H, 1) && + VerifyField(verifier, VT_IMG_FLIP_V, 1) && + VerifyField(verifier, VT_UV_TRANSLATION_X, 4) && + VerifyField(verifier, VT_UV_TRANSLATION_Y, 4) && + VerifyField(verifier, VT_UV_ROTATION_Z, 4) && + VerifyField(verifier, VT_UV_SCALE_X, 4) && + VerifyField(verifier, VT_UV_SCALE_Y, 4) && + VerifyField(verifier, VT_BOUNDING_RADIUS, 4) && + VerifyField(verifier, VT_MASK, 4) && + VerifyField(verifier, VT_SKEW_X, 4) && + VerifyField(verifier, VT_SKEW_Y, 4) && + VerifyOffset(verifier, VT_DEFORM) && + verifier.VerifyTable(deform()) && + VerifyField(verifier, VT_TEXTURE, 4) && + verifier.EndTable(); + } +}; + +struct InitialPartAttributesBuilder { + typedef InitialPartAttributes Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_update_flag(ss::format::PartAttributesUpdateFlags update_flag) { + fbb_.AddElement(InitialPartAttributes::VT_UPDATE_FLAG, static_cast(update_flag), 0); + } + void add_cell(::flatbuffers::Offset cell) { + fbb_.AddOffset(InitialPartAttributes::VT_CELL, cell); + } + void add_position_x(float position_x) { + fbb_.AddElement(InitialPartAttributes::VT_POSITION_X, position_x, 0.0f); + } + void add_position_y(float position_y) { + fbb_.AddElement(InitialPartAttributes::VT_POSITION_Y, position_y, 0.0f); + } + void add_position_z(float position_z) { + fbb_.AddElement(InitialPartAttributes::VT_POSITION_Z, position_z, 0.0f); + } + void add_rotation_x(float rotation_x) { + fbb_.AddElement(InitialPartAttributes::VT_ROTATION_X, rotation_x, 0.0f); + } + void add_rotation_y(float rotation_y) { + fbb_.AddElement(InitialPartAttributes::VT_ROTATION_Y, rotation_y, 0.0f); + } + void add_rotation_z(float rotation_z) { + fbb_.AddElement(InitialPartAttributes::VT_ROTATION_Z, rotation_z, 0.0f); + } + void add_scale_x(float scale_x) { + fbb_.AddElement(InitialPartAttributes::VT_SCALE_X, scale_x, 1.0f); + } + void add_scale_y(float scale_y) { + fbb_.AddElement(InitialPartAttributes::VT_SCALE_Y, scale_y, 1.0f); + } + void add_local_scale_x(float local_scale_x) { + fbb_.AddElement(InitialPartAttributes::VT_LOCAL_SCALE_X, local_scale_x, 1.0f); + } + void add_local_scale_y(float local_scale_y) { + fbb_.AddElement(InitialPartAttributes::VT_LOCAL_SCALE_Y, local_scale_y, 1.0f); + } + void add_alpha(float alpha) { + fbb_.AddElement(InitialPartAttributes::VT_ALPHA, alpha, 1.0f); + } + void add_local_alpha(float local_alpha) { + fbb_.AddElement(InitialPartAttributes::VT_LOCAL_ALPHA, local_alpha, 1.0f); + } + void add_priority(float priority) { + fbb_.AddElement(InitialPartAttributes::VT_PRIORITY, priority, 0.0f); + } + void add_flip_h(bool flip_h) { + fbb_.AddElement(InitialPartAttributes::VT_FLIP_H, static_cast(flip_h), 0); + } + void add_flip_v(bool flip_v) { + fbb_.AddElement(InitialPartAttributes::VT_FLIP_V, static_cast(flip_v), 0); + } + void add_hide(bool hide) { + fbb_.AddElement(InitialPartAttributes::VT_HIDE, static_cast(hide), 0); + } + void add_part_color(::flatbuffers::Offset part_color) { + fbb_.AddOffset(InitialPartAttributes::VT_PART_COLOR, part_color); + } + void add_shader(::flatbuffers::Offset shader) { + fbb_.AddOffset(InitialPartAttributes::VT_SHADER, shader); + } + void add_vertex(::flatbuffers::Offset vertex) { + fbb_.AddOffset(InitialPartAttributes::VT_VERTEX, vertex); + } + void add_pivot_x(float pivot_x) { + fbb_.AddElement(InitialPartAttributes::VT_PIVOT_X, pivot_x, 0.0f); + } + void add_pivot_y(float pivot_y) { + fbb_.AddElement(InitialPartAttributes::VT_PIVOT_Y, pivot_y, 0.0f); + } + void add_anchor_x(float anchor_x) { + fbb_.AddElement(InitialPartAttributes::VT_ANCHOR_X, anchor_x, 0.0f); + } + void add_anchor_y(float anchor_y) { + fbb_.AddElement(InitialPartAttributes::VT_ANCHOR_Y, anchor_y, 0.0f); + } + void add_size_x(float size_x) { + fbb_.AddElement(InitialPartAttributes::VT_SIZE_X, size_x, 1.0f); + } + void add_size_y(float size_y) { + fbb_.AddElement(InitialPartAttributes::VT_SIZE_Y, size_y, 1.0f); + } + void add_img_flip_h(bool img_flip_h) { + fbb_.AddElement(InitialPartAttributes::VT_IMG_FLIP_H, static_cast(img_flip_h), 0); + } + void add_img_flip_v(bool img_flip_v) { + fbb_.AddElement(InitialPartAttributes::VT_IMG_FLIP_V, static_cast(img_flip_v), 0); + } + void add_uv_translation_x(float uv_translation_x) { + fbb_.AddElement(InitialPartAttributes::VT_UV_TRANSLATION_X, uv_translation_x, 0.0f); + } + void add_uv_translation_y(float uv_translation_y) { + fbb_.AddElement(InitialPartAttributes::VT_UV_TRANSLATION_Y, uv_translation_y, 0.0f); + } + void add_uv_rotation_z(float uv_rotation_z) { + fbb_.AddElement(InitialPartAttributes::VT_UV_ROTATION_Z, uv_rotation_z, 0.0f); + } + void add_uv_scale_x(float uv_scale_x) { + fbb_.AddElement(InitialPartAttributes::VT_UV_SCALE_X, uv_scale_x, 1.0f); + } + void add_uv_scale_y(float uv_scale_y) { + fbb_.AddElement(InitialPartAttributes::VT_UV_SCALE_Y, uv_scale_y, 1.0f); + } + void add_bounding_radius(float bounding_radius) { + fbb_.AddElement(InitialPartAttributes::VT_BOUNDING_RADIUS, bounding_radius, 0.0f); + } + void add_mask(float mask) { + fbb_.AddElement(InitialPartAttributes::VT_MASK, mask, 0.0f); + } + void add_skew_x(float skew_x) { + fbb_.AddElement(InitialPartAttributes::VT_SKEW_X, skew_x, 0.0f); + } + void add_skew_y(float skew_y) { + fbb_.AddElement(InitialPartAttributes::VT_SKEW_Y, skew_y, 0.0f); + } + void add_deform(::flatbuffers::Offset deform) { + fbb_.AddOffset(InitialPartAttributes::VT_DEFORM, deform); + } + void add_texture(uint32_t texture) { + fbb_.AddElement(InitialPartAttributes::VT_TEXTURE, texture, 0); + } + explicit InitialPartAttributesBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateInitialPartAttributes( + ::flatbuffers::FlatBufferBuilder &_fbb, + ss::format::PartAttributesUpdateFlags update_flag = static_cast(0), + ::flatbuffers::Offset cell = 0, + float position_x = 0.0f, + float position_y = 0.0f, + float position_z = 0.0f, + float rotation_x = 0.0f, + float rotation_y = 0.0f, + float rotation_z = 0.0f, + float scale_x = 1.0f, + float scale_y = 1.0f, + float local_scale_x = 1.0f, + float local_scale_y = 1.0f, + float alpha = 1.0f, + float local_alpha = 1.0f, + float priority = 0.0f, + bool flip_h = false, + bool flip_v = false, + bool hide = false, + ::flatbuffers::Offset part_color = 0, + ::flatbuffers::Offset shader = 0, + ::flatbuffers::Offset vertex = 0, + float pivot_x = 0.0f, + float pivot_y = 0.0f, + float anchor_x = 0.0f, + float anchor_y = 0.0f, + float size_x = 1.0f, + float size_y = 1.0f, + bool img_flip_h = false, + bool img_flip_v = false, + float uv_translation_x = 0.0f, + float uv_translation_y = 0.0f, + float uv_rotation_z = 0.0f, + float uv_scale_x = 1.0f, + float uv_scale_y = 1.0f, + float bounding_radius = 0.0f, + float mask = 0.0f, + float skew_x = 0.0f, + float skew_y = 0.0f, + ::flatbuffers::Offset deform = 0, + uint32_t texture = 0) { + InitialPartAttributesBuilder builder_(_fbb); + builder_.add_update_flag(update_flag); + builder_.add_texture(texture); + builder_.add_deform(deform); + builder_.add_skew_y(skew_y); + builder_.add_skew_x(skew_x); + builder_.add_mask(mask); + builder_.add_bounding_radius(bounding_radius); + builder_.add_uv_scale_y(uv_scale_y); + builder_.add_uv_scale_x(uv_scale_x); + builder_.add_uv_rotation_z(uv_rotation_z); + builder_.add_uv_translation_y(uv_translation_y); + builder_.add_uv_translation_x(uv_translation_x); + builder_.add_size_y(size_y); + builder_.add_size_x(size_x); + builder_.add_anchor_y(anchor_y); + builder_.add_anchor_x(anchor_x); + builder_.add_pivot_y(pivot_y); + builder_.add_pivot_x(pivot_x); + builder_.add_vertex(vertex); + builder_.add_shader(shader); + builder_.add_part_color(part_color); + builder_.add_priority(priority); + builder_.add_local_alpha(local_alpha); + builder_.add_alpha(alpha); + builder_.add_local_scale_y(local_scale_y); + builder_.add_local_scale_x(local_scale_x); + builder_.add_scale_y(scale_y); + builder_.add_scale_x(scale_x); + builder_.add_rotation_z(rotation_z); + builder_.add_rotation_y(rotation_y); + builder_.add_rotation_x(rotation_x); + builder_.add_position_z(position_z); + builder_.add_position_y(position_y); + builder_.add_position_x(position_x); + builder_.add_cell(cell); + builder_.add_img_flip_v(img_flip_v); + builder_.add_img_flip_h(img_flip_h); + builder_.add_hide(hide); + builder_.add_flip_v(flip_v); + builder_.add_flip_h(flip_h); + return builder_.Finish(); +} + +struct InitialEvents FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef InitialEventsBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_USER = 4, + VT_SIGNAL = 6, + VT_AUDIO = 8, + VT_INSTANCE = 10, + VT_EFFECT = 12 + }; + const ss::format::PartAttributeUserData *user() const { + return GetPointer(VT_USER); + } + const ss::format::PartAttributeSignal *signal() const { + return GetPointer(VT_SIGNAL); + } + const ss::format::PartAttributeAudio *audio() const { + return GetPointer(VT_AUDIO); + } + const ss::format::PartAttributeInstance *instance() const { + return GetPointer(VT_INSTANCE); + } + const ss::format::PartAttributeEffect *effect() const { + return GetPointer(VT_EFFECT); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_USER) && + verifier.VerifyTable(user()) && + VerifyOffset(verifier, VT_SIGNAL) && + verifier.VerifyTable(signal()) && + VerifyOffset(verifier, VT_AUDIO) && + verifier.VerifyTable(audio()) && + VerifyOffset(verifier, VT_INSTANCE) && + verifier.VerifyTable(instance()) && + VerifyOffset(verifier, VT_EFFECT) && + verifier.VerifyTable(effect()) && + verifier.EndTable(); + } +}; + +struct InitialEventsBuilder { + typedef InitialEvents Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_user(::flatbuffers::Offset user) { + fbb_.AddOffset(InitialEvents::VT_USER, user); + } + void add_signal(::flatbuffers::Offset signal) { + fbb_.AddOffset(InitialEvents::VT_SIGNAL, signal); + } + void add_audio(::flatbuffers::Offset audio) { + fbb_.AddOffset(InitialEvents::VT_AUDIO, audio); + } + void add_instance(::flatbuffers::Offset instance) { + fbb_.AddOffset(InitialEvents::VT_INSTANCE, instance); + } + void add_effect(::flatbuffers::Offset effect) { + fbb_.AddOffset(InitialEvents::VT_EFFECT, effect); + } + explicit InitialEventsBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreateInitialEvents( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset user = 0, + ::flatbuffers::Offset signal = 0, + ::flatbuffers::Offset audio = 0, + ::flatbuffers::Offset instance = 0, + ::flatbuffers::Offset effect = 0) { + InitialEventsBuilder builder_(_fbb); + builder_.add_effect(effect); + builder_.add_instance(instance); + builder_.add_audio(audio); + builder_.add_signal(signal); + builder_.add_user(user); + return builder_.Finish(); +} + +struct PartTypeShape FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartTypeShapeBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_SHAPE_TYPE = 4, + VT_SHAPE_MASK = 6 + }; + ss::format::ShapeType shape_type() const { + return static_cast(GetField(VT_SHAPE_TYPE, 0)); + } + bool shape_mask() const { + return GetField(VT_SHAPE_MASK, 0) != 0; + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_SHAPE_TYPE, 1) && + VerifyField(verifier, VT_SHAPE_MASK, 1) && + verifier.EndTable(); + } +}; + +struct PartTypeShapeBuilder { + typedef PartTypeShape Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_shape_type(ss::format::ShapeType shape_type) { + fbb_.AddElement(PartTypeShape::VT_SHAPE_TYPE, static_cast(shape_type), 0); + } + void add_shape_mask(bool shape_mask) { + fbb_.AddElement(PartTypeShape::VT_SHAPE_MASK, static_cast(shape_mask), 0); + } + explicit PartTypeShapeBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartTypeShape( + ::flatbuffers::FlatBufferBuilder &_fbb, + ss::format::ShapeType shape_type = ss::format::ShapeType_Unknown, + bool shape_mask = false) { + PartTypeShapeBuilder builder_(_fbb); + builder_.add_shape_mask(shape_mask); + builder_.add_shape_type(shape_type); + return builder_.Finish(); +} + +struct PartTypeText FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartTypeTextBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_TEXT = 4, + VT_TEXT_BITMAP = 6, + VT_TEXT_FAMILY = 8, + VT_TEXT_CHAR_MAP = 10, + VT_TEXT_SIZE = 12, + VT_TEXT_SPACE = 14, + VT_TEXT_SMOOTH = 16, + VT_TEXT_MASK = 18, + VT_TEXT_WIDTH = 20, + VT_TEXT_HEIGHT = 22, + VT_E_ANCHOR = 24 + }; + const ::flatbuffers::String *text() const { + return GetPointer(VT_TEXT); + } + bool text_bitmap() const { + return GetField(VT_TEXT_BITMAP, 0) != 0; + } + const ::flatbuffers::String *text_family() const { + return GetPointer(VT_TEXT_FAMILY); + } + const ::flatbuffers::String *text_char_map() const { + return GetPointer(VT_TEXT_CHAR_MAP); + } + int32_t text_size() const { + return GetField(VT_TEXT_SIZE, 0); + } + float text_space() const { + return GetField(VT_TEXT_SPACE, 0.0f); + } + bool text_smooth() const { + return GetField(VT_TEXT_SMOOTH, 0) != 0; + } + bool text_mask() const { + return GetField(VT_TEXT_MASK, 0) != 0; + } + int32_t text_width() const { + return GetField(VT_TEXT_WIDTH, 0); + } + int32_t text_height() const { + return GetField(VT_TEXT_HEIGHT, 0); + } + ss::format::TextAnchor e_anchor() const { + return static_cast(GetField(VT_E_ANCHOR, 0)); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_TEXT) && + verifier.VerifyString(text()) && + VerifyField(verifier, VT_TEXT_BITMAP, 1) && + VerifyOffset(verifier, VT_TEXT_FAMILY) && + verifier.VerifyString(text_family()) && + VerifyOffset(verifier, VT_TEXT_CHAR_MAP) && + verifier.VerifyString(text_char_map()) && + VerifyField(verifier, VT_TEXT_SIZE, 4) && + VerifyField(verifier, VT_TEXT_SPACE, 4) && + VerifyField(verifier, VT_TEXT_SMOOTH, 1) && + VerifyField(verifier, VT_TEXT_MASK, 1) && + VerifyField(verifier, VT_TEXT_WIDTH, 4) && + VerifyField(verifier, VT_TEXT_HEIGHT, 4) && + VerifyField(verifier, VT_E_ANCHOR, 1) && + verifier.EndTable(); + } +}; + +struct PartTypeTextBuilder { + typedef PartTypeText Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_text(::flatbuffers::Offset<::flatbuffers::String> text) { + fbb_.AddOffset(PartTypeText::VT_TEXT, text); + } + void add_text_bitmap(bool text_bitmap) { + fbb_.AddElement(PartTypeText::VT_TEXT_BITMAP, static_cast(text_bitmap), 0); + } + void add_text_family(::flatbuffers::Offset<::flatbuffers::String> text_family) { + fbb_.AddOffset(PartTypeText::VT_TEXT_FAMILY, text_family); + } + void add_text_char_map(::flatbuffers::Offset<::flatbuffers::String> text_char_map) { + fbb_.AddOffset(PartTypeText::VT_TEXT_CHAR_MAP, text_char_map); + } + void add_text_size(int32_t text_size) { + fbb_.AddElement(PartTypeText::VT_TEXT_SIZE, text_size, 0); + } + void add_text_space(float text_space) { + fbb_.AddElement(PartTypeText::VT_TEXT_SPACE, text_space, 0.0f); + } + void add_text_smooth(bool text_smooth) { + fbb_.AddElement(PartTypeText::VT_TEXT_SMOOTH, static_cast(text_smooth), 0); + } + void add_text_mask(bool text_mask) { + fbb_.AddElement(PartTypeText::VT_TEXT_MASK, static_cast(text_mask), 0); + } + void add_text_width(int32_t text_width) { + fbb_.AddElement(PartTypeText::VT_TEXT_WIDTH, text_width, 0); + } + void add_text_height(int32_t text_height) { + fbb_.AddElement(PartTypeText::VT_TEXT_HEIGHT, text_height, 0); + } + void add_e_anchor(ss::format::TextAnchor e_anchor) { + fbb_.AddElement(PartTypeText::VT_E_ANCHOR, static_cast(e_anchor), 0); + } + explicit PartTypeTextBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartTypeText( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset<::flatbuffers::String> text = 0, + bool text_bitmap = false, + ::flatbuffers::Offset<::flatbuffers::String> text_family = 0, + ::flatbuffers::Offset<::flatbuffers::String> text_char_map = 0, + int32_t text_size = 0, + float text_space = 0.0f, + bool text_smooth = false, + bool text_mask = false, + int32_t text_width = 0, + int32_t text_height = 0, + ss::format::TextAnchor e_anchor = ss::format::TextAnchor_LT) { + PartTypeTextBuilder builder_(_fbb); + builder_.add_text_height(text_height); + builder_.add_text_width(text_width); + builder_.add_text_space(text_space); + builder_.add_text_size(text_size); + builder_.add_text_char_map(text_char_map); + builder_.add_text_family(text_family); + builder_.add_text(text); + builder_.add_e_anchor(e_anchor); + builder_.add_text_mask(text_mask); + builder_.add_text_smooth(text_smooth); + builder_.add_text_bitmap(text_bitmap); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreatePartTypeTextDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + const char *text = nullptr, + bool text_bitmap = false, + const char *text_family = nullptr, + const char *text_char_map = nullptr, + int32_t text_size = 0, + float text_space = 0.0f, + bool text_smooth = false, + bool text_mask = false, + int32_t text_width = 0, + int32_t text_height = 0, + ss::format::TextAnchor e_anchor = ss::format::TextAnchor_LT) { + auto text__ = text ? _fbb.CreateString(text) : 0; + auto text_family__ = text_family ? _fbb.CreateString(text_family) : 0; + auto text_char_map__ = text_char_map ? _fbb.CreateString(text_char_map) : 0; + return ss::format::CreatePartTypeText( + _fbb, + text__, + text_bitmap, + text_family__, + text_char_map__, + text_size, + text_space, + text_smooth, + text_mask, + text_width, + text_height, + e_anchor); +} + +struct PartTypeNines FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartTypeNinesBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_NINES_MARGIN_L = 4, + VT_NINES_MARGIN_R = 6, + VT_NINES_MARGIN_T = 8, + VT_NINES_MARGIN_B = 10, + VT_NINES_FILL_MODE = 12, + VT_NINES_MASK = 14 + }; + int32_t nines_margin_l() const { + return GetField(VT_NINES_MARGIN_L, 0); + } + int32_t nines_margin_r() const { + return GetField(VT_NINES_MARGIN_R, 0); + } + int32_t nines_margin_t() const { + return GetField(VT_NINES_MARGIN_T, 0); + } + int32_t nines_margin_b() const { + return GetField(VT_NINES_MARGIN_B, 0); + } + int32_t nines_fill_mode() const { + return GetField(VT_NINES_FILL_MODE, 0); + } + bool nines_mask() const { + return GetField(VT_NINES_MASK, 0) != 0; + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_NINES_MARGIN_L, 4) && + VerifyField(verifier, VT_NINES_MARGIN_R, 4) && + VerifyField(verifier, VT_NINES_MARGIN_T, 4) && + VerifyField(verifier, VT_NINES_MARGIN_B, 4) && + VerifyField(verifier, VT_NINES_FILL_MODE, 4) && + VerifyField(verifier, VT_NINES_MASK, 1) && + verifier.EndTable(); + } +}; + +struct PartTypeNinesBuilder { + typedef PartTypeNines Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_nines_margin_l(int32_t nines_margin_l) { + fbb_.AddElement(PartTypeNines::VT_NINES_MARGIN_L, nines_margin_l, 0); + } + void add_nines_margin_r(int32_t nines_margin_r) { + fbb_.AddElement(PartTypeNines::VT_NINES_MARGIN_R, nines_margin_r, 0); + } + void add_nines_margin_t(int32_t nines_margin_t) { + fbb_.AddElement(PartTypeNines::VT_NINES_MARGIN_T, nines_margin_t, 0); + } + void add_nines_margin_b(int32_t nines_margin_b) { + fbb_.AddElement(PartTypeNines::VT_NINES_MARGIN_B, nines_margin_b, 0); + } + void add_nines_fill_mode(int32_t nines_fill_mode) { + fbb_.AddElement(PartTypeNines::VT_NINES_FILL_MODE, nines_fill_mode, 0); + } + void add_nines_mask(bool nines_mask) { + fbb_.AddElement(PartTypeNines::VT_NINES_MASK, static_cast(nines_mask), 0); + } + explicit PartTypeNinesBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartTypeNines( + ::flatbuffers::FlatBufferBuilder &_fbb, + int32_t nines_margin_l = 0, + int32_t nines_margin_r = 0, + int32_t nines_margin_t = 0, + int32_t nines_margin_b = 0, + int32_t nines_fill_mode = 0, + bool nines_mask = false) { + PartTypeNinesBuilder builder_(_fbb); + builder_.add_nines_fill_mode(nines_fill_mode); + builder_.add_nines_margin_b(nines_margin_b); + builder_.add_nines_margin_t(nines_margin_t); + builder_.add_nines_margin_r(nines_margin_r); + builder_.add_nines_margin_l(nines_margin_l); + builder_.add_nines_mask(nines_mask); + return builder_.Finish(); +} + +struct PartTypeInstance FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartTypeInstanceBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_REF_ANIME_HASH = 4 + }; + uint32_t ref_anime_hash() const { + return GetField(VT_REF_ANIME_HASH, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_REF_ANIME_HASH, 4) && + verifier.EndTable(); + } +}; + +struct PartTypeInstanceBuilder { + typedef PartTypeInstance Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_ref_anime_hash(uint32_t ref_anime_hash) { + fbb_.AddElement(PartTypeInstance::VT_REF_ANIME_HASH, ref_anime_hash, 0); + } + explicit PartTypeInstanceBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartTypeInstance( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t ref_anime_hash = 0) { + PartTypeInstanceBuilder builder_(_fbb); + builder_.add_ref_anime_hash(ref_anime_hash); + return builder_.Finish(); +} + +struct PartTypeEffect FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartTypeEffectBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_REF_EFFECT_NAME_HASH = 4 + }; + uint32_t ref_effect_name_hash() const { + return GetField(VT_REF_EFFECT_NAME_HASH, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_REF_EFFECT_NAME_HASH, 4) && + verifier.EndTable(); + } +}; + +struct PartTypeEffectBuilder { + typedef PartTypeEffect Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_ref_effect_name_hash(uint32_t ref_effect_name_hash) { + fbb_.AddElement(PartTypeEffect::VT_REF_EFFECT_NAME_HASH, ref_effect_name_hash, 0); + } + explicit PartTypeEffectBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartTypeEffect( + ::flatbuffers::FlatBufferBuilder &_fbb, + uint32_t ref_effect_name_hash = 0) { + PartTypeEffectBuilder builder_(_fbb); + builder_.add_ref_effect_name_hash(ref_effect_name_hash); + return builder_.Finish(); +} + +struct PartData FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef PartDataBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_NAME = 4, + VT_PARENT_INDEX = 6, + VT_BOUNDS_TYPE = 8, + VT_BLEND_TYPE = 10, + VT_PART_TYPE_TYPE = 12, + VT_PART_TYPE = 14 + }; + const ::flatbuffers::String *name() const { + return GetPointer(VT_NAME); + } + int16_t parent_index() const { + return GetField(VT_PARENT_INDEX, 0); + } + ss::format::BoundsType bounds_type() const { + return static_cast(GetField(VT_BOUNDS_TYPE, 0)); + } + ss::format::BlendType blend_type() const { + return static_cast(GetField(VT_BLEND_TYPE, 0)); + } + ss::format::PartType part_type_type() const { + return static_cast(GetField(VT_PART_TYPE_TYPE, 0)); + } + const void *part_type() const { + return GetPointer(VT_PART_TYPE); + } + const ss::format::NoneValueEntry *part_type_as_PartTypeNull() const { + return part_type_type() == ss::format::PartType_PartTypeNull ? static_cast(part_type()) : nullptr; + } + const ss::format::NoneValueEntry *part_type_as_PartTypeNormal() const { + return part_type_type() == ss::format::PartType_PartTypeNormal ? static_cast(part_type()) : nullptr; + } + const ss::format::PartTypeShape *part_type_as_PartTypeShape() const { + return part_type_type() == ss::format::PartType_PartTypeShape ? static_cast(part_type()) : nullptr; + } + const ss::format::PartTypeText *part_type_as_PartTypeText() const { + return part_type_type() == ss::format::PartType_PartTypeText ? static_cast(part_type()) : nullptr; + } + const ss::format::PartTypeNines *part_type_as_PartTypeNines() const { + return part_type_type() == ss::format::PartType_PartTypeNines ? static_cast(part_type()) : nullptr; + } + const ss::format::PartTypeInstance *part_type_as_PartTypeInstance() const { + return part_type_type() == ss::format::PartType_PartTypeInstance ? static_cast(part_type()) : nullptr; + } + const ss::format::NoneValueEntry *part_type_as_PartTypeArmature() const { + return part_type_type() == ss::format::PartType_PartTypeArmature ? static_cast(part_type()) : nullptr; + } + const ss::format::PartTypeEffect *part_type_as_PartTypeEffect() const { + return part_type_type() == ss::format::PartType_PartTypeEffect ? static_cast(part_type()) : nullptr; + } + const ss::format::NoneValueEntry *part_type_as_PartTypeMesh() const { + return part_type_type() == ss::format::PartType_PartTypeMesh ? static_cast(part_type()) : nullptr; + } + const ss::format::NoneValueEntry *part_type_as_PartTypeMovenode() const { + return part_type_type() == ss::format::PartType_PartTypeMovenode ? static_cast(part_type()) : nullptr; + } + const ss::format::NoneValueEntry *part_type_as_PartTypeConstraint() const { + return part_type_type() == ss::format::PartType_PartTypeConstraint ? static_cast(part_type()) : nullptr; + } + const ss::format::NoneValueEntry *part_type_as_PartTypeMask() const { + return part_type_type() == ss::format::PartType_PartTypeMask ? static_cast(part_type()) : nullptr; + } + const ss::format::NoneValueEntry *part_type_as_PartTypeJoint() const { + return part_type_type() == ss::format::PartType_PartTypeJoint ? static_cast(part_type()) : nullptr; + } + const ss::format::NoneValueEntry *part_type_as_PartTypeBonepoint() const { + return part_type_type() == ss::format::PartType_PartTypeBonepoint ? static_cast(part_type()) : nullptr; + } + const ss::format::NoneValueEntry *part_type_as_PartTypeTransformConstraint() const { + return part_type_type() == ss::format::PartType_PartTypeTransformConstraint ? static_cast(part_type()) : nullptr; + } + const ss::format::NoneValueEntry *part_type_as_PartTypeCamera() const { + return part_type_type() == ss::format::PartType_PartTypeCamera ? static_cast(part_type()) : nullptr; + } + const ss::format::NoneValueEntry *part_type_as_PartTypeAudio() const { + return part_type_type() == ss::format::PartType_PartTypeAudio ? static_cast(part_type()) : nullptr; + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyOffset(verifier, VT_NAME) && + verifier.VerifyString(name()) && + VerifyField(verifier, VT_PARENT_INDEX, 2) && + VerifyField(verifier, VT_BOUNDS_TYPE, 1) && + VerifyField(verifier, VT_BLEND_TYPE, 1) && + VerifyField(verifier, VT_PART_TYPE_TYPE, 1) && + VerifyOffset(verifier, VT_PART_TYPE) && + VerifyPartType(verifier, part_type(), part_type_type()) && + verifier.EndTable(); + } +}; + +struct PartDataBuilder { + typedef PartData Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_name(::flatbuffers::Offset<::flatbuffers::String> name) { + fbb_.AddOffset(PartData::VT_NAME, name); + } + void add_parent_index(int16_t parent_index) { + fbb_.AddElement(PartData::VT_PARENT_INDEX, parent_index, 0); + } + void add_bounds_type(ss::format::BoundsType bounds_type) { + fbb_.AddElement(PartData::VT_BOUNDS_TYPE, static_cast(bounds_type), 0); + } + void add_blend_type(ss::format::BlendType blend_type) { + fbb_.AddElement(PartData::VT_BLEND_TYPE, static_cast(blend_type), 0); + } + void add_part_type_type(ss::format::PartType part_type_type) { + fbb_.AddElement(PartData::VT_PART_TYPE_TYPE, static_cast(part_type_type), 0); + } + void add_part_type(::flatbuffers::Offset part_type) { + fbb_.AddOffset(PartData::VT_PART_TYPE, part_type); + } + explicit PartDataBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset Finish() { + const auto end = fbb_.EndTable(start_); + auto o = ::flatbuffers::Offset(end); + return o; + } +}; + +inline ::flatbuffers::Offset CreatePartData( + ::flatbuffers::FlatBufferBuilder &_fbb, + ::flatbuffers::Offset<::flatbuffers::String> name = 0, + int16_t parent_index = 0, + ss::format::BoundsType bounds_type = ss::format::BoundsType_None, + ss::format::BlendType blend_type = ss::format::BlendType_Mix, + ss::format::PartType part_type_type = ss::format::PartType_NONE, + ::flatbuffers::Offset part_type = 0) { + PartDataBuilder builder_(_fbb); + builder_.add_part_type(part_type); + builder_.add_name(name); + builder_.add_parent_index(parent_index); + builder_.add_part_type_type(part_type_type); + builder_.add_blend_type(blend_type); + builder_.add_bounds_type(bounds_type); + return builder_.Finish(); +} + +inline ::flatbuffers::Offset CreatePartDataDirect( + ::flatbuffers::FlatBufferBuilder &_fbb, + const char *name = nullptr, + int16_t parent_index = 0, + ss::format::BoundsType bounds_type = ss::format::BoundsType_None, + ss::format::BlendType blend_type = ss::format::BlendType_Mix, + ss::format::PartType part_type_type = ss::format::PartType_NONE, + ::flatbuffers::Offset part_type = 0) { + auto name__ = name ? _fbb.CreateString(name) : 0; + return ss::format::CreatePartData( + _fbb, + name__, + parent_index, + bounds_type, + blend_type, + part_type_type, + part_type); +} + +struct Label FLATBUFFERS_FINAL_CLASS : private ::flatbuffers::Table { + typedef LabelBuilder Builder; + enum FlatBuffersVTableOffset FLATBUFFERS_VTABLE_UNDERLYING_TYPE { + VT_NAME_HASH = 4, + VT_NAME = 6, + VT_TIME = 8 + }; + uint32_t name_hash() const { + return GetField(VT_NAME_HASH, 0); + } + bool KeyCompareLessThan(const Label * const o) const { + return name_hash() < o->name_hash(); + } + int KeyCompareWithValue(uint32_t _name_hash) const { + return static_cast(name_hash() > _name_hash) - static_cast(name_hash() < _name_hash); + } + const ::flatbuffers::String *name() const { + return GetPointer(VT_NAME); + } + int32_t time() const { + return GetField(VT_TIME, 0); + } + template + bool Verify(::flatbuffers::VerifierTemplate &verifier) const { + return VerifyTableStart(verifier) && + VerifyField(verifier, VT_NAME_HASH, 4) && + VerifyOffset(verifier, VT_NAME) && + verifier.VerifyString(name()) && + VerifyField(verifier, VT_TIME, 4) && + verifier.EndTable(); + } +}; + +struct LabelBuilder { + typedef Label Table; + ::flatbuffers::FlatBufferBuilder &fbb_; + ::flatbuffers::uoffset_t start_; + void add_name_hash(uint32_t name_hash) { + fbb_.AddElement(Label::VT_NAME_HASH, name_hash, 0); + } + void add_name(::flatbuffers::Offset<::flatbuffers::String> name) { + fbb_.AddOffset(Label::VT_NAME, name); + } + void add_time(int32_t time) { + fbb_.AddElement(Label::VT_TIME, time, 0); + } + explicit LabelBuilder(::flatbuffers::FlatBufferBuilder &_fbb) + : fbb_(_fbb) { + start_ = fbb_.StartTable(); + } + ::flatbuffers::Offset