diff --git a/.gitignore b/.gitignore index 533c2c64d..d72afed9b 100644 --- a/.gitignore +++ b/.gitignore @@ -243,3 +243,4 @@ spine-c-new/codegen/dist spine-c-new/codegen/all-spine-types.json spine-c-new/codegen/spine-cpp-types.json docs/spine-runtimes-types.md +spine-c/codegen/dist diff --git a/spine-c-new/CMakeLists.txt b/spine-c-new/CMakeLists.txt deleted file mode 100644 index 1cd18ffca..000000000 --- a/spine-c-new/CMakeLists.txt +++ /dev/null @@ -1,46 +0,0 @@ -cmake_minimum_required(VERSION 3.10) -project(spine-c-new C CXX) - -set(CMAKE_C_STANDARD 99) -set(CMAKE_CXX_STANDARD 11) - -# Include the common flags (including -fno-rtti) -include(${CMAKE_CURRENT_LIST_DIR}/../flags.cmake) - -# Include spine-cpp -add_subdirectory(../spine-cpp ${CMAKE_CURRENT_BINARY_DIR}/spine-cpp) - -# Collect all source files -file(GLOB SOURCES - "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c" - "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp" -) -file(GLOB GENERATED_SOURCES - "${CMAKE_CURRENT_SOURCE_DIR}/src/generated/*.cpp" -) -list(APPEND SOURCES ${GENERATED_SOURCES}) - -# Create the library -add_library(spine-c-new STATIC ${SOURCES}) - -# Include directories -target_include_directories(spine-c-new PUBLIC - ${CMAKE_CURRENT_SOURCE_DIR}/include - ${CMAKE_CURRENT_SOURCE_DIR}/src -) - -# Link with spine-cpp -target_link_libraries(spine-c-new PRIVATE spine-cpp) - -# Add spine-cpp include directories -target_include_directories(spine-c-new PRIVATE - ../spine-cpp/spine-cpp/include -) - -# Export compile commands for better IDE support -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - -# Create test executable -add_executable(spine-c-test test/test.c) -target_link_libraries(spine-c-test spine-c-new) -target_include_directories(spine-c-test PRIVATE include) \ No newline at end of file diff --git a/spine-c/.cproject b/spine-c/.cproject deleted file mode 100644 index 74aa1cb8c..000000000 --- a/spine-c/.cproject +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/spine-c/.project b/spine-c/.project deleted file mode 100644 index 462051309..000000000 --- a/spine-c/.project +++ /dev/null @@ -1,27 +0,0 @@ - - - spine-c - - - - - - org.eclipse.cdt.managedbuilder.core.genmakebuilder - clean,full,incremental, - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/spine-c/.settings/org.eclipse.cdt.codan.core.prefs b/spine-c/.settings/org.eclipse.cdt.codan.core.prefs deleted file mode 100644 index c7be96702..000000000 --- a/spine-c/.settings/org.eclipse.cdt.codan.core.prefs +++ /dev/null @@ -1,68 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.cdt.codan.checkers.errnoreturn=Warning -org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} -org.eclipse.cdt.codan.checkers.errreturnvalue=Error -org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.checkers.noreturn=Error -org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},implicit\=>false} -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error -org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error -org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error -org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},no_break_comment\=>"no break",last_case_param\=>true,empty_case_param\=>false} -org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning -org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},unknown\=>false,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error -org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning -org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},skip\=>true} -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error -org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error -org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error -org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info -org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning -org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error -org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error -org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning -org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning -org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>()} -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},paramNot\=>false} -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning -org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},else\=>false,afterelse\=>false} -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true} -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning -org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},macro\=>true,exceptions\=>("@(\#)","$Id")} -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error -org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true}} -useParentScope=false diff --git a/spine-c/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/spine-c/.settings/org.eclipse.cdt.managedbuilder.core.prefs deleted file mode 100644 index 443688ae4..000000000 --- a/spine-c/.settings/org.eclipse.cdt.managedbuilder.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.784427509/CPATH/delimiter=; -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.784427509/CPATH/operation=remove -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.784427509/CPLUS_INCLUDE_PATH/delimiter=; -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.784427509/CPLUS_INCLUDE_PATH/operation=remove -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.784427509/C_INCLUDE_PATH/delimiter=; -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.784427509/C_INCLUDE_PATH/operation=remove -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.784427509/append=true -environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.mingw.exe.debug.784427509/appendContributed=true -environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.mingw.exe.debug.784427509/append=true -environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.mingw.exe.debug.784427509/appendContributed=true diff --git a/spine-c/CMakeLists.txt b/spine-c/CMakeLists.txt index b7e4d2aa2..1cd18ffca 100644 --- a/spine-c/CMakeLists.txt +++ b/spine-c/CMakeLists.txt @@ -1,14 +1,46 @@ cmake_minimum_required(VERSION 3.10) -project(spine-c) +project(spine-c-new C CXX) +set(CMAKE_C_STANDARD 99) +set(CMAKE_CXX_STANDARD 11) + +# Include the common flags (including -fno-rtti) include(${CMAKE_CURRENT_LIST_DIR}/../flags.cmake) -include_directories(include) -file(GLOB INCLUDES "spine-c/include/**/*.h") -file(GLOB SOURCES "spine-c/src/**/*.c") +# Include spine-cpp +add_subdirectory(../spine-cpp ${CMAKE_CURRENT_BINARY_DIR}/spine-cpp) -add_library(spine-c STATIC ${SOURCES} ${INCLUDES}) -target_include_directories(spine-c PUBLIC spine-c/include) +# Collect all source files +file(GLOB SOURCES + "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c" + "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp" +) +file(GLOB GENERATED_SOURCES + "${CMAKE_CURRENT_SOURCE_DIR}/src/generated/*.cpp" +) +list(APPEND SOURCES ${GENERATED_SOURCES}) -install(TARGETS spine-c DESTINATION dist/lib) -install(FILES ${INCLUDES} DESTINATION dist/include) \ No newline at end of file +# Create the library +add_library(spine-c-new STATIC ${SOURCES}) + +# Include directories +target_include_directories(spine-c-new PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/include + ${CMAKE_CURRENT_SOURCE_DIR}/src +) + +# Link with spine-cpp +target_link_libraries(spine-c-new PRIVATE spine-cpp) + +# Add spine-cpp include directories +target_include_directories(spine-c-new PRIVATE + ../spine-cpp/spine-cpp/include +) + +# Export compile commands for better IDE support +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +# Create test executable +add_executable(spine-c-test test/test.c) +target_link_libraries(spine-c-test spine-c-new) +target_include_directories(spine-c-test PRIVATE include) \ No newline at end of file diff --git a/spine-c/LICENSE b/spine-c/LICENSE deleted file mode 100644 index d03d3caed..000000000 --- a/spine-c/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Spine Runtimes License Agreement -Last updated April 5, 2025. Replaces all prior versions. - -Copyright (c) 2013-2025, Esoteric Software LLC - -Integration of the Spine Runtimes into software or otherwise creating -derivative works of the Spine Runtimes is permitted under the terms and -conditions of Section 2 of the Spine Editor License Agreement: -http://esotericsoftware.com/spine-editor-license - -Otherwise, it is permitted to integrate the Spine Runtimes into software -or otherwise create derivative works of the Spine Runtimes (collectively, -"Products"), provided that each user of the Products must obtain their own -Spine Editor license and redistribution of the Products in any form must -include this license and copyright notice. - -THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, -BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/spine-c/README.md b/spine-c/README.md deleted file mode 100644 index 29ff23127..000000000 --- a/spine-c/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# spine-c - -The spine-c runtime provides basic functionality to load and manipulate [Spine](http://esotericsoftware.com) skeletal animation data using ANSI C89. It does not perform rendering but can be extended to enable Spine animations for other C-based projects, including C++ or Objective-C projects. - -## Licensing - -You are welcome to evaluate the Spine Runtimes and the examples we provide in this repository free of charge. - -You can integrate the Spine Runtimes into your software free of charge, but users of your software must have their own [Spine license](https://esotericsoftware.com/spine-purchase). Please make your users aware of this requirement! This option is often chosen by those making development tools, such as an SDK, game toolkit, or software library. - -In order to distribute your software containing the Spine Runtimes to others that don't have a Spine license, you need a [Spine license](https://esotericsoftware.com/spine-purchase) at the time of integration. Then you can distribute your software containing the Spine Runtimes however you like, provided others don't modify it or use it to create new software. If others want to do that, they'll need their own Spine license. - -For the official legal terms governing the Spine Runtimes, please read the [Spine Runtimes License Agreement](http://esotericsoftware.com/spine-runtimes-license) and Section 2 of the [Spine Editor License Agreement](http://esotericsoftware.com/spine-editor-license#s2). - -## Spine version - -spine-c works with data exported from Spine 4.2.xx. - -spine-c supports all Spine features. - -## Setup - -1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it as a zip via the download button above. -1. Copy the contents of the `spine-c/spine-c/src` and `spine-c/spine-c/include` directories into your project. Be sure your header search is configured to find the contents of the `spine-c/spine-c/include` directory. Note that the includes use `spine/Xxx.h`, so the `spine` directory cannot be omitted when copying the files. - -If `SPINE_SHORT_NAMES` is defined, the `sp` prefix for all structs and functions is optional. Only use this if the spine-c names won't cause a conflict. - -## Usage - -### [Please see the spine-c guide for full documentation](http://esotericsoftware.com/spine-c) - -## Extension - -Extending spine-c requires implementing three methods: - -- `_spAtlasPage_createTexture` Loads a texture and stores it and its size in the `void* rendererObject`, `width` and `height` fields of an `spAtlasPage` struct. -- `_spAtlasPage_disposeTexture` Disposes of a texture loaded with `_spAtlasPage_createTexture`. -- `_spUtil_readFile` Reads a file. If this doesn't need to be customized, `_readFile` is provided which reads a file using `fopen`. - -With these implemented, the spine-c API can then be used to load Spine animation data. Rendering is done by enumerating the slots for a skeleton and rendering the attachment for each slot. Each attachment has a `rendererObject` field that is set when the attachment is loaded. - -For example, `AtlasAttachmentLoader` is typically used to load attachments when using a Spine texture atlas. When `AtlasAttachmentLoader` loads a `RegionAttachment`, the attachment's `void* rendererObject` is set to an `AtlasRegion`. Rendering code can then obtain the `AtlasRegion` from the attachment, get the `AtlasPage` it belongs to, and get the page's `void* rendererObject`. This is the renderer specific texture object set by `_spAtlasPage_createTexture`. Attachment loading can be [customized](http://esotericsoftware.com/spine-using-runtimes/#attachmentloader) if not using `AtlasAttachmentLoader` or to provider different renderer specific data. - -[spine-sfml](../spine-sfml/src/c/spine/spine-sfml.cpp#L39) serves as a simple example of extending spine-c. - -spine-c uses an OOP style of programming where each "class" is made up of a struct and a number of functions prefixed with the struct name. More detals about how this works are available in [extension.h](spine-c/include/spine/extension.h#L2). This mechanism allows you to provide your own implementations for `spAttachmentLoader`, `spAttachment` and `spTimeline`, if necessary. - -## Runtimes extending spine-c - -- [spine-sdl](../spine-sdl) -- [spine-sfml](../spine-sfml) diff --git a/spine-c-new/build.sh b/spine-c/build.sh similarity index 100% rename from spine-c-new/build.sh rename to spine-c/build.sh diff --git a/spine-c-new/codegen/README.md b/spine-c/codegen/README.md similarity index 100% rename from spine-c-new/codegen/README.md rename to spine-c/codegen/README.md diff --git a/spine-c-new/codegen/exclusions.txt b/spine-c/codegen/exclusions.txt similarity index 100% rename from spine-c-new/codegen/exclusions.txt rename to spine-c/codegen/exclusions.txt diff --git a/spine-c-new/codegen/package-lock.json b/spine-c/codegen/package-lock.json similarity index 100% rename from spine-c-new/codegen/package-lock.json rename to spine-c/codegen/package-lock.json diff --git a/spine-c-new/codegen/package.json b/spine-c/codegen/package.json similarity index 100% rename from spine-c-new/codegen/package.json rename to spine-c/codegen/package.json diff --git a/spine-c/codegen/spine-cpp-types.json b/spine-c/codegen/spine-cpp-types.json new file mode 100644 index 000000000..7886c3930 --- /dev/null +++ b/spine-c/codegen/spine-cpp-types.json @@ -0,0 +1,36067 @@ +{ + "spine/Animation.h": [ + { + "name": "Animation", + "kind": "class", + "loc": { + "line": 52, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "Animation", + "parameters": [ + { + "name": "name", + "type": "const String &" + }, + { + "name": "timelines", + "type": "Array &" + }, + { + "name": "duration", + "type": "float" + } + ] + }, + { + "kind": "destructor", + "name": "~Animation", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "getTimelines", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setTimelines", + "returnType": "void", + "parameters": [ + { + "name": "timelines", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "hasTimeline", + "returnType": "bool", + "parameters": [ + { + "name": "ids", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setDuration", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "loop", + "type": "bool" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBones", + "returnType": "const Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "search", + "returnType": "int", + "parameters": [ + { + "name": "values", + "type": "Array &" + }, + { + "name": "target", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "search", + "returnType": "int", + "parameters": [ + { + "name": "values", + "type": "Array &" + }, + { + "name": "target", + "type": "float" + }, + { + "name": "step", + "type": "int" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/AnimationState.h": [ + { + "kind": "enum", + "name": "EventType", + "values": [ + { + "name": "EventType_Start", + "value": "0" + }, + { + "name": "EventType_Interrupt" + }, + { + "name": "EventType_End" + }, + { + "name": "EventType_Dispose" + }, + { + "name": "EventType_Complete" + }, + { + "name": "EventType_Event" + } + ], + "loc": { + "line": 47, + "col": 7 + } + }, + { + "name": "AnimationStateListenerObject", + "kind": "class", + "loc": { + "line": 81, + "col": 15 + }, + "members": [ + { + "kind": "constructor", + "name": "AnimationStateListenerObject", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~AnimationStateListenerObject", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "callback", + "returnType": "void", + "parameters": [ + { + "name": "state", + "type": "AnimationState *" + }, + { + "name": "type", + "type": "EventType" + }, + { + "name": "entry", + "type": "TrackEntry *" + }, + { + "name": "event", + "type": "Event *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false + }, + { + "name": "TrackEntry", + "kind": "class", + "loc": { + "line": 92, + "col": 15 + }, + "superTypes": [ + "SpineObject", + "HasRendererObject" + ], + "members": [ + { + "kind": "constructor", + "name": "TrackEntry", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~TrackEntry", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "getTrackIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAnimation", + "returnType": "Animation *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAnimation", + "returnType": "void", + "parameters": [ + { + "name": "animation", + "type": "Animation *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPrevious", + "returnType": "TrackEntry *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getLoop", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLoop", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getHoldPrevious", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setHoldPrevious", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getReverse", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setReverse", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getShortestRotation", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setShortestRotation", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDelay", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setDelay", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTrackTime", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setTrackTime", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTrackEnd", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setTrackEnd", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAnimationStart", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAnimationStart", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAnimationEnd", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAnimationEnd", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAnimationLast", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAnimationLast", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAnimationTime", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTimeScale", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setTimeScale", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAlpha", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAlpha", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getEventThreshold", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setEventThreshold", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixAttachmentThreshold", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixAttachmentThreshold", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAlphaAttachmentThreshold", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAlphaAttachmentThreshold", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixDrawOrderThreshold", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixDrawOrderThreshold", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getNext", + "returnType": "TrackEntry *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isComplete", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixTime", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixTime", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixDuration", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixDuration", + "returnType": "void", + "parameters": [ + { + "name": "mixDuration", + "type": "float" + }, + { + "name": "delay", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixBlend", + "returnType": "MixBlend", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixBlend", + "returnType": "void", + "parameters": [ + { + "name": "blend", + "type": "MixBlend" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixingFrom", + "returnType": "TrackEntry *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixingTo", + "returnType": "TrackEntry *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "resetRotationDirections", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTrackComplete", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setListener", + "returnType": "void", + "parameters": [ + { + "name": "listener", + "type": "AnimationStateListener" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setListener", + "returnType": "void", + "parameters": [ + { + "name": "listener", + "type": "AnimationStateListenerObject *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isEmptyAnimation", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "wasApplied", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isNextReady", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRendererObject", + "returnType": "void *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "HasRendererObject" + }, + { + "kind": "method", + "name": "setRendererObject", + "returnType": "void", + "parameters": [ + { + "name": "rendererObject", + "type": "void *" + }, + { + "name": "dispose", + "type": "DisposeRendererObject" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "HasRendererObject" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "EventQueueEntry", + "kind": "class", + "loc": { + "line": 351, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "field", + "name": "_type", + "type": "EventType", + "isStatic": false + }, + { + "kind": "field", + "name": "_entry", + "type": "TrackEntry *", + "isStatic": false + }, + { + "kind": "field", + "name": "_event", + "type": "Event *", + "isStatic": false + }, + { + "kind": "constructor", + "name": "EventQueueEntry", + "parameters": [ + { + "name": "eventType", + "type": "EventType" + }, + { + "name": "trackEntry", + "type": "TrackEntry *" + }, + { + "name": "event", + "type": "Event *" + } + ] + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "AnimationState", + "kind": "class", + "loc": { + "line": 394, + "col": 15 + }, + "superTypes": [ + "SpineObject", + "HasRendererObject" + ], + "members": [ + { + "kind": "constructor", + "name": "AnimationState", + "parameters": [ + { + "name": "data", + "type": "AnimationStateData *" + } + ] + }, + { + "kind": "destructor", + "name": "~AnimationState", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "delta", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "bool", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clearTracks", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clearTrack", + "returnType": "void", + "parameters": [ + { + "name": "trackIndex", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAnimation", + "returnType": "TrackEntry *", + "parameters": [ + { + "name": "trackIndex", + "type": "size_t" + }, + { + "name": "animationName", + "type": "const String &" + }, + { + "name": "loop", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAnimation", + "returnType": "TrackEntry *", + "parameters": [ + { + "name": "trackIndex", + "type": "size_t" + }, + { + "name": "animation", + "type": "Animation *" + }, + { + "name": "loop", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "addAnimation", + "returnType": "TrackEntry *", + "parameters": [ + { + "name": "trackIndex", + "type": "size_t" + }, + { + "name": "animationName", + "type": "const String &" + }, + { + "name": "loop", + "type": "bool" + }, + { + "name": "delay", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "addAnimation", + "returnType": "TrackEntry *", + "parameters": [ + { + "name": "trackIndex", + "type": "size_t" + }, + { + "name": "animation", + "type": "Animation *" + }, + { + "name": "loop", + "type": "bool" + }, + { + "name": "delay", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setEmptyAnimation", + "returnType": "TrackEntry *", + "parameters": [ + { + "name": "trackIndex", + "type": "size_t" + }, + { + "name": "mixDuration", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "addEmptyAnimation", + "returnType": "TrackEntry *", + "parameters": [ + { + "name": "trackIndex", + "type": "size_t" + }, + { + "name": "mixDuration", + "type": "float" + }, + { + "name": "delay", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setEmptyAnimations", + "returnType": "void", + "parameters": [ + { + "name": "mixDuration", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getCurrent", + "returnType": "TrackEntry *", + "parameters": [ + { + "name": "trackIndex", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "AnimationStateData *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTracks", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTimeScale", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setTimeScale", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setListener", + "returnType": "void", + "parameters": [ + { + "name": "listener", + "type": "AnimationStateListener" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setListener", + "returnType": "void", + "parameters": [ + { + "name": "listener", + "type": "AnimationStateListenerObject *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "disableQueue", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "enableQueue", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setManualTrackEntryDisposal", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getManualTrackEntryDisposal", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "disposeTrackEntry", + "returnType": "void", + "parameters": [ + { + "name": "entry", + "type": "TrackEntry *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRendererObject", + "returnType": "void *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "HasRendererObject" + }, + { + "kind": "method", + "name": "setRendererObject", + "returnType": "void", + "parameters": [ + { + "name": "rendererObject", + "type": "void *" + }, + { + "name": "dispose", + "type": "DisposeRendererObject" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "HasRendererObject" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/AnimationStateData.h": [ + { + "name": "AnimationStateData", + "kind": "class", + "loc": { + "line": 45, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "AnimationStateData", + "parameters": [ + { + "name": "skeletonData", + "type": "SkeletonData *" + } + ] + }, + { + "kind": "method", + "name": "getSkeletonData", + "returnType": "SkeletonData *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDefaultMix", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setDefaultMix", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMix", + "returnType": "void", + "parameters": [ + { + "name": "fromName", + "type": "const String &" + }, + { + "name": "toName", + "type": "const String &" + }, + { + "name": "duration", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMix", + "returnType": "void", + "parameters": [ + { + "name": "from", + "type": "Animation *" + }, + { + "name": "to", + "type": "Animation *" + }, + { + "name": "duration", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMix", + "returnType": "float", + "parameters": [ + { + "name": "from", + "type": "Animation *" + }, + { + "name": "to", + "type": "Animation *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clear", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Array.h": [ + { + "name": "Array", + "kind": "class", + "loc": { + "line": 40, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "Array", + "parameters": [] + }, + { + "kind": "constructor", + "name": "Array", + "parameters": [ + { + "name": "capacity", + "type": "size_t" + } + ] + }, + { + "kind": "constructor", + "name": "Array", + "parameters": [ + { + "name": "inArray", + "type": "const Array &" + } + ] + }, + { + "kind": "destructor", + "name": "~Array", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "clear", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getCapacity", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "size", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSize", + "returnType": "Array &", + "parameters": [ + { + "name": "newSize", + "type": "size_t" + }, + { + "name": "defaultValue", + "type": "const T &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "ensureCapacity", + "returnType": "void", + "parameters": [ + { + "name": "newCapacity", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "add", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const T &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "addAll", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clearAndAddAll", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "removeAt", + "returnType": "void", + "parameters": [ + { + "name": "inIndex", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "contains", + "returnType": "bool", + "parameters": [ + { + "name": "inValue", + "type": "const T &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "indexOf", + "returnType": "int", + "parameters": [ + { + "name": "inValue", + "type": "const T &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "buffer", + "returnType": "T *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": true, + "templateParams": [ + "T" + ], + "inheritedMethodsAdded": true + } + ], + "spine/Atlas.h": [ + { + "kind": "enum", + "name": "Format", + "values": [ + { + "name": "Format_Alpha" + }, + { + "name": "Format_Intensity" + }, + { + "name": "Format_LuminanceAlpha" + }, + { + "name": "Format_RGB565" + }, + { + "name": "Format_RGBA4444" + }, + { + "name": "Format_RGB888" + }, + { + "name": "Format_RGBA8888" + } + ], + "loc": { + "line": 41, + "col": 7 + } + }, + { + "kind": "enum", + "name": "TextureFilter", + "values": [ + { + "name": "TextureFilter_Unknown" + }, + { + "name": "TextureFilter_Nearest" + }, + { + "name": "TextureFilter_Linear" + }, + { + "name": "TextureFilter_MipMap" + }, + { + "name": "TextureFilter_MipMapNearestNearest" + }, + { + "name": "TextureFilter_MipMapLinearNearest" + }, + { + "name": "TextureFilter_MipMapNearestLinear" + }, + { + "name": "TextureFilter_MipMapLinearLinear" + } + ], + "loc": { + "line": 65, + "col": 7 + } + }, + { + "kind": "enum", + "name": "TextureWrap", + "values": [ + { + "name": "TextureWrap_MirroredRepeat" + }, + { + "name": "TextureWrap_ClampToEdge" + }, + { + "name": "TextureWrap_Repeat" + } + ], + "loc": { + "line": 77, + "col": 7 + } + }, + { + "name": "AtlasPage", + "kind": "class", + "loc": { + "line": 83, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "field", + "name": "name", + "type": "String", + "isStatic": false + }, + { + "kind": "field", + "name": "texturePath", + "type": "String", + "isStatic": false + }, + { + "kind": "field", + "name": "format", + "type": "Format", + "isStatic": false + }, + { + "kind": "field", + "name": "minFilter", + "type": "TextureFilter", + "isStatic": false + }, + { + "kind": "field", + "name": "magFilter", + "type": "TextureFilter", + "isStatic": false + }, + { + "kind": "field", + "name": "uWrap", + "type": "TextureWrap", + "isStatic": false + }, + { + "kind": "field", + "name": "vWrap", + "type": "TextureWrap", + "isStatic": false + }, + { + "kind": "field", + "name": "width", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "height", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "pma", + "type": "bool", + "isStatic": false + }, + { + "kind": "field", + "name": "index", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "texture", + "type": "void *", + "isStatic": false + }, + { + "kind": "constructor", + "name": "AtlasPage", + "parameters": [ + { + "name": "inName", + "type": "const String &" + } + ] + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "AtlasRegion", + "kind": "class", + "loc": { + "line": 109, + "col": 15 + }, + "superTypes": [ + "TextureRegion" + ], + "members": [ + { + "kind": "constructor", + "name": "AtlasRegion", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~AtlasRegion", + "isVirtual": false, + "isPure": false + }, + { + "kind": "field", + "name": "page", + "type": "AtlasPage *", + "isStatic": false + }, + { + "kind": "field", + "name": "name", + "type": "String", + "isStatic": false + }, + { + "kind": "field", + "name": "index", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "x", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "y", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "splits", + "type": "Array", + "isStatic": false + }, + { + "kind": "field", + "name": "pads", + "type": "Array", + "isStatic": false + }, + { + "kind": "field", + "name": "names", + "type": "Array", + "isStatic": false + }, + { + "kind": "field", + "name": "values", + "type": "Array", + "isStatic": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "Atlas", + "kind": "class", + "loc": { + "line": 126, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "Atlas", + "parameters": [ + { + "name": "path", + "type": "const String &" + }, + { + "name": "textureLoader", + "type": "TextureLoader *" + }, + { + "name": "createTexture", + "type": "bool" + } + ] + }, + { + "kind": "constructor", + "name": "Atlas", + "parameters": [ + { + "name": "data", + "type": "const char *" + }, + { + "name": "length", + "type": "int" + }, + { + "name": "dir", + "type": "const char *" + }, + { + "name": "textureLoader", + "type": "TextureLoader *" + }, + { + "name": "createTexture", + "type": "bool" + } + ] + }, + { + "kind": "destructor", + "name": "~Atlas", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "flipV", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findRegion", + "returnType": "AtlasRegion *", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPages", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRegions", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/AtlasAttachmentLoader.h": [ + { + "name": "AtlasAttachmentLoader", + "kind": "class", + "loc": { + "line": 47, + "col": 15 + }, + "superTypes": [ + "AttachmentLoader" + ], + "members": [ + { + "kind": "constructor", + "name": "AtlasAttachmentLoader", + "parameters": [ + { + "name": "atlas", + "type": "Atlas *" + } + ] + }, + { + "kind": "method", + "name": "newRegionAttachment", + "returnType": "RegionAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + }, + { + "name": "path", + "type": "const String &" + }, + { + "name": "sequence", + "type": "Sequence *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "newMeshAttachment", + "returnType": "MeshAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + }, + { + "name": "path", + "type": "const String &" + }, + { + "name": "sequence", + "type": "Sequence *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "newBoundingBoxAttachment", + "returnType": "BoundingBoxAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "newPathAttachment", + "returnType": "PathAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "newPointAttachment", + "returnType": "PointAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "newClippingAttachment", + "returnType": "ClippingAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findRegion", + "returnType": "AtlasRegion *", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Attachment.h": [ + { + "name": "Attachment", + "kind": "class", + "loc": { + "line": 38, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "Attachment", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "destructor", + "name": "~Attachment", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "copy", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "getRefCount", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "reference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "dereference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/AttachmentLoader.h": [ + { + "name": "AttachmentLoader", + "kind": "class", + "loc": { + "line": 56, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "AttachmentLoader", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~AttachmentLoader", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "newRegionAttachment", + "returnType": "RegionAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + }, + { + "name": "path", + "type": "const String &" + }, + { + "name": "sequence", + "type": "Sequence *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "newMeshAttachment", + "returnType": "MeshAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + }, + { + "name": "path", + "type": "const String &" + }, + { + "name": "sequence", + "type": "Sequence *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "newBoundingBoxAttachment", + "returnType": "BoundingBoxAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "newPathAttachment", + "returnType": "PathAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "newPointAttachment", + "returnType": "PointAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "newClippingAttachment", + "returnType": "ClippingAttachment *", + "parameters": [ + { + "name": "skin", + "type": "Skin &" + }, + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/AttachmentTimeline.h": [ + { + "name": "AttachmentTimeline", + "kind": "class", + "loc": { + "line": 51, + "col": 15 + }, + "superTypes": [ + "Timeline", + "SlotTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "AttachmentTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "slotIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~AttachmentTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "int" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "attachmentName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAttachmentNames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getSlotIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotTimeline" + }, + { + "kind": "method", + "name": "setSlotIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/AttachmentType.h": [ + { + "kind": "enum", + "name": "AttachmentType", + "values": [ + { + "name": "AttachmentType_Region" + }, + { + "name": "AttachmentType_Boundingbox" + }, + { + "name": "AttachmentType_Mesh" + }, + { + "name": "AttachmentType_Linkedmesh" + }, + { + "name": "AttachmentType_Path" + }, + { + "name": "AttachmentType_Point" + }, + { + "name": "AttachmentType_Clipping" + } + ], + "loc": { + "line": 36, + "col": 7 + } + } + ], + "spine/BlendMode.h": [ + { + "kind": "enum", + "name": "BlendMode", + "values": [ + { + "name": "BlendMode_Normal", + "value": "0" + }, + { + "name": "BlendMode_Additive" + }, + { + "name": "BlendMode_Multiply" + }, + { + "name": "BlendMode_Screen" + } + ], + "loc": { + "line": 36, + "col": 7 + } + } + ], + "spine/BlockAllocator.h": [ + { + "name": "Block", + "kind": "struct", + "loc": { + "line": 40, + "col": 12 + }, + "members": [ + { + "kind": "field", + "name": "size", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "allocated", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "memory", + "type": "uint8_t *", + "isStatic": false + }, + { + "kind": "method", + "name": "free", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "canFit", + "returnType": "bool", + "parameters": [ + { + "name": "numBytes", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "allocate", + "returnType": "uint8_t *", + "parameters": [ + { + "name": "numBytes", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false + }, + { + "name": "BlockAllocator", + "kind": "class", + "loc": { + "line": 60, + "col": 11 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "BlockAllocator", + "parameters": [ + { + "name": "initialBlockSize", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~BlockAllocator", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "compress", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Bone.h": [ + { + "name": "Bone", + "kind": "class", + "loc": { + "line": 46, + "col": 15 + }, + "superTypes": [ + "PosedGeneric", + "PosedActive" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "Bone", + "parameters": [ + { + "name": "data", + "type": "BoneData &" + }, + { + "name": "parent", + "type": "Bone *" + } + ] + }, + { + "kind": "constructor", + "name": "Bone", + "parameters": [ + { + "name": "bone", + "type": "Bone &" + }, + { + "name": "parent", + "type": "Bone *" + } + ] + }, + { + "kind": "method", + "name": "getParent", + "returnType": "Bone *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getChildren", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isYDown", + "returnType": "bool", + "parameters": [], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setYDown", + "returnType": "void", + "parameters": [ + { + "name": "value", + "type": "bool" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "BoneData &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "getPose", + "returnType": "BoneLocal &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "getAppliedPose", + "returnType": "BonePose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "resetConstrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "constrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "isPoseEqualToApplied", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "isActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedActive" + }, + { + "kind": "method", + "name": "setActive", + "returnType": "void", + "parameters": [ + { + "name": "active", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedActive" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/BoneData.h": [ + { + "name": "BoneData", + "kind": "class", + "loc": { + "line": 40, + "col": 15 + }, + "superTypes": [ + "PosedDataGeneric" + ], + "members": [ + { + "kind": "constructor", + "name": "BoneData", + "parameters": [ + { + "name": "index", + "type": "int" + }, + { + "name": "name", + "type": "const String &" + }, + { + "name": "parent", + "type": "BoneData *" + } + ] + }, + { + "kind": "method", + "name": "getIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getParent", + "returnType": "BoneData *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getLength", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLength", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getColor", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getIcon", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setIcon", + "returnType": "void", + "parameters": [ + { + "name": "icon", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getVisible", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setVisible", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSetupPose", + "returnType": "BoneLocal &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedDataGeneric" + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedDataGeneric" + }, + { + "kind": "method", + "name": "isSkinRequired", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedDataGeneric" + }, + { + "kind": "method", + "name": "setSkinRequired", + "returnType": "void", + "parameters": [ + { + "name": "skinRequired", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedDataGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/BoneLocal.h": [ + { + "name": "BoneLocal", + "kind": "class", + "loc": { + "line": 40, + "col": 15 + }, + "superTypes": [ + "Pose" + ], + "members": [ + { + "kind": "constructor", + "name": "BoneLocal", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~BoneLocal", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "set", + "returnType": "void", + "parameters": [ + { + "name": "pose", + "type": "BoneLocal &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setX", + "returnType": "void", + "parameters": [ + { + "name": "x", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setY", + "returnType": "void", + "parameters": [ + { + "name": "y", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setPosition", + "returnType": "void", + "parameters": [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRotation", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setRotation", + "returnType": "void", + "parameters": [ + { + "name": "rotation", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getScaleX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScaleX", + "returnType": "void", + "parameters": [ + { + "name": "scaleX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getScaleY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScaleY", + "returnType": "void", + "parameters": [ + { + "name": "scaleY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScale", + "returnType": "void", + "parameters": [ + { + "name": "scaleX", + "type": "float" + }, + { + "name": "scaleY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScale", + "returnType": "void", + "parameters": [ + { + "name": "scale", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getShearX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setShearX", + "returnType": "void", + "parameters": [ + { + "name": "shearX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getShearY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setShearY", + "returnType": "void", + "parameters": [ + { + "name": "shearY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getInherit", + "returnType": "Inherit", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setInherit", + "returnType": "void", + "parameters": [ + { + "name": "inherit", + "type": "Inherit" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/BonePose.h": [ + { + "name": "BonePose", + "kind": "class", + "loc": { + "line": 43, + "col": 15 + }, + "superTypes": [ + "BoneLocal", + "Update" + ], + "members": [ + { + "kind": "constructor", + "name": "BonePose", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~BonePose", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "physics", + "type": "Physics" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "updateWorldTransform", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "updateLocalTransform", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "validateLocalTransform", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "modifyLocal", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "modifyWorld", + "returnType": "void", + "parameters": [ + { + "name": "update", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "resetWorld", + "returnType": "void", + "parameters": [ + { + "name": "update", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getA", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setA", + "returnType": "void", + "parameters": [ + { + "name": "a", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getB", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setB", + "returnType": "void", + "parameters": [ + { + "name": "b", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getC", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setC", + "returnType": "void", + "parameters": [ + { + "name": "c", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getD", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setD", + "returnType": "void", + "parameters": [ + { + "name": "d", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWorldX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setWorldX", + "returnType": "void", + "parameters": [ + { + "name": "worldX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWorldY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setWorldY", + "returnType": "void", + "parameters": [ + { + "name": "worldY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWorldRotationX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWorldRotationY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWorldScaleX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWorldScaleY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "worldToLocal", + "returnType": "void", + "parameters": [ + { + "name": "worldX", + "type": "float" + }, + { + "name": "worldY", + "type": "float" + }, + { + "name": "outLocalX", + "type": "float &" + }, + { + "name": "outLocalY", + "type": "float &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "localToWorld", + "returnType": "void", + "parameters": [ + { + "name": "localX", + "type": "float" + }, + { + "name": "localY", + "type": "float" + }, + { + "name": "outWorldX", + "type": "float &" + }, + { + "name": "outWorldY", + "type": "float &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "worldToParent", + "returnType": "void", + "parameters": [ + { + "name": "worldX", + "type": "float" + }, + { + "name": "worldY", + "type": "float" + }, + { + "name": "outParentX", + "type": "float &" + }, + { + "name": "outParentY", + "type": "float &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "parentToWorld", + "returnType": "void", + "parameters": [ + { + "name": "parentX", + "type": "float" + }, + { + "name": "parentY", + "type": "float" + }, + { + "name": "outWorldX", + "type": "float &" + }, + { + "name": "outWorldY", + "type": "float &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "worldToLocalRotation", + "returnType": "float", + "parameters": [ + { + "name": "worldRotation", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "localToWorldRotation", + "returnType": "float", + "parameters": [ + { + "name": "localRotation", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "rotateWorld", + "returnType": "void", + "parameters": [ + { + "name": "degrees", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "set", + "returnType": "void", + "parameters": [ + { + "name": "pose", + "type": "BoneLocal &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "getX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "setX", + "returnType": "void", + "parameters": [ + { + "name": "x", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "getY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "setY", + "returnType": "void", + "parameters": [ + { + "name": "y", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "setPosition", + "returnType": "void", + "parameters": [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "getRotation", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "setRotation", + "returnType": "void", + "parameters": [ + { + "name": "rotation", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "getScaleX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "setScaleX", + "returnType": "void", + "parameters": [ + { + "name": "scaleX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "getScaleY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "setScaleY", + "returnType": "void", + "parameters": [ + { + "name": "scaleY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "setScale", + "returnType": "void", + "parameters": [ + { + "name": "scaleX", + "type": "float" + }, + { + "name": "scaleY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "setScale", + "returnType": "void", + "parameters": [ + { + "name": "scale", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "getShearX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "setShearX", + "returnType": "void", + "parameters": [ + { + "name": "shearX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "getShearY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "setShearY", + "returnType": "void", + "parameters": [ + { + "name": "shearY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "getInherit", + "returnType": "Inherit", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "setInherit", + "returnType": "void", + "parameters": [ + { + "name": "inherit", + "type": "Inherit" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneLocal" + }, + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "Update" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/BoneTimeline.h": [ + { + "name": "BoneTimeline", + "kind": "class", + "loc": { + "line": 42, + "col": 18 + }, + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "BoneTimeline", + "parameters": [ + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~BoneTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "BoneTimeline1", + "kind": "class", + "loc": { + "line": 59, + "col": 15 + }, + "superTypes": [ + "CurveTimeline1", + "BoneTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "BoneTimeline1", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + }, + { + "name": "property", + "type": "Property" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline" + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "BoneTimeline2", + "kind": "class", + "loc": { + "line": 80, + "col": 15 + }, + "superTypes": [ + "CurveTimeline2", + "BoneTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "BoneTimeline2", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + }, + { + "name": "property1", + "type": "Property" + }, + { + "name": "property2", + "type": "Property" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline2" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline" + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/BoundingBoxAttachment.h": [ + { + "name": "BoundingBoxAttachment", + "kind": "class", + "loc": { + "line": 39, + "col": 15 + }, + "superTypes": [ + "VertexAttachment" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "BoundingBoxAttachment", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "method", + "name": "getColor", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "copy", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "start", + "type": "size_t" + }, + { + "name": "count", + "type": "size_t" + }, + { + "name": "worldVertices", + "type": "float *" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "start", + "type": "size_t" + }, + { + "name": "count", + "type": "size_t" + }, + { + "name": "worldVertices", + "type": "Array &" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getId", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setBones", + "returnType": "void", + "parameters": [ + { + "name": "bones", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getVertices", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setVertices", + "returnType": "void", + "parameters": [ + { + "name": "vertices", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getWorldVerticesLength", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setWorldVerticesLength", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getTimelineAttachment", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setTimelineAttachment", + "returnType": "void", + "parameters": [ + { + "name": "attachment", + "type": "Attachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "copyTo", + "returnType": "void", + "parameters": [ + { + "name": "other", + "type": "VertexAttachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getRefCount", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "reference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "dereference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/ClippingAttachment.h": [ + { + "name": "ClippingAttachment", + "kind": "class", + "loc": { + "line": 39, + "col": 15 + }, + "superTypes": [ + "VertexAttachment" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "ClippingAttachment", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "method", + "name": "getEndSlot", + "returnType": "SlotData *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setEndSlot", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "SlotData *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getColor", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "copy", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "start", + "type": "size_t" + }, + { + "name": "count", + "type": "size_t" + }, + { + "name": "worldVertices", + "type": "float *" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "start", + "type": "size_t" + }, + { + "name": "count", + "type": "size_t" + }, + { + "name": "worldVertices", + "type": "Array &" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getId", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setBones", + "returnType": "void", + "parameters": [ + { + "name": "bones", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getVertices", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setVertices", + "returnType": "void", + "parameters": [ + { + "name": "vertices", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getWorldVerticesLength", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setWorldVerticesLength", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getTimelineAttachment", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setTimelineAttachment", + "returnType": "void", + "parameters": [ + { + "name": "attachment", + "type": "Attachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "copyTo", + "returnType": "void", + "parameters": [ + { + "name": "other", + "type": "VertexAttachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getRefCount", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "reference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "dereference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Color.h": [ + { + "name": "Color", + "kind": "class", + "loc": { + "line": 38, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "Color", + "parameters": [] + }, + { + "kind": "constructor", + "name": "Color", + "parameters": [ + { + "name": "r", + "type": "float" + }, + { + "name": "g", + "type": "float" + }, + { + "name": "b", + "type": "float" + }, + { + "name": "a", + "type": "float" + } + ] + }, + { + "kind": "method", + "name": "set", + "returnType": "Color &", + "parameters": [ + { + "name": "_r", + "type": "float" + }, + { + "name": "_g", + "type": "float" + }, + { + "name": "_b", + "type": "float" + }, + { + "name": "_a", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "set", + "returnType": "Color &", + "parameters": [ + { + "name": "_r", + "type": "float" + }, + { + "name": "_g", + "type": "float" + }, + { + "name": "_b", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "set", + "returnType": "Color &", + "parameters": [ + { + "name": "other", + "type": "const Color &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "add", + "returnType": "Color &", + "parameters": [ + { + "name": "_r", + "type": "float" + }, + { + "name": "_g", + "type": "float" + }, + { + "name": "_b", + "type": "float" + }, + { + "name": "_a", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "add", + "returnType": "Color &", + "parameters": [ + { + "name": "_r", + "type": "float" + }, + { + "name": "_g", + "type": "float" + }, + { + "name": "_b", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "add", + "returnType": "Color &", + "parameters": [ + { + "name": "other", + "type": "const Color &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clamp", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "valueOf", + "returnType": "Color", + "parameters": [ + { + "name": "hexString", + "type": "const char *" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "valueOf", + "returnType": "void", + "parameters": [ + { + "name": "hexString", + "type": "const char *" + }, + { + "name": "color", + "type": "Color &" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "parseHex", + "returnType": "float", + "parameters": [ + { + "name": "value", + "type": "const char *" + }, + { + "name": "index", + "type": "size_t" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "rgba8888ToColor", + "returnType": "void", + "parameters": [ + { + "name": "color", + "type": "Color &" + }, + { + "name": "value", + "type": "int" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "rgb888ToColor", + "returnType": "void", + "parameters": [ + { + "name": "color", + "type": "Color &" + }, + { + "name": "value", + "type": "int" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "field", + "name": "r", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "g", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "b", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "a", + "type": "float", + "isStatic": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/ColorTimeline.h": [ + { + "name": "RGBATimeline", + "kind": "class", + "loc": { + "line": 38, + "col": 15 + }, + "superTypes": [ + "SlotCurveTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "RGBATimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "slotIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~RGBATimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "int" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "r", + "type": "float" + }, + { + "name": "g", + "type": "float" + }, + { + "name": "b", + "type": "float" + }, + { + "name": "a", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getSlotIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setSlotIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "RGBTimeline", + "kind": "class", + "loc": { + "line": 66, + "col": 15 + }, + "superTypes": [ + "SlotCurveTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "RGBTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "slotIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~RGBTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "int" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "r", + "type": "float" + }, + { + "name": "g", + "type": "float" + }, + { + "name": "b", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getSlotIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setSlotIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "AlphaTimeline", + "kind": "class", + "loc": { + "line": 92, + "col": 15 + }, + "superTypes": [ + "CurveTimeline1", + "SlotTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "AlphaTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "slotIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~AlphaTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getSlotIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotTimeline" + }, + { + "kind": "method", + "name": "setSlotIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "RGBA2Timeline", + "kind": "class", + "loc": { + "line": 110, + "col": 15 + }, + "superTypes": [ + "SlotCurveTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "RGBA2Timeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "slotIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~RGBA2Timeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "int" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "r", + "type": "float" + }, + { + "name": "g", + "type": "float" + }, + { + "name": "b", + "type": "float" + }, + { + "name": "a", + "type": "float" + }, + { + "name": "r2", + "type": "float" + }, + { + "name": "g2", + "type": "float" + }, + { + "name": "b2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getSlotIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setSlotIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "RGB2Timeline", + "kind": "class", + "loc": { + "line": 141, + "col": 15 + }, + "superTypes": [ + "SlotCurveTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "RGB2Timeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "slotIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~RGB2Timeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "int" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "r", + "type": "float" + }, + { + "name": "g", + "type": "float" + }, + { + "name": "b", + "type": "float" + }, + { + "name": "r2", + "type": "float" + }, + { + "name": "g2", + "type": "float" + }, + { + "name": "b2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getSlotIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setSlotIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Constraint.h": [ + { + "name": "Constraint", + "kind": "class", + "loc": { + "line": 42, + "col": 15 + }, + "superTypes": [ + "Update" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "Constraint", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~Constraint", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "ConstraintData &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "sort", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "isSourceActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "physics", + "type": "Physics" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ConstraintGeneric", + "kind": "class", + "loc": { + "line": 70, + "col": 15 + }, + "superTypes": [ + "PosedGeneric", + "PosedActive", + "Constraint" + ], + "members": [ + { + "kind": "constructor", + "name": "ConstraintGeneric", + "parameters": [ + { + "name": "data", + "type": "D &" + } + ] + }, + { + "kind": "destructor", + "name": "~ConstraintGeneric", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "ConstraintData &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPose", + "returnType": "P &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "getAppliedPose", + "returnType": "P &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "resetConstrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "constrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "isPoseEqualToApplied", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "isActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedActive" + }, + { + "kind": "method", + "name": "setActive", + "returnType": "void", + "parameters": [ + { + "name": "active", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedActive" + }, + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "Constraint" + }, + { + "kind": "method", + "name": "sort", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "Constraint" + }, + { + "kind": "method", + "name": "isSourceActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "Constraint" + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "physics", + "type": "Physics" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "Constraint" + } + ], + "isAbstract": true, + "isTemplate": true, + "templateParams": [ + "T", + "D", + "P" + ], + "inheritedMethodsAdded": true + } + ], + "spine/ConstraintData.h": [ + { + "name": "ConstraintData", + "kind": "class", + "loc": { + "line": 42, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "ConstraintData", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "destructor", + "name": "~ConstraintData", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "create", + "returnType": "Constraint *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "isSkinRequired", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ConstraintDataGeneric", + "kind": "class", + "loc": { + "line": 60, + "col": 15 + }, + "superTypes": [ + "PosedDataGeneric

", + "ConstraintData" + ], + "members": [ + { + "kind": "constructor", + "name": "ConstraintDataGeneric", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "destructor", + "name": "~ConstraintDataGeneric", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "create", + "returnType": "Constraint *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isSkinRequired", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSetupPose", + "returnType": "P &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedDataGeneric

" + }, + { + "kind": "method", + "name": "setSkinRequired", + "returnType": "void", + "parameters": [ + { + "name": "skinRequired", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedDataGeneric

" + }, + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintData" + } + ], + "isAbstract": true, + "isTemplate": true, + "templateParams": [ + "T", + "P" + ], + "inheritedMethodsAdded": true + } + ], + "spine/ConstraintTimeline.h": [ + { + "name": "ConstraintTimeline", + "kind": "class", + "loc": { + "line": 38, + "col": 18 + }, + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "ConstraintTimeline", + "parameters": [ + { + "name": "constraintIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~ConstraintTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/ConstraintTimeline1.h": [ + { + "name": "ConstraintTimeline1", + "kind": "class", + "loc": { + "line": 39, + "col": 15 + }, + "superTypes": [ + "CurveTimeline1", + "ConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "ConstraintTimeline1", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "constraintIndex", + "type": "int" + }, + { + "name": "property", + "type": "Property" + } + ] + }, + { + "kind": "destructor", + "name": "~ConstraintTimeline1", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline" + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/CurveTimeline.h": [ + { + "name": "CurveTimeline", + "kind": "class", + "loc": { + "line": 38, + "col": 15 + }, + "superTypes": [ + "Timeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "CurveTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "frameEntries", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + } + ] + }, + { + "kind": "destructor", + "name": "~CurveTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "CurveTimeline1", + "kind": "class", + "loc": { + "line": 68, + "col": 15 + }, + "superTypes": [ + "CurveTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "CurveTimeline1", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + } + ] + }, + { + "kind": "destructor", + "name": "~CurveTimeline1", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "CurveTimeline2", + "kind": "class", + "loc": { + "line": 99, + "col": 15 + }, + "superTypes": [ + "CurveTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "CurveTimeline2", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + } + ] + }, + { + "kind": "destructor", + "name": "~CurveTimeline2", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Debug.h": [ + { + "name": "DebugExtension", + "kind": "class", + "loc": { + "line": 39, + "col": 15 + }, + "superTypes": [ + "SpineExtension" + ], + "members": [ + { + "kind": "constructor", + "name": "DebugExtension", + "parameters": [ + { + "name": "extension", + "type": "SpineExtension *" + } + ] + }, + { + "kind": "method", + "name": "reportLeaks", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clearAllocations", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "_alloc", + "returnType": "void *", + "parameters": [ + { + "name": "size", + "type": "size_t" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "_calloc", + "returnType": "void *", + "parameters": [ + { + "name": "size", + "type": "size_t" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "_realloc", + "returnType": "void *", + "parameters": [ + { + "name": "ptr", + "type": "void *" + }, + { + "name": "size", + "type": "size_t" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "_free", + "returnType": "void", + "parameters": [ + { + "name": "mem", + "type": "void *" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "_readFile", + "returnType": "char *", + "parameters": [ + { + "name": "path", + "type": "const String &" + }, + { + "name": "length", + "type": "int *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getUsedMemory", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "readFile", + "returnType": "char *", + "parameters": [ + { + "name": "path", + "type": "const String &" + }, + { + "name": "length", + "type": "int *" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SpineExtension" + }, + { + "kind": "method", + "name": "setInstance", + "returnType": "void", + "parameters": [ + { + "name": "inSpineExtension", + "type": "SpineExtension *" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SpineExtension" + }, + { + "kind": "method", + "name": "getInstance", + "returnType": "SpineExtension *", + "parameters": [], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SpineExtension" + }, + { + "kind": "method", + "name": "_beforeFree", + "returnType": "void", + "parameters": [ + { + "name": "ptr", + "type": "void *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SpineExtension" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/DeformTimeline.h": [ + { + "name": "DeformTimeline", + "kind": "class", + "loc": { + "line": 39, + "col": 15 + }, + "superTypes": [ + "SlotCurveTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "DeformTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "slotIndex", + "type": "int" + }, + { + "name": "attachment", + "type": "VertexAttachment *" + } + ] + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frameIndex", + "type": "int" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "vertices", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getVertices", + "returnType": "Array> &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAttachment", + "returnType": "VertexAttachment *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAttachment", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "VertexAttachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getCurvePercent", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "getSlotIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + }, + { + "kind": "method", + "name": "setSlotIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotCurveTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/DrawOrderTimeline.h": [ + { + "name": "DrawOrderTimeline", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "superTypes": [ + "Timeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "DrawOrderTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDrawOrders", + "returnType": "Array> &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "drawOrder", + "type": "Array *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Event.h": [ + { + "name": "Event", + "kind": "class", + "loc": { + "line": 43, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "Event", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "data", + "type": "const EventData &" + } + ] + }, + { + "kind": "method", + "name": "getData", + "returnType": "const EventData &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTime", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getInt", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setInt", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFloat", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFloat", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getString", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setString", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getVolume", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setVolume", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBalance", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBalance", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/EventData.h": [ + { + "name": "EventData", + "kind": "class", + "loc": { + "line": 38, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "EventData", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getIntValue", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setIntValue", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFloatValue", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFloatValue", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getStringValue", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setStringValue", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAudioPath", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAudioPath", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getVolume", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setVolume", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBalance", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBalance", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/EventTimeline.h": [ + { + "name": "EventTimeline", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "superTypes": [ + "Timeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "EventTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + } + ] + }, + { + "kind": "destructor", + "name": "~EventTimeline", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getEvents", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "event", + "type": "Event *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Extension.h": [ + { + "name": "SpineExtension", + "kind": "class", + "loc": { + "line": 42, + "col": 15 + }, + "members": [ + { + "kind": "method", + "name": "readFile", + "returnType": "char *", + "parameters": [ + { + "name": "path", + "type": "const String &" + }, + { + "name": "length", + "type": "int *" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setInstance", + "returnType": "void", + "parameters": [ + { + "name": "inSpineExtension", + "type": "SpineExtension *" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getInstance", + "returnType": "SpineExtension *", + "parameters": [], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "destructor", + "name": "~SpineExtension", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "_alloc", + "returnType": "void *", + "parameters": [ + { + "name": "size", + "type": "size_t" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "_calloc", + "returnType": "void *", + "parameters": [ + { + "name": "size", + "type": "size_t" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "_realloc", + "returnType": "void *", + "parameters": [ + { + "name": "ptr", + "type": "void *" + }, + { + "name": "size", + "type": "size_t" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "_free", + "returnType": "void", + "parameters": [ + { + "name": "mem", + "type": "void *" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "_readFile", + "returnType": "char *", + "parameters": [ + { + "name": "path", + "type": "const String &" + }, + { + "name": "length", + "type": "int *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "_beforeFree", + "returnType": "void", + "parameters": [ + { + "name": "ptr", + "type": "void *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "DefaultSpineExtension", + "kind": "class", + "loc": { + "line": 100, + "col": 15 + }, + "superTypes": [ + "SpineExtension" + ], + "members": [ + { + "kind": "constructor", + "name": "DefaultSpineExtension", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~DefaultSpineExtension", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "readFile", + "returnType": "char *", + "parameters": [ + { + "name": "path", + "type": "const String &" + }, + { + "name": "length", + "type": "int *" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SpineExtension" + }, + { + "kind": "method", + "name": "setInstance", + "returnType": "void", + "parameters": [ + { + "name": "inSpineExtension", + "type": "SpineExtension *" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SpineExtension" + }, + { + "kind": "method", + "name": "getInstance", + "returnType": "SpineExtension *", + "parameters": [], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "SpineExtension" + }, + { + "kind": "method", + "name": "_alloc", + "returnType": "void *", + "parameters": [ + { + "name": "size", + "type": "size_t" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "SpineExtension" + }, + { + "kind": "method", + "name": "_calloc", + "returnType": "void *", + "parameters": [ + { + "name": "size", + "type": "size_t" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "SpineExtension" + }, + { + "kind": "method", + "name": "_realloc", + "returnType": "void *", + "parameters": [ + { + "name": "ptr", + "type": "void *" + }, + { + "name": "size", + "type": "size_t" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "SpineExtension" + }, + { + "kind": "method", + "name": "_free", + "returnType": "void", + "parameters": [ + { + "name": "mem", + "type": "void *" + }, + { + "name": "file", + "type": "const char *" + }, + { + "name": "line", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "SpineExtension" + }, + { + "kind": "method", + "name": "_readFile", + "returnType": "char *", + "parameters": [ + { + "name": "path", + "type": "const String &" + }, + { + "name": "length", + "type": "int *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "SpineExtension" + }, + { + "kind": "method", + "name": "_beforeFree", + "returnType": "void", + "parameters": [ + { + "name": "ptr", + "type": "void *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SpineExtension" + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/HasRendererObject.h": [ + { + "name": "HasRendererObject", + "kind": "class", + "loc": { + "line": 39, + "col": 15 + }, + "members": [ + { + "kind": "constructor", + "name": "HasRendererObject", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~HasRendererObject", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "getRendererObject", + "returnType": "void *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setRendererObject", + "returnType": "void", + "parameters": [ + { + "name": "rendererObject", + "type": "void *" + }, + { + "name": "dispose", + "type": "DisposeRendererObject" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/HashMap.h": [ + { + "name": "HashMap", + "kind": "class", + "loc": { + "line": 46, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "HashMap", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~HashMap", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "clear", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "size", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "put", + "returnType": "void", + "parameters": [ + { + "name": "key", + "type": "const K &" + }, + { + "name": "value", + "type": "const V &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "addAll", + "returnType": "bool", + "parameters": [ + { + "name": "keys", + "type": "Array &" + }, + { + "name": "value", + "type": "const V &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "containsKey", + "returnType": "bool", + "parameters": [ + { + "name": "key", + "type": "const K &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "remove", + "returnType": "bool", + "parameters": [ + { + "name": "key", + "type": "const K &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getEntries", + "returnType": "Entries", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": true, + "templateParams": [ + "K", + "V" + ], + "inheritedMethodsAdded": true + } + ], + "spine/IkConstraint.h": [ + { + "name": "IkConstraint", + "kind": "class", + "loc": { + "line": 44, + "col": 15 + }, + "superTypes": [ + "ConstraintGeneric" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "IkConstraint", + "parameters": [ + { + "name": "data", + "type": "IkConstraintData &" + }, + { + "name": "skeleton", + "type": "Skeleton &" + } + ] + }, + { + "kind": "method", + "name": "copy", + "returnType": "IkConstraint *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "physics", + "type": "Physics" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "sort", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isSourceActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "IkConstraintData &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTarget", + "returnType": "Bone *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setTarget", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "Bone *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "bone", + "type": "BonePose &" + }, + { + "name": "targetX", + "type": "float" + }, + { + "name": "targetY", + "type": "float" + }, + { + "name": "compress", + "type": "bool" + }, + { + "name": "stretch", + "type": "bool" + }, + { + "name": "uniform", + "type": "bool" + }, + { + "name": "mix", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "parent", + "type": "BonePose &" + }, + { + "name": "child", + "type": "BonePose &" + }, + { + "name": "targetX", + "type": "float" + }, + { + "name": "targetY", + "type": "float" + }, + { + "name": "bendDirection", + "type": "int" + }, + { + "name": "stretch", + "type": "bool" + }, + { + "name": "uniform", + "type": "bool" + }, + { + "name": "softness", + "type": "float" + }, + { + "name": "mix", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPose", + "returnType": "IkConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "getAppliedPose", + "returnType": "IkConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "resetConstrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "constrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "isPoseEqualToApplied", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "isActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "setActive", + "returnType": "void", + "parameters": [ + { + "name": "active", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/IkConstraintData.h": [ + { + "name": "IkConstraintData", + "kind": "class", + "loc": { + "line": 44, + "col": 15 + }, + "superTypes": [ + "ConstraintDataGeneric" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "IkConstraintData", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "method", + "name": "create", + "returnType": "Constraint *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTarget", + "returnType": "BoneData *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setTarget", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "BoneData *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getUniform", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setUniform", + "returnType": "void", + "parameters": [ + { + "name": "uniform", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "isSkinRequired", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "getSetupPose", + "returnType": "IkConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "setSkinRequired", + "returnType": "void", + "parameters": [ + { + "name": "skinRequired", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/IkConstraintPose.h": [ + { + "name": "IkConstraintPose", + "kind": "class", + "loc": { + "line": 39, + "col": 15 + }, + "superTypes": [ + "Pose" + ], + "members": [ + { + "kind": "constructor", + "name": "IkConstraintPose", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~IkConstraintPose", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "set", + "returnType": "void", + "parameters": [ + { + "name": "pose", + "type": "IkConstraintPose &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMix", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMix", + "returnType": "void", + "parameters": [ + { + "name": "mix", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSoftness", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSoftness", + "returnType": "void", + "parameters": [ + { + "name": "softness", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBendDirection", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBendDirection", + "returnType": "void", + "parameters": [ + { + "name": "bendDirection", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getCompress", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setCompress", + "returnType": "void", + "parameters": [ + { + "name": "compress", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getStretch", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setStretch", + "returnType": "void", + "parameters": [ + { + "name": "stretch", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/IkConstraintTimeline.h": [ + { + "name": "IkConstraintTimeline", + "kind": "class", + "loc": { + "line": 40, + "col": 15 + }, + "superTypes": [ + "CurveTimeline", + "ConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "IkConstraintTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "constraintIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~IkConstraintTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "int" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "mix", + "type": "float" + }, + { + "name": "softness", + "type": "float" + }, + { + "name": "bendDirection", + "type": "int" + }, + { + "name": "compress", + "type": "bool" + }, + { + "name": "stretch", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Inherit.h": [ + { + "kind": "enum", + "name": "Inherit", + "values": [ + { + "name": "Inherit_Normal", + "value": "0" + }, + { + "name": "Inherit_OnlyTranslation" + }, + { + "name": "Inherit_NoRotationOrReflection" + }, + { + "name": "Inherit_NoScale" + }, + { + "name": "Inherit_NoScaleOrReflection" + } + ], + "loc": { + "line": 37, + "col": 7 + } + } + ], + "spine/InheritTimeline.h": [ + { + "name": "InheritTimeline", + "kind": "class", + "loc": { + "line": 42, + "col": 15 + }, + "superTypes": [ + "Timeline", + "BoneTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "InheritTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~InheritTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "int" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "inherit", + "type": "Inherit" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Json.h": [ + { + "name": "Json", + "kind": "class", + "loc": { + "line": 42, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "method", + "name": "getItem", + "returnType": "Json *", + "parameters": [ + { + "name": "object", + "type": "Json *" + }, + { + "name": "string", + "type": "const char *" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getItem", + "returnType": "Json *", + "parameters": [ + { + "name": "object", + "type": "Json *" + }, + { + "name": "childIndex", + "type": "int" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getString", + "returnType": "const char *", + "parameters": [ + { + "name": "object", + "type": "Json *" + }, + { + "name": "name", + "type": "const char *" + }, + { + "name": "defaultValue", + "type": "const char *" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFloat", + "returnType": "float", + "parameters": [ + { + "name": "object", + "type": "Json *" + }, + { + "name": "name", + "type": "const char *" + }, + { + "name": "defaultValue", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getInt", + "returnType": "int", + "parameters": [ + { + "name": "object", + "type": "Json *" + }, + { + "name": "name", + "type": "const char *" + }, + { + "name": "defaultValue", + "type": "int" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBoolean", + "returnType": "bool", + "parameters": [ + { + "name": "object", + "type": "Json *" + }, + { + "name": "name", + "type": "const char *" + }, + { + "name": "defaultValue", + "type": "bool" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getError", + "returnType": "const char *", + "parameters": [], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "Json", + "parameters": [ + { + "name": "value", + "type": "const char *" + } + ] + }, + { + "kind": "destructor", + "name": "~Json", + "isVirtual": false, + "isPure": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/LinkedMesh.h": [ + { + "name": "LinkedMesh", + "kind": "class", + "loc": { + "line": 39, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "LinkedMesh", + "parameters": [ + { + "name": "mesh", + "type": "MeshAttachment *" + }, + { + "name": "skinIndex", + "type": "const int" + }, + { + "name": "slotIndex", + "type": "size_t" + }, + { + "name": "parent", + "type": "const String &" + }, + { + "name": "inheritTimelines", + "type": "bool" + } + ] + }, + { + "kind": "constructor", + "name": "LinkedMesh", + "parameters": [ + { + "name": "mesh", + "type": "MeshAttachment *" + }, + { + "name": "skin", + "type": "const String &" + }, + { + "name": "slotIndex", + "type": "size_t" + }, + { + "name": "parent", + "type": "const String &" + }, + { + "name": "inheritTimelines", + "type": "bool" + } + ] + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/MathUtil.h": [ + { + "name": "MathUtil", + "kind": "class", + "loc": { + "line": 42, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "method", + "name": "sign", + "returnType": "float", + "parameters": [ + { + "name": "val", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clamp", + "returnType": "float", + "parameters": [ + { + "name": "x", + "type": "float" + }, + { + "name": "lower", + "type": "float" + }, + { + "name": "upper", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "abs", + "returnType": "float", + "parameters": [ + { + "name": "v", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "sin", + "returnType": "float", + "parameters": [ + { + "name": "radians", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "cos", + "returnType": "float", + "parameters": [ + { + "name": "radians", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "sinDeg", + "returnType": "float", + "parameters": [ + { + "name": "degrees", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "cosDeg", + "returnType": "float", + "parameters": [ + { + "name": "degrees", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "atan2", + "returnType": "float", + "parameters": [ + { + "name": "y", + "type": "float" + }, + { + "name": "x", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "atan2Deg", + "returnType": "float", + "parameters": [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "acos", + "returnType": "float", + "parameters": [ + { + "name": "v", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "sqrt", + "returnType": "float", + "parameters": [ + { + "name": "v", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "fmod", + "returnType": "float", + "parameters": [ + { + "name": "a", + "type": "float" + }, + { + "name": "b", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isNan", + "returnType": "bool", + "parameters": [ + { + "name": "v", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "quietNan", + "returnType": "float", + "parameters": [], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "random", + "returnType": "float", + "parameters": [], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "randomTriangular", + "returnType": "float", + "parameters": [ + { + "name": "min", + "type": "float" + }, + { + "name": "max", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "randomTriangular", + "returnType": "float", + "parameters": [ + { + "name": "min", + "type": "float" + }, + { + "name": "max", + "type": "float" + }, + { + "name": "mode", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "pow", + "returnType": "float", + "parameters": [ + { + "name": "a", + "type": "float" + }, + { + "name": "b", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "ceil", + "returnType": "float", + "parameters": [ + { + "name": "v", + "type": "float" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/MeshAttachment.h": [ + { + "name": "MeshAttachment", + "kind": "class", + "loc": { + "line": 42, + "col": 15 + }, + "superTypes": [ + "VertexAttachment" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "MeshAttachment", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "destructor", + "name": "~MeshAttachment", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "start", + "type": "size_t" + }, + { + "name": "count", + "type": "size_t" + }, + { + "name": "worldVertices", + "type": "float *" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "updateRegion", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getHullLength", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setHullLength", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRegionUVs", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setRegionUVs", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getUVs", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTriangles", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setTriangles", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getColor", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPath", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setPath", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRegion", + "returnType": "TextureRegion *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setRegion", + "returnType": "void", + "parameters": [ + { + "name": "region", + "type": "TextureRegion *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSequence", + "returnType": "Sequence *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSequence", + "returnType": "void", + "parameters": [ + { + "name": "sequence", + "type": "Sequence *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getParentMesh", + "returnType": "MeshAttachment *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setParentMesh", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "MeshAttachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getEdges", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setEdges", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWidth", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setWidth", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getHeight", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setHeight", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "copy", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "newLinkedMesh", + "returnType": "MeshAttachment *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "start", + "type": "size_t" + }, + { + "name": "count", + "type": "size_t" + }, + { + "name": "worldVertices", + "type": "Array &" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getId", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setBones", + "returnType": "void", + "parameters": [ + { + "name": "bones", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getVertices", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setVertices", + "returnType": "void", + "parameters": [ + { + "name": "vertices", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getWorldVerticesLength", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setWorldVerticesLength", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getTimelineAttachment", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setTimelineAttachment", + "returnType": "void", + "parameters": [ + { + "name": "attachment", + "type": "Attachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "copyTo", + "returnType": "void", + "parameters": [ + { + "name": "other", + "type": "VertexAttachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getRefCount", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "reference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "dereference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/MixBlend.h": [ + { + "kind": "enum", + "name": "MixBlend", + "values": [ + { + "name": "MixBlend_Setup", + "value": "0" + }, + { + "name": "MixBlend_First" + }, + { + "name": "MixBlend_Replace" + }, + { + "name": "MixBlend_Add" + } + ], + "loc": { + "line": 39, + "col": 7 + } + } + ], + "spine/MixDirection.h": [ + { + "kind": "enum", + "name": "MixDirection", + "values": [ + { + "name": "MixDirection_In", + "value": "0" + }, + { + "name": "MixDirection_Out" + } + ], + "loc": { + "line": 39, + "col": 7 + } + } + ], + "spine/PathAttachment.h": [ + { + "name": "PathAttachment", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "superTypes": [ + "VertexAttachment" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PathAttachment", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "method", + "name": "getLengths", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLengths", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isClosed", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setClosed", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isConstantSpeed", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setConstantSpeed", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getColor", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "copy", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "start", + "type": "size_t" + }, + { + "name": "count", + "type": "size_t" + }, + { + "name": "worldVertices", + "type": "float *" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "start", + "type": "size_t" + }, + { + "name": "count", + "type": "size_t" + }, + { + "name": "worldVertices", + "type": "Array &" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getId", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setBones", + "returnType": "void", + "parameters": [ + { + "name": "bones", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getVertices", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setVertices", + "returnType": "void", + "parameters": [ + { + "name": "vertices", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getWorldVerticesLength", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setWorldVerticesLength", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getTimelineAttachment", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "setTimelineAttachment", + "returnType": "void", + "parameters": [ + { + "name": "attachment", + "type": "Attachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "copyTo", + "returnType": "void", + "parameters": [ + { + "name": "other", + "type": "VertexAttachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "getRefCount", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "reference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + }, + { + "kind": "method", + "name": "dereference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "VertexAttachment" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/PathConstraint.h": [ + { + "name": "PathConstraint", + "kind": "class", + "loc": { + "line": 52, + "col": 15 + }, + "superTypes": [ + "ConstraintGeneric" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PathConstraint", + "parameters": [ + { + "name": "data", + "type": "PathConstraintData &" + }, + { + "name": "skeleton", + "type": "Skeleton &" + } + ] + }, + { + "kind": "method", + "name": "copy", + "returnType": "PathConstraint *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "physics", + "type": "Physics" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "sort", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isSourceActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSlot", + "returnType": "Slot *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSlot", + "returnType": "void", + "parameters": [ + { + "name": "slot", + "type": "Slot *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "PathConstraintData &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPose", + "returnType": "PathConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "getAppliedPose", + "returnType": "PathConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "resetConstrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "constrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "isPoseEqualToApplied", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "isActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "setActive", + "returnType": "void", + "parameters": [ + { + "name": "active", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/PathConstraintData.h": [ + { + "name": "PathConstraintData", + "kind": "class", + "loc": { + "line": 51, + "col": 15 + }, + "superTypes": [ + "ConstraintDataGeneric" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PathConstraintData", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "method", + "name": "create", + "returnType": "Constraint *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSlot", + "returnType": "SlotData *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSlot", + "returnType": "void", + "parameters": [ + { + "name": "slot", + "type": "SlotData *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPositionMode", + "returnType": "PositionMode", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setPositionMode", + "returnType": "void", + "parameters": [ + { + "name": "positionMode", + "type": "PositionMode" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSpacingMode", + "returnType": "SpacingMode", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSpacingMode", + "returnType": "void", + "parameters": [ + { + "name": "spacingMode", + "type": "SpacingMode" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRotateMode", + "returnType": "RotateMode", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setRotateMode", + "returnType": "void", + "parameters": [ + { + "name": "rotateMode", + "type": "RotateMode" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getOffsetRotation", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setOffsetRotation", + "returnType": "void", + "parameters": [ + { + "name": "offsetRotation", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "isSkinRequired", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "getSetupPose", + "returnType": "PathConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "setSkinRequired", + "returnType": "void", + "parameters": [ + { + "name": "skinRequired", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/PathConstraintMixTimeline.h": [ + { + "name": "PathConstraintMixTimeline", + "kind": "class", + "loc": { + "line": 40, + "col": 15 + }, + "superTypes": [ + "CurveTimeline", + "ConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PathConstraintMixTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "constraintIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~PathConstraintMixTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "int" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "mixRotate", + "type": "float" + }, + { + "name": "mixX", + "type": "float" + }, + { + "name": "mixY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/PathConstraintPose.h": [ + { + "name": "PathConstraintPose", + "kind": "class", + "loc": { + "line": 38, + "col": 18 + }, + "superTypes": [ + "Pose" + ], + "members": [ + { + "kind": "constructor", + "name": "PathConstraintPose", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~PathConstraintPose", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "set", + "returnType": "void", + "parameters": [ + { + "name": "pose", + "type": "PathConstraintPose &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPosition", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setPosition", + "returnType": "void", + "parameters": [ + { + "name": "position", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSpacing", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSpacing", + "returnType": "void", + "parameters": [ + { + "name": "spacing", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixRotate", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixRotate", + "returnType": "void", + "parameters": [ + { + "name": "mixRotate", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixX", + "returnType": "void", + "parameters": [ + { + "name": "mixX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixY", + "returnType": "void", + "parameters": [ + { + "name": "mixY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/PathConstraintPositionTimeline.h": [ + { + "name": "PathConstraintPositionTimeline", + "kind": "class", + "loc": { + "line": 38, + "col": 15 + }, + "superTypes": [ + "ConstraintTimeline1" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PathConstraintPositionTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "constraintIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~PathConstraintPositionTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/PathConstraintSpacingTimeline.h": [ + { + "name": "PathConstraintSpacingTimeline", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "superTypes": [ + "ConstraintTimeline1" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PathConstraintSpacingTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "constraintIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~PathConstraintSpacingTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Physics.h": [ + { + "kind": "enum", + "name": "Physics", + "values": [ + { + "name": "Physics_None" + }, + { + "name": "Physics_Reset" + }, + { + "name": "Physics_Update" + }, + { + "name": "Physics_Pose" + } + ], + "loc": { + "line": 35, + "col": 10 + } + } + ], + "spine/PhysicsConstraint.h": [ + { + "name": "PhysicsConstraint", + "kind": "class", + "loc": { + "line": 47, + "col": 15 + }, + "superTypes": [ + "ConstraintGeneric" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PhysicsConstraint", + "parameters": [ + { + "name": "data", + "type": "PhysicsConstraintData &" + }, + { + "name": "skeleton", + "type": "Skeleton &" + } + ] + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "physics", + "type": "Physics" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "sort", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isSourceActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "copy", + "returnType": "PhysicsConstraint *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "reset", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "translate", + "returnType": "void", + "parameters": [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "rotate", + "returnType": "void", + "parameters": [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + }, + { + "name": "degrees", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBone", + "returnType": "BonePose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBone", + "returnType": "void", + "parameters": [ + { + "name": "bone", + "type": "BonePose &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "ConstraintData &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "getPose", + "returnType": "PhysicsConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "getAppliedPose", + "returnType": "PhysicsConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "resetConstrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "constrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "isPoseEqualToApplied", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "isActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "setActive", + "returnType": "void", + "parameters": [ + { + "name": "active", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/PhysicsConstraintData.h": [ + { + "name": "PhysicsConstraintData", + "kind": "class", + "loc": { + "line": 44, + "col": 15 + }, + "superTypes": [ + "ConstraintDataGeneric" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PhysicsConstraintData", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "method", + "name": "create", + "returnType": "Constraint *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBone", + "returnType": "BoneData *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBone", + "returnType": "void", + "parameters": [ + { + "name": "bone", + "type": "BoneData *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getStep", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setStep", + "returnType": "void", + "parameters": [ + { + "name": "step", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setX", + "returnType": "void", + "parameters": [ + { + "name": "x", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setY", + "returnType": "void", + "parameters": [ + { + "name": "y", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRotate", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setRotate", + "returnType": "void", + "parameters": [ + { + "name": "rotate", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getScaleX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScaleX", + "returnType": "void", + "parameters": [ + { + "name": "scaleX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getShearX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setShearX", + "returnType": "void", + "parameters": [ + { + "name": "shearX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getLimit", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLimit", + "returnType": "void", + "parameters": [ + { + "name": "limit", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getInertiaGlobal", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setInertiaGlobal", + "returnType": "void", + "parameters": [ + { + "name": "inertiaGlobal", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getStrengthGlobal", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setStrengthGlobal", + "returnType": "void", + "parameters": [ + { + "name": "strengthGlobal", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDampingGlobal", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setDampingGlobal", + "returnType": "void", + "parameters": [ + { + "name": "dampingGlobal", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMassGlobal", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMassGlobal", + "returnType": "void", + "parameters": [ + { + "name": "massGlobal", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWindGlobal", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setWindGlobal", + "returnType": "void", + "parameters": [ + { + "name": "windGlobal", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getGravityGlobal", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setGravityGlobal", + "returnType": "void", + "parameters": [ + { + "name": "gravityGlobal", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixGlobal", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixGlobal", + "returnType": "void", + "parameters": [ + { + "name": "mixGlobal", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "isSkinRequired", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "getSetupPose", + "returnType": "PhysicsConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "setSkinRequired", + "returnType": "void", + "parameters": [ + { + "name": "skinRequired", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/PhysicsConstraintPose.h": [ + { + "name": "PhysicsConstraintPose", + "kind": "class", + "loc": { + "line": 38, + "col": 18 + }, + "superTypes": [ + "Pose" + ], + "members": [ + { + "kind": "constructor", + "name": "PhysicsConstraintPose", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~PhysicsConstraintPose", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "set", + "returnType": "void", + "parameters": [ + { + "name": "pose", + "type": "PhysicsConstraintPose &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getInertia", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setInertia", + "returnType": "void", + "parameters": [ + { + "name": "inertia", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getStrength", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setStrength", + "returnType": "void", + "parameters": [ + { + "name": "strength", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDamping", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setDamping", + "returnType": "void", + "parameters": [ + { + "name": "damping", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMassInverse", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMassInverse", + "returnType": "void", + "parameters": [ + { + "name": "massInverse", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWind", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setWind", + "returnType": "void", + "parameters": [ + { + "name": "wind", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getGravity", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setGravity", + "returnType": "void", + "parameters": [ + { + "name": "gravity", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMix", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMix", + "returnType": "void", + "parameters": [ + { + "name": "mix", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/PhysicsConstraintTimeline.h": [ + { + "name": "PhysicsConstraintTimeline", + "kind": "class", + "loc": { + "line": 42, + "col": 15 + }, + "superTypes": [ + "CurveTimeline1", + "ConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PhysicsConstraintTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "constraintIndex", + "type": "int" + }, + { + "name": "property", + "type": "Property" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline1" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline" + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "PhysicsConstraintInertiaTimeline", + "kind": "class", + "loc": { + "line": 67, + "col": 18 + }, + "superTypes": [ + "PhysicsConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PhysicsConstraintInertiaTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "physicsConstraintIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "PhysicsConstraintStrengthTimeline", + "kind": "class", + "loc": { + "line": 92, + "col": 18 + }, + "superTypes": [ + "PhysicsConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PhysicsConstraintStrengthTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "physicsConstraintIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "PhysicsConstraintDampingTimeline", + "kind": "class", + "loc": { + "line": 117, + "col": 18 + }, + "superTypes": [ + "PhysicsConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PhysicsConstraintDampingTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "physicsConstraintIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "PhysicsConstraintMassTimeline", + "kind": "class", + "loc": { + "line": 142, + "col": 18 + }, + "superTypes": [ + "PhysicsConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PhysicsConstraintMassTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "physicsConstraintIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "PhysicsConstraintWindTimeline", + "kind": "class", + "loc": { + "line": 167, + "col": 18 + }, + "superTypes": [ + "PhysicsConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PhysicsConstraintWindTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "physicsConstraintIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "PhysicsConstraintGravityTimeline", + "kind": "class", + "loc": { + "line": 192, + "col": 18 + }, + "superTypes": [ + "PhysicsConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PhysicsConstraintGravityTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "physicsConstraintIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "PhysicsConstraintMixTimeline", + "kind": "class", + "loc": { + "line": 217, + "col": 18 + }, + "superTypes": [ + "PhysicsConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PhysicsConstraintMixTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "physicsConstraintIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PhysicsConstraintTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "PhysicsConstraintResetTimeline", + "kind": "class", + "loc": { + "line": 242, + "col": 18 + }, + "superTypes": [ + "Timeline", + "ConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PhysicsConstraintResetTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "constraintIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "int" + }, + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/PointAttachment.h": [ + { + "name": "PointAttachment", + "kind": "class", + "loc": { + "line": 46, + "col": 15 + }, + "superTypes": [ + "Attachment" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "PointAttachment", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "method", + "name": "getX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setX", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setY", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRotation", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setRotation", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getColor", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "computeWorldPosition", + "returnType": "void", + "parameters": [ + { + "name": "bone", + "type": "BonePose &" + }, + { + "name": "ox", + "type": "float &" + }, + { + "name": "oy", + "type": "float &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "computeWorldRotation", + "returnType": "float", + "parameters": [ + { + "name": "bone", + "type": "BonePose &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "copy", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + }, + { + "kind": "method", + "name": "getRefCount", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + }, + { + "kind": "method", + "name": "reference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + }, + { + "kind": "method", + "name": "dereference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Pool.h": [ + { + "name": "Pool", + "kind": "class", + "loc": { + "line": 40, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "Pool", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~Pool", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "obtain", + "returnType": "T *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "free", + "returnType": "void", + "parameters": [ + { + "name": "object", + "type": "T *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": true, + "templateParams": [ + "T" + ], + "inheritedMethodsAdded": true + } + ], + "spine/Pose.h": [ + { + "name": "Pose", + "kind": "class", + "loc": { + "line": 37, + "col": 18 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "Pose

", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~Pose

", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "set", + "returnType": "void", + "parameters": [ + { + "name": "pose", + "type": "P &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": true, + "templateParams": [ + "P" + ], + "inheritedMethodsAdded": true + } + ], + "spine/Posed.h": [ + { + "name": "Posed", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "members": [ + { + "kind": "constructor", + "name": "Posed", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~Posed", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "constrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "resetConstrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "isPoseEqualToApplied", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "PosedGeneric", + "kind": "class", + "loc": { + "line": 55, + "col": 15 + }, + "superTypes": [ + "Posed", + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "PosedGeneric", + "parameters": [ + { + "name": "data", + "type": "D &" + } + ] + }, + { + "kind": "destructor", + "name": "~PosedGeneric", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "D &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPose", + "returnType": "P &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAppliedPose", + "returnType": "A &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "resetConstrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "constrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isPoseEqualToApplied", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": true, + "templateParams": [ + "D", + "P", + "A" + ], + "inheritedMethodsAdded": true + } + ], + "spine/PosedActive.h": [ + { + "name": "PosedActive", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "members": [ + { + "kind": "constructor", + "name": "PosedActive", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~PosedActive", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "isActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setActive", + "returnType": "void", + "parameters": [ + { + "name": "active", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/PosedData.h": [ + { + "name": "PosedData", + "kind": "class", + "loc": { + "line": 40, + "col": 18 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "PosedData", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "destructor", + "name": "~PosedData", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isSkinRequired", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSkinRequired", + "returnType": "void", + "parameters": [ + { + "name": "skinRequired", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "PosedDataGeneric", + "kind": "class", + "loc": { + "line": 92, + "col": 18 + }, + "superTypes": [ + "PosedData" + ], + "members": [ + { + "kind": "constructor", + "name": "PosedDataGeneric

", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "destructor", + "name": "~PosedDataGeneric

", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "getSetupPose", + "returnType": "P &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSetupPose", + "returnType": "const P &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedData" + }, + { + "kind": "method", + "name": "isSkinRequired", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedData" + }, + { + "kind": "method", + "name": "setSkinRequired", + "returnType": "void", + "parameters": [ + { + "name": "skinRequired", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedData" + } + ], + "isAbstract": false, + "isTemplate": true, + "templateParams": [ + "P" + ], + "inheritedMethodsAdded": true + } + ], + "spine/PositionMode.h": [ + { + "kind": "enum", + "name": "PositionMode", + "values": [ + { + "name": "PositionMode_Fixed", + "value": "0" + }, + { + "name": "PositionMode_Percent" + } + ], + "loc": { + "line": 39, + "col": 7 + } + } + ], + "spine/Property.h": [ + { + "kind": "enum", + "name": "Property", + "values": [ + { + "name": "Property_Rotate", + "value": "1 << 0" + }, + { + "name": "Property_X", + "value": "1 << 1" + }, + { + "name": "Property_Y", + "value": "1 << 2" + }, + { + "name": "Property_ScaleX", + "value": "1 << 3" + }, + { + "name": "Property_ScaleY", + "value": "1 << 4" + }, + { + "name": "Property_ShearX", + "value": "1 << 5" + }, + { + "name": "Property_ShearY", + "value": "1 << 6" + }, + { + "name": "Property_Inherit", + "value": "1 << 7" + }, + { + "name": "Property_Rgb", + "value": "1 << 8" + }, + { + "name": "Property_Alpha", + "value": "1 << 9" + }, + { + "name": "Property_Rgb2", + "value": "1 << 10" + }, + { + "name": "Property_Attachment", + "value": "1 << 11" + }, + { + "name": "Property_Deform", + "value": "1 << 12" + }, + { + "name": "Property_Event", + "value": "1 << 13" + }, + { + "name": "Property_DrawOrder", + "value": "1 << 14" + }, + { + "name": "Property_IkConstraint", + "value": "1 << 15" + }, + { + "name": "Property_TransformConstraint", + "value": "1 << 16" + }, + { + "name": "Property_PathConstraintPosition", + "value": "1 << 17" + }, + { + "name": "Property_PathConstraintSpacing", + "value": "1 << 18" + }, + { + "name": "Property_PathConstraintMix", + "value": "1 << 19" + }, + { + "name": "Property_PhysicsConstraintInertia", + "value": "1 << 20" + }, + { + "name": "Property_PhysicsConstraintStrength", + "value": "1 << 21" + }, + { + "name": "Property_PhysicsConstraintDamping", + "value": "1 << 22" + }, + { + "name": "Property_PhysicsConstraintMass", + "value": "1 << 23" + }, + { + "name": "Property_PhysicsConstraintWind", + "value": "1 << 24" + }, + { + "name": "Property_PhysicsConstraintGravity", + "value": "1 << 25" + }, + { + "name": "Property_PhysicsConstraintMix", + "value": "1 << 26" + }, + { + "name": "Property_PhysicsConstraintReset", + "value": "1 << 27" + }, + { + "name": "Property_Sequence", + "value": "1 << 28" + }, + { + "name": "Property_SliderTime", + "value": "1 << 29" + }, + { + "name": "Property_SliderMix", + "value": "1 << 30" + } + ], + "loc": { + "line": 35, + "col": 7 + } + } + ], + "spine/RTTI.h": [ + { + "name": "RTTI", + "kind": "class", + "loc": { + "line": 36, + "col": 15 + }, + "members": [ + { + "kind": "constructor", + "name": "RTTI", + "parameters": [ + { + "name": "className", + "type": "const char *" + } + ] + }, + { + "kind": "constructor", + "name": "RTTI", + "parameters": [ + { + "name": "className", + "type": "const char *" + }, + { + "name": "baseRTTI", + "type": "const RTTI &" + } + ] + }, + { + "kind": "constructor", + "name": "RTTI", + "parameters": [ + { + "name": "className", + "type": "const char *" + }, + { + "name": "baseRTTI", + "type": "const RTTI &" + }, + { + "name": "interface1", + "type": "const RTTI *" + }, + { + "name": "interface2", + "type": "const RTTI *" + }, + { + "name": "interface3", + "type": "const RTTI *" + } + ] + }, + { + "kind": "method", + "name": "getClassName", + "returnType": "const char *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isExactly", + "returnType": "bool", + "parameters": [ + { + "name": "rtti", + "type": "const RTTI &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "instanceOf", + "returnType": "bool", + "parameters": [ + { + "name": "rtti", + "type": "const RTTI &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false + } + ], + "spine/RegionAttachment.h": [ + { + "name": "RegionAttachment", + "kind": "class", + "loc": { + "line": 48, + "col": 15 + }, + "superTypes": [ + "Attachment" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "RegionAttachment", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "destructor", + "name": "~RegionAttachment", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "updateRegion", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "worldVertices", + "type": "float *" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "worldVertices", + "type": "Array &" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setX", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setY", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRotation", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setRotation", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getScaleX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScaleX", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getScaleY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScaleY", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWidth", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setWidth", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getHeight", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setHeight", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getColor", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPath", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setPath", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRegion", + "returnType": "TextureRegion *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setRegion", + "returnType": "void", + "parameters": [ + { + "name": "region", + "type": "TextureRegion *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSequence", + "returnType": "Sequence *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSequence", + "returnType": "void", + "parameters": [ + { + "name": "sequence", + "type": "Sequence *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getOffset", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getUVs", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "copy", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + }, + { + "kind": "method", + "name": "getRefCount", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + }, + { + "kind": "method", + "name": "reference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + }, + { + "kind": "method", + "name": "dereference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/RotateMode.h": [ + { + "kind": "enum", + "name": "RotateMode", + "values": [ + { + "name": "RotateMode_Tangent", + "value": "0" + }, + { + "name": "RotateMode_Chain" + }, + { + "name": "RotateMode_ChainScale" + } + ], + "loc": { + "line": 39, + "col": 7 + } + } + ], + "spine/RotateTimeline.h": [ + { + "name": "RotateTimeline", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "superTypes": [ + "BoneTimeline1" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "RotateTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/ScaleTimeline.h": [ + { + "name": "ScaleTimeline", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "superTypes": [ + "BoneTimeline2" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "ScaleTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ScaleXTimeline", + "kind": "class", + "loc": { + "line": 53, + "col": 15 + }, + "superTypes": [ + "BoneTimeline1" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "ScaleXTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ScaleYTimeline", + "kind": "class", + "loc": { + "line": 69, + "col": 15 + }, + "superTypes": [ + "BoneTimeline1" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "ScaleYTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Sequence.h": [ + { + "name": "Sequence", + "kind": "class", + "loc": { + "line": 45, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "Sequence", + "parameters": [ + { + "name": "count", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~Sequence", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "copy", + "returnType": "Sequence *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "slot", + "type": "SlotPose *" + }, + { + "name": "attachment", + "type": "Attachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPath", + "returnType": "String", + "parameters": [ + { + "name": "basePath", + "type": "const String &" + }, + { + "name": "index", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getId", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setId", + "returnType": "void", + "parameters": [ + { + "name": "id", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getStart", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setStart", + "returnType": "void", + "parameters": [ + { + "name": "start", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDigits", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setDigits", + "returnType": "void", + "parameters": [ + { + "name": "digits", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSetupIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSetupIndex", + "returnType": "void", + "parameters": [ + { + "name": "setupIndex", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRegions", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "kind": "enum", + "name": "SequenceMode", + "values": [ + { + "name": "SequenceMode_hold", + "value": "0" + }, + { + "name": "SequenceMode_once", + "value": "1" + }, + { + "name": "SequenceMode_loop", + "value": "2" + }, + { + "name": "SequenceMode_pingpong", + "value": "3" + }, + { + "name": "SequenceMode_onceReverse", + "value": "4" + }, + { + "name": "SequenceMode_loopReverse", + "value": "5" + }, + { + "name": "SequenceMode_pingpongReverse", + "value": "6" + } + ], + "loc": { + "line": 90, + "col": 7 + } + } + ], + "spine/SequenceTimeline.h": [ + { + "name": "SequenceTimeline", + "kind": "class", + "loc": { + "line": 42, + "col": 15 + }, + "superTypes": [ + "Timeline", + "SlotTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "SequenceTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "slotIndex", + "type": "int" + }, + { + "name": "attachment", + "type": "Attachment *" + } + ] + }, + { + "kind": "destructor", + "name": "~SequenceTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "int" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "mode", + "type": "SequenceMode" + }, + { + "name": "index", + "type": "int" + }, + { + "name": "delay", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAttachment", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "Timeline" + }, + { + "kind": "method", + "name": "getSlotIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotTimeline" + }, + { + "kind": "method", + "name": "setSlotIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/ShearTimeline.h": [ + { + "name": "ShearTimeline", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "superTypes": [ + "BoneTimeline2" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "ShearTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ShearXTimeline", + "kind": "class", + "loc": { + "line": 53, + "col": 15 + }, + "superTypes": [ + "BoneTimeline1" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "ShearXTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ShearYTimeline", + "kind": "class", + "loc": { + "line": 69, + "col": 15 + }, + "superTypes": [ + "BoneTimeline1" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "ShearYTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Skeleton.h": [ + { + "name": "Skeleton", + "kind": "class", + "loc": { + "line": 68, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "Skeleton", + "parameters": [ + { + "name": "skeletonData", + "type": "SkeletonData &" + } + ] + }, + { + "kind": "destructor", + "name": "~Skeleton", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "updateCache", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "printUpdateCache", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "constrained", + "returnType": "void", + "parameters": [ + { + "name": "object", + "type": "Posed &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "sortBone", + "returnType": "void", + "parameters": [ + { + "name": "bone", + "type": "Bone *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "sortReset", + "returnType": "void", + "parameters": [ + { + "name": "bones", + "type": "Array &" + } + ], + "isStatic": true, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "updateWorldTransform", + "returnType": "void", + "parameters": [ + { + "name": "physics", + "type": "Physics" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "updateWorldTransform", + "returnType": "void", + "parameters": [ + { + "name": "physics", + "type": "Physics" + }, + { + "name": "parent", + "type": "BonePose *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setupPose", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setupPoseBones", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setupPoseSlots", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "SkeletonData *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getUpdateCache", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getRootBone", + "returnType": "Bone *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findBone", + "returnType": "Bone *", + "parameters": [ + { + "name": "boneName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSlots", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findSlot", + "returnType": "Slot *", + "parameters": [ + { + "name": "slotName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDrawOrder", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSkin", + "returnType": "Skin *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSkin", + "returnType": "void", + "parameters": [ + { + "name": "skinName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSkin", + "returnType": "void", + "parameters": [ + { + "name": "newSkin", + "type": "Skin *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAttachment", + "returnType": "Attachment *", + "parameters": [ + { + "name": "slotName", + "type": "const String &" + }, + { + "name": "attachmentName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAttachment", + "returnType": "Attachment *", + "parameters": [ + { + "name": "slotIndex", + "type": "int" + }, + { + "name": "attachmentName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAttachment", + "returnType": "void", + "parameters": [ + { + "name": "slotName", + "type": "const String &" + }, + { + "name": "attachmentName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getConstraints", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPhysicsConstraints", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBounds", + "returnType": "void", + "parameters": [ + { + "name": "outX", + "type": "float &" + }, + { + "name": "outY", + "type": "float &" + }, + { + "name": "outWidth", + "type": "float &" + }, + { + "name": "outHeight", + "type": "float &" + }, + { + "name": "outVertexBuffer", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBounds", + "returnType": "void", + "parameters": [ + { + "name": "outX", + "type": "float &" + }, + { + "name": "outY", + "type": "float &" + }, + { + "name": "outWidth", + "type": "float &" + }, + { + "name": "outHeight", + "type": "float &" + }, + { + "name": "outVertexBuffer", + "type": "Array &" + }, + { + "name": "clipper", + "type": "SkeletonClipping *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getColor", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setColor", + "returnType": "void", + "parameters": [ + { + "name": "color", + "type": "Color &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setColor", + "returnType": "void", + "parameters": [ + { + "name": "r", + "type": "float" + }, + { + "name": "g", + "type": "float" + }, + { + "name": "b", + "type": "float" + }, + { + "name": "a", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getScaleX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScaleX", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getScaleY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScaleY", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScale", + "returnType": "void", + "parameters": [ + { + "name": "scaleX", + "type": "float" + }, + { + "name": "scaleY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setX", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setY", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setPosition", + "returnType": "void", + "parameters": [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWindX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setWindX", + "returnType": "void", + "parameters": [ + { + "name": "windX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWindY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setWindY", + "returnType": "void", + "parameters": [ + { + "name": "windY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getGravityX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setGravityX", + "returnType": "void", + "parameters": [ + { + "name": "gravityX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getGravityY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setGravityY", + "returnType": "void", + "parameters": [ + { + "name": "gravityY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "physicsTranslate", + "returnType": "void", + "parameters": [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "physicsRotate", + "returnType": "void", + "parameters": [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + }, + { + "name": "degrees", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTime", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setTime", + "returnType": "void", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "delta", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SkeletonBinary.h": [ + { + "name": "SkeletonBinary", + "kind": "class", + "loc": { + "line": 68, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "SkeletonBinary", + "parameters": [ + { + "name": "atlas", + "type": "Atlas *" + } + ] + }, + { + "kind": "constructor", + "name": "SkeletonBinary", + "parameters": [ + { + "name": "attachmentLoader", + "type": "AttachmentLoader *" + }, + { + "name": "ownsLoader", + "type": "bool" + } + ] + }, + { + "kind": "destructor", + "name": "~SkeletonBinary", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "readSkeletonData", + "returnType": "SkeletonData *", + "parameters": [ + { + "name": "binary", + "type": "const unsigned char *" + }, + { + "name": "length", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "readSkeletonDataFile", + "returnType": "SkeletonData *", + "parameters": [ + { + "name": "path", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScale", + "returnType": "void", + "parameters": [ + { + "name": "scale", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getError", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SkeletonBounds.h": [ + { + "name": "SkeletonBounds", + "kind": "class", + "loc": { + "line": 46, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "SkeletonBounds", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~SkeletonBounds", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "updateAabb", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "aabbContainsPoint", + "returnType": "bool", + "parameters": [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "aabbIntersectsSegment", + "returnType": "bool", + "parameters": [ + { + "name": "x1", + "type": "float" + }, + { + "name": "y1", + "type": "float" + }, + { + "name": "x2", + "type": "float" + }, + { + "name": "y2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "aabbIntersectsSkeleton", + "returnType": "bool", + "parameters": [ + { + "name": "bounds", + "type": "SkeletonBounds &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "containsPoint", + "returnType": "bool", + "parameters": [ + { + "name": "polygon", + "type": "Polygon *" + }, + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "containsPoint", + "returnType": "BoundingBoxAttachment *", + "parameters": [ + { + "name": "x", + "type": "float" + }, + { + "name": "y", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "intersectsSegment", + "returnType": "BoundingBoxAttachment *", + "parameters": [ + { + "name": "x1", + "type": "float" + }, + { + "name": "y1", + "type": "float" + }, + { + "name": "x2", + "type": "float" + }, + { + "name": "y2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "intersectsSegment", + "returnType": "bool", + "parameters": [ + { + "name": "polygon", + "type": "Polygon *" + }, + { + "name": "x1", + "type": "float" + }, + { + "name": "y1", + "type": "float" + }, + { + "name": "x2", + "type": "float" + }, + { + "name": "y2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPolygon", + "returnType": "Polygon *", + "parameters": [ + { + "name": "attachment", + "type": "BoundingBoxAttachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBoundingBox", + "returnType": "BoundingBoxAttachment *", + "parameters": [ + { + "name": "polygon", + "type": "Polygon *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPolygons", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBoundingBoxes", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMinX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMinY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMaxX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMaxY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWidth", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getHeight", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "Polygon", + "kind": "class", + "loc": { + "line": 124, + "col": 8 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "field", + "name": "_vertices", + "type": "Array", + "isStatic": false + }, + { + "kind": "field", + "name": "_count", + "type": "int", + "isStatic": false + }, + { + "kind": "constructor", + "name": "Polygon", + "parameters": [] + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SkeletonClipping.h": [ + { + "name": "SkeletonClipping", + "kind": "class", + "loc": { + "line": 41, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "SkeletonClipping", + "parameters": [] + }, + { + "kind": "method", + "name": "clipStart", + "returnType": "size_t", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "clip", + "type": "ClippingAttachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clipEnd", + "returnType": "void", + "parameters": [ + { + "name": "slot", + "type": "Slot &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clipEnd", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clipTriangles", + "returnType": "bool", + "parameters": [ + { + "name": "vertices", + "type": "float *" + }, + { + "name": "triangles", + "type": "unsigned short *" + }, + { + "name": "trianglesLength", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clipTriangles", + "returnType": "bool", + "parameters": [ + { + "name": "vertices", + "type": "float *" + }, + { + "name": "triangles", + "type": "unsigned short *" + }, + { + "name": "trianglesLength", + "type": "size_t" + }, + { + "name": "uvs", + "type": "float *" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "clipTriangles", + "returnType": "bool", + "parameters": [ + { + "name": "vertices", + "type": "Array &" + }, + { + "name": "triangles", + "type": "Array &" + }, + { + "name": "uvs", + "type": "Array &" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isClipping", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getClippedVertices", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getClippedTriangles", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getClippedUVs", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SkeletonData.h": [ + { + "name": "SkeletonData", + "kind": "class", + "loc": { + "line": 62, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "SkeletonData", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~SkeletonData", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "findBone", + "returnType": "BoneData *", + "parameters": [ + { + "name": "boneName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findSlot", + "returnType": "SlotData *", + "parameters": [ + { + "name": "slotName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findSkin", + "returnType": "Skin *", + "parameters": [ + { + "name": "skinName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findEvent", + "returnType": "EventData *", + "parameters": [ + { + "name": "eventDataName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findAnimation", + "returnType": "Animation *", + "parameters": [ + { + "name": "animationName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findIkConstraint", + "returnType": "IkConstraintData *", + "parameters": [ + { + "name": "constraintName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findTransformConstraint", + "returnType": "TransformConstraintData *", + "parameters": [ + { + "name": "constraintName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findPathConstraint", + "returnType": "PathConstraintData *", + "parameters": [ + { + "name": "constraintName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findPhysicsConstraint", + "returnType": "PhysicsConstraintData *", + "parameters": [ + { + "name": "constraintName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setName", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSlots", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSkins", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDefaultSkin", + "returnType": "Skin *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setDefaultSkin", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "Skin *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getEvents", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAnimations", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getIkConstraints", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTransformConstraints", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPathConstraints", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPhysicsConstraints", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getConstraints", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setX", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setY", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWidth", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setWidth", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getHeight", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setHeight", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getReferenceScale", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setReferenceScale", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getVersion", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setVersion", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getHash", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setHash", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getImagesPath", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setImagesPath", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAudioPath", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAudioPath", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFps", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFps", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SkeletonJson.h": [ + { + "name": "SkeletonJson", + "kind": "class", + "loc": { + "line": 68, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "SkeletonJson", + "parameters": [ + { + "name": "atlas", + "type": "Atlas *" + } + ] + }, + { + "kind": "constructor", + "name": "SkeletonJson", + "parameters": [ + { + "name": "attachmentLoader", + "type": "AttachmentLoader *" + }, + { + "name": "ownsLoader", + "type": "bool" + } + ] + }, + { + "kind": "destructor", + "name": "~SkeletonJson", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "readSkeletonDataFile", + "returnType": "SkeletonData *", + "parameters": [ + { + "name": "path", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "readSkeletonData", + "returnType": "SkeletonData *", + "parameters": [ + { + "name": "json", + "type": "const char *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScale", + "returnType": "void", + "parameters": [ + { + "name": "scale", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getError", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SkeletonRenderer.h": [ + { + "name": "RenderCommand", + "kind": "struct", + "loc": { + "line": 40, + "col": 19 + }, + "members": [ + { + "kind": "field", + "name": "positions", + "type": "float *", + "isStatic": false + }, + { + "kind": "field", + "name": "uvs", + "type": "float *", + "isStatic": false + }, + { + "kind": "field", + "name": "colors", + "type": "uint32_t *", + "isStatic": false + }, + { + "kind": "field", + "name": "darkColors", + "type": "uint32_t *", + "isStatic": false + }, + { + "kind": "field", + "name": "numVertices", + "type": "int32_t", + "isStatic": false + }, + { + "kind": "field", + "name": "indices", + "type": "uint16_t *", + "isStatic": false + }, + { + "kind": "field", + "name": "numIndices", + "type": "int32_t", + "isStatic": false + }, + { + "kind": "field", + "name": "blendMode", + "type": "BlendMode", + "isStatic": false + }, + { + "kind": "field", + "name": "texture", + "type": "void *", + "isStatic": false + }, + { + "kind": "field", + "name": "next", + "type": "RenderCommand *", + "isStatic": false + } + ], + "isAbstract": false, + "isTemplate": false + }, + { + "name": "SkeletonRenderer", + "kind": "class", + "loc": { + "line": 53, + "col": 18 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "SkeletonRenderer", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~SkeletonRenderer", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "render", + "returnType": "RenderCommand *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Skin.h": [ + { + "name": "Skin", + "kind": "class", + "loc": { + "line": 49, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "Skin", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "destructor", + "name": "~Skin", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "setAttachment", + "returnType": "void", + "parameters": [ + { + "name": "slotIndex", + "type": "size_t" + }, + { + "name": "name", + "type": "const String &" + }, + { + "name": "attachment", + "type": "Attachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAttachment", + "returnType": "Attachment *", + "parameters": [ + { + "name": "slotIndex", + "type": "size_t" + }, + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "removeAttachment", + "returnType": "void", + "parameters": [ + { + "name": "slotIndex", + "type": "size_t" + }, + { + "name": "name", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findNamesForSlot", + "returnType": "void", + "parameters": [ + { + "name": "slotIndex", + "type": "size_t" + }, + { + "name": "names", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "findAttachmentsForSlot", + "returnType": "void", + "parameters": [ + { + "name": "slotIndex", + "type": "size_t" + }, + { + "name": "attachments", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "addSkin", + "returnType": "void", + "parameters": [ + { + "name": "other", + "type": "Skin *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "copySkin", + "returnType": "void", + "parameters": [ + { + "name": "other", + "type": "Skin *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAttachments", + "returnType": "AttachmentMap::Entries", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getConstraints", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getColor", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Slider.h": [ + { + "name": "Slider", + "kind": "class", + "loc": { + "line": 45, + "col": 15 + }, + "superTypes": [ + "ConstraintGeneric" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "Slider", + "parameters": [ + { + "name": "data", + "type": "SliderData &" + }, + { + "name": "skeleton", + "type": "Skeleton &" + } + ] + }, + { + "kind": "method", + "name": "copy", + "returnType": "Slider *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "physics", + "type": "Physics" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "sort", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isSourceActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBone", + "returnType": "Bone *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBone", + "returnType": "void", + "parameters": [ + { + "name": "bone", + "type": "Bone *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "ConstraintData &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "getPose", + "returnType": "SliderPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "getAppliedPose", + "returnType": "SliderPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "resetConstrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "constrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "isPoseEqualToApplied", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "isActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "setActive", + "returnType": "void", + "parameters": [ + { + "name": "active", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SliderData.h": [ + { + "name": "SliderData", + "kind": "class", + "loc": { + "line": 46, + "col": 15 + }, + "superTypes": [ + "ConstraintDataGeneric" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "SliderData", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "method", + "name": "create", + "returnType": "Constraint *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAnimation", + "returnType": "Animation *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAnimation", + "returnType": "void", + "parameters": [ + { + "name": "animation", + "type": "Animation *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAdditive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAdditive", + "returnType": "void", + "parameters": [ + { + "name": "additive", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getLoop", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLoop", + "returnType": "void", + "parameters": [ + { + "name": "loop", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBone", + "returnType": "BoneData *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBone", + "returnType": "void", + "parameters": [ + { + "name": "bone", + "type": "BoneData *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getProperty", + "returnType": "FromProperty *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setProperty", + "returnType": "void", + "parameters": [ + { + "name": "property", + "type": "FromProperty *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getScale", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setScale", + "returnType": "void", + "parameters": [ + { + "name": "scale", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getOffset", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setOffset", + "returnType": "void", + "parameters": [ + { + "name": "offset", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getLocal", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLocal", + "returnType": "void", + "parameters": [ + { + "name": "local", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "isSkinRequired", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "getSetupPose", + "returnType": "SliderPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "setSkinRequired", + "returnType": "void", + "parameters": [ + { + "name": "skinRequired", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SliderMixTimeline.h": [ + { + "name": "SliderMixTimeline", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "superTypes": [ + "ConstraintTimeline1" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "SliderMixTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "sliderIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~SliderMixTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SliderPose.h": [ + { + "name": "SliderPose", + "kind": "class", + "loc": { + "line": 40, + "col": 18 + }, + "superTypes": [ + "Pose" + ], + "members": [ + { + "kind": "constructor", + "name": "SliderPose", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~SliderPose", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "set", + "returnType": "void", + "parameters": [ + { + "name": "pose", + "type": "SliderPose &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTime", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setTime", + "returnType": "void", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMix", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMix", + "returnType": "void", + "parameters": [ + { + "name": "mix", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SliderTimeline.h": [ + { + "name": "SliderTimeline", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "superTypes": [ + "ConstraintTimeline1" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "SliderTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "sliderIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~SliderTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline1" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Slot.h": [ + { + "name": "Slot", + "kind": "class", + "loc": { + "line": 47, + "col": 15 + }, + "superTypes": [ + "PosedGeneric" + ], + "members": [ + { + "kind": "constructor", + "name": "Slot", + "parameters": [ + { + "name": "data", + "type": "SlotData &" + }, + { + "name": "skeleton", + "type": "Skeleton &" + } + ] + }, + { + "kind": "method", + "name": "getBone", + "returnType": "Bone &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setupPose", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "SlotData &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "getPose", + "returnType": "SlotPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "getAppliedPose", + "returnType": "SlotPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "resetConstrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "constrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + }, + { + "kind": "method", + "name": "isPoseEqualToApplied", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SlotCurveTimeline.h": [ + { + "name": "SlotCurveTimeline", + "kind": "class", + "loc": { + "line": 41, + "col": 15 + }, + "superTypes": [ + "CurveTimeline", + "SlotTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "SlotCurveTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "frameEntries", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "slotIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~SlotCurveTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getSlotIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotTimeline" + }, + { + "kind": "method", + "name": "setSlotIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "SlotTimeline" + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SlotData.h": [ + { + "name": "SlotData", + "kind": "class", + "loc": { + "line": 43, + "col": 15 + }, + "superTypes": [ + "PosedDataGeneric" + ], + "members": [ + { + "kind": "constructor", + "name": "SlotData", + "parameters": [ + { + "name": "index", + "type": "int" + }, + { + "name": "name", + "type": "const String &" + }, + { + "name": "boneData", + "type": "BoneData &" + } + ] + }, + { + "kind": "method", + "name": "getIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBoneData", + "returnType": "BoneData &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAttachmentName", + "returnType": "void", + "parameters": [ + { + "name": "attachmentName", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAttachmentName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBlendMode", + "returnType": "BlendMode", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBlendMode", + "returnType": "void", + "parameters": [ + { + "name": "blendMode", + "type": "BlendMode" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getVisible", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setVisible", + "returnType": "void", + "parameters": [ + { + "name": "visible", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSetupPose", + "returnType": "SlotPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedDataGeneric" + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedDataGeneric" + }, + { + "kind": "method", + "name": "isSkinRequired", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedDataGeneric" + }, + { + "kind": "method", + "name": "setSkinRequired", + "returnType": "void", + "parameters": [ + { + "name": "skinRequired", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "PosedDataGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SlotPose.h": [ + { + "name": "SlotPose", + "kind": "class", + "loc": { + "line": 43, + "col": 15 + }, + "superTypes": [ + "Pose" + ], + "members": [ + { + "kind": "constructor", + "name": "SlotPose", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~SlotPose", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "set", + "returnType": "void", + "parameters": [ + { + "name": "pose", + "type": "SlotPose &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getColor", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDarkColor", + "returnType": "Color &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "hasDarkColor", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setHasDarkColor", + "returnType": "void", + "parameters": [ + { + "name": "hasDarkColor", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAttachment", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAttachment", + "returnType": "void", + "parameters": [ + { + "name": "attachment", + "type": "Attachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSequenceIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSequenceIndex", + "returnType": "void", + "parameters": [ + { + "name": "sequenceIndex", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDeform", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SlotTimeline.h": [ + { + "name": "SlotTimeline", + "kind": "class", + "loc": { + "line": 39, + "col": 15 + }, + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "SlotTimeline", + "parameters": [ + { + "name": "slotIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~SlotTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "getSlotIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSlotIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/SpacingMode.h": [ + { + "kind": "enum", + "name": "SpacingMode", + "values": [ + { + "name": "SpacingMode_Length", + "value": "0" + }, + { + "name": "SpacingMode_Fixed" + }, + { + "name": "SpacingMode_Percent" + }, + { + "name": "SpacingMode_Proportional" + } + ], + "loc": { + "line": 39, + "col": 7 + } + } + ], + "spine/SpineString.h": [ + { + "name": "String", + "kind": "class", + "loc": { + "line": 40, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "String", + "parameters": [] + }, + { + "kind": "constructor", + "name": "String", + "parameters": [ + { + "name": "chars", + "type": "const char *" + }, + { + "name": "own", + "type": "bool" + }, + { + "name": "tofree", + "type": "bool" + } + ] + }, + { + "kind": "constructor", + "name": "String", + "parameters": [ + { + "name": "other", + "type": "const String &" + } + ] + }, + { + "kind": "method", + "name": "length", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isEmpty", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "buffer", + "returnType": "const char *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "own", + "returnType": "void", + "parameters": [ + { + "name": "other", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "own", + "returnType": "void", + "parameters": [ + { + "name": "chars", + "type": "const char *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "unown", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "append", + "returnType": "String &", + "parameters": [ + { + "name": "chars", + "type": "const char *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "append", + "returnType": "String &", + "parameters": [ + { + "name": "other", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "append", + "returnType": "String &", + "parameters": [ + { + "name": "other", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "append", + "returnType": "String &", + "parameters": [ + { + "name": "other", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "startsWith", + "returnType": "bool", + "parameters": [ + { + "name": "needle", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "lastIndexOf", + "returnType": "int", + "parameters": [ + { + "name": "c", + "type": "const char" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "substring", + "returnType": "String", + "parameters": [ + { + "name": "startIndex", + "type": "int" + }, + { + "name": "length", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "substring", + "returnType": "String", + "parameters": [ + { + "name": "startIndex", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "destructor", + "name": "~String", + "isVirtual": false, + "isPure": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/TextureLoader.h": [ + { + "name": "TextureLoader", + "kind": "class", + "loc": { + "line": 39, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "constructor", + "name": "TextureLoader", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~TextureLoader", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "load", + "returnType": "void", + "parameters": [ + { + "name": "page", + "type": "AtlasPage &" + }, + { + "name": "path", + "type": "const String &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "unload", + "returnType": "void", + "parameters": [ + { + "name": "texture", + "type": "void *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/TextureRegion.h": [ + { + "name": "TextureRegion", + "kind": "class", + "loc": { + "line": 36, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "field", + "name": "rendererObject", + "type": "void *", + "isStatic": false + }, + { + "kind": "field", + "name": "u", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "v", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "u2", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "v2", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "degrees", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "offsetX", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "offsetY", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "width", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "height", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "originalWidth", + "type": "int", + "isStatic": false + }, + { + "kind": "field", + "name": "originalHeight", + "type": "int", + "isStatic": false + }, + { + "kind": "constructor", + "name": "TextureRegion", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~TextureRegion", + "isVirtual": false, + "isPure": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Timeline.h": [ + { + "name": "Timeline", + "kind": "class", + "loc": { + "line": 45, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "Timeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "frameEntries", + "type": "size_t" + } + ] + }, + { + "kind": "destructor", + "name": "~Timeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/TransformConstraint.h": [ + { + "name": "TransformConstraint", + "kind": "class", + "loc": { + "line": 43, + "col": 15 + }, + "superTypes": [ + "ConstraintGeneric" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "TransformConstraint", + "parameters": [ + { + "name": "data", + "type": "TransformConstraintData &" + }, + { + "name": "skeleton", + "type": "Skeleton &" + } + ] + }, + { + "kind": "method", + "name": "copy", + "returnType": "TransformConstraint *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "physics", + "type": "Physics" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "sort", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "isSourceActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSource", + "returnType": "Bone *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSource", + "returnType": "void", + "parameters": [ + { + "name": "source", + "type": "Bone *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getData", + "returnType": "ConstraintData &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "getPose", + "returnType": "TransformConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "getAppliedPose", + "returnType": "TransformConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "resetConstrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "constrained", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "isPoseEqualToApplied", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "isActive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + }, + { + "kind": "method", + "name": "setActive", + "returnType": "void", + "parameters": [ + { + "name": "active", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/TransformConstraintData.h": [ + { + "name": "FromProperty", + "kind": "class", + "loc": { + "line": 48, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "field", + "name": "_offset", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "_to", + "type": "Array", + "isStatic": false + }, + { + "kind": "constructor", + "name": "FromProperty", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~FromProperty", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "value", + "returnType": "float", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "source", + "type": "BonePose &" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "offsets", + "type": "float *" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ToProperty", + "kind": "class", + "loc": { + "line": 66, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "field", + "name": "_offset", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "_max", + "type": "float", + "isStatic": false + }, + { + "kind": "field", + "name": "_scale", + "type": "float", + "isStatic": false + }, + { + "kind": "constructor", + "name": "ToProperty", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~ToProperty", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "mix", + "returnType": "float", + "parameters": [ + { + "name": "pose", + "type": "TransformConstraintPose &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "pose", + "type": "TransformConstraintPose &" + }, + { + "name": "bone", + "type": "BonePose &" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "additive", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "FromRotate", + "kind": "class", + "loc": { + "line": 89, + "col": 15 + }, + "superTypes": [ + "FromProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "FromRotate", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~FromRotate", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "value", + "returnType": "float", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "source", + "type": "BonePose &" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "offsets", + "type": "float *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ToRotate", + "kind": "class", + "loc": { + "line": 97, + "col": 15 + }, + "superTypes": [ + "ToProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "ToRotate", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~ToRotate", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "mix", + "returnType": "float", + "parameters": [ + { + "name": "pose", + "type": "TransformConstraintPose &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "pose", + "type": "TransformConstraintPose &" + }, + { + "name": "bone", + "type": "BonePose &" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "additive", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "FromX", + "kind": "class", + "loc": { + "line": 106, + "col": 15 + }, + "superTypes": [ + "FromProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "FromX", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~FromX", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "value", + "returnType": "float", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "source", + "type": "BonePose &" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "offsets", + "type": "float *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ToX", + "kind": "class", + "loc": { + "line": 114, + "col": 15 + }, + "superTypes": [ + "ToProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "ToX", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~ToX", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "mix", + "returnType": "float", + "parameters": [ + { + "name": "pose", + "type": "TransformConstraintPose &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "pose", + "type": "TransformConstraintPose &" + }, + { + "name": "bone", + "type": "BonePose &" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "additive", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "FromY", + "kind": "class", + "loc": { + "line": 123, + "col": 15 + }, + "superTypes": [ + "FromProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "FromY", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~FromY", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "value", + "returnType": "float", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "source", + "type": "BonePose &" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "offsets", + "type": "float *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ToY", + "kind": "class", + "loc": { + "line": 131, + "col": 15 + }, + "superTypes": [ + "ToProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "ToY", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~ToY", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "mix", + "returnType": "float", + "parameters": [ + { + "name": "pose", + "type": "TransformConstraintPose &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "pose", + "type": "TransformConstraintPose &" + }, + { + "name": "bone", + "type": "BonePose &" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "additive", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "FromScaleX", + "kind": "class", + "loc": { + "line": 140, + "col": 15 + }, + "superTypes": [ + "FromProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "FromScaleX", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~FromScaleX", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "value", + "returnType": "float", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "source", + "type": "BonePose &" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "offsets", + "type": "float *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ToScaleX", + "kind": "class", + "loc": { + "line": 148, + "col": 15 + }, + "superTypes": [ + "ToProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "ToScaleX", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~ToScaleX", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "mix", + "returnType": "float", + "parameters": [ + { + "name": "pose", + "type": "TransformConstraintPose &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "pose", + "type": "TransformConstraintPose &" + }, + { + "name": "bone", + "type": "BonePose &" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "additive", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "FromScaleY", + "kind": "class", + "loc": { + "line": 157, + "col": 15 + }, + "superTypes": [ + "FromProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "FromScaleY", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~FromScaleY", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "value", + "returnType": "float", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "source", + "type": "BonePose &" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "offsets", + "type": "float *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ToScaleY", + "kind": "class", + "loc": { + "line": 165, + "col": 15 + }, + "superTypes": [ + "ToProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "ToScaleY", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~ToScaleY", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "mix", + "returnType": "float", + "parameters": [ + { + "name": "pose", + "type": "TransformConstraintPose &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "pose", + "type": "TransformConstraintPose &" + }, + { + "name": "bone", + "type": "BonePose &" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "additive", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "FromShearY", + "kind": "class", + "loc": { + "line": 174, + "col": 15 + }, + "superTypes": [ + "FromProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "FromShearY", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~FromShearY", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "value", + "returnType": "float", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "source", + "type": "BonePose &" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "offsets", + "type": "float *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "ToShearY", + "kind": "class", + "loc": { + "line": 182, + "col": 15 + }, + "superTypes": [ + "ToProperty" + ], + "members": [ + { + "kind": "constructor", + "name": "ToShearY", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~ToShearY", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "mix", + "returnType": "float", + "parameters": [ + { + "name": "pose", + "type": "TransformConstraintPose &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "pose", + "type": "TransformConstraintPose &" + }, + { + "name": "bone", + "type": "BonePose &" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "local", + "type": "bool" + }, + { + "name": "additive", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "TransformConstraintData", + "kind": "class", + "loc": { + "line": 194, + "col": 15 + }, + "superTypes": [ + "ConstraintDataGeneric" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "TransformConstraintData", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "destructor", + "name": "~TransformConstraintData", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "create", + "returnType": "Constraint *", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getSource", + "returnType": "BoneData *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setSource", + "returnType": "void", + "parameters": [ + { + "name": "source", + "type": "BoneData *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getOffsetRotation", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setOffsetRotation", + "returnType": "void", + "parameters": [ + { + "name": "offsetRotation", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getOffsetX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setOffsetX", + "returnType": "void", + "parameters": [ + { + "name": "offsetX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getOffsetY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setOffsetY", + "returnType": "void", + "parameters": [ + { + "name": "offsetY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getOffsetScaleX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setOffsetScaleX", + "returnType": "void", + "parameters": [ + { + "name": "offsetScaleX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getOffsetScaleY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setOffsetScaleY", + "returnType": "void", + "parameters": [ + { + "name": "offsetScaleY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getOffsetShearY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setOffsetShearY", + "returnType": "void", + "parameters": [ + { + "name": "offsetShearY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getLocalSource", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLocalSource", + "returnType": "void", + "parameters": [ + { + "name": "localSource", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getLocalTarget", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLocalTarget", + "returnType": "void", + "parameters": [ + { + "name": "localTarget", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getAdditive", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setAdditive", + "returnType": "void", + "parameters": [ + { + "name": "additive", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getClamp", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setClamp", + "returnType": "void", + "parameters": [ + { + "name": "clamp", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getProperties", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "isSkinRequired", + "returnType": "bool", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "getSetupPose", + "returnType": "TransformConstraintPose &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + }, + { + "kind": "method", + "name": "setSkinRequired", + "returnType": "void", + "parameters": [ + { + "name": "skinRequired", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintDataGeneric" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/TransformConstraintPose.h": [ + { + "name": "TransformConstraintPose", + "kind": "class", + "loc": { + "line": 38, + "col": 18 + }, + "superTypes": [ + "Pose" + ], + "members": [ + { + "kind": "constructor", + "name": "TransformConstraintPose", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~TransformConstraintPose", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "set", + "returnType": "void", + "parameters": [ + { + "name": "pose", + "type": "TransformConstraintPose &" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixRotate", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixRotate", + "returnType": "void", + "parameters": [ + { + "name": "mixRotate", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixX", + "returnType": "void", + "parameters": [ + { + "name": "mixX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixY", + "returnType": "void", + "parameters": [ + { + "name": "mixY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixScaleX", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixScaleX", + "returnType": "void", + "parameters": [ + { + "name": "mixScaleX", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixScaleY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixScaleY", + "returnType": "void", + "parameters": [ + { + "name": "mixScaleY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getMixShearY", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setMixShearY", + "returnType": "void", + "parameters": [ + { + "name": "mixShearY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/TransformConstraintTimeline.h": [ + { + "name": "TransformConstraintTimeline", + "kind": "class", + "loc": { + "line": 41, + "col": 15 + }, + "superTypes": [ + "CurveTimeline", + "ConstraintTimeline" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "TransformConstraintTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "transformConstraintIndex", + "type": "int" + } + ] + }, + { + "kind": "destructor", + "name": "~TransformConstraintTimeline", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "int" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "mixRotate", + "type": "float" + }, + { + "name": "mixX", + "type": "float" + }, + { + "name": "mixY", + "type": "float" + }, + { + "name": "mixScaleX", + "type": "float" + }, + { + "name": "mixScaleY", + "type": "float" + }, + { + "name": "mixShearY", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "CurveTimeline" + }, + { + "kind": "method", + "name": "getConstraintIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline" + }, + { + "kind": "method", + "name": "setConstraintIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "ConstraintTimeline" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/TranslateTimeline.h": [ + { + "name": "TranslateTimeline", + "kind": "class", + "loc": { + "line": 38, + "col": 15 + }, + "superTypes": [ + "BoneTimeline2" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "TranslateTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline2" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "TranslateXTimeline", + "kind": "class", + "loc": { + "line": 54, + "col": 15 + }, + "superTypes": [ + "BoneTimeline1" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "TranslateXTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + }, + { + "name": "TranslateYTimeline", + "kind": "class", + "loc": { + "line": 70, + "col": 15 + }, + "superTypes": [ + "BoneTimeline1" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "TranslateYTimeline", + "parameters": [ + { + "name": "frameCount", + "type": "size_t" + }, + { + "name": "bezierCount", + "type": "size_t" + }, + { + "name": "boneIndex", + "type": "int" + } + ] + }, + { + "kind": "method", + "name": "apply", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "lastTime", + "type": "float" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "pEvents", + "type": "Array *" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "appliedPose", + "type": "bool" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setFrame", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + }, + { + "name": "time", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurveValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getRelativeValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getAbsoluteValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + }, + { + "name": "value", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getScaleValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "alpha", + "type": "float" + }, + { + "name": "blend", + "type": "MixBlend" + }, + { + "name": "direction", + "type": "MixDirection" + }, + { + "name": "current", + "type": "float" + }, + { + "name": "setup", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setLinear", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setStepped", + "returnType": "void", + "parameters": [ + { + "name": "frame", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBezier", + "returnType": "void", + "parameters": [ + { + "name": "bezier", + "type": "size_t" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "value", + "type": "float" + }, + { + "name": "time1", + "type": "float" + }, + { + "name": "value1", + "type": "float" + }, + { + "name": "cx1", + "type": "float" + }, + { + "name": "cy1", + "type": "float" + }, + { + "name": "cx2", + "type": "float" + }, + { + "name": "cy2", + "type": "float" + }, + { + "name": "time2", + "type": "float" + }, + { + "name": "value2", + "type": "float" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBezierValue", + "returnType": "float", + "parameters": [ + { + "name": "time", + "type": "float" + }, + { + "name": "frame", + "type": "size_t" + }, + { + "name": "valueOffset", + "type": "size_t" + }, + { + "name": "i", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getCurves", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameEntries", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrameCount", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getFrames", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getDuration", + "returnType": "float", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getPropertyIds", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "getBoneIndex", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + }, + { + "kind": "method", + "name": "setBoneIndex", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "int" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false, + "fromSupertype": "BoneTimeline1" + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Triangulator.h": [ + { + "name": "Triangulator", + "kind": "class", + "loc": { + "line": 37, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "destructor", + "name": "~Triangulator", + "isVirtual": false, + "isPure": false + }, + { + "kind": "method", + "name": "triangulate", + "returnType": "Array &", + "parameters": [ + { + "name": "vertices", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "decompose", + "returnType": "Array *> &", + "parameters": [ + { + "name": "vertices", + "type": "Array &" + }, + { + "name": "triangles", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + } + ], + "isAbstract": false, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/Update.h": [ + { + "name": "Update", + "kind": "class", + "loc": { + "line": 42, + "col": 15 + }, + "superTypes": [ + "SpineObject" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "Update", + "parameters": [] + }, + { + "kind": "destructor", + "name": "~Update", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "update", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "physics", + "type": "Physics" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ], + "spine/VertexAttachment.h": [ + { + "name": "VertexAttachment", + "kind": "class", + "loc": { + "line": 43, + "col": 15 + }, + "superTypes": [ + "Attachment" + ], + "members": [ + { + "kind": "method", + "name": "getRTTI", + "returnType": "const RTTI &", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "constructor", + "name": "VertexAttachment", + "parameters": [ + { + "name": "name", + "type": "const String &" + } + ] + }, + { + "kind": "destructor", + "name": "~VertexAttachment", + "isVirtual": true, + "isPure": false + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "start", + "type": "size_t" + }, + { + "name": "count", + "type": "size_t" + }, + { + "name": "worldVertices", + "type": "float *" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "computeWorldVertices", + "returnType": "void", + "parameters": [ + { + "name": "skeleton", + "type": "Skeleton &" + }, + { + "name": "slot", + "type": "Slot &" + }, + { + "name": "start", + "type": "size_t" + }, + { + "name": "count", + "type": "size_t" + }, + { + "name": "worldVertices", + "type": "Array &" + }, + { + "name": "offset", + "type": "size_t" + }, + { + "name": "stride", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": true, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getId", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getBones", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setBones", + "returnType": "void", + "parameters": [ + { + "name": "bones", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getVertices", + "returnType": "Array &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setVertices", + "returnType": "void", + "parameters": [ + { + "name": "vertices", + "type": "Array &" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getWorldVerticesLength", + "returnType": "size_t", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setWorldVerticesLength", + "returnType": "void", + "parameters": [ + { + "name": "inValue", + "type": "size_t" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getTimelineAttachment", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "setTimelineAttachment", + "returnType": "void", + "parameters": [ + { + "name": "attachment", + "type": "Attachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "copyTo", + "returnType": "void", + "parameters": [ + { + "name": "other", + "type": "VertexAttachment *" + } + ], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false + }, + { + "kind": "method", + "name": "getName", + "returnType": "const String &", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + }, + { + "kind": "method", + "name": "copy", + "returnType": "Attachment *", + "parameters": [], + "isStatic": false, + "isVirtual": true, + "isPure": true, + "isConst": false, + "fromSupertype": "Attachment" + }, + { + "kind": "method", + "name": "getRefCount", + "returnType": "int", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + }, + { + "kind": "method", + "name": "reference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + }, + { + "kind": "method", + "name": "dereference", + "returnType": "void", + "parameters": [], + "isStatic": false, + "isVirtual": false, + "isPure": false, + "isConst": false, + "fromSupertype": "Attachment" + } + ], + "isAbstract": true, + "isTemplate": false, + "inheritedMethodsAdded": true + } + ] +} \ No newline at end of file diff --git a/spine-c-new/codegen/src/array-scanner.ts b/spine-c/codegen/src/array-scanner.ts similarity index 100% rename from spine-c-new/codegen/src/array-scanner.ts rename to spine-c/codegen/src/array-scanner.ts diff --git a/spine-c-new/codegen/src/c-types.ts b/spine-c/codegen/src/c-types.ts similarity index 100% rename from spine-c-new/codegen/src/c-types.ts rename to spine-c/codegen/src/c-types.ts diff --git a/spine-c-new/codegen/src/c-writer.ts b/spine-c/codegen/src/c-writer.ts similarity index 100% rename from spine-c-new/codegen/src/c-writer.ts rename to spine-c/codegen/src/c-writer.ts diff --git a/spine-c-new/codegen/src/checks.ts b/spine-c/codegen/src/checks.ts similarity index 100% rename from spine-c-new/codegen/src/checks.ts rename to spine-c/codegen/src/checks.ts diff --git a/spine-c-new/codegen/src/exclusions.ts b/spine-c/codegen/src/exclusions.ts similarity index 100% rename from spine-c-new/codegen/src/exclusions.ts rename to spine-c/codegen/src/exclusions.ts diff --git a/spine-c-new/codegen/src/index.ts b/spine-c/codegen/src/index.ts similarity index 100% rename from spine-c-new/codegen/src/index.ts rename to spine-c/codegen/src/index.ts diff --git a/spine-c-new/codegen/src/ir-generator.ts b/spine-c/codegen/src/ir-generator.ts similarity index 100% rename from spine-c-new/codegen/src/ir-generator.ts rename to spine-c/codegen/src/ir-generator.ts diff --git a/spine-c-new/codegen/src/type-extractor.ts b/spine-c/codegen/src/type-extractor.ts similarity index 100% rename from spine-c-new/codegen/src/type-extractor.ts rename to spine-c/codegen/src/type-extractor.ts diff --git a/spine-c-new/codegen/src/types.ts b/spine-c/codegen/src/types.ts similarity index 100% rename from spine-c-new/codegen/src/types.ts rename to spine-c/codegen/src/types.ts diff --git a/spine-c-new/codegen/src/warnings.ts b/spine-c/codegen/src/warnings.ts similarity index 100% rename from spine-c-new/codegen/src/warnings.ts rename to spine-c/codegen/src/warnings.ts diff --git a/spine-c-new/codegen/tsconfig.json b/spine-c/codegen/tsconfig.json similarity index 100% rename from spine-c-new/codegen/tsconfig.json rename to spine-c/codegen/tsconfig.json diff --git a/spine-c-new/include/spine-c.h b/spine-c/include/spine-c.h similarity index 100% rename from spine-c-new/include/spine-c.h rename to spine-c/include/spine-c.h diff --git a/spine-c/spine-c-unit-tests/CMakeLists.txt b/spine-c/spine-c-unit-tests/CMakeLists.txt deleted file mode 100755 index 8e01b39f1..000000000 --- a/spine-c/spine-c-unit-tests/CMakeLists.txt +++ /dev/null @@ -1,61 +0,0 @@ -cmake_minimum_required(VERSION 2.8.9) -project(spine_unit_test) - -set(CMAKE_INSTALL_PREFIX "./") -set(CMAKE_VERBOSE_MAKEFILE ON) -if(MSVC) -set (CMAKE_CXX_FLAGS "-Wall -Wextra -Wnon-virtual-dtor -pedantic -std=c++11 -fno-rtti -DKANJI_MEMTRACE -DUSE_CPP11_MUTEX") -endif() - - -######################################################### -# set includes -######################################################### -include_directories(teamcity minicppunit tests memory) - -######################################################### -# Add Sources -######################################################### -set(MINICPP_SRC - minicppunit/MiniCppUnit.cxx -) - -set(TEAMCITY_SRC - teamcity/teamcity_cppunit.cpp - teamcity/teamcity_messages.cpp -) - -set(TEST_SRC - tests/SpineEventMonitor.cpp - tests/EmptyTestFixture.cpp - tests/C_InterfaceTestFixture.cpp - tests/CPP_InterfaceTestFixture.cpp - tests/MemoryTestFixture.cpp -) - -set(MEMLEAK_SRC - memory/KMemory.cpp - memory/KString.cpp -) - -######################################################### -# setup main project -######################################################### -add_executable(spine_unit_test main.cpp ${MINICPP_SRC} ${TEAMCITY_SRC} ${TEST_SRC} ${MEMLEAK_SRC}) -target_link_libraries(spine_unit_test spine-c) - - -######################################################### -# copy resources to build output directory -######################################################### -add_custom_command(TARGET spine_unit_test PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_CURRENT_LIST_DIR}/../../examples/spineboy/export $/testdata/spineboy) - -add_custom_command(TARGET spine_unit_test PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_CURRENT_LIST_DIR}/../../examples/raptor/export $/testdata/raptor) - -add_custom_command(TARGET spine_unit_test PRE_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_CURRENT_LIST_DIR}/../../examples/goblins/export $/testdata/goblins) diff --git a/spine-c/spine-c-unit-tests/README.md b/spine-c/spine-c-unit-tests/README.md deleted file mode 100755 index 2af83ac6d..000000000 --- a/spine-c/spine-c-unit-tests/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# spine-c-unit-tests - -The spine-c-unit-tests project is to test the [Spine](http://esotericsoftware.com) skeletal animation system. It does not perform rendering. It is primarily used for regression testing and leak detection. It is designed to be run from a Continuous Integration server and to passively verify changes automatically on check-in. - -## Mini CPP Unit Testing -[MiniCppUnit](https://sourceforge.net/p/minicppunit/wiki/Home/) is a minimal unit testing framework similar to JUnit. It is used here to avoid large dependancies. - -Tests are sorted into Suites, Fixtures and Cases. There is one suite, it contains many fixtures and each fixture contains test cases. To turn off a fixture, edit "TestOptions.h". To turn off specific test cases, comment out the TEST_CASE() line in the fixture's header. - -## Memory Leak Detection -This project includes a very minimal memory leak detector. It is based roughly on the leak detector in the [Popcap Framework](https://sourceforge.net/projects/popcapframework/?source=directory), but has been modified over the years. - -## Continuous Integration -The test runner includes the ability to format output messages to signal a CI server. An example interface for [Teamcity](https://www.jetbrains.com/teamcity/) is included. To implement for another server, determine the wireformat for the messages and duplicate/edit the teamcity_messages class. [Teamcity Wire Format](https://confluence.jetbrains.com/display/TCD10/Build+Script+Interaction+with+TeamCity) - -### Trigger -Your CI server should trigger on VCS check-in. - -### CMake Build Step -The first build step for the CI server should be to run CMake on the 'spine-c-unit-tests' folder. Follow the usage directions below. - -### Compile Build Step -This build step should not execute if the previous step did not successfully complete. -Depending on the test agent build environment, you should build the output solution or project from the cmake step. Debug is fine. - -### Test Runner Build Step -This build step should not execute if the previous step did not successfully complete. -Again, depending on the test agent build environment, you should have produced an executable. Run this executable. - -## Usage -Make sure [CMake](https://cmake.org/download/) is installed. - -Create a 'build' directory in the 'spine-c-unit-tests' folder. Then switch to that folder and execute cmake: - -mkdir build -cd build -cmake .. - -### Win32 build -msbuild spine_unit_test.sln /t:spine_unit_test /p:Configuration="Debug" /p:Platform="Win32" - -## Licensing -This Spine Runtime may only be used for personal or internal use, typically to evaluate Spine before purchasing. If you would like to incorporate a Spine Runtime into your applications, distribute software containing a Spine Runtime, or modify a Spine Runtime, then you will need a valid [Spine license](https://esotericsoftware.com/spine-purchase). Please see the [Spine Runtimes Software License](https://github.com/EsotericSoftware/spine-runtimes/blob/master/LICENSE) for detailed information. - -The Spine Runtimes are developed with the intent to be used with data exported from Spine. By purchasing Spine, `Section 2` of the [Spine Software License](https://esotericsoftware.com/files/license.txt) grants the right to create and distribute derivative works of the Spine Runtimes. - -original "walk"": 330 -second "walk": 0d0 - -queue interrupt for original walk -queue start for second walk -drain interrupt and start - -0d0 is interrupted -0d0 is ended - -"run": 0c0 - 0d0 is interrupted - second walk becomes mixingFrom of run - 0c0 is started - - queue is drained - - first walk: 6f0 - second walk: 9c0 diff --git a/spine-c/spine-c-unit-tests/main.cpp b/spine-c/spine-c-unit-tests/main.cpp deleted file mode 100755 index b11c9aade..000000000 --- a/spine-c/spine-c-unit-tests/main.cpp +++ /dev/null @@ -1,79 +0,0 @@ -// SexyKanjiTestSuite.cpp : Defines the entry point for the console application. -// - -#include "MiniCppUnit.hxx" - -#ifdef WIN32 -#include -#else - -#include - -#endif // WIN32 - -#include -#include "KString.h" -#include - -#include "spine/extension.h" -#include "spine/spine.h" - -#include "KMemory.h" // last include - -void RegisterMemoryLeakDetector() { - // Register our malloc and free functions to track memory leaks -#ifdef KANJI_MEMTRACE - _spSetDebugMalloc(_kanjimalloc); -#endif - _spSetMalloc(_kanjimalloc); - _spSetRealloc(_kanjirealloc); - _spSetFree(_kanjifree); -} - -int main(int argc, char *argv[]) { - RegisterMemoryLeakDetector(); - - // Start Timing - time_t start_time, end_time; - time(&start_time); - - - /* Set working directory to current location for opening test data */ -#ifdef WIN32 - _chdir( GetFileDir(argv[0], false).c_str() ); -#else - chdir(GetFileDir(argv[0], false).c_str()); -#endif - - // Run Test Suite - if (JetBrains::underTeamcity()) gTeamCityListener.startSuite("Spine-C Test Suite"); - int ret_val = TestFixtureFactory::theInstance().runTests() ? 0 : -1; - if (JetBrains::underTeamcity()) gTeamCityListener.endSuite("Spine-C Test Suite"); - - // End Timing - time(&end_time); - double secs = difftime(end_time, start_time); - printf("\n\n%i minutes and %i seconds of your life taken from you by these tests.\n", ((int) secs) / 60, - ((int) secs) % 60); - - spAnimationState_disposeStatics(); // Fix for #775 - - return ret_val; -} - - -extern "C" { // probably unnecessary - -void _spAtlasPage_createTexture(spAtlasPage *self, const char *path) { - self->rendererObject = 0; - self->width = 2048; - self->height = 2048; -} - -void _spAtlasPage_disposeTexture(spAtlasPage *self) { -} - -char *_spUtil_readFile(const char *path, int *length) { - return _spReadFile(path, length); -} -} diff --git a/spine-c/spine-c-unit-tests/memory/KMemory.cpp b/spine-c/spine-c-unit-tests/memory/KMemory.cpp deleted file mode 100755 index 3e187dff0..000000000 --- a/spine-c/spine-c-unit-tests/memory/KMemory.cpp +++ /dev/null @@ -1,300 +0,0 @@ -#include -#include -#include -#include -#include - -#include "KString.h" - -#include "KMemory.h" // last include - -#pragma warning(disable:4996) - -/////////////////////////////////////////////////////////////////////////////// -// -// KANJI_DUMP_LEAKED_MEM will print out the memory block that was leaked. -// This is helpful when leaked objects have string identifiers. -// -/////////////////////////////////////////////////////////////////////////////// -//#define KANJI_DUMP_LEAKED_MEM - - -/////////////////////////////////////////////////////////////////////////////// -// -// KANJI_TRACK_MEM_USAGE will print out all memory allocations. -// -/////////////////////////////////////////////////////////////////////////////// -//#define KANJI_TRACK_MEM_USAGE - - - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -// Our memory system is thread-safe, but instead of linking massive libraries, -// we attempt to use C++11 std::mutex. -#ifdef USE_CPP11_MUTEX_DISABLED -#include -typedef std::recursive_mutex KSysLock; // rentrant -struct KAutoLock { - KAutoLock(KSysLock& lock) :mLock(lock) { mLock.lock(); } // acquire - ~KAutoLock() { mLock.unlock(); } // release - - KSysLock& mLock; -}; -#else // Fallback to unsafe. don't spawn threads -typedef int KSysLock; - -struct KAutoLock { - KAutoLock(KSysLock) {} // acquire - ~KAutoLock() {} // release -}; - -#endif - - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -struct KANJI_ALLOC_INFO { - size_t size; - std::string file; - int line; -}; -static bool showLeaks = false; - -class KAllocMap : public std::map { -public: - KSysLock crit; - static bool allocMapValid; - -public: - KAllocMap() { allocMapValid = true; } - - ~KAllocMap() { - if (showLeaks) - KMemoryDumpUnfreed(); - - allocMapValid = false; - } -}; - -bool KAllocMap::allocMapValid = false; -static KAllocMap allocMap; // once this static object destructs, it dumps unfreed memory - - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -#ifdef KANJI_TRACK_MEM_USAGE -void KMemoryDumpUsage(); // forward declaration -class KAllocStat -{ -public: - typedef std::map allocCount; // [size] = count - typedef std::map, allocCount> allocInfo; // [file, line] = allocCount - - allocInfo memInfo; - static bool allocMapValid; - -public: - - KAllocStat() - { - allocMapValid = true; - } - ~KAllocStat() - { - if (showLeaks) - KMemoryDumpUsage(); - - allocMapValid = false; - } - void addTrack(const char* fname, int lnum, int asize) - { - allocCount& info = memInfo[std::pair(fname, lnum)]; - info[asize]++; - } -}; -bool KAllocStat::allocMapValid = false; -static KAllocStat allocStat; -#endif // KANJI_TRACK_MEM_USAGE - - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -extern void KMemoryAddTrack(void *addr, size_t asize, const char *fname, int lnum) { - if (!KAllocMap::allocMapValid || asize == 0) - return; - - KAutoLock aCrit(allocMap.crit); - showLeaks = true; - - KANJI_ALLOC_INFO &info = allocMap[addr]; - info.file = fname; - info.line = lnum; - info.size = asize; - -#ifdef KANJI_TRACK_MEM_USAGE - if (KAllocStat::allocMapValid) - allocStat.addTrack(fname, lnum, asize); -#endif -}; - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -void KMemoryRemoveTrack(void *addr) { - if (!KAllocMap::allocMapValid) - return; - - KAutoLock aCrit(allocMap.crit); - KAllocMap::iterator anItr = allocMap.find(addr); - if (anItr != allocMap.end()) - allocMap.erase(anItr); -}; - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -void KMemoryDumpUnfreed() { - if (!KAllocMap::allocMapValid) - return; - - KAutoLock aCrit(allocMap.crit); // prevent modification of the map while iterating - - size_t totalSize = 0; - char buf[8192]; - - FILE *f = fopen("mem_leaks.txt", "wt"); - if (!f) - return; - - time_t aTime = time(NULL); - sprintf(buf, "Memory Leak Report for %s\n", asctime(localtime(&aTime))); - fprintf(f, "%s", buf); - KOutputDebug(DEBUGLVL, "\n"); - KOutputDebug(INFOLVL, buf); - for (KAllocMap::iterator i = allocMap.begin(); i != allocMap.end(); ++i) { - sprintf(buf, "%s(%d) : Leak %u byte%s @0x%08X\n", i->second.file.c_str(), i->second.line, i->second.size, - i->second.size > 1 ? "s" : "", (size_t) i->first); - KOutputDebug(ERRORLVL, buf); - fprintf(f, "%s", buf); - -#ifdef KANJI_DUMP_LEAKED_MEM - unsigned char* data = (unsigned char*)i->first; - int count = 0; - char hex_dump[1024]; - char ascii_dump[1024]; - - for (int index = 0; index < i->second.size; index++) - { - unsigned char _c = *data; - - if (count == 0) - sprintf(hex_dump, "\t%02X ", _c); - else - sprintf(hex_dump, "%s%02X ", hex_dump, _c); // technically, this is undefined behavior - - if ((_c < 32) || (_c > 126)) - _c = '.'; - - if (count == 7) - sprintf(ascii_dump, "%s%c ", ascii_dump, _c); - else - sprintf(ascii_dump, "%s%c", count == 0 ? "\t" : ascii_dump, _c); // technically, this is undefined behavior - - - if (++count == 16) - { - count = 0; - sprintf(buf, "%s\t%s\n", hex_dump, ascii_dump); - fprintf(f, buf); - - memset((void*)hex_dump, 0, 1024); - memset((void*)ascii_dump, 0, 1024); - } - - data++; - } - - if (count != 0) - { - fprintf(f, hex_dump); - for (int index = 0; index < 16 - count; index++) - fprintf(f, "\t"); - - fprintf(f, ascii_dump); - - for (int index = 0; index < 16 - count; index++) - fprintf(f, "."); - } - - count = 0; - fprintf(f, "\n\n"); - memset((void*)hex_dump, 0, 1024); - memset((void*)ascii_dump, 0, 1024); - -#endif // KANJI_DUMP_LEAKED_MEM - - totalSize += i->second.size; - } - - ErrorLevel lvl = (totalSize > 0) ? ERRORLVL : INFOLVL; - - sprintf(buf, "-----------------------------------------------------------\n"); - fprintf(f, "%s", buf); - KOutputDebug(lvl, buf); - sprintf(buf, "Total Unfreed: %u bytes (%luKB)\n\n", totalSize, totalSize / 1024); - KOutputDebug(lvl, buf); - fprintf(f, "%s", buf); - fclose(f); -} - -#ifdef KANJI_TRACK_MEM_USAGE -void KMemoryDumpUsage() -{ - if (!KAllocStat::allocMapValid) - return; - - char buf[8192]; - FILE* f = fopen("mem_usage.txt", "wt"); - - time_t aTime = time(NULL); - sprintf(buf, "Memory Usage Report for %s\n", asctime(localtime(&aTime))); - if (f) fprintf(f, "%s", buf); - KOutputDebug("\n"); - KOutputDebug(buf); - - for(KAllocStat::allocInfo::iterator i = allocStat.memInfo.begin(); i != allocStat.memInfo.end(); ++i) - { - int aBytesTotal = 0; - int aCallsTotal = 0; - for (KAllocStat::allocCount::iterator index = i->second.begin(); index != i->second.end(); ++index) - { - aBytesTotal += index->first; - aCallsTotal += index->second; - sprintf(buf, "%s(%d) : %d bytes (%d %s)\n", i->first.first.c_str(), i->first.second, index->first, index->second, index->second == 1 ? "call" : "calls"); - if (f) fprintf(f, "%s", buf); - KOutputDebug(buf); - } - - if (i->second.size() > 1) - { - sprintf(buf, " %s(%d) : %d KB total (%d calls)\n", i->first.first.c_str(), i->first.second, aBytesTotal / 1024, aCallsTotal); - if (f) fprintf(f, "%s", buf); - KOutputDebug(buf); - } - } - if (f) fclose(f); -} -#endif // KANJI_TRACK_MEM_USAGE - -size_t KMemoryAllocated() { - if (!KAllocMap::allocMapValid) - return 0; - - KAutoLock aCrit(allocMap.crit); - - size_t size = 0; - for (auto i = allocMap.begin(); i != allocMap.end(); ++i) { - KANJI_ALLOC_INFO &info = i->second; - size += info.size; - } - return size; -} diff --git a/spine-c/spine-c-unit-tests/memory/KMemory.h b/spine-c/spine-c-unit-tests/memory/KMemory.h deleted file mode 100755 index d9dd3f456..000000000 --- a/spine-c/spine-c-unit-tests/memory/KMemory.h +++ /dev/null @@ -1,181 +0,0 @@ -#ifndef __KANJIMEMORY_H__ -#define __KANJIMEMORY_H__ - -#include -#include - -#if defined(_DEBUG) && !defined(KANJI_MEMTRACE) -#define KANJI_MEMTRACE -#endif - -#ifdef WIN32 -#pragma warning(disable : 4595) -#endif - -////////////////////////////////////////////////////////////////////////// -// HOW TO USE THIS FILE -// -// In the desired .CPP file (NOT header file), AFTER ALL of your -// #include declarations, do a #include "KMemory.h" or whatever you renamed -// this file to. It's very important that you do it only in the .cpp and -// after every other include file, otherwise it won't compile. The memory leaks -// will appear in a file called mem_leaks.txt and they will also be printed out -// in the output window when the program exits. -// -////////////////////////////////////////////////////////////////////////// - -#ifndef SAFE_DELETE -#define SAFE_DELETE(pPtr) { if(pPtr) delete pPtr; pPtr = 0; } -#endif - -#ifndef SCOPED_AUTO_SAFE_DELETE - -template -class ScopedAutoDeletePointerHelper { -public: - ScopedAutoDeletePointerHelper(T pPtr) : _pPtr(pPtr) {} - - ~ScopedAutoDeletePointerHelper() {SAFE_DELETE(_pPtr); } - - T _pPtr; -}; - -#define SCOPED_AUTO_SAFE_DELETE(p) ScopedAutoDeletePointerHelper anAutoDelete##p(p); -#endif - -#ifndef SAFE_DELETE_ARRAY -#define SAFE_DELETE_ARRAY(pPtr) { if(pPtr) delete [] pPtr; pPtr = 0; } -#endif - -extern void KMemoryDumpUnfreed(); - -extern size_t KMemoryAllocated(); - -#ifdef WIN32 -#define KMEM_CALLTYPE __cdecl -#else -#define KMEM_CALLTYPE -#endif - -#ifdef __APPLE__ -#define KMEM_THROWSPEC throw(std::bad_alloc) -#define KMEM_THROWS_BADALLOC - -#include - -#else -#define KMEM_THROWSPEC -#endif - -#if defined(KANJI_MEMTRACE) - -///////////////////////////////////////////// -// DO NOT CALL THESE TWO METHODS DIRECTLY // -///////////////////////////////////////////// - -extern void KMemoryAddTrack(void *addr, size_t asize, const char *fname, int lnum); - -extern void KMemoryRemoveTrack(void *addr); - -//Replacement for the standard malloc/free, records size of allocation and the file/line number it was on -inline void *_kanjimalloc(size_t size, const char *file, int line) { - void *ptr = (void *) malloc(size); - KMemoryAddTrack(ptr, size, file, line); - return (ptr); -} - -inline void *_kanjimalloc(size_t size) { - return _kanjimalloc(size, "", 0); -} - -inline void _kanjifree(void *ptr) { - KMemoryRemoveTrack(ptr); - free(ptr); -} - -inline void *_kanjirealloc(void *ptr, size_t size, const char *file, int line) { - void *ptr2 = (void *) realloc(ptr, size); - if (ptr2) { - KMemoryRemoveTrack(ptr); - KMemoryAddTrack(ptr2, size, file, line); - } - return ptr2; -} - -inline void *_kanjirealloc(void *ptr, size_t size) { - return _kanjirealloc(ptr, size, "", 0); -} - -#define kanjimalloc(size) _kanjimalloc((size), __FILE__, __LINE__) -#define kanjifree _kanjifree -#define kanjirealloc(ptr, size) _kanjirealloc(ptr, size, __FILE__, __LINE__) - -//Replacement for the standard "new" operator, records size of allocation and the file/line number it was on -inline void *KMEM_CALLTYPE operator new(size_t size, const char *file, int line) { - void *ptr = (void *) malloc(size); - KMemoryAddTrack(ptr, size, file, line); - return (ptr); -} - -//Same as above, but for arrays -inline void *KMEM_CALLTYPE operator new[](size_t size, const char *file, int line) { - void *ptr = (void *) malloc(size); - KMemoryAddTrack(ptr, size, file, line); - return (ptr); -} - - -// These single argument new operators allow vc6 apps to compile without errors -inline void *KMEM_CALLTYPE operator new(size_t size) KMEM_THROWSPEC { - void *ptr = (void *) malloc(size); -#ifdef KMEM_THROWS_BADALLOC - if (!ptr) throw std::bad_alloc(); -#endif - return (ptr); -} - -inline void *KMEM_CALLTYPE operator new[](size_t size) KMEM_THROWSPEC { - void *ptr = (void *) malloc(size); -#ifdef KMEM_THROWS_BADALLOC - if (!ptr) throw std::bad_alloc(); -#endif // KMEM_THROWS_BADALLOC - return (ptr); -} - - -//custom delete operators -inline void KMEM_CALLTYPE operator delete(void *p) throw() { - KMemoryRemoveTrack(p); - free(p); -} - -inline void KMEM_CALLTYPE operator delete[](void *p) throw() { - KMemoryRemoveTrack(p); - free(p); -} - -//needed in case in the constructor of the class we're newing, it throws an exception -inline void KMEM_CALLTYPE operator delete(void *pMem, const char *file, int line) { - free(pMem); -} - -inline void KMEM_CALLTYPE operator delete[](void *pMem, const char *file, int line) { - free(pMem); -} - -#define KDEBUG_NEW new(__FILE__, __LINE__) -#define new KDEBUG_NEW - -#else // KANJI_MEMTRACE NOT DEFINED - -#define kanjimalloc malloc -#define kanjifree free -#define kanjirealloc realloc - -inline void* _kanjimalloc(size_t size) { return malloc(size); } -inline void _kanjifree(void* ptr) { free(ptr); } -inline void* _kanjirealloc(void* ptr, size_t size) { return realloc(ptr, size); } - -#endif // KANJI_MEMTRACE - -#endif // __KANJIMEMORY_H__ \ No newline at end of file diff --git a/spine-c/spine-c-unit-tests/memory/KString.cpp b/spine-c/spine-c-unit-tests/memory/KString.cpp deleted file mode 100755 index d34b5ba4d..000000000 --- a/spine-c/spine-c-unit-tests/memory/KString.cpp +++ /dev/null @@ -1,176 +0,0 @@ -#include "KString.h" -#include - -#include "MiniCppUnit.hxx" - -/////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////// -// String Helper - -static std::string vasprintf(const char *fmt, va_list argv) { - std::string result; - va_list argv_copy; // vsnprintf modifies argv, need copy -#ifndef va_copy - argv_copy = argv; -#else - va_copy(argv_copy, argv); -#endif - - int len = vsnprintf(NULL, 0, fmt, argv_copy); - if (len > 0 && len < 255) { - // cover 90% of all calls - char str[256] = {0}; - int len2 = vsnprintf(str, 255, fmt, argv); - result = str; - } else if (len > 0) { - char *str = static_cast(alloca(len + 1)); // alloca on stack, space for null-termination - int len2 = vsnprintf(str, len + 1, fmt, argv); - result = str; - } - return result; -} - - -static void reportWarning(const std::string &warnStr) { - if (JetBrains::underTeamcity()) - gTeamCityListener.messages.messageWarning(warnStr); - else - fprintf(stderr, "%s", warnStr.c_str()); -} - -static void reportError(const std::string &errorStr) { - if (JetBrains::underTeamcity()) - gTeamCityListener.messages.messageError(errorStr); - else - fprintf(stderr, "%s", errorStr.c_str()); -} - -static void reportInfo(const std::string &infoStr) { - if (JetBrains::underTeamcity()) - gTeamCityListener.messages.messageNormal(infoStr); - else - fprintf(stderr, "%s", infoStr.c_str()); -} - -static void reportDebug(const std::string &debugStr) { - fprintf(stderr, "%s", debugStr.c_str()); -} - -static void report(ErrorLevel level, const std::string &Str) { - switch (level) { - case WARNLVL: - reportWarning(Str); - break; - case ERRORLVL: - reportError(Str); - break; - case INFOLVL: - reportInfo(Str); - break; - case DEBUGLVL: - reportDebug(Str); - break; - } -} - -void KOutputDebug(ErrorLevel lvl, const char *fmt ...) { - va_list argList; - va_start(argList, fmt); - std::string str = vasprintf(fmt, argList); - va_end(argList); - - report(lvl, str); -} - -#define K_MAX(a, b) ((a>b) ? a : b) - -std::string GetFileName(const std::string &thePath, bool noExtension) { - int aLastSlash = K_MAX((int) thePath.rfind('\\'), (int) thePath.rfind('/')); - - if (noExtension) { - int aLastDot = (int) thePath.rfind('.'); - if (aLastDot > aLastSlash) - return thePath.substr(aLastSlash + 1, aLastDot - aLastSlash - 1); - } - - if (aLastSlash == -1) - return thePath; - else - return thePath.substr(aLastSlash + 1); -} - -std::string GetFileDir(const std::string &thePath, bool withSlash) { - int aLastSlash = K_MAX((int) thePath.rfind(('\\')), (int) thePath.rfind(('/'))); - - if (aLastSlash == -1) - return (""); - else { - if (withSlash) - return thePath.substr(0, aLastSlash + 1); - else - return thePath.substr(0, aLastSlash); - } -} - -std::string GetFileExt(const std::string &thePath) { - std::string::size_type idx = thePath.find_last_of('.'); - - if (idx != std::string::npos) - return thePath.substr(idx + 1); - - return (""); -} - -/** - * g_ascii_strcasecmp: - * @s1: string to compare with @s2. - * @s2: string to compare with @s1. - * - * Compare two strings, ignoring the case of ASCII characters. - * - * Unlike the BSD strcasecmp() function, this only recognizes standard - * ASCII letters and ignores the locale, treating all non-ASCII - * bytes as if they are not letters. - * - * This function should be used only on strings that are known to be - * in encodings where the bytes corresponding to ASCII letters always - * represent themselves. This includes UTF-8 and the ISO-8859-* - * charsets, but not for instance double-byte encodings like the - * Windows Codepage 932, where the trailing bytes of double-byte - * characters include all ASCII letters. If you compare two CP932 - * strings using this function, you will get false matches. - * - * Return value: an integer less than, equal to, or greater than - * zero if @s1 is found, respectively, to be less than, - * to match, or to be greater than @s2. - **/ -static int g_ascii_compare_caseless(const char *s1, const char *s2) { -#define TOUPPER(c) (((c) >= 'a' && (c) <= 'z') ? (c) - 'a' + 'A' : (c)) -#define TOLOWER(c) (((c) >= 'A' && (c) <= 'Z') ? (c) - 'A' + 'a' : (c)) -#define g_return_val_if_fail(expr, val) { if (!(expr)) return (val); } - - int c1, c2; - - g_return_val_if_fail(s1 != NULL, 0); - g_return_val_if_fail(s2 != NULL, 0); - - while (*s1 && *s2) { - c1 = (int) (unsigned char) TOLOWER(*s1); - c2 = (int) (unsigned char) TOLOWER(*s2); - if (c1 != c2) - return (c1 - c2); - s1++; - s2++; - } - - return (((int) (unsigned char) *s1) - ((int) (unsigned char) *s2)); - -#undef g_return_val_if_fail -#undef TOUPPER -#undef TOLOWER -} - - -int CompareNoCase(const std::string &str1, const std::string &str2) { - return g_ascii_compare_caseless(str1.c_str(), str2.c_str()); -} diff --git a/spine-c/spine-c-unit-tests/memory/KString.h b/spine-c/spine-c-unit-tests/memory/KString.h deleted file mode 100755 index 32ec9bd9b..000000000 --- a/spine-c/spine-c-unit-tests/memory/KString.h +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include - -// Error reporting with levels similar to Android and are automatically forwarded to Continuous integration server -enum ErrorLevel { - WARNLVL, - ERRORLVL, - INFOLVL, - DEBUGLVL -}; - -extern void KOutputDebug(ErrorLevel lvl, const char *fmt ...); - -extern std::string GetFileName(const std::string &thePath, bool noExtension); - -extern std::string GetFileDir(const std::string &thePath, bool withSlash); - -extern std::string GetFileExt(const std::string &thePath); - -extern int CompareNoCase(const std::string &str1, const std::string &str2); diff --git a/spine-c/spine-c-unit-tests/minicppunit/MiniCppUnit.cxx b/spine-c/spine-c-unit-tests/minicppunit/MiniCppUnit.cxx deleted file mode 100755 index bac263543..000000000 --- a/spine-c/spine-c-unit-tests/minicppunit/MiniCppUnit.cxx +++ /dev/null @@ -1,261 +0,0 @@ -/* - * Copyright (c) 2003-2004 Pau Arum� & David Garc�a - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#include "MiniCppUnit.hxx" - -JetBrains::TeamcityProgressListener gTeamCityListener; -bool gUseTeamCity = false; - -#include -#include -#include - -#define MIN(a, b) ((a < b) ? a : b) -#define MAX(a, b) ((a > b) ? a : b) - -TestsListener::TestsListener() : _currentTestName(0) { - _executed = _failed = _exceptions = 0; - gUseTeamCity = JetBrains::underTeamcity(); -} - -TestsListener &TestsListener::theInstance() { - static TestsListener instancia; - return instancia; -} - -std::stringstream &TestsListener::errorsLog() { - if (_currentTestName) { - _log << "\n" << errmsgTag_nameOfTest() << (*_currentTestName) << "\n"; - } - return _log; -} - -std::string TestsListener::logString() { - std::string aRetornar = _log.str(); - _log.str(""); - return aRetornar; -} - -void TestsListener::currentTestName(std::string &name) { - _currentTestName = &name; - - if (gUseTeamCity)gTeamCityListener.startTest(name); -} - -void TestsListener::testHasRun() // started -{ - std::cout << "."; - theInstance()._executed++; -} - -void TestsListener::testHasPassed() // finished without errors -{ - if (gUseTeamCity) - gTeamCityListener.endTest(*(theInstance()._currentTestName)); -} - -void TestsListener::testHasFailed(const char *reason, const char *file, int line) { - if (gUseTeamCity) { - gTeamCityListener.addFailure( - JetBrains::TestFailure(*(theInstance()._currentTestName), "", JetBrains::SourceLine(file, line), - reason)); - gTeamCityListener.endTest(*(theInstance()._currentTestName)); - } - - std::cout << "F"; - theInstance()._failed++; - throw TestFailedException(); -} - -void TestsListener::testHasThrown() { - if (gUseTeamCity) { - gTeamCityListener.addFailure( - JetBrains::TestFailure(*(theInstance()._currentTestName), "", JetBrains::SourceLine(), "Exception")); - gTeamCityListener.endTest(*(theInstance()._currentTestName)); - } - std::cout << "E"; - theInstance()._exceptions++; -} - -std::string TestsListener::summary() { - std::ostringstream os; - os << "\nSummary:\n" - << Assert::bold() << "\tExecuted Tests: " - << _executed << Assert::normal() << std::endl - << Assert::green() << "\tPassed Tests: " - << (_executed - _failed - _exceptions) - << Assert::normal() << std::endl; - if (_failed > 0) { - os << Assert::red() << "\tFailed Tests: " - << _failed << Assert::normal() << std::endl; - } - if (_exceptions > 0) { - os << Assert::yellow() << "\tUnexpected exceptions: " - << _exceptions << Assert::normal() << std::endl; - } - os << std::endl; - return os.str(); -} - -bool TestsListener::allTestsPassed() { - return !theInstance()._exceptions && !theInstance()._failed; -} - - -void Assert::assertTrue(char *strExpression, bool expression, - const char *file, int linia) { - if (!expression) { - TestsListener::theInstance().errorsLog() << "\n" - << errmsgTag_testFailedIn() << file - << errmsgTag_inLine() << linia << "\n" - << errmsgTag_failedExpression() - << bold() << strExpression << normal() << "\n"; - TestsListener::theInstance().testHasFailed(strExpression, file, linia); - } -} - -void Assert::assertTrueMissatge(char *strExpression, bool expression, - const char *missatge, const char *file, int linia) { - if (!expression) { - TestsListener::theInstance().errorsLog() << "\n" - << errmsgTag_testFailedIn() << file - << errmsgTag_inLine() << linia << "\n" - << errmsgTag_failedExpression() - << bold() << strExpression << "\n" - << missatge << normal() << "\n"; - TestsListener::theInstance().testHasFailed(strExpression, file, linia); - } -} - - -void Assert::assertEquals(const char *expected, const char *result, - const char *file, int linia) { - assertEquals(std::string(expected), std::string(result), - file, linia); - -} - -void Assert::assertEquals(const bool &expected, const bool &result, - const char *file, int linia) { - assertEquals( - (expected ? "true" : "false"), - (result ? "true" : "false"), - file, linia); -} - -// floating point numbers comparisons taken -// from c/c++ users journal. dec 04 pag 10 -bool isNaN(double x) { - bool b1 = (x < 0.0); - bool b2 = (x >= 0.0); - return !(b1 || b2); -} - -double scaledEpsilon(const double &expected, const double &fuzzyEpsilon) { - const double aa = fabs(expected) + 1; - return (std::isinf(aa)) ? fuzzyEpsilon : fuzzyEpsilon * aa; -} - -bool fuzzyEquals(double expected, double result, double fuzzyEpsilon) { - return (expected == result) || (fabs(expected - result) <= scaledEpsilon(expected, fuzzyEpsilon)); -} - -void Assert::assertEquals(const double &expected, const double &result, - const char *file, int linia) { - const double fuzzyEpsilon = 0.000001; - assertEqualsEpsilon(expected, result, fuzzyEpsilon, file, linia); -} - -void Assert::assertEquals(const float &expected, const float &result, - const char *file, int linia) { - assertEquals((double) expected, (double) result, file, linia); -} - -void Assert::assertEquals(const long double &expected, const long double &result, - const char *file, int linia) { - assertEquals((double) expected, (double) result, file, linia); -} - -void Assert::assertEqualsEpsilon(const double &expected, const double &result, const double &epsilon, - const char *file, int linia) { - if (isNaN(expected) && isNaN(result)) return; - if (!isNaN(expected) && !isNaN(result) && fuzzyEquals(expected, result, epsilon)) return; - - std::stringstream anError; - anError - << errmsgTag_testFailedIn() << file - << errmsgTag_inLine() << linia << "\n" - << errmsgTag_expected() - << bold() << expected << normal() << " " - << errmsgTag_butWas() - << bold() << result << normal() << "\n"; - - TestsListener::theInstance().errorsLog() << anError.str(); - - TestsListener::theInstance().testHasFailed(anError.str().c_str(), file, linia); -} - -int Assert::notEqualIndex(const std::string &one, const std::string &other) { - int end = MIN(one.length(), other.length()); - for (int index = 0; index < end; index++) - if (one[index] != other[index]) - return index; - return end; -} - - -/** - * we overload the assert with string doing colored diffs - * - * MS Visual6 doesn't allow string by reference :-( - */ -void Assert::assertEquals(const std::string expected, const std::string result, - const char *file, int linia) { - if (expected == result) - return; - - int indexDiferent = notEqualIndex(expected, result); - - std::stringstream anError; - anError - << file << ", linia: " << linia << "\n" - << errmsgTag_expected() << "\n" << blue() - << expected.substr(0, indexDiferent) - << green() << expected.substr(indexDiferent) - << normal() << "\n" - << errmsgTag_butWas() << blue() << "\n" - << result.substr(0, indexDiferent) - << red() << result.substr(indexDiferent) - << normal() << std::endl; - - TestsListener::theInstance().errorsLog() << anError.str(); - - TestsListener::theInstance().testHasFailed(anError.str().c_str(), file, linia); -} - -void Assert::fail(const char *motiu, const char *file, int linia) { - TestsListener::theInstance().errorsLog() << - file << errmsgTag_inLine() << linia << "\n" << - "Reason: " << motiu << "\n"; - - TestsListener::theInstance().testHasFailed(motiu, file, linia); -} - - diff --git a/spine-c/spine-c-unit-tests/minicppunit/MiniCppUnit.hxx b/spine-c/spine-c-unit-tests/minicppunit/MiniCppUnit.hxx deleted file mode 100755 index fafcbca87..000000000 --- a/spine-c/spine-c-unit-tests/minicppunit/MiniCppUnit.hxx +++ /dev/null @@ -1,506 +0,0 @@ -/* - * Copyright (c) 2003-2004 Pau Arum� & David Garc�a - * - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - */ - -#ifndef MiniCppUnit_hxx -#define MiniCppUnit_hxx - -/** - * @mainpage - * miniCppUnit - * (C) 2003-2006 Pau Arumi & David Garcia - * - * @version 2.5 2006-03-14 - * - MS Visual compatibility: SConstruct ccflags, usage example, #ifdefs - * @version 2.4 2006-03-14 - * - exit test case after first failure - * - double and float comparison with fuzzy equals (using scalable epsilon) - * - have into account not a numbers - * - new ASSERT_EQUALS_EPSILON macro - * - more colors, and disabled when comiled in MS Visual - * - removed catalan location. - * - UsageExample.cxx now uses all macros and features - * @version 2.3 2006-02-13 added usage example and SConstruct - * @version 2.2 2004-11-28 code in english and tests suites - * @version 2.1 2004-11-04 char* especialization - * @version 2.0 2004-10-26 TestsFactory - * @version 1.0 2003-10-28 initial - * - * Example of use: - * - * @code - * #include "MiniCppUnit.hxx" - * class MyTests : public TestFixture - * { - * public: - * TEST_FIXTURE( MyTests ) - * { - * CAS_DE_TEST( testAddition ); - * // etc - * } - * void testAddition() - * { - * ASSERT_EQUALS( 4, 1+1+2 ); - * } - * // etc - * }; - * - * REGISTER_FIXTURE( MyTests ); - * @endcode - * @code - * int main() - * { - * return TestFixtureFactory::theInstance().runTests() ? 0 : -1; - * } - * @endcode - * Good things: - * - * - it's a tiny framework made up of two or three src files. - * => no need to install as a library - * - object oriented and makes use of several GoF patterns - * - very simple usage. Just needs to learn very few C macros - * - string asserts are simpler to use than cppunit - * - string asserts are enhanced with coloured diffs - * - concrete test classes are totally decoupled via static factory - * => no src file have to include them all. - * - it have test suite hierarchies - * - compatible with non-standard compliant VisualC6 - * (though not necessary good ;) - */ - -#include -#include -#include -#include - -#if _MSC_VER < 1300 -/** necesary for Visual 6 which don't define std::min */ -namespace std { - template - T min(const T &a, const T &b) { return a < b ? a : b; } -} -#endif - -#include "../teamcity/teamcity_cppunit.h" - -extern JetBrains::TeamcityProgressListener gTeamCityListener; - -/** - * A singleton class. - * Receives tests results and stores messages to the test log - * for later listing. - * It's a singleton for an easy global access from the 'Asserts' - * methods but it is probably asking for a refactoring in order to limit - * access only to TestFixtures - */ -class TestsListener { -public: - /** accessor to the global (static) singleton instance */ - static TestsListener &theInstance(); - - std::stringstream &errorsLog(); - - std::string logString(); - - void currentTestName(std::string &name); - - static void testHasRun(); - - static void testHasPassed(); - - static void testHasFailed(const char *reason, const char *file, int line); - - static void testHasThrown(); - - /** the human readable summary of run tests*/ - std::string summary(); - - /** returns wheather all run tests have passed */ - static bool allTestsPassed(); - -private: - static const char *errmsgTag_nameOfTest() { return "Test failed: "; } - - /** constructor private: force the singleton to be wellbehaved ! */ - TestsListener(); - - std::string *_currentTestName; - std::stringstream _log; - unsigned _executed; - unsigned _failed; - unsigned _exceptions; -}; - -class TestFailedException { -}; - -/** - * Abstract class with interface that allows run a test. That is runTest - * and name. It is implemented by TestFixture and TestCase - * - * It does the 'Component' role in the 'Composite' patten - **/ -class Test { -public: - virtual ~Test() {} - - /** run the test: exercice the code and check results*/ - virtual void runTest() = 0; - - /** the test human-readable name */ - virtual std::string name() const = 0; -}; - - -/** - * This class is just a placeholder for all assert functions --as static methods. - * It is meant for being used just by the assert macros - */ -class Assert { - static const char *errmsgTag_testFailedIn() { return "Test failed in "; } - - static const char *errmsgTag_inLine() { return ", line: "; }; - - static const char *errmsgTag_failedExpression() { return "Failed expression: "; } - - static const char *errmsgTag_expected() { return "Expected: "; } - - static const char *errmsgTag_butWas() { return "But was: "; } - -public: -#ifdef _MSC_VER - static const char * blue() { return ""; } - static const char * green() { return ""; } - static const char * red() { return ""; } - static const char * normal() { return ""; } - static const char * bold() { return ""; } - static const char * yellow() { return ""; } -#else - - static const char *blue() { return "\033[36;1m"; } - - static const char *green() { return "\033[32;1m"; } - - static const char *red() { return "\033[31;1m"; } - - static const char *normal() { return "\033[0m"; } - - static const char *bold() { return "\033[" "1m"; } - - static const char *yellow() { return "\033[93;1m"; } - -#endif - - template - static void assertEquals(const AType &expected, const AType &result, - const char *file = "", int linia = 0) { - if (expected != result) { - std::stringstream anError; - - anError - << file << ", linia: " << linia << "\n" - << errmsgTag_expected() << " " << expected << " " - << errmsgTag_butWas() << " " << result << "\n"; - - // TestsListener::theInstance().errorsLog() << anError; - - TestsListener::theInstance().testHasFailed(anError.str().c_str(), file, linia); - } - } - - static void assertTrue(char *strExpression, bool expression, - const char *file = "", int linia = 0); - - static void assertTrueMissatge(char *strExpression, bool expression, - const char *missatge, const char *file = "", int linia = 0); - - static void assertEquals(const char *expected, const char *result, - const char *file = "", int linia = 0); - - static void assertEquals(const bool &expected, const bool &result, - const char *file = "", int linia = 0); - - static void assertEquals(const double &expected, const double &result, - const char *file = "", int linia = 0); - - static void assertEquals(const float &expected, const float &result, - const char *file = "", int linia = 0); - - static void assertEquals(const long double &expected, const long double &result, - const char *file = "", int linia = 0); - - static void assertEqualsEpsilon(const double &expected, const double &result, const double &epsilon, - const char *file = "", int linia = 0); - - static int notEqualIndex(const std::string &one, const std::string &other); - - /** - * we overload the assert with string doing colored diffs - * - * MS Visual6 doesn't allow string by reference :-( - */ - static void assertEquals(const std::string expected, const std::string result, - const char *file = "", int linia = 0); - - static void fail(const char *motiu, const char *file = "", int linia = 0); - - -}; - -/** - * A TestFixture is a class that contain TestCases --which corresponds to - * ConcreteTestFixture methods-- common objects uder tests, and setUp and - * tearDown methods which are automatically executed before and after each - * test case. - * - * Is the base class of ConcreteFixtures implemented by the framework user - * - * It does the 'Composite' role in the 'Composite' GoF pattern. - * Its composite children are TestCases, which wrapps the test methods. - * - * It is a template class parametrized by ConcreteTestFixture so that it can - * instantiate TestCase objects templatized with this same parameter: it needs the - * concrete class type for calling its non-static methods. - */ -template -class TestFixture : public Test { -protected: - - typedef ConcreteTestFixture ConcreteFixture; - - typedef void(ConcreteTestFixture::*TestCaseMethod)(); - - /** - * Wrapper for the test methods of concrete TestFixtures. - * - * Makes the 'Leave' role in the 'Composite' GoF pattern because can't be - * be a composition of other tests. - * - * It's also a case of 'Command' pattern because it encapsules in an object - * certain functionality whose execution depends on some deferred entity. - */ - class TestCase : public Test { - public: - TestCase(ConcreteFixture *parent, TestCaseMethod method, const std::string &name) : - _parent(parent), - _testCaseMethod(method), - _name(name) { - } - - /** calls TestFixture method. setUp and tearDown methods are called by - * its parent TestFixture (in its runTest method). - * it is robust to unexpected exceptions (throw) */ - void runTest() { - TestsListener::theInstance().testHasRun(); - TestsListener::theInstance().currentTestName(_name); - try { - (_parent->*_testCaseMethod)(); - TestsListener::theInstance().testHasPassed(); - } - catch (std::exception &error) { - TestsListener::theInstance().testHasThrown(); - TestsListener::theInstance().errorsLog() - << "std::exception catched by MiniCppUnit: \n" - << "what() : " - << Assert::yellow() << error.what() - << Assert::normal() << "\n"; - } - catch (TestFailedException &) //just for skiping current test case - { - // the assert() calls testHasFailed() - } - catch (...) { - TestsListener::theInstance().testHasThrown(); - TestsListener::theInstance().errorsLog() - << "non standard exception catched by MiniCppUnit.\n"; - } - } - - /** the TestFixture method hame */ - std::string name() const { - return _name; - } - - private: - ConcreteFixture *_parent; - TestCaseMethod _testCaseMethod; - std::string _name; - }; - //------------- end of class TestCase ---------------------------- - -private: - - typedef std::list TestCases; - TestCases _testCases; - std::string _name; - - void testsList() const { - std::cout << "\n+ " << name() << "\n"; - for (TestCases::const_iterator it = _testCases.begin(); - it != _testCases.end(); it++) - std::cout << " - " << (*it)->name() << "\n"; - } - - -public: - virtual void setUp() {} - - virtual void tearDown() {} - - std::string name() const { - return _name; - }; - - TestFixture(const std::string &name = "A text fixture") : _name(name) { - } - - void afegeixCasDeTest(ConcreteFixture *parent, TestCaseMethod method, const char *name) { - TestCase *casDeTest = new TestCase(parent, method, _name + "::" + name); - _testCases.push_back(casDeTest); - } - - /** calls each test after setUp and tearDown TestFixture methods */ - void runTest() { - testsList(); - TestCases::iterator it; - for (it = _testCases.begin(); it != _testCases.end(); it++) { - setUp(); - (*it)->runTest(); - tearDown(); - } - } - - /** TestCase that wrapps TestFixture methods are dynamically created and owned by - * the TestFixture. So here we clean it up*/ - virtual ~TestFixture() { - TestCases::iterator it; - for (it = _testCases.begin(); it != _testCases.end(); it++) - delete (*it); - } -}; - - -/** - * This class is aimed to hold a creator method for each concrete TestFixture - */ -class TestFixtureFactory { -private: - /** Well behaved singleton: - * Don't allow instantiation apart from theInstance(), so private ctr.*/ - TestFixtureFactory() { - } - - typedef Test *(*FixtureCreator)(); - - std::list _creators; -public: - /** Accessor to the (static) singleton instance */ - static TestFixtureFactory &theInstance() { - static TestFixtureFactory theFactory; - return theFactory; - } - - bool runTests() { - std::list::iterator it; - for (it = _creators.begin(); it != _creators.end(); it++) { - FixtureCreator creator = *it; - Test *test = creator(); - test->runTest(); - delete test; - } - std::string errors = TestsListener::theInstance().logString(); - if (errors != "") std::cout << "\n\nError Details:\n" << errors; - std::cout << TestsListener::theInstance().summary(); - - return TestsListener::theInstance().allTestsPassed(); - } - - void addFixtureCreator(FixtureCreator creator) { - _creators.push_back(creator); - } - -}; - -/** - * Macro a usar despr�s de cada classe de test - */ -#define REGISTER_FIXTURE(ConcreteTestFixture) \ -\ -Test* Creador##ConcreteTestFixture() { return new ConcreteTestFixture; } \ -\ -class Registrador##ConcreteTestFixture \ -{ \ -public: \ - Registrador##ConcreteTestFixture() \ - { \ - TestFixtureFactory::theInstance().addFixtureCreator( \ - Creador##ConcreteTestFixture); \ - } \ -}; \ -static Registrador##ConcreteTestFixture estatic##ConcreteTestFixture; - - -/** - * Assert macros to use in test methods. An assert is a test condition - * we want to check. - */ -#define ASSERT_EQUALS(expected, result) \ - Assert::assertEquals( expected, result, __FILE__, __LINE__ ); - -#define ASSERT_EQUALS_EPSILON(expected, result, epsilon) \ - Assert::assertEqualsEpsilon( expected, result, epsilon, __FILE__, __LINE__ ); - -#define ASSERT(exp) \ - Assert::assertTrue(#exp, exp, __FILE__, __LINE__); - -#define ASSERT_MESSAGE(exp, message) \ - Assert::assertTrueMissatge(#exp, exp, message, __FILE__, __LINE__); - -#define FAIL(why) \ - Assert::fail(#why, __FILE__, __LINE__); - -/** - * Macros that allows to write the constructor of the concrete TestFixture. - * What the constructor does is agregate a wrapper for each test case (method) - * As easy to write as this: - * - * @code - * class MyTests : public TestFixture - * { - * public: - * TEST_FIXTURE( MyTests ) - * { - * TEST_CASE( test ); - * // etc - * } - * void test() - * { - * ASSERT_EQUALS( 4, 1+1+2 ); - * } - * @endcode - */ - -#define TEST_FIXTURE(ConcreteFixture) \ - ConcreteFixture() : TestFixture( #ConcreteFixture ) - -#define TEST_CASE(methodName) \ - afegeixCasDeTest( this, &ConcreteFixture::methodName, #methodName ); - - -#endif // MiniCppUnit_hxx diff --git a/spine-c/spine-c-unit-tests/teamcity/README.txt b/spine-c/spine-c-unit-tests/teamcity/README.txt deleted file mode 100755 index 04f7914b9..000000000 --- a/spine-c/spine-c-unit-tests/teamcity/README.txt +++ /dev/null @@ -1,30 +0,0 @@ -CppUnit listener for TeamCity ------------------------------ - -To report your tests result to TeamCity server -include teamcity_messages.* teamcity_cppunit.* -to your project and modify "main" function -as shown in example.cpp -(around JetBrains::underTeamcity and JetBrains::TeamcityProgressListener) - -Technical details ------------------ - -Reporting implemented by writing TeamCity service messages to stdout. - -See -http://www.jetbrains.net/confluence/display/TCD3/Build+Script+Interaction+with+TeamCity -for more details. - -Contact information -------------------- - -Mail to teamcity-feedback@jetbrains.com or see other options at - -http://www.jetbrains.com/support/teamcity - -License -------- - -Apache, version 2.0 -http://www.apache.org/licenses/LICENSE-2.0 diff --git a/spine-c/spine-c-unit-tests/teamcity/teamcity_cppunit.cpp b/spine-c/spine-c-unit-tests/teamcity/teamcity_cppunit.cpp deleted file mode 100755 index 25cef2a92..000000000 --- a/spine-c/spine-c-unit-tests/teamcity/teamcity_cppunit.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright 2011 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Revision: 88625 $ -*/ - -#include - -#include "teamcity_cppunit.h" - -using namespace std; - -namespace JetBrains { - - TeamcityProgressListener::TeamcityProgressListener() { - flowid = getFlowIdFromEnvironment(); - } - - TeamcityProgressListener::TeamcityProgressListener(const std::string &_flowid) { - flowid = _flowid; - } - - void TeamcityProgressListener::startTest(const std::string &test) { - messages.testStarted(test, flowid); - } - - static string sourceLine2string(const SourceLine &sline) { - stringstream ss; - - ss << sline.fileName << ":" << sline.lineNumber; - - return ss.str(); - } - - void TeamcityProgressListener::addFailure(const TestFailure &failure) { - - string details = failure.details; - - if (failure.sourceLine.isValid()) { - details.append(" at "); - details.append(sourceLine2string(failure.sourceLine)); - details.append("\n"); - } - - messages.testFailed( - failure.testName, - failure.description, - details, - flowid - ); - } - - void TeamcityProgressListener::endTest(const std::string &test) { - messages.testFinished(test, -1, flowid); - } - - void TeamcityProgressListener::startSuite(const std::string &test) { - messages.suiteStarted(test, flowid); - } - - void TeamcityProgressListener::endSuite(const std::string &test) { - messages.suiteFinished(test, flowid); - } - -} diff --git a/spine-c/spine-c-unit-tests/teamcity/teamcity_cppunit.h b/spine-c/spine-c-unit-tests/teamcity/teamcity_cppunit.h deleted file mode 100755 index f0ae92cc5..000000000 --- a/spine-c/spine-c-unit-tests/teamcity/teamcity_cppunit.h +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright 2011 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Revision: 88625 $ -*/ - -#pragma once - -#include - -#include "teamcity_messages.h" - -namespace JetBrains { - - class SourceLine { - public: - SourceLine() : lineNumber(-1) {} - - SourceLine(const std::string &theFile, int theLineNum) : fileName(theFile), lineNumber(theLineNum) {} - - ~SourceLine() {} - - std::string fileName; - int lineNumber; - - bool isValid() const { return (!fileName.empty() && lineNumber > -1); } - }; - - class TestFailure { - public: - std::string details; - SourceLine sourceLine; - std::string testName; - std::string description; - public: - TestFailure() {} - - ~TestFailure() {} - - TestFailure(const std::string &theTestName, const std::string &theDetails, SourceLine theSourcelLine, - const std::string &theDescription) { - testName = theTestName; - details = theDetails; - sourceLine = theSourcelLine; - description = theDescription; - } - }; - - class TeamcityProgressListener { - public: - TeamcityMessages messages; - public: - TeamcityProgressListener(const std::string &_flowid); - - TeamcityProgressListener(); - - ~TeamcityProgressListener() {} - - void startTest(const std::string &test); - - void addFailure(const TestFailure &failure); - - void endTest(const std::string &test); - - void startSuite(const std::string &test); - - void endSuite(const std::string &test); - - private: - std::string flowid; - - // Prevents the use of the copy constructor. - TeamcityProgressListener(const TeamcityProgressListener ©); - - // Prevents the use of the copy operator. - void operator=(const TeamcityProgressListener ©); - }; - -} \ No newline at end of file diff --git a/spine-c/spine-c-unit-tests/teamcity/teamcity_messages.cpp b/spine-c/spine-c-unit-tests/teamcity/teamcity_messages.cpp deleted file mode 100755 index 5e63fa5a2..000000000 --- a/spine-c/spine-c-unit-tests/teamcity/teamcity_messages.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright 2011 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Revision: 88625 $ -*/ - -#include -#include - -#include "teamcity_messages.h" - -#pragma warning(disable:4996) - -using namespace std; - -namespace JetBrains { - - std::string getFlowIdFromEnvironment() { - const char *flowId = getenv("TEAMCITY_PROCESS_FLOW_ID"); - return flowId == NULL ? "" : flowId; - } - - bool underTeamcity() { - return getenv("TEAMCITY_PROJECT_NAME") != NULL; - } - - TeamcityMessages::TeamcityMessages() - : m_out(&cout) {} - - void TeamcityMessages::setOutput(ostream &out) { - m_out = &out; - } - - string TeamcityMessages::escape(string s) { - string result; - - for (size_t i = 0; i < s.length(); i++) { - char c = s[i]; - - switch (c) { - case '\n': - result.append("|n"); - break; - case '\r': - result.append("|r"); - break; - case '\'': - result.append("|'"); - break; - case '|': - result.append("||"); - break; - case ']': - result.append("|]"); - break; - default: - result.append(&c, 1); - } - } - - return result; - } - - void TeamcityMessages::openMsg(const string &name) { - // endl for http://jetbrains.net/tracker/issue/TW-4412 - *m_out << endl << "##teamcity[" << name; - } - - void TeamcityMessages::closeMsg() { - *m_out << "]"; - // endl for http://jetbrains.net/tracker/issue/TW-4412 - *m_out << endl; - m_out->flush(); - } - - void TeamcityMessages::writeProperty(string name, string value) { - *m_out << " " << name << "='" << escape(value) << "'"; - } - - void TeamcityMessages::suiteStarted(string name, string flowid) { - openMsg("testSuiteStarted"); - writeProperty("name", name); - if (flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - closeMsg(); - } - - void TeamcityMessages::suiteFinished(string name, string flowid) { - openMsg("testSuiteFinished"); - writeProperty("name", name); - if (flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - closeMsg(); - } - - void TeamcityMessages::testStarted(string name, string flowid) { - openMsg("testStarted"); - writeProperty("name", name); - if (flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - closeMsg(); - } - - void TeamcityMessages::testFinished(string name, int durationMs, string flowid) { - openMsg("testFinished"); - - writeProperty("name", name); - - if (flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - if (durationMs >= 0) { - stringstream out; - out << durationMs; - writeProperty("duration", out.str()); - } - - closeMsg(); - } - - void TeamcityMessages::testFailed(string name, string message, string details, string flowid) { - openMsg("testFailed"); - writeProperty("name", name); - writeProperty("message", message); - writeProperty("details", details); - if (flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - closeMsg(); - } - - void TeamcityMessages::testIgnored(std::string name, std::string message, string flowid) { - openMsg("testIgnored"); - writeProperty("name", name); - writeProperty("message", message); - if (flowid.length() > 0) { - writeProperty("flowId", flowid); - } - - closeMsg(); - } - - void TeamcityMessages::messageError(const std::string &text) { - openMsg("message"); - writeProperty("text", text); - writeProperty("status", "ERROR"); - closeMsg(); - } - - void TeamcityMessages::messageWarning(const std::string &text) { - openMsg("message"); - writeProperty("text", text); - writeProperty("status", "WARNING"); - closeMsg(); - } - - void TeamcityMessages::messageNormal(const std::string &text) { - openMsg("message"); - writeProperty("text", text); - writeProperty("status", "NORMAL"); - closeMsg(); - } - -} diff --git a/spine-c/spine-c-unit-tests/teamcity/teamcity_messages.h b/spine-c/spine-c-unit-tests/teamcity/teamcity_messages.h deleted file mode 100755 index 84dae5224..000000000 --- a/spine-c/spine-c-unit-tests/teamcity/teamcity_messages.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright 2011 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * $Revision: 88625 $ -*/ - -#ifndef H_TEAMCITY_MESSAGES -#define H_TEAMCITY_MESSAGES - -#include -#include - -namespace JetBrains { - - std::string getFlowIdFromEnvironment(); - - bool underTeamcity(); - - class TeamcityMessages { - std::ostream *m_out; - - protected: - std::string escape(std::string s); - - void openMsg(const std::string &name); - - void writeProperty(std::string name, std::string value); - - void closeMsg(); - - public: - TeamcityMessages(); - - void setOutput(std::ostream &); - - void suiteStarted(std::string name, std::string flowid = ""); - - void suiteFinished(std::string name, std::string flowid = ""); - - void testStarted(std::string name, std::string flowid = ""); - - void testFailed(std::string name, std::string message, std::string details, std::string flowid = ""); - - void testIgnored(std::string name, std::string message, std::string flowid = ""); - - void testFinished(std::string name, int durationMs = -1, std::string flowid = ""); - - void messageError(const std::string &text); - - void messageWarning(const std::string &text); - - void messageNormal(const std::string &text); - }; - -} - -#endif /* H_TEAMCITY_MESSAGES */ diff --git a/spine-c/spine-c-unit-tests/tests/CPP_InterfaceTestFixture.cpp b/spine-c/spine-c-unit-tests/tests/CPP_InterfaceTestFixture.cpp deleted file mode 100755 index 806c5cc7b..000000000 --- a/spine-c/spine-c-unit-tests/tests/CPP_InterfaceTestFixture.cpp +++ /dev/null @@ -1,40 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// filename: C_InterfaceTestFixture.cpp -// -// notes: There is no C++ interface! -// -///////////////////////////////////////////////////////////////////// - -#include "CPP_InterfaceTestFixture.h" - -CPP_InterfaceTestFixture::~CPP_InterfaceTestFixture() { - finalize(); -} - -void CPP_InterfaceTestFixture::initialize() { - // on a Per- Fixture Basis, before Test execution -} - -void CPP_InterfaceTestFixture::finalize() { - // on a Per- Fixture Basis, after all tests pass/fail -} - -void CPP_InterfaceTestFixture::setUp() { - // Setup on Per-Test Basis -} - -void CPP_InterfaceTestFixture::tearDown() { - // Tear Down on Per-Test Basis -} - -void CPP_InterfaceTestFixture::spineboyTestCase() { - // There is no C++ interface. -} - -void CPP_InterfaceTestFixture::raptorTestCase() { - // There is no C++ interface. -} - -void CPP_InterfaceTestFixture::goblinsTestCase() { - // No c++ interface -} diff --git a/spine-c/spine-c-unit-tests/tests/CPP_InterfaceTestFixture.h b/spine-c/spine-c-unit-tests/tests/CPP_InterfaceTestFixture.h deleted file mode 100755 index 3c3dfc721..000000000 --- a/spine-c/spine-c-unit-tests/tests/CPP_InterfaceTestFixture.h +++ /dev/null @@ -1,53 +0,0 @@ -#pragma once -////////////////////////////////////////////////////////////////////// -// filename: C_InterfaceTestFixture.h -// -// purpose: Run example animations for regression testing -// on "C++" interface to make sure modifications to "C" -// interface doesn't cause memory leaks or regression -// errors. -///////////////////////////////////////////////////////////////////// - -#include "MiniCppUnit.hxx" -#include "TestOptions.h" - -class CPP_InterfaceTestFixture : public TestFixture { -public: - TEST_FIXTURE(CPP_InterfaceTestFixture) { - TEST_CASE(spineboyTestCase); - TEST_CASE(raptorTestCase); - TEST_CASE(goblinsTestCase); - - initialize(); - } - - virtual ~CPP_InterfaceTestFixture(); - - ////////////////////////////////////////////////////////////////////////// - // Test Cases - ////////////////////////////////////////////////////////////////////////// -public: - void spineboyTestCase(); - - void raptorTestCase(); - - void goblinsTestCase(); - - ////////////////////////////////////////////////////////////////////////// - // test fixture setup - ////////////////////////////////////////////////////////////////////////// - void initialize(); - - void finalize(); - -public: - virtual void setUp(); - - virtual void tearDown(); - -}; - -#if defined(gForceAllTests) || defined(gCPPInterfaceTestFixture) - -REGISTER_FIXTURE(CPP_InterfaceTestFixture); -#endif diff --git a/spine-c/spine-c-unit-tests/tests/C_InterfaceTestFixture.cpp b/spine-c/spine-c-unit-tests/tests/C_InterfaceTestFixture.cpp deleted file mode 100755 index 5726cd96f..000000000 --- a/spine-c/spine-c-unit-tests/tests/C_InterfaceTestFixture.cpp +++ /dev/null @@ -1,116 +0,0 @@ -#include "C_InterfaceTestFixture.h" -#include "SpineEventMonitor.h" - -#include "spine/spine.h" -#include - -#include "KMemory.h" // last include - -#define SPINEBOY_JSON "testdata/spineboy/spineboy-ess.json" -#define SPINEBOY_ATLAS "testdata/spineboy/spineboy.atlas" - -#define RAPTOR_JSON "testdata/raptor/raptor-pro.json" -#define RAPTOR_ATLAS "testdata/raptor/raptor.atlas" - -#define GOBLINS_JSON "testdata/goblins/goblins-pro.json" -#define GOBLINS_ATLAS "testdata/goblins/goblins.atlas" - -#define MAX_RUN_TIME 6000 // equal to about 100 seconds of execution - -void C_InterfaceTestFixture::setUp() { -} - -void C_InterfaceTestFixture::tearDown() { -} - -static spSkeletonData *readSkeletonJsonData(const char *filename, spAtlas *atlas) { - spSkeletonJson *json = spSkeletonJson_create(atlas); - ASSERT(json != 0); - - spSkeletonData *skeletonData = spSkeletonJson_readSkeletonDataFile(json, filename); - ASSERT(skeletonData != 0); - - spSkeletonJson_dispose(json); - return skeletonData; -} - -typedef std::vector AnimList; - -static size_t enumerateAnimations(AnimList &outList, spSkeletonData *skeletonData) { - if (skeletonData) { - - for (int n = 0; n < skeletonData->animationsCount; n++) - outList.push_back(skeletonData->animations[n]->name); - } - - return outList.size(); -} - -static void testRunner(const char *jsonName, const char *atlasName) { - /////////////////////////////////////////////////////////////////////////// - // Global Animation Information - spAtlas *atlas = spAtlas_createFromFile(atlasName, 0); - ASSERT(atlas != 0); - - spSkeletonData *skeletonData = readSkeletonJsonData(jsonName, atlas); - ASSERT(skeletonData != 0); - - spAnimationStateData *stateData = spAnimationStateData_create(skeletonData); - ASSERT(stateData != 0); - stateData->defaultMix = 0.2f; // force mixing - - /////////////////////////////////////////////////////////////////////////// - // Animation Instance - spSkeleton *skeleton = spSkeleton_create(skeletonData); - ASSERT(skeleton != 0); - - spAnimationState *state = spAnimationState_create(stateData); - ASSERT(state != 0); - - - /////////////////////////////////////////////////////////////////////////// - // Run animation - spSkeleton_setToSetupPose(skeleton); - SpineEventMonitor eventMonitor(state); -// eventMonitor.SetDebugLogging(true); - - - AnimList anims; // Let's chain all the animations together as a test - size_t count = enumerateAnimations(anims, skeletonData); - if (count > 0) spAnimationState_setAnimationByName(state, 0, anims[0].c_str(), false); - for (size_t i = 1; i < count; ++i) { - spAnimationState_addAnimationByName(state, 0, anims[i].c_str(), false, 0.0f); - } - - // Run Loop - for (int i = 0; i < MAX_RUN_TIME && eventMonitor.isAnimationPlaying(); ++i) { - const float timeSlice = 1.0f / 60.0f; - spSkeleton_update(skeleton, timeSlice); - spAnimationState_update(state, timeSlice); - spAnimationState_apply(state, skeleton); - } - - - /////////////////////////////////////////////////////////////////////////// - // Dispose Instance - spSkeleton_dispose(skeleton); - spAnimationState_dispose(state); - - /////////////////////////////////////////////////////////////////////////// - // Dispose Global - spAnimationStateData_dispose(stateData); - spSkeletonData_dispose(skeletonData); - spAtlas_dispose(atlas); -} - -void C_InterfaceTestFixture::spineboyTestCase() { - testRunner(SPINEBOY_JSON, SPINEBOY_ATLAS); -} - -void C_InterfaceTestFixture::raptorTestCase() { - testRunner(RAPTOR_JSON, RAPTOR_ATLAS); -} - -void C_InterfaceTestFixture::goblinsTestCase() { - testRunner(GOBLINS_JSON, GOBLINS_ATLAS); -} diff --git a/spine-c/spine-c-unit-tests/tests/C_InterfaceTestFixture.h b/spine-c/spine-c-unit-tests/tests/C_InterfaceTestFixture.h deleted file mode 100755 index 0c534043c..000000000 --- a/spine-c/spine-c-unit-tests/tests/C_InterfaceTestFixture.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once -////////////////////////////////////////////////////////////////////// -// filename: C_InterfaceTestFixture.h -// -// purpose: Run example animations for regression testing -// on "C" interface -///////////////////////////////////////////////////////////////////// - -#include "TestOptions.h" -#include "MiniCppUnit.hxx" - -class C_InterfaceTestFixture : public TestFixture { -public: - TEST_FIXTURE(C_InterfaceTestFixture) { - // enable/disable individual tests here - TEST_CASE(spineboyTestCase); - TEST_CASE(raptorTestCase); - TEST_CASE(goblinsTestCase); - } - -public: - virtual void setUp(); - - virtual void tearDown(); - - void spineboyTestCase(); - - void raptorTestCase(); - - void goblinsTestCase(); -}; - -#if defined(gForceAllTests) || defined(gCInterfaceTestFixture) - -REGISTER_FIXTURE(C_InterfaceTestFixture); -#endif \ No newline at end of file diff --git a/spine-c/spine-c-unit-tests/tests/EmptyTestFixture.cpp b/spine-c/spine-c-unit-tests/tests/EmptyTestFixture.cpp deleted file mode 100755 index 389ebda69..000000000 --- a/spine-c/spine-c-unit-tests/tests/EmptyTestFixture.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "EmptyTestFixture.h" - -#include "KMemory.h" // Last include - - -void EmptyTestFixture::setUp() { -} - -void EmptyTestFixture::tearDown() { -} - -void EmptyTestFixture::emptyTestCase_1() { - // char* pLeak = new char[256]; // test leak detector -} - -void EmptyTestFixture::emptyTestCase_2() { -} - -void EmptyTestFixture::emptyTestCase_3() { -} diff --git a/spine-c/spine-c-unit-tests/tests/EmptyTestFixture.h b/spine-c/spine-c-unit-tests/tests/EmptyTestFixture.h deleted file mode 100755 index 7a35541e1..000000000 --- a/spine-c/spine-c-unit-tests/tests/EmptyTestFixture.h +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#include "TestOptions.h" -#include "MiniCppUnit.hxx" - -class EmptyTestFixture : public TestFixture { -public: - TEST_FIXTURE(EmptyTestFixture) { - // enable/disable individual tests here - TEST_CASE(emptyTestCase_1); - TEST_CASE(emptyTestCase_2); - TEST_CASE(emptyTestCase_3); - } - -public: - virtual void setUp(); - - virtual void tearDown(); - - void emptyTestCase_1(); - - void emptyTestCase_2(); - - void emptyTestCase_3(); -}; - -#if defined(gForceAllTests) || defined(gEmptyTestFixture) - -REGISTER_FIXTURE(EmptyTestFixture); -#endif \ No newline at end of file diff --git a/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.cpp b/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.cpp deleted file mode 100755 index c74d948e5..000000000 --- a/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.cpp +++ /dev/null @@ -1,334 +0,0 @@ -#include -#include "MemoryTestFixture.h" -#include "SpineEventMonitor.h" - -#include "spine/spine.h" - -#include "KMemory.h" // last include - -#define SPINEBOY_JSON "testdata/spineboy/spineboy-ess.json" -#define SPINEBOY_ATLAS "testdata/spineboy/spineboy.atlas" - -#define MAX_RUN_TIME 6000 // equal to about 100 seconds of execution - -MemoryTestFixture::~MemoryTestFixture() { - finalize(); -} - -void MemoryTestFixture::initialize() { - // on a Per- Fixture Basis, before Test execution -} - -void MemoryTestFixture::finalize() { - // on a Per- Fixture Basis, after all tests pass/fail -} - -void MemoryTestFixture::setUp() { - // Setup on Per-Test Basis -} - -void MemoryTestFixture::tearDown() { - // Tear Down on Per-Test Basis -} - - -////////////////////////////////////////////////////////////////////////// -// Helper methods -static spSkeletonData *readSkeletonJsonData(const char *filename, spAtlas *atlas) { - spSkeletonJson *json = spSkeletonJson_create(atlas); - ASSERT(json != 0); - - spSkeletonData *skeletonData = spSkeletonJson_readSkeletonDataFile(json, filename); - ASSERT(skeletonData != 0); - - spSkeletonJson_dispose(json); - return skeletonData; -} - -static void LoadSpineboyExample(spAtlas *&atlas, spSkeletonData *&skeletonData, spAnimationStateData *&stateData, - spSkeleton *&skeleton, spAnimationState *&state) { - /////////////////////////////////////////////////////////////////////////// - // Global Animation Information - atlas = spAtlas_createFromFile(SPINEBOY_ATLAS, 0); - ASSERT(atlas != 0); - - skeletonData = readSkeletonJsonData(SPINEBOY_JSON, atlas); - ASSERT(skeletonData != 0); - - stateData = spAnimationStateData_create(skeletonData); - ASSERT(stateData != 0); - stateData->defaultMix = 0.4f; // force mixing - - /////////////////////////////////////////////////////////////////////////// - // Animation Instance - skeleton = spSkeleton_create(skeletonData); - ASSERT(skeleton != 0); - - state = spAnimationState_create(stateData); - ASSERT(state != 0); -} - -static void -DisposeAll(spSkeleton *skeleton, spAnimationState *state, spAnimationStateData *stateData, spSkeletonData *skeletonData, - spAtlas *atlas) { - /////////////////////////////////////////////////////////////////////////// - // Dispose Instance - spSkeleton_dispose(skeleton); - spAnimationState_dispose(state); - - /////////////////////////////////////////////////////////////////////////// - // Dispose Global - spAnimationStateData_dispose(stateData); - spSkeletonData_dispose(skeletonData); - spAtlas_dispose(atlas); -} - - -////////////////////////////////////////////////////////////////////////// -// Reproduce Memory leak as described in Issue #776 -// https://github.com/EsotericSoftware/spine-runtimes/issues/776 -void MemoryTestFixture::reproduceIssue_776() { - spAtlas *atlas = 0; - spSkeletonData *skeletonData = 0; - spAnimationStateData *stateData = 0; - spSkeleton *skeleton = 0; - spAnimationState *state = 0; - - ////////////////////////////////////////////////////////////////////////// - // Initialize Animations - LoadSpineboyExample(atlas, skeletonData, stateData, skeleton, state); - - /////////////////////////////////////////////////////////////////////////// - // Run animation - spSkeleton_setToSetupPose(skeleton); - InterruptMonitor eventMonitor(state); - //eventMonitor.SetDebugLogging(true); - - // Interrupt the animation on this specific sequence of spEventType(s) - eventMonitor - .AddInterruptEvent(SP_ANIMATION_INTERRUPT, "jump") - .AddInterruptEvent(SP_ANIMATION_START); - - spAnimationState_setAnimationByName(state, 0, "walk", true); - spAnimationState_addAnimationByName(state, 0, "jump", false, 0.0f); - spAnimationState_addAnimationByName(state, 0, "run", true, 0.0f); - spAnimationState_addAnimationByName(state, 0, "jump", false, 3.0f); - spAnimationState_addAnimationByName(state, 0, "walk", true, 0.0f); - spAnimationState_addAnimationByName(state, 0, "idle", false, 1.0f); - - for (int i = 0; i < MAX_RUN_TIME && eventMonitor.isAnimationPlaying(); ++i) { - const float timeSlice = 1.0f / 60.0f; - spSkeleton_update(skeleton, timeSlice); - spAnimationState_update(state, timeSlice); - spAnimationState_apply(state, skeleton); - } - - ////////////////////////////////////////////////////////////////////////// - // Cleanup Animations - DisposeAll(skeleton, state, stateData, skeletonData, atlas); -} - -void MemoryTestFixture::reproduceIssue_777() { - spAtlas *atlas = 0; - spSkeletonData *skeletonData = 0; - spAnimationStateData *stateData = 0; - spSkeleton *skeleton = 0; - spAnimationState *state = 0; - - ////////////////////////////////////////////////////////////////////////// - // Initialize Animations - LoadSpineboyExample(atlas, skeletonData, stateData, skeleton, state); - - /////////////////////////////////////////////////////////////////////////// - // Run animation - spSkeleton_setToSetupPose(skeleton); - SpineEventMonitor eventMonitor(state); - //eventMonitor.SetDebugLogging(true); - - // Set Animation and Play for 5 frames - spAnimationState_setAnimationByName(state, 0, "walk", true); - for (int i = 0; i < 5; ++i) { - const float timeSlice = 1.0f / 60.0f; - spSkeleton_update(skeleton, timeSlice); - spAnimationState_update(state, timeSlice); - spAnimationState_apply(state, skeleton); - } - - // Change animation twice in a row - spAnimationState_setAnimationByName(state, 0, "walk", false); - spAnimationState_setAnimationByName(state, 0, "run", false); - - // run normal update - for (int i = 0; i < 5; ++i) { - const float timeSlice = 1.0f / 60.0f; - spSkeleton_update(skeleton, timeSlice); - spAnimationState_update(state, timeSlice); - spAnimationState_apply(state, skeleton); - } - - // Now we'd lose mixingFrom (the first "walk" entry we set above) and should leak - spAnimationState_setAnimationByName(state, 0, "run", false); - - ////////////////////////////////////////////////////////////////////////// - // Cleanup Animations - DisposeAll(skeleton, state, stateData, skeletonData, atlas); -} - -spSkeleton *skeleton = 0; - -static void spineAnimStateHandler(spAnimationState *state, int type, spTrackEntry *entry, spEvent *event) { - if (type == SP_ANIMATION_COMPLETE) { - spAnimationState_setAnimationByName(state, 0, "walk", false); - spAnimationState_update(state, 0); - spAnimationState_apply(state, skeleton); - } -} - -void MemoryTestFixture::reproduceIssue_Loop() { - spAtlas *atlas = 0; - spSkeletonData *skeletonData = 0; - spAnimationStateData *stateData = 0; - spAnimationState *state = 0; - - ////////////////////////////////////////////////////////////////////////// - // Initialize Animations - LoadSpineboyExample(atlas, skeletonData, stateData, skeleton, state); - - /////////////////////////////////////////////////////////////////////////// - - if (state) - state->listener = (spAnimationStateListener) &spineAnimStateHandler; - - spAnimationState_setAnimationByName(state, 0, "walk", false); - - // run normal update - for (int i = 0; i < 50; ++i) { - const float timeSlice = 1.0f / 60.0f; - spSkeleton_update(skeleton, timeSlice); - spAnimationState_update(state, timeSlice); - spAnimationState_apply(state, skeleton); - } - - DisposeAll(skeleton, state, stateData, skeletonData, atlas); -} - -void MemoryTestFixture::triangulator() { - spTriangulator *triangulator = spTriangulator_create(); - spFloatArray *polygon = spFloatArray_create(16); - spFloatArray_add(polygon, 0); - spFloatArray_add(polygon, 0); - spFloatArray_add(polygon, 100); - spFloatArray_add(polygon, 0); - spFloatArray_add(polygon, 100); - spFloatArray_add(polygon, 100); - spFloatArray_add(polygon, 0); - spFloatArray_add(polygon, 100); - - spShortArray *triangles = spTriangulator_triangulate(triangulator, polygon); - ASSERT(triangles->size == 6); - ASSERT(triangles->items[0] == 3); - ASSERT(triangles->items[1] == 0); - ASSERT(triangles->items[2] == 1); - ASSERT(triangles->items[3] == 3); - ASSERT(triangles->items[4] == 1); - ASSERT(triangles->items[5] == 2); - - spArrayFloatArray *polys = spTriangulator_decompose(triangulator, polygon, triangles); - ASSERT(polys->size == 1); - ASSERT(polys->items[0]->size == 8); - ASSERT(polys->items[0]->items[0] == 0); - ASSERT(polys->items[0]->items[1] == 100); - ASSERT(polys->items[0]->items[2] == 0); - ASSERT(polys->items[0]->items[3] == 0); - ASSERT(polys->items[0]->items[4] == 100); - ASSERT(polys->items[0]->items[5] == 0); - ASSERT(polys->items[0]->items[6] == 100); - ASSERT(polys->items[0]->items[7] == 100); - - spFloatArray_dispose(polygon); - spTriangulator_dispose(triangulator); -} - -void MemoryTestFixture::skeletonClipper() { - spSkeletonClipping *clipping = spSkeletonClipping_create(); - - spBoneData *boneData = spBoneData_create(0, "bone", 0); - spBone *bone = spBone_create(boneData, 0, 0); - CONST_CAST(float, bone->a) = 1; - CONST_CAST(float, bone->b) = 0; - CONST_CAST(float, bone->c) = 0; - CONST_CAST(float, bone->d) = 1; - CONST_CAST(float, bone->worldX) = 0; - CONST_CAST(float, bone->worldY) = 0; - spSlotData *slotData = spSlotData_create(0, "slot", 0); - spSlot *slot = spSlot_create(slotData, bone); - spClippingAttachment *clip = spClippingAttachment_create("clipping"); - clip->endSlot = slotData; - clip->super.worldVerticesLength = 4 * 2; - clip->super.verticesCount = 4; - clip->super.vertices = MALLOC(float, 4 * 8); - clip->super.vertices[0] = 0; - clip->super.vertices[1] = 50; - clip->super.vertices[2] = 100; - clip->super.vertices[3] = 50; - clip->super.vertices[4] = 100; - clip->super.vertices[5] = 70; - clip->super.vertices[6] = 0; - clip->super.vertices[7] = 70; - - spSkeletonClipping_clipStart(clipping, slot, clip); - - spFloatArray *vertices = spFloatArray_create(16); - spFloatArray_add(vertices, 0); - spFloatArray_add(vertices, 0); - spFloatArray_add(vertices, 100); - spFloatArray_add(vertices, 0); - spFloatArray_add(vertices, 50); - spFloatArray_add(vertices, 150); - spFloatArray *uvs = spFloatArray_create(16); - spFloatArray_add(uvs, 0); - spFloatArray_add(uvs, 0); - spFloatArray_add(uvs, 1); - spFloatArray_add(uvs, 0); - spFloatArray_add(uvs, 0.5f); - spFloatArray_add(uvs, 1); - spUnsignedShortArray *indices = spUnsignedShortArray_create(16); - spUnsignedShortArray_add(indices, 0); - spUnsignedShortArray_add(indices, 1); - spUnsignedShortArray_add(indices, 2); - - spSkeletonClipping_clipTriangles(clipping, vertices->items, vertices->size, indices->items, indices->size, - uvs->items, 2); - - float expectedVertices[8] = {83.333328f, 50.000000f, 76.666664f, 70.000000f, 23.333334f, 70.000000f, 16.666672f, - 50.000000f}; - ASSERT(clipping->clippedVertices->size == 8); - for (int i = 0; i < clipping->clippedVertices->size; i++) { - ASSERT(ABS(clipping->clippedVertices->items[i] - expectedVertices[i]) < 0.001); - } - - float expectedUVs[8] = {0.833333f, 0.333333f, 0.766667f, 0.466667f, 0.233333f, 0.466667f, 0.166667f, 0.333333f}; - ASSERT(clipping->clippedUVs->size == 8); - for (int i = 0; i < clipping->clippedUVs->size; i++) { - ASSERT(ABS(clipping->clippedUVs->items[i] - expectedUVs[i]) < 0.001); - } - - short expectedIndices[6] = {0, 1, 2, 0, 2, 3}; - ASSERT(clipping->clippedTriangles->size == 6); - for (int i = 0; i < clipping->clippedTriangles->size; i++) { - ASSERT(clipping->clippedTriangles->items[i] == expectedIndices[i]); - } - - spFloatArray_dispose(vertices); - spFloatArray_dispose(uvs); - spUnsignedShortArray_dispose(indices); - - spSlotData_dispose(slotData); - spSlot_dispose(slot); - spBoneData_dispose(boneData); - spBone_dispose(bone); - _spClippingAttachment_dispose(SUPER(SUPER(clip))); - spSkeletonClipping_dispose(clipping); -} - - diff --git a/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.h b/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.h deleted file mode 100755 index 14d7ee957..000000000 --- a/spine-c/spine-c-unit-tests/tests/MemoryTestFixture.h +++ /dev/null @@ -1,58 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// filename: MemoryTestFixture.h -// -// purpose: Reproduce Memory Error/Leak Bugs to help debug -// and for regression testing -///////////////////////////////////////////////////////////////////// - -#pragma once - -#include "MiniCppUnit.hxx" -#include "TestOptions.h" - -class MemoryTestFixture : public TestFixture { -public: - TEST_FIXTURE(MemoryTestFixture) { - - // Comment out here to disable individual test cases - TEST_CASE(reproduceIssue_776); - TEST_CASE(reproduceIssue_777); - TEST_CASE(reproduceIssue_Loop); - TEST_CASE(triangulator); - TEST_CASE(skeletonClipper); - - initialize(); - } - - virtual ~MemoryTestFixture(); - - ////////////////////////////////////////////////////////////////////////// - // Test Cases - ////////////////////////////////////////////////////////////////////////// -public: - void reproduceIssue_776(); - - void reproduceIssue_777(); - - void reproduceIssue_Loop(); // https://esotericsoftware.com/forum/d/7451-spine-c-35-animation-jerking - void triangulator(); - - void skeletonClipper(); - - ////////////////////////////////////////////////////////////////////////// - // test fixture setup - ////////////////////////////////////////////////////////////////////////// - void initialize(); - - void finalize(); - -public: - virtual void setUp(); - - virtual void tearDown(); -}; - -#if defined(gForceAllTests) || defined(gMemoryTestFixture) - -REGISTER_FIXTURE(MemoryTestFixture); -#endif \ No newline at end of file diff --git a/spine-c/spine-c-unit-tests/tests/SpineEventMonitor.cpp b/spine-c/spine-c-unit-tests/tests/SpineEventMonitor.cpp deleted file mode 100755 index a871612f2..000000000 --- a/spine-c/spine-c-unit-tests/tests/SpineEventMonitor.cpp +++ /dev/null @@ -1,163 +0,0 @@ -#include "SpineEventMonitor.h" - -#include "spine/spine.h" -#include "KString.h" - -#include "KMemory.h" // Last include - -SpineEventMonitor::SpineEventMonitor(spAnimationState *_pAnimationState /*= nullptr*/) { - bLogging = false; - RegisterListener(_pAnimationState); -} - -SpineEventMonitor::~SpineEventMonitor() { - pAnimState = 0; -} - -void SpineEventMonitor::RegisterListener(spAnimationState *_pAnimationState) { - if (_pAnimationState) { - _pAnimationState->rendererObject = this; - _pAnimationState->listener = (spAnimationStateListener) &SpineEventMonitor::spineAnimStateHandler; - } - pAnimState = _pAnimationState; -} - -bool SpineEventMonitor::isAnimationPlaying() { - if (pAnimState) - return spAnimationState_getCurrent(pAnimState, 0) != 0; - return false; -} - -void SpineEventMonitor::spineAnimStateHandler(spAnimationState *state, int type, spTrackEntry *entry, spEvent *event) { - if (state && state->rendererObject) { - SpineEventMonitor *pEventMonitor = (SpineEventMonitor *) state->rendererObject; - pEventMonitor->OnSpineAnimationStateEvent(state, type, entry, event); - } -} - -void SpineEventMonitor::OnSpineAnimationStateEvent(spAnimationState *state, int type, spTrackEntry *trackEntry, - spEvent *event) { - const char *eventName = 0; - if (state == pAnimState) { // only monitor ours - switch (type) { - case SP_ANIMATION_START: - eventName = "SP_ANIMATION_START"; - break; - case SP_ANIMATION_INTERRUPT: - eventName = "SP_ANIMATION_INTERRUPT"; - break; - case SP_ANIMATION_END: - eventName = "SP_ANIMATION_END"; - break; - case SP_ANIMATION_COMPLETE: - eventName = "SP_ANIMATION_COMPLETE"; - break; - case SP_ANIMATION_DISPOSE: - eventName = "SP_ANIMATION_DISPOSE"; - break; - case SP_ANIMATION_EVENT: - eventName = "SP_ANIMATION_EVENT"; - break; - default: - break; - } - - if (bLogging && eventName && trackEntry && trackEntry->animation && trackEntry->animation->name) - KOutputDebug(DEBUGLVL, "[%s : '%s']\n", eventName, trackEntry->animation->name);//*/ - } -} - - -InterruptMonitor::InterruptMonitor(spAnimationState *_pAnimationState) : - SpineEventMonitor(_pAnimationState) { - bForceInterrupt = false; - mEventStackCursor = 0; // cursor used to track events -} - -bool InterruptMonitor::isAnimationPlaying() { - return !bForceInterrupt && SpineEventMonitor::isAnimationPlaying(); -} - -// Stops the animation on any occurance of the spEventType -InterruptMonitor &InterruptMonitor::AddInterruptEvent(int theEventType) { - InterruptEvent ev; - ev.mEventType = theEventType; - mEventStack.push_back(ev); - return *this; -} - -// Stops the animation when the [spEventType : 'animationName'] occurs -InterruptMonitor &InterruptMonitor::AddInterruptEvent(int theEventType, const std::string &theAnimationName) { - InterruptEvent ev; - ev.mEventType = theEventType; - ev.mAnimName = theAnimationName; - mEventStack.push_back(ev); - return *this; -} - -// stops the first encounter of spEventType on the specified TrackEntry -InterruptMonitor &InterruptMonitor::AddInterruptEvent(int theEventType, spTrackEntry *theTrackEntry) { - InterruptEvent ev; - ev.mEventType = theEventType; - ev.mTrackEntry = theTrackEntry; - mEventStack.push_back(ev); - return *this; -} - -// Stops on the first SP_ANIMATION_EVENT with the string payload of 'theEventTriggerName' -InterruptMonitor &InterruptMonitor::AddInterruptEventTrigger(const std::string &theEventTriggerName) { - InterruptEvent ev; - ev.mEventType = SP_ANIMATION_EVENT; - ev.mEventName = theEventTriggerName; - mEventStack.push_back(ev); - return *this; -} - -void InterruptMonitor::OnSpineAnimationStateEvent(spAnimationState *state, int type, spTrackEntry *trackEntry, - spEvent *event) { - SpineEventMonitor::OnSpineAnimationStateEvent(state, type, trackEntry, event); - - if (mEventStackCursor < mEventStack.size()) { - if (mEventStack[mEventStackCursor].matches(state, type, trackEntry, event)) - ++mEventStackCursor; - - if (mEventStackCursor >= mEventStack.size()) { - bForceInterrupt = true; - OnMatchingComplete(); - } - } -} - -inline bool -InterruptMonitor::InterruptEvent::matches(spAnimationState *state, int type, spTrackEntry *trackEntry, spEvent *event) { - - // Must match spEventType {SP_ANIMATION_START, SP_ANIMATION_INTERRUPT, SP_ANIMATION_END, SP_ANIMATION_COMPLETE, SP_ANIMATION_DISPOSE, SP_ANIMATION_EVENT } - if (mEventType == type) { - - // Looking for specific TrackEntry by pointer - if (mTrackEntry != 0) { - return mTrackEntry == trackEntry; - } - - // looking for Animation Track by name - if (!mAnimName.empty()) { - if (trackEntry && trackEntry->animation && trackEntry->animation->name) { - if (CompareNoCase(trackEntry->animation->name, mAnimName) == 0) { - return true; - } - } - return false; - } - - // looking for Event String Text - if (!mEventName.empty()) { - if (event && event->stringValue) { - return (CompareNoCase(event->stringValue, mEventName) == 0); - } - return false; - } - - return true; // waiting for ANY spEventType that matches - } - return false; -} diff --git a/spine-c/spine-c-unit-tests/tests/SpineEventMonitor.h b/spine-c/spine-c-unit-tests/tests/SpineEventMonitor.h deleted file mode 100755 index c5c8c073b..000000000 --- a/spine-c/spine-c-unit-tests/tests/SpineEventMonitor.h +++ /dev/null @@ -1,130 +0,0 @@ -////////////////////////////////////////////////////////////////////// -// filename: SpineEventMonitor.h -// -// purpose: Monitor spAnimationState Events -///////////////////////////////////////////////////////////////////// - -#pragma once - -#include -#include - -// forward declarations -typedef struct spAnimationState spAnimationState; -typedef struct spTrackEntry spTrackEntry; -typedef struct spEvent spEvent; - -////////////////////////////////////////////////////////////////////// -// class: SpineEventMonitor -// -// purpose: Monitor spAnimationState Events and report when there -// are no more spTrackEntry(s) waiting to play on track 0; -// -// Also allows for debug printing of Events to console. -///////////////////////////////////////////////////////////////////// -class SpineEventMonitor { -public: - SpineEventMonitor(spAnimationState *_pAnimationState = 0); - - virtual ~SpineEventMonitor(); - - void RegisterListener(spAnimationState *_pAnimationState); - - void SetDebugLogging(bool val) { bLogging = val; } - - bool GetDebugLogging() { return bLogging; } - - virtual bool isAnimationPlaying(); - -protected: - static void spineAnimStateHandler(spAnimationState *state, int type, spTrackEntry *entry, spEvent *event); - - virtual void - OnSpineAnimationStateEvent(spAnimationState *state, int type, spTrackEntry *trackEntry, spEvent *event); - -protected: - spAnimationState *pAnimState; - bool bLogging; -}; - -////////////////////////////////////////////////////////////////////// -// class: InterruptMonitor -// -// purpose: Allows a programmer to interrupt/stop the updating -// of an animation based on a specific sequence of -// events generated by the animation. -///////////////////////////////////////////////////////////////////// -class InterruptMonitor : public SpineEventMonitor { -private: - struct InterruptEvent { - InterruptEvent() { - mEventType = -1; // invalid - mTrackEntry = 0; - } - - bool matches(spAnimationState *state, int type, spTrackEntry *trackEntry, spEvent *event); - - std::string mAnimName; - int mEventType; - spTrackEntry *mTrackEntry; - std::string mEventName; - }; - - typedef std::vector InterruptEventStack; - - -public: - InterruptMonitor(spAnimationState *_pAnimationState = 0); - - ~InterruptMonitor() {} - - virtual bool isAnimationPlaying() override; - -public: - InterruptMonitor &AddInterruptEvent(int theEventType); - - InterruptMonitor &AddInterruptEvent(int theEventType, const std::string &theAnimationName); - - InterruptMonitor &AddInterruptEvent(int theEventType, spTrackEntry *theTrackEntry); - - InterruptMonitor &AddInterruptEventTrigger(const std::string &theEventTriggerName); - -protected: - virtual void - OnSpineAnimationStateEvent(spAnimationState *state, int type, spTrackEntry *trackEntry, spEvent *event) override; - - virtual void OnMatchingComplete() {} - -protected: - bool bForceInterrupt; - InterruptEventStack mEventStack; // must match these events in this order - size_t mEventStackCursor; -}; - -/* - -EXAMPLE -======= - -SpineEventMonitor eventMonitor(state); -eventMonitor.SetDebugLogging(true); - -while(eventMonitor.isAnimationPlaying()){ - // update... -} - - - -EXAMPLE -======= - -InterruptMonitor eventMonitor(state); -eventMonitor.SetDebugLogging(true); - -// Interrupt the animation on this specific sequence of spEventType(s) -eventMonitor - .AddInterruptEvent(SP_ANIMATION_INTERRUPT, "jump") // First, wait for INTERRUPT signal on the 'jump' animation spTrackEntry - .AddInterruptEvent(SP_ANIMATION_START); // Then, stop on any following START signal - - -*/ diff --git a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.cpp b/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.cpp deleted file mode 100755 index 50c24bd8e..000000000 --- a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "CPP_InterfaceTestFixture.h" - -CPP_InterfaceTestFixture::~CPP_InterfaceTestFixture() { - finalize(); -} - -void CPP_InterfaceTestFixture::initialize() { - // on a Per- Fixture Basis, before Test execution -} - -void CPP_InterfaceTestFixture::finalize() { - // on a Per- Fixture Basis, after all tests pass/fail -} - -void CPP_InterfaceTestFixture::setUp() { - // Setup on Per-Test Basis -} - -void CPP_InterfaceTestFixture::tearDown() { - // Tear Down on Per-Test Basis -} diff --git a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.h b/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.h deleted file mode 100755 index 3d6f653ff..000000000 --- a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/CPP_InterfaceTestFixture.h +++ /dev/null @@ -1,34 +0,0 @@ -#pragma once - -#include "MiniCppUnit.hxx" - -class CPP_InterfaceTestFixture : public TestFixture { -public: - TEST_FIXTURE(CPP_InterfaceTestFixture){ - //TEST_CASE(parseJSON); - - initialize(); - } - - virtual ~CPP_InterfaceTestFixture(); - - ////////////////////////////////////////////////////////////////////////// - // Test Cases - ////////////////////////////////////////////////////////////////////////// -public: - // void parseJSON(); - - ////////////////////////////////////////////////////////////////////////// - // test fixture setup - ////////////////////////////////////////////////////////////////////////// - void initialize(); - - void finalize(); - -public: - virtual void setUp(); - - virtual void tearDown(); -}; - -REGISTER_FIXTURE(CPP_InterfaceTestFixture); \ No newline at end of file diff --git a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/_TestFixture.cpp b/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/_TestFixture.cpp deleted file mode 100755 index af0be5590..000000000 --- a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/_TestFixture.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "[[FIXTURE_TYPE]].h" - -[[FIXTURE_TYPE]]:: ~[[FIXTURE_TYPE]]() { - finalize(); -} - -void [[FIXTURE_TYPE]]::initialize() { - // on a Per- Fixture Basis, before Test execution -} - -void [[FIXTURE_TYPE]]::finalize() { - // on a Per- Fixture Basis, after all tests pass/fail -} - -void [[FIXTURE_TYPE]]::setUp() { - // Setup on Per-Test Basis -} - -void [[FIXTURE_TYPE]]::tearDown() { - // Tear Down on Per-Test Basis -} diff --git a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/_TestFixture.h b/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/_TestFixture.h deleted file mode 100755 index 709883f98..000000000 --- a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/_TestFixture.h +++ /dev/null @@ -1,39 +0,0 @@ -#pragma once - -#include "MiniCppUnit.hxx" - -class [[FIXTURE_TYPE]] : public TestFixture< [[FIXTURE_TYPE]] - -> -{ -public: -TEST_FIXTURE([[FIXTURE_TYPE]]){ -//TEST_CASE(parseJSON); - -initialize(); - -} - -virtual ~[[FIXTURE_TYPE]](); - -////////////////////////////////////////////////////////////////////////// -// Test Cases -////////////////////////////////////////////////////////////////////////// -public: -// void parseJSON(); - -////////////////////////////////////////////////////////////////////////// -// test fixture setup -////////////////////////////////////////////////////////////////////////// -void initialize(); - -void finalize(); - -public: - -virtual void setUp(); - -virtual void tearDown(); - -}; -REGISTER_FIXTURE([[FIXTURE_TYPE]]); \ No newline at end of file diff --git a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/fnr.exe b/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/fnr.exe deleted file mode 100755 index 548fc5d91..000000000 Binary files a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/fnr.exe and /dev/null differ diff --git a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/makeFixture.bat b/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/makeFixture.bat deleted file mode 100755 index 634154a29..000000000 --- a/spine-c/spine-c-unit-tests/tests/TestFixtureGenerator/makeFixture.bat +++ /dev/null @@ -1,17 +0,0 @@ -@echo off -if "%1"=="" goto blank - -copy "_TestFixture.cpp" "%1TestFixture.cpp" -copy "_TestFixture.h" "%1TestFixture.h" - - -fnr --cl --find "[[FIXTURE_TYPE]]" --replace "%1TestFixture" --fileMask "%1TestFixture.cpp" --dir %cd% -fnr --cl --find "[[FIXTURE_TYPE]]" --replace "%1TestFixture" --fileMask "%1TestFixture.h" --dir %cd% - -goto done - -:blank -echo Usage: -echo %~n0 FixtureTypeName - -:done \ No newline at end of file diff --git a/spine-c/spine-c-unit-tests/tests/TestOptions.h b/spine-c/spine-c-unit-tests/tests/TestOptions.h deleted file mode 100755 index 7f00ffbb7..000000000 --- a/spine-c/spine-c-unit-tests/tests/TestOptions.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -////////////////////////////////////////////////////////////////////////// -// Force all Tests to 'ON.' Use this for final 'Regression' Testing. - -//#define gForceAllTests - -//#define TURN_ON_ALL_TESTS // Comment this line out to switch to fast testing only - -#ifdef TURN_ON_ALL_TESTS -////////////////////////////////////////////////////////////////////////// -// All tests are ON by default, but you can turn off individual tests. - -#define gEmptyTestFixture -#define gCInterfaceTestFixture -#define gCPPInterfaceTestFixture -#define gMemoryTestFixture - - -#else - -////////////////////////////////////////////////////////////////////////// -// Slow Tests are disabled by default. Use this section to turn on -// Individual tests. -#define gEmptyTestFixture // Fast - -#define gCInterfaceTestFixture // slow -#define gCPPInterfaceTestFixture // fast - -#define gMemoryTestFixture // medium - -#endif \ No newline at end of file diff --git a/spine-c/spine-c/include/spine/Animation.h b/spine-c/spine-c/include/spine/Animation.h deleted file mode 100644 index ea9dfc660..000000000 --- a/spine-c/spine-c/include/spine/Animation.h +++ /dev/null @@ -1,574 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_ANIMATION_H_ -#define SPINE_ANIMATION_H_ - -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spTimeline spTimeline; -struct spSkeleton; -typedef uint64_t spPropertyId; - -_SP_ARRAY_DECLARE_TYPE(spPropertyIdArray, spPropertyId) - -_SP_ARRAY_DECLARE_TYPE(spTimelineArray, spTimeline*) - -typedef struct spAnimation { - char *name; - float duration; - - spTimelineArray *timelines; - spPropertyIdArray *timelineIds; -} spAnimation; - -typedef enum { - SP_MIX_BLEND_SETUP, - SP_MIX_BLEND_FIRST, - SP_MIX_BLEND_REPLACE, - SP_MIX_BLEND_ADD -} spMixBlend; - -typedef enum { - SP_MIX_DIRECTION_IN, - SP_MIX_DIRECTION_OUT -} spMixDirection; - -SP_API spAnimation *spAnimation_create(const char *name, spTimelineArray *timelines, float duration); - -SP_API void spAnimation_dispose(spAnimation *self); - -SP_API int /*bool*/ spAnimation_hasTimeline(spAnimation *self, spPropertyId *ids, int idsCount); - -/** Poses the skeleton at the specified time for this animation. - * @param lastTime The last time the animation was applied. - * @param events Any triggered events are added. May be null.*/ -SP_API void -spAnimation_apply(const spAnimation *self, struct spSkeleton *skeleton, float lastTime, float time, int loop, - spEvent **events, int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction); - -/**/ -typedef enum { - SP_TIMELINE_ATTACHMENT, - SP_TIMELINE_ALPHA, - SP_TIMELINE_PATHCONSTRAINTPOSITION, - SP_TIMELINE_PATHCONSTRAINTSPACING, - SP_TIMELINE_ROTATE, - SP_TIMELINE_SCALEX, - SP_TIMELINE_SCALEY, - SP_TIMELINE_SHEARX, - SP_TIMELINE_SHEARY, - SP_TIMELINE_TRANSLATEX, - SP_TIMELINE_TRANSLATEY, - SP_TIMELINE_SCALE, - SP_TIMELINE_SHEAR, - SP_TIMELINE_TRANSLATE, - SP_TIMELINE_DEFORM, - SP_TIMELINE_SEQUENCE, - SP_TIMELINE_INHERIT, - SP_TIMELINE_IKCONSTRAINT, - SP_TIMELINE_PATHCONSTRAINTMIX, - SP_TIMELINE_PHYSICSCONSTRAINT_INERTIA, - SP_TIMELINE_PHYSICSCONSTRAINT_STRENGTH, - SP_TIMELINE_PHYSICSCONSTRAINT_DAMPING, - SP_TIMELINE_PHYSICSCONSTRAINT_MASS, - SP_TIMELINE_PHYSICSCONSTRAINT_WIND, - SP_TIMELINE_PHYSICSCONSTRAINT_GRAVITY, - SP_TIMELINE_PHYSICSCONSTRAINT_MIX, - SP_TIMELINE_PHYSICSCONSTRAINT_RESET, - SP_TIMELINE_RGB2, - SP_TIMELINE_RGBA2, - SP_TIMELINE_RGBA, - SP_TIMELINE_RGB, - SP_TIMELINE_TRANSFORMCONSTRAINT, - SP_TIMELINE_DRAWORDER, - SP_TIMELINE_EVENT -} spTimelineType; - -/**/ - -typedef enum { - SP_PROPERTY_ROTATE = 1 << 0, - SP_PROPERTY_X = 1 << 1, - SP_PROPERTY_Y = 1 << 2, - SP_PROPERTY_SCALEX = 1 << 3, - SP_PROPERTY_SCALEY = 1 << 4, - SP_PROPERTY_SHEARX = 1 << 5, - SP_PROPERTY_SHEARY = 1 << 6, - SP_PROPERTY_INHERIT = 1 << 7, - SP_PROPERTY_RGB = 1 << 8, - SP_PROPERTY_ALPHA = 1 << 9, - SP_PROPERTY_RGB2 = 1 << 10, - SP_PROPERTY_ATTACHMENT = 1 << 11, - SP_PROPERTY_DEFORM = 1 << 12, - SP_PROPERTY_EVENT = 1 << 13, - SP_PROPERTY_DRAWORDER = 1 << 14, - SP_PROPERTY_IKCONSTRAINT = 1 << 15, - SP_PROPERTY_TRANSFORMCONSTRAINT = 1 << 16, - SP_PROPERTY_PATHCONSTRAINT_POSITION = 1 << 17, - SP_PROPERTY_PATHCONSTRAINT_SPACING = 1 << 18, - SP_PROPERTY_PATHCONSTRAINT_MIX = 1 << 19, - SP_PROPERTY_PHYSICSCONSTRAINT_INERTIA = 1 << 20, - SP_PROPERTY_PHYSICSCONSTRAINT_STRENGTH = 1 << 21, - SP_PROPERTY_PHYSICSCONSTRAINT_DAMPING = 1 << 22, - SP_PROPERTY_PHYSICSCONSTRAINT_MASS = 1 << 23, - SP_PROPERTY_PHYSICSCONSTRAINT_WIND = 1 << 24, - SP_PROPERTY_PHYSICSCONSTRAINT_GRAVITY = 1 << 25, - SP_PROPERTY_PHYSICSCONSTRAINT_MIX = 1 << 26, - SP_PROPERTY_PHYSICSCONSTRAINT_RESET = 1 << 27, - SP_PROPERTY_SEQUENCE = 1 << 28 -} spProperty; - -#define SP_MAX_PROPERTY_IDS 3 - -typedef struct _spTimelineVtable { - void (*apply)(spTimeline *self, struct spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction); - - void (*dispose)(spTimeline *self); - - void - (*setBezier)(spTimeline *self, int bezier, int frame, float value, float time1, float value1, float cx1, float cy1, - float cx2, float cy2, float time2, float value2); -} _spTimelineVtable; - -struct spTimeline { - _spTimelineVtable vtable; - spPropertyId propertyIds[SP_MAX_PROPERTY_IDS]; - int propertyIdsCount; - spFloatArray *frames; - int frameCount; - int frameEntries; - spTimelineType type; -}; - -SP_API void spTimeline_dispose(spTimeline *self); - -SP_API void -spTimeline_apply(spTimeline *self, struct spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction); - -SP_API void -spTimeline_setBezier(spTimeline *self, int bezier, int frame, float value, float time1, float value1, float cx1, - float cy1, float cx2, float cy2, float time2, float value2); - -SP_API float spTimeline_getDuration(const spTimeline *self); - -/**/ - -typedef struct spCurveTimeline { - spTimeline super; - spFloatArray *curves; /* type, x, y, ... */ -} spCurveTimeline; - -SP_API void spCurveTimeline_setLinear(spCurveTimeline *self, int frameIndex); - -SP_API void spCurveTimeline_setStepped(spCurveTimeline *self, int frameIndex); - -/* Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. - * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of - * the difference between the keyframe's values. */ -SP_API void spCurveTimeline_setCurve(spCurveTimeline *self, int frameIndex, float cx1, float cy1, float cx2, float cy2); - -SP_API float spCurveTimeline_getCurvePercent(const spCurveTimeline *self, int frameIndex, float percent); - -typedef struct spCurveTimeline spCurveTimeline1; - -SP_API void spCurveTimeline1_setFrame(spCurveTimeline1 *self, int frame, float time, float value); - -SP_API float spCurveTimeline1_getCurveValue(spCurveTimeline1 *self, float time); - -SP_API float spCurveTimeline1_getRelativeValue(spCurveTimeline1 *timeline, float time, float alpha, spMixBlend blend, float current, float setup); - -SP_API float spCurveTimeline1_getAbsoluteValue(spCurveTimeline1 *timeline, float time, float alpha, spMixBlend blend, float current, float setup); - -SP_API float spCurveTimeline1_getAbsoluteValue2(spCurveTimeline1 *timeline, float time, float alpha, spMixBlend blend, float current, float setup, float value); - -SP_API float spCurveTimeline1_getScaleValue (spCurveTimeline1 *timeline, float time, float alpha, spMixBlend blend, spMixDirection direction, float current, float setup); - -typedef struct spCurveTimeline spCurveTimeline2; - -SP_API void spCurveTimeline2_setFrame(spCurveTimeline1 *self, int frame, float time, float value1, float value2); - -/**/ - -typedef struct spRotateTimeline { - spCurveTimeline1 super; - int boneIndex; -} spRotateTimeline; - -SP_API spRotateTimeline *spRotateTimeline_create(int frameCount, int bezierCount, int boneIndex); - -SP_API void spRotateTimeline_setFrame(spRotateTimeline *self, int frameIndex, float time, float angle); - -/**/ - -typedef struct spTranslateTimeline { - spCurveTimeline2 super; - int boneIndex; -} spTranslateTimeline; - -SP_API spTranslateTimeline *spTranslateTimeline_create(int frameCount, int bezierCount, int boneIndex); - -SP_API void spTranslateTimeline_setFrame(spTranslateTimeline *self, int frameIndex, float time, float x, float y); - -/**/ - -typedef struct spTranslateXTimeline { - spCurveTimeline1 super; - int boneIndex; -} spTranslateXTimeline; - -SP_API spTranslateXTimeline *spTranslateXTimeline_create(int frameCount, int bezierCount, int boneIndex); - -SP_API void spTranslateXTimeline_setFrame(spTranslateXTimeline *self, int frame, float time, float x); - -/**/ - -typedef struct spTranslateYTimeline { - spCurveTimeline1 super; - int boneIndex; -} spTranslateYTimeline; - -SP_API spTranslateYTimeline *spTranslateYTimeline_create(int frameCount, int bezierCount, int boneIndex); - -SP_API void spTranslateYTimeline_setFrame(spTranslateYTimeline *self, int frame, float time, float y); - -/**/ - -typedef struct spScaleTimeline { - spCurveTimeline2 super; - int boneIndex; -} spScaleTimeline; - -SP_API spScaleTimeline *spScaleTimeline_create(int frameCount, int bezierCount, int boneIndex); - -SP_API void spScaleTimeline_setFrame(spScaleTimeline *self, int frameIndex, float time, float x, float y); - -/**/ - -typedef struct spScaleXTimeline { - spCurveTimeline1 super; - int boneIndex; -} spScaleXTimeline; - -SP_API spScaleXTimeline *spScaleXTimeline_create(int frameCount, int bezierCount, int boneIndex); - -SP_API void spScaleXTimeline_setFrame(spScaleXTimeline *self, int frame, float time, float x); - -/**/ - -typedef struct spScaleYTimeline { - spCurveTimeline1 super; - int boneIndex; -} spScaleYTimeline; - -SP_API spScaleYTimeline *spScaleYTimeline_create(int frameCount, int bezierCount, int boneIndex); - -SP_API void spScaleYTimeline_setFrame(spScaleYTimeline *self, int frame, float time, float y); - -/**/ - -typedef struct spShearTimeline { - spCurveTimeline2 super; - int boneIndex; -} spShearTimeline; - -SP_API spShearTimeline *spShearTimeline_create(int frameCount, int bezierCount, int boneIndex); - -SP_API void spShearTimeline_setFrame(spShearTimeline *self, int frameIndex, float time, float x, float y); - -/**/ - -typedef struct spShearXTimeline { - spCurveTimeline1 super; - int boneIndex; -} spShearXTimeline; - -SP_API spShearXTimeline *spShearXTimeline_create(int frameCount, int bezierCount, int boneIndex); - -SP_API void spShearXTimeline_setFrame(spShearXTimeline *self, int frame, float time, float x); - -/**/ - -typedef struct spShearYTimeline { - spCurveTimeline1 super; - int boneIndex; -} spShearYTimeline; - -SP_API spShearYTimeline *spShearYTimeline_create(int frameCount, int bezierCount, int boneIndex); - -SP_API void spShearYTimeline_setFrame(spShearYTimeline *self, int frame, float time, float x); - -/**/ - -typedef struct spRGBATimeline { - spCurveTimeline2 super; - int slotIndex; -} spRGBATimeline; - -SP_API spRGBATimeline *spRGBATimeline_create(int framesCount, int bezierCount, int slotIndex); - -SP_API void -spRGBATimeline_setFrame(spRGBATimeline *self, int frameIndex, float time, float r, float g, float b, float a); - -/**/ - -typedef struct spRGBTimeline { - spCurveTimeline2 super; - int slotIndex; -} spRGBTimeline; - -SP_API spRGBTimeline *spRGBTimeline_create(int framesCount, int bezierCount, int slotIndex); - -SP_API void spRGBTimeline_setFrame(spRGBTimeline *self, int frameIndex, float time, float r, float g, float b); - -/**/ - -typedef struct spAlphaTimeline { - spCurveTimeline1 super; - int slotIndex; -} spAlphaTimeline; - -SP_API spAlphaTimeline *spAlphaTimeline_create(int frameCount, int bezierCount, int slotIndex); - -SP_API void spAlphaTimeline_setFrame(spAlphaTimeline *self, int frame, float time, float x); - -/**/ - -typedef struct spRGBA2Timeline { - spCurveTimeline super; - int slotIndex; -} spRGBA2Timeline; - -SP_API spRGBA2Timeline *spRGBA2Timeline_create(int framesCount, int bezierCount, int slotIndex); - -SP_API void -spRGBA2Timeline_setFrame(spRGBA2Timeline *self, int frameIndex, float time, float r, float g, float b, float a, - float r2, float g2, float b2); - -/**/ - -typedef struct spRGB2Timeline { - spCurveTimeline super; - int slotIndex; -} spRGB2Timeline; - -SP_API spRGB2Timeline *spRGB2Timeline_create(int framesCount, int bezierCount, int slotIndex); - -SP_API void -spRGB2Timeline_setFrame(spRGB2Timeline *self, int frameIndex, float time, float r, float g, float b, float r2, float g2, - float b2); - -/**/ - -typedef struct spAttachmentTimeline { - spTimeline super; - int slotIndex; - char **attachmentNames; -} spAttachmentTimeline; - -SP_API spAttachmentTimeline *spAttachmentTimeline_create(int framesCount, int SlotIndex); - -/* @param attachmentName May be 0. */ -SP_API void -spAttachmentTimeline_setFrame(spAttachmentTimeline *self, int frameIndex, float time, const char *attachmentName); - -/**/ - -typedef struct spDeformTimeline { - spCurveTimeline super; - int frameVerticesCount; - float **frameVertices; - int slotIndex; - spAttachment *attachment; -} spDeformTimeline; - -SP_API spDeformTimeline * -spDeformTimeline_create(int framesCount, int frameVerticesCount, int bezierCount, int slotIndex, - spVertexAttachment *attachment); - -SP_API void spDeformTimeline_setFrame(spDeformTimeline *self, int frameIndex, float time, float *vertices); - -/**/ - -typedef struct spSequenceTimeline { - spTimeline super; - int slotIndex; - spAttachment *attachment; -} spSequenceTimeline; - -SP_API spSequenceTimeline *spSequenceTimeline_create(int framesCount, int slotIndex, spAttachment *attachment); - -SP_API void spSequenceTimeline_setFrame(spSequenceTimeline *self, int frameIndex, float time, int mode, int index, float delay); - -/**/ - -/**/ - -typedef struct spEventTimeline { - spTimeline super; - spEvent **events; -} spEventTimeline; - -SP_API spEventTimeline *spEventTimeline_create(int framesCount); - -SP_API void spEventTimeline_setFrame(spEventTimeline *self, int frameIndex, spEvent *event); - -/**/ - -typedef struct spDrawOrderTimeline { - spTimeline super; - int **drawOrders; - int slotsCount; -} spDrawOrderTimeline; - -SP_API spDrawOrderTimeline *spDrawOrderTimeline_create(int framesCount, int slotsCount); - -SP_API void spDrawOrderTimeline_setFrame(spDrawOrderTimeline *self, int frameIndex, float time, const int *drawOrder); - -/**/ - -typedef struct spInheritTimeline { - spTimeline super; - int boneIndex; -} spInheritTimeline; - -SP_API spInheritTimeline *spInheritTimeline_create(int framesCount, int boneIndex); - -SP_API void spInheritTimeline_setFrame(spInheritTimeline *self, int frameIndex, float time, spInherit inherit); - - -/**/ - -typedef struct spIkConstraintTimeline { - spCurveTimeline super; - int ikConstraintIndex; -} spIkConstraintTimeline; - -SP_API spIkConstraintTimeline * -spIkConstraintTimeline_create(int framesCount, int bezierCount, int transformConstraintIndex); - -SP_API void -spIkConstraintTimeline_setFrame(spIkConstraintTimeline *self, int frameIndex, float time, float mix, float softness, - int bendDirection, int /*boolean*/ compress, int /**boolean**/ stretch); - -/**/ - -typedef struct spTransformConstraintTimeline { - spCurveTimeline super; - int transformConstraintIndex; -} spTransformConstraintTimeline; - -SP_API spTransformConstraintTimeline * -spTransformConstraintTimeline_create(int framesCount, int bezierCount, int transformConstraintIndex); - -SP_API void -spTransformConstraintTimeline_setFrame(spTransformConstraintTimeline *self, int frameIndex, float time, float mixRotate, - float mixX, float mixY, float mixScaleX, float mixScaleY, float mixShearY); - -/**/ - -typedef struct spPathConstraintPositionTimeline { - spCurveTimeline super; - int pathConstraintIndex; -} spPathConstraintPositionTimeline; - -SP_API spPathConstraintPositionTimeline * -spPathConstraintPositionTimeline_create(int framesCount, int bezierCount, int pathConstraintIndex); - -SP_API void -spPathConstraintPositionTimeline_setFrame(spPathConstraintPositionTimeline *self, int frameIndex, float time, - float value); - -/**/ - -typedef struct spPathConstraintSpacingTimeline { - spCurveTimeline super; - int pathConstraintIndex; -} spPathConstraintSpacingTimeline; - -SP_API spPathConstraintSpacingTimeline * -spPathConstraintSpacingTimeline_create(int framesCount, int bezierCount, int pathConstraintIndex); - -SP_API void spPathConstraintSpacingTimeline_setFrame(spPathConstraintSpacingTimeline *self, int frameIndex, float time, - float value); - -/**/ - -typedef struct spPathConstraintMixTimeline { - spCurveTimeline super; - int pathConstraintIndex; -} spPathConstraintMixTimeline; - -SP_API spPathConstraintMixTimeline * -spPathConstraintMixTimeline_create(int framesCount, int bezierCount, int pathConstraintIndex); - -SP_API void -spPathConstraintMixTimeline_setFrame(spPathConstraintMixTimeline *self, int frameIndex, float time, float mixRotate, - float mixX, float mixY); - -/**/ - -typedef struct spPhysicsConstraintTimeline { - spCurveTimeline super; - int physicsConstraintIndex; -} spPhysicsConstraintTimeline; - -SP_API spPhysicsConstraintTimeline * -spPhysicsConstraintTimeline_create(int framesCount, int bezierCount, int physicsConstraintIndex, spTimelineType type); - -SP_API void spPhysicsConstraintTimeline_setFrame(spPhysicsConstraintTimeline *self, int frame, float time, float value); - -/**/ - -typedef struct spPhysicsConstraintResetTimeline { - spTimeline super; - int physicsConstraintIndex; -} spPhysicsConstraintResetTimeline; - -SP_API spPhysicsConstraintResetTimeline *spPhysicsConstraintResetTimeline_create(int framesCount, int boneIndex); - -SP_API void spPhysicsConstraintResetTimeline_setFrame(spPhysicsConstraintResetTimeline *self, int frameIndex, float time); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_ANIMATION_H_ */ diff --git a/spine-c/spine-c/include/spine/AnimationState.h b/spine-c/spine-c/include/spine/AnimationState.h deleted file mode 100644 index 5132c4721..000000000 --- a/spine-c/spine-c/include/spine/AnimationState.h +++ /dev/null @@ -1,164 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_ANIMATIONSTATE_H_ -#define SPINE_ANIMATIONSTATE_H_ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - SP_ANIMATION_START, - SP_ANIMATION_INTERRUPT, - SP_ANIMATION_END, - SP_ANIMATION_COMPLETE, - SP_ANIMATION_DISPOSE, - SP_ANIMATION_EVENT -} spEventType; - -typedef struct spAnimationState spAnimationState; -typedef struct spTrackEntry spTrackEntry; - -typedef void (*spAnimationStateListener)(spAnimationState *state, spEventType type, spTrackEntry *entry, - spEvent *event); - -_SP_ARRAY_DECLARE_TYPE(spTrackEntryArray, spTrackEntry*) - -struct spTrackEntry { - spAnimation *animation; - spTrackEntry *previous; - spTrackEntry *next; - spTrackEntry *mixingFrom; - spTrackEntry *mixingTo; - spAnimationStateListener listener; - int trackIndex; - int /*boolean*/ loop; - int /*boolean*/ holdPrevious; - int /*boolean*/ reverse; - int /*boolean*/ shortestRotation; - float eventThreshold, mixAttachmentThreshold, alphaAttachmentThreshold, mixDrawOrderThreshold; - float animationStart, animationEnd, animationLast, nextAnimationLast; - float delay, trackTime, trackLast, nextTrackLast, trackEnd, timeScale; - float alpha, mixTime, mixDuration, interruptAlpha, totalAlpha; - spMixBlend mixBlend; - spIntArray *timelineMode; - spTrackEntryArray *timelineHoldMix; - float *timelinesRotation; - int timelinesRotationCount; - void *rendererObject; - void *userData; -}; - -struct spAnimationState { - spAnimationStateData *data; - - int tracksCount; - spTrackEntry **tracks; - - spAnimationStateListener listener; - - float timeScale; - - void *rendererObject; - void *userData; - - int unkeyedState; -}; - -/* @param data May be 0 for no mixing. */ -SP_API spAnimationState *spAnimationState_create(spAnimationStateData *data); - -SP_API void spAnimationState_dispose(spAnimationState *self); - -SP_API void spAnimationState_update(spAnimationState *self, float delta); - -SP_API int /**bool**/ spAnimationState_apply(spAnimationState *self, struct spSkeleton *skeleton); - -SP_API void spAnimationState_clearTracks(spAnimationState *self); - -SP_API void spAnimationState_clearTrack(spAnimationState *self, int trackIndex); - -/** Set the current animation. Any queued animations are cleared. */ -SP_API spTrackEntry * -spAnimationState_setAnimationByName(spAnimationState *self, int trackIndex, const char *animationName, - int/*bool*/loop); - -SP_API spTrackEntry * -spAnimationState_setAnimation(spAnimationState *self, int trackIndex, spAnimation *animation, int/*bool*/loop); - -/** Adds an animation to be played delay seconds after the current or last queued animation, taking into account any mix - * duration. */ -SP_API spTrackEntry * -spAnimationState_addAnimationByName(spAnimationState *self, int trackIndex, const char *animationName, - int/*bool*/loop, float delay); - -SP_API spTrackEntry * -spAnimationState_addAnimation(spAnimationState *self, int trackIndex, spAnimation *animation, int/*bool*/loop, - float delay); - -SP_API spTrackEntry *spAnimationState_setEmptyAnimation(spAnimationState *self, int trackIndex, float mixDuration); - -SP_API spTrackEntry * -spAnimationState_addEmptyAnimation(spAnimationState *self, int trackIndex, float mixDuration, float delay); - -SP_API void spAnimationState_setEmptyAnimations(spAnimationState *self, float mixDuration); - -SP_API spTrackEntry *spAnimationState_getCurrent(spAnimationState *self, int trackIndex); - -SP_API void spAnimationState_clearListenerNotifications(spAnimationState *self); - -SP_API float spTrackEntry_getAnimationTime(spTrackEntry *entry); - -SP_API void spTrackEntry_resetRotationDirections(spTrackEntry *entry); - -SP_API float spTrackEntry_getTrackComplete(spTrackEntry *entry); - -SP_API void spTrackEntry_setMixDuration(spTrackEntry *entry, float mixDuration, float delay); - -SP_API int/*bool*/ spTrackEntry_wasApplied(spTrackEntry *entry); - -SP_API int/*bool*/ spTrackEntry_isNextReady(spTrackEntry *entry); - -SP_API void spAnimationState_clearNext(spAnimationState *self, spTrackEntry *entry); - -/** Use this to dispose static memory before your app exits to appease your memory leak detector*/ -SP_API void spAnimationState_disposeStatics(void); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_ANIMATIONSTATE_H_ */ diff --git a/spine-c/spine-c/include/spine/AnimationStateData.h b/spine-c/spine-c/include/spine/AnimationStateData.h deleted file mode 100644 index 6be78e524..000000000 --- a/spine-c/spine-c/include/spine/AnimationStateData.h +++ /dev/null @@ -1,62 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_ANIMATIONSTATEDATA_H_ -#define SPINE_ANIMATIONSTATEDATA_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spAnimationStateData { - spSkeletonData *skeletonData; - float defaultMix; - const void *entries; -} spAnimationStateData; - -SP_API spAnimationStateData *spAnimationStateData_create(spSkeletonData *skeletonData); - -SP_API void spAnimationStateData_dispose(spAnimationStateData *self); - -SP_API void -spAnimationStateData_setMixByName(spAnimationStateData *self, const char *fromName, const char *toName, float duration); - -SP_API void spAnimationStateData_setMix(spAnimationStateData *self, spAnimation *from, spAnimation *to, float duration); -/* Returns 0 if there is no mixing between the animations. */ -SP_API float spAnimationStateData_getMix(spAnimationStateData *self, spAnimation *from, spAnimation *to); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_ANIMATIONSTATEDATA_H_ */ diff --git a/spine-c/spine-c/include/spine/Array.h b/spine-c/spine-c/include/spine/Array.h deleted file mode 100644 index bf0716e4b..000000000 --- a/spine-c/spine-c/include/spine/Array.h +++ /dev/null @@ -1,196 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_ARRAY_H -#define SPINE_ARRAY_H - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define _SP_ARRAY_DECLARE_TYPE(name, itemType) \ - typedef struct name { int size; int capacity; itemType* items; } name; \ - SP_API name* name##_create(int initialCapacity); \ - SP_API void name##_dispose(name* self); \ - SP_API void name##_clear(name* self); \ - SP_API name* name##_setSize(name* self, int newSize); \ - SP_API void name##_ensureCapacity(name* self, int newCapacity); \ - SP_API void name##_add(name* self, itemType value); \ - SP_API void name##_addAll(name* self, name* other); \ - SP_API void name##_addAllValues(name* self, itemType* values, int offset, int count); \ - SP_API void name##_removeAt(name* self, int index); \ - SP_API int name##_contains(name* self, itemType value); \ - SP_API itemType name##_pop(name* self); \ - SP_API itemType name##_peek(name* self); - -#define _SP_ARRAY_IMPLEMENT_TYPE(name, itemType) \ - name* name##_create(int initialCapacity) { \ - name* array = CALLOC(name, 1); \ - array->size = 0; \ - array->capacity = initialCapacity; \ - array->items = CALLOC(itemType, initialCapacity); \ - return array; \ - } \ - void name##_dispose(name* self) { \ - FREE(self->items); \ - FREE(self); \ - } \ - void name##_clear(name* self) { \ - self->size = 0; \ - } \ - name* name##_setSize(name* self, int newSize) { \ - self->size = newSize; \ - if (self->capacity < newSize) { \ - self->capacity = MAX(8, (int)(self->size * 1.75f)); \ - self->items = REALLOC(self->items, itemType, self->capacity); \ - } \ - return self; \ - } \ - void name##_ensureCapacity(name* self, int newCapacity) { \ - if (self->capacity >= newCapacity) return; \ - self->capacity = newCapacity; \ - self->items = REALLOC(self->items, itemType, self->capacity); \ - } \ - void name##_add(name* self, itemType value) { \ - if (self->size == self->capacity) { \ - self->capacity = MAX(8, (int)(self->size * 1.75f)); \ - self->items = REALLOC(self->items, itemType, self->capacity); \ - } \ - self->items[self->size++] = value; \ - } \ - void name##_addAll(name* self, name* other) { \ - int i = 0; \ - for (; i < other->size; i++) { \ - name##_add(self, other->items[i]); \ - } \ - } \ - void name##_addAllValues(name* self, itemType* values, int offset, int count) { \ - int i = offset, n = offset + count; \ - for (; i < n; i++) { \ - name##_add(self, values[i]); \ - } \ - } \ - void name##_removeAt(name* self, int index) { \ - self->size--; \ - memmove(self->items + index, self->items + index + 1, sizeof(itemType) * (self->size - index)); \ - } \ - int name##_contains(name* self, itemType value) { \ - itemType* items = self->items; \ - int i, n; \ - for (i = 0, n = self->size; i < n; i++) { \ - if (items[i] == value) return -1; \ - } \ - return 0; \ - } \ - itemType name##_pop(name* self) { \ - itemType item = self->items[--self->size]; \ - return item; \ - } \ - itemType name##_peek(name* self) { \ - return self->items[self->size - 1]; \ - } - -#define _SP_ARRAY_IMPLEMENT_TYPE_NO_CONTAINS(name, itemType) \ - name* name##_create(int initialCapacity) { \ - name* array = CALLOC(name, 1); \ - array->size = 0; \ - array->capacity = initialCapacity; \ - array->items = CALLOC(itemType, initialCapacity); \ - return array; \ - } \ - void name##_dispose(name* self) { \ - FREE(self->items); \ - FREE(self); \ - } \ - void name##_clear(name* self) { \ - self->size = 0; \ - } \ - name* name##_setSize(name* self, int newSize) { \ - self->size = newSize; \ - if (self->capacity < newSize) { \ - self->capacity = MAX(8, (int)(self->size * 1.75f)); \ - self->items = REALLOC(self->items, itemType, self->capacity); \ - } \ - return self; \ - } \ - void name##_ensureCapacity(name* self, int newCapacity) { \ - if (self->capacity >= newCapacity) return; \ - self->capacity = newCapacity; \ - self->items = REALLOC(self->items, itemType, self->capacity); \ - } \ - void name##_add(name* self, itemType value) { \ - if (self->size == self->capacity) { \ - self->capacity = MAX(8, (int)(self->size * 1.75f)); \ - self->items = REALLOC(self->items, itemType, self->capacity); \ - } \ - self->items[self->size++] = value; \ - } \ - void name##_addAll(name* self, name* other) { \ - int i = 0; \ - for (; i < other->size; i++) { \ - name##_add(self, other->items[i]); \ - } \ - } \ - void name##_addAllValues(name* self, itemType* values, int offset, int count) { \ - int i = offset, n = offset + count; \ - for (; i < n; i++) { \ - name##_add(self, values[i]); \ - } \ - } \ - void name##_removeAt(name* self, int index) { \ - self->size--; \ - memmove(self->items + index, self->items + index + 1, sizeof(itemType) * (self->size - index)); \ - } \ - itemType name##_pop(name* self) { \ - itemType item = self->items[--self->size]; \ - return item; \ - } \ - itemType name##_peek(name* self) { \ - return self->items[self->size - 1]; \ - } - -_SP_ARRAY_DECLARE_TYPE(spFloatArray, float) - -_SP_ARRAY_DECLARE_TYPE(spIntArray, int) - -_SP_ARRAY_DECLARE_TYPE(spShortArray, short) - -_SP_ARRAY_DECLARE_TYPE(spUnsignedShortArray, unsigned short) - -_SP_ARRAY_DECLARE_TYPE(spArrayFloatArray, spFloatArray*) - -_SP_ARRAY_DECLARE_TYPE(spArrayShortArray, spShortArray*) - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_ARRAY_H */ diff --git a/spine-c/spine-c/include/spine/Atlas.h b/spine-c/spine-c/include/spine/Atlas.h deleted file mode 100644 index 52b6b1fdc..000000000 --- a/spine-c/spine-c/include/spine/Atlas.h +++ /dev/null @@ -1,140 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_ATLAS_H_ -#define SPINE_ATLAS_H_ - -#include -#include -#include "TextureRegion.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spAtlas spAtlas; - -typedef enum { - SP_ATLAS_UNKNOWN_FORMAT, - SP_ATLAS_ALPHA, - SP_ATLAS_INTENSITY, - SP_ATLAS_LUMINANCE_ALPHA, - SP_ATLAS_RGB565, - SP_ATLAS_RGBA4444, - SP_ATLAS_RGB888, - SP_ATLAS_RGBA8888 -} spAtlasFormat; - -typedef enum { - SP_ATLAS_UNKNOWN_FILTER, - SP_ATLAS_NEAREST, - SP_ATLAS_LINEAR, - SP_ATLAS_MIPMAP, - SP_ATLAS_MIPMAP_NEAREST_NEAREST, - SP_ATLAS_MIPMAP_LINEAR_NEAREST, - SP_ATLAS_MIPMAP_NEAREST_LINEAR, - SP_ATLAS_MIPMAP_LINEAR_LINEAR -} spAtlasFilter; - -typedef enum { - SP_ATLAS_MIRROREDREPEAT, - SP_ATLAS_CLAMPTOEDGE, - SP_ATLAS_REPEAT -} spAtlasWrap; - -typedef struct spAtlasPage spAtlasPage; -struct spAtlasPage { - spAtlas *atlas; - char *name; - spAtlasFormat format; - spAtlasFilter minFilter, magFilter; - spAtlasWrap uWrap, vWrap; - - void *rendererObject; - int width, height; - int /*boolean*/ pma; - - spAtlasPage *next; -}; - -SP_API spAtlasPage *spAtlasPage_create(spAtlas *atlas, const char *name); - -SP_API void spAtlasPage_dispose(spAtlasPage *self); - -/**/ -typedef struct spKeyValue { - char *name; - float values[5]; -} spKeyValue; -_SP_ARRAY_DECLARE_TYPE(spKeyValueArray, spKeyValue) - -/**/ -typedef struct spAtlasRegion spAtlasRegion; -struct spAtlasRegion { - spTextureRegion super; - const char *name; - int x, y; - int index; - int *splits; - int *pads; - spKeyValueArray *keyValues; - - spAtlasPage *page; - - spAtlasRegion *next; -}; - -SP_API spAtlasRegion *spAtlasRegion_create(void); - -SP_API void spAtlasRegion_dispose(spAtlasRegion *self); - -/**/ - -struct spAtlas { - spAtlasPage *pages; - spAtlasRegion *regions; - - void *rendererObject; -}; - -/* Image files referenced in the atlas file will be prefixed with dir. */ -SP_API spAtlas *spAtlas_create(const char *data, int length, const char *dir, void *rendererObject); -/* Image files referenced in the atlas file will be prefixed with the directory containing the atlas file. */ -SP_API spAtlas *spAtlas_createFromFile(const char *path, void *rendererObject); - -SP_API void spAtlas_dispose(spAtlas *atlas); - -/* Returns 0 if the region was not found. */ -SP_API spAtlasRegion *spAtlas_findRegion(const spAtlas *self, const char *name); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_ATLAS_H_ */ diff --git a/spine-c/spine-c/include/spine/AtlasAttachmentLoader.h b/spine-c/spine-c/include/spine/AtlasAttachmentLoader.h deleted file mode 100644 index 55b449402..000000000 --- a/spine-c/spine-c/include/spine/AtlasAttachmentLoader.h +++ /dev/null @@ -1,52 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_ATLASATTACHMENTLOADER_H_ -#define SPINE_ATLASATTACHMENTLOADER_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spAtlasAttachmentLoader { - spAttachmentLoader super; - spAtlas *atlas; -} spAtlasAttachmentLoader; - -SP_API spAtlasAttachmentLoader *spAtlasAttachmentLoader_create(spAtlas *atlas); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_ATLASATTACHMENTLOADER_H_ */ diff --git a/spine-c/spine-c/include/spine/Attachment.h b/spine-c/spine-c/include/spine/Attachment.h deleted file mode 100644 index ab864cacb..000000000 --- a/spine-c/spine-c/include/spine/Attachment.h +++ /dev/null @@ -1,67 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_ATTACHMENT_H_ -#define SPINE_ATTACHMENT_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct spAttachmentLoader; - -typedef enum { - SP_ATTACHMENT_REGION, - SP_ATTACHMENT_BOUNDING_BOX, - SP_ATTACHMENT_MESH, - SP_ATTACHMENT_LINKED_MESH, - SP_ATTACHMENT_PATH, - SP_ATTACHMENT_POINT, - SP_ATTACHMENT_CLIPPING -} spAttachmentType; - -typedef struct spAttachment { - char *name; - spAttachmentType type; - const void *vtable; - int refCount; - struct spAttachmentLoader *attachmentLoader; -} spAttachment; - -void spAttachment_dispose(spAttachment *self); - -spAttachment *spAttachment_copy(spAttachment *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_ATTACHMENT_H_ */ diff --git a/spine-c/spine-c/include/spine/AttachmentLoader.h b/spine-c/spine-c/include/spine/AttachmentLoader.h deleted file mode 100644 index 4c48d60c8..000000000 --- a/spine-c/spine-c/include/spine/AttachmentLoader.h +++ /dev/null @@ -1,65 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_ATTACHMENTLOADER_H_ -#define SPINE_ATTACHMENTLOADER_H_ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spAttachmentLoader { - char *error1; - char *error2; - - const void *vtable; -} spAttachmentLoader; - -SP_API void spAttachmentLoader_dispose(spAttachmentLoader *self); - -/* Called to create each attachment. Returns 0 to not load an attachment. If 0 is returned and _spAttachmentLoader_setError was - * called, an error occurred. */ -SP_API spAttachment * -spAttachmentLoader_createAttachment(spAttachmentLoader *self, spSkin *skin, spAttachmentType type, const char *name, - const char *path, spSequence *sequence); -/* Called after the attachment has been fully configured. */ -SP_API void spAttachmentLoader_configureAttachment(spAttachmentLoader *self, spAttachment *attachment); -/* Called just before the attachment is disposed. This can release allocations made in spAttachmentLoader_configureAttachment. */ -SP_API void spAttachmentLoader_disposeAttachment(spAttachmentLoader *self, spAttachment *attachment); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_ATTACHMENTLOADER_H_ */ diff --git a/spine-c/spine-c/include/spine/Bone.h b/spine-c/spine-c/include/spine/Bone.h deleted file mode 100644 index e033e9a87..000000000 --- a/spine-c/spine-c/include/spine/Bone.h +++ /dev/null @@ -1,108 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_BONE_H_ -#define SPINE_BONE_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct spSkeleton; - -typedef struct spBone spBone; -struct spBone { - spBoneData *data; - struct spSkeleton *skeleton; - spBone *parent; - int childrenCount; - spBone **children; - float x, y, rotation, scaleX, scaleY, shearX, shearY; - float ax, ay, arotation, ascaleX, ascaleY, ashearX, ashearY; - - float a, b, worldX; - float c, d, worldY; - - int/*bool*/ sorted; - int/*bool*/ active; - - spInherit inherit; -}; - -SP_API void spBone_setYDown(int/*bool*/yDown); - -SP_API int/*bool*/spBone_isYDown(void); - -/* @param parent May be 0. */ -SP_API spBone *spBone_create(spBoneData *data, struct spSkeleton *skeleton, spBone *parent); - -SP_API void spBone_dispose(spBone *self); - -SP_API void spBone_setToSetupPose(spBone *self); - -SP_API void spBone_update(spBone *self); - -SP_API void spBone_updateWorldTransform(spBone *self); - -SP_API void spBone_updateWorldTransformWith(spBone *self, float x, float y, float rotation, float scaleX, float scaleY, - float shearX, float shearY); - -SP_API float spBone_getWorldRotationX(spBone *self); - -SP_API float spBone_getWorldRotationY(spBone *self); - -SP_API float spBone_getWorldScaleX(spBone *self); - -SP_API float spBone_getWorldScaleY(spBone *self); - -SP_API void spBone_updateAppliedTransform(spBone *self); - -SP_API void spBone_worldToLocal(spBone *self, float worldX, float worldY, float *localX, float *localY); - -SP_API void spBone_worldToParent(spBone *self, float worldX, float worldY, float *parentX, float *parentY); - -SP_API void spBone_localToWorld(spBone *self, float localX, float localY, float *worldX, float *worldY); - -SP_API void spBone_localToParent(spBone *self, float localX, float localY, float *parentX, float *parentY); - -SP_API float spBone_worldToLocalRotation(spBone *self, float worldRotation); - -SP_API float spBone_localToWorldRotation(spBone *self, float localRotation); - -SP_API void spBone_rotateWorld(spBone *self, float degrees); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_BONE_H_ */ diff --git a/spine-c/spine-c/include/spine/BoneData.h b/spine-c/spine-c/include/spine/BoneData.h deleted file mode 100644 index a41f816a8..000000000 --- a/spine-c/spine-c/include/spine/BoneData.h +++ /dev/null @@ -1,70 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_BONEDATA_H_ -#define SPINE_BONEDATA_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - SP_INHERIT_NORMAL, - SP_INHERIT_ONLYTRANSLATION, - SP_INHERIT_NOROTATIONORREFLECTION, - SP_INHERIT_NOSCALE, - SP_INHERIT_NOSCALEORREFLECTION -} spInherit; - -typedef struct spBoneData spBoneData; -struct spBoneData { - int index; - char *name; - spBoneData *parent; - float length; - float x, y, rotation, scaleX, scaleY, shearX, shearY; - spInherit inherit; - int/*bool*/ skinRequired; - spColor color; - const char *icon; - int/*bool*/ visible; -}; - -SP_API spBoneData *spBoneData_create(int index, const char *name, spBoneData *parent); - -SP_API void spBoneData_dispose(spBoneData *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_BONEDATA_H_ */ diff --git a/spine-c/spine-c/include/spine/BoundingBoxAttachment.h b/spine-c/spine-c/include/spine/BoundingBoxAttachment.h deleted file mode 100644 index 53cf7494f..000000000 --- a/spine-c/spine-c/include/spine/BoundingBoxAttachment.h +++ /dev/null @@ -1,54 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_BOUNDINGBOXATTACHMENT_H_ -#define SPINE_BOUNDINGBOXATTACHMENT_H_ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spBoundingBoxAttachment { - spVertexAttachment super; - spColor color; -} spBoundingBoxAttachment; - -SP_API spBoundingBoxAttachment *spBoundingBoxAttachment_create(const char *name); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_BOUNDINGBOXATTACHMENT_H_ */ diff --git a/spine-c/spine-c/include/spine/ClippingAttachment.h b/spine-c/spine-c/include/spine/ClippingAttachment.h deleted file mode 100644 index 104420b95..000000000 --- a/spine-c/spine-c/include/spine/ClippingAttachment.h +++ /dev/null @@ -1,57 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_CLIPPINGATTACHMENT_H_ -#define SPINE_CLIPPINGATTACHMENT_H_ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spClippingAttachment { - spVertexAttachment super; - spSlotData *endSlot; - spColor color; -} spClippingAttachment; - -SP_API void _spClippingAttachment_dispose(spAttachment *self); - -SP_API spClippingAttachment *spClippingAttachment_create(const char *name); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_CLIPPINGATTACHMENT_H_ */ diff --git a/spine-c/spine-c/include/spine/Color.h b/spine-c/spine-c/include/spine/Color.h deleted file mode 100644 index 61a9bfc4f..000000000 --- a/spine-c/spine-c/include/spine/Color.h +++ /dev/null @@ -1,68 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_COLOR_H_ -#define SPINE_COLOR_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spColor { - float r, g, b, a; -} spColor; - -/* @param attachmentName May be 0 for no setup pose attachment. */ -SP_API spColor *spColor_create(void); - -SP_API void spColor_dispose(spColor *self); - -SP_API void spColor_setFromFloats(spColor *color, float r, float g, float b, float a); - -SP_API void spColor_setFromFloats3(spColor *self, float r, float g, float b); - -SP_API void spColor_setFromColor(spColor *color, spColor *otherColor); - -SP_API void spColor_setFromColor3(spColor *self, spColor *otherColor); - -SP_API void spColor_addFloats(spColor *color, float r, float g, float b, float a); - -SP_API void spColor_addFloats3(spColor *color, float r, float g, float b); - -SP_API void spColor_addColor(spColor *color, spColor *otherColor); - -SP_API void spColor_clamp(spColor *color); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_COLOR_H_ */ diff --git a/spine-c/spine-c/include/spine/Debug.h b/spine-c/spine-c/include/spine/Debug.h deleted file mode 100644 index 61c611041..000000000 --- a/spine-c/spine-c/include/spine/Debug.h +++ /dev/null @@ -1,61 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_DEBUG_H_ -#define SPINE_DEBUG_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -void spDebug_printSkeletonData(spSkeletonData *skeletonData); - -void spDebug_printAnimation(spAnimation *animation); - -void spDebug_printTimeline(spTimeline *timeline); - -void spDebug_printBoneDatas(spBoneData **boneDatas, int numBoneDatas); - -void spDebug_printBoneData(spBoneData *boneData); - -void spDebug_printSkeleton(spSkeleton *skeleton); - -void spDebug_printBones(spBone **bones, int numBones); - -void spDebug_printBone(spBone *bone); - -void spDebug_printFloats(float *values, int numFloats); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/spine-c/spine-c/include/spine/Event.h b/spine-c/spine-c/include/spine/Event.h deleted file mode 100644 index c29d1091d..000000000 --- a/spine-c/spine-c/include/spine/Event.h +++ /dev/null @@ -1,58 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_EVENT_H_ -#define SPINE_EVENT_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spEvent { - spEventData *data; - float time; - int intValue; - float floatValue; - char *stringValue; - float volume; - float balance; -} spEvent; - -SP_API spEvent *spEvent_create(float time, spEventData *data); - -SP_API void spEvent_dispose(spEvent *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_EVENT_H_ */ diff --git a/spine-c/spine-c/include/spine/EventData.h b/spine-c/spine-c/include/spine/EventData.h deleted file mode 100644 index a46d06b37..000000000 --- a/spine-c/spine-c/include/spine/EventData.h +++ /dev/null @@ -1,57 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_EVENTDATA_H_ -#define SPINE_EVENTDATA_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spEventData { - char *name; - int intValue; - float floatValue; - char *stringValue; - char *audioPath; - float volume; - float balance; -} spEventData; - -SP_API spEventData *spEventData_create(const char *name); - -SP_API void spEventData_dispose(spEventData *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_EVENTDATA_H_ */ diff --git a/spine-c/spine-c/include/spine/IkConstraint.h b/spine-c/spine-c/include/spine/IkConstraint.h deleted file mode 100644 index 5e5d0fb1a..000000000 --- a/spine-c/spine-c/include/spine/IkConstraint.h +++ /dev/null @@ -1,78 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_IKCONSTRAINT_H_ -#define SPINE_IKCONSTRAINT_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct spSkeleton; - -typedef struct spIkConstraint { - spIkConstraintData *data; - - int bonesCount; - spBone **bones; - - spBone *target; - int bendDirection; - int /*boolean*/ compress; - int /*boolean*/ stretch; - float mix; - float softness; - - int /*boolean*/ active; -} spIkConstraint; - -SP_API spIkConstraint *spIkConstraint_create(spIkConstraintData *data, const struct spSkeleton *skeleton); - -SP_API void spIkConstraint_dispose(spIkConstraint *self); - -SP_API void spIkConstraint_update(spIkConstraint *self); - -SP_API void spIkConstraint_setToSetupPose(spIkConstraint *self); - -SP_API void -spIkConstraint_apply1(spBone *bone, float targetX, float targetY, int /*boolean*/ compress, int /*boolean*/ stretch, - int /*boolean*/ uniform, float alpha); - -SP_API void spIkConstraint_apply2(spBone *parent, spBone *child, float targetX, float targetY, int bendDirection, - int /*boolean*/ stretch, int /*boolean*/ uniform, float softness, float alpha); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_IKCONSTRAINT_H_ */ diff --git a/spine-c/spine-c/include/spine/IkConstraintData.h b/spine-c/spine-c/include/spine/IkConstraintData.h deleted file mode 100644 index 2a1de1928..000000000 --- a/spine-c/spine-c/include/spine/IkConstraintData.h +++ /dev/null @@ -1,64 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_IKCONSTRAINTDATA_H_ -#define SPINE_IKCONSTRAINTDATA_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spIkConstraintData { - char *name; - int order; - int /*boolean*/ skinRequired; - int bonesCount; - spBoneData **bones; - - spBoneData *target; - int bendDirection; - int /*boolean*/ compress; - int /*boolean*/ stretch; - int /*boolean*/ uniform; - float mix; - float softness; -} spIkConstraintData; - -SP_API spIkConstraintData *spIkConstraintData_create(const char *name); - -SP_API void spIkConstraintData_dispose(spIkConstraintData *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_IKCONSTRAINTDATA_H_ */ diff --git a/spine-c/spine-c/include/spine/MeshAttachment.h b/spine-c/spine-c/include/spine/MeshAttachment.h deleted file mode 100644 index 20bc44b96..000000000 --- a/spine-c/spine-c/include/spine/MeshAttachment.h +++ /dev/null @@ -1,84 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_MESHATTACHMENT_H_ -#define SPINE_MESHATTACHMENT_H_ - -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spMeshAttachment spMeshAttachment; -struct spMeshAttachment { - spVertexAttachment super; - - void *rendererObject; - spTextureRegion *region; - spSequence *sequence; - - char *path; - - float *regionUVs; - float *uvs; - - int trianglesCount; - unsigned short *triangles; - - spColor color; - - int hullLength; - - spMeshAttachment *parentMesh; - - /* Nonessential. */ - int edgesCount; - unsigned short *edges; - float width, height; -}; - -SP_API spMeshAttachment *spMeshAttachment_create(const char *name); - -SP_API void spMeshAttachment_updateRegion(spMeshAttachment *self); - -SP_API void spMeshAttachment_setParentMesh(spMeshAttachment *self, spMeshAttachment *parentMesh); - -SP_API spMeshAttachment *spMeshAttachment_newLinkedMesh(spMeshAttachment *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_MESHATTACHMENT_H_ */ diff --git a/spine-c/spine-c/include/spine/PathAttachment.h b/spine-c/spine-c/include/spine/PathAttachment.h deleted file mode 100644 index 225b8efd1..000000000 --- a/spine-c/spine-c/include/spine/PathAttachment.h +++ /dev/null @@ -1,57 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_PATHATTACHMENT_H_ -#define SPINE_PATHATTACHMENT_H_ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spPathAttachment { - spVertexAttachment super; - int lengthsLength; - float *lengths; - int/*bool*/ closed, constantSpeed; - spColor color; -} spPathAttachment; - -SP_API spPathAttachment *spPathAttachment_create(const char *name); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_PATHATTACHMENT_H_ */ diff --git a/spine-c/spine-c/include/spine/PathConstraint.h b/spine-c/spine-c/include/spine/PathConstraint.h deleted file mode 100644 index 42b0c4202..000000000 --- a/spine-c/spine-c/include/spine/PathConstraint.h +++ /dev/null @@ -1,90 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_PATHCONSTRAINT_H_ -#define SPINE_PATHCONSTRAINT_H_ - -#include -#include -#include -#include -#include "PathAttachment.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct spSkeleton; - -typedef struct spPathConstraint { - spPathConstraintData *data; - int bonesCount; - spBone **bones; - spSlot *target; - float position, spacing; - float mixRotate, mixX, mixY; - - int spacesCount; - float *spaces; - - int positionsCount; - float *positions; - - int worldCount; - float *world; - - int curvesCount; - float *curves; - - int lengthsCount; - float *lengths; - - float segments[10]; - - int /*boolean*/ active; -} spPathConstraint; - -#define SP_PATHCONSTRAINT_ - -SP_API spPathConstraint *spPathConstraint_create(spPathConstraintData *data, const struct spSkeleton *skeleton); - -SP_API void spPathConstraint_dispose(spPathConstraint *self); - -SP_API void spPathConstraint_update(spPathConstraint *self); - -SP_API void spPathConstraint_setToSetupPose(spPathConstraint *self); - -SP_API float *spPathConstraint_computeWorldPositions(spPathConstraint *self, spPathAttachment *path, int spacesCount, - int/*bool*/ tangents); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_PATHCONSTRAINT_H_ */ diff --git a/spine-c/spine-c/include/spine/PathConstraintData.h b/spine-c/spine-c/include/spine/PathConstraintData.h deleted file mode 100644 index 85d81a2a3..000000000 --- a/spine-c/spine-c/include/spine/PathConstraintData.h +++ /dev/null @@ -1,76 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_PATHCONSTRAINTDATA_H_ -#define SPINE_PATHCONSTRAINTDATA_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - SP_POSITION_MODE_FIXED, SP_POSITION_MODE_PERCENT -} spPositionMode; - -typedef enum { - SP_SPACING_MODE_LENGTH, SP_SPACING_MODE_FIXED, SP_SPACING_MODE_PERCENT, SP_SPACING_MODE_PROPORTIONAL -} spSpacingMode; - -typedef enum { - SP_ROTATE_MODE_TANGENT, SP_ROTATE_MODE_CHAIN, SP_ROTATE_MODE_CHAIN_SCALE -} spRotateMode; - -typedef struct spPathConstraintData { - char *name; - int order; - int/*bool*/ skinRequired; - int bonesCount; - spBoneData **bones; - spSlotData *target; - spPositionMode positionMode; - spSpacingMode spacingMode; - spRotateMode rotateMode; - float offsetRotation; - float position, spacing; - float mixRotate, mixX, mixY; -} spPathConstraintData; - -SP_API spPathConstraintData *spPathConstraintData_create(const char *name); - -SP_API void spPathConstraintData_dispose(spPathConstraintData *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_PATHCONSTRAINTDATA_H_ */ diff --git a/spine-c/spine-c/include/spine/Physics.h b/spine-c/spine-c/include/spine/Physics.h deleted file mode 100644 index 7754ef87d..000000000 --- a/spine-c/spine-c/include/spine/Physics.h +++ /dev/null @@ -1,53 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_PHYSICS_H_ -#define SPINE_PHYSICS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/** Determines how physics and other non-deterministic updates are applied. */ -typedef enum { - /** Physics are not updated or applied. */ - SP_PHYSICS_NONE, - /** Physics are reset to the current pose. */ - SP_PHYSICS_RESET, - /** Physics are updated and the pose from physics is applied. */ - SP_PHYSICS_UPDATE, - /** Physics are not updated but the pose from physics is applied. */ - SP_PHYSICS_POSE -} spPhysics; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/spine-c/spine-c/include/spine/PhysicsConstraint.h b/spine-c/spine-c/include/spine/PhysicsConstraint.h deleted file mode 100644 index dfc807970..000000000 --- a/spine-c/spine-c/include/spine/PhysicsConstraint.h +++ /dev/null @@ -1,97 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_PHYSICSCONSTRAINT_H_ -#define SPINE_PHYSICSCONSTRAINT_H_ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spPhysicsConstraint { - spPhysicsConstraintData *data; - spBone* bone; - - float inertia; - float strength; - float damping; - float massInverse; - float wind; - float gravity; - float mix; - - int/*bool*/ reset; - float ux; - float uy; - float cx; - float cy; - float tx; - float ty; - float xOffset; - float xVelocity; - float yOffset; - float yVelocity; - float rotateOffset; - float rotateVelocity; - float scaleOffset; - float scaleVelocity; - - int/*bool*/ active; - - struct spSkeleton *skeleton; - float remaining; - float lastTime; - -} spPhysicsConstraint; - -SP_API spPhysicsConstraint * -spPhysicsConstraint_create(spPhysicsConstraintData *data, struct spSkeleton *skeleton); - -SP_API void spPhysicsConstraint_dispose(spPhysicsConstraint *self); - -SP_API void spPhysicsConstraint_reset(spPhysicsConstraint *self); - -SP_API void spPhysicsConstraint_setToSetupPose(spPhysicsConstraint *self); - -SP_API void spPhysicsConstraint_update(spPhysicsConstraint *self, spPhysics physics); - -SP_API void spPhysicsConstraint_rotate(spPhysicsConstraint *self, float x, float y, float degrees); - -SP_API void spPhysicsConstraint_translate(spPhysicsConstraint *self, float x, float y); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_PHYSICSCONSTRAINT_H_ */ diff --git a/spine-c/spine-c/include/spine/PhysicsConstraintData.h b/spine-c/spine-c/include/spine/PhysicsConstraintData.h deleted file mode 100644 index 94e9d75a0..000000000 --- a/spine-c/spine-c/include/spine/PhysicsConstraintData.h +++ /dev/null @@ -1,58 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_PHYSICSCONSTRAINTDATA_H_ -#define SPINE_PHYSICSCONSTRAINTDATA_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spPhysicsConstraintData { - char *name; - int order; - int/*bool*/ skinRequired; - spBoneData *bone; - float x, y, rotate, scaleX, shearX, limit; - float step, inertia, strength, damping, massInverse, wind, gravity, mix; - int/*bool*/ inertiaGlobal, strengthGlobal, dampingGlobal, massGlobal, windGlobal, gravityGlobal, mixGlobal; -} spPhysicsConstraintData; - -SP_API spPhysicsConstraintData *spPhysicsConstraintData_create(const char *name); - -SP_API void spPhysicsConstraintData_dispose(spPhysicsConstraintData *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_PHYSICSCONSTRAINTDATA_H_ */ diff --git a/spine-c/spine-c/include/spine/PointAttachment.h b/spine-c/spine-c/include/spine/PointAttachment.h deleted file mode 100644 index 1777c657a..000000000 --- a/spine-c/spine-c/include/spine/PointAttachment.h +++ /dev/null @@ -1,59 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_POINTATTACHMENT_H_ -#define SPINE_POINTATTACHMENT_H_ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spPointAttachment { - spAttachment super; - float x, y, rotation; - spColor color; -} spPointAttachment; - -SP_API spPointAttachment *spPointAttachment_create(const char *name); - -SP_API void spPointAttachment_computeWorldPosition(spPointAttachment *self, spBone *bone, float *x, float *y); - -SP_API float spPointAttachment_computeWorldRotation(spPointAttachment *self, spBone *bone); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_POINTATTACHMENT_H_ */ diff --git a/spine-c/spine-c/include/spine/RegionAttachment.h b/spine-c/spine-c/include/spine/RegionAttachment.h deleted file mode 100644 index 576d7d30e..000000000 --- a/spine-c/spine-c/include/spine/RegionAttachment.h +++ /dev/null @@ -1,68 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_REGIONATTACHMENT_H_ -#define SPINE_REGIONATTACHMENT_H_ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spRegionAttachment { - spAttachment super; - char *path; - float x, y, scaleX, scaleY, rotation, width, height; - spColor color; - - void *rendererObject; - spTextureRegion *region; - spSequence *sequence; - - float offset[8]; - float uvs[8]; -} spRegionAttachment; - -SP_API spRegionAttachment *spRegionAttachment_create(const char *name); - -SP_API void spRegionAttachment_updateRegion(spRegionAttachment *self); - -SP_API void spRegionAttachment_computeWorldVertices(spRegionAttachment *self, spSlot *slot, float *vertices, int offset, - int stride); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_REGIONATTACHMENT_H_ */ diff --git a/spine-c/spine-c/include/spine/Sequence.h b/spine-c/spine-c/include/spine/Sequence.h deleted file mode 100644 index 674796b57..000000000 --- a/spine-c/spine-c/include/spine/Sequence.h +++ /dev/null @@ -1,75 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SEQUENCE_H -#define SPINE_SEQUENCE_H - -#include -#include -#include -#include "Attachment.h" -#include "Slot.h" - -#ifdef __cplusplus -extern "C" { -#endif - -_SP_ARRAY_DECLARE_TYPE(spTextureRegionArray, spTextureRegion*) - -typedef struct spSequence { - int id; - int start; - int digits; - int setupIndex; - spTextureRegionArray *regions; -} spSequence; - -SP_API spSequence *spSequence_create(int numRegions); - -SP_API void spSequence_dispose(spSequence *self); - -SP_API spSequence *spSequence_copy(spSequence *self); - -SP_API void spSequence_apply(spSequence *self, spSlot *slot, spAttachment *attachment); - -SP_API void spSequence_getPath(spSequence *self, const char *basePath, int index, char *path); - -#define SP_SEQUENCE_MODE_HOLD 0 -#define SP_SEQUENCE_MODE_ONCE 1 -#define SP_SEQUENCE_MODE_LOOP 2 -#define SP_SEQUENCE_MODE_PINGPONG 3 -#define SP_SEQUENCE_MODE_ONCEREVERSE 4 -#define SP_SEQUENCE_MODE_LOOPREVERSE 5 -#define SP_SEQUENCE_MODE_PINGPONGREVERSE 6 - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/spine-c/spine-c/include/spine/Skeleton.h b/spine-c/spine-c/include/spine/Skeleton.h deleted file mode 100644 index 18fe0aee0..000000000 --- a/spine-c/spine-c/include/spine/Skeleton.h +++ /dev/null @@ -1,141 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SKELETON_H_ -#define SPINE_SKELETON_H_ - -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spSkeleton { - spSkeletonData *data; - - int bonesCount; - spBone **bones; - spBone *root; - - int slotsCount; - spSlot **slots; - spSlot **drawOrder; - - int ikConstraintsCount; - spIkConstraint **ikConstraints; - - int transformConstraintsCount; - spTransformConstraint **transformConstraints; - - int pathConstraintsCount; - spPathConstraint **pathConstraints; - - int physicsConstraintsCount; - spPhysicsConstraint **physicsConstraints; - - spSkin *skin; - spColor color; - float scaleX, scaleY; - float x, y; - - float time; -} spSkeleton; - -SP_API spSkeleton *spSkeleton_create(spSkeletonData *data); - -SP_API void spSkeleton_dispose(spSkeleton *self); - -/* Caches information about bones and constraints. Must be called if bones or constraints, or weighted path attachments - * are added or removed. */ -SP_API void spSkeleton_updateCache(spSkeleton *self); - -SP_API void spSkeleton_updateWorldTransform(const spSkeleton *self, spPhysics physics); - -SP_API void spSkeleton_update(spSkeleton *self, float delta); - -/* Sets the bones, constraints, and slots to their setup pose values. */ -SP_API void spSkeleton_setToSetupPose(const spSkeleton *self); -/* Sets the bones and constraints to their setup pose values. */ -SP_API void spSkeleton_setBonesToSetupPose(const spSkeleton *self); - -SP_API void spSkeleton_setSlotsToSetupPose(const spSkeleton *self); - -/* Returns 0 if the bone was not found. */ -SP_API spBone *spSkeleton_findBone(const spSkeleton *self, const char *boneName); - -/* Returns 0 if the slot was not found. */ -SP_API spSlot *spSkeleton_findSlot(const spSkeleton *self, const char *slotName); - -/* Sets the skin used to look up attachments before looking in the SkeletonData defaultSkin. Attachments from the new skin are - * attached if the corresponding attachment from the old skin was attached. If there was no old skin, each slot's setup mode - * attachment is attached from the new skin. - * @param skin May be 0.*/ -SP_API void spSkeleton_setSkin(spSkeleton *self, spSkin *skin); -/* Returns 0 if the skin was not found. See spSkeleton_setSkin. - * @param skinName May be 0. */ -SP_API int spSkeleton_setSkinByName(spSkeleton *self, const char *skinName); - -/* Returns 0 if the slot or attachment was not found. */ -SP_API spAttachment * -spSkeleton_getAttachmentForSlotName(const spSkeleton *self, const char *slotName, const char *attachmentName); -/* Returns 0 if the slot or attachment was not found. */ -SP_API spAttachment * -spSkeleton_getAttachmentForSlotIndex(const spSkeleton *self, int slotIndex, const char *attachmentName); -/* Returns 0 if the slot or attachment was not found. - * @param attachmentName May be 0. */ -SP_API int spSkeleton_setAttachment(spSkeleton *self, const char *slotName, const char *attachmentName); - -/* Returns 0 if the IK constraint was not found. */ -SP_API spIkConstraint *spSkeleton_findIkConstraint(const spSkeleton *self, const char *constraintName); - -/* Returns 0 if the transform constraint was not found. */ -SP_API spTransformConstraint *spSkeleton_findTransformConstraint(const spSkeleton *self, const char *constraintName); - -/* Returns 0 if the path constraint was not found. */ -SP_API spPathConstraint *spSkeleton_findPathConstraint(const spSkeleton *self, const char *constraintName); - -/* Returns 0 if the physics constraint was not found. */ -SP_API spPhysicsConstraint *spSkeleton_findPhysicsConstraint(const spSkeleton *self, const char *constraintName); - -SP_API void spSkeleton_physicsTranslate(spSkeleton *self, float x, float y); - -SP_API void spSkeleton_physicsRotate(spSkeleton *self, float x, float y, float degrees); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_SKELETON_H_*/ diff --git a/spine-c/spine-c/include/spine/SkeletonBinary.h b/spine-c/spine-c/include/spine/SkeletonBinary.h deleted file mode 100644 index 9bacdbd83..000000000 --- a/spine-c/spine-c/include/spine/SkeletonBinary.h +++ /dev/null @@ -1,66 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SKELETONBINARY_H_ -#define SPINE_SKELETONBINARY_H_ - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct spAtlasAttachmentLoader; - -typedef struct spSkeletonBinary { - float scale; - spAttachmentLoader *attachmentLoader; - char *error; -} spSkeletonBinary; - -SP_API spSkeletonBinary *spSkeletonBinary_createWithLoader(spAttachmentLoader *attachmentLoader); - -SP_API spSkeletonBinary *spSkeletonBinary_create(spAtlas *atlas); - -SP_API void spSkeletonBinary_dispose(spSkeletonBinary *self); - -SP_API spSkeletonData * -spSkeletonBinary_readSkeletonData(spSkeletonBinary *self, const unsigned char *binary, const int length); - -SP_API spSkeletonData *spSkeletonBinary_readSkeletonDataFile(spSkeletonBinary *self, const char *path); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_SKELETONBINARY_H_ */ diff --git a/spine-c/spine-c/include/spine/SkeletonBounds.h b/spine-c/spine-c/include/spine/SkeletonBounds.h deleted file mode 100644 index d01c69654..000000000 --- a/spine-c/spine-c/include/spine/SkeletonBounds.h +++ /dev/null @@ -1,97 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SKELETONBOUNDS_H_ -#define SPINE_SKELETONBOUNDS_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spPolygon { - float *vertices; - int count; - int capacity; -} spPolygon; - -SP_API spPolygon *spPolygon_create(int capacity); - -SP_API void spPolygon_dispose(spPolygon *self); - -SP_API int/*bool*/spPolygon_containsPoint(spPolygon *polygon, float x, float y); - -SP_API int/*bool*/spPolygon_intersectsSegment(spPolygon *polygon, float x1, float y1, float x2, float y2); - -/**/ - -typedef struct spSkeletonBounds { - int count; - spBoundingBoxAttachment **boundingBoxes; - spPolygon **polygons; - - float minX, minY, maxX, maxY; -} spSkeletonBounds; - -SP_API spSkeletonBounds *spSkeletonBounds_create(void); - -SP_API void spSkeletonBounds_dispose(spSkeletonBounds *self); - -SP_API void spSkeletonBounds_update(spSkeletonBounds *self, spSkeleton *skeleton, int/*bool*/updateAabb); - -/** Returns true if the axis aligned bounding box contains the point. */ -SP_API int/*bool*/spSkeletonBounds_aabbContainsPoint(spSkeletonBounds *self, float x, float y); - -/** Returns true if the axis aligned bounding box intersects the line segment. */ -SP_API int/*bool*/ -spSkeletonBounds_aabbIntersectsSegment(spSkeletonBounds *self, float x1, float y1, float x2, float y2); - -/** Returns true if the axis aligned bounding box intersects the axis aligned bounding box of the specified bounds. */ -SP_API int/*bool*/spSkeletonBounds_aabbIntersectsSkeleton(spSkeletonBounds *self, spSkeletonBounds *bounds); - -/** Returns the first bounding box attachment that contains the point, or null. When doing many checks, it is usually more - * efficient to only call this method if spSkeletonBounds_aabbContainsPoint returns true. */ -SP_API spBoundingBoxAttachment *spSkeletonBounds_containsPoint(spSkeletonBounds *self, float x, float y); - -/** Returns the first bounding box attachment that contains the line segment, or null. When doing many checks, it is usually - * more efficient to only call this method if spSkeletonBounds_aabbIntersectsSegment returns true. */ -SP_API spBoundingBoxAttachment * -spSkeletonBounds_intersectsSegment(spSkeletonBounds *self, float x1, float y1, float x2, float y2); - -/** Returns the polygon for the specified bounding box, or null. */ -SP_API spPolygon *spSkeletonBounds_getPolygon(spSkeletonBounds *self, spBoundingBoxAttachment *boundingBox); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_SKELETONBOUNDS_H_ */ diff --git a/spine-c/spine-c/include/spine/SkeletonClipping.h b/spine-c/spine-c/include/spine/SkeletonClipping.h deleted file mode 100644 index 98f78f46d..000000000 --- a/spine-c/spine-c/include/spine/SkeletonClipping.h +++ /dev/null @@ -1,74 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SKELETONCLIPPING_H -#define SPINE_SKELETONCLIPPING_H - -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spSkeletonClipping { - spTriangulator *triangulator; - spFloatArray *clippingPolygon; - spFloatArray *clipOutput; - spFloatArray *clippedVertices; - spFloatArray *clippedUVs; - spUnsignedShortArray *clippedTriangles; - spFloatArray *scratch; - spClippingAttachment *clipAttachment; - spArrayFloatArray *clippingPolygons; -} spSkeletonClipping; - -SP_API spSkeletonClipping *spSkeletonClipping_create(void); - -SP_API int spSkeletonClipping_clipStart(spSkeletonClipping *self, spSlot *slot, spClippingAttachment *clip); - -SP_API void spSkeletonClipping_clipEnd(spSkeletonClipping *self, spSlot *slot); - -SP_API void spSkeletonClipping_clipEnd2(spSkeletonClipping *self); - -SP_API int /*boolean*/ spSkeletonClipping_isClipping(spSkeletonClipping *self); - -SP_API void spSkeletonClipping_clipTriangles(spSkeletonClipping *self, float *vertices, int verticesLength, - unsigned short *triangles, int trianglesLength, float *uvs, int stride); - -SP_API void spSkeletonClipping_dispose(spSkeletonClipping *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_SKELETONCLIPPING_H */ diff --git a/spine-c/spine-c/include/spine/SkeletonData.h b/spine-c/spine-c/include/spine/SkeletonData.h deleted file mode 100644 index b76f40507..000000000 --- a/spine-c/spine-c/include/spine/SkeletonData.h +++ /dev/null @@ -1,116 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SKELETONDATA_H_ -#define SPINE_SKELETONDATA_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spSkeletonData { - char *version; - char *hash; - float x, y, width, height; - float referenceScale; - float fps; - const char *imagesPath; - const char *audioPath; - - int stringsCount; - char **strings; - - int bonesCount; - spBoneData **bones; - - int slotsCount; - spSlotData **slots; - - int skinsCount; - spSkin **skins; - spSkin *defaultSkin; - - int eventsCount; - spEventData **events; - - int animationsCount; - spAnimation **animations; - - int ikConstraintsCount; - spIkConstraintData **ikConstraints; - - int transformConstraintsCount; - spTransformConstraintData **transformConstraints; - - int pathConstraintsCount; - spPathConstraintData **pathConstraints; - - int physicsConstraintsCount; - spPhysicsConstraintData **physicsConstraints; -} spSkeletonData; - -SP_API spSkeletonData *spSkeletonData_create(void); - -SP_API void spSkeletonData_dispose(spSkeletonData *self); - -SP_API spBoneData *spSkeletonData_findBone(const spSkeletonData *self, const char *boneName); - -SP_API spSlotData *spSkeletonData_findSlot(const spSkeletonData *self, const char *slotName); - -SP_API spSkin *spSkeletonData_findSkin(const spSkeletonData *self, const char *skinName); - -SP_API spEventData *spSkeletonData_findEvent(const spSkeletonData *self, const char *eventName); - -SP_API spAnimation *spSkeletonData_findAnimation(const spSkeletonData *self, const char *animationName); - -SP_API spIkConstraintData *spSkeletonData_findIkConstraint(const spSkeletonData *self, const char *constraintName); - -SP_API spTransformConstraintData * -spSkeletonData_findTransformConstraint(const spSkeletonData *self, const char *constraintName); - -SP_API spPathConstraintData *spSkeletonData_findPathConstraint(const spSkeletonData *self, const char *constraintName); - -SP_API spPhysicsConstraintData *spSkeletonData_findPhysicsConstraint(const spSkeletonData *self, const char *constraintName); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_SKELETONDATA_H_ */ diff --git a/spine-c/spine-c/include/spine/SkeletonJson.h b/spine-c/spine-c/include/spine/SkeletonJson.h deleted file mode 100644 index 09c7252e4..000000000 --- a/spine-c/spine-c/include/spine/SkeletonJson.h +++ /dev/null @@ -1,66 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SKELETONJSON_H_ -#define SPINE_SKELETONJSON_H_ - -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct spAtlasAttachmentLoader; - -typedef struct spSkeletonJson { - float scale; - spAttachmentLoader *attachmentLoader; - char *error; -} spSkeletonJson; - -SP_API spSkeletonJson *spSkeletonJson_createWithLoader(spAttachmentLoader *attachmentLoader); - -SP_API spSkeletonJson *spSkeletonJson_create(spAtlas *atlas); - -SP_API void spSkeletonJson_dispose(spSkeletonJson *self); - -SP_API spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char *json); - -SP_API spSkeletonData *spSkeletonJson_readSkeletonDataFile(spSkeletonJson *self, const char *path); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_SKELETONJSON_H_ */ diff --git a/spine-c/spine-c/include/spine/Skin.h b/spine-c/spine-c/include/spine/Skin.h deleted file mode 100644 index 3ada728c6..000000000 --- a/spine-c/spine-c/include/spine/Skin.h +++ /dev/null @@ -1,124 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SKIN_H_ -#define SPINE_SKIN_H_ - -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Size of hashtable used in skin structure for fast attachment lookup. */ -#define SKIN_ENTRIES_HASH_TABLE_SIZE 100 - -struct spSkeleton; - -_SP_ARRAY_DECLARE_TYPE(spBoneDataArray, spBoneData*) - -_SP_ARRAY_DECLARE_TYPE(spIkConstraintDataArray, spIkConstraintData*) - -_SP_ARRAY_DECLARE_TYPE(spTransformConstraintDataArray, spTransformConstraintData*) - -_SP_ARRAY_DECLARE_TYPE(spPathConstraintDataArray, spPathConstraintData*) - -_SP_ARRAY_DECLARE_TYPE(spPhysicsConstraintDataArray, spPhysicsConstraintData*) - -typedef struct spSkin { - char *name; - - spBoneDataArray *bones; - spIkConstraintDataArray *ikConstraints; - spTransformConstraintDataArray *transformConstraints; - spPathConstraintDataArray *pathConstraints; - spPhysicsConstraintDataArray *physicsConstraints; - spColor color; -} spSkin; - -/* Private structs, needed by Skeleton */ -typedef struct _Entry _Entry; -typedef struct _Entry spSkinEntry; -struct _Entry { - int slotIndex; - char *name; - spAttachment *attachment; - _Entry *next; -}; - -typedef struct _SkinHashTableEntry _SkinHashTableEntry; -struct _SkinHashTableEntry { - _Entry *entry; - _SkinHashTableEntry *next; -}; - -typedef struct { - spSkin super; - _Entry *entries; /* entries list stored for getting attachment name by attachment index */ - _SkinHashTableEntry *entriesHashTable[SKIN_ENTRIES_HASH_TABLE_SIZE]; /* hashtable for fast attachment lookup */ -} _spSkin; - -SP_API spSkin *spSkin_create(const char *name); - -SP_API void spSkin_dispose(spSkin *self); - -/* The Skin owns the attachment. */ -SP_API void spSkin_setAttachment(spSkin *self, int slotIndex, const char *name, spAttachment *attachment); -/* Returns 0 if the attachment was not found. */ -SP_API spAttachment *spSkin_getAttachment(const spSkin *self, int slotIndex, const char *name); - -/* Returns 0 if the slot or attachment was not found. */ -SP_API const char *spSkin_getAttachmentName(const spSkin *self, int slotIndex, int attachmentIndex); - -/** Attach each attachment in this skin if the corresponding attachment in oldSkin is currently attached. */ -SP_API void spSkin_attachAll(const spSkin *self, struct spSkeleton *skeleton, const spSkin *oldspSkin); - -/** Adds all attachments, bones, and constraints from the specified skin to this skin. */ -SP_API void spSkin_addSkin(spSkin *self, const spSkin *other); - -/** Adds all attachments, bones, and constraints from the specified skin to this skin. Attachments are deep copied. */ -SP_API void spSkin_copySkin(spSkin *self, const spSkin *other); - -/** Returns all attachments in this skin. */ -SP_API spSkinEntry *spSkin_getAttachments(const spSkin *self); - -/** Clears all attachments, bones, and constraints. */ -SP_API void spSkin_clear(spSkin *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_SKIN_H_ */ diff --git a/spine-c/spine-c/include/spine/Slot.h b/spine-c/spine-c/include/spine/Slot.h deleted file mode 100644 index 4f8c48133..000000000 --- a/spine-c/spine-c/include/spine/Slot.h +++ /dev/null @@ -1,70 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SLOT_H_ -#define SPINE_SLOT_H_ - -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spSlot { - spSlotData *data; - spBone *bone; - spColor color; - spColor *darkColor; - spAttachment *attachment; - int attachmentState; - - int deformCapacity; - int deformCount; - float *deform; - - int sequenceIndex; -} spSlot; - -SP_API spSlot *spSlot_create(spSlotData *data, spBone *bone); - -SP_API void spSlot_dispose(spSlot *self); - -/* @param attachment May be 0 to clear the attachment for the slot. */ -SP_API void spSlot_setAttachment(spSlot *self, spAttachment *attachment); - -SP_API void spSlot_setToSetupPose(spSlot *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_SLOT_H_ */ diff --git a/spine-c/spine-c/include/spine/SlotData.h b/spine-c/spine-c/include/spine/SlotData.h deleted file mode 100644 index 36c3a5498..000000000 --- a/spine-c/spine-c/include/spine/SlotData.h +++ /dev/null @@ -1,67 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SLOTDATA_H_ -#define SPINE_SLOTDATA_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum { - SP_BLEND_MODE_NORMAL, SP_BLEND_MODE_ADDITIVE, SP_BLEND_MODE_MULTIPLY, SP_BLEND_MODE_SCREEN -} spBlendMode; - -typedef struct spSlotData { - int index; - char *name; - spBoneData *boneData; - char *attachmentName; - spColor color; - spColor *darkColor; - spBlendMode blendMode; - int/*bool*/ visible; -} spSlotData; - -SP_API spSlotData *spSlotData_create(const int index, const char *name, spBoneData *boneData); - -SP_API void spSlotData_dispose(spSlotData *self); - -/* @param attachmentName May be 0 for no setup pose attachment. */ -SP_API void spSlotData_setAttachmentName(spSlotData *self, const char *attachmentName); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_SLOTDATA_H_ */ diff --git a/spine-c/spine-c/include/spine/TextureRegion.h b/spine-c/spine-c/include/spine/TextureRegion.h deleted file mode 100644 index 60f4503ee..000000000 --- a/spine-c/spine-c/include/spine/TextureRegion.h +++ /dev/null @@ -1,50 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_TEXTURE_REGION_H -#define SPINE_TEXTURE_REGION_H - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spTextureRegion { - void *rendererObject; - float u, v, u2, v2; - int degrees; - float offsetX, offsetY; - int width, height; - int originalWidth, originalHeight; -} spTextureRegion; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/spine-c/spine-c/include/spine/TransformConstraint.h b/spine-c/spine-c/include/spine/TransformConstraint.h deleted file mode 100644 index 6418f5dd7..000000000 --- a/spine-c/spine-c/include/spine/TransformConstraint.h +++ /dev/null @@ -1,65 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_TRANSFORMCONSTRAINT_H_ -#define SPINE_TRANSFORMCONSTRAINT_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -struct spSkeleton; - -typedef struct spTransformConstraint { - spTransformConstraintData *data; - int bonesCount; - spBone **bones; - spBone *target; - float mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY; - int /*boolean*/ active; -} spTransformConstraint; - -SP_API spTransformConstraint * -spTransformConstraint_create(spTransformConstraintData *data, const struct spSkeleton *skeleton); - -SP_API void spTransformConstraint_dispose(spTransformConstraint *self); - -SP_API void spTransformConstraint_update(spTransformConstraint *self); - -SP_API void spTransformConstraint_setToSetupPose(spTransformConstraint *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_TRANSFORMCONSTRAINT_H_ */ diff --git a/spine-c/spine-c/include/spine/TransformConstraintData.h b/spine-c/spine-c/include/spine/TransformConstraintData.h deleted file mode 100644 index 6222acc1b..000000000 --- a/spine-c/spine-c/include/spine/TransformConstraintData.h +++ /dev/null @@ -1,61 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_TRANSFORMCONSTRAINTDATA_H_ -#define SPINE_TRANSFORMCONSTRAINTDATA_H_ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spTransformConstraintData { - char *name; - int order; - int/*bool*/ skinRequired; - int bonesCount; - spBoneData **bones; - spBoneData *target; - float mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY; - float offsetRotation, offsetX, offsetY, offsetScaleX, offsetScaleY, offsetShearY; - int /*boolean*/ relative; - int /*boolean*/ local; -} spTransformConstraintData; - -SP_API spTransformConstraintData *spTransformConstraintData_create(const char *name); - -SP_API void spTransformConstraintData_dispose(spTransformConstraintData *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_TRANSFORMCONSTRAINTDATA_H_ */ diff --git a/spine-c/spine-c/include/spine/Triangulator.h b/spine-c/spine-c/include/spine/Triangulator.h deleted file mode 100644 index 6afd60151..000000000 --- a/spine-c/spine-c/include/spine/Triangulator.h +++ /dev/null @@ -1,66 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_TRIANGULATOR_H -#define SPINE_TRIANGULATOR_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spTriangulator { - spArrayFloatArray *convexPolygons; - spArrayShortArray *convexPolygonsIndices; - - spShortArray *indicesArray; - spIntArray *isConcaveArray; - spShortArray *triangles; - - spArrayFloatArray *polygonPool; - spArrayShortArray *polygonIndicesPool; -} spTriangulator; - -SP_API spTriangulator *spTriangulator_create(void); - -SP_API spShortArray *spTriangulator_triangulate(spTriangulator *self, spFloatArray *verticesArray); - -SP_API spArrayFloatArray * -spTriangulator_decompose(spTriangulator *self, spFloatArray *verticesArray, spShortArray *triangles); - -SP_API void spTriangulator_dispose(spTriangulator *self); - - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_TRIANGULATOR_H_ */ diff --git a/spine-c/spine-c/include/spine/Version.h b/spine-c/spine-c/include/spine/Version.h deleted file mode 100644 index 972817000..000000000 --- a/spine-c/spine-c/include/spine/Version.h +++ /dev/null @@ -1,37 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_VERTEXEFFECT_H_ -#define SPINE_VERTEXEFFECT_H_ - -#define SPINE_MAJOR_VERSION 4 -#define SPINE_MINOR_VERSION 2 -#define SPINE_VERSION_STRING "4.2" - -#endif diff --git a/spine-c/spine-c/include/spine/VertexAttachment.h b/spine-c/spine-c/include/spine/VertexAttachment.h deleted file mode 100644 index 6e0ae78c7..000000000 --- a/spine-c/spine-c/include/spine/VertexAttachment.h +++ /dev/null @@ -1,67 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_VERTEXATTACHMENT_H_ -#define SPINE_VERTEXATTACHMENT_H_ - -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct spVertexAttachment spVertexAttachment; -struct spVertexAttachment { - spAttachment super; - - int bonesCount; - int *bones; - - int verticesCount; - float *vertices; - - int worldVerticesLength; - - spAttachment *timelineAttachment; - - int id; -}; - -SP_API void spVertexAttachment_computeWorldVertices(spVertexAttachment *self, spSlot *slot, int start, int count, - float *worldVertices, int offset, int stride); - -void spVertexAttachment_copyTo(spVertexAttachment *self, spVertexAttachment *other); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_VERTEXATTACHMENT_H_ */ diff --git a/spine-c/spine-c/include/spine/dll.h b/spine-c/spine-c/include/spine/dll.h deleted file mode 100644 index 2681a5381..000000000 --- a/spine-c/spine-c/include/spine/dll.h +++ /dev/null @@ -1,51 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SHAREDLIB_H -#define SPINE_SHAREDLIB_H - -#ifdef _WIN32 -#define DLLIMPORT __declspec(dllimport) -#define DLLEXPORT __declspec(dllexport) -#else -#ifndef DLLIMPORT -#define DLLIMPORT -#endif -#ifndef DLLEXPORT -#define DLLEXPORT -#endif -#endif - -#ifdef SPINEPLUGIN_API -#define SP_API SPINEPLUGIN_API -#else -#define SP_API -#endif - -#endif /* SPINE_SHAREDLIB_H */ diff --git a/spine-c/spine-c/include/spine/extension.h b/spine-c/spine-c/include/spine/extension.h deleted file mode 100644 index 103709e83..000000000 --- a/spine-c/spine-c/include/spine/extension.h +++ /dev/null @@ -1,277 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -/* - Implementation notes: - - - An OOP style is used where each "class" is made up of a struct and a number of functions prefixed with the struct name. - - - struct fields that are const are readonly. Either they are set in a create function and can never be changed, or they can only - be changed by calling a function. - - - Inheritance is done using a struct field named "super" as the first field, allowing the struct to be cast to its "super class". - This works because a pointer to a struct is guaranteed to be a pointer to the first struct field. - - - Classes intended for inheritance provide init/deinit functions which subclasses must call in their create/dispose functions. - - - Polymorphism is done by a base class providing function pointers in its init function. The public API delegates to these - function pointers. - - - Subclasses do not provide a dispose function, instead the base class' dispose function should be used, which will delegate to - a dispose function pointer. - - - Classes not designed for inheritance cannot be extended because they may use an internal subclass to hide private data and don't - expose function pointers. - - - The public API hides implementation details, such as init/deinit functions. An internal API is exposed by extension.h to allow - classes to be extended. Internal functions begin with underscore (_). - - - OOP in C tends to lose type safety. Macros for casting are provided in extension.h to give context for why a cast is being done. - - */ - -#ifndef SPINE_EXTENSION_H_ -#define SPINE_EXTENSION_H_ - -#include - -/* Required for sprintf and consorts on MSVC */ -#ifdef _MSC_VER -#pragma warning(disable:4996) -#endif - -/* All allocation uses these. */ -#define MALLOC(TYPE, COUNT) ((TYPE*)_spMalloc(sizeof(TYPE) * (COUNT), __FILE__, __LINE__)) -#define CALLOC(TYPE, COUNT) ((TYPE*)_spCalloc(COUNT, sizeof(TYPE), __FILE__, __LINE__)) -#define REALLOC(PTR, TYPE, COUNT) ((TYPE*)_spRealloc(PTR, sizeof(TYPE) * (COUNT))) -#define NEW(TYPE) CALLOC(TYPE,1) - -/* Gets the direct super class. Type safe. */ -#define SUPER(VALUE) (&VALUE->super) - -/* Cast to a super class. Not type safe, use with care. Prefer SUPER() where possible. */ -#define SUPER_CAST(TYPE, VALUE) ((TYPE*)VALUE) - -/* Cast to a sub class. Not type safe, use with care. */ -#define SUB_CAST(TYPE, VALUE) ((TYPE*)VALUE) - -/* Gets the vtable for the specified type. Not type safe, use with care. */ -#define VTABLE(TYPE, VALUE) ((_##TYPE##Vtable*)((TYPE*)VALUE)->vtable) - -/* Frees memory. Can be used on const types. */ -#define FREE(VALUE) _spFree((void*)VALUE) - -/* Allocates a new char[], assigns it to TO, and copies FROM to it. Can be used on const types. */ -#define MALLOC_STR(TO, FROM) strcpy(TO = (char*)MALLOC(char, strlen(FROM) + 1), FROM) - -#define PI 3.1415926535897932385f -#define PI2 (PI * 2) -#define INV_PI2 (1 / PI2) -#define DEG_RAD (PI / 180) -#define RAD_DEG (180 / PI) - -#define ABS(A) ((A) < 0? -(A): (A)) -#define SIGNUM(A) ((A) < 0? -1.0f: (A) > 0 ? 1.0f : 0.0f) -#define CEIL(a) ((float)ceil(a)) - -#ifdef __STDC_VERSION__ -#define FMOD(A,B) fmodf(A, B) -#define ATAN2(A,B) atan2f(A, B) -#define SIN(A) sinf(A) -#define COS(A) cosf(A) -#define SQRT(A) sqrtf(A) -#define ACOS(A) acosf(A) -#define POW(A,B) pow(A, B) -#define ISNAN(A) (int)isnan(A) -#else -#define FMOD(A, B) (float)fmod(A, B) -#define ATAN2(A, B) (float)atan2(A, B) -#define COS(A) (float)cos(A) -#define SIN(A) (float)sin(A) -#define SQRT(A) (float)sqrt(A) -#define ACOS(A) (float)acos(A) -#define POW(A, B) (float)pow(A, B) -#define ISNAN(A) (int)isnan(A) -#endif - -#define SIN_DEG(A) SIN((A) * DEG_RAD) -#define COS_DEG(A) COS((A) * DEG_RAD) -#define CLAMP(x, min, max) ((x) < (min) ? (min) : ((x) > (max) ? (max) : (x))) -#ifndef MIN -#define MIN(x, y) ((x) < (y) ? (x) : (y)) -#endif -#ifndef MAX -#define MAX(x, y) ((x) > (y) ? (x) : (y)) -#endif - -#define ATAN2DEG(A, B) ((float)ATAN2(A, B) * RAD_DEG) - -#define UNUSED(x) (void)(x) - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Functions that must be implemented: - */ - -void _spAtlasPage_createTexture(spAtlasPage *self, const char *path); - -void _spAtlasPage_disposeTexture(spAtlasPage *self); - -char *_spUtil_readFile(const char *path, int *length); - -/* - * Internal API available for extension: - */ - -void *_spMalloc(size_t size, const char *file, int line); - -void *_spCalloc(size_t num, size_t size, const char *file, int line); - -void *_spRealloc(void *ptr, size_t size); - -void _spFree(void *ptr); - -float _spRandom(void); - -SP_API void _spSetMalloc(void *(*_malloc)(size_t size)); - -SP_API void _spSetDebugMalloc(void *(*_malloc)(size_t size, const char *file, int line)); - -SP_API void _spSetRealloc(void *(*_realloc)(void *ptr, size_t size)); - -SP_API void _spSetFree(void (*_free)(void *ptr)); - -SP_API void _spSetRandom(float (*_random)(void)); - -char *_spReadFile(const char *path, int *length); - - -/* - * Math utilities - */ -float _spMath_random(float min, float max); - -float _spMath_randomTriangular(float min, float max); - -float _spMath_randomTriangularWith(float min, float max, float mode); - -float _spMath_interpolate(float (*apply)(float a), float start, float end, float a); - -float _spMath_pow2_apply(float a); - -float _spMath_pow2out_apply(float a); - -/**/ - -typedef union _spEventQueueItem { - int type; - spTrackEntry *entry; - spEvent *event; -} _spEventQueueItem; - -typedef struct _spAnimationState _spAnimationState; - -typedef struct _spEventQueue { - _spAnimationState *state; - _spEventQueueItem *objects; - int objectsCount; - int objectsCapacity; - int /*boolean*/ drainDisabled; -} _spEventQueue; - -struct _spAnimationState { - spAnimationState super; - - int eventsCount; - spEvent **events; - - _spEventQueue *queue; - - spPropertyId *propertyIDs; - int propertyIDsCount; - int propertyIDsCapacity; - - int /*boolean*/ animationsChanged; -}; - - -/**/ - -/* configureAttachment and disposeAttachment may be 0. */ -void _spAttachmentLoader_init(spAttachmentLoader *self, - void (*dispose)(spAttachmentLoader *self), - spAttachment *(*createAttachment)(spAttachmentLoader *self, spSkin *skin, - spAttachmentType type, const char *name, - const char *path, spSequence *sequence), - void (*configureAttachment)(spAttachmentLoader *self, spAttachment *), - void (*disposeAttachment)(spAttachmentLoader *self, spAttachment *) -); - -void _spAttachmentLoader_deinit(spAttachmentLoader *self); - -/* Can only be called from createAttachment. */ -void _spAttachmentLoader_setError(spAttachmentLoader *self, const char *error1, const char *error2); - -void _spAttachmentLoader_setUnknownTypeError(spAttachmentLoader *self, spAttachmentType type); - -/**/ - -void _spAttachment_init(spAttachment *self, const char *name, spAttachmentType type, - void (*dispose)(spAttachment *self), spAttachment *(*copy)(spAttachment *self)); - -void _spAttachment_deinit(spAttachment *self); - -void _spVertexAttachment_init(spVertexAttachment *self); - -void _spVertexAttachment_deinit(spVertexAttachment *self); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_EXTENSION_H_ */ diff --git a/spine-c/spine-c/include/spine/spine.h b/spine-c/spine-c/include/spine/spine.h deleted file mode 100644 index 9ac0dd5e0..000000000 --- a/spine-c/spine-c/include/spine/spine.h +++ /dev/null @@ -1,63 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SPINE_H_ -#define SPINE_SPINE_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#endif /* SPINE_SPINE_H_ */ diff --git a/spine-c/spine-c/src/spine/Animation.c b/spine-c/spine-c/src/spine/Animation.c deleted file mode 100644 index dad07505e..000000000 --- a/spine-c/spine-c/src/spine/Animation.c +++ /dev/null @@ -1,2873 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include -#include - -_SP_ARRAY_IMPLEMENT_TYPE(spPropertyIdArray, spPropertyId) - -_SP_ARRAY_IMPLEMENT_TYPE(spTimelineArray, spTimeline *) - -spAnimation *spAnimation_create(const char *name, spTimelineArray *timelines, float duration) { - int i, n, totalCount = 0; - spAnimation *self = NEW(spAnimation); - MALLOC_STR(self->name, name); - self->timelines = timelines != NULL ? timelines : spTimelineArray_create(1); - timelines = self->timelines; - - for (i = 0, n = timelines->size; i < n; i++) - totalCount += timelines->items[i]->propertyIdsCount; - self->timelineIds = spPropertyIdArray_create(totalCount); - - for (i = 0, n = timelines->size; i < n; i++) { - spPropertyIdArray_addAllValues(self->timelineIds, timelines->items[i]->propertyIds, 0, - timelines->items[i]->propertyIdsCount); - } - self->duration = duration; - return self; -} - -void spAnimation_dispose(spAnimation *self) { - int i; - for (i = 0; i < self->timelines->size; ++i) - spTimeline_dispose(self->timelines->items[i]); - spTimelineArray_dispose(self->timelines); - spPropertyIdArray_dispose(self->timelineIds); - FREE(self->name); - FREE(self); -} - -int /*bool*/ spAnimation_hasTimeline(spAnimation *self, spPropertyId *ids, int idsCount) { - int i, n, ii; - for (i = 0, n = self->timelineIds->size; i < n; i++) { - for (ii = 0; ii < idsCount; ii++) { - if (self->timelineIds->items[i] == ids[ii]) return 1; - } - } - return 0; -} - -void spAnimation_apply(const spAnimation *self, spSkeleton *skeleton, float lastTime, float time, int loop, spEvent **events, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - int i, n = self->timelines->size; - - if (loop && self->duration) { - time = FMOD(time, self->duration); - if (lastTime > 0) lastTime = FMOD(lastTime, self->duration); - } - - for (i = 0; i < n; ++i) - spTimeline_apply(self->timelines->items[i], skeleton, lastTime, time, events, eventsCount, alpha, blend, - direction); -} - -static int search(spFloatArray - *values, - float time) { - int i, n; - float *items = values->items; - for ( - i = 1, n = values->size; - i < n; - i++) - if (items[i] > time) return i - 1; - return values->size - 1; -} - -static int search2(spFloatArray - *values, - float time, - int step) { - int i, n; - float *items = values->items; - for ( - i = step, n = values->size; - i < n; - i += step) - if (items[i] > time) return i - - step; - return values->size - - step; -} - -/**/ - -void _spTimeline_init(spTimeline *self, - int frameCount, - int frameEntries, - spPropertyId *propertyIds, - int propertyIdsCount, - spTimelineType type, - void (*dispose)(spTimeline *self), - void (*apply)(spTimeline *self, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction), - void (*setBezier)(spTimeline *self, int bezier, int frame, float value, float time1, float value1, - float cx1, float cy1, - float cx2, float cy2, float time2, float value2)) { - int i; - self->frames = spFloatArray_create(frameCount * frameEntries); - self->frames->size = frameCount * frameEntries; - self->frameCount = frameCount; - self->frameEntries = frameEntries; - - for (i = 0; i < propertyIdsCount; i++) - self->propertyIds[i] = propertyIds[i]; - self->propertyIdsCount = propertyIdsCount; - - self->type = type; - - self->vtable.dispose = dispose; - self->vtable.apply = apply; - self->vtable.setBezier = setBezier; -} - -void spTimeline_dispose(spTimeline *self) { - self->vtable.dispose(self); - spFloatArray_dispose(self->frames); - FREE(self); -} - -void spTimeline_apply(spTimeline *self, spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - self->vtable.apply(self, skeleton, lastTime, time, firedEvents, eventsCount, alpha, blend, direction); -} - -void spTimeline_setBezier(spTimeline *self, int bezier, int frame, float value, float time1, float value1, float cx1, - float cy1, float cx2, float cy2, float time2, float value2) { - if (self->vtable.setBezier) - self->vtable.setBezier(self, bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); -} - -float spTimeline_getDuration(const spTimeline *self) { - return self->frames->items[self->frames->size - self->frameEntries]; -} - -/**/ - -#define CURVE_LINEAR 0 -#define CURVE_STEPPED 1 -#define CURVE_BEZIER 2 -#define BEZIER_SIZE 18 - -void _spCurveTimeline_init(spCurveTimeline *self, - int frameCount, - int frameEntries, - int bezierCount, - spPropertyId *propertyIds, - int propertyIdsCount, - spTimelineType type, - void (*dispose)(spTimeline *self), - void (*apply)(spTimeline *self, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction), - void (*setBezier)(spTimeline *self, int bezier, int frame, float value, float time1, - float value1, float cx1, float cy1, - float cx2, float cy2, float time2, float value2)) { - _spTimeline_init(SUPER(self), frameCount, frameEntries, propertyIds, propertyIdsCount, type, dispose, apply, - setBezier); - self->curves = spFloatArray_create(frameCount + bezierCount * BEZIER_SIZE); - self->curves->size = frameCount + bezierCount * BEZIER_SIZE; - self->curves->items[frameCount - 1] = CURVE_STEPPED; -} - -void _spCurveTimeline_dispose(spTimeline *self) { - spFloatArray_dispose(SUB_CAST(spCurveTimeline, self)->curves); -} - -void _spCurveTimeline_setBezier(spTimeline *timeline, int bezier, int frame, float value, float time1, float value1, - float cx1, float cy1, float cx2, float cy2, float time2, float value2) { - spCurveTimeline *self = SUB_CAST(spCurveTimeline, timeline); - float tmpx, tmpy, dddx, dddy, ddx, ddy, dx, dy, x, y; - int i = self->super.frameCount + bezier * BEZIER_SIZE, n; - float *curves = self->curves->items; - if (value == 0) curves[frame] = CURVE_BEZIER + i; - tmpx = (time1 - cx1 * 2 + cx2) * 0.03; - tmpy = (value1 - cy1 * 2 + cy2) * 0.03; - dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006; - dddy = ((cy1 - cy2) * 3 - value1 + value2) * 0.006; - ddx = tmpx * 2 + dddx; - ddy = tmpy * 2 + dddy; - dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667; - dy = (cy1 - value1) * 0.3 + tmpy + dddy * 0.16666667; - x = time1 + dx, y = value1 + dy; - for (n = i + BEZIER_SIZE; i < n; i += 2) { - curves[i] = x; - curves[i + 1] = y; - dx += ddx; - dy += ddy; - ddx += dddx; - ddy += dddy; - x += dx; - y += dy; - } -} - -float _spCurveTimeline_getBezierValue(spCurveTimeline *self, float time, int frameIndex, int valueOffset, int i) { - float *curves = self->curves->items; - float *frames = SUPER(self)->frames->items; - float x, y; - int n; - if (curves[i] > time) { - x = frames[frameIndex]; - y = frames[frameIndex + valueOffset]; - return y + (time - x) / (curves[i] - x) * (curves[i + 1] - y); - } - n = i + BEZIER_SIZE; - for (i += 2; i < n; i += 2) { - if (curves[i] >= time) { - x = curves[i - 2]; - y = curves[i - 1]; - return y + (time - x) / (curves[i] - x) * (curves[i + 1] - y); - } - } - frameIndex += self->super.frameEntries; - x = curves[n - 2]; - y = curves[n - 1]; - return y + (time - x) / (frames[frameIndex] - x) * (frames[frameIndex + valueOffset] - y); -} - -void spCurveTimeline_setLinear(spCurveTimeline *self, int frame) { - self->curves->items[frame] = CURVE_LINEAR; -} - -void spCurveTimeline_setStepped(spCurveTimeline *self, int frame) { - self->curves->items[frame] = CURVE_STEPPED; -} - -#define CURVE1_ENTRIES 2 -#define CURVE1_VALUE 1 - -void spCurveTimeline1_setFrame(spCurveTimeline1 *self, int frame, float time, float value) { - float *frames = self->super.frames->items; - frame <<= 1; - frames[frame] = time; - frames[frame + CURVE1_VALUE] = value; -} - -float spCurveTimeline1_getCurveValue(spCurveTimeline1 *self, float time) { - float *frames = self->super.frames->items; - float *curves = self->curves->items; - int i = self->super.frames->size - 2; - int ii, curveType; - for (ii = 2; ii <= i; ii += 2) { - if (frames[ii] > time) { - i = ii - 2; - break; - } - } - - curveType = (int) curves[i >> 1]; - switch (curveType) { - case CURVE_LINEAR: { - float before = frames[i], value = frames[i + CURVE1_VALUE]; - return value + (time - before) / (frames[i + CURVE1_ENTRIES] - before) * - (frames[i + CURVE1_ENTRIES + CURVE1_VALUE] - value); - } - case CURVE_STEPPED: - return frames[i + CURVE1_VALUE]; - } - return _spCurveTimeline_getBezierValue(self, time, i, CURVE1_VALUE, curveType - CURVE_BEZIER); -} - -float spCurveTimeline1_getRelativeValue(spCurveTimeline1 *self, float time, float alpha, spMixBlend blend, float current, float setup) { - float *frames = self->super.frames->items; - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - return setup; - case SP_MIX_BLEND_FIRST: - return current + (setup - current) * alpha; - default: - return current; - } - } - float value = spCurveTimeline1_getCurveValue(self, time); - switch (blend) { - case SP_MIX_BLEND_SETUP: - return setup + value * alpha; - case SP_MIX_BLEND_FIRST: - case SP_MIX_BLEND_REPLACE: - value += setup - current; - break; - case SP_MIX_BLEND_ADD: - break; - } - return current + value * alpha; -} - -float spCurveTimeline1_getAbsoluteValue(spCurveTimeline1 *self, float time, float alpha, spMixBlend blend, float current, float setup) { - float *frames = self->super.frames->items; - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - return setup; - case SP_MIX_BLEND_FIRST: - return current + (setup - current) * alpha; - default: - return current; - } - } - float value = spCurveTimeline1_getCurveValue(self, time); - if (blend == SP_MIX_BLEND_SETUP) return setup + (value - setup) * alpha; - return current + (value - current) * alpha; -} - -float spCurveTimeline1_getAbsoluteValue2(spCurveTimeline1 *self, float time, float alpha, spMixBlend blend, float current, float setup, float value) { - float *frames = self->super.frames->items; - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - return setup; - case SP_MIX_BLEND_FIRST: - return current + (setup - current) * alpha; - default: - return current; - } - } - if (blend == SP_MIX_BLEND_SETUP) return setup + (value - setup) * alpha; - return current + (value - current) * alpha; -} - -float spCurveTimeline1_getScaleValue(spCurveTimeline1 *self, float time, float alpha, spMixBlend blend, spMixDirection direction, float current, float setup) { - float *frames = self->super.frames->items; - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - return setup; - case SP_MIX_BLEND_FIRST: - return current + (setup - current) * alpha; - default: - return current; - } - } - float value = spCurveTimeline1_getCurveValue(self, time) * setup; - if (alpha == 1) { - if (blend == SP_MIX_BLEND_ADD) return current + value - setup; - return value; - } - // Mixing out uses sign of setup or current pose, else use sign of key. - if (direction == SP_MIX_DIRECTION_OUT) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - return setup + (ABS(value) * SIGNUM(setup) - setup) * alpha; - case SP_MIX_BLEND_FIRST: - case SP_MIX_BLEND_REPLACE: - return current + (ABS(value) * SIGNUM(current) - current) * alpha; - default: - break; - } - } else { - float s; - switch (blend) { - case SP_MIX_BLEND_SETUP: - s = ABS(setup) * SIGNUM(value); - return s + (value - s) * alpha; - case SP_MIX_BLEND_FIRST: - case SP_MIX_BLEND_REPLACE: - s = ABS(current) * SIGNUM(value); - return s + (value - s) * alpha; - default: - break; - } - } - return current + (value - setup) * alpha; -} - -#define CURVE2_ENTRIES 3 -#define CURVE2_VALUE1 1 -#define CURVE2_VALUE2 2 - -SP_API void spCurveTimeline2_setFrame(spCurveTimeline1 *self, int frame, float time, float value1, float value2) { - float *frames = self->super.frames->items; - frame *= CURVE2_ENTRIES; - frames[frame] = time; - frames[frame + CURVE2_VALUE1] = value1; - frames[frame + CURVE2_VALUE2] = value2; -} - -/**/ - -void _spRotateTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - spRotateTimeline *self = SUB_CAST(spRotateTimeline, timeline); - spBone *bone = skeleton->bones[self->boneIndex]; - if (bone->active) bone->rotation = spCurveTimeline1_getRelativeValue(SUPER(self), time, alpha, blend, bone->rotation, bone->data->rotation); - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spRotateTimeline *spRotateTimeline_create(int frameCount, int bezierCount, int boneIndex) { - spRotateTimeline *timeline = NEW(spRotateTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_ROTATE << 32) | boneIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE1_ENTRIES, bezierCount, ids, 1, SP_TIMELINE_ROTATE, - _spCurveTimeline_dispose, _spRotateTimeline_apply, _spCurveTimeline_setBezier); - timeline->boneIndex = boneIndex; - return timeline; -} - -void spRotateTimeline_setFrame(spRotateTimeline *self, int frame, float time, float degrees) { - spCurveTimeline1_setFrame(SUPER(self), frame, time, degrees); -} - -/**/ - -void _spTranslateTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spBone *bone; - float x, y, t; - int i, curveType; - - spTranslateTimeline *self = SUB_CAST(spTranslateTimeline, timeline); - float *frames = self->super.super.frames->items; - float *curves = self->super.curves->items; - - bone = skeleton->bones[self->boneIndex]; - if (!bone->active) return; - - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - bone->x = bone->data->x; - bone->y = bone->data->y; - return; - case SP_MIX_BLEND_FIRST: - bone->x += (bone->data->x - bone->x) * alpha; - bone->y += (bone->data->y - bone->y) * alpha; - default: { - } - } - return; - } - - i = search2(self->super.super.frames, time, CURVE2_ENTRIES); - curveType = (int) curves[i / CURVE2_ENTRIES]; - switch (curveType) { - case CURVE_LINEAR: { - float before = frames[i]; - x = frames[i + CURVE2_VALUE1]; - y = frames[i + CURVE2_VALUE2]; - t = (time - before) / (frames[i + CURVE2_ENTRIES] - before); - x += (frames[i + CURVE2_ENTRIES + CURVE2_VALUE1] - x) * t; - y += (frames[i + CURVE2_ENTRIES + CURVE2_VALUE2] - y) * t; - break; - } - case CURVE_STEPPED: { - x = frames[i + CURVE2_VALUE1]; - y = frames[i + CURVE2_VALUE2]; - break; - } - default: { - x = _spCurveTimeline_getBezierValue(SUPER(self), time, i, CURVE2_VALUE1, curveType - CURVE_BEZIER); - y = _spCurveTimeline_getBezierValue(SUPER(self), time, i, CURVE2_VALUE2, - curveType + BEZIER_SIZE - CURVE_BEZIER); - } - } - - switch (blend) { - case SP_MIX_BLEND_SETUP: - bone->x = bone->data->x + x * alpha; - bone->y = bone->data->y + y * alpha; - break; - case SP_MIX_BLEND_FIRST: - case SP_MIX_BLEND_REPLACE: - bone->x += (bone->data->x + x - bone->x) * alpha; - bone->y += (bone->data->y + y - bone->y) * alpha; - break; - case SP_MIX_BLEND_ADD: - bone->x += x * alpha; - bone->y += y * alpha; - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spTranslateTimeline *spTranslateTimeline_create(int frameCount, int bezierCount, int boneIndex) { - spTranslateTimeline *timeline = NEW(spTranslateTimeline); - spPropertyId ids[2]; - ids[0] = ((spPropertyId) SP_PROPERTY_X << 32) | boneIndex; - ids[1] = ((spPropertyId) SP_PROPERTY_Y << 32) | boneIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE2_ENTRIES, bezierCount, ids, 2, SP_TIMELINE_TRANSLATE, - _spCurveTimeline_dispose, _spTranslateTimeline_apply, _spCurveTimeline_setBezier); - timeline->boneIndex = boneIndex; - return timeline; -} - -void spTranslateTimeline_setFrame(spTranslateTimeline *self, int frame, float time, float x, float y) { - spCurveTimeline2_setFrame(SUPER(self), frame, time, x, y); -} - -/**/ - -void _spTranslateXTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spBone *bone; - float x; - - spTranslateXTimeline *self = SUB_CAST(spTranslateXTimeline, timeline); - float *frames = self->super.super.frames->items; - - bone = skeleton->bones[self->boneIndex]; - if (!bone->active) return; - - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - bone->x = bone->data->x; - return; - case SP_MIX_BLEND_FIRST: - bone->x += (bone->data->x - bone->x) * alpha; - default: { - } - } - return; - } - - x = spCurveTimeline1_getCurveValue(SUPER(self), time); - switch (blend) { - case SP_MIX_BLEND_SETUP: - bone->x = bone->data->x + x * alpha; - break; - case SP_MIX_BLEND_FIRST: - case SP_MIX_BLEND_REPLACE: - bone->x += (bone->data->x + x - bone->x) * alpha; - break; - case SP_MIX_BLEND_ADD: - bone->x += x * alpha; - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spTranslateXTimeline *spTranslateXTimeline_create(int frameCount, int bezierCount, int boneIndex) { - spTranslateXTimeline *timeline = NEW(spTranslateXTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_X << 32) | boneIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE1_ENTRIES, bezierCount, ids, 1, SP_TIMELINE_TRANSLATEX, - _spCurveTimeline_dispose, _spTranslateXTimeline_apply, _spCurveTimeline_setBezier); - timeline->boneIndex = boneIndex; - return timeline; -} - -void spTranslateXTimeline_setFrame(spTranslateXTimeline *self, int frame, float time, float x) { - spCurveTimeline1_setFrame(SUPER(self), frame, time, x); -} - -/**/ - -void _spTranslateYTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spBone *bone; - float y; - - spTranslateYTimeline *self = SUB_CAST(spTranslateYTimeline, timeline); - float *frames = self->super.super.frames->items; - - bone = skeleton->bones[self->boneIndex]; - if (!bone->active) return; - - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - bone->y = bone->data->y; - return; - case SP_MIX_BLEND_FIRST: - bone->y += (bone->data->y - bone->y) * alpha; - default: { - } - } - return; - } - - y = spCurveTimeline1_getCurveValue(SUPER(self), time); - switch (blend) { - case SP_MIX_BLEND_SETUP: - bone->y = bone->data->y + y * alpha; - break; - case SP_MIX_BLEND_FIRST: - case SP_MIX_BLEND_REPLACE: - bone->y += (bone->data->y + y - bone->y) * alpha; - break; - case SP_MIX_BLEND_ADD: - bone->y += y * alpha; - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spTranslateYTimeline *spTranslateYTimeline_create(int frameCount, int bezierCount, int boneIndex) { - spTranslateYTimeline *timeline = NEW(spTranslateYTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_Y << 32) | boneIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE1_ENTRIES, bezierCount, ids, 1, SP_TIMELINE_TRANSLATEY, - _spCurveTimeline_dispose, _spTranslateYTimeline_apply, _spCurveTimeline_setBezier); - timeline->boneIndex = boneIndex; - return timeline; -} - -void spTranslateYTimeline_setFrame(spTranslateYTimeline *self, int frame, float time, float y) { - spCurveTimeline1_setFrame(SUPER(self), frame, time, y); -} - -/**/ - -void _spScaleTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - spBone *bone; - int i, curveType; - float x, y, t; - - spScaleTimeline *self = SUB_CAST(spScaleTimeline, timeline); - float *frames = self->super.super.frames->items; - float *curves = self->super.curves->items; - - bone = skeleton->bones[self->boneIndex]; - if (!bone->active) return; - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - bone->scaleX = bone->data->scaleX; - bone->scaleY = bone->data->scaleY; - return; - case SP_MIX_BLEND_FIRST: - bone->scaleX += (bone->data->scaleX - bone->scaleX) * alpha; - bone->scaleY += (bone->data->scaleY - bone->scaleY) * alpha; - default: { - } - } - return; - } - - i = search2(self->super.super.frames, time, CURVE2_ENTRIES); - curveType = (int) curves[i / CURVE2_ENTRIES]; - switch (curveType) { - case CURVE_LINEAR: { - float before = frames[i]; - x = frames[i + CURVE2_VALUE1]; - y = frames[i + CURVE2_VALUE2]; - t = (time - before) / (frames[i + CURVE2_ENTRIES] - before); - x += (frames[i + CURVE2_ENTRIES + CURVE2_VALUE1] - x) * t; - y += (frames[i + CURVE2_ENTRIES + CURVE2_VALUE2] - y) * t; - break; - } - case CURVE_STEPPED: { - x = frames[i + CURVE2_VALUE1]; - y = frames[i + CURVE2_VALUE2]; - break; - } - default: { - x = _spCurveTimeline_getBezierValue(SUPER(self), time, i, CURVE2_VALUE1, curveType - CURVE_BEZIER); - y = _spCurveTimeline_getBezierValue(SUPER(self), time, i, CURVE2_VALUE2, - curveType + BEZIER_SIZE - CURVE_BEZIER); - } - } - x *= bone->data->scaleX; - y *= bone->data->scaleY; - - if (alpha == 1) { - if (blend == SP_MIX_BLEND_ADD) { - bone->scaleX += x - bone->data->scaleX; - bone->scaleY += y - bone->data->scaleY; - } else { - bone->scaleX = x; - bone->scaleY = y; - } - } else { - float bx, by; - if (direction == SP_MIX_DIRECTION_OUT) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - bx = bone->data->scaleX; - by = bone->data->scaleY; - bone->scaleX = bx + (ABS(x) * SIGNUM(bx) - bx) * alpha; - bone->scaleY = by + (ABS(y) * SIGNUM(by) - by) * alpha; - break; - case SP_MIX_BLEND_FIRST: - case SP_MIX_BLEND_REPLACE: - bx = bone->scaleX; - by = bone->scaleY; - bone->scaleX = bx + (ABS(x) * SIGNUM(bx) - bx) * alpha; - bone->scaleY = by + (ABS(y) * SIGNUM(by) - by) * alpha; - break; - case SP_MIX_BLEND_ADD: - bone->scaleX += (x - bone->data->scaleX) * alpha; - bone->scaleY += (y - bone->data->scaleY) * alpha; - } - } else { - switch (blend) { - case SP_MIX_BLEND_SETUP: - bx = ABS(bone->data->scaleX) * SIGNUM(x); - by = ABS(bone->data->scaleY) * SIGNUM(y); - bone->scaleX = bx + (x - bx) * alpha; - bone->scaleY = by + (y - by) * alpha; - break; - case SP_MIX_BLEND_FIRST: - case SP_MIX_BLEND_REPLACE: - bx = ABS(bone->scaleX) * SIGNUM(x); - by = ABS(bone->scaleY) * SIGNUM(y); - bone->scaleX = bx + (x - bx) * alpha; - bone->scaleY = by + (y - by) * alpha; - break; - case SP_MIX_BLEND_ADD: - bone->scaleX += (x - bone->data->scaleX) * alpha; - bone->scaleY += (y - bone->data->scaleY) * alpha; - } - } - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); -} - -spScaleTimeline *spScaleTimeline_create(int frameCount, int bezierCount, int boneIndex) { - spScaleTimeline *timeline = NEW(spScaleTimeline); - spPropertyId ids[2]; - ids[0] = ((spPropertyId) SP_PROPERTY_SCALEX << 32) | boneIndex; - ids[1] = ((spPropertyId) SP_PROPERTY_SCALEY << 32) | boneIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE2_ENTRIES, bezierCount, ids, 2, SP_TIMELINE_SCALE, - _spCurveTimeline_dispose, _spScaleTimeline_apply, _spCurveTimeline_setBezier); - timeline->boneIndex = boneIndex; - return timeline; -} - -void spScaleTimeline_setFrame(spScaleTimeline *self, int frame, float time, float x, float y) { - spCurveTimeline2_setFrame(SUPER(self), frame, time, x, y); -} - -/**/ - -void _spScaleXTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spScaleXTimeline *self = SUB_CAST(spScaleXTimeline, timeline); - spBone *bone = skeleton->bones[self->boneIndex]; - - if (bone->active) bone->scaleX = spCurveTimeline1_getScaleValue(SUPER(self), time, alpha, blend, direction, bone->scaleX, bone->data->scaleX); - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); -} - -spScaleXTimeline *spScaleXTimeline_create(int frameCount, int bezierCount, int boneIndex) { - spScaleXTimeline *timeline = NEW(spScaleXTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_SCALEX << 32) | boneIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE1_ENTRIES, bezierCount, ids, 1, SP_TIMELINE_SCALEX, - _spCurveTimeline_dispose, _spScaleXTimeline_apply, _spCurveTimeline_setBezier); - timeline->boneIndex = boneIndex; - return timeline; -} - -void spScaleXTimeline_setFrame(spScaleXTimeline *self, int frame, float time, float y) { - spCurveTimeline1_setFrame(SUPER(self), frame, time, y); -} - -/**/ - -void _spScaleYTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spScaleYTimeline *self = SUB_CAST(spScaleYTimeline, timeline); - spBone *bone = skeleton->bones[self->boneIndex]; - - if (bone->active) bone->scaleY = spCurveTimeline1_getScaleValue(SUPER(self), time, alpha, blend, direction, bone->scaleX, bone->data->scaleY); - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); -} - -spScaleYTimeline *spScaleYTimeline_create(int frameCount, int bezierCount, int boneIndex) { - spScaleYTimeline *timeline = NEW(spScaleYTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_SCALEY << 32) | boneIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE1_ENTRIES, bezierCount, ids, 1, SP_TIMELINE_SCALEY, - _spCurveTimeline_dispose, _spScaleYTimeline_apply, _spCurveTimeline_setBezier); - timeline->boneIndex = boneIndex; - return timeline; -} - -void spScaleYTimeline_setFrame(spScaleYTimeline *self, int frame, float time, float y) { - spCurveTimeline1_setFrame(SUPER(self), frame, time, y); -} - -/**/ - -void _spShearTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - spBone *bone; - float x, y, t; - int i, curveType; - - spShearTimeline *self = SUB_CAST(spShearTimeline, timeline); - float *frames = SUPER(self)->super.frames->items; - float *curves = SUPER(self)->curves->items; - - bone = skeleton->bones[self->boneIndex]; - if (!bone->active) return; - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - bone->shearX = bone->data->shearX; - bone->shearY = bone->data->shearY; - return; - case SP_MIX_BLEND_FIRST: - bone->shearX += (bone->data->shearX - bone->shearX) * alpha; - bone->shearY += (bone->data->shearY - bone->shearY) * alpha; - default: { - } - } - return; - } - - i = search2(self->super.super.frames, time, CURVE2_ENTRIES); - curveType = (int) curves[i / CURVE2_ENTRIES]; - switch (curveType) { - case CURVE_LINEAR: { - float before = frames[i]; - x = frames[i + CURVE2_VALUE1]; - y = frames[i + CURVE2_VALUE2]; - t = (time - before) / (frames[i + CURVE2_ENTRIES] - before); - x += (frames[i + CURVE2_ENTRIES + CURVE2_VALUE1] - x) * t; - y += (frames[i + CURVE2_ENTRIES + CURVE2_VALUE2] - y) * t; - break; - } - case CURVE_STEPPED: { - x = frames[i + CURVE2_VALUE1]; - y = frames[i + CURVE2_VALUE2]; - break; - } - default: { - x = _spCurveTimeline_getBezierValue(SUPER(self), time, i, CURVE2_VALUE1, curveType - CURVE_BEZIER); - y = _spCurveTimeline_getBezierValue(SUPER(self), time, i, CURVE2_VALUE2, - curveType + BEZIER_SIZE - CURVE_BEZIER); - } - } - - switch (blend) { - case SP_MIX_BLEND_SETUP: - bone->shearX = bone->data->shearX + x * alpha; - bone->shearY = bone->data->shearY + y * alpha; - break; - case SP_MIX_BLEND_FIRST: - case SP_MIX_BLEND_REPLACE: - bone->shearX += (bone->data->shearX + x - bone->shearX) * alpha; - bone->shearY += (bone->data->shearY + y - bone->shearY) * alpha; - break; - case SP_MIX_BLEND_ADD: - bone->shearX += x * alpha; - bone->shearY += y * alpha; - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spShearTimeline *spShearTimeline_create(int frameCount, int bezierCount, int boneIndex) { - spShearTimeline *timeline = NEW(spShearTimeline); - spPropertyId ids[2]; - ids[0] = ((spPropertyId) SP_PROPERTY_SHEARX << 32) | boneIndex; - ids[1] = ((spPropertyId) SP_PROPERTY_SHEARY << 32) | boneIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE2_ENTRIES, bezierCount, ids, 2, SP_TIMELINE_SHEAR, - _spCurveTimeline_dispose, _spShearTimeline_apply, _spCurveTimeline_setBezier); - timeline->boneIndex = boneIndex; - return timeline; -} - -void spShearTimeline_setFrame(spShearTimeline *self, int frame, float time, float x, float y) { - spCurveTimeline2_setFrame(SUPER(self), frame, time, x, y); -} - -/**/ - -void _spShearXTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spShearXTimeline *self = SUB_CAST(spShearXTimeline, timeline); - spBone *bone = skeleton->bones[self->boneIndex]; - - if (bone->active) bone->shearX = spCurveTimeline1_getRelativeValue(SUPER(self), time, alpha, blend, bone->shearX, bone->data->shearX); - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spShearXTimeline *spShearXTimeline_create(int frameCount, int bezierCount, int boneIndex) { - spShearXTimeline *timeline = NEW(spShearXTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_SHEARX << 32) | boneIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE1_ENTRIES, bezierCount, ids, 1, SP_TIMELINE_SHEARX, - _spCurveTimeline_dispose, _spShearXTimeline_apply, _spCurveTimeline_setBezier); - timeline->boneIndex = boneIndex; - return timeline; -} - -void spShearXTimeline_setFrame(spShearXTimeline *self, int frame, float time, float x) { - spCurveTimeline1_setFrame(SUPER(self), frame, time, x); -} - -/**/ - -void _spShearYTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spShearYTimeline *self = SUB_CAST(spShearYTimeline, timeline); - spBone *bone = skeleton->bones[self->boneIndex]; - - if (bone->active) bone->shearY = spCurveTimeline1_getRelativeValue(SUPER(self), time, alpha, blend, bone->shearY, bone->data->shearY); - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spShearYTimeline *spShearYTimeline_create(int frameCount, int bezierCount, int boneIndex) { - spShearYTimeline *timeline = NEW(spShearYTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_SHEARY << 32) | boneIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE1_ENTRIES, bezierCount, ids, 1, SP_TIMELINE_SHEARY, - _spCurveTimeline_dispose, _spShearYTimeline_apply, _spCurveTimeline_setBezier); - timeline->boneIndex = boneIndex; - return timeline; -} - -void spShearYTimeline_setFrame(spShearYTimeline *self, int frame, float time, float y) { - spCurveTimeline1_setFrame(SUPER(self), frame, time, y); -} - -/**/ - -static const int RGBA_ENTRIES = 5, COLOR_R = 1, COLOR_G = 2, COLOR_B = 3, COLOR_A = 4; - -void _spRGBATimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - spSlot *slot; - int i, curveType; - float r, g, b, a, t; - spColor *color; - spColor *setup; - spRGBATimeline *self = (spRGBATimeline *) timeline; - float *frames = self->super.super.frames->items; - float *curves = self->super.curves->items; - - slot = skeleton->slots[self->slotIndex]; - if (!slot->bone->active) return; - - if (time < frames[0]) { - color = &slot->color; - setup = &slot->data->color; - switch (blend) { - case SP_MIX_BLEND_SETUP: - spColor_setFromColor(color, setup); - return; - case SP_MIX_BLEND_FIRST: - spColor_addFloats(color, (setup->r - color->r) * alpha, (setup->g - color->g) * alpha, - (setup->b - color->b) * alpha, - (setup->a - color->a) * alpha); - default: { - } - } - return; - } - - i = search2(self->super.super.frames, time, RGBA_ENTRIES); - curveType = (int) curves[i / RGBA_ENTRIES]; - switch (curveType) { - case CURVE_LINEAR: { - float before = frames[i]; - r = frames[i + COLOR_R]; - g = frames[i + COLOR_G]; - b = frames[i + COLOR_B]; - a = frames[i + COLOR_A]; - t = (time - before) / (frames[i + RGBA_ENTRIES] - before); - r += (frames[i + RGBA_ENTRIES + COLOR_R] - r) * t; - g += (frames[i + RGBA_ENTRIES + COLOR_G] - g) * t; - b += (frames[i + RGBA_ENTRIES + COLOR_B] - b) * t; - a += (frames[i + RGBA_ENTRIES + COLOR_A] - a) * t; - break; - } - case CURVE_STEPPED: { - r = frames[i + COLOR_R]; - g = frames[i + COLOR_G]; - b = frames[i + COLOR_B]; - a = frames[i + COLOR_A]; - break; - } - default: { - r = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_R, curveType - CURVE_BEZIER); - g = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_G, - curveType + BEZIER_SIZE - CURVE_BEZIER); - b = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_B, - curveType + BEZIER_SIZE * 2 - CURVE_BEZIER); - a = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_A, - curveType + BEZIER_SIZE * 3 - CURVE_BEZIER); - } - } - color = &slot->color; - if (alpha == 1) - spColor_setFromFloats(color, r, g, b, a); - else { - if (blend == SP_MIX_BLEND_SETUP) spColor_setFromColor(color, &slot->data->color); - spColor_addFloats(color, (r - color->r) * alpha, (g - color->g) * alpha, (b - color->b) * alpha, - (a - color->a) * alpha); - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spRGBATimeline *spRGBATimeline_create(int framesCount, int bezierCount, int slotIndex) { - spRGBATimeline *timeline = NEW(spRGBATimeline); - spPropertyId ids[2]; - ids[0] = ((spPropertyId) SP_PROPERTY_RGB << 32) | slotIndex; - ids[1] = ((spPropertyId) SP_PROPERTY_ALPHA << 32) | slotIndex; - _spCurveTimeline_init(SUPER(timeline), framesCount, RGBA_ENTRIES, bezierCount, ids, 2, SP_TIMELINE_RGBA, - _spCurveTimeline_dispose, _spRGBATimeline_apply, _spCurveTimeline_setBezier); - timeline->slotIndex = slotIndex; - return timeline; -} - -void spRGBATimeline_setFrame(spRGBATimeline *self, int frame, float time, float r, float g, float b, float a) { - float *frames = self->super.super.frames->items; - frame *= RGBA_ENTRIES; - frames[frame] = time; - frames[frame + COLOR_R] = r; - frames[frame + COLOR_G] = g; - frames[frame + COLOR_B] = b; - frames[frame + COLOR_A] = a; -} - -/**/ - -#define RGB_ENTRIES 4 - -void _spRGBTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - spSlot *slot; - int i, curveType; - float r, g, b, t; - spColor *color; - spColor *setup; - spRGBTimeline *self = (spRGBTimeline *) timeline; - float *frames = self->super.super.frames->items; - float *curves = self->super.curves->items; - - slot = skeleton->slots[self->slotIndex]; - if (!slot->bone->active) return; - - if (time < frames[0]) { - color = &slot->color; - setup = &slot->data->color; - switch (blend) { - case SP_MIX_BLEND_SETUP: - spColor_setFromColor(color, setup); - return; - case SP_MIX_BLEND_FIRST: - spColor_addFloats(color, (setup->r - color->r) * alpha, (setup->g - color->g) * alpha, - (setup->b - color->b) * alpha, - (setup->a - color->a) * alpha); - default: { - } - } - return; - } - - i = search2(self->super.super.frames, time, RGB_ENTRIES); - curveType = (int) curves[i / RGB_ENTRIES]; - switch (curveType) { - case CURVE_LINEAR: { - float before = frames[i]; - r = frames[i + COLOR_R]; - g = frames[i + COLOR_G]; - b = frames[i + COLOR_B]; - t = (time - before) / (frames[i + RGB_ENTRIES] - before); - r += (frames[i + RGB_ENTRIES + COLOR_R] - r) * t; - g += (frames[i + RGB_ENTRIES + COLOR_G] - g) * t; - b += (frames[i + RGB_ENTRIES + COLOR_B] - b) * t; - break; - } - case CURVE_STEPPED: { - r = frames[i + COLOR_R]; - g = frames[i + COLOR_G]; - b = frames[i + COLOR_B]; - break; - } - default: { - r = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_R, curveType - CURVE_BEZIER); - g = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_G, - curveType + BEZIER_SIZE - CURVE_BEZIER); - b = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_B, - curveType + BEZIER_SIZE * 2 - CURVE_BEZIER); - } - } - color = &slot->color; - if (alpha == 1) { - color->r = r; - color->g = g; - color->b = b; - } else { - if (blend == SP_MIX_BLEND_SETUP) { - color->r = slot->data->color.r; - color->g = slot->data->color.g; - color->b = slot->data->color.b; - } - color->r += (r - color->r) * alpha; - color->g += (g - color->g) * alpha; - color->b += (b - color->b) * alpha; - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spRGBTimeline *spRGBTimeline_create(int framesCount, int bezierCount, int slotIndex) { - spRGBTimeline *timeline = NEW(spRGBTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_RGB << 32) | slotIndex; - _spCurveTimeline_init(SUPER(timeline), framesCount, RGB_ENTRIES, bezierCount, ids, 1, SP_TIMELINE_RGB, - _spCurveTimeline_dispose, _spRGBTimeline_apply, _spCurveTimeline_setBezier); - timeline->slotIndex = slotIndex; - return timeline; -} - -void spRGBTimeline_setFrame(spRGBTimeline *self, int frame, float time, float r, float g, float b) { - float *frames = self->super.super.frames->items; - frame *= RGB_ENTRIES; - frames[frame] = time; - frames[frame + COLOR_R] = r; - frames[frame + COLOR_G] = g; - frames[frame + COLOR_B] = b; -} - -/**/ - -void _spAlphaTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spSlot *slot; - float a; - spColor *color; - spColor *setup; - spAlphaTimeline *self = (spAlphaTimeline *) timeline; - float *frames = self->super.super.frames->items; - - slot = skeleton->slots[self->slotIndex]; - if (!slot->bone->active) return; - - if (time < frames[0]) { /* Time is before first frame-> */ - color = &slot->color; - setup = &slot->data->color; - switch (blend) { - case SP_MIX_BLEND_SETUP: - color->a = setup->a; - return; - case SP_MIX_BLEND_FIRST: - color->a += (setup->a - color->a) * alpha; - default: { - } - } - return; - } - - a = spCurveTimeline1_getCurveValue(SUPER(self), time); - if (alpha == 1) - slot->color.a = a; - else { - if (blend == SP_MIX_BLEND_SETUP) slot->color.a = slot->data->color.a; - slot->color.a += (a - slot->color.a) * alpha; - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spAlphaTimeline *spAlphaTimeline_create(int frameCount, int bezierCount, int slotIndex) { - spAlphaTimeline *timeline = NEW(spAlphaTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_ALPHA << 32) | slotIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE1_ENTRIES, bezierCount, ids, 1, SP_TIMELINE_ALPHA, - _spCurveTimeline_dispose, _spAlphaTimeline_apply, _spCurveTimeline_setBezier); - timeline->slotIndex = slotIndex; - return timeline; -} - -void spAlphaTimeline_setFrame(spAlphaTimeline *self, int frame, float time, float alpha) { - spCurveTimeline1_setFrame(SUPER(self), frame, time, alpha); -} - -/**/ - -static const int RGBA2_ENTRIES = 8, COLOR_R2 = 5, COLOR_G2 = 6, COLOR_B2 = 7; - -void _spRGBA2Timeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - spSlot *slot; - int i, curveType; - float r, g, b, a, r2, g2, b2, t; - spColor *light, *setupLight; - spColor *dark, *setupDark; - spRGBA2Timeline *self = (spRGBA2Timeline *) timeline; - float *frames = self->super.super.frames->items; - float *curves = self->super.curves->items; - - slot = skeleton->slots[self->slotIndex]; - if (!slot->bone->active) return; - - if (time < frames[0]) { - light = &slot->color; - dark = slot->darkColor; - setupLight = &slot->data->color; - setupDark = slot->data->darkColor; - switch (blend) { - case SP_MIX_BLEND_SETUP: - spColor_setFromColor(light, setupLight); - spColor_setFromFloats3(dark, setupDark->r, setupDark->g, setupDark->b); - return; - case SP_MIX_BLEND_FIRST: - spColor_addFloats(light, (setupLight->r - light->r) * alpha, (setupLight->g - light->g) * alpha, - (setupLight->b - light->b) * alpha, - (setupLight->a - light->a) * alpha); - dark->r += (setupDark->r - dark->r) * alpha; - dark->g += (setupDark->g - dark->g) * alpha; - dark->b += (setupDark->b - dark->b) * alpha; - default: { - } - } - return; - } - - r = 0, g = 0, b = 0, a = 0, r2 = 0, g2 = 0, b2 = 0; - i = search2(self->super.super.frames, time, RGBA2_ENTRIES); - curveType = (int) curves[i / RGBA2_ENTRIES]; - switch (curveType) { - case CURVE_LINEAR: { - float before = frames[i]; - r = frames[i + COLOR_R]; - g = frames[i + COLOR_G]; - b = frames[i + COLOR_B]; - a = frames[i + COLOR_A]; - r2 = frames[i + COLOR_R2]; - g2 = frames[i + COLOR_G2]; - b2 = frames[i + COLOR_B2]; - t = (time - before) / (frames[i + RGBA2_ENTRIES] - before); - r += (frames[i + RGBA2_ENTRIES + COLOR_R] - r) * t; - g += (frames[i + RGBA2_ENTRIES + COLOR_G] - g) * t; - b += (frames[i + RGBA2_ENTRIES + COLOR_B] - b) * t; - a += (frames[i + RGBA2_ENTRIES + COLOR_A] - a) * t; - r2 += (frames[i + RGBA2_ENTRIES + COLOR_R2] - r2) * t; - g2 += (frames[i + RGBA2_ENTRIES + COLOR_G2] - g2) * t; - b2 += (frames[i + RGBA2_ENTRIES + COLOR_B2] - b2) * t; - break; - } - case CURVE_STEPPED: { - r = frames[i + COLOR_R]; - g = frames[i + COLOR_G]; - b = frames[i + COLOR_B]; - a = frames[i + COLOR_A]; - r2 = frames[i + COLOR_R2]; - g2 = frames[i + COLOR_G2]; - b2 = frames[i + COLOR_B2]; - break; - } - default: { - r = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_R, curveType - CURVE_BEZIER); - g = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_G, - curveType + BEZIER_SIZE - CURVE_BEZIER); - b = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_B, - curveType + BEZIER_SIZE * 2 - CURVE_BEZIER); - a = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_A, - curveType + BEZIER_SIZE * 3 - CURVE_BEZIER); - r2 = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_R2, - curveType + BEZIER_SIZE * 4 - CURVE_BEZIER); - g2 = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_G2, - curveType + BEZIER_SIZE * 5 - CURVE_BEZIER); - b2 = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_B2, - curveType + BEZIER_SIZE * 6 - CURVE_BEZIER); - } - } - - light = &slot->color, dark = slot->darkColor; - if (alpha == 1) { - spColor_setFromFloats(light, r, g, b, a); - spColor_setFromFloats3(dark, r2, g2, b2); - } else { - if (blend == SP_MIX_BLEND_SETUP) { - spColor_setFromColor(light, &slot->data->color); - spColor_setFromColor(dark, slot->data->darkColor); - } - spColor_addFloats(light, (r - light->r) * alpha, (g - light->g) * alpha, (b - light->b) * alpha, - (a - light->a) * alpha); - dark->r += (r2 - dark->r) * alpha; - dark->g += (g2 - dark->g) * alpha; - dark->b += (b2 - dark->b) * alpha; - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spRGBA2Timeline *spRGBA2Timeline_create(int framesCount, int bezierCount, int slotIndex) { - spRGBA2Timeline *timeline = NEW(spRGBA2Timeline); - spPropertyId ids[3]; - ids[0] = ((spPropertyId) SP_PROPERTY_RGB << 32) | slotIndex; - ids[1] = ((spPropertyId) SP_PROPERTY_ALPHA << 32) | slotIndex; - ids[2] = ((spPropertyId) SP_PROPERTY_RGB2 << 32) | slotIndex; - _spCurveTimeline_init(SUPER(timeline), framesCount, RGBA2_ENTRIES, bezierCount, ids, 3, SP_TIMELINE_RGBA2, - _spCurveTimeline_dispose, _spRGBA2Timeline_apply, _spCurveTimeline_setBezier); - timeline->slotIndex = slotIndex; - return timeline; -} - -void spRGBA2Timeline_setFrame(spRGBA2Timeline *self, int frame, float time, float r, float g, float b, float a, float r2, - float g2, float b2) { - float *frames = self->super.super.frames->items; - frame *= RGBA2_ENTRIES; - frames[frame] = time; - frames[frame + COLOR_R] = r; - frames[frame + COLOR_G] = g; - frames[frame + COLOR_B] = b; - frames[frame + COLOR_A] = a; - frames[frame + COLOR_R2] = r2; - frames[frame + COLOR_G2] = g2; - frames[frame + COLOR_B2] = b2; -} - -/**/ - -static const int RGB2_ENTRIES = 7, COLOR2_R2 = 5, COLOR2_G2 = 6, COLOR2_B2 = 7; - -void _spRGB2Timeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - spSlot *slot; - int i, curveType; - float r, g, b, r2, g2, b2, t; - spColor *light, *setupLight; - spColor *dark, *setupDark; - spRGB2Timeline *self = (spRGB2Timeline *) timeline; - float *frames = self->super.super.frames->items; - float *curves = self->super.curves->items; - - slot = skeleton->slots[self->slotIndex]; - if (!slot->bone->active) return; - - if (time < frames[0]) { - light = &slot->color; - dark = slot->darkColor; - setupLight = &slot->data->color; - setupDark = slot->data->darkColor; - switch (blend) { - case SP_MIX_BLEND_SETUP: - spColor_setFromColor3(light, setupLight); - spColor_setFromColor3(dark, setupDark); - return; - case SP_MIX_BLEND_FIRST: - spColor_addFloats3(light, (setupLight->r - light->r) * alpha, (setupLight->g - light->g) * alpha, - (setupLight->b - light->b) * alpha); - dark->r += (setupDark->r - dark->r) * alpha; - dark->g += (setupDark->g - dark->g) * alpha; - dark->b += (setupDark->b - dark->b) * alpha; - default: { - } - } - return; - } - - r = 0, g = 0, b = 0, r2 = 0, g2 = 0, b2 = 0; - i = search2(self->super.super.frames, time, RGB2_ENTRIES); - curveType = (int) curves[i / RGB2_ENTRIES]; - switch (curveType) { - case CURVE_LINEAR: { - float before = frames[i]; - r = frames[i + COLOR_R]; - g = frames[i + COLOR_G]; - b = frames[i + COLOR_B]; - r2 = frames[i + COLOR2_R2]; - g2 = frames[i + COLOR2_G2]; - b2 = frames[i + COLOR2_B2]; - t = (time - before) / (frames[i + RGB2_ENTRIES] - before); - r += (frames[i + RGB2_ENTRIES + COLOR_R] - r) * t; - g += (frames[i + RGB2_ENTRIES + COLOR_G] - g) * t; - b += (frames[i + RGB2_ENTRIES + COLOR_B] - b) * t; - r2 += (frames[i + RGB2_ENTRIES + COLOR2_R2] - r2) * t; - g2 += (frames[i + RGB2_ENTRIES + COLOR2_G2] - g2) * t; - b2 += (frames[i + RGB2_ENTRIES + COLOR2_B2] - b2) * t; - break; - } - case CURVE_STEPPED: { - r = frames[i + COLOR_R]; - g = frames[i + COLOR_G]; - b = frames[i + COLOR_B]; - r2 = frames[i + COLOR2_R2]; - g2 = frames[i + COLOR2_G2]; - b2 = frames[i + COLOR2_B2]; - break; - } - default: { - r = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_R, curveType - CURVE_BEZIER); - g = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_G, - curveType + BEZIER_SIZE - CURVE_BEZIER); - b = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR_B, - curveType + BEZIER_SIZE * 2 - CURVE_BEZIER); - r2 = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR2_R2, - curveType + BEZIER_SIZE * 3 - CURVE_BEZIER); - g2 = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR2_G2, - curveType + BEZIER_SIZE * 4 - CURVE_BEZIER); - b2 = _spCurveTimeline_getBezierValue(SUPER(self), time, i, COLOR2_B2, - curveType + BEZIER_SIZE * 5 - CURVE_BEZIER); - } - } - - light = &slot->color, dark = slot->darkColor; - if (alpha == 1) { - spColor_setFromFloats3(light, r, g, b); - spColor_setFromFloats3(dark, r2, g2, b2); - } else { - if (blend == SP_MIX_BLEND_SETUP) { - spColor_setFromColor3(light, &slot->data->color); - - spColor_setFromColor3(dark, slot->data->darkColor); - } - spColor_addFloats3(light, (r - light->r) * alpha, (g - light->g) * alpha, (b - light->b) * alpha); - dark->r += (r2 - dark->r) * alpha; - dark->g += (g2 - dark->g) * alpha; - dark->b += (b2 - dark->b) * alpha; - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spRGB2Timeline *spRGB2Timeline_create(int framesCount, int bezierCount, int slotIndex) { - spRGB2Timeline *timeline = NEW(spRGB2Timeline); - spPropertyId ids[2]; - ids[0] = ((spPropertyId) SP_PROPERTY_RGB << 32) | slotIndex; - ids[1] = ((spPropertyId) SP_PROPERTY_RGB2 << 32) | slotIndex; - _spCurveTimeline_init(SUPER(timeline), framesCount, RGB2_ENTRIES, bezierCount, ids, 2, SP_TIMELINE_RGB2, - _spCurveTimeline_dispose, _spRGB2Timeline_apply, _spCurveTimeline_setBezier); - timeline->slotIndex = slotIndex; - return timeline; -} - -void spRGB2Timeline_setFrame(spRGB2Timeline *self, int frame, float time, float r, float g, float b, float r2, float g2, - float b2) { - float *frames = self->super.super.frames->items; - frame *= RGB2_ENTRIES; - frames[frame] = time; - frames[frame + COLOR_R] = r; - frames[frame + COLOR_G] = g; - frames[frame + COLOR_B] = b; - frames[frame + COLOR2_R2] = r2; - frames[frame + COLOR2_G2] = g2; - frames[frame + COLOR2_B2] = b2; -} - -/**/ - -static void -_spSetAttachment(spAttachmentTimeline *timeline, spSkeleton *skeleton, spSlot *slot, const char *attachmentName) { - spSlot_setAttachment(slot, attachmentName == NULL ? NULL : spSkeleton_getAttachmentForSlotIndex(skeleton, timeline->slotIndex, attachmentName)); -} - -void _spAttachmentTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - const char *attachmentName; - spAttachmentTimeline *self = (spAttachmentTimeline *) timeline; - float *frames = self->super.frames->items; - spSlot *slot = skeleton->slots[self->slotIndex]; - if (!slot->bone->active) return; - - if (direction == SP_MIX_DIRECTION_OUT) { - if (blend == SP_MIX_BLEND_SETUP) { - _spSetAttachment(self, skeleton, slot, slot->data->attachmentName); - } - return; - } - - if (time < frames[0]) { - if (blend == SP_MIX_BLEND_SETUP || blend == SP_MIX_BLEND_FIRST) { - _spSetAttachment(self, skeleton, slot, slot->data->attachmentName); - } - return; - } - - if (time < frames[0]) { - if (blend == SP_MIX_BLEND_SETUP || blend == SP_MIX_BLEND_FIRST) - _spSetAttachment(self, skeleton, slot, slot->data->attachmentName); - return; - } - - attachmentName = self->attachmentNames[search(self->super.frames, time)]; - _spSetAttachment(self, skeleton, slot, attachmentName); - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(alpha); -} - -void _spAttachmentTimeline_dispose(spTimeline *timeline) { - spAttachmentTimeline *self = SUB_CAST(spAttachmentTimeline, timeline); - int i; - for (i = 0; i < self->super.frames->size; ++i) - FREE(self->attachmentNames[i]); - FREE(self->attachmentNames); -} - -spAttachmentTimeline *spAttachmentTimeline_create(int framesCount, int slotIndex) { - spAttachmentTimeline *self = NEW(spAttachmentTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_ATTACHMENT << 32) | slotIndex; - _spTimeline_init(SUPER(self), framesCount, 1, ids, 1, SP_TIMELINE_ATTACHMENT, _spAttachmentTimeline_dispose, - _spAttachmentTimeline_apply, 0); - self->attachmentNames = CALLOC(char *, framesCount); - self->slotIndex = slotIndex; - return self; -} - -void spAttachmentTimeline_setFrame(spAttachmentTimeline *self, int frame, float time, const char *attachmentName) { - self->super.frames->items[frame] = time; - - FREE(self->attachmentNames[frame]); - if (attachmentName) - MALLOC_STR(self->attachmentNames[frame], attachmentName); - else - self->attachmentNames[frame] = 0; -} - -/**/ - -void _spDeformTimeline_setBezier(spTimeline *timeline, int bezier, int frame, float value, float time1, float value1, - float cx1, float cy1, - float cx2, float cy2, float time2, float value2) { - spDeformTimeline *self = SUB_CAST(spDeformTimeline, timeline); - int n, i = self->super.super.frameCount + bezier * BEZIER_SIZE; - float *curves = self->super.curves->items; - float tmpx = (time1 - cx1 * 2 + cx2) * 0.03, tmpy = cy2 * 0.03 - cy1 * 0.06; - float dddx = ((cx1 - cx2) * 3 - time1 + time2) * 0.006, dddy = (cy1 - cy2 + 0.33333333) * 0.018; - float ddx = tmpx * 2 + dddx, ddy = tmpy * 2 + dddy; - float dx = (cx1 - time1) * 0.3 + tmpx + dddx * 0.16666667, dy = cy1 * 0.3 + tmpy + dddy * 0.16666667; - float x = time1 + dx, y = dy; - if (value == 0) curves[frame] = CURVE_BEZIER + i; - for (n = i + BEZIER_SIZE; i < n; i += 2) { - curves[i] = x; - curves[i + 1] = y; - dx += ddx; - dy += ddy; - ddx += dddx; - ddy += dddy; - x += dx; - y += dy; - } - - UNUSED(value1); - UNUSED(value2); -} - -float _spDeformTimeline_getCurvePercent(spDeformTimeline *self, float time, int frame) { - float *curves = self->super.curves->items; - float *frames = self->super.super.frames->items; - int n, i = (int) curves[frame]; - int frameEntries = self->super.super.frameEntries; - float x, y; - switch (i) { - case CURVE_LINEAR: { - x = frames[frame]; - return (time - x) / (frames[frame + frameEntries] - x); - } - case CURVE_STEPPED: { - return 0; - } - default: { - } - } - i -= CURVE_BEZIER; - if (curves[i] > time) { - x = frames[frame]; - return curves[i + 1] * (time - x) / (curves[i] - x); - } - n = i + BEZIER_SIZE; - for (i += 2; i < n; i += 2) { - if (curves[i] >= time) { - x = curves[i - 2], y = curves[i - 1]; - return y + (time - x) / (curves[i] - x) * (curves[i + 1] - y); - } - } - x = curves[n - 2], y = curves[n - 1]; - return y + (1 - y) * (time - x) / (frames[frame + frameEntries] - x); -} - -void _spDeformTimeline_apply( - spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - int frame, i, vertexCount; - float percent; - const float *prevVertices; - const float *nextVertices; - float *frames; - int framesCount; - float **frameVertices; - float *deformArray; - spDeformTimeline *self = (spDeformTimeline *) timeline; - - spSlot *slot = skeleton->slots[self->slotIndex]; - if (!slot->bone->active) return; - - if (!slot->attachment) return; - switch (slot->attachment->type) { - case SP_ATTACHMENT_BOUNDING_BOX: - case SP_ATTACHMENT_CLIPPING: - case SP_ATTACHMENT_MESH: - case SP_ATTACHMENT_PATH: { - spVertexAttachment *vertexAttachment = SUB_CAST(spVertexAttachment, slot->attachment); - if (vertexAttachment->timelineAttachment != self->attachment) return; - break; - } - default: - return; - } - - frames = self->super.super.frames->items; - framesCount = self->super.super.frames->size; - vertexCount = self->frameVerticesCount; - if (slot->deformCount < vertexCount) { - if (slot->deformCapacity < vertexCount) { - FREE(slot->deform); - slot->deform = MALLOC(float, vertexCount); - slot->deformCapacity = vertexCount; - } - } - if (slot->deformCount == 0) blend = SP_MIX_BLEND_SETUP; - - frameVertices = self->frameVertices; - deformArray = slot->deform; - - if (time < frames[0]) { /* Time is before first frame. */ - spVertexAttachment *vertexAttachment = SUB_CAST(spVertexAttachment, slot->attachment); - switch (blend) { - case SP_MIX_BLEND_SETUP: - slot->deformCount = 0; - return; - case SP_MIX_BLEND_FIRST: - if (alpha == 1) { - slot->deformCount = 0; - return; - } - slot->deformCount = vertexCount; - if (!vertexAttachment->bones) { - float *setupVertices = vertexAttachment->vertices; - for (i = 0; i < vertexCount; i++) { - deformArray[i] += (setupVertices[i] - deformArray[i]) * alpha; - } - } else { - alpha = 1 - alpha; - for (i = 0; i < vertexCount; i++) { - deformArray[i] *= alpha; - } - } - case SP_MIX_BLEND_REPLACE: - case SP_MIX_BLEND_ADD:; /* to appease compiler */ - } - return; - } - - slot->deformCount = vertexCount; - if (time >= frames[framesCount - 1]) { /* Time is after last frame. */ - const float *lastVertices = self->frameVertices[framesCount - 1]; - if (alpha == 1) { - if (blend == SP_MIX_BLEND_ADD) { - spVertexAttachment *vertexAttachment = SUB_CAST(spVertexAttachment, slot->attachment); - if (!vertexAttachment->bones) { - /* Unweighted vertex positions, with alpha. */ - float *setupVertices = vertexAttachment->vertices; - for (i = 0; i < vertexCount; i++) { - deformArray[i] += lastVertices[i] - setupVertices[i]; - } - } else { - /* Weighted deform offsets, with alpha. */ - for (i = 0; i < vertexCount; i++) - deformArray[i] += lastVertices[i]; - } - } else { - /* Vertex positions or deform offsets, no alpha. */ - memcpy(deformArray, lastVertices, vertexCount * sizeof(float)); - } - } else { - spVertexAttachment *vertexAttachment; - switch (blend) { - case SP_MIX_BLEND_SETUP: - vertexAttachment = SUB_CAST(spVertexAttachment, slot->attachment); - if (!vertexAttachment->bones) { - /* Unweighted vertex positions, with alpha. */ - float *setupVertices = vertexAttachment->vertices; - for (i = 0; i < vertexCount; i++) { - float setup = setupVertices[i]; - deformArray[i] = setup + (lastVertices[i] - setup) * alpha; - } - } else { - /* Weighted deform offsets, with alpha. */ - for (i = 0; i < vertexCount; i++) - deformArray[i] = lastVertices[i] * alpha; - } - break; - case SP_MIX_BLEND_FIRST: - case SP_MIX_BLEND_REPLACE: - /* Vertex positions or deform offsets, with alpha. */ - for (i = 0; i < vertexCount; i++) - deformArray[i] += (lastVertices[i] - deformArray[i]) * alpha; - break; - case SP_MIX_BLEND_ADD: - vertexAttachment = SUB_CAST(spVertexAttachment, slot->attachment); - if (!vertexAttachment->bones) { - /* Unweighted vertex positions, with alpha. */ - float *setupVertices = vertexAttachment->vertices; - for (i = 0; i < vertexCount; i++) { - deformArray[i] += (lastVertices[i] - setupVertices[i]) * alpha; - } - } else { - for (i = 0; i < vertexCount; i++) - deformArray[i] += lastVertices[i] * alpha; - } - } - } - return; - } - - /* Interpolate between the previous frame and the current frame. */ - frame = search(self->super.super.frames, time); - percent = _spDeformTimeline_getCurvePercent(self, time, frame); - prevVertices = frameVertices[frame]; - nextVertices = frameVertices[frame + 1]; - - if (alpha == 1) { - if (blend == SP_MIX_BLEND_ADD) { - spVertexAttachment *vertexAttachment = SUB_CAST(spVertexAttachment, slot->attachment); - if (!vertexAttachment->bones) { - float *setupVertices = vertexAttachment->vertices; - for (i = 0; i < vertexCount; i++) { - float prev = prevVertices[i]; - deformArray[i] += prev + (nextVertices[i] - prev) * percent - setupVertices[i]; - } - } else { - for (i = 0; i < vertexCount; i++) { - float prev = prevVertices[i]; - deformArray[i] += prev + (nextVertices[i] - prev) * percent; - } - } - } else { - for (i = 0; i < vertexCount; i++) { - float prev = prevVertices[i]; - deformArray[i] = prev + (nextVertices[i] - prev) * percent; - } - } - } else { - spVertexAttachment *vertexAttachment; - switch (blend) { - case SP_MIX_BLEND_SETUP: - vertexAttachment = SUB_CAST(spVertexAttachment, slot->attachment); - if (!vertexAttachment->bones) { - float *setupVertices = vertexAttachment->vertices; - for (i = 0; i < vertexCount; i++) { - float prev = prevVertices[i], setup = setupVertices[i]; - deformArray[i] = setup + (prev + (nextVertices[i] - prev) * percent - setup) * alpha; - } - } else { - for (i = 0; i < vertexCount; i++) { - float prev = prevVertices[i]; - deformArray[i] = (prev + (nextVertices[i] - prev) * percent) * alpha; - } - } - break; - case SP_MIX_BLEND_FIRST: - case SP_MIX_BLEND_REPLACE: - for (i = 0; i < vertexCount; i++) { - float prev = prevVertices[i]; - deformArray[i] += (prev + (nextVertices[i] - prev) * percent - deformArray[i]) * alpha; - } - break; - case SP_MIX_BLEND_ADD: - vertexAttachment = SUB_CAST(spVertexAttachment, slot->attachment); - if (!vertexAttachment->bones) { - float *setupVertices = vertexAttachment->vertices; - for (i = 0; i < vertexCount; i++) { - float prev = prevVertices[i]; - deformArray[i] += (prev + (nextVertices[i] - prev) * percent - setupVertices[i]) * alpha; - } - } else { - for (i = 0; i < vertexCount; i++) { - float prev = prevVertices[i]; - deformArray[i] += (prev + (nextVertices[i] - prev) * percent) * alpha; - } - } - } - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -void _spDeformTimeline_dispose(spTimeline *timeline) { - spDeformTimeline *self = SUB_CAST(spDeformTimeline, timeline); - int i; - for (i = 0; i < self->super.super.frames->size; ++i) - FREE(self->frameVertices[i]); - FREE(self->frameVertices); - _spCurveTimeline_dispose(timeline); -} - -spDeformTimeline *spDeformTimeline_create(int framesCount, int frameVerticesCount, int bezierCount, int slotIndex, - spVertexAttachment *attachment) { - spDeformTimeline *self = NEW(spDeformTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_DEFORM << 32) | ((slotIndex << 16 | attachment->id) & 0xffffffff); - _spCurveTimeline_init(SUPER(self), framesCount, 1, bezierCount, ids, 1, SP_TIMELINE_DEFORM, - _spDeformTimeline_dispose, _spDeformTimeline_apply, _spDeformTimeline_setBezier); - self->frameVertices = CALLOC(float *, framesCount); - self->frameVerticesCount = frameVerticesCount; - self->slotIndex = slotIndex; - self->attachment = SUPER(attachment); - return self; -} - -void spDeformTimeline_setFrame(spDeformTimeline *self, int frame, float time, float *vertices) { - self->super.super.frames->items[frame] = time; - - FREE(self->frameVertices[frame]); - if (!vertices) - self->frameVertices[frame] = 0; - else { - self->frameVertices[frame] = MALLOC(float, self->frameVerticesCount); - memcpy(self->frameVertices[frame], vertices, self->frameVerticesCount * sizeof(float)); - } -} - -/**/ - -static const int SEQUENCE_ENTRIES = 3, MODE = 1, DELAY = 2; - -void _spSequenceTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - spSequenceTimeline *self = (spSequenceTimeline *) timeline; - spSlot *slot = skeleton->slots[self->slotIndex]; - spAttachment *slotAttachment; - float *frames; - int i, modeAndIndex, count, index, mode; - float before, delay; - spSequence *sequence = NULL; - - if (!slot->bone->active) return; - - slotAttachment = slot->attachment; - if (slotAttachment != self->attachment) { - if (slotAttachment == NULL) return; - switch (slotAttachment->type) { - case SP_ATTACHMENT_BOUNDING_BOX: - case SP_ATTACHMENT_CLIPPING: - case SP_ATTACHMENT_MESH: - case SP_ATTACHMENT_PATH: { - spVertexAttachment *vertexAttachment = SUB_CAST(spVertexAttachment, slot->attachment); - if (vertexAttachment->timelineAttachment != self->attachment) return; - break; - } - default: - return; - } - } - - if (self->attachment->type == SP_ATTACHMENT_REGION) sequence = ((spRegionAttachment *) self->attachment)->sequence; - if (self->attachment->type == SP_ATTACHMENT_MESH) sequence = ((spMeshAttachment *) self->attachment)->sequence; - if (!sequence) return; - - if (direction == SP_MIX_DIRECTION_OUT) { - if (blend == SP_MIX_BLEND_SETUP) slot->sequenceIndex = -1; - return; - } - - frames = self->super.frames->items; - if (time < frames[0]) { /* Time is before first frame. */ - if (blend == SP_MIX_BLEND_SETUP || blend == SP_MIX_BLEND_FIRST) slot->sequenceIndex = -1; - return; - } - - i = search2(self->super.frames, time, SEQUENCE_ENTRIES); - before = frames[i]; - modeAndIndex = (int) frames[i + MODE]; - delay = frames[i + DELAY]; - - index = modeAndIndex >> 4; - count = sequence->regions->size; - mode = modeAndIndex & 0xf; - if (mode != SP_SEQUENCE_MODE_HOLD) { - index += (int) (((time - before) / delay + 0.0001)); - switch (mode) { - case SP_SEQUENCE_MODE_ONCE: - index = MIN(count - 1, index); - break; - case SP_SEQUENCE_MODE_LOOP: - index %= count; - break; - case SP_SEQUENCE_MODE_PINGPONG: { - int n = (count << 1) - 2; - index = n == 0 ? 0 : index % n; - if (index >= count) index = n - index; - break; - } - case SP_SEQUENCE_MODE_ONCEREVERSE: - index = MAX(count - 1 - index, 0); - break; - case SP_SEQUENCE_MODE_LOOPREVERSE: - index = count - 1 - (index % count); - break; - case SP_SEQUENCE_MODE_PINGPONGREVERSE: { - int n = (count << 1) - 2; - index = n == 0 ? 0 : (index + count - 1) % n; - if (index >= count) index = n - index; - } - } - } - slot->sequenceIndex = index; - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(alpha); - UNUSED(direction); -} - -void _spSequenceTimeline_dispose(spTimeline *timeline) { - /* NO-OP */ - UNUSED(timeline); -} - -spSequenceTimeline *spSequenceTimeline_create(int framesCount, int slotIndex, spAttachment *attachment) { - int sequenceId = 0; - spSequenceTimeline *self = NEW(spSequenceTimeline); - spPropertyId ids[1]; - if (attachment->type == SP_ATTACHMENT_REGION) sequenceId = ((spRegionAttachment *) attachment)->sequence->id; - if (attachment->type == SP_ATTACHMENT_MESH) sequenceId = ((spMeshAttachment *) attachment)->sequence->id; - ids[0] = (spPropertyId) SP_PROPERTY_SEQUENCE << 32 | ((slotIndex << 16 | sequenceId) & 0xffffffff); - _spTimeline_init(SUPER(self), framesCount, SEQUENCE_ENTRIES, ids, 1, SP_TIMELINE_SEQUENCE, _spSequenceTimeline_dispose, - _spSequenceTimeline_apply, 0); - self->slotIndex = slotIndex; - self->attachment = attachment; - return self; -} - -void spSequenceTimeline_setFrame(spSequenceTimeline *self, int frame, float time, int mode, int index, float delay) { - float *frames = self->super.frames->items; - frame *= SEQUENCE_ENTRIES; - frames[frame] = time; - frames[frame + MODE] = mode | (index << 4); - frames[frame + DELAY] = delay; -} - -/**/ - -/** Fires events for frames > lastTime and <= time. */ -void _spEventTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, spEvent **firedEvents, - int *eventsCount, float alpha, spMixBlend blend, spMixDirection direction) { - spEventTimeline *self = (spEventTimeline *) timeline; - float *frames = self->super.frames->items; - int framesCount = self->super.frames->size; - int i; - if (!firedEvents) return; - - if (lastTime > time) { /* Fire events after last time for looped animations. */ - _spEventTimeline_apply(timeline, skeleton, lastTime, (float) INT_MAX, firedEvents, eventsCount, alpha, blend, - direction); - lastTime = -1; - } else if (lastTime >= frames[framesCount - 1]) { - /* Last time is after last i. */ - return; - } - - if (time < frames[0]) return; /* Time is before first i. */ - - if (lastTime < frames[0]) - i = 0; - else { - float frameTime; - i = search(self->super.frames, lastTime) + 1; - frameTime = frames[i]; - while (i > 0) { /* Fire multiple events with the same i. */ - if (frames[i - 1] != frameTime) break; - i--; - } - } - for (; i < framesCount && time >= frames[i]; ++i) { - firedEvents[*eventsCount] = self->events[i]; - (*eventsCount)++; - } - UNUSED(direction); -} - -void _spEventTimeline_dispose(spTimeline *timeline) { - spEventTimeline *self = SUB_CAST(spEventTimeline, timeline); - int i; - - for (i = 0; i < self->super.frames->size; ++i) - spEvent_dispose(self->events[i]); - FREE(self->events); -} - -spEventTimeline *spEventTimeline_create(int framesCount) { - spEventTimeline *self = NEW(spEventTimeline); - spPropertyId ids[1]; - ids[0] = (spPropertyId) SP_PROPERTY_EVENT << 32; - _spTimeline_init(SUPER(self), framesCount, 1, ids, 1, SP_TIMELINE_EVENT, _spEventTimeline_dispose, - _spEventTimeline_apply, 0); - self->events = CALLOC(spEvent *, framesCount); - return self; -} - -void spEventTimeline_setFrame(spEventTimeline *self, int frame, spEvent *event) { - self->super.frames->items[frame] = event->time; - - FREE(self->events[frame]); - self->events[frame] = event; -} - -/**/ - -void _spDrawOrderTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - int i; - const int *drawOrderToSetupIndex; - spDrawOrderTimeline *self = (spDrawOrderTimeline *) timeline; - float *frames = self->super.frames->items; - - if (direction == SP_MIX_DIRECTION_OUT) { - if (blend == SP_MIX_BLEND_SETUP) - memcpy(skeleton->drawOrder, skeleton->slots, self->slotsCount * sizeof(spSlot *)); - return; - } - - if (time < frames[0]) { - if (blend == SP_MIX_BLEND_SETUP || blend == SP_MIX_BLEND_FIRST) - memcpy(skeleton->drawOrder, skeleton->slots, self->slotsCount * sizeof(spSlot *)); - return; - } - - drawOrderToSetupIndex = self->drawOrders[search(self->super.frames, time)]; - if (!drawOrderToSetupIndex) - memcpy(skeleton->drawOrder, skeleton->slots, self->slotsCount * sizeof(spSlot *)); - else { - for (i = 0; i < self->slotsCount; ++i) - skeleton->drawOrder[i] = skeleton->slots[drawOrderToSetupIndex[i]]; - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(alpha); -} - -void _spDrawOrderTimeline_dispose(spTimeline *timeline) { - spDrawOrderTimeline *self = SUB_CAST(spDrawOrderTimeline, timeline); - int i; - - for (i = 0; i < self->super.frames->size; ++i) - FREE(self->drawOrders[i]); - FREE(self->drawOrders); -} - -spDrawOrderTimeline *spDrawOrderTimeline_create(int framesCount, int slotsCount) { - spDrawOrderTimeline *self = NEW(spDrawOrderTimeline); - spPropertyId ids[1]; - ids[0] = (spPropertyId) SP_PROPERTY_DRAWORDER << 32; - _spTimeline_init(SUPER(self), framesCount, 1, ids, 1, SP_TIMELINE_DRAWORDER, _spDrawOrderTimeline_dispose, - _spDrawOrderTimeline_apply, 0); - - self->drawOrders = CALLOC(int *, framesCount); - self->slotsCount = slotsCount; - - return self; -} - -void spDrawOrderTimeline_setFrame(spDrawOrderTimeline *self, int frame, float time, const int *drawOrder) { - self->super.frames->items[frame] = time; - - FREE(self->drawOrders[frame]); - if (!drawOrder) - self->drawOrders[frame] = 0; - else { - self->drawOrders[frame] = MALLOC(int, self->slotsCount); - memcpy(self->drawOrders[frame], drawOrder, self->slotsCount * sizeof(int)); - } -} - -/**/ -void _spInheritTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spInheritTimeline *self = (spInheritTimeline *) timeline; - spBone *bone = skeleton->bones[self->boneIndex]; - float *frames = self->super.frames->items; - if (!bone->active) return; - - if (direction == SP_MIX_DIRECTION_OUT) { - if (blend == SP_MIX_BLEND_SETUP) bone->inherit = bone->data->inherit; - return; - } - - if (time < frames[0]) { - if (blend == SP_MIX_BLEND_SETUP || blend == SP_MIX_BLEND_FIRST) bone->inherit = bone->data->inherit; - return; - } - int idx = search2(self->super.frames, time, 2) + 1; - bone->inherit = (spInherit) frames[idx]; - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(alpha); - UNUSED(direction); -} - -void _spInheritTimeline_dispose(spTimeline *timeline) { - // no-op, spTimeline_dispose disposes frames. - UNUSED(timeline); -} - -spInheritTimeline *spInheritTimeline_create(int framesCount, int boneIndex) { - spInheritTimeline *self = NEW(spInheritTimeline); - spPropertyId ids[1]; - ids[0] = (spPropertyId) SP_PROPERTY_INHERIT << 32; - _spTimeline_init(SUPER(self), framesCount, 2, ids, 1, SP_TIMELINE_INHERIT, _spInheritTimeline_dispose, - _spInheritTimeline_apply, 0); - - self->boneIndex = boneIndex; - - return self; -} - -void spInheritTimeline_setFrame(spInheritTimeline *self, int frame, float time, spInherit inherit) { - frame *= 2; - self->super.frames->items[frame] = time; - self->super.frames->items[frame + 1] = inherit; -} - - -/**/ - -static const int IKCONSTRAINT_ENTRIES = 6; -static const int IKCONSTRAINT_MIX = 1, IKCONSTRAINT_SOFTNESS = 2, IKCONSTRAINT_BEND_DIRECTION = 3, IKCONSTRAINT_COMPRESS = 4, IKCONSTRAINT_STRETCH = 5; - -void _spIkConstraintTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - int i, curveType; - float mix, softness, t; - spIkConstraint *constraint; - spIkConstraintTimeline *self = (spIkConstraintTimeline *) timeline; - float *frames = self->super.super.frames->items; - float *curves = self->super.curves->items; - - constraint = skeleton->ikConstraints[self->ikConstraintIndex]; - if (!constraint->active) return; - - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - constraint->mix = constraint->data->mix; - constraint->softness = constraint->data->softness; - constraint->bendDirection = constraint->data->bendDirection; - constraint->compress = constraint->data->compress; - constraint->stretch = constraint->data->stretch; - return; - case SP_MIX_BLEND_FIRST: - constraint->mix += (constraint->data->mix - constraint->mix) * alpha; - constraint->softness += (constraint->data->softness - constraint->softness) * alpha; - constraint->bendDirection = constraint->data->bendDirection; - constraint->compress = constraint->data->compress; - constraint->stretch = constraint->data->stretch; - return; - default: - return; - } - } - - i = search2(self->super.super.frames, time, IKCONSTRAINT_ENTRIES); - curveType = (int) curves[i / IKCONSTRAINT_ENTRIES]; - switch (curveType) { - case CURVE_LINEAR: { - float before = frames[i]; - mix = frames[i + IKCONSTRAINT_MIX]; - softness = frames[i + IKCONSTRAINT_SOFTNESS]; - t = (time - before) / (frames[i + IKCONSTRAINT_ENTRIES] - before); - mix += (frames[i + IKCONSTRAINT_ENTRIES + IKCONSTRAINT_MIX] - mix) * t; - softness += (frames[i + IKCONSTRAINT_ENTRIES + IKCONSTRAINT_SOFTNESS] - softness) * t; - break; - } - case CURVE_STEPPED: { - mix = frames[i + IKCONSTRAINT_MIX]; - softness = frames[i + IKCONSTRAINT_SOFTNESS]; - break; - } - default: { - mix = _spCurveTimeline_getBezierValue(SUPER(self), time, i, IKCONSTRAINT_MIX, curveType - CURVE_BEZIER); - softness = _spCurveTimeline_getBezierValue(SUPER(self), time, i, IKCONSTRAINT_SOFTNESS, - curveType + BEZIER_SIZE - CURVE_BEZIER); - } - } - - if (blend == SP_MIX_BLEND_SETUP) { - constraint->mix = constraint->data->mix + (mix - constraint->data->mix) * alpha; - constraint->softness = constraint->data->softness + (softness - constraint->data->softness) * alpha; - - if (direction == SP_MIX_DIRECTION_OUT) { - constraint->bendDirection = constraint->data->bendDirection; - constraint->compress = constraint->data->compress; - constraint->stretch = constraint->data->stretch; - } else { - constraint->bendDirection = frames[i + IKCONSTRAINT_BEND_DIRECTION]; - constraint->compress = frames[i + IKCONSTRAINT_COMPRESS] != 0; - constraint->stretch = frames[i + IKCONSTRAINT_STRETCH] != 0; - } - } else { - constraint->mix += (mix - constraint->mix) * alpha; - constraint->softness += (softness - constraint->softness) * alpha; - if (direction == SP_MIX_DIRECTION_IN) { - constraint->bendDirection = frames[i + IKCONSTRAINT_BEND_DIRECTION]; - constraint->compress = frames[i + IKCONSTRAINT_COMPRESS] != 0; - constraint->stretch = frames[i + IKCONSTRAINT_STRETCH] != 0; - } - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); -} - -spIkConstraintTimeline *spIkConstraintTimeline_create(int framesCount, int bezierCount, int ikConstraintIndex) { - spIkConstraintTimeline *timeline = NEW(spIkConstraintTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_IKCONSTRAINT << 32) | ikConstraintIndex; - _spCurveTimeline_init(SUPER(timeline), framesCount, IKCONSTRAINT_ENTRIES, bezierCount, ids, 1, - SP_TIMELINE_IKCONSTRAINT, _spCurveTimeline_dispose, _spIkConstraintTimeline_apply, - _spCurveTimeline_setBezier); - timeline->ikConstraintIndex = ikConstraintIndex; - return timeline; -} - -void spIkConstraintTimeline_setFrame(spIkConstraintTimeline *self, int frame, float time, float mix, float softness, - int bendDirection, int /*boolean*/ compress, int /*boolean*/ stretch) { - float *frames = self->super.super.frames->items; - frame *= IKCONSTRAINT_ENTRIES; - frames[frame] = time; - frames[frame + IKCONSTRAINT_MIX] = mix; - frames[frame + IKCONSTRAINT_SOFTNESS] = softness; - frames[frame + IKCONSTRAINT_BEND_DIRECTION] = (float) bendDirection; - frames[frame + IKCONSTRAINT_COMPRESS] = compress ? 1 : 0; - frames[frame + IKCONSTRAINT_STRETCH] = stretch ? 1 : 0; -} - -/**/ -static const int TRANSFORMCONSTRAINT_ENTRIES = 7; -static const int TRANSFORMCONSTRAINT_ROTATE = 1; -static const int TRANSFORMCONSTRAINT_X = 2; -static const int TRANSFORMCONSTRAINT_Y = 3; -static const int TRANSFORMCONSTRAINT_SCALEX = 4; -static const int TRANSFORMCONSTRAINT_SCALEY = 5; -static const int TRANSFORMCONSTRAINT_SHEARY = 6; - -void _spTransformConstraintTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - int i, curveType; - float rotate, x, y, scaleX, scaleY, shearY, t; - spTransformConstraint *constraint; - spTransformConstraintTimeline *self = (spTransformConstraintTimeline *) timeline; - float *frames; - float *curves; - spTransformConstraintData *data; - - constraint = skeleton->transformConstraints[self->transformConstraintIndex]; - if (!constraint->active) return; - - frames = self->super.super.frames->items; - curves = self->super.curves->items; - - data = constraint->data; - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - constraint->mixRotate = data->mixRotate; - constraint->mixX = data->mixX; - constraint->mixY = data->mixY; - constraint->mixScaleX = data->mixScaleX; - constraint->mixScaleY = data->mixScaleY; - constraint->mixShearY = data->mixShearY; - return; - case SP_MIX_BLEND_FIRST: - constraint->mixRotate += (data->mixRotate - constraint->mixRotate) * alpha; - constraint->mixX += (data->mixX - constraint->mixX) * alpha; - constraint->mixY += (data->mixY - constraint->mixY) * alpha; - constraint->mixScaleX += (data->mixScaleX - constraint->mixScaleX) * alpha; - constraint->mixScaleY += (data->mixScaleY - constraint->mixScaleY) * alpha; - constraint->mixShearY += (data->mixShearY - constraint->mixShearY) * alpha; - return; - default: - return; - } - } - - i = search2(self->super.super.frames, time, TRANSFORMCONSTRAINT_ENTRIES); - curveType = (int) curves[i / TRANSFORMCONSTRAINT_ENTRIES]; - switch (curveType) { - case CURVE_LINEAR: { - float before = frames[i]; - rotate = frames[i + TRANSFORMCONSTRAINT_ROTATE]; - x = frames[i + TRANSFORMCONSTRAINT_X]; - y = frames[i + TRANSFORMCONSTRAINT_Y]; - scaleX = frames[i + TRANSFORMCONSTRAINT_SCALEX]; - scaleY = frames[i + TRANSFORMCONSTRAINT_SCALEY]; - shearY = frames[i + TRANSFORMCONSTRAINT_SHEARY]; - t = (time - before) / (frames[i + TRANSFORMCONSTRAINT_ENTRIES] - before); - rotate += (frames[i + TRANSFORMCONSTRAINT_ENTRIES + TRANSFORMCONSTRAINT_ROTATE] - rotate) * t; - x += (frames[i + TRANSFORMCONSTRAINT_ENTRIES + TRANSFORMCONSTRAINT_X] - x) * t; - y += (frames[i + TRANSFORMCONSTRAINT_ENTRIES + TRANSFORMCONSTRAINT_Y] - y) * t; - scaleX += (frames[i + TRANSFORMCONSTRAINT_ENTRIES + TRANSFORMCONSTRAINT_SCALEX] - scaleX) * t; - scaleY += (frames[i + TRANSFORMCONSTRAINT_ENTRIES + TRANSFORMCONSTRAINT_SCALEY] - scaleY) * t; - shearY += (frames[i + TRANSFORMCONSTRAINT_ENTRIES + TRANSFORMCONSTRAINT_SHEARY] - shearY) * t; - break; - } - case CURVE_STEPPED: { - rotate = frames[i + TRANSFORMCONSTRAINT_ROTATE]; - x = frames[i + TRANSFORMCONSTRAINT_X]; - y = frames[i + TRANSFORMCONSTRAINT_Y]; - scaleX = frames[i + TRANSFORMCONSTRAINT_SCALEX]; - scaleY = frames[i + TRANSFORMCONSTRAINT_SCALEY]; - shearY = frames[i + TRANSFORMCONSTRAINT_SHEARY]; - break; - } - default: { - rotate = _spCurveTimeline_getBezierValue(SUPER(self), time, i, TRANSFORMCONSTRAINT_ROTATE, - curveType - CURVE_BEZIER); - x = _spCurveTimeline_getBezierValue(SUPER(self), time, i, TRANSFORMCONSTRAINT_X, - curveType + BEZIER_SIZE - CURVE_BEZIER); - y = _spCurveTimeline_getBezierValue(SUPER(self), time, i, TRANSFORMCONSTRAINT_Y, - curveType + BEZIER_SIZE * 2 - CURVE_BEZIER); - scaleX = _spCurveTimeline_getBezierValue(SUPER(self), time, i, TRANSFORMCONSTRAINT_SCALEX, - curveType + BEZIER_SIZE * 3 - CURVE_BEZIER); - scaleY = _spCurveTimeline_getBezierValue(SUPER(self), time, i, TRANSFORMCONSTRAINT_SCALEY, - curveType + BEZIER_SIZE * 4 - CURVE_BEZIER); - shearY = _spCurveTimeline_getBezierValue(SUPER(self), time, i, TRANSFORMCONSTRAINT_SHEARY, - curveType + BEZIER_SIZE * 5 - CURVE_BEZIER); - } - } - - if (blend == SP_MIX_BLEND_SETUP) { - constraint->mixRotate = data->mixRotate + (rotate - data->mixRotate) * alpha; - constraint->mixX = data->mixX + (x - data->mixX) * alpha; - constraint->mixY = data->mixY + (y - data->mixY) * alpha; - constraint->mixScaleX = data->mixScaleX + (scaleX - data->mixScaleX) * alpha; - constraint->mixScaleY = data->mixScaleY + (scaleY - data->mixScaleY) * alpha; - constraint->mixShearY = data->mixShearY + (shearY - data->mixShearY) * alpha; - } else { - constraint->mixRotate += (rotate - constraint->mixRotate) * alpha; - constraint->mixX += (x - constraint->mixX) * alpha; - constraint->mixY += (y - constraint->mixY) * alpha; - constraint->mixScaleX += (scaleX - constraint->mixScaleX) * alpha; - constraint->mixScaleY += (scaleY - constraint->mixScaleY) * alpha; - constraint->mixShearY += (shearY - constraint->mixShearY) * alpha; - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spTransformConstraintTimeline * -spTransformConstraintTimeline_create(int framesCount, int bezierCount, int transformConstraintIndex) { - spTransformConstraintTimeline *timeline = NEW(spTransformConstraintTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_TRANSFORMCONSTRAINT << 32) | transformConstraintIndex; - _spCurveTimeline_init(SUPER(timeline), framesCount, TRANSFORMCONSTRAINT_ENTRIES, bezierCount, ids, 1, - SP_TIMELINE_TRANSFORMCONSTRAINT, _spCurveTimeline_dispose, - _spTransformConstraintTimeline_apply, _spCurveTimeline_setBezier); - timeline->transformConstraintIndex = transformConstraintIndex; - return timeline; -} - -void spTransformConstraintTimeline_setFrame(spTransformConstraintTimeline *self, int frame, float time, float mixRotate, - float mixX, float mixY, float mixScaleX, float mixScaleY, float mixShearY) { - float *frames = self->super.super.frames->items; - frame *= TRANSFORMCONSTRAINT_ENTRIES; - frames[frame] = time; - frames[frame + TRANSFORMCONSTRAINT_ROTATE] = mixRotate; - frames[frame + TRANSFORMCONSTRAINT_X] = mixX; - frames[frame + TRANSFORMCONSTRAINT_Y] = mixY; - frames[frame + TRANSFORMCONSTRAINT_SCALEX] = mixScaleX; - frames[frame + TRANSFORMCONSTRAINT_SCALEY] = mixScaleY; - frames[frame + TRANSFORMCONSTRAINT_SHEARY] = mixShearY; -} - -/**/ -static const int PATHCONSTRAINTPOSITION_ENTRIES = 2; -static const int PATHCONSTRAINTPOSITION_VALUE = 1; - -void _spPathConstraintPositionTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spPathConstraintPositionTimeline *self = (spPathConstraintPositionTimeline *) timeline; - spPathConstraint *constraint = skeleton->pathConstraints[self->pathConstraintIndex]; - if (constraint->active) constraint->position = spCurveTimeline1_getAbsoluteValue(SUPER(self), time, alpha, blend, constraint->position, constraint->data->position); - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spPathConstraintPositionTimeline * -spPathConstraintPositionTimeline_create(int framesCount, int bezierCount, int pathConstraintIndex) { - spPathConstraintPositionTimeline *timeline = NEW(spPathConstraintPositionTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_PATHCONSTRAINT_POSITION << 32) | pathConstraintIndex; - _spCurveTimeline_init(SUPER(timeline), framesCount, PATHCONSTRAINTPOSITION_ENTRIES, bezierCount, ids, 1, - SP_TIMELINE_PATHCONSTRAINTPOSITION, _spCurveTimeline_dispose, - _spPathConstraintPositionTimeline_apply, _spCurveTimeline_setBezier); - timeline->pathConstraintIndex = pathConstraintIndex; - return timeline; -} - -void spPathConstraintPositionTimeline_setFrame(spPathConstraintPositionTimeline *self, int frame, float time, float value) { - float *frames = self->super.super.frames->items; - frame *= PATHCONSTRAINTPOSITION_ENTRIES; - frames[frame] = time; - frames[frame + PATHCONSTRAINTPOSITION_VALUE] = value; -} - -/**/ -static const int PATHCONSTRAINTSPACING_ENTRIES = 2; -static const int PATHCONSTRAINTSPACING_VALUE = 1; - -void _spPathConstraintSpacingTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spPathConstraintSpacingTimeline *self = (spPathConstraintSpacingTimeline *) timeline; - spPathConstraint *constraint = skeleton->pathConstraints[self->pathConstraintIndex]; - if (constraint->active) constraint->spacing = spCurveTimeline1_getAbsoluteValue(SUPER(self), time, alpha, blend, constraint->spacing, constraint->data->spacing); - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spPathConstraintSpacingTimeline * -spPathConstraintSpacingTimeline_create(int framesCount, int bezierCount, int pathConstraintIndex) { - spPathConstraintSpacingTimeline *timeline = NEW(spPathConstraintSpacingTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_PATHCONSTRAINT_SPACING << 32) | pathConstraintIndex; - _spCurveTimeline_init(SUPER(timeline), framesCount, PATHCONSTRAINTSPACING_ENTRIES, bezierCount, ids, 1, - SP_TIMELINE_PATHCONSTRAINTSPACING, _spCurveTimeline_dispose, - _spPathConstraintSpacingTimeline_apply, _spCurveTimeline_setBezier); - timeline->pathConstraintIndex = pathConstraintIndex; - return timeline; -} - -void spPathConstraintSpacingTimeline_setFrame(spPathConstraintSpacingTimeline *self, int frame, float time, float value) { - float *frames = self->super.super.frames->items; - frame *= PATHCONSTRAINTSPACING_ENTRIES; - frames[frame] = time; - frames[frame + PATHCONSTRAINTSPACING_VALUE] = value; -} - -/**/ - -static const int PATHCONSTRAINTMIX_ENTRIES = 4; -static const int PATHCONSTRAINTMIX_ROTATE = 1; -static const int PATHCONSTRAINTMIX_X = 2; -static const int PATHCONSTRAINTMIX_Y = 3; - -void _spPathConstraintMixTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - int i, curveType; - float rotate, x, y, t; - spPathConstraint *constraint; - spPathConstraintMixTimeline *self = (spPathConstraintMixTimeline *) timeline; - float *frames; - float *curves; - - constraint = skeleton->pathConstraints[self->pathConstraintIndex]; - if (!constraint->active) return; - - frames = self->super.super.frames->items; - curves = self->super.curves->items; - - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - constraint->mixRotate = constraint->data->mixRotate; - constraint->mixX = constraint->data->mixX; - constraint->mixY = constraint->data->mixY; - return; - case SP_MIX_BLEND_FIRST: - constraint->mixRotate += (constraint->data->mixRotate - constraint->mixRotate) * alpha; - constraint->mixX += (constraint->data->mixX - constraint->mixX) * alpha; - constraint->mixY += (constraint->data->mixY - constraint->mixY) * alpha; - default: { - } - } - return; - } - - i = search2(self->super.super.frames, time, PATHCONSTRAINTMIX_ENTRIES); - curveType = (int) curves[i >> 2]; - switch (curveType) { - case CURVE_LINEAR: { - float before = frames[i]; - rotate = frames[i + PATHCONSTRAINTMIX_ROTATE]; - x = frames[i + PATHCONSTRAINTMIX_X]; - y = frames[i + PATHCONSTRAINTMIX_Y]; - t = (time - before) / (frames[i + PATHCONSTRAINTMIX_ENTRIES] - before); - rotate += (frames[i + PATHCONSTRAINTMIX_ENTRIES + PATHCONSTRAINTMIX_ROTATE] - rotate) * t; - x += (frames[i + PATHCONSTRAINTMIX_ENTRIES + PATHCONSTRAINTMIX_X] - x) * t; - y += (frames[i + PATHCONSTRAINTMIX_ENTRIES + PATHCONSTRAINTMIX_Y] - y) * t; - break; - } - case CURVE_STEPPED: { - rotate = frames[i + PATHCONSTRAINTMIX_ROTATE]; - x = frames[i + PATHCONSTRAINTMIX_X]; - y = frames[i + PATHCONSTRAINTMIX_Y]; - break; - } - default: { - rotate = _spCurveTimeline_getBezierValue(SUPER(self), time, i, PATHCONSTRAINTMIX_ROTATE, - curveType - CURVE_BEZIER); - x = _spCurveTimeline_getBezierValue(SUPER(self), time, i, PATHCONSTRAINTMIX_X, - curveType + BEZIER_SIZE - CURVE_BEZIER); - y = _spCurveTimeline_getBezierValue(SUPER(self), time, i, PATHCONSTRAINTMIX_Y, - curveType + BEZIER_SIZE * 2 - CURVE_BEZIER); - } - } - - if (blend == SP_MIX_BLEND_SETUP) { - spPathConstraintData *data = constraint->data; - constraint->mixRotate = data->mixRotate + (rotate - data->mixRotate) * alpha; - constraint->mixX = data->mixX + (x - data->mixX) * alpha; - constraint->mixY = data->mixY + (y - data->mixY) * alpha; - } else { - constraint->mixRotate += (rotate - constraint->mixRotate) * alpha; - constraint->mixX += (x - constraint->mixX) * alpha; - constraint->mixY += (y - constraint->mixY) * alpha; - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spPathConstraintMixTimeline * -spPathConstraintMixTimeline_create(int framesCount, int bezierCount, int pathConstraintIndex) { - spPathConstraintMixTimeline *timeline = NEW(spPathConstraintMixTimeline); - spPropertyId ids[1]; - ids[0] = ((spPropertyId) SP_PROPERTY_PATHCONSTRAINT_MIX << 32) | pathConstraintIndex; - _spCurveTimeline_init(SUPER(timeline), framesCount, PATHCONSTRAINTMIX_ENTRIES, bezierCount, ids, 1, - SP_TIMELINE_PATHCONSTRAINTMIX, _spCurveTimeline_dispose, _spPathConstraintMixTimeline_apply, - _spCurveTimeline_setBezier); - timeline->pathConstraintIndex = pathConstraintIndex; - return timeline; -} - -void spPathConstraintMixTimeline_setFrame(spPathConstraintMixTimeline *self, int frame, float time, float mixRotate, - float mixX, float mixY) { - float *frames = self->super.super.frames->items; - frame *= PATHCONSTRAINTMIX_ENTRIES; - frames[frame] = time; - frames[frame + PATHCONSTRAINTMIX_ROTATE] = mixRotate; - frames[frame + PATHCONSTRAINTMIX_X] = mixX; - frames[frame + PATHCONSTRAINTMIX_Y] = mixY; -} - -/**/ - -int /*bool*/ _spPhysicsConstraintTimeline_global(spPhysicsConstraintData *data, spTimelineType type) { - switch (type) { - case SP_TIMELINE_PHYSICSCONSTRAINT_INERTIA: - return data->inertiaGlobal; - case SP_TIMELINE_PHYSICSCONSTRAINT_STRENGTH: - return data->strengthGlobal; - case SP_TIMELINE_PHYSICSCONSTRAINT_DAMPING: - return data->dampingGlobal; - case SP_TIMELINE_PHYSICSCONSTRAINT_MASS: - return data->massGlobal; - case SP_TIMELINE_PHYSICSCONSTRAINT_WIND: - return data->windGlobal; - case SP_TIMELINE_PHYSICSCONSTRAINT_GRAVITY: - return data->gravityGlobal; - case SP_TIMELINE_PHYSICSCONSTRAINT_MIX: - return data->mixGlobal; - default: - // should never happen - return 0; - } -} - -void _spPhysicsConstraintTimeline_set(spPhysicsConstraint *constraint, spTimelineType type, float value) { - switch (type) { - case SP_TIMELINE_PHYSICSCONSTRAINT_INERTIA: - constraint->inertia = value; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_STRENGTH: - constraint->strength = value; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_DAMPING: - constraint->damping = value; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_MASS: - constraint->massInverse = value; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_WIND: - constraint->wind = value; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_GRAVITY: - constraint->gravity = value; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_MIX: - constraint->mix = value; - break; - default: - // should never happen - break; - } -} - -float _spPhysicsConstraintTimeline_get(spPhysicsConstraint *constraint, spTimelineType type) { - switch (type) { - case SP_TIMELINE_PHYSICSCONSTRAINT_INERTIA: - return constraint->inertia; - case SP_TIMELINE_PHYSICSCONSTRAINT_STRENGTH: - return constraint->strength; - case SP_TIMELINE_PHYSICSCONSTRAINT_DAMPING: - return constraint->damping; - case SP_TIMELINE_PHYSICSCONSTRAINT_MASS: - return constraint->massInverse; - case SP_TIMELINE_PHYSICSCONSTRAINT_WIND: - return constraint->wind; - case SP_TIMELINE_PHYSICSCONSTRAINT_GRAVITY: - return constraint->gravity; - case SP_TIMELINE_PHYSICSCONSTRAINT_MIX: - return constraint->mix; - default: - // should never happen - return 0; - } -} - -float _spPhysicsConstraintTimeline_setup(spPhysicsConstraint *constraint, spTimelineType type) { - switch (type) { - case SP_TIMELINE_PHYSICSCONSTRAINT_INERTIA: - return constraint->data->inertia; - case SP_TIMELINE_PHYSICSCONSTRAINT_STRENGTH: - return constraint->data->strength; - case SP_TIMELINE_PHYSICSCONSTRAINT_DAMPING: - return constraint->data->damping; - case SP_TIMELINE_PHYSICSCONSTRAINT_MASS: - return constraint->data->massInverse; - case SP_TIMELINE_PHYSICSCONSTRAINT_WIND: - return constraint->data->wind; - case SP_TIMELINE_PHYSICSCONSTRAINT_GRAVITY: - return constraint->data->gravity; - case SP_TIMELINE_PHYSICSCONSTRAINT_MIX: - return constraint->data->mix; - default: - // should never happen - return 0; - } -} - -void _spPhysicsConstraintTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spPhysicsConstraintTimeline *self = SUB_CAST(spPhysicsConstraintTimeline, timeline); - spTimelineType type = self->super.super.type; - float *frames = self->super.super.frames->items; - if (self->physicsConstraintIndex == -1) { - float value = time >= frames[0] ? spCurveTimeline1_getCurveValue(SUPER(self), time) : 0; - - spPhysicsConstraint **physicsConstraints = skeleton->physicsConstraints; - for (int i = 0; i < skeleton->physicsConstraintsCount; i++) { - spPhysicsConstraint *constraint = physicsConstraints[i]; - if (constraint->active && _spPhysicsConstraintTimeline_global(constraint->data, type)) - _spPhysicsConstraintTimeline_set(constraint, type, spCurveTimeline1_getAbsoluteValue2(SUPER(self), time, alpha, blend, _spPhysicsConstraintTimeline_get(constraint, type), _spPhysicsConstraintTimeline_setup(constraint, type), value)); - } - } else { - spPhysicsConstraint *constraint = skeleton->physicsConstraints[self->physicsConstraintIndex]; - if (constraint->active) _spPhysicsConstraintTimeline_set(constraint, type, spCurveTimeline1_getAbsoluteValue(SUPER(self), time, alpha, blend, _spPhysicsConstraintTimeline_get(constraint, type), _spPhysicsConstraintTimeline_setup(constraint, type))); - } - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(direction); -} - -spPhysicsConstraintTimeline * -spPhysicsConstraintTimeline_create(int frameCount, int bezierCount, int physicsConstraintIndex, spTimelineType type) { - spPhysicsConstraintTimeline *timeline = NEW(spPhysicsConstraintTimeline); - spPropertyId ids[1]; - spPropertyId id; - switch (type) { - case SP_TIMELINE_PHYSICSCONSTRAINT_INERTIA: - id = SP_PROPERTY_PHYSICSCONSTRAINT_INERTIA; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_STRENGTH: - id = SP_PROPERTY_PHYSICSCONSTRAINT_STRENGTH; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_DAMPING: - id = SP_PROPERTY_PHYSICSCONSTRAINT_DAMPING; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_MASS: - id = SP_PROPERTY_PHYSICSCONSTRAINT_MASS; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_WIND: - id = SP_PROPERTY_PHYSICSCONSTRAINT_WIND; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_GRAVITY: - id = SP_PROPERTY_PHYSICSCONSTRAINT_GRAVITY; - break; - case SP_TIMELINE_PHYSICSCONSTRAINT_MIX: - id = SP_PROPERTY_PHYSICSCONSTRAINT_MIX; - break; - default: - // should never happen - id = SP_PROPERTY_PHYSICSCONSTRAINT_INERTIA; - } - ids[0] = ((spPropertyId) id << 32) | physicsConstraintIndex; - _spCurveTimeline_init(SUPER(timeline), frameCount, CURVE1_ENTRIES, bezierCount, ids, 1, type, - _spCurveTimeline_dispose, _spPhysicsConstraintTimeline_apply, _spCurveTimeline_setBezier); - timeline->physicsConstraintIndex = physicsConstraintIndex; - return timeline; -} - -void spPhysicsConstraintTimeline_setFrame(spPhysicsConstraintTimeline *self, int frame, float time, float value) { - spCurveTimeline1_setFrame(SUPER(self), frame, time, value); -} - -/**/ -void _spPhysicsConstraintResetTimeline_apply(spTimeline *timeline, spSkeleton *skeleton, float lastTime, float time, - spEvent **firedEvents, int *eventsCount, float alpha, spMixBlend blend, - spMixDirection direction) { - spPhysicsConstraintResetTimeline *self = (spPhysicsConstraintResetTimeline *) timeline; - spPhysicsConstraint *constraint = NULL; - if (self->physicsConstraintIndex != -1) { - constraint = skeleton->physicsConstraints[self->physicsConstraintIndex]; - if (!constraint->active) return; - } - - float *frames = SUPER(self)->frames->items; - if (lastTime > time) {// Apply after lastTime for looped animations. - _spPhysicsConstraintResetTimeline_apply(SUPER(self), skeleton, lastTime, INT_MAX, NULL, 0, alpha, blend, direction); - lastTime = -1; - } else if (lastTime >= frames[SUPER(self)->frameCount - 1])// Last time is after last frame. - return; - if (time < frames[0]) return; - - if (lastTime < frames[0] || time >= frames[search(self->super.frames, lastTime) + 1]) { - if (constraint != NULL) - spPhysicsConstraint_reset(constraint); - else { - spPhysicsConstraint **physicsConstraints = skeleton->physicsConstraints; - for (int i = 0; i < skeleton->physicsConstraintsCount; i++) { - constraint = physicsConstraints[i]; - if (constraint->active) spPhysicsConstraint_reset(constraint); - } - } - } - - UNUSED(lastTime); - UNUSED(firedEvents); - UNUSED(eventsCount); - UNUSED(alpha); - UNUSED(direction); -} - -void _spPhysicsConstraintResetTimeline_dispose(spTimeline *timeline) { - // no-op, spTimeline_dispose disposes frames. - UNUSED(timeline); -} - -spPhysicsConstraintResetTimeline *spPhysicsConstraintResetTimeline_create(int framesCount, int physicsConstraintIndex) { - spPhysicsConstraintResetTimeline *self = NEW(spPhysicsConstraintResetTimeline); - spPropertyId ids[1]; - ids[0] = (spPropertyId) SP_PROPERTY_PHYSICSCONSTRAINT_RESET << 32; - _spTimeline_init(SUPER(self), framesCount, 1, ids, 1, SP_TIMELINE_PHYSICSCONSTRAINT_RESET, _spPhysicsConstraintResetTimeline_dispose, - _spPhysicsConstraintResetTimeline_apply, 0); - - self->physicsConstraintIndex = physicsConstraintIndex; - - return self; -} - -void spPhysicsConstraintResetTimeline_setFrame(spPhysicsConstraintResetTimeline *self, int frame, float time) { - self->super.frames->items[frame] = time; -} diff --git a/spine-c/spine-c/src/spine/AnimationState.c b/spine-c/spine-c/src/spine/AnimationState.c deleted file mode 100644 index c380f0807..000000000 --- a/spine-c/spine-c/src/spine/AnimationState.c +++ /dev/null @@ -1,1134 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -#define SUBSEQUENT 0 -#define FIRST 1 -#define HOLD_SUBSEQUENT 2 -#define HOLD_FIRST 3 -#define HOLD_MIX 4 - -#define SETUP 1 -#define CURRENT 2 - -_SP_ARRAY_IMPLEMENT_TYPE(spTrackEntryArray, spTrackEntry *) - -static spAnimation *SP_EMPTY_ANIMATION = 0; - -void spAnimationState_disposeStatics(void) { - if (SP_EMPTY_ANIMATION) spAnimation_dispose(SP_EMPTY_ANIMATION); - SP_EMPTY_ANIMATION = 0; -} - -/* Forward declaration of some "private" functions so we can keep - the same function order in C as we have method order in Java. */ -void _spAnimationState_disposeTrackEntry(spTrackEntry *entry); - -void _spAnimationState_disposeTrackEntries(spAnimationState *state, spTrackEntry *entry); - -int /*boolean*/ _spAnimationState_updateMixingFrom(spAnimationState *self, spTrackEntry *entry, float delta); - -float _spAnimationState_applyMixingFrom(spAnimationState *self, spTrackEntry *entry, spSkeleton *skeleton, - spMixBlend currentBlend); - -void _spAnimationState_applyRotateTimeline(spAnimationState *self, spTimeline *timeline, spSkeleton *skeleton, float time, - float alpha, spMixBlend blend, float *timelinesRotation, int i, - int /*boolean*/ firstFrame); - -void _spAnimationState_applyAttachmentTimeline(spAnimationState *self, spTimeline *timeline, spSkeleton *skeleton, - float animationTime, spMixBlend blend, int /*bool*/ firstFrame); - -void _spAnimationState_queueEvents(spAnimationState *self, spTrackEntry *entry, float animationTime); - -void _spAnimationState_setCurrent(spAnimationState *self, int index, spTrackEntry *current, int /*boolean*/ interrupt); - -spTrackEntry *_spAnimationState_expandToIndex(spAnimationState *self, int index); - -spTrackEntry * -_spAnimationState_trackEntry(spAnimationState *self, int trackIndex, spAnimation *animation, int /*boolean*/ loop, - spTrackEntry *last); - -void _spAnimationState_animationsChanged(spAnimationState *self); - -float *_spAnimationState_resizeTimelinesRotation(spTrackEntry *entry, int newSize); - -void _spAnimationState_ensureCapacityPropertyIDs(spAnimationState *self, int capacity); - -int _spAnimationState_addPropertyID(spAnimationState *self, spPropertyId id); - -void _spTrackEntry_computeHold(spTrackEntry *self, spAnimationState *state); - -_spEventQueue *_spEventQueue_create(_spAnimationState *state) { - _spEventQueue *self = CALLOC(_spEventQueue, 1); - self->state = state; - self->objectsCount = 0; - self->objectsCapacity = 16; - self->objects = CALLOC(_spEventQueueItem, self->objectsCapacity); - self->drainDisabled = 0; - return self; -} - -void _spEventQueue_free(_spEventQueue *self) { - FREE(self->objects); - FREE(self); -} - -void _spEventQueue_ensureCapacity(_spEventQueue *self, int newElements) { - if (self->objectsCount + newElements > self->objectsCapacity) { - _spEventQueueItem *newObjects; - self->objectsCapacity <<= 1; - newObjects = CALLOC(_spEventQueueItem, self->objectsCapacity); - memcpy(newObjects, self->objects, sizeof(_spEventQueueItem) * self->objectsCount); - FREE(self->objects); - self->objects = newObjects; - } -} - -void _spEventQueue_addType(_spEventQueue *self, spEventType type) { - _spEventQueue_ensureCapacity(self, 1); - self->objects[self->objectsCount++].type = type; -} - -void _spEventQueue_addEntry(_spEventQueue *self, spTrackEntry *entry) { - _spEventQueue_ensureCapacity(self, 1); - self->objects[self->objectsCount++].entry = entry; -} - -void _spEventQueue_addEvent(_spEventQueue *self, spEvent *event) { - _spEventQueue_ensureCapacity(self, 1); - self->objects[self->objectsCount++].event = event; -} - -void _spEventQueue_start(_spEventQueue *self, spTrackEntry *entry) { - _spEventQueue_addType(self, SP_ANIMATION_START); - _spEventQueue_addEntry(self, entry); - self->state->animationsChanged = 1; -} - -void _spEventQueue_interrupt(_spEventQueue *self, spTrackEntry *entry) { - _spEventQueue_addType(self, SP_ANIMATION_INTERRUPT); - _spEventQueue_addEntry(self, entry); -} - -void _spEventQueue_end(_spEventQueue *self, spTrackEntry *entry) { - _spEventQueue_addType(self, SP_ANIMATION_END); - _spEventQueue_addEntry(self, entry); - self->state->animationsChanged = 1; -} - -void _spEventQueue_dispose(_spEventQueue *self, spTrackEntry *entry) { - _spEventQueue_addType(self, SP_ANIMATION_DISPOSE); - _spEventQueue_addEntry(self, entry); -} - -void _spEventQueue_complete(_spEventQueue *self, spTrackEntry *entry) { - _spEventQueue_addType(self, SP_ANIMATION_COMPLETE); - _spEventQueue_addEntry(self, entry); -} - -void _spEventQueue_event(_spEventQueue *self, spTrackEntry *entry, spEvent *event) { - _spEventQueue_addType(self, SP_ANIMATION_EVENT); - _spEventQueue_addEntry(self, entry); - _spEventQueue_addEvent(self, event); -} - -void _spEventQueue_clear(_spEventQueue *self) { - self->objectsCount = 0; -} - -void _spEventQueue_drain(_spEventQueue *self) { - int i; - if (self->drainDisabled) return; - self->drainDisabled = 1; - for (i = 0; i < self->objectsCount; i += 2) { - spEventType type = (spEventType) self->objects[i].type; - spTrackEntry *entry = self->objects[i + 1].entry; - spEvent *event; - switch (type) { - case SP_ANIMATION_START: - case SP_ANIMATION_INTERRUPT: - case SP_ANIMATION_COMPLETE: - if (entry->listener) entry->listener(SUPER(self->state), type, entry, 0); - if (self->state->super.listener) self->state->super.listener(SUPER(self->state), type, entry, 0); - break; - case SP_ANIMATION_END: - if (entry->listener) entry->listener(SUPER(self->state), type, entry, 0); - if (self->state->super.listener) self->state->super.listener(SUPER(self->state), type, entry, 0); - /* Fall through. */ - case SP_ANIMATION_DISPOSE: - if (entry->listener) entry->listener(SUPER(self->state), SP_ANIMATION_DISPOSE, entry, 0); - if (self->state->super.listener) - self->state->super.listener(SUPER(self->state), SP_ANIMATION_DISPOSE, entry, 0); - _spAnimationState_disposeTrackEntry(entry); - break; - case SP_ANIMATION_EVENT: - event = self->objects[i + 2].event; - if (entry->listener) entry->listener(SUPER(self->state), type, entry, event); - if (self->state->super.listener) self->state->super.listener(SUPER(self->state), type, entry, event); - i++; - break; - } - } - _spEventQueue_clear(self); - - self->drainDisabled = 0; -} - -/* These two functions are needed in the UE4 runtime, see #1037 */ -void _spAnimationState_enableQueue(spAnimationState *self) { - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - internal->queue->drainDisabled = 0; -} - -void _spAnimationState_disableQueue(spAnimationState *self) { - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - internal->queue->drainDisabled = 1; -} - -void _spAnimationState_disposeTrackEntry(spTrackEntry *entry) { - spIntArray_dispose(entry->timelineMode); - spTrackEntryArray_dispose(entry->timelineHoldMix); - FREE(entry->timelinesRotation); - FREE(entry); -} - -void _spAnimationState_disposeTrackEntries(spAnimationState *state, spTrackEntry *entry) { - while (entry) { - spTrackEntry *next = entry->next; - spTrackEntry *from = entry->mixingFrom; - while (from) { - spTrackEntry *nextFrom = from->mixingFrom; - if (entry->listener) entry->listener(state, SP_ANIMATION_DISPOSE, from, 0); - if (state->listener) state->listener(state, SP_ANIMATION_DISPOSE, from, 0); - _spAnimationState_disposeTrackEntry(from); - from = nextFrom; - } - if (entry->listener) entry->listener(state, SP_ANIMATION_DISPOSE, entry, 0); - if (state->listener) state->listener(state, SP_ANIMATION_DISPOSE, entry, 0); - _spAnimationState_disposeTrackEntry(entry); - entry = next; - } -} - -spAnimationState *spAnimationState_create(spAnimationStateData *data) { - _spAnimationState *internal; - spAnimationState *self; - - if (!SP_EMPTY_ANIMATION) { - SP_EMPTY_ANIMATION = (spAnimation *) 1; /* dirty trick so we can recursively call spAnimation_create */ - SP_EMPTY_ANIMATION = spAnimation_create("", NULL, 0); - } - - internal = NEW(_spAnimationState); - self = SUPER(internal); - - self->data = data; - self->timeScale = 1; - - internal->queue = _spEventQueue_create(internal); - internal->events = CALLOC(spEvent *, 128); - - internal->propertyIDs = CALLOC(spPropertyId, 128); - internal->propertyIDsCapacity = 128; - - return self; -} - -void spAnimationState_dispose(spAnimationState *self) { - int i; - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - for (i = 0; i < self->tracksCount; i++) - _spAnimationState_disposeTrackEntries(self, self->tracks[i]); - FREE(self->tracks); - _spEventQueue_free(internal->queue); - FREE(internal->events); - FREE(internal->propertyIDs); - FREE(internal); -} - -void spAnimationState_update(spAnimationState *self, float delta) { - int i, n; - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - delta *= self->timeScale; - for (i = 0, n = self->tracksCount; i < n; i++) { - float currentDelta; - spTrackEntry *current = self->tracks[i]; - spTrackEntry *next; - if (!current) continue; - - current->animationLast = current->nextAnimationLast; - current->trackLast = current->nextTrackLast; - - currentDelta = delta * current->timeScale; - - if (current->delay > 0) { - current->delay -= currentDelta; - if (current->delay > 0) continue; - currentDelta = -current->delay; - current->delay = 0; - } - - next = current->next; - if (next) { - /* When the next entry's delay is passed, change to the next entry, preserving leftover time. */ - float nextTime = current->trackLast - next->delay; - if (nextTime >= 0) { - next->delay = 0; - next->trackTime += - current->timeScale == 0 ? 0 : (nextTime / current->timeScale + delta) * next->timeScale; - current->trackTime += currentDelta; - _spAnimationState_setCurrent(self, i, next, 1); - while (next->mixingFrom) { - next->mixTime += delta; - next = next->mixingFrom; - } - continue; - } - } else { - /* Clear the track when there is no next entry, the track end time is reached, and there is no mixingFrom. */ - if (current->trackLast >= current->trackEnd && current->mixingFrom == 0) { - self->tracks[i] = 0; - _spEventQueue_end(internal->queue, current); - spAnimationState_clearNext(self, current); - continue; - } - } - if (current->mixingFrom != 0 && _spAnimationState_updateMixingFrom(self, current, delta)) { - /* End mixing from entries once all have completed. */ - spTrackEntry *from = current->mixingFrom; - current->mixingFrom = 0; - if (from != 0) from->mixingTo = 0; - while (from != 0) { - _spEventQueue_end(internal->queue, from); - from = from->mixingFrom; - } - } - - current->trackTime += currentDelta; - } - - _spEventQueue_drain(internal->queue); -} - -int /*boolean*/ _spAnimationState_updateMixingFrom(spAnimationState *self, spTrackEntry *to, float delta) { - spTrackEntry *from = to->mixingFrom; - int finished; - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - if (!from) return -1; - - finished = _spAnimationState_updateMixingFrom(self, from, delta); - - from->animationLast = from->nextAnimationLast; - from->trackLast = from->nextTrackLast; - - // The from entry was applied at least once and the mix is complete. - if (to->nextTrackLast != -1 && to->mixTime >= to->mixDuration) { - // Mixing is complete for all entries before the from entry or the mix is instantaneous. - if (from->totalAlpha == 0 || to->mixDuration == 0) { - to->mixingFrom = from->mixingFrom; - if (from->mixingFrom) from->mixingFrom->mixingTo = to; - to->interruptAlpha = from->interruptAlpha; - _spEventQueue_end(internal->queue, from); - } - return finished; - } - - from->trackTime += delta * from->timeScale; - to->mixTime += delta; - return 0; -} - -int spAnimationState_apply(spAnimationState *self, spSkeleton *skeleton) { - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - spTrackEntry *current; - int i, ii, n; - float animationLast, animationTime; - int timelineCount; - spTimeline **timelines; - int /*boolean*/ firstFrame, shortestRotation; - float *timelinesRotation; - spTimeline *timeline; - int applied = 0; - spMixBlend blend; - spMixBlend timelineBlend; - int setupState = 0; - spSlot **slots = NULL; - spSlot *slot = NULL; - const char *attachmentName = NULL; - spEvent **applyEvents = NULL; - float applyTime; - - if (internal->animationsChanged) _spAnimationState_animationsChanged(self); - - for (i = 0, n = self->tracksCount; i < n; i++) { - float alpha; - current = self->tracks[i]; - if (!current || current->delay > 0) continue; - applied = -1; - blend = i == 0 ? SP_MIX_BLEND_FIRST : current->mixBlend; - - /* Apply mixing from entries first. */ - alpha = current->alpha; - if (current->mixingFrom) - alpha *= _spAnimationState_applyMixingFrom(self, current, skeleton, blend); - else if (current->trackTime >= current->trackEnd && current->next == 0) - alpha = 0; - int /*bool*/ attachments = alpha >= current->alphaAttachmentThreshold; - - /* Apply current entry. */ - animationLast = current->animationLast; - animationTime = spTrackEntry_getAnimationTime(current); - timelineCount = current->animation->timelines->size; - applyEvents = internal->events; - applyTime = animationTime; - if (current->reverse) { - applyTime = current->animation->duration - applyTime; - applyEvents = NULL; - } - timelines = current->animation->timelines->items; - if ((i == 0 && alpha == 1) || blend == SP_MIX_BLEND_ADD) { - for (ii = 0; ii < timelineCount; ii++) { - timeline = timelines[ii]; - if (timeline->type == SP_TIMELINE_ATTACHMENT) { - _spAnimationState_applyAttachmentTimeline(self, timeline, skeleton, applyTime, blend, attachments); - } else { - spTimeline_apply(timelines[ii], skeleton, animationLast, applyTime, applyEvents, - &internal->eventsCount, alpha, blend, SP_MIX_DIRECTION_IN); - } - } - } else { - spIntArray *timelineMode = current->timelineMode; - - shortestRotation = current->shortestRotation; - firstFrame = !shortestRotation && current->timelinesRotationCount != timelineCount << 1; - if (firstFrame) _spAnimationState_resizeTimelinesRotation(current, timelineCount << 1); - timelinesRotation = current->timelinesRotation; - - for (ii = 0; ii < timelineCount; ii++) { - timeline = timelines[ii]; - timelineBlend = timelineMode->items[ii] == SUBSEQUENT ? blend : SP_MIX_BLEND_SETUP; - if (!shortestRotation && timeline->type == SP_TIMELINE_ROTATE) - _spAnimationState_applyRotateTimeline(self, timeline, skeleton, applyTime, alpha, timelineBlend, - timelinesRotation, ii << 1, firstFrame); - else if (timeline->type == SP_TIMELINE_ATTACHMENT) - _spAnimationState_applyAttachmentTimeline(self, timeline, skeleton, applyTime, timelineBlend, attachments); - else - spTimeline_apply(timeline, skeleton, animationLast, applyTime, applyEvents, &internal->eventsCount, - alpha, timelineBlend, SP_MIX_DIRECTION_IN); - } - } - _spAnimationState_queueEvents(self, current, animationTime); - internal->eventsCount = 0; - current->nextAnimationLast = animationTime; - current->nextTrackLast = current->trackTime; - } - - setupState = self->unkeyedState + SETUP; - slots = skeleton->slots; - for (i = 0, n = skeleton->slotsCount; i < n; i++) { - slot = slots[i]; - if (slot->attachmentState == setupState) { - attachmentName = slot->data->attachmentName; - spSlot_setAttachment(slot, attachmentName == NULL ? NULL : spSkeleton_getAttachmentForSlotIndex(skeleton, slot->data->index, attachmentName)); - } - } - self->unkeyedState += 2; - - _spEventQueue_drain(internal->queue); - return applied; -} - -float _spAnimationState_applyMixingFrom(spAnimationState *self, spTrackEntry *to, spSkeleton *skeleton, spMixBlend blend) { - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - float mix; - spEvent **events; - int /*boolean*/ attachments; - int /*boolean*/ drawOrder; - float animationLast; - float animationTime; - int timelineCount; - spTimeline **timelines; - spIntArray *timelineMode; - spTrackEntryArray *timelineHoldMix; - spMixBlend timelineBlend; - float alphaHold; - float alphaMix; - float alpha; - int /*boolean*/ firstFrame, shortestRotation; - float *timelinesRotation; - int i; - spTrackEntry *holdMix; - float applyTime; - - spTrackEntry *from = to->mixingFrom; - if (from->mixingFrom) _spAnimationState_applyMixingFrom(self, from, skeleton, blend); - - if (to->mixDuration == 0) { /* Single frame mix to undo mixingFrom changes. */ - mix = 1; - if (blend == SP_MIX_BLEND_FIRST) blend = SP_MIX_BLEND_SETUP; - } else { - mix = to->mixTime / to->mixDuration; - if (mix > 1) mix = 1; - if (blend != SP_MIX_BLEND_FIRST) blend = from->mixBlend; - } - - attachments = mix < from->mixAttachmentThreshold; - drawOrder = mix < from->mixDrawOrderThreshold; - timelineCount = from->animation->timelines->size; - timelines = from->animation->timelines->items; - alphaHold = from->alpha * to->interruptAlpha; - alphaMix = alphaHold * (1 - mix); - animationLast = from->animationLast; - animationTime = spTrackEntry_getAnimationTime(from); - applyTime = animationTime; - events = NULL; - if (from->reverse) { - applyTime = from->animation->duration - applyTime; - } else { - if (mix < from->eventThreshold) events = internal->events; - } - - if (blend == SP_MIX_BLEND_ADD) { - for (i = 0; i < timelineCount; i++) { - spTimeline *timeline = timelines[i]; - spTimeline_apply(timeline, skeleton, animationLast, applyTime, events, &internal->eventsCount, alphaMix, - blend, SP_MIX_DIRECTION_OUT); - } - } else { - timelineMode = from->timelineMode; - timelineHoldMix = from->timelineHoldMix; - - shortestRotation = from->shortestRotation; - firstFrame = !shortestRotation && from->timelinesRotationCount != timelineCount << 1; - if (firstFrame) _spAnimationState_resizeTimelinesRotation(from, timelineCount << 1); - timelinesRotation = from->timelinesRotation; - - from->totalAlpha = 0; - for (i = 0; i < timelineCount; i++) { - spMixDirection direction = SP_MIX_DIRECTION_OUT; - spTimeline *timeline = timelines[i]; - - switch (timelineMode->items[i]) { - case SUBSEQUENT: - if (!drawOrder && timeline->type == SP_TIMELINE_DRAWORDER) continue; - timelineBlend = blend; - alpha = alphaMix; - break; - case FIRST: - timelineBlend = SP_MIX_BLEND_SETUP; - alpha = alphaMix; - break; - case HOLD_SUBSEQUENT: - timelineBlend = blend; - alpha = alphaHold; - break; - case HOLD_FIRST: - timelineBlend = SP_MIX_BLEND_SETUP; - alpha = alphaHold; - break; - default: - timelineBlend = SP_MIX_BLEND_SETUP; - holdMix = timelineHoldMix->items[i]; - alpha = alphaHold * MAX(0, 1 - holdMix->mixTime / holdMix->mixDuration); - break; - } - from->totalAlpha += alpha; - if (!shortestRotation && timeline->type == SP_TIMELINE_ROTATE) - _spAnimationState_applyRotateTimeline(self, timeline, skeleton, applyTime, alpha, timelineBlend, - timelinesRotation, i << 1, firstFrame); - else if (timeline->type == SP_TIMELINE_ATTACHMENT) - _spAnimationState_applyAttachmentTimeline(self, timeline, skeleton, applyTime, timelineBlend, - attachments && alpha >= from->alphaAttachmentThreshold); - else { - if (drawOrder && timeline->type == SP_TIMELINE_DRAWORDER && - timelineBlend == SP_MIX_BLEND_SETUP) - direction = SP_MIX_DIRECTION_IN; - spTimeline_apply(timeline, skeleton, animationLast, applyTime, events, &internal->eventsCount, - alpha, timelineBlend, direction); - } - } - } - - - if (to->mixDuration > 0) _spAnimationState_queueEvents(self, from, animationTime); - internal->eventsCount = 0; - from->nextAnimationLast = animationTime; - from->nextTrackLast = from->trackTime; - - return mix; -} - -static void -_spAnimationState_setAttachment(spAnimationState *self, spSkeleton *skeleton, spSlot *slot, const char *attachmentName, - int /*bool*/ attachments) { - spSlot_setAttachment(slot, attachmentName == NULL ? NULL : spSkeleton_getAttachmentForSlotIndex(skeleton, slot->data->index, attachmentName)); - if (attachments) slot->attachmentState = self->unkeyedState + CURRENT; -} - -/* @param target After the first and before the last entry. */ -static int binarySearch1(float *values, int valuesLength, float target) { - int i; - for (i = 1; i < valuesLength; i++) { - if (values[i] > target) return (int) (i - 1); - } - return (int) valuesLength - 1; -} - -void _spAnimationState_applyAttachmentTimeline(spAnimationState *self, spTimeline *timeline, spSkeleton *skeleton, - float time, spMixBlend blend, int /*bool*/ attachments) { - spAttachmentTimeline *attachmentTimeline; - spSlot *slot; - float *frames; - - attachmentTimeline = SUB_CAST(spAttachmentTimeline, timeline); - slot = skeleton->slots[attachmentTimeline->slotIndex]; - if (!slot->bone->active) return; - - frames = attachmentTimeline->super.frames->items; - if (time < frames[0]) { - if (blend == SP_MIX_BLEND_SETUP || blend == SP_MIX_BLEND_FIRST) - _spAnimationState_setAttachment(self, skeleton, slot, slot->data->attachmentName, attachments); - } else { - _spAnimationState_setAttachment(self, skeleton, slot, attachmentTimeline->attachmentNames[binarySearch1(frames, attachmentTimeline->super.frames->size, time)], - attachments); - } - - /* If an attachment wasn't set (ie before the first frame or attachments is false), set the setup attachment later.*/ - if (slot->attachmentState <= self->unkeyedState) slot->attachmentState = self->unkeyedState + SETUP; -} - -void _spAnimationState_applyRotateTimeline(spAnimationState *self, spTimeline *timeline, spSkeleton *skeleton, float time, - float alpha, spMixBlend blend, float *timelinesRotation, int i, - int /*boolean*/ firstFrame) { - spRotateTimeline *rotateTimeline; - float *frames; - spBone *bone; - float r1, r2; - float total, diff; - int /*boolean*/ current, dir; - UNUSED(self); - - if (firstFrame) timelinesRotation[i] = 0; - - if (alpha == 1) { - spTimeline_apply(timeline, skeleton, 0, time, 0, 0, 1, blend, SP_MIX_DIRECTION_IN); - return; - } - - rotateTimeline = SUB_CAST(spRotateTimeline, timeline); - frames = rotateTimeline->super.super.frames->items; - bone = skeleton->bones[rotateTimeline->boneIndex]; - if (!bone->active) return; - if (time < frames[0]) { - switch (blend) { - case SP_MIX_BLEND_SETUP: - bone->rotation = bone->data->rotation; - default: - return; - case SP_MIX_BLEND_FIRST: - r1 = bone->rotation; - r2 = bone->data->rotation; - } - } else { - r1 = blend == SP_MIX_BLEND_SETUP ? bone->data->rotation : bone->rotation; - r2 = bone->data->rotation + spCurveTimeline1_getCurveValue(&rotateTimeline->super, time); - } - - /* Mix between rotations using the direction of the shortest route on the first frame while detecting crosses. */ - diff = r2 - r1; - diff -= CEIL(diff / 360 - 0.5) * 360; - if (diff == 0) { - total = timelinesRotation[i]; - } else { - float lastTotal, lastDiff, loops; - if (firstFrame) { - lastTotal = 0; - lastDiff = diff; - } else { - lastTotal = timelinesRotation[i]; - lastDiff = timelinesRotation[i + 1]; - } - loops = lastTotal - FMOD(lastTotal, 360); - total = diff + loops; - current = diff >= 0, dir = lastTotal >= 0; - if (ABS(lastDiff) <= 90 && SIGNUM(lastDiff) != SIGNUM(diff)) { - if (ABS(lastTotal - loops) > 180) { - total += 360 * SIGNUM(lastTotal); - dir = current; - } else if (loops != 0) - total -= 360 * SIGNUM(lastTotal); - else - dir = current; - } - if (dir != current) total += 360 * SIGNUM(lastTotal); - timelinesRotation[i] = total; - } - timelinesRotation[i + 1] = diff; - bone->rotation = r1 + total * alpha; -} - -void _spAnimationState_queueEvents(spAnimationState *self, spTrackEntry *entry, float animationTime) { - spEvent **events; - spEvent *event; - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - int i, n, complete; - float animationStart = entry->animationStart, animationEnd = entry->animationEnd; - float duration = animationEnd - animationStart; - float trackLastWrapped = FMOD(entry->trackLast, duration); - - /* Queue events before complete. */ - events = internal->events; - for (i = 0, n = internal->eventsCount; i < n; i++) { - event = events[i]; - if (event->time < trackLastWrapped) break; - if (event->time > animationEnd) continue; /* Discard events outside animation start/end. */ - _spEventQueue_event(internal->queue, entry, event); - } - - /* Queue complete if completed a loop iteration or the animation. */ - if (entry->loop) { - if (duration == 0) - complete = -1; - else { - int cycles = (int) (entry->trackTime / duration); - complete = cycles > 0 && cycles > (int) (entry->trackLast / duration); - } - } else { - complete = (animationTime >= animationEnd && entry->animationLast < animationEnd); - } - if (complete) _spEventQueue_complete(internal->queue, entry); - - /* Queue events after complete. */ - for (; i < n; i++) { - event = events[i]; - if (event->time < animationStart) continue; /* Discard events outside animation start/end. */ - _spEventQueue_event(internal->queue, entry, event); - } -} - -void spAnimationState_clearTracks(spAnimationState *self) { - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - int i, n, oldDrainDisabled; - oldDrainDisabled = internal->queue->drainDisabled; - internal->queue->drainDisabled = 1; - for (i = 0, n = self->tracksCount; i < n; i++) - spAnimationState_clearTrack(self, i); - self->tracksCount = 0; - internal->queue->drainDisabled = oldDrainDisabled; - _spEventQueue_drain(internal->queue); -} - -void spAnimationState_clearTrack(spAnimationState *self, int trackIndex) { - spTrackEntry *current; - spTrackEntry *entry; - spTrackEntry *from; - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - - if (trackIndex >= self->tracksCount) return; - current = self->tracks[trackIndex]; - if (!current) return; - - _spEventQueue_end(internal->queue, current); - - spAnimationState_clearNext(self, current); - - entry = current; - while (1) { - from = entry->mixingFrom; - if (!from) break; - _spEventQueue_end(internal->queue, from); - entry->mixingFrom = 0; - entry->mixingTo = 0; - entry = from; - } - - self->tracks[current->trackIndex] = 0; - _spEventQueue_drain(internal->queue); -} - -void _spAnimationState_setCurrent(spAnimationState *self, int index, spTrackEntry *current, int /*boolean*/ interrupt) { - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - spTrackEntry *from = _spAnimationState_expandToIndex(self, index); - self->tracks[index] = current; - current->previous = NULL; - - if (from) { - if (interrupt) _spEventQueue_interrupt(internal->queue, from); - current->mixingFrom = from; - from->mixingTo = current; - current->mixTime = 0; - - /* Store the interrupted mix percentage. */ - if (from->mixingFrom != 0 && from->mixDuration > 0) - current->interruptAlpha *= MIN(1, from->mixTime / from->mixDuration); - - from->timelinesRotationCount = 0; - } - - _spEventQueue_start(internal->queue, current); -} - -/** Set the current animation. Any queued animations are cleared. */ -spTrackEntry *spAnimationState_setAnimationByName(spAnimationState *self, int trackIndex, const char *animationName, - int /*bool*/ loop) { - spAnimation *animation = spSkeletonData_findAnimation(self->data->skeletonData, animationName); - return spAnimationState_setAnimation(self, trackIndex, animation, loop); -} - -spTrackEntry * -spAnimationState_setAnimation(spAnimationState *self, int trackIndex, spAnimation *animation, int /*bool*/ loop) { - spTrackEntry *entry; - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - int interrupt = 1; - spTrackEntry *current = _spAnimationState_expandToIndex(self, trackIndex); - if (current) { - if (current->nextTrackLast == -1) { - /* Don't mix from an entry that was never applied. */ - self->tracks[trackIndex] = current->mixingFrom; - _spEventQueue_interrupt(internal->queue, current); - _spEventQueue_end(internal->queue, current); - spAnimationState_clearNext(self, current); - current = current->mixingFrom; - interrupt = 0; - } else - spAnimationState_clearNext(self, current); - } - entry = _spAnimationState_trackEntry(self, trackIndex, animation, loop, current); - _spAnimationState_setCurrent(self, trackIndex, entry, interrupt); - _spEventQueue_drain(internal->queue); - return entry; -} - -/** Adds an animation to be played delay seconds after the current or last queued animation, taking into account any mix - * duration. */ -spTrackEntry *spAnimationState_addAnimationByName(spAnimationState *self, int trackIndex, const char *animationName, - int /*bool*/ loop, float delay) { - spAnimation *animation = spSkeletonData_findAnimation(self->data->skeletonData, animationName); - return spAnimationState_addAnimation(self, trackIndex, animation, loop, delay); -} - -spTrackEntry * -spAnimationState_addAnimation(spAnimationState *self, int trackIndex, spAnimation *animation, int /*bool*/ loop, - float delay) { - spTrackEntry *entry; - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - spTrackEntry *last = _spAnimationState_expandToIndex(self, trackIndex); - if (last) { - while (last->next) - last = last->next; - } - - entry = _spAnimationState_trackEntry(self, trackIndex, animation, loop, last); - - if (!last) { - _spAnimationState_setCurrent(self, trackIndex, entry, 1); - _spEventQueue_drain(internal->queue); - if (delay < 0) delay = 0; - } else { - last->next = entry; - entry->previous = last; - if (delay <= 0) delay = MAX(delay + spTrackEntry_getTrackComplete(last) - entry->mixDuration, 0); - } - - entry->delay = delay; - return entry; -} - -spTrackEntry *spAnimationState_setEmptyAnimation(spAnimationState *self, int trackIndex, float mixDuration) { - spTrackEntry *entry = spAnimationState_setAnimation(self, trackIndex, SP_EMPTY_ANIMATION, 0); - entry->mixDuration = mixDuration; - entry->trackEnd = mixDuration; - return entry; -} - -spTrackEntry * -spAnimationState_addEmptyAnimation(spAnimationState *self, int trackIndex, float mixDuration, float delay) { - spTrackEntry *entry = spAnimationState_addAnimation(self, trackIndex, SP_EMPTY_ANIMATION, 0, delay); - if (delay <= 0) entry->delay = MAX(entry->delay + entry->mixDuration - mixDuration, 0); - entry->mixDuration = mixDuration; - entry->trackEnd = mixDuration; - return entry; -} - -void spAnimationState_setEmptyAnimations(spAnimationState *self, float mixDuration) { - int i, n, oldDrainDisabled; - spTrackEntry *current; - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - oldDrainDisabled = internal->queue->drainDisabled; - internal->queue->drainDisabled = 1; - for (i = 0, n = self->tracksCount; i < n; i++) { - current = self->tracks[i]; - if (current) spAnimationState_setEmptyAnimation(self, current->trackIndex, mixDuration); - } - internal->queue->drainDisabled = oldDrainDisabled; - _spEventQueue_drain(internal->queue); -} - -spTrackEntry *_spAnimationState_expandToIndex(spAnimationState *self, int index) { - spTrackEntry **newTracks; - if (index < self->tracksCount) return self->tracks[index]; - newTracks = CALLOC(spTrackEntry *, index + 1); - memcpy(newTracks, self->tracks, self->tracksCount * sizeof(spTrackEntry *)); - FREE(self->tracks); - self->tracks = newTracks; - self->tracksCount = index + 1; - return 0; -} - -spTrackEntry * -_spAnimationState_trackEntry(spAnimationState *self, int trackIndex, spAnimation *animation, int /*boolean*/ loop, - spTrackEntry *last) { - spTrackEntry *entry = NEW(spTrackEntry); - entry->trackIndex = trackIndex; - entry->animation = animation; - entry->loop = loop; - entry->holdPrevious = 0; - entry->reverse = 0; - entry->shortestRotation = 0; - entry->previous = 0; - entry->next = 0; - - entry->eventThreshold = 0; - entry->mixAttachmentThreshold = 0; - entry->alphaAttachmentThreshold = 0; - entry->mixDrawOrderThreshold = 0; - - entry->animationStart = 0; - entry->animationEnd = animation->duration; - entry->animationLast = -1; - entry->nextAnimationLast = -1; - - entry->delay = 0; - entry->trackTime = 0; - entry->trackLast = -1; - entry->nextTrackLast = -1; - entry->trackEnd = (float) INT_MAX; - entry->timeScale = 1; - - entry->alpha = 1; - entry->mixTime = 0; - entry->mixDuration = !last ? 0 : spAnimationStateData_getMix(self->data, last->animation, animation); - entry->interruptAlpha = 1; - entry->totalAlpha = 0; - entry->mixBlend = SP_MIX_BLEND_REPLACE; - - entry->timelineMode = spIntArray_create(16); - entry->timelineHoldMix = spTrackEntryArray_create(16); - - return entry; -} - -void spAnimationState_clearNext(spAnimationState *self, spTrackEntry *entry) { - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - spTrackEntry *next = entry->next; - while (next) { - _spEventQueue_dispose(internal->queue, next); - next = next->next; - } - entry->next = 0; -} - -void _spAnimationState_animationsChanged(spAnimationState *self) { - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - int i, n; - spTrackEntry *entry; - internal->animationsChanged = 0; - - internal->propertyIDsCount = 0; - i = 0; - n = self->tracksCount; - - for (; i < n; i++) { - entry = self->tracks[i]; - if (!entry) continue; - while (entry->mixingFrom != 0) - entry = entry->mixingFrom; - do { - if (entry->mixingTo == 0 || entry->mixBlend != SP_MIX_BLEND_ADD) _spTrackEntry_computeHold(entry, self); - entry = entry->mixingTo; - } while (entry != 0); - } -} - -float *_spAnimationState_resizeTimelinesRotation(spTrackEntry *entry, int newSize) { - if (entry->timelinesRotationCount != newSize) { - float *newTimelinesRotation = CALLOC(float, newSize); - FREE(entry->timelinesRotation); - entry->timelinesRotation = newTimelinesRotation; - entry->timelinesRotationCount = newSize; - } - return entry->timelinesRotation; -} - -void _spAnimationState_ensureCapacityPropertyIDs(spAnimationState *self, int capacity) { - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - if (internal->propertyIDsCapacity < capacity) { - spPropertyId *newPropertyIDs = CALLOC(spPropertyId, capacity << 1); - memcpy(newPropertyIDs, internal->propertyIDs, sizeof(spPropertyId) * internal->propertyIDsCount); - FREE(internal->propertyIDs); - internal->propertyIDs = newPropertyIDs; - internal->propertyIDsCapacity = capacity << 1; - } -} - -int _spAnimationState_addPropertyID(spAnimationState *self, spPropertyId id) { - int i, n; - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - - for (i = 0, n = internal->propertyIDsCount; i < n; i++) { - if (internal->propertyIDs[i] == id) return 0; - } - - _spAnimationState_ensureCapacityPropertyIDs(self, internal->propertyIDsCount + 1); - internal->propertyIDs[internal->propertyIDsCount] = id; - internal->propertyIDsCount++; - return 1; -} - -int _spAnimationState_addPropertyIDs(spAnimationState *self, spPropertyId *ids, int numIds) { - int i, n; - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - int oldSize = internal->propertyIDsCount; - - for (i = 0, n = numIds; i < n; i++) { - _spAnimationState_addPropertyID(self, ids[i]); - } - - return internal->propertyIDsCount != oldSize; -} - -spTrackEntry *spAnimationState_getCurrent(spAnimationState *self, int trackIndex) { - if (trackIndex >= self->tracksCount) return 0; - return self->tracks[trackIndex]; -} - -void spAnimationState_clearListenerNotifications(spAnimationState *self) { - _spAnimationState *internal = SUB_CAST(_spAnimationState, self); - _spEventQueue_clear(internal->queue); -} - -float spTrackEntry_getAnimationTime(spTrackEntry *entry) { - if (entry->loop) { - float duration = entry->animationEnd - entry->animationStart; - if (duration == 0) return entry->animationStart; - return FMOD(entry->trackTime, duration) + entry->animationStart; - } - return MIN(entry->trackTime + entry->animationStart, entry->animationEnd); -} - -void spTrackEntry_resetRotationDirections(spTrackEntry *entry) { - FREE(entry->timelinesRotation); - entry->timelinesRotation = NULL; - entry->timelinesRotationCount = 0; -} - -float spTrackEntry_getTrackComplete(spTrackEntry *entry) { - float duration = entry->animationEnd - entry->animationStart; - if (duration != 0) { - if (entry->loop) return duration * (1 + (int) (entry->trackTime / duration)); /* Completion of next loop. */ - if (entry->trackTime < duration) return duration; /* Before duration. */ - } - return entry->trackTime; /* Next update. */ -} - -void spTrackEntry_setMixDuration(spTrackEntry *entry, float mixDuration, float delay) { - entry->mixDuration = mixDuration; - if (delay <= 0) { - if (entry->previous) - delay = MAX(delay + spTrackEntry_getTrackComplete(entry->previous) - mixDuration, 0); - else - delay = 0; - } - entry->delay = delay; -} - -int spTrackEntry_wasApplied(spTrackEntry *entry) { - return entry->nextTrackLast != -1; -} - -int spTrackEntry_isNextReady(spTrackEntry *entry) { - return entry->next != NULL && entry->nextTrackLast - entry->next->delay >= 0; -} - -void _spTrackEntry_computeHold(spTrackEntry *entry, spAnimationState *state) { - spTrackEntry *to; - spTimeline **timelines; - int timelinesCount; - int *timelineMode; - spTrackEntry **timelineHoldMix; - spTrackEntry *next; - int i; - - to = entry->mixingTo; - timelines = entry->animation->timelines->items; - timelinesCount = entry->animation->timelines->size; - timelineMode = spIntArray_setSize(entry->timelineMode, timelinesCount)->items; - spTrackEntryArray_clear(entry->timelineHoldMix); - timelineHoldMix = spTrackEntryArray_setSize(entry->timelineHoldMix, timelinesCount)->items; - - if (to != 0 && to->holdPrevious) { - for (i = 0; i < timelinesCount; i++) { - spPropertyId *ids = timelines[i]->propertyIds; - int numIds = timelines[i]->propertyIdsCount; - timelineMode[i] = _spAnimationState_addPropertyIDs(state, ids, numIds) ? HOLD_FIRST : HOLD_SUBSEQUENT; - } - return; - } - - i = 0; -continue_outer: - for (; i < timelinesCount; i++) { - spTimeline *timeline = timelines[i]; - spPropertyId *ids = timeline->propertyIds; - int numIds = timeline->propertyIdsCount; - if (!_spAnimationState_addPropertyIDs(state, ids, numIds)) - timelineMode[i] = SUBSEQUENT; - else if (to == 0 || timeline->type == SP_TIMELINE_ATTACHMENT || - timeline->type == SP_TIMELINE_DRAWORDER || - timeline->type == SP_TIMELINE_EVENT || - !spAnimation_hasTimeline(to->animation, ids, numIds)) { - timelineMode[i] = FIRST; - } else { - for (next = to->mixingTo; next != 0; next = next->mixingTo) { - if (spAnimation_hasTimeline(next->animation, ids, numIds)) continue; - if (next->mixDuration > 0) { - timelineMode[i] = HOLD_MIX; - timelineHoldMix[i] = next; - i++; - goto continue_outer; - } - break; - } - timelineMode[i] = HOLD_FIRST; - } - } -} diff --git a/spine-c/spine-c/src/spine/AnimationStateData.c b/spine-c/spine-c/src/spine/AnimationStateData.c deleted file mode 100644 index a5f4e9e00..000000000 --- a/spine-c/spine-c/src/spine/AnimationStateData.c +++ /dev/null @@ -1,151 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -typedef struct _ToEntry _ToEntry; -struct _ToEntry { - spAnimation *animation; - float duration; - _ToEntry *next; -}; - -_ToEntry *_ToEntry_create(spAnimation *to, float duration) { - _ToEntry *self = NEW(_ToEntry); - self->animation = to; - self->duration = duration; - return self; -} - -void _ToEntry_dispose(_ToEntry *self) { - FREE(self); -} - -/**/ - -typedef struct _FromEntry _FromEntry; -struct _FromEntry { - spAnimation *animation; - _ToEntry *toEntries; - _FromEntry *next; -}; - -_FromEntry *_FromEntry_create(spAnimation *from) { - _FromEntry *self = NEW(_FromEntry); - self->animation = from; - return self; -} - -void _FromEntry_dispose(_FromEntry *self) { - FREE(self); -} - -/**/ - -spAnimationStateData *spAnimationStateData_create(spSkeletonData *skeletonData) { - spAnimationStateData *self = NEW(spAnimationStateData); - self->skeletonData = skeletonData; - return self; -} - -void spAnimationStateData_dispose(spAnimationStateData *self) { - _ToEntry *toEntry; - _ToEntry *nextToEntry; - _FromEntry *nextFromEntry; - - _FromEntry *fromEntry = (_FromEntry *) self->entries; - while (fromEntry) { - toEntry = fromEntry->toEntries; - while (toEntry) { - nextToEntry = toEntry->next; - _ToEntry_dispose(toEntry); - toEntry = nextToEntry; - } - nextFromEntry = fromEntry->next; - _FromEntry_dispose(fromEntry); - fromEntry = nextFromEntry; - } - - FREE(self); -} - -void spAnimationStateData_setMixByName(spAnimationStateData *self, const char *fromName, const char *toName, - float duration) { - spAnimation *to; - spAnimation *from = spSkeletonData_findAnimation(self->skeletonData, fromName); - if (!from) return; - to = spSkeletonData_findAnimation(self->skeletonData, toName); - if (!to) return; - spAnimationStateData_setMix(self, from, to, duration); -} - -void spAnimationStateData_setMix(spAnimationStateData *self, spAnimation *from, spAnimation *to, float duration) { - /* Find existing FromEntry. */ - _ToEntry *toEntry; - _FromEntry *fromEntry = (_FromEntry *) self->entries; - while (fromEntry) { - if (fromEntry->animation == from) { - /* Find existing ToEntry. */ - toEntry = fromEntry->toEntries; - while (toEntry) { - if (toEntry->animation == to) { - toEntry->duration = duration; - return; - } - toEntry = toEntry->next; - } - break; /* Add new ToEntry to the existing FromEntry. */ - } - fromEntry = fromEntry->next; - } - if (!fromEntry) { - fromEntry = _FromEntry_create(from); - fromEntry->next = (_FromEntry *) self->entries; - self->entries = fromEntry; - } - toEntry = _ToEntry_create(to, duration); - toEntry->next = fromEntry->toEntries; - fromEntry->toEntries = toEntry; -} - -float spAnimationStateData_getMix(spAnimationStateData *self, spAnimation *from, spAnimation *to) { - _FromEntry *fromEntry = (_FromEntry *) self->entries; - while (fromEntry) { - if (fromEntry->animation == from) { - _ToEntry *toEntry = fromEntry->toEntries; - while (toEntry) { - if (toEntry->animation == to) return toEntry->duration; - toEntry = toEntry->next; - } - } - fromEntry = fromEntry->next; - } - return self->defaultMix; -} diff --git a/spine-c/spine-c/src/spine/Array.c b/spine-c/spine-c/src/spine/Array.c deleted file mode 100644 index 7caec991d..000000000 --- a/spine-c/spine-c/src/spine/Array.c +++ /dev/null @@ -1,43 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -_SP_ARRAY_IMPLEMENT_TYPE(spFloatArray, float) - -_SP_ARRAY_IMPLEMENT_TYPE(spIntArray, int) - -_SP_ARRAY_IMPLEMENT_TYPE(spShortArray, short) - -_SP_ARRAY_IMPLEMENT_TYPE(spUnsignedShortArray, unsigned short) - -_SP_ARRAY_IMPLEMENT_TYPE(spArrayFloatArray, spFloatArray *) - -_SP_ARRAY_IMPLEMENT_TYPE(spArrayShortArray, spShortArray *) diff --git a/spine-c/spine-c/src/spine/Atlas.c b/spine-c/spine-c/src/spine/Atlas.c deleted file mode 100644 index ddee7df87..000000000 --- a/spine-c/spine-c/src/spine/Atlas.c +++ /dev/null @@ -1,472 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -spKeyValueArray *spKeyValueArray_create(int initialCapacity) { - spKeyValueArray *array = ((spKeyValueArray *) _spCalloc(1, sizeof(spKeyValueArray), "_file_name_", 39)); - array->size = 0; - array->capacity = initialCapacity; - array->items = ((spKeyValue *) _spCalloc(initialCapacity, sizeof(spKeyValue), "_file_name_", 39)); - return array; -} - -void spKeyValueArray_dispose(spKeyValueArray *self) { - _spFree((void *) self->items); - _spFree((void *) self); -} - -void spKeyValueArray_clear(spKeyValueArray *self) { self->size = 0; } - -spKeyValueArray *spKeyValueArray_setSize(spKeyValueArray *self, int newSize) { - self->size = newSize; - if (self->capacity < newSize) { - self->capacity = ((8) > ((int) (self->size * 1.75f)) ? (8) : ((int) (self->size * 1.75f))); - self->items = ((spKeyValue *) _spRealloc(self->items, sizeof(spKeyValue) * (self->capacity))); - } - return self; -} - -void spKeyValueArray_ensureCapacity(spKeyValueArray *self, int newCapacity) { - if (self->capacity >= newCapacity) return; - self->capacity = newCapacity; - self->items = ((spKeyValue *) _spRealloc(self->items, sizeof(spKeyValue) * (self->capacity))); -} - -void spKeyValueArray_add(spKeyValueArray *self, spKeyValue value) { - if (self->size == self->capacity) { - self->capacity = ((8) > ((int) (self->size * 1.75f)) ? (8) : ((int) (self->size * 1.75f))); - self->items = ((spKeyValue *) _spRealloc(self->items, sizeof(spKeyValue) * (self->capacity))); - } - self->items[self->size++] = value; -} - -void spKeyValueArray_addAll(spKeyValueArray *self, spKeyValueArray *other) { - int i = 0; - for (; i < other->size; i++) { spKeyValueArray_add(self, other->items[i]); } -} - -void spKeyValueArray_addAllValues(spKeyValueArray *self, spKeyValue *values, int offset, int count) { - int i = offset, n = offset + count; - for (; i < n; i++) { spKeyValueArray_add(self, values[i]); } -} - -int spKeyValueArray_contains(spKeyValueArray *self, spKeyValue value) { - spKeyValue *items = self->items; - int i, n; - for (i = 0, n = self->size; i < n; i++) { - if (!strcmp(items[i].name, value.name)) return -1; - } - return 0; -} - -spKeyValue spKeyValueArray_pop(spKeyValueArray *self) { - spKeyValue item = self->items[--self->size]; - return item; -} - -spKeyValue spKeyValueArray_peek(spKeyValueArray *self) { return self->items[self->size - 1]; } - -spAtlasPage *spAtlasPage_create(spAtlas *atlas, const char *name) { - spAtlasPage *self = NEW(spAtlasPage); - self->atlas = atlas; - MALLOC_STR(self->name, name); - self->minFilter = SP_ATLAS_NEAREST; - self->magFilter = SP_ATLAS_NEAREST; - self->format = SP_ATLAS_RGBA8888; - self->uWrap = SP_ATLAS_CLAMPTOEDGE; - self->vWrap = SP_ATLAS_CLAMPTOEDGE; - return self; -} - -void spAtlasPage_dispose(spAtlasPage *self) { - _spAtlasPage_disposeTexture(self); - FREE(self->name); - FREE(self); -} - -/**/ - -spAtlasRegion *spAtlasRegion_create(void) { - spAtlasRegion *region = NEW(spAtlasRegion); - region->keyValues = spKeyValueArray_create(2); - return region; -} - -void spAtlasRegion_dispose(spAtlasRegion *self) { - int i, n; - FREE(self->name); - FREE(self->splits); - FREE(self->pads); - for (i = 0, n = self->keyValues->size; i < n; i++) { - FREE(self->keyValues->items[i].name); - } - spKeyValueArray_dispose(self->keyValues); - FREE(self); -} - -/**/ - -typedef struct SimpleString { - char *start; - char *end; - int length; -} SimpleString; - -static SimpleString *ss_trim(SimpleString *self) { - while (isspace((unsigned char) *self->start) && self->start < self->end) - self->start++; - if (self->start == self->end) { - self->length = self->end - self->start; - return self; - } - self->end--; - while (((unsigned char) *self->end == '\r') && self->end >= self->start) - self->end--; - self->end++; - self->length = self->end - self->start; - return self; -} - -static int ss_indexOf(SimpleString *self, char needle) { - char *c = self->start; - while (c < self->end) { - if (*c == needle) return c - self->start; - c++; - } - return -1; -} - -static int ss_indexOf2(SimpleString *self, char needle, int at) { - char *c = self->start + at; - while (c < self->end) { - if (*c == needle) return c - self->start; - c++; - } - return -1; -} - -static SimpleString ss_substr(SimpleString *self, int s, int e) { - SimpleString result; - e = s + e; - result.start = self->start + s; - result.end = self->start + e; - result.length = e - s; - return result; -} - -static SimpleString ss_substr2(SimpleString *self, int s) { - SimpleString result; - result.start = self->start + s; - result.end = self->end; - result.length = result.end - result.start; - return result; -} - -static int /*boolean*/ ss_equals(SimpleString *self, const char *str) { - int i; - int otherLen = strlen(str); - if (self->length != otherLen) return 0; - for (i = 0; i < self->length; i++) { - if (self->start[i] != str[i]) return 0; - } - return -1; -} - -static char *ss_copy(SimpleString *self) { - char *string = CALLOC(char, self->length + 1); - memcpy(string, self->start, self->length); - string[self->length] = '\0'; - return string; -} - -static int ss_toInt(SimpleString *self) { - return (int) strtol(self->start, &self->end, 10); -} - -typedef struct AtlasInput { - const char *start; - const char *end; - char *index; - int length; - SimpleString line; -} AtlasInput; - -static SimpleString *ai_readLine(AtlasInput *self) { - if (self->index >= self->end) return 0; - self->line.start = self->index; - while (self->index < self->end && *self->index != '\n') - self->index++; - self->line.end = self->index; - if (self->index != self->end) self->index++; - self->line = *ss_trim(&self->line); - self->line.length = self->line.end - self->line.start; - return &self->line; -} - -static int ai_readEntry(SimpleString entry[5], SimpleString *line) { - int colon, i, lastMatch; - SimpleString substr; - if (line == NULL) return 0; - ss_trim(line); - if (line->length == 0) return 0; - - colon = ss_indexOf(line, ':'); - if (colon == -1) return 0; - substr = ss_substr(line, 0, colon); - entry[0] = *ss_trim(&substr); - for (i = 1, lastMatch = colon + 1;; i++) { - int comma = ss_indexOf2(line, ',', lastMatch); - if (comma == -1) { - substr = ss_substr2(line, lastMatch); - entry[i] = *ss_trim(&substr); - return i; - } - substr = ss_substr(line, lastMatch, comma - lastMatch); - entry[i] = *ss_trim(&substr); - lastMatch = comma + 1; - if (i == 4) return 4; - } -} - -static const char *formatNames[] = {"", "Alpha", "Intensity", "LuminanceAlpha", "RGB565", "RGBA4444", "RGB888", - "RGBA8888"}; -static const char *textureFilterNames[] = {"", "Nearest", "Linear", "MipMap", "MipMapNearestNearest", - "MipMapLinearNearest", - "MipMapNearestLinear", "MipMapLinearLinear"}; - -int indexOf(const char **array, int count, SimpleString *str) { - int i; - for (i = 0; i < count; i++) - if (ss_equals(str, array[i])) return i; - return 0; -} - -spAtlas *spAtlas_create(const char *begin, int length, const char *dir, void *rendererObject) { - spAtlas *self; - AtlasInput reader; - SimpleString *line; - SimpleString entry[5]; - spAtlasPage *page = NULL; - spAtlasPage *lastPage = NULL; - spAtlasRegion *lastRegion = NULL; - - int count; - int dirLength = (int) strlen(dir); - int needsSlash = dirLength > 0 && dir[dirLength - 1] != '/' && dir[dirLength - 1] != '\\'; - - self = NEW(spAtlas); - self->rendererObject = rendererObject; - - reader.start = begin; - reader.end = begin + length; - reader.index = (char *) begin; - reader.length = length; - - line = ai_readLine(&reader); - while (line != NULL && line->length == 0) - line = ai_readLine(&reader); - - while (-1) { - if (line == NULL || line->length == 0) break; - if (ai_readEntry(entry, line) == 0) break; - line = ai_readLine(&reader); - } - - while (-1) { - if (line == NULL) break; - if (ss_trim(line)->length == 0) { - page = NULL; - line = ai_readLine(&reader); - } else if (page == NULL) { - char *name = ss_copy(line); - char *path = CALLOC(char, dirLength + needsSlash + strlen(name) + 1); - memcpy(path, dir, dirLength); - if (needsSlash) path[dirLength] = '/'; - strcpy(path + dirLength + needsSlash, name); - page = spAtlasPage_create(self, name); - FREE(name); - - if (lastPage) - lastPage->next = page; - else - self->pages = page; - lastPage = page; - - while (-1) { - line = ai_readLine(&reader); - if (ai_readEntry(entry, line) == 0) break; - if (ss_equals(&entry[0], "size")) { - page->width = ss_toInt(&entry[1]); - page->height = ss_toInt(&entry[2]); - } else if (ss_equals(&entry[0], "format")) { - page->format = (spAtlasFormat) indexOf(formatNames, 8, &entry[1]); - } else if (ss_equals(&entry[0], "filter")) { - page->minFilter = (spAtlasFilter) indexOf(textureFilterNames, 8, &entry[1]); - page->magFilter = (spAtlasFilter) indexOf(textureFilterNames, 8, &entry[2]); - } else if (ss_equals(&entry[0], "repeat")) { - page->uWrap = SP_ATLAS_CLAMPTOEDGE; - page->vWrap = SP_ATLAS_CLAMPTOEDGE; - if (ss_indexOf(&entry[1], 'x') != -1) page->uWrap = SP_ATLAS_REPEAT; - if (ss_indexOf(&entry[1], 'y') != -1) page->vWrap = SP_ATLAS_REPEAT; - } else if (ss_equals(&entry[0], "pma")) { - page->pma = ss_equals(&entry[1], "true"); - } - } - - _spAtlasPage_createTexture(page, path); - FREE(path); - } else { - spAtlasRegion *region = spAtlasRegion_create(); - if (lastRegion) - lastRegion->next = region; - else - self->regions = region; - lastRegion = region; - region->page = page; - region->name = ss_copy(line); - while (-1) { - line = ai_readLine(&reader); - count = ai_readEntry(entry, line); - if (count == 0) break; - if (ss_equals(&entry[0], "xy")) { - region->x = ss_toInt(&entry[1]); - region->y = ss_toInt(&entry[2]); - } else if (ss_equals(&entry[0], "size")) { - region->super.width = ss_toInt(&entry[1]); - region->super.height = ss_toInt(&entry[2]); - } else if (ss_equals(&entry[0], "bounds")) { - region->x = ss_toInt(&entry[1]); - region->y = ss_toInt(&entry[2]); - region->super.width = ss_toInt(&entry[3]); - region->super.height = ss_toInt(&entry[4]); - } else if (ss_equals(&entry[0], "offset")) { - region->super.offsetX = ss_toInt(&entry[1]); - region->super.offsetY = ss_toInt(&entry[2]); - } else if (ss_equals(&entry[0], "orig")) { - region->super.originalWidth = ss_toInt(&entry[1]); - region->super.originalHeight = ss_toInt(&entry[2]); - } else if (ss_equals(&entry[0], "offsets")) { - region->super.offsetX = ss_toInt(&entry[1]); - region->super.offsetY = ss_toInt(&entry[2]); - region->super.originalWidth = ss_toInt(&entry[3]); - region->super.originalHeight = ss_toInt(&entry[4]); - } else if (ss_equals(&entry[0], "rotate")) { - if (ss_equals(&entry[1], "true")) { - region->super.degrees = 90; - } else if (!ss_equals(&entry[1], "false")) { - region->super.degrees = ss_toInt(&entry[1]); - } - } else if (ss_equals(&entry[0], "index")) { - region->index = ss_toInt(&entry[1]); - } else { - int i = 0; - spKeyValue keyValue; - keyValue.name = ss_copy(&entry[0]); - for (i = 0; i < count; i++) { - keyValue.values[i] = ss_toInt(&entry[i + 1]); - } - spKeyValueArray_add(region->keyValues, keyValue); - } - } - if (region->super.originalWidth == 0 && region->super.originalHeight == 0) { - region->super.originalWidth = region->super.width; - region->super.originalHeight = region->super.height; - } - - region->super.u = (float) region->x / page->width; - region->super.v = (float) region->y / page->height; - if (region->super.degrees == 90) { - region->super.u2 = (float) (region->x + region->super.height) / page->width; - region->super.v2 = (float) (region->y + region->super.width) / page->height; - } else { - region->super.u2 = (float) (region->x + region->super.width) / page->width; - region->super.v2 = (float) (region->y + region->super.height) / page->height; - } - } - } - - return self; -} - -spAtlas *spAtlas_createFromFile(const char *path, void *rendererObject) { - int dirLength; - char *dir; - int length; - const char *data; - - spAtlas *atlas = 0; - - /* Get directory from atlas path. */ - const char *lastForwardSlash = strrchr(path, '/'); - const char *lastBackwardSlash = strrchr(path, '\\'); - const char *lastSlash = lastForwardSlash > lastBackwardSlash ? lastForwardSlash : lastBackwardSlash; - if (lastSlash == path) lastSlash++; /* Never drop starting slash. */ - dirLength = (int) (lastSlash ? lastSlash - path : 0); - dir = MALLOC(char, dirLength + 1); - memcpy(dir, path, dirLength); - dir[dirLength] = '\0'; - - data = _spUtil_readFile(path, &length); - if (data) atlas = spAtlas_create(data, length, dir, rendererObject); - - FREE(data); - FREE(dir); - return atlas; -} - -void spAtlas_dispose(spAtlas *self) { - spAtlasRegion *region, *nextRegion; - spAtlasPage *page = self->pages; - while (page) { - spAtlasPage *nextPage = page->next; - spAtlasPage_dispose(page); - page = nextPage; - } - - region = self->regions; - while (region) { - nextRegion = region->next; - spAtlasRegion_dispose(region); - region = nextRegion; - } - - FREE(self); -} - -spAtlasRegion *spAtlas_findRegion(const spAtlas *self, const char *name) { - spAtlasRegion *region = self->regions; - while (region) { - if (strcmp(region->name, name) == 0) return region; - region = region->next; - } - return 0; -} diff --git a/spine-c/spine-c/src/spine/AtlasAttachmentLoader.c b/spine-c/spine-c/src/spine/AtlasAttachmentLoader.c deleted file mode 100644 index 5ea0e861f..000000000 --- a/spine-c/spine-c/src/spine/AtlasAttachmentLoader.c +++ /dev/null @@ -1,117 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -static int /*bool*/ loadSequence(spAtlas *atlas, const char *basePath, spSequence *sequence) { - spTextureRegionArray *regions = sequence->regions; - char *path = CALLOC(char, strlen(basePath) + sequence->digits + 2); - int i; - for (i = 0; i < regions->size; i++) { - spSequence_getPath(sequence, basePath, i, path); - regions->items[i] = SUPER(spAtlas_findRegion(atlas, path)); - if (!regions->items[i]) { - FREE(path); - return 0; - } - regions->items[i]->rendererObject = regions->items[i]; - } - FREE(path); - return -1; -} - -spAttachment *_spAtlasAttachmentLoader_createAttachment(spAttachmentLoader *loader, spSkin *skin, spAttachmentType type, - const char *name, const char *path, spSequence *sequence) { - spAtlasAttachmentLoader *self = SUB_CAST(spAtlasAttachmentLoader, loader); - switch (type) { - case SP_ATTACHMENT_REGION: { - spRegionAttachment *attachment = spRegionAttachment_create(name); - if (sequence) { - if (!loadSequence(self->atlas, path, sequence)) { - spAttachment_dispose(SUPER(attachment)); - _spAttachmentLoader_setError(loader, "Couldn't load sequence for region attachment: ", path); - return 0; - } - } else { - spAtlasRegion *region = spAtlas_findRegion(self->atlas, path); - if (!region) { - spAttachment_dispose(SUPER(attachment)); - _spAttachmentLoader_setError(loader, "Region not found: ", path); - return 0; - } - attachment->rendererObject = region; - attachment->region = SUPER(region); - } - return SUPER(attachment); - } - case SP_ATTACHMENT_MESH: - case SP_ATTACHMENT_LINKED_MESH: { - spMeshAttachment *attachment = spMeshAttachment_create(name); - - if (sequence) { - if (!loadSequence(self->atlas, path, sequence)) { - spAttachment_dispose(SUPER(SUPER(attachment))); - _spAttachmentLoader_setError(loader, "Couldn't load sequence for mesh attachment: ", path); - return 0; - } - } else { - spAtlasRegion *region = spAtlas_findRegion(self->atlas, path); - if (!region) { - _spAttachmentLoader_setError(loader, "Region not found: ", path); - return 0; - } - attachment->rendererObject = region; - attachment->region = SUPER(region); - } - return SUPER(SUPER(attachment)); - } - case SP_ATTACHMENT_BOUNDING_BOX: - return SUPER(SUPER(spBoundingBoxAttachment_create(name))); - case SP_ATTACHMENT_PATH: - return SUPER(SUPER(spPathAttachment_create(name))); - case SP_ATTACHMENT_POINT: - return SUPER(spPointAttachment_create(name)); - case SP_ATTACHMENT_CLIPPING: - return SUPER(SUPER(spClippingAttachment_create(name))); - default: - _spAttachmentLoader_setUnknownTypeError(loader, type); - return 0; - } - - UNUSED(skin); -} - -spAtlasAttachmentLoader *spAtlasAttachmentLoader_create(spAtlas *atlas) { - spAtlasAttachmentLoader *self = NEW(spAtlasAttachmentLoader); - _spAttachmentLoader_init(SUPER(self), _spAttachmentLoader_deinit, _spAtlasAttachmentLoader_createAttachment, 0, 0); - self->atlas = atlas; - return self; -} diff --git a/spine-c/spine-c/src/spine/Attachment.c b/spine-c/spine-c/src/spine/Attachment.c deleted file mode 100644 index 355bdfe7a..000000000 --- a/spine-c/spine-c/src/spine/Attachment.c +++ /dev/null @@ -1,65 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -typedef struct _spAttachmentVtable { - void (*dispose)(spAttachment *self); - - spAttachment *(*copy)(spAttachment *self); -} _spAttachmentVtable; - -void _spAttachment_init(spAttachment *self, const char *name, spAttachmentType type, /**/ - void (*dispose)(spAttachment *self), spAttachment *(*copy)(spAttachment *self)) { - - self->vtable = NEW(_spAttachmentVtable); - VTABLE(spAttachment, self)->dispose = dispose; - VTABLE(spAttachment, self)->copy = copy; - - MALLOC_STR(self->name, name); - self->type = type; -} - -void _spAttachment_deinit(spAttachment *self) { - if (self->attachmentLoader) spAttachmentLoader_disposeAttachment(self->attachmentLoader, self); - FREE(self->vtable); - FREE(self->name); -} - -spAttachment *spAttachment_copy(spAttachment *self) { - return VTABLE(spAttachment, self)->copy(self); -} - -void spAttachment_dispose(spAttachment *self) { - self->refCount--; - if (self->refCount <= 0) - VTABLE(spAttachment, self)->dispose(self); -} diff --git a/spine-c/spine-c/src/spine/AttachmentLoader.c b/spine-c/spine-c/src/spine/AttachmentLoader.c deleted file mode 100644 index 4e3422692..000000000 --- a/spine-c/spine-c/src/spine/AttachmentLoader.c +++ /dev/null @@ -1,101 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -typedef struct _spAttachmentLoaderVtable { - spAttachment *(*createAttachment)(spAttachmentLoader *self, spSkin *skin, spAttachmentType type, const char *name, - const char *path, spSequence *sequence); - - void (*configureAttachment)(spAttachmentLoader *self, spAttachment *); - - void (*disposeAttachment)(spAttachmentLoader *self, spAttachment *); - - void (*dispose)(spAttachmentLoader *self); -} _spAttachmentLoaderVtable; - -void _spAttachmentLoader_init(spAttachmentLoader *self, - void (*dispose)(spAttachmentLoader *self), - spAttachment *(*createAttachment)(spAttachmentLoader *self, spSkin *skin, - spAttachmentType type, const char *name, - const char *path, spSequence *sequence), - void (*configureAttachment)(spAttachmentLoader *self, spAttachment *), - void (*disposeAttachment)(spAttachmentLoader *self, spAttachment *)) { - self->vtable = NEW(_spAttachmentLoaderVtable); - VTABLE(spAttachmentLoader, self)->dispose = dispose; - VTABLE(spAttachmentLoader, self)->createAttachment = createAttachment; - VTABLE(spAttachmentLoader, self)->configureAttachment = configureAttachment; - VTABLE(spAttachmentLoader, self)->disposeAttachment = disposeAttachment; -} - -void _spAttachmentLoader_deinit(spAttachmentLoader *self) { - FREE(self->vtable); - FREE(self->error1); - FREE(self->error2); -} - -void spAttachmentLoader_dispose(spAttachmentLoader *self) { - VTABLE(spAttachmentLoader, self)->dispose(self); - FREE(self); -} - -spAttachment * -spAttachmentLoader_createAttachment(spAttachmentLoader *self, spSkin *skin, spAttachmentType type, const char *name, - const char *path, spSequence *sequence) { - FREE(self->error1); - FREE(self->error2); - self->error1 = 0; - self->error2 = 0; - return VTABLE(spAttachmentLoader, self)->createAttachment(self, skin, type, name, path, sequence); -} - -void spAttachmentLoader_configureAttachment(spAttachmentLoader *self, spAttachment *attachment) { - if (!VTABLE(spAttachmentLoader, self)->configureAttachment) return; - VTABLE(spAttachmentLoader, self)->configureAttachment(self, attachment); -} - -void spAttachmentLoader_disposeAttachment(spAttachmentLoader *self, spAttachment *attachment) { - if (!VTABLE(spAttachmentLoader, self)->disposeAttachment) return; - VTABLE(spAttachmentLoader, self)->disposeAttachment(self, attachment); -} - -void _spAttachmentLoader_setError(spAttachmentLoader *self, const char *error1, const char *error2) { - FREE(self->error1); - FREE(self->error2); - MALLOC_STR(self->error1, error1); - MALLOC_STR(self->error2, error2); -} - -void _spAttachmentLoader_setUnknownTypeError(spAttachmentLoader *self, spAttachmentType type) { - char buffer[16]; - snprintf(buffer, 16, "%d", type); - _spAttachmentLoader_setError(self, "Unknown attachment type: ", buffer); -} diff --git a/spine-c/spine-c/src/spine/Bone.c b/spine-c/spine-c/src/spine/Bone.c deleted file mode 100644 index ce2d7e8f1..000000000 --- a/spine-c/spine-c/src/spine/Bone.c +++ /dev/null @@ -1,372 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -static int yDown; - -void spBone_setYDown(int value) { - yDown = value; -} - -int spBone_isYDown(void) { - return yDown; -} - -spBone *spBone_create(spBoneData *data, spSkeleton *skeleton, spBone *parent) { - spBone *self = NEW(spBone); - self->data = data; - self->skeleton = skeleton; - self->parent = parent; - self->a = 1.0f; - self->d = 1.0f; - self->active = -1; - self->inherit = SP_INHERIT_NORMAL; - spBone_setToSetupPose(self); - return self; -} - -void spBone_dispose(spBone *self) { - FREE(self->children); - FREE(self); -} - -void spBone_update(spBone *self) { - spBone_updateWorldTransformWith(self, self->ax, self->ay, self->arotation, self->ascaleX, self->ascaleY, self->ashearX, self->ashearY); -} - -void spBone_updateWorldTransform(spBone *self) { - spBone_updateWorldTransformWith(self, self->x, self->y, self->rotation, self->scaleX, self->scaleY, self->shearX, - self->shearY); -} - -void spBone_updateWorldTransformWith(spBone *self, float x, float y, float rotation, float scaleX, float scaleY, - float shearX, float shearY) { - float pa, pb, pc, pd; - float sx = self->skeleton->scaleX; - float sy = self->skeleton->scaleY * (spBone_isYDown() ? -1 : 1); - spBone *parent = self->parent; - - self->ax = x; - self->ay = y; - self->arotation = rotation; - self->ascaleX = scaleX; - self->ascaleY = scaleY; - self->ashearX = shearX; - self->ashearY = shearY; - - if (!parent) { /* Root bone. */ - float rx = (rotation + shearX) * DEG_RAD; - float ry = (rotation + 90 + shearY) * DEG_RAD; - self->a = COS(rx) * scaleX * sx; - self->b = COS(ry) * scaleY * sx; - self->c = SIN(rx) * scaleX * sy; - self->d = SIN(ry) * scaleY * sy; - self->worldX = x * sx + self->skeleton->x; - self->worldY = y * sy + self->skeleton->y; - return; - } - - pa = parent->a; - pb = parent->b; - pc = parent->c; - pd = parent->d; - - self->worldX = pa * x + pb * y + parent->worldX; - self->worldY = pc * x + pd * y + parent->worldY; - - switch (self->inherit) { - case SP_INHERIT_NORMAL: { - float rx = (rotation + shearX) * DEG_RAD; - float ry = (rotation + 90 + shearY) * DEG_RAD; - float la = COS(rx) * scaleX; - float lb = COS(ry) * scaleY; - float lc = SIN(rx) * scaleX; - float ld = SIN(ry) * scaleY; - self->a = pa * la + pb * lc; - self->b = pa * lb + pb * ld; - self->c = pc * la + pd * lc; - self->d = pc * lb + pd * ld; - return; - } - case SP_INHERIT_ONLYTRANSLATION: { - float rx = (rotation + shearX) * DEG_RAD; - float ry = (rotation + 90 + shearY) * DEG_RAD; - self->a = COS(rx) * scaleX; - self->b = COS(ry) * scaleY; - self->c = SIN(rx) * scaleX; - self->d = SIN(ry) * scaleY; - break; - } - case SP_INHERIT_NOROTATIONORREFLECTION: { - float s = pa * pa + pc * pc; - float prx; - if (s > 0.0001f) { - s = ABS(pa * pd - pb * pc) / s; - pa /= sx; - pc /= sy; - pb = pc * s; - pd = pa * s; - prx = ATAN2DEG(pc, pa); - } else { - pa = 0; - pc = 0; - prx = 90 - ATAN2DEG(pd, pb); - } - float rx = (rotation + shearX - prx) * DEG_RAD; - float ry = (rotation + shearY - prx + 90) * DEG_RAD; - float la = COS(rx) * scaleX; - float lb = COS(ry) * scaleY; - float lc = SIN(rx) * scaleX; - float ld = SIN(ry) * scaleY; - self->a = pa * la - pb * lc; - self->b = pa * lb - pb * ld; - self->c = pc * la + pd * lc; - self->d = pc * lb + pd * ld; - break; - } - case SP_INHERIT_NOSCALE: - case SP_INHERIT_NOSCALEORREFLECTION: { - rotation *= DEG_RAD; - float cosine = COS(rotation); - float sine = SIN(rotation); - float za = (pa * cosine + pb * sine) / sx; - float zc = (pc * cosine + pd * sine) / sy; - float s = SQRT(za * za + zc * zc); - if (s > 0.00001f) s = 1 / s; - za *= s; - zc *= s; - s = SQRT(za * za + zc * zc); - if (self->inherit == SP_INHERIT_NOSCALE && - (pa * pd - pb * pc < 0) != ((sx < 0) != (sy < 0))) - s = -s; - rotation = PI / 2 + ATAN2(zc, za); - float zb = COS(rotation) * s; - float zd = SIN(rotation) * s; - shearX *= DEG_RAD; - shearY = (90 + shearY) * DEG_RAD; - float la = COS(shearX) * scaleX; - float lb = COS(shearY) * scaleY; - float lc = SIN(shearX) * scaleX; - float ld = SIN(shearY) * scaleY; - self->a = za * la + zb * lc; - self->b = za * lb + zb * ld; - self->c = zc * la + zd * lc; - self->d = zc * lb + zd * ld; - } - } - - self->a *= sx; - self->b *= sx; - self->c *= sy; - self->d *= sy; -} - -void spBone_setToSetupPose(spBone *self) { - self->x = self->data->x; - self->y = self->data->y; - self->rotation = self->data->rotation; - self->scaleX = self->data->scaleX; - self->scaleY = self->data->scaleY; - self->shearX = self->data->shearX; - self->shearY = self->data->shearY; - self->inherit = self->data->inherit; -} - -float spBone_getWorldRotationX(spBone *self) { - return ATAN2DEG(self->c, self->a); -} - -float spBone_getWorldRotationY(spBone *self) { - return ATAN2DEG(self->d, self->b); -} - -float spBone_getWorldScaleX(spBone *self) { - return SQRT(self->a * self->a + self->c * self->c); -} - -float spBone_getWorldScaleY(spBone *self) { - return SQRT(self->b * self->b + self->d * self->d); -} - -/** Computes the individual applied transform values from the world transform. This can be useful to perform processing using - * the applied transform after the world transform has been modified directly (eg, by a constraint). - *

- * Some information is ambiguous in the world transform, such as -1,-1 scale versus 180 rotation. */ -void spBone_updateAppliedTransform(spBone *self) { - float pa, pb, pc, pd; - float pid; - float ia, ib, ic, id; - float dx, dy; - float ra, rb, rc, rd; - float s, sa, sc; - float cosine, sine; - - float yDownScale = spBone_isYDown() ? -1 : 1; - - spBone *parent = self->parent; - if (!parent) { - self->ax = self->worldX - self->skeleton->x; - self->ay = self->worldY - self->skeleton->y; - self->arotation = ATAN2DEG(self->c, self->a); - self->ascaleX = SQRT(self->a * self->a + self->c * self->c); - self->ascaleY = SQRT(self->b * self->b + self->d * self->d); - self->ashearX = 0; - self->ashearY = ATAN2DEG(self->a * self->b + self->c * self->d, self->a * self->d - self->b * self->c); - return; - } - - pa = parent->a, pb = parent->b, pc = parent->c, pd = parent->d; - pid = 1 / (pa * pd - pb * pc); - ia = pd * pid, ib = pb * pid, ic = pc * pid, id = pa * pid; - dx = self->worldX - parent->worldX, dy = self->worldY - parent->worldY; - self->ax = (dx * ia - dy * ib); - self->ay = (dy * id - dx * ic); - - if (self->inherit == SP_INHERIT_ONLYTRANSLATION) { - ra = self->a; - rb = self->b; - rc = self->c; - rd = self->d; - } else { - switch (self->inherit) { - case SP_INHERIT_NOROTATIONORREFLECTION: { - s = ABS(pa * pd - pb * pc) / (pa * pa + pc * pc); - sa = pa / self->skeleton->scaleX; - sc = pc / self->skeleton->scaleY * yDownScale; - pb = -sc * s * self->skeleton->scaleX; - pd = sa * s * self->skeleton->scaleY * yDownScale; - pid = 1 / (pa * pd - pb * pc); - ia = pd * pid; - ib = pb * pid; - break; - } - case SP_INHERIT_NOSCALE: - case SP_INHERIT_NOSCALEORREFLECTION: { - float r = self->rotation * DEG_RAD; - cosine = COS(r), sine = SIN(r); - pa = (pa * cosine + pb * sine) / self->skeleton->scaleX; - pc = (pc * cosine + pd * sine) / self->skeleton->scaleY * yDownScale; - s = SQRT(pa * pa + pc * pc); - if (s > 0.00001) s = 1 / s; - pa *= s; - pc *= s; - s = SQRT(pa * pa + pc * pc); - if (self->inherit == SP_INHERIT_NOSCALE && - (pid < 0) != ((self->skeleton->scaleX < 0) != ((self->skeleton->scaleY * yDownScale) < 0))) - s = -s; - r = PI / 2 + ATAN2(pc, pa); - pb = COS(r) * s; - pd = SIN(r) * s; - pid = 1 / (pa * pd - pb * pc); - ia = pd * pid; - ib = pb * pid; - ic = pc * pid; - id = pa * pid; - break; - } - case SP_INHERIT_ONLYTRANSLATION: - case SP_INHERIT_NORMAL: - break; - } - ra = ia * self->a - ib * self->c; - rb = ia * self->b - ib * self->d; - rc = id * self->c - ic * self->a; - rd = id * self->d - ic * self->b; - } - - self->ashearX = 0; - self->ascaleX = SQRT(ra * ra + rc * rc); - if (self->ascaleX > 0.0001f) { - float det = ra * rd - rb * rc; - self->ascaleY = det / self->ascaleX; - self->ashearY = -ATAN2DEG(ra * rb + rc * rd, det); - self->arotation = ATAN2DEG(rc, ra); - } else { - self->ascaleX = 0; - self->ascaleY = SQRT(rb * rb + rd * rd); - self->ashearY = 0; - self->arotation = 90 - ATAN2DEG(rd, rb); - } -} - -void spBone_worldToLocal(spBone *self, float worldX, float worldY, float *localX, float *localY) { - float invDet = 1 / (self->a * self->d - self->b * self->c); - float x = worldX - self->worldX, y = worldY - self->worldY; - *localX = (x * self->d * invDet - y * self->b * invDet); - *localY = (y * self->a * invDet - x * self->c * invDet); -} - -void spBone_worldToParent(spBone *self, float worldX, float worldY, float *localX, float *localY) { - if (self->parent == NULL) { - *localX = worldX; - *localY = worldY; - } else { - spBone_worldToLocal(self->parent, worldX, worldY, localX, localY); - } -} - -void spBone_localToWorld(spBone *self, float localX, float localY, float *worldX, float *worldY) { - float x = localX, y = localY; - *worldX = x * self->a + y * self->b + self->worldX; - *worldY = x * self->c + y * self->d + self->worldY; -} - -void spBone_parentToWorld(spBone *self, float localX, float localY, float *worldX, float *worldY) { - if (self->parent == NULL) { - *worldX = localX; - *worldY = localY; - } else { - spBone_localToWorld(self->parent, localX, localY, worldX, worldY); - } -} - -float spBone_worldToLocalRotation(spBone *self, float worldRotation) { - worldRotation *= DEG_RAD; - float sine = SIN(worldRotation), cosine = COS(worldRotation); - return ATAN2DEG(self->a * sine - self->c * cosine, self->d * cosine - self->b * sine) + self->rotation - self->shearX; -} - -float spBone_localToWorldRotation(spBone *self, float localRotation) { - localRotation = (localRotation - self->rotation - self->shearX) * DEG_RAD; - float sine = SIN(localRotation), cosine = COS(localRotation); - return ATAN2DEG(cosine * self->c + sine * self->d, cosine * self->a + sine * self->b); -} - -void spBone_rotateWorld(spBone *self, float degrees) { - degrees *= DEG_RAD; - float sine = SIN(degrees), cosine = COS(degrees); - float ra = self->a, rb = self->b; - self->a = cosine * ra - sine * self->c; - self->b = cosine * rb - sine * self->d; - self->c = sine * ra + cosine * self->c; - self->d = sine * rb + cosine * self->d; -} diff --git a/spine-c/spine-c/src/spine/BoneData.c b/spine-c/spine-c/src/spine/BoneData.c deleted file mode 100644 index 4378b5bbe..000000000 --- a/spine-c/spine-c/src/spine/BoneData.c +++ /dev/null @@ -1,50 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -spBoneData *spBoneData_create(int index, const char *name, spBoneData *parent) { - spBoneData *self = NEW(spBoneData); - self->index = index; - MALLOC_STR(self->name, name); - self->parent = parent; - self->scaleX = 1; - self->scaleY = 1; - self->inherit = SP_INHERIT_NORMAL; - self->icon = NULL; - self->visible = -1; - return self; -} - -void spBoneData_dispose(spBoneData *self) { - FREE(self->name); - FREE(self->icon); - FREE(self); -} diff --git a/spine-c/spine-c/src/spine/BoundingBoxAttachment.c b/spine-c/spine-c/src/spine/BoundingBoxAttachment.c deleted file mode 100644 index 2e460d9c4..000000000 --- a/spine-c/spine-c/src/spine/BoundingBoxAttachment.c +++ /dev/null @@ -1,54 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -void _spBoundingBoxAttachment_dispose(spAttachment *attachment) { - spBoundingBoxAttachment *self = SUB_CAST(spBoundingBoxAttachment, attachment); - - _spVertexAttachment_deinit(SUPER(self)); - - FREE(self); -} - -spAttachment *_spBoundingBoxAttachment_copy(spAttachment *attachment) { - spBoundingBoxAttachment *copy = spBoundingBoxAttachment_create(attachment->name); - spBoundingBoxAttachment *self = SUB_CAST(spBoundingBoxAttachment, attachment); - spVertexAttachment_copyTo(SUPER(self), SUPER(copy)); - return SUPER(SUPER(copy)); -} - -spBoundingBoxAttachment *spBoundingBoxAttachment_create(const char *name) { - spBoundingBoxAttachment *self = NEW(spBoundingBoxAttachment); - _spVertexAttachment_init(SUPER(self)); - _spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_BOUNDING_BOX, _spBoundingBoxAttachment_dispose, - _spBoundingBoxAttachment_copy); - return self; -} diff --git a/spine-c/spine-c/src/spine/ClippingAttachment.c b/spine-c/spine-c/src/spine/ClippingAttachment.c deleted file mode 100644 index 81196d2af..000000000 --- a/spine-c/spine-c/src/spine/ClippingAttachment.c +++ /dev/null @@ -1,56 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -void _spClippingAttachment_dispose(spAttachment *attachment) { - spClippingAttachment *self = SUB_CAST(spClippingAttachment, attachment); - - _spVertexAttachment_deinit(SUPER(self)); - - FREE(self); -} - -spAttachment *_spClippingAttachment_copy(spAttachment *attachment) { - spClippingAttachment *copy = spClippingAttachment_create(attachment->name); - spClippingAttachment *self = SUB_CAST(spClippingAttachment, attachment); - spVertexAttachment_copyTo(SUPER(self), SUPER(copy)); - copy->endSlot = self->endSlot; - return SUPER(SUPER(copy)); -} - -spClippingAttachment *spClippingAttachment_create(const char *name) { - spClippingAttachment *self = NEW(spClippingAttachment); - _spVertexAttachment_init(SUPER(self)); - _spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_CLIPPING, _spClippingAttachment_dispose, - _spClippingAttachment_copy); - self->endSlot = 0; - return self; -} diff --git a/spine-c/spine-c/src/spine/Color.c b/spine-c/spine-c/src/spine/Color.c deleted file mode 100644 index fbc9922d3..000000000 --- a/spine-c/spine-c/src/spine/Color.c +++ /dev/null @@ -1,108 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -spColor *spColor_create(void) { - return MALLOC(spColor, 1); -} - -void spColor_dispose(spColor *self) { - if (self) FREE(self); -} - -void spColor_setFromFloats(spColor *self, float r, float g, float b, float a) { - self->r = r; - self->g = g; - self->b = b; - self->a = a; - spColor_clamp(self); -} - -void spColor_setFromFloats3(spColor *self, float r, float g, float b) { - self->r = r; - self->g = g; - self->b = b; - spColor_clamp(self); -} - -void spColor_setFromColor(spColor *self, spColor *otherColor) { - self->r = otherColor->r; - self->g = otherColor->g; - self->b = otherColor->b; - self->a = otherColor->a; -} - -void spColor_setFromColor3(spColor *self, spColor *otherColor) { - self->r = otherColor->r; - self->g = otherColor->g; - self->b = otherColor->b; -} - -void spColor_addColor(spColor *self, spColor *otherColor) { - self->r += otherColor->r; - self->g += otherColor->g; - self->b += otherColor->b; - self->a += otherColor->a; - spColor_clamp(self); -} - -void spColor_addFloats(spColor *self, float r, float g, float b, float a) { - self->r += r; - self->g += g; - self->b += b; - self->a += a; - spColor_clamp(self); -} - -void spColor_addFloats3(spColor *self, float r, float g, float b) { - self->r += r; - self->g += g; - self->b += b; - spColor_clamp(self); -} - -void spColor_clamp(spColor *self) { - if (self->r < 0) self->r = 0; - else if (self->r > 1) - self->r = 1; - - if (self->g < 0) self->g = 0; - else if (self->g > 1) - self->g = 1; - - if (self->b < 0) self->b = 0; - else if (self->b > 1) - self->b = 1; - - if (self->a < 0) self->a = 0; - else if (self->a > 1) - self->a = 1; -} diff --git a/spine-c/spine-c/src/spine/Debug.c b/spine-c/spine-c/src/spine/Debug.c deleted file mode 100644 index 825134a90..000000000 --- a/spine-c/spine-c/src/spine/Debug.c +++ /dev/null @@ -1,266 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -#include - -static const char *_spTimelineTypeNames[] = { - "Attachment", - "Alpha", - "PathConstraintPosition", - "PathConstraintSpace", - "Rotate", - "ScaleX", - "ScaleY", - "ShearX", - "ShearY", - "TranslateX", - "TranslateY", - "Scale", - "Shear", - "Translate", - "Deform", - "IkConstraint", - "PathConstraintMix", - "Rgb2", - "Rgba2", - "Rgba", - "Rgb", - "TransformConstraint", - "DrawOrder", - "Event"}; - -void spDebug_printSkeletonData(spSkeletonData *skeletonData) { - int i, n; - spDebug_printBoneDatas(skeletonData->bones, skeletonData->bonesCount); - - for (i = 0, n = skeletonData->animationsCount; i < n; i++) { - spDebug_printAnimation(skeletonData->animations[i]); - } -} - -void _spDebug_printTimelineBase(spTimeline *timeline) { - printf(" Timeline %s:\n", _spTimelineTypeNames[timeline->type]); - printf(" frame count: %i\n", timeline->frameCount); - printf(" frame entries: %i\n", timeline->frameEntries); - printf(" frames: "); - spDebug_printFloats(timeline->frames->items, timeline->frames->size); - printf("\n"); -} - -void _spDebug_printCurveTimeline(spCurveTimeline *timeline) { - _spDebug_printTimelineBase(&timeline->super); - printf(" curves: "); - spDebug_printFloats(timeline->curves->items, timeline->curves->size); - printf("\n"); -} - -void spDebug_printTimeline(spTimeline *timeline) { - switch (timeline->type) { - case SP_TIMELINE_ATTACHMENT: { - spAttachmentTimeline *t = (spAttachmentTimeline *) timeline; - _spDebug_printTimelineBase(&t->super); - break; - } - case SP_TIMELINE_ALPHA: { - spAlphaTimeline *t = (spAlphaTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_PATHCONSTRAINTPOSITION: { - spPathConstraintPositionTimeline *t = (spPathConstraintPositionTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_PATHCONSTRAINTSPACING: { - spPathConstraintMixTimeline *t = (spPathConstraintMixTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_ROTATE: { - spRotateTimeline *t = (spRotateTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_SCALEX: { - spScaleXTimeline *t = (spScaleXTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_SCALEY: { - spScaleYTimeline *t = (spScaleYTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_SHEARX: { - spShearXTimeline *t = (spShearXTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_SHEARY: { - spShearYTimeline *t = (spShearYTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_TRANSLATEX: { - spTranslateXTimeline *t = (spTranslateXTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_TRANSLATEY: { - spTranslateYTimeline *t = (spTranslateYTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_SCALE: { - spScaleTimeline *t = (spScaleTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_SHEAR: { - spShearTimeline *t = (spShearTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_TRANSLATE: { - spTranslateTimeline *t = (spTranslateTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_DEFORM: { - spDeformTimeline *t = (spDeformTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_IKCONSTRAINT: { - spIkConstraintTimeline *t = (spIkConstraintTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_PATHCONSTRAINTMIX: { - spPathConstraintMixTimeline *t = (spPathConstraintMixTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_RGB2: { - spRGB2Timeline *t = (spRGB2Timeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_RGBA2: { - spRGBA2Timeline *t = (spRGBA2Timeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_RGBA: { - spRGBATimeline *t = (spRGBATimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_RGB: { - spRGBTimeline *t = (spRGBTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_TRANSFORMCONSTRAINT: { - spTransformConstraintTimeline *t = (spTransformConstraintTimeline *) timeline; - _spDebug_printCurveTimeline(&t->super); - break; - } - case SP_TIMELINE_DRAWORDER: { - spDrawOrderTimeline *t = (spDrawOrderTimeline *) timeline; - _spDebug_printTimelineBase(&t->super); - break; - } - case SP_TIMELINE_EVENT: { - spEventTimeline *t = (spEventTimeline *) timeline; - _spDebug_printTimelineBase(&t->super); - break; - } - case SP_TIMELINE_SEQUENCE: { - spSequenceTimeline *t = (spSequenceTimeline *) timeline; - _spDebug_printTimelineBase(&t->super); - }// fallthrough - case SP_TIMELINE_INHERIT: { - spInheritTimeline *t = (spInheritTimeline *) timeline; - _spDebug_printTimelineBase(&t->super); - }// fallthrough - default: { - _spDebug_printTimelineBase(timeline); - } - } -} - -void spDebug_printAnimation(spAnimation *animation) { - int i, n; - printf("Animation %s: %i timelines\n", animation->name, animation->timelines->size); - - for (i = 0, n = animation->timelines->size; i < n; i++) { - spDebug_printTimeline(animation->timelines->items[i]); - } -} - -void spDebug_printBoneDatas(spBoneData **boneDatas, int numBoneDatas) { - int i; - for (i = 0; i < numBoneDatas; i++) { - spDebug_printBoneData(boneDatas[i]); - } -} - -void spDebug_printBoneData(spBoneData *boneData) { - printf("Bone data %s: %f, %f, %f, %f, %f, %f %f\n", boneData->name, boneData->rotation, boneData->scaleX, - boneData->scaleY, boneData->x, boneData->y, boneData->shearX, boneData->shearY); -} - -void spDebug_printSkeleton(spSkeleton *skeleton) { - spDebug_printBones(skeleton->bones, skeleton->bonesCount); -} - -void spDebug_printBones(spBone **bones, int numBones) { - int i; - for (i = 0; i < numBones; i++) { - spDebug_printBone(bones[i]); - } -} - -void spDebug_printBone(spBone *bone) { - printf("Bone %s: %f, %f, %f, %f, %f, %f\n", bone->data->name, bone->a, bone->b, bone->c, bone->d, bone->worldX, - bone->worldY); -} - -void spDebug_printFloats(float *values, int numFloats) { - int i; - printf("(%i) [", numFloats); - for (i = 0; i < numFloats; i++) { - printf("%f, ", values[i]); - } - printf("]"); -} diff --git a/spine-c/spine-c/src/spine/Event.c b/spine-c/spine-c/src/spine/Event.c deleted file mode 100644 index 8b13c0192..000000000 --- a/spine-c/spine-c/src/spine/Event.c +++ /dev/null @@ -1,43 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -spEvent *spEvent_create(float time, spEventData *data) { - spEvent *self = NEW(spEvent); - self->data = data; - self->time = time; - return self; -} - -void spEvent_dispose(spEvent *self) { - FREE(self->stringValue); - FREE(self); -} diff --git a/spine-c/spine-c/src/spine/EventData.c b/spine-c/spine-c/src/spine/EventData.c deleted file mode 100644 index c2761a6ab..000000000 --- a/spine-c/spine-c/src/spine/EventData.c +++ /dev/null @@ -1,44 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -spEventData *spEventData_create(const char *name) { - spEventData *self = NEW(spEventData); - MALLOC_STR(self->name, name); - return self; -} - -void spEventData_dispose(spEventData *self) { - FREE(self->audioPath); - FREE(self->stringValue); - FREE(self->name); - FREE(self); -} diff --git a/spine-c/spine-c/src/spine/IkConstraint.c b/spine-c/spine-c/src/spine/IkConstraint.c deleted file mode 100644 index f651cb7f5..000000000 --- a/spine-c/spine-c/src/spine/IkConstraint.c +++ /dev/null @@ -1,312 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include -#include - -spIkConstraint *spIkConstraint_create(spIkConstraintData *data, const spSkeleton *skeleton) { - int i; - - spIkConstraint *self = NEW(spIkConstraint); - self->data = data; - self->bendDirection = data->bendDirection; - self->compress = data->compress; - self->stretch = data->stretch; - self->mix = data->mix; - self->softness = data->softness; - - self->bonesCount = self->data->bonesCount; - self->bones = MALLOC(spBone *, self->bonesCount); - for (i = 0; i < self->bonesCount; ++i) - self->bones[i] = spSkeleton_findBone(skeleton, self->data->bones[i]->name); - self->target = spSkeleton_findBone(skeleton, self->data->target->name); - - return self; -} - -void spIkConstraint_dispose(spIkConstraint *self) { - FREE(self->bones); - FREE(self); -} - -void spIkConstraint_update(spIkConstraint *self) { - if (self->mix == 0) return; - switch (self->bonesCount) { - case 1: - spIkConstraint_apply1(self->bones[0], self->target->worldX, self->target->worldY, self->compress, - self->stretch, self->data->uniform, self->mix); - break; - case 2: - spIkConstraint_apply2(self->bones[0], self->bones[1], self->target->worldX, self->target->worldY, - self->bendDirection, self->stretch, self->data->uniform, self->softness, self->mix); - break; - } -} - -void spIkConstraint_setToSetupPose(spIkConstraint *self) { - self->bendDirection = self->data->bendDirection; - self->compress = self->data->compress; - self->stretch = self->data->stretch; - self->softness = self->data->softness; - self->mix = self->data->mix; -} - -void spIkConstraint_apply1(spBone *bone, float targetX, float targetY, int /*boolean*/ compress, int /*boolean*/ stretch, - int /*boolean*/ uniform, float alpha) { - spBone *p = bone->parent; - float pa = p->a, pb = p->b, pc = p->c, pd = p->d; - float rotationIK = -bone->ashearX - bone->arotation; - float tx = 0, ty = 0, sx = 0, sy = 0, s = 0, sa = 0, sc = 0; - - switch (bone->data->inherit) { - case SP_INHERIT_ONLYTRANSLATION: - tx = (targetX - bone->worldX) * SIGNUM(bone->skeleton->scaleX); - ty = (targetY - bone->worldY) * SIGNUM(bone->skeleton->scaleY); - break; - case SP_INHERIT_NOROTATIONORREFLECTION: { - s = ABS(pa * pd - pb * pc) / MAX(0.0001f, pa * pa + pc * pc); - sa = pa / bone->skeleton->scaleX; - sc = pc / bone->skeleton->scaleY; - pb = -sc * s * bone->skeleton->scaleX; - pd = sa * s * bone->skeleton->scaleY; - rotationIK += ATAN2(sc, sa) * RAD_DEG; - }// fallthrough - default: { - float x = targetX - p->worldX, y = targetY - p->worldY; - float d = pa * pd - pb * pc; - if (ABS(d) <= 0.0001f) { - tx = 0; - ty = 0; - } else { - tx = (x * pd - y * pb) / d - bone->ax; - ty = (y * pa - x * pc) / d - bone->ay; - } - } - } - rotationIK += ATAN2(ty, tx) * RAD_DEG; - - if (bone->ascaleX < 0) rotationIK += 180; - if (rotationIK > 180) rotationIK -= 360; - else if (rotationIK < -180) - rotationIK += 360; - sx = bone->ascaleX; - sy = bone->ascaleY; - if (compress || stretch) { - float b, dd; - switch (bone->data->inherit) { - case SP_INHERIT_NOSCALE: - case SP_INHERIT_NOSCALEORREFLECTION: - tx = targetX - bone->worldX; - ty = targetY - bone->worldY; - default:; - } - b = bone->data->length * sx, dd = SQRT(tx * tx + ty * ty); - if ((compress && dd < b) || ((stretch && dd > b) && (b > 0.0001f))) { - s = (dd / b - 1) * alpha + 1; - sx *= s; - if (uniform) sy *= s; - } - } - spBone_updateWorldTransformWith(bone, bone->ax, bone->ay, bone->arotation + rotationIK * alpha, sx, - sy, bone->ashearX, bone->ashearY); -} - -void spIkConstraint_apply2(spBone *parent, spBone *child, float targetX, float targetY, int bendDir, int /*boolean*/ stretch, - int /*boolean*/ uniform, float softness, float alpha) { - float a, b, c, d; - float px, py, psx, psy, sx, sy; - float cx, cy, csx, cwx, cwy; - int o1, o2, s2, u; - spBone *pp = parent->parent; - float tx, ty, dd, dx, dy, l1, l2, a1, a2, r, td, sd, p; - float id, x, y; - float aa, bb, ll, ta, c0, c1, c2; - - px = parent->ax; - py = parent->ay; - psx = parent->ascaleX; - psy = parent->ascaleY; - sx = psx; - sy = psy; - csx = child->ascaleX; - if (psx < 0) { - psx = -psx; - o1 = 180; - s2 = -1; - } else { - o1 = 0; - s2 = 1; - } - if (psy < 0) { - psy = -psy; - s2 = -s2; - } - if (csx < 0) { - csx = -csx; - o2 = 180; - } else - o2 = 0; - r = psx - psy; - cx = child->ax; - u = (r < 0 ? -r : r) <= 0.0001f; - if (!u || stretch) { - cy = 0; - cwx = parent->a * cx + parent->worldX; - cwy = parent->c * cx + parent->worldY; - } else { - cy = child->ay; - cwx = parent->a * cx + parent->b * cy + parent->worldX; - cwy = parent->c * cx + parent->d * cy + parent->worldY; - } - a = pp->a; - b = pp->b; - c = pp->c; - d = pp->d; - id = a * d - b * c; - id = ABS(id) <= 0.0001f ? 0 : 1 / id; - x = cwx - pp->worldX; - y = cwy - pp->worldY; - dx = (x * d - y * b) * id - px; - dy = (y * a - x * c) * id - py; - l1 = SQRT(dx * dx + dy * dy); - l2 = child->data->length * csx; - if (l1 < 0.0001) { - spIkConstraint_apply1(parent, targetX, targetY, 0, stretch, 0, alpha); - spBone_updateWorldTransformWith(child, cx, cy, 0, child->ascaleX, child->ascaleY, child->ashearX, - child->ashearY); - return; - } - x = targetX - pp->worldX; - y = targetY - pp->worldY; - tx = (x * d - y * b) * id - px; - ty = (y * a - x * c) * id - py; - dd = tx * tx + ty * ty; - if (softness != 0) { - softness *= psx * (csx + 1) * 0.5f; - td = SQRT(dd); - sd = td - l1 - l2 * psx + softness; - if (sd > 0) { - p = MIN(1, sd / (softness * 2)) - 1; - p = (sd - softness * (1 - p * p)) / td; - tx -= p * tx; - ty -= p * ty; - dd = tx * tx + ty * ty; - } - } - if (u) { - float cosine; - l2 *= psx; - cosine = (dd - l1 * l1 - l2 * l2) / (2 * l1 * l2); - if (cosine < -1) { - cosine = -1; - a2 = PI * bendDir; - } else if (cosine > 1) { - cosine = 1; - a2 = 0; - if (stretch) { - a = (SQRT(dd) / (l1 + l2) - 1) * alpha + 1; - sx *= a; - if (uniform) sy *= a; - } - } else - a2 = ACOS(cosine) * bendDir; - a = l1 + l2 * cosine; - b = l2 * SIN(a2); - a1 = ATAN2(ty * a - tx * b, tx * a + ty * b); - } else { - a = psx * l2; - b = psy * l2; - aa = a * a, bb = b * b, ll = l1 * l1, ta = ATAN2(ty, tx); - c0 = bb * ll + aa * dd - aa * bb, c1 = -2 * bb * l1, c2 = bb - aa; - d = c1 * c1 - 4 * c2 * c0; - if (d >= 0) { - float q = SQRT(d), r0, r1; - if (c1 < 0) q = -q; - q = -(c1 + q) * 0.5f; - r0 = q / c2; - r1 = c0 / q; - r = ABS(r0) < ABS(r1) ? r0 : r1; - y = dd - r * r; - if (y > 0) { - y = SQRT(y) * bendDir; - a1 = ta - ATAN2(y, r); - a2 = ATAN2(y / psy, (r - l1) / psx); - goto break_outer; - } - } - { - float minAngle = PI, minX = l1 - a, minDist = minX * minX, minY = 0; - float maxAngle = 0, maxX = l1 + a, maxDist = maxX * maxX, maxY = 0; - c0 = -a * l1 / (aa - bb); - if (c0 >= -1 && c0 <= 1) { - c0 = ACOS(c0); - x = a * COS(c0) + l1; - y = b * SIN(c0); - d = x * x + y * y; - if (d < minDist) { - minAngle = c0; - minDist = d; - minX = x; - minY = y; - } - if (d > maxDist) { - maxAngle = c0; - maxDist = d; - maxX = x; - maxY = y; - } - } - if (dd <= (minDist + maxDist) * 0.5f) { - a1 = ta - ATAN2(minY * bendDir, minX); - a2 = minAngle * bendDir; - } else { - a1 = ta - ATAN2(maxY * bendDir, maxX); - a2 = maxAngle * bendDir; - } - } - } -break_outer : { - float os = ATAN2(cy, cx) * s2; - float rotation = parent->arotation; - a1 = (a1 - os) * RAD_DEG + o1 - rotation; - if (a1 > 180) a1 -= 360; - else if (a1 < -180) - a1 += 360; - spBone_updateWorldTransformWith(parent, px, py, rotation + a1 * alpha, sx, sy, 0, 0); - rotation = child->arotation; - a2 = ((a2 + os) * RAD_DEG - child->ashearX) * s2 + o2 - rotation; - if (a2 > 180) a2 -= 360; - else if (a2 < -180) - a2 += 360; - spBone_updateWorldTransformWith(child, cx, cy, rotation + a2 * alpha, child->ascaleX, child->ascaleY, - child->ashearX, child->ashearY); -} -} diff --git a/spine-c/spine-c/src/spine/IkConstraintData.c b/spine-c/spine-c/src/spine/IkConstraintData.c deleted file mode 100644 index b3dfd89fa..000000000 --- a/spine-c/spine-c/src/spine/IkConstraintData.c +++ /dev/null @@ -1,48 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -spIkConstraintData *spIkConstraintData_create(const char *name) { - spIkConstraintData *self = NEW(spIkConstraintData); - MALLOC_STR(self->name, name); - self->bendDirection = 0; - self->compress = 0; - self->stretch = 0; - self->uniform = 0; - self->mix = 0; - return self; -} - -void spIkConstraintData_dispose(spIkConstraintData *self) { - FREE(self->name); - FREE(self->bones); - FREE(self); -} diff --git a/spine-c/spine-c/src/spine/Json.c b/spine-c/spine-c/src/spine/Json.c deleted file mode 100644 index 084bf04ac..000000000 --- a/spine-c/spine-c/src/spine/Json.c +++ /dev/null @@ -1,472 +0,0 @@ -/* -Copyright (c) 2009, Dave Gamble -Copyright (c) 2013, Esoteric Software - -Permission is hereby granted, dispose of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - -/* Json */ -/* JSON parser in C. */ - -#ifndef _DEFAULT_SOURCE -/* Bring strings.h definitions into string.h, where appropriate */ -#define _DEFAULT_SOURCE -#endif - -#ifndef _BSD_SOURCE -/* Bring strings.h definitions into string.h, where appropriate */ -#define _BSD_SOURCE -#endif - -#include "Json.h" -#include -#include -#include -#include /* strtod (C89), strtof (C99) */ -#include /* strcasecmp (4.4BSD - compatibility), _stricmp (_WIN32) */ - -#ifndef SPINE_JSON_DEBUG -/* Define this to do extra NULL and expected-character checking */ -#define SPINE_JSON_DEBUG 0 -#endif - -static const char *ep; - -const char *Json_getError(void) { - return ep; -} - -static int Json_strcasecmp(const char *s1, const char *s2) { - /* TODO we may be able to elide these NULL checks if we can prove - the graph and input (only callsite is Json_getItem) should not have NULLs */ - if (s1 && s2) { -#if defined(_WIN32) - return _stricmp(s1, s2); -#else - return strcasecmp(s1, s2); -#endif - } else { - if (s1 < s2) - return -1; /* s1 is null, s2 is not */ - else if (s1 == s2) - return 0; /* both are null */ - else - return 1; /* s2 is nul s1 is not */ - } -} - -/* Internal constructor. */ -static Json *Json_new(void) { - return (Json *) CALLOC(Json, 1); -} - -/* Delete a Json structure. */ -void Json_dispose(Json *c) { - Json *next; - while (c) { - next = c->next; - if (c->child) Json_dispose(c->child); - if (c->valueString) FREE(c->valueString); - if (c->name) FREE(c->name); - FREE(c); - c = next; - } -} - -/* Parse the input text to generate a number, and populate the result into item. */ -static const char *parse_number(Json *item, const char *num) { - double result = 0.0; - int negative = 0; - char *ptr = (char *) num; - - if (*ptr == '-') { - negative = -1; - ++ptr; - } - - while (*ptr >= '0' && *ptr <= '9') { - result = result * 10.0 + (*ptr - '0'); - ++ptr; - } - - if (*ptr == '.') { - double fraction = 0.0; - int n = 0; - ++ptr; - - while (*ptr >= '0' && *ptr <= '9') { - fraction = (fraction * 10.0) + (*ptr - '0'); - ++ptr; - ++n; - } - result += fraction / POW(10.0, n); - } - if (negative) result = -result; - - if (*ptr == 'e' || *ptr == 'E') { - double exponent = 0; - int expNegative = 0; - ++ptr; - - if (*ptr == '-') { - expNegative = -1; - ++ptr; - } else if (*ptr == '+') { - ++ptr; - } - - while (*ptr >= '0' && *ptr <= '9') { - exponent = (exponent * 10.0) + (*ptr - '0'); - ++ptr; - } - - if (expNegative) - result = result / POW(10, exponent); - else - result = result * POW(10, exponent); - } - - if (ptr != num) { - /* Parse success, number found. */ - item->valueFloat = (float) result; - item->valueInt = (int) result; - item->type = Json_Number; - return ptr; - } else { - /* Parse failure, ep is set. */ - ep = num; - return 0; - } -} - -/* Parse the input text into an unescaped cstring, and populate item. */ -static const unsigned char firstByteMark[7] = {0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC}; - -static const char *parse_string(Json *item, const char *str) { - const char *ptr = str + 1; - char *ptr2; - char *out; - int len = 0; - unsigned uc, uc2; - if (*str != '\"') { /* TODO: don't need this check when called from parse_value, but do need from parse_object */ - ep = str; - return 0; - } /* not a string! */ - - while (*ptr != '\"' && *ptr && ++len) - if (*ptr++ == '\\') ptr++; /* Skip escaped quotes. */ - - out = MALLOC(char, len + 1); /* The length needed for the string, roughly. */ - if (!out) return 0; - - ptr = str + 1; - ptr2 = out; - while (*ptr != '\"' && *ptr) { - if (*ptr != '\\') - *ptr2++ = *ptr++; - else { - ptr++; - switch (*ptr) { - case 'b': - *ptr2++ = '\b'; - break; - case 'f': - *ptr2++ = '\f'; - break; - case 'n': - *ptr2++ = '\n'; - break; - case 'r': - *ptr2++ = '\r'; - break; - case 't': - *ptr2++ = '\t'; - break; - case 'u': /* transcode utf16 to utf8. */ - sscanf(ptr + 1, "%4x", &uc); - ptr += 4; /* get the unicode char. */ - - if ((uc >= 0xDC00 && uc <= 0xDFFF) || uc == 0) break; /* check for invalid. */ - - /* TODO provide an option to ignore surrogates, use unicode replacement character? */ - if (uc >= 0xD800 && uc <= 0xDBFF) /* UTF16 surrogate pairs. */ - { - if (ptr[1] != '\\' || ptr[2] != 'u') break; /* missing second-half of surrogate. */ - sscanf(ptr + 3, "%4x", &uc2); - ptr += 6; - if (uc2 < 0xDC00 || uc2 > 0xDFFF) break; /* invalid second-half of surrogate. */ - uc = 0x10000 + (((uc & 0x3FF) << 10) | (uc2 & 0x3FF)); - } - - len = 4; - if (uc < 0x80) - len = 1; - else if (uc < 0x800) - len = 2; - else if (uc < 0x10000) - len = 3; - ptr2 += len; - - switch (len) { - case 4: - *--ptr2 = ((uc | 0x80) & 0xBF); - uc >>= 6; - /* fallthrough */ - case 3: - *--ptr2 = ((uc | 0x80) & 0xBF); - uc >>= 6; - /* fallthrough */ - case 2: - *--ptr2 = ((uc | 0x80) & 0xBF); - uc >>= 6; - /* fallthrough */ - case 1: - *--ptr2 = (uc | firstByteMark[len]); - } - ptr2 += len; - break; - default: - *ptr2++ = *ptr; - break; - } - ptr++; - } - } - *ptr2 = 0; - if (*ptr == '\"') ptr++; /* TODO error handling if not \" or \0 ? */ - item->valueString = out; - item->type = Json_String; - return ptr; -} - -/* Predeclare these prototypes. */ -static const char *parse_value(Json *item, const char *value); - -static const char *parse_array(Json *item, const char *value); - -static const char *parse_object(Json *item, const char *value); - -/* Utility to jump whitespace and cr/lf */ -static const char *skip(const char *in) { - if (!in) return 0; /* must propagate NULL since it's often called in skip(f(...)) form */ - while (*in && (unsigned char) *in <= 32) - in++; - return in; -} - -/* Parse an object - create a new root, and populate. */ -Json *Json_create(const char *value) { - Json *c; - ep = 0; - if (!value) return 0; /* only place we check for NULL other than skip() */ - c = Json_new(); - if (!c) return 0; /* memory fail */ - - value = parse_value(c, skip(value)); - if (!value) { - Json_dispose(c); - return 0; - } /* parse failure. ep is set. */ - - return c; -} - -/* Parser core - when encountering text, process appropriately. */ -static const char *parse_value(Json *item, const char *value) { - /* Referenced by Json_create(), parse_array(), and parse_object(). */ - /* Always called with the result of skip(). */ -#if SPINE_JSON_DEBUG /* Checked at entry to graph, Json_create, and after every parse_ call. */ - if (!value) return 0; /* Fail on null. */ -#endif - - switch (*value) { - case 'n': { - if (!strncmp(value + 1, "ull", 3)) { - item->type = Json_NULL; - return value + 4; - } - break; - } - case 'f': { - if (!strncmp(value + 1, "alse", 4)) { - item->type = Json_False; - /* calloc prevents us needing item->type = Json_False or valueInt = 0 here */ - return value + 5; - } - break; - } - case 't': { - if (!strncmp(value + 1, "rue", 3)) { - item->type = Json_True; - item->valueInt = 1; - return value + 4; - } - break; - } - case '\"': - return parse_string(item, value); - case '[': - return parse_array(item, value); - case '{': - return parse_object(item, value); - case '-': /* fallthrough */ - case '0': /* fallthrough */ - case '1': /* fallthrough */ - case '2': /* fallthrough */ - case '3': /* fallthrough */ - case '4': /* fallthrough */ - case '5': /* fallthrough */ - case '6': /* fallthrough */ - case '7': /* fallthrough */ - case '8': /* fallthrough */ - case '9': - return parse_number(item, value); - default: - break; - } - - ep = value; - return 0; /* failure. */ -} - -/* Build an array from input text. */ -static const char *parse_array(Json *item, const char *value) { - Json *child; - -#if SPINE_JSON_DEBUG /* unnecessary, only callsite (parse_value) verifies this */ - if (*value != '[') { - ep = value; - return 0; - } /* not an array! */ -#endif - - item->type = Json_Array; - value = skip(value + 1); - if (*value == ']') return value + 1; /* empty array. */ - - item->child = child = Json_new(); - if (!item->child) return 0; /* memory fail */ - value = skip(parse_value(child, skip(value))); /* skip any spacing, get the value. */ - if (!value) return 0; - item->size = 1; - - while (*value == ',') { - Json *new_item = Json_new(); - if (!new_item) return 0; /* memory fail */ - child->next = new_item; -#if SPINE_JSON_HAVE_PREV - new_item->prev = child; -#endif - child = new_item; - value = skip(parse_value(child, skip(value + 1))); - if (!value) return 0; /* parse fail */ - item->size++; - } - - if (*value == ']') return value + 1; /* end of array */ - ep = value; - return 0; /* malformed. */ -} - -/* Build an object from the text. */ -static const char *parse_object(Json *item, const char *value) { - Json *child; - -#if SPINE_JSON_DEBUG /* unnecessary, only callsite (parse_value) verifies this */ - if (*value != '{') { - ep = value; - return 0; - } /* not an object! */ -#endif - - item->type = Json_Object; - value = skip(value + 1); - if (*value == '}') return value + 1; /* empty array. */ - - item->child = child = Json_new(); - if (!item->child) return 0; - value = skip(parse_string(child, skip(value))); - if (!value) return 0; - child->name = child->valueString; - child->valueString = 0; - if (*value != ':') { - ep = value; - return 0; - } /* fail! */ - value = skip(parse_value(child, skip(value + 1))); /* skip any spacing, get the value. */ - if (!value) return 0; - item->size = 1; - - while (*value == ',') { - Json *new_item = Json_new(); - if (!new_item) return 0; /* memory fail */ - child->next = new_item; -#if SPINE_JSON_HAVE_PREV - new_item->prev = child; -#endif - child = new_item; - value = skip(parse_string(child, skip(value + 1))); - if (!value) return 0; - child->name = child->valueString; - child->valueString = 0; - if (*value != ':') { - ep = value; - return 0; - } /* fail! */ - value = skip(parse_value(child, skip(value + 1))); /* skip any spacing, get the value. */ - if (!value) return 0; - item->size++; - } - - if (*value == '}') return value + 1; /* end of array */ - ep = value; - return 0; /* malformed. */ -} - -Json *Json_getItem(Json *object, const char *string) { - Json *c = object->child; - while (c && Json_strcasecmp(c->name, string)) - c = c->next; - return c; -} - -Json *Json_getItemAtIndex(Json *object, int childIndex) { - Json *current = object->child; - while (current != NULL && childIndex > 0) { - childIndex--; - current = current->next; - } - return current; -} - -const char *Json_getString(Json *object, const char *name, const char *defaultValue) { - object = Json_getItem(object, name); - if (object) return object->valueString; - return defaultValue; -} - -float Json_getFloat(Json *value, const char *name, float defaultValue) { - value = Json_getItem(value, name); - return value ? value->valueFloat : defaultValue; -} - -int Json_getInt(Json *value, const char *name, int defaultValue) { - value = Json_getItem(value, name); - return value ? value->valueInt : defaultValue; -} diff --git a/spine-c/spine-c/src/spine/Json.h b/spine-c/spine-c/src/spine/Json.h deleted file mode 100644 index 5250019d1..000000000 --- a/spine-c/spine-c/src/spine/Json.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - Copyright (c) 2009 Dave Gamble - - Permission is hereby granted, dispose of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - */ - -/* Esoteric Software: Removed everything except parsing, shorter method names, more get methods, double to float, formatted. */ - -#ifndef SPINE_JSON_H_ -#define SPINE_JSON_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Json Types: */ -#define Json_False 0 -#define Json_True 1 -#define Json_NULL 2 -#define Json_Number 3 -#define Json_String 4 -#define Json_Array 5 -#define Json_Object 6 - -#ifndef SPINE_JSON_HAVE_PREV -/* Spine doesn't use the "prev" link in the Json sibling lists. */ -#define SPINE_JSON_HAVE_PREV 0 -#endif - -/* The Json structure: */ -typedef struct Json { - struct Json *next; -#if SPINE_JSON_HAVE_PREV - struct Json* prev; /* next/prev allow you to walk array/object chains. Alternatively, use getSize/getItem */ -#endif - struct Json *child; /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */ - - int type; /* The type of the item, as above. */ - int size; /* The number of children. */ - - const char *valueString; /* The item's string, if type==Json_String */ - int valueInt; /* The item's number, if type==Json_Number */ - float valueFloat; /* The item's number, if type==Json_Number */ - - const char *name; /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */ -} Json; - -/* Supply a block of JSON, and this returns a Json object you can interrogate. Call Json_dispose when finished. */ -Json *Json_create(const char *value); - -/* Delete a Json entity and all subentities. */ -void Json_dispose(Json *json); - -/* Get item "string" from object. Case insensitive. */ -Json *Json_getItem(Json *json, const char *string); - -Json *Json_getItemAtIndex(Json *object, int childIndex); - -const char *Json_getString(Json *json, const char *name, const char *defaultValue); - -float Json_getFloat(Json *json, const char *name, float defaultValue); - -int Json_getInt(Json *json, const char *name, int defaultValue); - -/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when Json_create() returns 0. 0 when Json_create() succeeds. */ -const char *Json_getError(void); - -#ifdef __cplusplus -} -#endif - -#endif /* SPINE_JSON_H_ */ diff --git a/spine-c/spine-c/src/spine/MeshAttachment.c b/spine-c/spine-c/src/spine/MeshAttachment.c deleted file mode 100644 index 35f3b09fe..000000000 --- a/spine-c/spine-c/src/spine/MeshAttachment.c +++ /dev/null @@ -1,192 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -void _spMeshAttachment_dispose(spAttachment *attachment) { - spMeshAttachment *self = SUB_CAST(spMeshAttachment, attachment); - if (self->sequence) spSequence_dispose(self->sequence); - FREE(self->path); - FREE(self->uvs); - if (!self->parentMesh) { - _spVertexAttachment_deinit(SUPER(self)); - FREE(self->regionUVs); - FREE(self->triangles); - FREE(self->edges); - } else - _spAttachment_deinit(attachment); - FREE(self); -} - -spAttachment *_spMeshAttachment_copy(spAttachment *attachment) { - spMeshAttachment *copy; - spMeshAttachment *self = SUB_CAST(spMeshAttachment, attachment); - if (self->parentMesh) - return SUPER(SUPER(spMeshAttachment_newLinkedMesh(self))); - copy = spMeshAttachment_create(attachment->name); - copy->rendererObject = self->rendererObject; - copy->region = self->region; - copy->sequence = self->sequence != NULL ? spSequence_copy(self->sequence) : NULL; - MALLOC_STR(copy->path, self->path); - spColor_setFromColor(©->color, &self->color); - - spVertexAttachment_copyTo(SUPER(self), SUPER(copy)); - copy->regionUVs = MALLOC(float, SUPER(self)->worldVerticesLength); - memcpy(copy->regionUVs, self->regionUVs, SUPER(self)->worldVerticesLength * sizeof(float)); - copy->uvs = MALLOC(float, SUPER(self)->worldVerticesLength); - memcpy(copy->uvs, self->uvs, SUPER(self)->worldVerticesLength * sizeof(float)); - copy->trianglesCount = self->trianglesCount; - copy->triangles = MALLOC(unsigned short, self->trianglesCount); - memcpy(copy->triangles, self->triangles, self->trianglesCount * sizeof(short)); - copy->hullLength = self->hullLength; - if (self->edgesCount > 0) { - copy->edgesCount = self->edgesCount; - copy->edges = MALLOC(unsigned short, self->edgesCount); - memcpy(copy->edges, self->edges, self->edgesCount * sizeof(int)); - } - copy->width = self->width; - copy->height = self->height; - - return SUPER(SUPER(copy)); -} - -spMeshAttachment *spMeshAttachment_newLinkedMesh(spMeshAttachment *self) { - spMeshAttachment *copy = spMeshAttachment_create(self->super.super.name); - - copy->rendererObject = self->rendererObject; - copy->region = self->region; - MALLOC_STR(copy->path, self->path); - spColor_setFromColor(©->color, &self->color); - copy->super.timelineAttachment = self->super.timelineAttachment; - spMeshAttachment_setParentMesh(copy, self->parentMesh ? self->parentMesh : self); - if (copy->region) spMeshAttachment_updateRegion(copy); - return copy; -} - -spMeshAttachment *spMeshAttachment_create(const char *name) { - spMeshAttachment *self = NEW(spMeshAttachment); - _spVertexAttachment_init(SUPER(self)); - spColor_setFromFloats(&self->color, 1, 1, 1, 1); - _spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_MESH, _spMeshAttachment_dispose, _spMeshAttachment_copy); - return self; -} - -void spMeshAttachment_updateRegion(spMeshAttachment *self) { - int i, n; - float *uvs; - float u, v, width, height; - int verticesLength = SUPER(self)->worldVerticesLength; - FREE(self->uvs); - uvs = self->uvs = MALLOC(float, verticesLength); - n = verticesLength; - u = self->region->u; - v = self->region->v; - - switch (self->region->degrees) { - case 90: { - float textureWidth = self->region->height / (self->region->u2 - self->region->u); - float textureHeight = self->region->width / (self->region->v2 - self->region->v); - u -= (self->region->originalHeight - self->region->offsetY - self->region->height) / textureWidth; - v -= (self->region->originalWidth - self->region->offsetX - self->region->width) / textureHeight; - width = self->region->originalHeight / textureWidth; - height = self->region->originalWidth / textureHeight; - for (i = 0; i < n; i += 2) { - uvs[i] = u + self->regionUVs[i + 1] * width; - uvs[i + 1] = v + (1 - self->regionUVs[i]) * height; - } - return; - } - case 180: { - float textureWidth = self->region->width / (self->region->u2 - self->region->u); - float textureHeight = self->region->height / (self->region->v2 - self->region->v); - u -= (self->region->originalWidth - self->region->offsetX - self->region->width) / textureWidth; - v -= self->region->offsetY / textureHeight; - width = self->region->originalWidth / textureWidth; - height = self->region->originalHeight / textureHeight; - for (i = 0; i < n; i += 2) { - uvs[i] = u + (1 - self->regionUVs[i]) * width; - uvs[i + 1] = v + (1 - self->regionUVs[i + 1]) * height; - } - return; - } - case 270: { - float textureHeight = self->region->height / (self->region->v2 - self->region->v); - float textureWidth = self->region->width / (self->region->u2 - self->region->u); - u -= self->region->offsetY / textureWidth; - v -= self->region->offsetX / textureHeight; - width = self->region->originalHeight / textureWidth; - height = self->region->originalWidth / textureHeight; - for (i = 0; i < n; i += 2) { - uvs[i] = u + (1 - self->regionUVs[i + 1]) * width; - uvs[i + 1] = v + self->regionUVs[i] * height; - } - return; - } - default: { - float textureWidth = self->region->width / (self->region->u2 - self->region->u); - float textureHeight = self->region->height / (self->region->v2 - self->region->v); - u -= self->region->offsetX / textureWidth; - v -= (self->region->originalHeight - self->region->offsetY - self->region->height) / textureHeight; - width = self->region->originalWidth / textureWidth; - height = self->region->originalHeight / textureHeight; - for (i = 0; i < n; i += 2) { - uvs[i] = u + self->regionUVs[i] * width; - uvs[i + 1] = v + self->regionUVs[i + 1] * height; - } - } - } -} - -void spMeshAttachment_setParentMesh(spMeshAttachment *self, spMeshAttachment *parentMesh) { - self->parentMesh = parentMesh; - if (parentMesh) { - self->super.bones = parentMesh->super.bones; - self->super.bonesCount = parentMesh->super.bonesCount; - - self->super.vertices = parentMesh->super.vertices; - self->super.verticesCount = parentMesh->super.verticesCount; - - self->regionUVs = parentMesh->regionUVs; - - self->triangles = parentMesh->triangles; - self->trianglesCount = parentMesh->trianglesCount; - - self->hullLength = parentMesh->hullLength; - - self->super.worldVerticesLength = parentMesh->super.worldVerticesLength; - - self->edges = parentMesh->edges; - self->edgesCount = parentMesh->edgesCount; - - self->width = parentMesh->width; - self->height = parentMesh->height; - } -} diff --git a/spine-c/spine-c/src/spine/PathAttachment.c b/spine-c/spine-c/src/spine/PathAttachment.c deleted file mode 100644 index 9a1caafbc..000000000 --- a/spine-c/spine-c/src/spine/PathAttachment.c +++ /dev/null @@ -1,59 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -void _spPathAttachment_dispose(spAttachment *attachment) { - spPathAttachment *self = SUB_CAST(spPathAttachment, attachment); - - _spVertexAttachment_deinit(SUPER(self)); - - FREE(self->lengths); - FREE(self); -} - -spAttachment *_spPathAttachment_copy(spAttachment *attachment) { - spPathAttachment *copy = spPathAttachment_create(attachment->name); - spPathAttachment *self = SUB_CAST(spPathAttachment, attachment); - spVertexAttachment_copyTo(SUPER(self), SUPER(copy)); - copy->lengthsLength = self->lengthsLength; - copy->lengths = MALLOC(float, self->lengthsLength); - memcpy(copy->lengths, self->lengths, self->lengthsLength * sizeof(float)); - copy->closed = self->closed; - copy->constantSpeed = self->constantSpeed; - return SUPER(SUPER(copy)); -} - -spPathAttachment *spPathAttachment_create(const char *name) { - spPathAttachment *self = NEW(spPathAttachment); - _spVertexAttachment_init(SUPER(self)); - _spAttachment_init(SUPER(SUPER(self)), name, SP_ATTACHMENT_PATH, _spPathAttachment_dispose, _spPathAttachment_copy); - return self; -} diff --git a/spine-c/spine-c/src/spine/PathConstraint.c b/spine-c/spine-c/src/spine/PathConstraint.c deleted file mode 100644 index 0c96b6424..000000000 --- a/spine-c/spine-c/src/spine/PathConstraint.c +++ /dev/null @@ -1,532 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -#define PATHCONSTRAINT_NONE -1 -#define PATHCONSTRAINT_BEFORE -2 -#define PATHCONSTRAINT_AFTER -3 -#define EPSILON 0.00001f - -spPathConstraint *spPathConstraint_create(spPathConstraintData *data, const spSkeleton *skeleton) { - int i; - spPathConstraint *self = NEW(spPathConstraint); - self->data = data; - self->bonesCount = data->bonesCount; - self->bones = MALLOC(spBone *, self->bonesCount); - for (i = 0; i < self->bonesCount; ++i) - self->bones[i] = spSkeleton_findBone(skeleton, self->data->bones[i]->name); - self->target = spSkeleton_findSlot(skeleton, self->data->target->name); - self->position = data->position; - self->spacing = data->spacing; - self->mixRotate = data->mixRotate; - self->mixX = data->mixX; - self->mixY = data->mixY; - self->spacesCount = 0; - self->spaces = 0; - self->positionsCount = 0; - self->positions = 0; - self->worldCount = 0; - self->world = 0; - self->curvesCount = 0; - self->curves = 0; - self->lengthsCount = 0; - self->lengths = 0; - return self; -} - -void spPathConstraint_dispose(spPathConstraint *self) { - FREE(self->bones); - FREE(self->spaces); - if (self->positions) FREE(self->positions); - if (self->world) FREE(self->world); - if (self->curves) FREE(self->curves); - if (self->lengths) FREE(self->lengths); - FREE(self); -} - -void spPathConstraint_update(spPathConstraint *self) { - int i, p, n; - float length, setupLength, x, y, dx, dy, s, sum; - float *spaces, *lengths, *positions; - float spacing; - float boneX, boneY, offsetRotation; - int /*bool*/ tip; - float mixRotate = self->mixRotate, mixX = self->mixX, mixY = self->mixY; - int lengthSpacing; - spPathAttachment *attachment = (spPathAttachment *) self->target->attachment; - spPathConstraintData *data = self->data; - int tangents = data->rotateMode == SP_ROTATE_MODE_TANGENT, scale = data->rotateMode == SP_ROTATE_MODE_CHAIN_SCALE; - int boneCount = self->bonesCount, spacesCount = tangents ? boneCount : boneCount + 1; - spBone **bones = self->bones; - spBone *pa; - - if (mixRotate == 0 && mixX == 0 && mixY == 0) return; - if ((attachment == 0) || (attachment->super.super.type != SP_ATTACHMENT_PATH)) return; - - if (self->spacesCount != spacesCount) { - if (self->spaces) FREE(self->spaces); - self->spaces = MALLOC(float, spacesCount); - self->spacesCount = spacesCount; - } - spaces = self->spaces; - spaces[0] = 0; - lengths = 0; - spacing = self->spacing; - - if (scale) { - if (self->lengthsCount != boneCount) { - if (self->lengths) FREE(self->lengths); - self->lengths = MALLOC(float, boneCount); - self->lengthsCount = boneCount; - } - lengths = self->lengths; - } - - switch (data->spacingMode) { - case SP_SPACING_MODE_PERCENT: - if (scale) { - for (i = 0, n = spacesCount - 1; i < n; i++) { - spBone *bone = bones[i]; - setupLength = bone->data->length; - x = setupLength * bone->a; - y = setupLength * bone->c; - lengths[i] = SQRT(x * x + y * y); - } - } - for (i = 1, n = spacesCount; i < n; i++) spaces[i] = spacing; - break; - case SP_SPACING_MODE_PROPORTIONAL: - sum = 0; - for (i = 0, n = spacesCount - 1; i < n;) { - spBone *bone = bones[i]; - setupLength = bone->data->length; - if (setupLength < EPSILON) { - if (scale) lengths[i] = 0; - spaces[++i] = spacing; - } else { - x = setupLength * bone->a, y = setupLength * bone->c; - length = SQRT(x * x + y * y); - if (scale) lengths[i] = length; - spaces[++i] = length; - sum += length; - } - } - if (sum > 0) { - sum = spacesCount / sum * spacing; - for (i = 1; i < spacesCount; i++) - spaces[i] *= sum; - } - break; - default: - lengthSpacing = data->spacingMode == SP_SPACING_MODE_LENGTH; - for (i = 0, n = spacesCount - 1; i < n;) { - spBone *bone = bones[i]; - setupLength = bone->data->length; - if (setupLength < EPSILON) { - if (scale) lengths[i] = 0; - spaces[++i] = spacing; - } else { - x = setupLength * bone->a, y = setupLength * bone->c; - length = SQRT(x * x + y * y); - if (scale) lengths[i] = length; - spaces[++i] = (lengthSpacing ? setupLength + spacing : spacing) * length / setupLength; - } - } - } - - positions = spPathConstraint_computeWorldPositions(self, attachment, spacesCount, tangents); - boneX = positions[0], boneY = positions[1], offsetRotation = self->data->offsetRotation; - tip = 0; - if (offsetRotation == 0) - tip = data->rotateMode == SP_ROTATE_MODE_CHAIN; - else { - tip = 0; - pa = self->target->bone; - offsetRotation *= pa->a * pa->d - pa->b * pa->c > 0 ? DEG_RAD : -DEG_RAD; - } - for (i = 0, p = 3; i < boneCount; i++, p += 3) { - spBone *bone = bones[i]; - bone->worldX += (boneX - bone->worldX) * mixX; - bone->worldY += (boneY - bone->worldY) * mixY; - x = positions[p], y = positions[p + 1], dx = x - boneX, dy = y - boneY; - if (scale) { - length = lengths[i]; - if (length != 0) { - s = (SQRT(dx * dx + dy * dy) / length - 1) * mixRotate + 1; - bone->a *= s; - bone->c *= s; - } - } - boneX = x; - boneY = y; - if (mixRotate > 0) { - float a = bone->a, b = bone->b, c = bone->c, d = bone->d, r, cosine, sine; - if (tangents) - r = positions[p - 1]; - else if (spaces[i + 1] == 0) - r = positions[p + 2]; - else - r = ATAN2(dy, dx); - r -= ATAN2(c, a) - offsetRotation * DEG_RAD; - if (tip) { - cosine = COS(r); - sine = SIN(r); - length = bone->data->length; - boneX += (length * (cosine * a - sine * c) - dx) * mixRotate; - boneY += (length * (sine * a + cosine * c) - dy) * mixRotate; - } else - r += offsetRotation; - if (r > PI) - r -= PI2; - else if (r < -PI) - r += PI2; - r *= mixRotate; - cosine = COS(r); - sine = SIN(r); - bone->a = cosine * a - sine * c; - bone->b = cosine * b - sine * d; - bone->c = sine * a + cosine * c; - bone->d = sine * b + cosine * d; - } - spBone_updateAppliedTransform(bone); - } -} - -void spPathConstraint_setToSetupPose(spPathConstraint *self) { - spPathConstraintData *data = self->data; - self->position = data->position; - self->spacing = data->spacing; - self->mixRotate = data->mixRotate; - self->mixX = data->mixX; - self->mixY = data->mixY; -} - -static void _addBeforePosition(float p, float *temp, int i, float *out, int o) { - float x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = ATAN2(dy, dx); - out[o] = x1 + p * COS(r); - out[o + 1] = y1 + p * SIN(r); - out[o + 2] = r; -} - -static void _addAfterPosition(float p, float *temp, int i, float *out, int o) { - float x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = ATAN2(dy, dx); - out[o] = x1 + p * COS(r); - out[o + 1] = y1 + p * SIN(r); - out[o + 2] = r; -} - -static void -_addCurvePosition(float p, float x1, float y1, float cx1, float cy1, float cx2, float cy2, float x2, float y2, - float *out, int o, int /*bool*/ tangents) { - float tt, ttt, u, uu, uuu; - float ut, ut3, uut3, utt3; - float x, y; - if (p == 0 || ISNAN(p)) { - out[o] = x1; - out[o + 1] = y1; - out[o + 2] = ATAN2(cy1 - y1, cx1 - x1); - return; - } - tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u; - ut = u * p, ut3 = ut * 3, uut3 = u * ut3, utt3 = ut3 * p; - x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; - out[o] = x; - out[o + 1] = y; - if (tangents) { - if (p < 0.001) - out[o + 2] = ATAN2(cy1 - y1, cx1 - x1); - else - out[o + 2] = ATAN2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); - } -} - -float *spPathConstraint_computeWorldPositions(spPathConstraint *self, spPathAttachment *path, int spacesCount, - int /*bool*/ tangents) { - int i, o, w, curve, segment, /*bool*/ closed, verticesLength, curveCount, prevCurve; - float *out, *curves, *segments; - float tmpx, tmpy, dddfx, dddfy, ddfx, ddfy, dfx, dfy, pathLength, curveLength, p; - float x1, y1, cx1, cy1, cx2, cy2, x2, y2, multiplier; - spSlot *target = self->target; - float position = self->position; - float *spaces = self->spaces, *world = 0; - if (self->positionsCount != spacesCount * 3 + 2) { - if (self->positions) FREE(self->positions); - self->positions = MALLOC(float, spacesCount * 3 + 2); - self->positionsCount = spacesCount * 3 + 2; - } - out = self->positions; - closed = path->closed; - verticesLength = path->super.worldVerticesLength, curveCount = verticesLength / 6, prevCurve = PATHCONSTRAINT_NONE; - - if (!path->constantSpeed) { - float *lengths = path->lengths; - curveCount -= closed ? 1 : 2; - pathLength = lengths[curveCount]; - if (self->data->positionMode == SP_POSITION_MODE_PERCENT) position *= pathLength; - switch (self->data->spacingMode) { - case SP_SPACING_MODE_PERCENT: - multiplier = pathLength; - break; - case SP_SPACING_MODE_PROPORTIONAL: - multiplier = pathLength / spacesCount; - break; - default: - multiplier = 1; - } - - if (self->worldCount != 8) { - if (self->world) FREE(self->world); - self->world = MALLOC(float, 8); - self->worldCount = 8; - } - world = self->world; - for (i = 0, o = 0, curve = 0; i < spacesCount; i++, o += 3) { - float space = spaces[i] * multiplier; - position += space; - p = position; - - if (closed) { - p = FMOD(p, pathLength); - if (p < 0) p += pathLength; - curve = 0; - } else if (p < 0) { - if (prevCurve != PATHCONSTRAINT_BEFORE) { - prevCurve = PATHCONSTRAINT_BEFORE; - spVertexAttachment_computeWorldVertices(SUPER(path), target, 2, 4, world, 0, 2); - } - _addBeforePosition(p, world, 0, out, o); - continue; - } else if (p > pathLength) { - if (prevCurve != PATHCONSTRAINT_AFTER) { - prevCurve = PATHCONSTRAINT_AFTER; - spVertexAttachment_computeWorldVertices(SUPER(path), target, verticesLength - 6, 4, world, 0, 2); - } - _addAfterPosition(p - pathLength, world, 0, out, o); - continue; - } - - /* Determine curve containing position. */ - for (;; curve++) { - float length = lengths[curve]; - if (p > length) continue; - if (curve == 0) - p /= length; - else { - float prev = lengths[curve - 1]; - p = (p - prev) / (length - prev); - } - break; - } - if (curve != prevCurve) { - prevCurve = curve; - if (closed && curve == curveCount) { - spVertexAttachment_computeWorldVertices(SUPER(path), target, verticesLength - 4, 4, world, 0, 2); - spVertexAttachment_computeWorldVertices(SUPER(path), target, 0, 4, world, 4, 2); - } else - spVertexAttachment_computeWorldVertices(SUPER(path), target, curve * 6 + 2, 8, world, 0, 2); - } - _addCurvePosition(p, world[0], world[1], world[2], world[3], world[4], world[5], world[6], world[7], out, o, - tangents || (i > 0 && space == 0)); - } - return out; - } - - /* World vertices. */ - if (closed) { - verticesLength += 2; - if (self->worldCount != verticesLength) { - if (self->world) FREE(self->world); - self->world = MALLOC(float, verticesLength); - self->worldCount = verticesLength; - } - world = self->world; - spVertexAttachment_computeWorldVertices(SUPER(path), target, 2, verticesLength - 4, world, 0, 2); - spVertexAttachment_computeWorldVertices(SUPER(path), target, 0, 2, world, verticesLength - 4, 2); - world[verticesLength - 2] = world[0]; - world[verticesLength - 1] = world[1]; - } else { - curveCount--; - verticesLength -= 4; - if (self->worldCount != verticesLength) { - if (self->world) FREE(self->world); - self->world = MALLOC(float, verticesLength); - self->worldCount = verticesLength; - } - world = self->world; - spVertexAttachment_computeWorldVertices(SUPER(path), target, 2, verticesLength, world, 0, 2); - } - - /* Curve lengths. */ - if (self->curvesCount != curveCount) { - if (self->curves) FREE(self->curves); - self->curves = MALLOC(float, curveCount); - self->curvesCount = curveCount; - } - curves = self->curves; - pathLength = 0; - x1 = world[0], y1 = world[1], cx1 = 0, cy1 = 0, cx2 = 0, cy2 = 0, x2 = 0, y2 = 0; - for (i = 0, w = 2; i < curveCount; i++, w += 6) { - cx1 = world[w]; - cy1 = world[w + 1]; - cx2 = world[w + 2]; - cy2 = world[w + 3]; - x2 = world[w + 4]; - y2 = world[w + 5]; - tmpx = (x1 - cx1 * 2 + cx2) * 0.1875f; - tmpy = (y1 - cy1 * 2 + cy2) * 0.1875f; - dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.09375f; - dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.09375f; - ddfx = tmpx * 2 + dddfx; - ddfy = tmpy * 2 + dddfy; - dfx = (cx1 - x1) * 0.75f + tmpx + dddfx * 0.16666667f; - dfy = (cy1 - y1) * 0.75f + tmpy + dddfy * 0.16666667f; - pathLength += SQRT(dfx * dfx + dfy * dfy); - dfx += ddfx; - dfy += ddfy; - ddfx += dddfx; - ddfy += dddfy; - pathLength += SQRT(dfx * dfx + dfy * dfy); - dfx += ddfx; - dfy += ddfy; - pathLength += SQRT(dfx * dfx + dfy * dfy); - dfx += ddfx + dddfx; - dfy += ddfy + dddfy; - pathLength += SQRT(dfx * dfx + dfy * dfy); - curves[i] = pathLength; - x1 = x2; - y1 = y2; - } - - if (self->data->positionMode == SP_POSITION_MODE_PERCENT) position *= pathLength; - - switch (self->data->spacingMode) { - case SP_SPACING_MODE_PERCENT: - multiplier = pathLength; - break; - case SP_SPACING_MODE_PROPORTIONAL: - multiplier = pathLength / spacesCount; - break; - default: - multiplier = 1; - } - - segments = self->segments; - curveLength = 0; - for (i = 0, o = 0, curve = 0, segment = 0; i < spacesCount; i++, o += 3) { - float space = spaces[i] * multiplier; - position += space; - p = position; - - if (closed) { - p = FMOD(p, pathLength); - if (p < 0) p += pathLength; - curve = 0; - } else if (p < 0) { - _addBeforePosition(p, world, 0, out, o); - continue; - } else if (p > pathLength) { - _addAfterPosition(p - pathLength, world, verticesLength - 4, out, o); - continue; - } - - /* Determine curve containing position. */ - for (;; curve++) { - float length = curves[curve]; - if (p > length) continue; - if (curve == 0) - p /= length; - else { - float prev = curves[curve - 1]; - p = (p - prev) / (length - prev); - } - break; - } - - /* Curve segment lengths. */ - if (curve != prevCurve) { - int ii; - prevCurve = curve; - ii = curve * 6; - x1 = world[ii]; - y1 = world[ii + 1]; - cx1 = world[ii + 2]; - cy1 = world[ii + 3]; - cx2 = world[ii + 4]; - cy2 = world[ii + 5]; - x2 = world[ii + 6]; - y2 = world[ii + 7]; - tmpx = (x1 - cx1 * 2 + cx2) * 0.03f; - tmpy = (y1 - cy1 * 2 + cy2) * 0.03f; - dddfx = ((cx1 - cx2) * 3 - x1 + x2) * 0.006f; - dddfy = ((cy1 - cy2) * 3 - y1 + y2) * 0.006f; - ddfx = tmpx * 2 + dddfx; - ddfy = tmpy * 2 + dddfy; - dfx = (cx1 - x1) * 0.3f + tmpx + dddfx * 0.16666667f; - dfy = (cy1 - y1) * 0.3f + tmpy + dddfy * 0.16666667f; - curveLength = SQRT(dfx * dfx + dfy * dfy); - segments[0] = curveLength; - for (ii = 1; ii < 8; ii++) { - dfx += ddfx; - dfy += ddfy; - ddfx += dddfx; - ddfy += dddfy; - curveLength += SQRT(dfx * dfx + dfy * dfy); - segments[ii] = curveLength; - } - dfx += ddfx; - dfy += ddfy; - curveLength += SQRT(dfx * dfx + dfy * dfy); - segments[8] = curveLength; - dfx += ddfx + dddfx; - dfy += ddfy + dddfy; - curveLength += SQRT(dfx * dfx + dfy * dfy); - segments[9] = curveLength; - segment = 0; - } - - /* Weight by segment length. */ - p *= curveLength; - for (;; segment++) { - float length = segments[segment]; - if (p > length) continue; - if (segment == 0) - p /= length; - else { - float prev = segments[segment - 1]; - p = segment + (p - prev) / (length - prev); - } - break; - } - _addCurvePosition(p * 0.1f, x1, y1, cx1, cy1, cx2, cy2, x2, y2, out, o, tangents || (i > 0 && space == 0)); - } - return out; -} diff --git a/spine-c/spine-c/src/spine/PathConstraintData.c b/spine-c/spine-c/src/spine/PathConstraintData.c deleted file mode 100644 index 986dcf7a5..000000000 --- a/spine-c/spine-c/src/spine/PathConstraintData.c +++ /dev/null @@ -1,43 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -spPathConstraintData *spPathConstraintData_create(const char *name) { - spPathConstraintData *self = NEW(spPathConstraintData); - MALLOC_STR(self->name, name); - return self; -} - -void spPathConstraintData_dispose(spPathConstraintData *self) { - FREE(self->name); - FREE(self->bones); - FREE(self); -} diff --git a/spine-c/spine-c/src/spine/PhysicsConstraint.c b/spine-c/spine-c/src/spine/PhysicsConstraint.c deleted file mode 100644 index edce06391..000000000 --- a/spine-c/spine-c/src/spine/PhysicsConstraint.c +++ /dev/null @@ -1,281 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -spPhysicsConstraint *spPhysicsConstraint_create(spPhysicsConstraintData *data, spSkeleton *skeleton) { - spPhysicsConstraint *self = NEW(spPhysicsConstraint); - self->data = data; - self->skeleton = skeleton; - self->bone = skeleton->bones[data->bone->index]; - self->inertia = data->inertia; - self->strength = data->strength; - self->damping = data->damping; - self->massInverse = data->massInverse; - self->wind = data->wind; - self->gravity = data->gravity; - self->mix = data->mix; - - self->reset = -1; - self->ux = 0; - self->uy = 0; - self->cx = 0; - self->tx = 0; - self->ty = 0; - self->xOffset = 0; - self->xVelocity = 0; - self->yOffset = 0; - self->yVelocity = 0; - self->rotateOffset = 0; - self->rotateVelocity = 0; - self->scaleOffset = 0; - self->scaleVelocity = 0; - self->active = 0; - self->remaining = 0; - self->lastTime = 0; - return self; -} - -void spPhysicsConstraint_dispose(spPhysicsConstraint *self) { - FREE(self); -} - -void spPhysicsConstraint_reset(spPhysicsConstraint *self) { - self->remaining = 0; - self->lastTime = self->skeleton->time; - self->reset = -1; - self->xOffset = 0; - self->xVelocity = 0; - self->yOffset = 0; - self->yVelocity = 0; - self->rotateOffset = 0; - self->rotateVelocity = 0; - self->scaleOffset = 0; - self->scaleVelocity = 0; -} - -void spPhysicsConstraint_setToSetupPose(spPhysicsConstraint *self) { - self->inertia = self->data->inertia; - self->strength = self->data->strength; - self->damping = self->data->damping; - self->massInverse = self->data->massInverse; - self->wind = self->data->wind; - self->gravity = self->data->gravity; - self->mix = self->data->mix; -} - -void spPhysicsConstraint_update(spPhysicsConstraint *self, spPhysics physics) { - float mix = self->mix; - if (mix == 0) return; - - int x = self->data->x > 0; - int y = self->data->y > 0; - int rotateOrShearX = self->data->rotate > 0 || self->data->shearX > 0; - int scaleX = self->data->scaleX > 0; - - spBone *bone = self->bone; - float l = bone->data->length; - - switch (physics) { - case SP_PHYSICS_NONE: - return; - case SP_PHYSICS_RESET: - spPhysicsConstraint_reset(self); - // Fall through. - case SP_PHYSICS_UPDATE: { - float delta = MAX(self->skeleton->time - self->lastTime, 0.0f); - self->remaining += delta; - self->lastTime = self->skeleton->time; - - float bx = bone->worldX, by = bone->worldY; - if (self->reset) { - self->reset = 0; - self->ux = bx; - self->uy = by; - } else { - // float a = self->remaining, i = self->inertia, q = self->data->limit * delta, t = self->data->step, f = self->skeleton->data->referenceScale, d = -1; - float a = self->remaining, i = self->inertia, t = self->data->step, f = self->skeleton->data->referenceScale; - float qx = self->data->limit * delta, qy = qx * ABS(self->skeleton->scaleX); - qx *= ABS(self->skeleton->scaleY); - if (x || y) { - if (x) { - float u = (self->ux - bx) * i; - self->xOffset += u > qx ? qx : u < -qx ? -qx - : u; - self->ux = bx; - } - if (y) { - float u = (self->uy - by) * i; - self->yOffset += u > qy ? qy : u < -qy ? -qy - : u; - self->uy = by; - } - if (a >= t) { - float d = POW(self->damping, 60 * t); - float m = self->massInverse * t, e = self->strength, w = self->wind * f * self->skeleton->scaleX, g = -(self->gravity) * f * self->skeleton->scaleY; - do { - if (x) { - self->xVelocity += (w - self->xOffset * e) * m; - self->xOffset += self->xVelocity * t; - self->xVelocity *= d; - } - if (y) { - self->yVelocity -= (g + self->yOffset * e) * m; - self->yOffset += self->yVelocity * t; - self->yVelocity *= d; - } - a -= t; - } while (a >= t); - } - if (x) bone->worldX += self->xOffset * mix * self->data->x; - if (y) bone->worldY += self->yOffset * mix * self->data->y; - } - - if (rotateOrShearX || scaleX) { - float ca = ATAN2(bone->c, bone->a), c, s, mr = 0; - float dx = self->cx - bone->worldX, dy = self->cy - bone->worldY; - if (dx > qx) - dx = qx; - else if (dx < -qx)// - dx = -qx; - if (dy > qy) - dy = qy; - else if (dy < -qy)// - dy = -qy; - if (rotateOrShearX) { - mr = (self->data->rotate + self->data->shearX) * mix; - float r = ATAN2(dy + self->ty, dx + self->tx) - ca - self->rotateOffset * mr; - self->rotateOffset += (r - CEIL(r * INV_PI2 - 0.5f) * PI2) * i; - r = self->rotateOffset * mr + ca; - c = COS(r); - s = SIN(r); - if (scaleX) { - r = l * spBone_getWorldScaleX(bone); - if (r > 0) self->scaleOffset += (dx * c + dy * s) * i / r; - } - } else { - c = COS(ca); - s = SIN(ca); - float r = l * spBone_getWorldScaleX(bone); - if (r > 0) self->scaleOffset += (dx * c + dy * s) * i / r; - } - a = self->remaining; - if (a >= t) { - float m = self->massInverse * t, e = self->strength, w = self->wind, g = self->gravity, h = l / f; - float d = POW(self->damping, 60 * t); - while (-1) { - a -= t; - if (scaleX) { - self->scaleVelocity += (w * c - g * s - self->scaleOffset * e) * m; - self->scaleOffset += self->scaleVelocity * t; - self->scaleVelocity *= d; - } - if (rotateOrShearX) { - self->rotateVelocity -= ((w * s + g * c) * h + self->rotateOffset * e) * m; - self->rotateOffset += self->rotateVelocity * t; - self->rotateVelocity *= d; - if (a < t) break; - float r = self->rotateOffset * mr + ca; - c = COS(r); - s = SIN(r); - } else if (a < t)// - break; - } - } - } - self->remaining = a; - } - - self->cx = bone->worldX; - self->cy = bone->worldY; - break; - } - case SP_PHYSICS_POSE: { - if (x) bone->worldX += self->xOffset * mix * self->data->x; - if (y) bone->worldY += self->yOffset * mix * self->data->y; - break; - } - } - - if (rotateOrShearX) { - float o = self->rotateOffset * mix, s = 0, c = 0, a = 0; - if (self->data->shearX > 0) { - float r = 0; - if (self->data->rotate > 0) { - r = o * self->data->rotate; - s = SIN(r); - c = COS(r); - a = bone->b; - bone->b = c * a - s * bone->d; - bone->d = s * a + c * bone->d; - } - r += o * self->data->shearX; - s = SIN(r); - c = COS(r); - a = bone->a; - bone->a = c * a - s * bone->c; - bone->c = s * a + c * bone->c; - } else { - o *= self->data->rotate; - s = SIN(o); - c = COS(o); - a = bone->a; - bone->a = c * a - s * bone->c; - bone->c = s * a + c * bone->c; - a = bone->b; - bone->b = c * a - s * bone->d; - bone->d = s * a + c * bone->d; - } - } - if (scaleX) { - float s = 1 + self->scaleOffset * mix * self->data->scaleX; - bone->a *= s; - bone->c *= s; - } - if (physics != SP_PHYSICS_POSE) { - self->tx = l * bone->a; - self->ty = l * bone->c; - } - spBone_updateAppliedTransform(bone); -} - -void spPhysicsConstraint_rotate(spPhysicsConstraint *self, float x, float y, float degrees) { - float r = degrees * DEG_RAD, cosine = COS(r), sine = SIN(r); - float dx = self->cx - x, dy = self->cy - y; - spPhysicsConstraint_translate(self, dx * cosine - dy * sine - dx, dx * sine + dy * cosine - dy); -} - -void spPhysicsConstraint_translate(spPhysicsConstraint *self, float x, float y) { - self->ux -= x; - self->uy -= y; - self->cx -= x; - self->cy -= y; -} diff --git a/spine-c/spine-c/src/spine/PhysicsConstraintData.c b/spine-c/spine-c/src/spine/PhysicsConstraintData.c deleted file mode 100644 index b917b35a1..000000000 --- a/spine-c/spine-c/src/spine/PhysicsConstraintData.c +++ /dev/null @@ -1,64 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -spPhysicsConstraintData *spPhysicsConstraintData_create(const char *name) { - spPhysicsConstraintData *self = NEW(spPhysicsConstraintData); - MALLOC_STR(self->name, name); - self->bone = NULL; - self->x = 0; - self->y = 0; - self->rotate = 0; - self->scaleX = 0; - self->shearX = 0; - self->limit = 0; - self->step = 0; - self->inertia = 0; - self->strength = 0; - self->damping = 0; - self->massInverse = 0; - self->wind = 0; - self->gravity = 0; - self->mix = 0; - self->inertiaGlobal = 0; - self->strengthGlobal = 0; - self->dampingGlobal = 0; - self->massGlobal = 0; - self->windGlobal = 0; - self->gravityGlobal = 0; - self->mixGlobal = 0; - return self; -} - -void spPhysicsConstraintData_dispose(spPhysicsConstraintData *self) { - FREE(self->name); - FREE(self); -} diff --git a/spine-c/spine-c/src/spine/PointAttachment.c b/spine-c/spine-c/src/spine/PointAttachment.c deleted file mode 100644 index 782610e57..000000000 --- a/spine-c/spine-c/src/spine/PointAttachment.c +++ /dev/null @@ -1,65 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -void _spPointAttachment_dispose(spAttachment *attachment) { - spPointAttachment *self = SUB_CAST(spPointAttachment, attachment); - _spAttachment_deinit(attachment); - FREE(self); -} - -spAttachment *_spPointAttachment_copy(spAttachment *attachment) { - spPointAttachment *self = SUB_CAST(spPointAttachment, attachment); - spPointAttachment *copy = spPointAttachment_create(attachment->name); - copy->x = self->x; - copy->y = self->y; - copy->rotation = self->rotation; - spColor_setFromColor(©->color, &self->color); - return SUPER(copy); -} - -spPointAttachment *spPointAttachment_create(const char *name) { - spPointAttachment *self = NEW(spPointAttachment); - _spAttachment_init(SUPER(self), name, SP_ATTACHMENT_POINT, _spPointAttachment_dispose, _spPointAttachment_copy); - return self; -} - -void spPointAttachment_computeWorldPosition(spPointAttachment *self, spBone *bone, float *x, float *y) { - *x = self->x * bone->a + self->y * bone->b + bone->worldX; - *y = self->x * bone->c + self->y * bone->d + bone->worldY; -} - -float spPointAttachment_computeWorldRotation(spPointAttachment *self, spBone *bone) { - float r = self->rotation * DEG_RAD, cosine = COS(r), sine = SIN(r); - float x = cosine * bone->a + sine * bone->b; - float y = cosine * bone->c + sine * bone->d; - return ATAN2DEG(y, x); -} diff --git a/spine-c/spine-c/src/spine/RegionAttachment.c b/spine-c/spine-c/src/spine/RegionAttachment.c deleted file mode 100644 index 070123fb1..000000000 --- a/spine-c/spine-c/src/spine/RegionAttachment.c +++ /dev/null @@ -1,176 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -typedef enum { - BLX = 0, - BLY, - ULX, - ULY, - URX, - URY, - BRX, - BRY -} spVertexIndex; - -void _spRegionAttachment_dispose(spAttachment *attachment) { - spRegionAttachment *self = SUB_CAST(spRegionAttachment, attachment); - if (self->sequence) spSequence_dispose(self->sequence); - _spAttachment_deinit(attachment); - FREE(self->path); - FREE(self); -} - -spAttachment *_spRegionAttachment_copy(spAttachment *attachment) { - spRegionAttachment *self = SUB_CAST(spRegionAttachment, attachment); - spRegionAttachment *copy = spRegionAttachment_create(attachment->name); - copy->region = self->region; - copy->rendererObject = self->rendererObject; - MALLOC_STR(copy->path, self->path); - copy->x = self->x; - copy->y = self->y; - copy->scaleX = self->scaleX; - copy->scaleY = self->scaleY; - copy->rotation = self->rotation; - copy->width = self->width; - copy->height = self->height; - memcpy(copy->uvs, self->uvs, sizeof(float) * 8); - memcpy(copy->offset, self->offset, sizeof(float) * 8); - spColor_setFromColor(©->color, &self->color); - copy->sequence = self->sequence ? spSequence_copy(self->sequence) : NULL; - return SUPER(copy); -} - -spRegionAttachment *spRegionAttachment_create(const char *name) { - spRegionAttachment *self = NEW(spRegionAttachment); - self->scaleX = 1; - self->scaleY = 1; - spColor_setFromFloats(&self->color, 1, 1, 1, 1); - _spAttachment_init(SUPER(self), name, SP_ATTACHMENT_REGION, _spRegionAttachment_dispose, _spRegionAttachment_copy); - return self; -} - -void spRegionAttachment_updateRegion(spRegionAttachment *self) { - float regionScaleX, regionScaleY, localX, localY, localX2, localY2; - float radians, cosine, sine; - float localXCos, localXSin, localYCos, localYSin, localX2Cos, localX2Sin, localY2Cos, localY2Sin; - - if (self->region == NULL) { - self->uvs[0] = 0; - self->uvs[1] = 0; - self->uvs[2] = 1; - self->uvs[3] = 1; - self->uvs[4] = 1; - self->uvs[5] = 0; - self->uvs[6] = 0; - self->uvs[7] = 0; - return; - } - - regionScaleX = self->width / self->region->originalWidth * self->scaleX; - regionScaleY = self->height / self->region->originalHeight * self->scaleY; - localX = -self->width / 2 * self->scaleX + self->region->offsetX * regionScaleX; - localY = -self->height / 2 * self->scaleY + self->region->offsetY * regionScaleY; - localX2 = localX + self->region->width * regionScaleX; - localY2 = localY + self->region->height * regionScaleY; - radians = self->rotation * DEG_RAD; - cosine = COS(radians), sine = SIN(radians); - localXCos = localX * cosine + self->x; - localXSin = localX * sine; - localYCos = localY * cosine + self->y; - localYSin = localY * sine; - localX2Cos = localX2 * cosine + self->x; - localX2Sin = localX2 * sine; - localY2Cos = localY2 * cosine + self->y; - localY2Sin = localY2 * sine; - - self->offset[BLX] = localXCos - localYSin; - self->offset[BLY] = localYCos + localXSin; - self->offset[ULX] = localXCos - localY2Sin; - self->offset[ULY] = localY2Cos + localXSin; - self->offset[URX] = localX2Cos - localY2Sin; - self->offset[URY] = localY2Cos + localX2Sin; - self->offset[BRX] = localX2Cos - localYSin; - self->offset[BRY] = localYCos + localX2Sin; - - if (self->region->degrees == 90) { - self->uvs[URX] = self->region->u; - self->uvs[URY] = self->region->v2; - self->uvs[BRX] = self->region->u; - self->uvs[BRY] = self->region->v; - self->uvs[BLX] = self->region->u2; - self->uvs[BLY] = self->region->v; - self->uvs[ULX] = self->region->u2; - self->uvs[ULY] = self->region->v2; - } else { - self->uvs[ULX] = self->region->u; - self->uvs[ULY] = self->region->v2; - self->uvs[URX] = self->region->u; - self->uvs[URY] = self->region->v; - self->uvs[BRX] = self->region->u2; - self->uvs[BRY] = self->region->v; - self->uvs[BLX] = self->region->u2; - self->uvs[BLY] = self->region->v2; - } -} - -void spRegionAttachment_computeWorldVertices(spRegionAttachment *self, spSlot *slot, float *vertices, int offset, - int stride) { - const float *offsets = self->offset; - spBone *bone = slot->bone; - float x = bone->worldX, y = bone->worldY; - float offsetX, offsetY; - - if (self->sequence) spSequence_apply(self->sequence, slot, SUPER(self)); - - offsetX = offsets[BRX]; - offsetY = offsets[BRY]; - vertices[offset] = offsetX * bone->a + offsetY * bone->b + x; /* br */ - vertices[offset + 1] = offsetX * bone->c + offsetY * bone->d + y; - offset += stride; - - offsetX = offsets[BLX]; - offsetY = offsets[BLY]; - vertices[offset] = offsetX * bone->a + offsetY * bone->b + x; /* bl */ - vertices[offset + 1] = offsetX * bone->c + offsetY * bone->d + y; - offset += stride; - - offsetX = offsets[ULX]; - offsetY = offsets[ULY]; - vertices[offset] = offsetX * bone->a + offsetY * bone->b + x; /* ul */ - vertices[offset + 1] = offsetX * bone->c + offsetY * bone->d + y; - offset += stride; - - offsetX = offsets[URX]; - offsetY = offsets[URY]; - vertices[offset] = offsetX * bone->a + offsetY * bone->b + x; /* ur */ - vertices[offset + 1] = offsetX * bone->c + offsetY * bone->d + y; -} diff --git a/spine-c/spine-c/src/spine/Sequence.c b/spine-c/spine-c/src/spine/Sequence.c deleted file mode 100644 index 4ff52838e..000000000 --- a/spine-c/spine-c/src/spine/Sequence.c +++ /dev/null @@ -1,115 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -_SP_ARRAY_IMPLEMENT_TYPE(spTextureRegionArray, spTextureRegion *) - -static int nextSequenceId = 0; - -spSequence *spSequence_create(int numRegions) { - spSequence *self = NEW(spSequence); - self->id = nextSequenceId++; - self->regions = spTextureRegionArray_create(numRegions); - spTextureRegionArray_setSize(self->regions, numRegions); - return self; -} - -void spSequence_dispose(spSequence *self) { - FREE(self->regions); - FREE(self); -} - -spSequence *spSequence_copy(spSequence *self) { - int i = 0; - spSequence *copy = spSequence_create(self->regions->size); - for (; i < self->regions->size; i++) - copy->regions->items[i] = self->regions->items[i]; - copy->start = self->start; - copy->digits = self->digits; - copy->setupIndex = self->setupIndex; - return copy; -} - -void spSequence_apply(spSequence *self, spSlot *slot, spAttachment *attachment) { - int index = slot->sequenceIndex; - spTextureRegion *region = NULL; - if (index == -1) index = self->setupIndex; - if (index >= (int) self->regions->size) index = self->regions->size - 1; - region = self->regions->items[index]; - - if (attachment->type == SP_ATTACHMENT_REGION) { - spRegionAttachment *regionAttachment = (spRegionAttachment *) attachment; - if (regionAttachment->region != region) { - regionAttachment->rendererObject = region; - regionAttachment->region = region; - spRegionAttachment_updateRegion(regionAttachment); - } - } - - if (attachment->type == SP_ATTACHMENT_MESH) { - spMeshAttachment *meshAttachment = (spMeshAttachment *) attachment; - if (meshAttachment->region != region) { - meshAttachment->rendererObject = region; - meshAttachment->region = region; - spMeshAttachment_updateRegion(meshAttachment); - } - } -} - -static int num_digits(int value) { - int count = value < 0 ? 1 : 0; - do { - value /= 10; - ++count; - } while (value != 0); - return count; -} - -static char *string_append(char *str, const char *b) { - int lenB = strlen(b); - memcpy(str, b, lenB + 1); - return str + lenB; -} - -static char *string_append_int(char *str, int value) { - char intStr[20]; - snprintf(intStr, 20, "%i", value); - return string_append(str, intStr); -} - -void spSequence_getPath(spSequence *self, const char *basePath, int index, char *path) { - int i; - path = string_append(path, basePath); - for (i = self->digits - num_digits(self->start + index); i > 0; i--) - path = string_append(path, "0"); - path = string_append_int(path, self->start + index); -} diff --git a/spine-c/spine-c/src/spine/Skeleton.c b/spine-c/spine-c/src/spine/Skeleton.c deleted file mode 100644 index b28428a72..000000000 --- a/spine-c/spine-c/src/spine/Skeleton.c +++ /dev/null @@ -1,689 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include -#include - -typedef enum { - SP_UPDATE_BONE, - SP_UPDATE_IK_CONSTRAINT, - SP_UPDATE_PATH_CONSTRAINT, - SP_UPDATE_TRANSFORM_CONSTRAINT, - SP_UPDATE_PHYSICS_CONSTRAINT -} _spUpdateType; - -typedef struct { - _spUpdateType type; - void *object; -} _spUpdate; - -typedef struct { - spSkeleton super; - - int updateCacheCount; - int updateCacheCapacity; - _spUpdate *updateCache; -} _spSkeleton; - -spSkeleton *spSkeleton_create(spSkeletonData *data) { - int i; - int *childrenCounts; - - _spSkeleton *internal = NEW(_spSkeleton); - spSkeleton *self = SUPER(internal); - self->data = data; - self->skin = NULL; - spColor_setFromFloats(&self->color, 1, 1, 1, 1); - self->scaleX = 1; - self->scaleY = 1; - self->time = 0; - - self->bonesCount = self->data->bonesCount; - self->bones = MALLOC(spBone *, self->bonesCount); - childrenCounts = CALLOC(int, self->bonesCount); - - for (i = 0; i < self->bonesCount; ++i) { - spBoneData *boneData = self->data->bones[i]; - spBone *newBone; - if (!boneData->parent) - newBone = spBone_create(boneData, self, 0); - else { - spBone *parent = self->bones[boneData->parent->index]; - newBone = spBone_create(boneData, self, parent); - ++childrenCounts[boneData->parent->index]; - } - self->bones[i] = newBone; - } - for (i = 0; i < self->bonesCount; ++i) { - spBoneData *boneData = self->data->bones[i]; - spBone *bone = self->bones[i]; - bone->children = MALLOC(spBone *, childrenCounts[boneData->index]); - } - for (i = 0; i < self->bonesCount; ++i) { - spBone *bone = self->bones[i]; - spBone *parent = bone->parent; - if (parent) - parent->children[parent->childrenCount++] = bone; - } - self->root = (self->bonesCount > 0 ? self->bones[0] : NULL); - - self->slotsCount = data->slotsCount; - self->slots = MALLOC(spSlot *, self->slotsCount); - for (i = 0; i < self->slotsCount; ++i) { - spSlotData *slotData = data->slots[i]; - spBone *bone = self->bones[slotData->boneData->index]; - self->slots[i] = spSlot_create(slotData, bone); - } - - self->drawOrder = MALLOC(spSlot *, self->slotsCount); - memcpy(self->drawOrder, self->slots, sizeof(spSlot *) * self->slotsCount); - - self->ikConstraintsCount = data->ikConstraintsCount; - self->ikConstraints = MALLOC(spIkConstraint *, self->ikConstraintsCount); - for (i = 0; i < self->data->ikConstraintsCount; ++i) - self->ikConstraints[i] = spIkConstraint_create(self->data->ikConstraints[i], self); - - self->transformConstraintsCount = data->transformConstraintsCount; - self->transformConstraints = MALLOC(spTransformConstraint *, self->transformConstraintsCount); - for (i = 0; i < self->data->transformConstraintsCount; ++i) - self->transformConstraints[i] = spTransformConstraint_create(self->data->transformConstraints[i], self); - - self->pathConstraintsCount = data->pathConstraintsCount; - self->pathConstraints = MALLOC(spPathConstraint *, self->pathConstraintsCount); - for (i = 0; i < self->data->pathConstraintsCount; i++) - self->pathConstraints[i] = spPathConstraint_create(self->data->pathConstraints[i], self); - - self->physicsConstraintsCount = data->physicsConstraintsCount; - self->physicsConstraints = MALLOC(spPhysicsConstraint *, self->physicsConstraintsCount); - for (i = 0; i < self->data->physicsConstraintsCount; i++) - self->physicsConstraints[i] = spPhysicsConstraint_create(self->data->physicsConstraints[i], self); - - - spColor_setFromFloats(&self->color, 1, 1, 1, 1); - - self->scaleX = 1; - self->scaleY = 1; - - self->time = 0; - - spSkeleton_updateCache(self); - - FREE(childrenCounts); - - return self; -} - -void spSkeleton_dispose(spSkeleton *self) { - int i; - _spSkeleton *internal = SUB_CAST(_spSkeleton, self); - - FREE(internal->updateCache); - - for (i = 0; i < self->bonesCount; ++i) - spBone_dispose(self->bones[i]); - FREE(self->bones); - - for (i = 0; i < self->slotsCount; ++i) - spSlot_dispose(self->slots[i]); - FREE(self->slots); - - for (i = 0; i < self->ikConstraintsCount; ++i) - spIkConstraint_dispose(self->ikConstraints[i]); - FREE(self->ikConstraints); - - for (i = 0; i < self->transformConstraintsCount; ++i) - spTransformConstraint_dispose(self->transformConstraints[i]); - FREE(self->transformConstraints); - - for (i = 0; i < self->pathConstraintsCount; i++) - spPathConstraint_dispose(self->pathConstraints[i]); - FREE(self->pathConstraints); - - for (i = 0; i < self->physicsConstraintsCount; i++) - spPhysicsConstraint_dispose(self->physicsConstraints[i]); - FREE(self->physicsConstraints); - - FREE(self->drawOrder); - FREE(self); -} - -static void _addToUpdateCache(_spSkeleton *const internal, _spUpdateType type, void *object) { - _spUpdate *update; - if (internal->updateCacheCount == internal->updateCacheCapacity) { - internal->updateCacheCapacity *= 2; - internal->updateCache = (_spUpdate *) REALLOC(internal->updateCache, _spUpdate, internal->updateCacheCapacity); - } - update = internal->updateCache + internal->updateCacheCount; - update->type = type; - update->object = object; - ++internal->updateCacheCount; -} - -static void _sortBone(_spSkeleton *const internal, spBone *bone) { - if (bone->sorted) return; - if (bone->parent) _sortBone(internal, bone->parent); - bone->sorted = 1; - _addToUpdateCache(internal, SP_UPDATE_BONE, bone); -} - -static void -_sortPathConstraintAttachmentBones(_spSkeleton *const internal, spAttachment *attachment, spBone *slotBone) { - spPathAttachment *pathAttachment = (spPathAttachment *) attachment; - int *pathBones; - int pathBonesCount; - if (pathAttachment->super.super.type != SP_ATTACHMENT_PATH) return; - pathBones = pathAttachment->super.bones; - pathBonesCount = pathAttachment->super.bonesCount; - if (pathBones == 0) - _sortBone(internal, slotBone); - else { - spBone **bones = internal->super.bones; - int i = 0, n; - - for (i = 0, n = pathBonesCount; i < n;) { - int nn = pathBones[i++]; - nn += i; - while (i < nn) - _sortBone(internal, bones[pathBones[i++]]); - } - } -} - -static void _sortPathConstraintAttachment(_spSkeleton *const internal, spSkin *skin, int slotIndex, spBone *slotBone) { - _Entry *entry = SUB_CAST(_spSkin, skin)->entries; - while (entry) { - if (entry->slotIndex == slotIndex) _sortPathConstraintAttachmentBones(internal, entry->attachment, slotBone); - entry = entry->next; - } -} - -static void _sortReset(spBone **bones, int bonesCount) { - int i; - for (i = 0; i < bonesCount; ++i) { - spBone *bone = bones[i]; - if (!bone->active) continue; - if (bone->sorted) _sortReset(bone->children, bone->childrenCount); - bone->sorted = 0; - } -} - -static void _sortIkConstraint(_spSkeleton *const internal, spIkConstraint *constraint) { - spBone *target = constraint->target; - spBone **constrained; - spBone *parent; - - constraint->active = constraint->target->active && (!constraint->data->skinRequired || (internal->super.skin != 0 && - spIkConstraintDataArray_contains( - internal->super.skin->ikConstraints, - constraint->data))); - if (!constraint->active) return; - - _sortBone(internal, target); - - constrained = constraint->bones; - parent = constrained[0]; - _sortBone(internal, parent); - - if (constraint->bonesCount == 1) { - _addToUpdateCache(internal, SP_UPDATE_IK_CONSTRAINT, constraint); - _sortReset(parent->children, parent->childrenCount); - } else { - spBone *child = constrained[constraint->bonesCount - 1]; - _sortBone(internal, child); - - _addToUpdateCache(internal, SP_UPDATE_IK_CONSTRAINT, constraint); - - _sortReset(parent->children, parent->childrenCount); - child->sorted = 1; - } -} - -static void _sortPathConstraint(_spSkeleton *const internal, spPathConstraint *constraint) { - spSlot *slot = constraint->target; - int slotIndex = slot->data->index; - spBone *slotBone = slot->bone; - int i, n, boneCount; - spAttachment *attachment; - spBone **constrained; - spSkeleton *skeleton = SUPER_CAST(spSkeleton, internal); - - constraint->active = constraint->target->bone->active && (!constraint->data->skinRequired || - (internal->super.skin != 0 && - spPathConstraintDataArray_contains( - internal->super.skin->pathConstraints, - constraint->data))); - if (!constraint->active) return; - - if (skeleton->skin) _sortPathConstraintAttachment(internal, skeleton->skin, slotIndex, slotBone); - if (skeleton->data->defaultSkin && skeleton->data->defaultSkin != skeleton->skin) - _sortPathConstraintAttachment(internal, skeleton->data->defaultSkin, slotIndex, slotBone); - for (i = 0, n = skeleton->data->skinsCount; i < n; i++) - _sortPathConstraintAttachment(internal, skeleton->data->skins[i], slotIndex, slotBone); - - attachment = slot->attachment; - if (attachment && attachment->type == SP_ATTACHMENT_PATH) - _sortPathConstraintAttachmentBones(internal, attachment, slotBone); - - constrained = constraint->bones; - boneCount = constraint->bonesCount; - for (i = 0; i < boneCount; i++) - _sortBone(internal, constrained[i]); - - _addToUpdateCache(internal, SP_UPDATE_PATH_CONSTRAINT, constraint); - - for (i = 0; i < boneCount; i++) - _sortReset(constrained[i]->children, constrained[i]->childrenCount); - for (i = 0; i < boneCount; i++) - constrained[i]->sorted = 1; -} - -static void _sortTransformConstraint(_spSkeleton *const internal, spTransformConstraint *constraint) { - int i, boneCount; - spBone **constrained; - spBone *child; - - constraint->active = constraint->target->active && (!constraint->data->skinRequired || (internal->super.skin != 0 && - spTransformConstraintDataArray_contains( - internal->super.skin->transformConstraints, - constraint->data))); - if (!constraint->active) return; - - _sortBone(internal, constraint->target); - - constrained = constraint->bones; - boneCount = constraint->bonesCount; - if (constraint->data->local) { - for (i = 0; i < boneCount; i++) { - child = constrained[i]; - _sortBone(internal, child->parent); - _sortBone(internal, child); - } - } else { - for (i = 0; i < boneCount; i++) - _sortBone(internal, constrained[i]); - } - - _addToUpdateCache(internal, SP_UPDATE_TRANSFORM_CONSTRAINT, constraint); - - for (i = 0; i < boneCount; i++) - _sortReset(constrained[i]->children, constrained[i]->childrenCount); - for (i = 0; i < boneCount; i++) - constrained[i]->sorted = 1; -} - -static void _sortPhysicsConstraint(_spSkeleton *const internal, spPhysicsConstraint *constraint) { - spBone *bone = constraint->bone; - constraint->active = constraint->bone->active && (!constraint->data->skinRequired || (internal->super.skin != 0 && - spPhysicsConstraintDataArray_contains( - internal->super.skin->physicsConstraints, - constraint->data))); - if (!constraint->active) - return; - - _sortBone(internal, bone); - _addToUpdateCache(internal, SP_UPDATE_PHYSICS_CONSTRAINT, constraint); - - _sortReset(bone->children, bone->childrenCount); - bone->sorted = -1; -} - -void spSkeleton_updateCache(spSkeleton *self) { - int i, ii; - spBone **bones; - spIkConstraint **ikConstraints; - spPathConstraint **pathConstraints; - spTransformConstraint **transformConstraints; - spPhysicsConstraint **physicsConstraints; - int ikCount, transformCount, pathCount, physicsCount, constraintCount; - _spSkeleton *internal = SUB_CAST(_spSkeleton, self); - - internal->updateCacheCapacity = - self->bonesCount + self->ikConstraintsCount + self->transformConstraintsCount + self->pathConstraintsCount + - self->physicsConstraintsCount; - FREE(internal->updateCache); - internal->updateCache = MALLOC(_spUpdate, internal->updateCacheCapacity); - internal->updateCacheCount = 0; - - bones = self->bones; - for (i = 0; i < self->bonesCount; ++i) { - spBone *bone = bones[i]; - bone->sorted = bone->data->skinRequired; - bone->active = !bone->sorted; - } - - if (self->skin) { - spBoneDataArray *skinBones = self->skin->bones; - for (i = 0; i < skinBones->size; i++) { - spBone *bone = self->bones[skinBones->items[i]->index]; - do { - bone->sorted = 0; - bone->active = -1; - bone = bone->parent; - } while (bone != 0); - } - } - - /* IK first, lowest hierarchy depth first. */ - ikConstraints = self->ikConstraints; - transformConstraints = self->transformConstraints; - pathConstraints = self->pathConstraints; - physicsConstraints = self->physicsConstraints; - ikCount = self->ikConstraintsCount; - transformCount = self->transformConstraintsCount; - pathCount = self->pathConstraintsCount; - physicsCount = self->physicsConstraintsCount; - constraintCount = ikCount + transformCount + pathCount + physicsCount; - - i = 0; -continue_outer: - for (; i < constraintCount; i++) { - for (ii = 0; ii < ikCount; ii++) { - spIkConstraint *ikConstraint = ikConstraints[ii]; - if (ikConstraint->data->order == i) { - _sortIkConstraint(internal, ikConstraint); - i++; - goto continue_outer; - } - } - - for (ii = 0; ii < transformCount; ii++) { - spTransformConstraint *transformConstraint = transformConstraints[ii]; - if (transformConstraint->data->order == i) { - _sortTransformConstraint(internal, transformConstraint); - i++; - goto continue_outer; - } - } - - for (ii = 0; ii < pathCount; ii++) { - spPathConstraint *pathConstraint = pathConstraints[ii]; - if (pathConstraint->data->order == i) { - _sortPathConstraint(internal, pathConstraint); - i++; - goto continue_outer; - } - } - - for (ii = 0; ii < physicsCount; ii++) { - spPhysicsConstraint *physicsConstraint = physicsConstraints[ii]; - if (physicsConstraint->data->order == i) { - _sortPhysicsConstraint(internal, physicsConstraint); - i++; - goto continue_outer; - } - } - } - - for (i = 0; i < self->bonesCount; ++i) - _sortBone(internal, self->bones[i]); -} - -void spSkeleton_updateWorldTransform(const spSkeleton *self, spPhysics physics) { - int i, n; - _spSkeleton *internal = SUB_CAST(_spSkeleton, self); - - for (i = 0, n = self->bonesCount; i < n; i++) { - spBone *bone = self->bones[i]; - bone->ax = bone->x; - bone->ay = bone->y; - bone->arotation = bone->rotation; - bone->ascaleX = bone->scaleX; - bone->ascaleY = bone->scaleY; - bone->ashearX = bone->shearX; - bone->ashearY = bone->shearY; - } - - for (i = 0; i < internal->updateCacheCount; ++i) { - _spUpdate *update = internal->updateCache + i; - switch (update->type) { - case SP_UPDATE_BONE: - spBone_update((spBone *) update->object); - break; - case SP_UPDATE_IK_CONSTRAINT: - spIkConstraint_update((spIkConstraint *) update->object); - break; - case SP_UPDATE_TRANSFORM_CONSTRAINT: - spTransformConstraint_update((spTransformConstraint *) update->object); - break; - case SP_UPDATE_PATH_CONSTRAINT: - spPathConstraint_update((spPathConstraint *) update->object); - break; - case SP_UPDATE_PHYSICS_CONSTRAINT: - spPhysicsConstraint_update((spPhysicsConstraint *) update->object, physics); - } - } -} - -void spSkeleton_update(spSkeleton *self, float delta) { - self->time += delta; -} - -void spSkeleton_updateWorldTransformWith(const spSkeleton *self, const spBone *parent, spPhysics physics) { - /* Apply the parent bone transform to the root bone. The root bone always inherits scale, rotation and reflection. */ - int i; - float rotationY, la, lb, lc, ld; - _spSkeleton *internal = SUB_CAST(_spSkeleton, self); - spBone *rootBone = self->root; - float pa = parent->a, pb = parent->b, pc = parent->c, pd = parent->d; - rootBone->worldX = pa * self->x + pb * self->y + parent->worldX; - rootBone->worldY = pc * self->x + pd * self->y + parent->worldY; - - rotationY = rootBone->rotation + 90 + rootBone->shearY; - la = COS_DEG(rootBone->rotation + rootBone->shearX) * rootBone->scaleX; - lb = COS_DEG(rotationY) * rootBone->scaleY; - lc = SIN_DEG(rootBone->rotation + rootBone->shearX) * rootBone->scaleX; - ld = SIN_DEG(rotationY) * rootBone->scaleY; - rootBone->a = (pa * la + pb * lc) * self->scaleX; - rootBone->b = (pa * lb + pb * ld) * self->scaleX; - rootBone->c = (pc * la + pd * lc) * self->scaleY; - rootBone->d = (pc * lb + pd * ld) * self->scaleY; - - /* Update everything except root bone. */ - for (i = 0; i < internal->updateCacheCount; ++i) { - _spUpdate *update = internal->updateCache + i; - switch (update->type) { - case SP_UPDATE_BONE: - if ((spBone *) update->object != rootBone) spBone_updateWorldTransform((spBone *) update->object); - break; - case SP_UPDATE_IK_CONSTRAINT: - spIkConstraint_update((spIkConstraint *) update->object); - break; - case SP_UPDATE_TRANSFORM_CONSTRAINT: - spTransformConstraint_update((spTransformConstraint *) update->object); - break; - case SP_UPDATE_PATH_CONSTRAINT: - spPathConstraint_update((spPathConstraint *) update->object); - break; - case SP_UPDATE_PHYSICS_CONSTRAINT: - spPhysicsConstraint_update((spPhysicsConstraint *) update->object, physics); - } - } -} - -void spSkeleton_setToSetupPose(const spSkeleton *self) { - spSkeleton_setBonesToSetupPose(self); - spSkeleton_setSlotsToSetupPose(self); -} - -void spSkeleton_setBonesToSetupPose(const spSkeleton *self) { - int i; - for (i = 0; i < self->bonesCount; ++i) - spBone_setToSetupPose(self->bones[i]); - - for (i = 0; i < self->ikConstraintsCount; ++i) { - spIkConstraint_setToSetupPose(self->ikConstraints[i]); - } - - for (i = 0; i < self->transformConstraintsCount; ++i) { - spTransformConstraint_setToSetupPose(self->transformConstraints[i]); - } - - for (i = 0; i < self->pathConstraintsCount; ++i) { - spPathConstraint_setToSetupPose(self->pathConstraints[i]); - } - - for (i = 0; i < self->physicsConstraintsCount; ++i) { - spPhysicsConstraint_setToSetupPose(self->physicsConstraints[i]); - } -} - -void spSkeleton_setSlotsToSetupPose(const spSkeleton *self) { - int i; - memcpy(self->drawOrder, self->slots, self->slotsCount * sizeof(spSlot *)); - for (i = 0; i < self->slotsCount; ++i) - spSlot_setToSetupPose(self->slots[i]); -} - -spBone *spSkeleton_findBone(const spSkeleton *self, const char *boneName) { - int i; - for (i = 0; i < self->bonesCount; ++i) - if (strcmp(self->data->bones[i]->name, boneName) == 0) return self->bones[i]; - return 0; -} - -spSlot *spSkeleton_findSlot(const spSkeleton *self, const char *slotName) { - int i; - for (i = 0; i < self->slotsCount; ++i) - if (strcmp(self->data->slots[i]->name, slotName) == 0) return self->slots[i]; - return 0; -} - -int spSkeleton_setSkinByName(spSkeleton *self, const char *skinName) { - spSkin *skin; - if (!skinName) { - spSkeleton_setSkin(self, 0); - return 1; - } - skin = spSkeletonData_findSkin(self->data, skinName); - if (!skin) return 0; - spSkeleton_setSkin(self, skin); - return 1; -} - -void spSkeleton_setSkin(spSkeleton *self, spSkin *newSkin) { - if (self->skin == newSkin) return; - if (newSkin) { - if (self->skin) - spSkin_attachAll(newSkin, self, self->skin); - else { - /* No previous skin, attach setup pose attachments. */ - int i; - for (i = 0; i < self->slotsCount; ++i) { - spSlot *slot = self->slots[i]; - if (slot->data->attachmentName) { - spAttachment *attachment = spSkin_getAttachment(newSkin, i, slot->data->attachmentName); - if (attachment) spSlot_setAttachment(slot, attachment); - } - } - } - } - self->skin = newSkin; - spSkeleton_updateCache(self); -} - -spAttachment * -spSkeleton_getAttachmentForSlotName(const spSkeleton *self, const char *slotName, const char *attachmentName) { - int slotIndex = spSkeletonData_findSlot(self->data, slotName)->index; - return spSkeleton_getAttachmentForSlotIndex(self, slotIndex, attachmentName); -} - -spAttachment *spSkeleton_getAttachmentForSlotIndex(const spSkeleton *self, int slotIndex, const char *attachmentName) { - if (slotIndex == -1) return 0; - if (self->skin) { - spAttachment *attachment = spSkin_getAttachment(self->skin, slotIndex, attachmentName); - if (attachment) return attachment; - } - if (self->data->defaultSkin) { - spAttachment *attachment = spSkin_getAttachment(self->data->defaultSkin, slotIndex, attachmentName); - if (attachment) return attachment; - } - return 0; -} - -int spSkeleton_setAttachment(spSkeleton *self, const char *slotName, const char *attachmentName) { - int i; - for (i = 0; i < self->slotsCount; ++i) { - spSlot *slot = self->slots[i]; - if (strcmp(slot->data->name, slotName) == 0) { - if (!attachmentName) - spSlot_setAttachment(slot, 0); - else { - spAttachment *attachment = spSkeleton_getAttachmentForSlotIndex(self, i, attachmentName); - if (!attachment) return 0; - spSlot_setAttachment(slot, attachment); - } - return 1; - } - } - return 0; -} - -spIkConstraint *spSkeleton_findIkConstraint(const spSkeleton *self, const char *constraintName) { - int i; - for (i = 0; i < self->ikConstraintsCount; ++i) - if (strcmp(self->ikConstraints[i]->data->name, constraintName) == 0) return self->ikConstraints[i]; - return 0; -} - -spTransformConstraint *spSkeleton_findTransformConstraint(const spSkeleton *self, const char *constraintName) { - int i; - for (i = 0; i < self->transformConstraintsCount; ++i) - if (strcmp(self->transformConstraints[i]->data->name, constraintName) == 0) - return self->transformConstraints[i]; - return 0; -} - -spPathConstraint *spSkeleton_findPathConstraint(const spSkeleton *self, const char *constraintName) { - int i; - for (i = 0; i < self->pathConstraintsCount; ++i) - if (strcmp(self->pathConstraints[i]->data->name, constraintName) == 0) return self->pathConstraints[i]; - return 0; -} - - -spPhysicsConstraint *spSkeleton_findPhysicsConstraint(const spSkeleton *self, const char *constraintName) { - int i; - for (i = 0; i < self->physicsConstraintsCount; ++i) - if (strcmp(self->physicsConstraints[i]->data->name, constraintName) == 0) return self->physicsConstraints[i]; - return 0; -} - -void spSkeleton_physicsTranslate(spSkeleton *self, float x, float y) { - for (int i = 0; i < (int) self->physicsConstraintsCount; i++) { - spPhysicsConstraint_translate(self->physicsConstraints[i], x, y); - } -} - -void spSkeleton_physicsRotate(spSkeleton *self, float x, float y, float degrees) { - for (int i = 0; i < (int) self->physicsConstraintsCount; i++) { - spPhysicsConstraint_rotate(self->physicsConstraints[i], x, y, degrees); - } -} diff --git a/spine-c/spine-c/src/spine/SkeletonBinary.c b/spine-c/spine-c/src/spine/SkeletonBinary.c deleted file mode 100644 index d825c71f3..000000000 --- a/spine-c/spine-c/src/spine/SkeletonBinary.c +++ /dev/null @@ -1,1648 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include - -typedef struct { - const unsigned char *cursor; - const unsigned char *end; -} _dataInput; - -typedef struct { - const char *parent; - int skinIndex; - int slotIndex; - spMeshAttachment *mesh; - int inheritTimeline; -} _spLinkedMesh; - -typedef struct { - spSkeletonBinary super; - int ownsLoader; - - int linkedMeshCount; - int linkedMeshCapacity; - _spLinkedMesh *linkedMeshes; -} _spSkeletonBinary; - -static int string_starts_with(const char *str, const char *needle) { - int lenStr, lenNeedle, i; - if (!str) return 0; - lenStr = strlen(str); - lenNeedle = strlen(needle); - if (lenStr < lenNeedle) return 0; - for (i = 0; i < lenNeedle; i++) { - if (str[i] != needle[i]) return 0; - } - return -1; -} - -static char *string_copy(const char *str) { - if (str == NULL) return NULL; - int len = strlen(str); - char *tmp = (char *) malloc(len + 1); - strncpy(tmp, str, len); - tmp[len] = '\0'; - return tmp; -} - -spSkeletonBinary *spSkeletonBinary_createWithLoader(spAttachmentLoader *attachmentLoader) { - spSkeletonBinary *self = SUPER(NEW(_spSkeletonBinary)); - self->scale = 1; - self->attachmentLoader = attachmentLoader; - return self; -} - -spSkeletonBinary *spSkeletonBinary_create(spAtlas *atlas) { - spAtlasAttachmentLoader *attachmentLoader = spAtlasAttachmentLoader_create(atlas); - spSkeletonBinary *self = spSkeletonBinary_createWithLoader(SUPER(attachmentLoader)); - SUB_CAST(_spSkeletonBinary, self)->ownsLoader = 1; - return self; -} - -void spSkeletonBinary_dispose(spSkeletonBinary *self) { - _spSkeletonBinary *internal = SUB_CAST(_spSkeletonBinary, self); - if (internal->ownsLoader) spAttachmentLoader_dispose(self->attachmentLoader); - FREE(internal->linkedMeshes); - FREE(self->error); - FREE(self); -} - -void _spSkeletonBinary_setError(spSkeletonBinary *self, const char *value1, const char *value2) { - char message[256]; - int length; - FREE(self->error); - strcpy(message, value1); - length = (int) strlen(value1); - if (value2) strncat(message + length, value2, 255 - length); - MALLOC_STR(self->error, message); -} - -static unsigned char readByte(_dataInput *input) { - return *input->cursor++; -} - -static signed char readSByte(_dataInput *input) { - return (signed char) readByte(input); -} - -static int readBoolean(_dataInput *input) { - return readByte(input) != 0; -} - -static int readInt(_dataInput *input) { - uint32_t result = readByte(input); - result <<= 8; - result |= readByte(input); - result <<= 8; - result |= readByte(input); - result <<= 8; - result |= readByte(input); - return (int) result; -} - -static int readVarint(_dataInput *input, int /*bool*/ optimizePositive) { - unsigned char b = readByte(input); - int32_t value = b & 0x7F; - if (b & 0x80) { - b = readByte(input); - value |= (b & 0x7F) << 7; - if (b & 0x80) { - b = readByte(input); - value |= (b & 0x7F) << 14; - if (b & 0x80) { - b = readByte(input); - value |= (b & 0x7F) << 21; - if (b & 0x80) value |= (readByte(input) & 0x7F) << 28; - } - } - } - if (!optimizePositive) value = (((unsigned int) value >> 1) ^ -(value & 1)); - return value; -} - -float readFloat(_dataInput *input) { - union { - int intValue; - float floatValue; - } intToFloat; - intToFloat.intValue = readInt(input); - return intToFloat.floatValue; -} - -char *readString(_dataInput *input) { - int length = readVarint(input, 1); - char *string; - if (length == 0) return NULL; - string = MALLOC(char, length); - memcpy(string, input->cursor, length - 1); - input->cursor += length - 1; - string[length - 1] = '\0'; - return string; -} - -static char *readStringRef(_dataInput *input, spSkeletonData *skeletonData) { - int index = readVarint(input, 1); - return index == 0 ? 0 : skeletonData->strings[index - 1]; -} - -static void readColor(_dataInput *input, float *r, float *g, float *b, float *a) { - *r = readByte(input) / 255.0f; - *g = readByte(input) / 255.0f; - *b = readByte(input) / 255.0f; - *a = readByte(input) / 255.0f; -} - -#define ATTACHMENT_REGION 0 -#define ATTACHMENT_BOUNDING_BOX 1 -#define ATTACHMENT_MESH 2 -#define ATTACHMENT_LINKED_MESH 3 -#define ATTACHMENT_PATH 4 - -#define BLEND_MODE_NORMAL 0 -#define BLEND_MODE_ADDITIVE 1 -#define BLEND_MODE_MULTIPLY 2 -#define BLEND_MODE_SCREEN 3 - -#define BONE_ROTATE 0 -#define BONE_TRANSLATE 1 -#define BONE_TRANSLATEX 2 -#define BONE_TRANSLATEY 3 -#define BONE_SCALE 4 -#define BONE_SCALEX 5 -#define BONE_SCALEY 6 -#define BONE_SHEAR 7 -#define BONE_SHEARX 8 -#define BONE_SHEARY 9 -#define BONE_INHERIT 10 - -#define SLOT_ATTACHMENT 0 -#define SLOT_RGBA 1 -#define SLOT_RGB 2 -#define SLOT_RGBA2 3 -#define SLOT_RGB2 4 -#define SLOT_ALPHA 5 - -#define ATTACHMENT_DEFORM 0 -#define ATTACHMENT_SEQUENCE 1 - -#define PATH_POSITION 0 -#define PATH_SPACING 1 -#define PATH_MIX 2 - -#define CURVE_LINEAR 0 -#define CURVE_STEPPED 1 -#define CURVE_BEZIER 2 - -#define PATH_POSITION_FIXED 0 -#define PATH_POSITION_PERCENT 1 - -#define PATH_SPACING_LENGTH 0 -#define PATH_SPACING_FIXED 1 -#define PATH_SPACING_PERCENT 2 - -#define PATH_ROTATE_TANGENT 0 -#define PATH_ROTATE_CHAIN 1 -#define PATH_ROTATE_CHAIN_SCALE 2 - -#define PHYSICS_INERTIA 0 -#define PHYSICS_STRENGTH 1 -#define PHYSICS_DAMPING 2 -#define PHYSICS_MASS 4 -#define PHYSICS_WIND 5 -#define PHYSICS_GRAVITY 6 -#define PHYSICS_MIX 7 -#define PHYSICS_RESET 8 - -static spSequence *readSequence(_dataInput *input) { - spSequence *sequence = spSequence_create(readVarint(input, -1)); - sequence->start = readVarint(input, -1); - sequence->digits = readVarint(input, -1); - sequence->setupIndex = readVarint(input, -1); - return sequence; -} - -static void -setBezier(_dataInput *input, spTimeline *timeline, int bezier, int frame, int value, float time1, float time2, - float value1, float value2, float scale) { - float cx1 = readFloat(input); - float cy1 = readFloat(input); - float cx2 = readFloat(input); - float cy2 = readFloat(input); - spTimeline_setBezier(timeline, bezier, frame, value, time1, value1, cx1, cy1 * scale, cx2, cy2 * scale, time2, - value2); -} - -static void readTimeline(_dataInput *input, spTimelineArray *timelines, spCurveTimeline1 *timeline, float scale) { - int frame, bezier, frameLast; - float time2, value2; - float time = readFloat(input); - float value = readFloat(input) * scale; - for (frame = 0, bezier = 0, frameLast = timeline->super.frameCount - 1;; frame++) { - spCurveTimeline1_setFrame(timeline, frame, time, value); - if (frame == frameLast) break; - time2 = readFloat(input); - value2 = readFloat(input) * scale; - switch (readSByte(input)) { - case CURVE_STEPPED: - spCurveTimeline_setStepped(timeline, frame); - break; - case CURVE_BEZIER: - setBezier(input, SUPER(timeline), bezier++, frame, 0, time, time2, value, value2, scale); - } - time = time2; - value = value2; - } - spTimelineArray_add(timelines, SUPER(timeline)); -} - -static void readTimeline2(_dataInput *input, spTimelineArray *timelines, spCurveTimeline2 *timeline, float scale) { - int frame, bezier, frameLast; - float time2, nvalue1, nvalue2; - float time = readFloat(input); - float value1 = readFloat(input) * scale; - float value2 = readFloat(input) * scale; - for (frame = 0, bezier = 0, frameLast = timeline->super.frameCount - 1;; frame++) { - spCurveTimeline2_setFrame(timeline, frame, time, value1, value2); - if (frame == frameLast) break; - time2 = readFloat(input); - nvalue1 = readFloat(input) * scale; - nvalue2 = readFloat(input) * scale; - switch (readSByte(input)) { - case CURVE_STEPPED: - spCurveTimeline_setStepped(timeline, frame); - break; - case CURVE_BEZIER: - setBezier(input, SUPER(timeline), bezier++, frame, 0, time, time2, value1, nvalue1, scale); - setBezier(input, SUPER(timeline), bezier++, frame, 1, time, time2, value2, nvalue2, scale); - } - time = time2; - value1 = nvalue1; - value2 = nvalue2; - } - spTimelineArray_add(timelines, SUPER(timeline)); -} - -static void _spSkeletonBinary_addLinkedMesh(spSkeletonBinary *self, spMeshAttachment *mesh, - int skinIndex, int slotIndex, const char *parent, int inheritDeform) { - _spLinkedMesh *linkedMesh; - _spSkeletonBinary *internal = SUB_CAST(_spSkeletonBinary, self); - - if (internal->linkedMeshCount == internal->linkedMeshCapacity) { - _spLinkedMesh *linkedMeshes; - internal->linkedMeshCapacity *= 2; - if (internal->linkedMeshCapacity < 8) internal->linkedMeshCapacity = 8; - /* TODO Why not realloc? */ - linkedMeshes = MALLOC(_spLinkedMesh, internal->linkedMeshCapacity); - memcpy(linkedMeshes, internal->linkedMeshes, sizeof(_spLinkedMesh) * internal->linkedMeshCount); - FREE(internal->linkedMeshes); - internal->linkedMeshes = linkedMeshes; - } - - linkedMesh = internal->linkedMeshes + internal->linkedMeshCount++; - linkedMesh->mesh = mesh; - linkedMesh->skinIndex = skinIndex; - linkedMesh->slotIndex = slotIndex; - linkedMesh->parent = parent; - linkedMesh->inheritTimeline = inheritDeform; -} - -static spAnimation *_spSkeletonBinary_readAnimation(spSkeletonBinary *self, const char *name, - _dataInput *input, spSkeletonData *skeletonData) { - spTimelineArray *timelines = spTimelineArray_create(18); - float duration = 0; - int i, n, ii, nn, iii, nnn; - int frame, bezier; - int drawOrderCount, eventCount; - spAnimation *animation; - float scale = self->scale; - - int numTimelines = readVarint(input, 1); - UNUSED(numTimelines); - - /* Slot timelines. */ - for (i = 0, n = readVarint(input, 1); i < n; ++i) { - int slotIndex = readVarint(input, 1); - for (ii = 0, nn = readVarint(input, 1); ii < nn; ++ii) { - unsigned char timelineType = readByte(input); - int frameCount = readVarint(input, 1); - int frameLast = frameCount - 1; - switch (timelineType) { - case SLOT_ATTACHMENT: { - spAttachmentTimeline *timeline = spAttachmentTimeline_create(frameCount, slotIndex); - for (frame = 0; frame < frameCount; ++frame) { - float time = readFloat(input); - const char *attachmentName = readStringRef(input, skeletonData); - spAttachmentTimeline_setFrame(timeline, frame, time, attachmentName); - } - spTimelineArray_add(timelines, SUPER(timeline)); - break; - } - case SLOT_RGBA: { - int bezierCount = readVarint(input, 1); - spRGBATimeline *timeline = spRGBATimeline_create(frameCount, bezierCount, slotIndex); - - float time = readFloat(input); - float r = readByte(input) / 255.0; - float g = readByte(input) / 255.0; - float b = readByte(input) / 255.0; - float a = readByte(input) / 255.0; - - for (frame = 0, bezier = 0;; frame++) { - float time2, r2, g2, b2, a2; - spRGBATimeline_setFrame(timeline, frame, time, r, g, b, a); - if (frame == frameLast) break; - - time2 = readFloat(input); - r2 = readByte(input) / 255.0; - g2 = readByte(input) / 255.0; - b2 = readByte(input) / 255.0; - a2 = readByte(input) / 255.0; - - switch (readSByte(input)) { - case CURVE_STEPPED: - spCurveTimeline_setStepped(SUPER(timeline), frame); - break; - case CURVE_BEZIER: - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 0, time, time2, r, r2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 1, time, time2, g, g2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 2, time, time2, b, b2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 3, time, time2, a, a2, 1); - } - time = time2; - r = r2; - g = g2; - b = b2; - a = a2; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - break; - } - case SLOT_RGB: { - int bezierCount = readVarint(input, 1); - spRGBTimeline *timeline = spRGBTimeline_create(frameCount, bezierCount, slotIndex); - - float time = readFloat(input); - float r = readByte(input) / 255.0; - float g = readByte(input) / 255.0; - float b = readByte(input) / 255.0; - - for (frame = 0, bezier = 0;; frame++) { - float time2, r2, g2, b2; - spRGBTimeline_setFrame(timeline, frame, time, r, g, b); - if (frame == frameLast) break; - - time2 = readFloat(input); - r2 = readByte(input) / 255.0; - g2 = readByte(input) / 255.0; - b2 = readByte(input) / 255.0; - - switch (readSByte(input)) { - case CURVE_STEPPED: - spCurveTimeline_setStepped(SUPER(timeline), frame); - break; - case CURVE_BEZIER: - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 0, time, time2, r, r2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 1, time, time2, g, g2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 2, time, time2, b, b2, 1); - } - time = time2; - r = r2; - g = g2; - b = b2; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - break; - } - case SLOT_RGBA2: { - int bezierCount = readVarint(input, 1); - spRGBA2Timeline *timeline = spRGBA2Timeline_create(frameCount, bezierCount, slotIndex); - - float time = readFloat(input); - float r = readByte(input) / 255.0; - float g = readByte(input) / 255.0; - float b = readByte(input) / 255.0; - float a = readByte(input) / 255.0; - float r2 = readByte(input) / 255.0; - float g2 = readByte(input) / 255.0; - float b2 = readByte(input) / 255.0; - - for (frame = 0, bezier = 0;; frame++) { - float time2, nr, ng, nb, na, nr2, ng2, nb2; - spRGBA2Timeline_setFrame(timeline, frame, time, r, g, b, a, r2, g2, b2); - if (frame == frameLast) break; - time2 = readFloat(input); - nr = readByte(input) / 255.0; - ng = readByte(input) / 255.0; - nb = readByte(input) / 255.0; - na = readByte(input) / 255.0; - nr2 = readByte(input) / 255.0; - ng2 = readByte(input) / 255.0; - nb2 = readByte(input) / 255.0; - - switch (readSByte(input)) { - case CURVE_STEPPED: - spCurveTimeline_setStepped(SUPER(timeline), frame); - break; - case CURVE_BEZIER: - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 0, time, time2, r, nr, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 1, time, time2, g, ng, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 2, time, time2, b, nb, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 3, time, time2, a, na, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 4, time, time2, r2, nr2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 5, time, time2, g2, ng2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 6, time, time2, b2, nb2, 1); - } - time = time2; - r = nr; - g = ng; - b = nb; - a = na; - r2 = nr2; - g2 = ng2; - b2 = nb2; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - break; - } - case SLOT_RGB2: { - int bezierCount = readVarint(input, 1); - spRGB2Timeline *timeline = spRGB2Timeline_create(frameCount, bezierCount, slotIndex); - - float time = readFloat(input); - float r = readByte(input) / 255.0; - float g = readByte(input) / 255.0; - float b = readByte(input) / 255.0; - float r2 = readByte(input) / 255.0; - float g2 = readByte(input) / 255.0; - float b2 = readByte(input) / 255.0; - - for (frame = 0, bezier = 0;; frame++) { - float time2, nr, ng, nb, nr2, ng2, nb2; - spRGB2Timeline_setFrame(timeline, frame, time, r, g, b, r2, g2, b2); - if (frame == frameLast) break; - time2 = readFloat(input); - nr = readByte(input) / 255.0; - ng = readByte(input) / 255.0; - nb = readByte(input) / 255.0; - nr2 = readByte(input) / 255.0; - ng2 = readByte(input) / 255.0; - nb2 = readByte(input) / 255.0; - - switch (readSByte(input)) { - case CURVE_STEPPED: - spCurveTimeline_setStepped(SUPER(timeline), frame); - break; - case CURVE_BEZIER: - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 0, time, time2, r, nr, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 1, time, time2, g, ng, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 2, time, time2, b, nb, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 3, time, time2, r2, nr2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 4, time, time2, g2, ng2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 5, time, time2, b2, nb2, 1); - } - time = time2; - r = nr; - g = ng; - b = nb; - r2 = nr2; - g2 = ng2; - b2 = nb2; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - break; - } - case SLOT_ALPHA: { - int bezierCount = readVarint(input, 1); - spAlphaTimeline *timeline = spAlphaTimeline_create(frameCount, bezierCount, slotIndex); - float time = readFloat(input); - float a = readByte(input) / 255.0; - for (frame = 0, bezier = 0;; frame++) { - float time2, a2; - spAlphaTimeline_setFrame(timeline, frame, time, a); - if (frame == frameLast) break; - time2 = readFloat(input); - a2 = readByte(input) / 255; - switch (readSByte(input)) { - case CURVE_STEPPED: - spCurveTimeline_setStepped(SUPER(timeline), frame); - break; - case CURVE_BEZIER: - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 0, time, time2, a, a2, 1); - } - time = time2; - a = a2; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - break; - } - default: { - return NULL; - } - } - } - } - - /* Bone timelines. */ - for (i = 0, n = readVarint(input, 1); i < n; ++i) { - int boneIndex = readVarint(input, 1); - for (ii = 0, nn = readVarint(input, 1); ii < nn; ++ii) { - unsigned char timelineType = readByte(input); - int frameCount = readVarint(input, 1); - if (timelineType == BONE_INHERIT) { - spInheritTimeline *timeline = spInheritTimeline_create(frameCount, boneIndex); - for (frame = 0; frame < frameCount; frame++) { - float time = readFloat(input); - spInherit inherit = (spInherit) readByte(input); - spInheritTimeline_setFrame(timeline, frame, time, inherit); - } - spTimelineArray_add(timelines, SUPER(timeline)); - continue; - } - int bezierCount = readVarint(input, 1); - switch (timelineType) { - case BONE_ROTATE: - readTimeline(input, timelines, SUPER(spRotateTimeline_create(frameCount, bezierCount, boneIndex)), - 1); - break; - case BONE_TRANSLATE: - readTimeline2(input, timelines, - SUPER(spTranslateTimeline_create(frameCount, bezierCount, boneIndex)), - scale); - break; - case BONE_TRANSLATEX: - readTimeline(input, timelines, - SUPER(spTranslateXTimeline_create(frameCount, bezierCount, boneIndex)), - scale); - break; - case BONE_TRANSLATEY: - readTimeline(input, timelines, - SUPER(spTranslateYTimeline_create(frameCount, bezierCount, boneIndex)), - scale); - break; - case BONE_SCALE: - readTimeline2(input, timelines, SUPER(spScaleTimeline_create(frameCount, bezierCount, boneIndex)), - 1); - break; - case BONE_SCALEX: - readTimeline(input, timelines, SUPER(spScaleXTimeline_create(frameCount, bezierCount, boneIndex)), - 1); - break; - case BONE_SCALEY: - readTimeline(input, timelines, SUPER(spScaleYTimeline_create(frameCount, bezierCount, boneIndex)), - 1); - break; - case BONE_SHEAR: - readTimeline2(input, timelines, SUPER(spShearTimeline_create(frameCount, bezierCount, boneIndex)), - 1); - break; - case BONE_SHEARX: - readTimeline(input, timelines, SUPER(spShearXTimeline_create(frameCount, bezierCount, boneIndex)), - 1); - break; - case BONE_SHEARY: - readTimeline(input, timelines, SUPER(spShearYTimeline_create(frameCount, bezierCount, boneIndex)), - 1); - break; - default: { - for (iii = 0; iii < timelines->size; ++iii) - spTimeline_dispose(timelines->items[iii]); - spTimelineArray_dispose(timelines); - _spSkeletonBinary_setError(self, "Invalid timeline type for a bone: ", - skeletonData->bones[boneIndex]->name); - return NULL; - } - } - } - } - - /* IK constraint timelines. */ - for (i = 0, n = readVarint(input, 1); i < n; ++i) { - int index = readVarint(input, 1); - int frameCount = readVarint(input, 1); - int frameLast = frameCount - 1; - int bezierCount = readVarint(input, 1); - spIkConstraintTimeline *timeline = spIkConstraintTimeline_create(frameCount, bezierCount, index); - int flags = readByte(input); - float time = readFloat(input), mix = (flags & 1) != 0 ? ((flags & 2) != 0 ? readFloat(input) : 1) : 0; - float softness = (flags & 4) != 0 ? readFloat(input) * scale : 0; - for (frame = 0, bezier = 0;; frame++) { - spIkConstraintTimeline_setFrame(timeline, frame, time, mix, softness, (flags & 8) != 0 ? 1 : -1, (flags & 16) != 0, (flags & 32) != 0); - if (frame == frameLast) break; - flags = readByte(input); - float time2 = readFloat(input), mix2 = (flags & 1) != 0 ? ((flags & 2) != 0 ? readFloat(input) : 1) : 0; - float softness2 = (flags & 4) != 0 ? readFloat(input) * scale : 0; - if ((flags & 64) != 0) - spCurveTimeline_setStepped(SUPER(timeline), frame); - else if ((flags & 128) != 0) { - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 0, time, time2, mix, mix2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 1, time, time2, softness, softness2, scale); - } - time = time2; - mix = mix2; - softness = softness2; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } - - /* Transform constraint timelines. */ - for (i = 0, n = readVarint(input, 1); i < n; ++i) { - int index = readVarint(input, 1); - int frameCount = readVarint(input, 1); - int frameLast = frameCount - 1; - int bezierCount = readVarint(input, 1); - spTransformConstraintTimeline *timeline = spTransformConstraintTimeline_create(frameCount, bezierCount, index); - float time = readFloat(input); - float mixRotate = readFloat(input); - float mixX = readFloat(input); - float mixY = readFloat(input); - float mixScaleX = readFloat(input); - float mixScaleY = readFloat(input); - float mixShearY = readFloat(input); - for (frame = 0, bezier = 0;; frame++) { - float time2, mixRotate2, mixX2, mixY2, mixScaleX2, mixScaleY2, mixShearY2; - spTransformConstraintTimeline_setFrame(timeline, frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, - mixShearY); - if (frame == frameLast) break; - time2 = readFloat(input); - mixRotate2 = readFloat(input); - mixX2 = readFloat(input); - mixY2 = readFloat(input); - mixScaleX2 = readFloat(input); - mixScaleY2 = readFloat(input); - mixShearY2 = readFloat(input); - switch (readSByte(input)) { - case CURVE_STEPPED: - spCurveTimeline_setStepped(SUPER(timeline), frame); - break; - case CURVE_BEZIER: - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 0, time, time2, mixRotate, mixRotate2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 1, time, time2, mixX, mixX2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 2, time, time2, mixY, mixY2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 5, time, time2, mixShearY, mixShearY2, 1); - } - time = time2; - mixRotate = mixRotate2; - mixX = mixX2; - mixY = mixY2; - mixScaleX = mixScaleX2; - mixScaleY = mixScaleY2; - mixShearY = mixShearY2; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } - - /* Path constraint timelines. */ - for (i = 0, n = readVarint(input, 1); i < n; ++i) { - int index = readVarint(input, 1); - spPathConstraintData *data = skeletonData->pathConstraints[index]; - for (ii = 0, nn = readVarint(input, 1); ii < nn; ++ii) { - int type = readByte(input); - int frameCount = readVarint(input, 1); - int bezierCount = readVarint(input, 1); - switch (type) { - case PATH_POSITION: { - readTimeline(input, timelines, SUPER(spPathConstraintPositionTimeline_create(frameCount, bezierCount, index)), - data->positionMode == SP_POSITION_MODE_FIXED ? scale - : 1); - break; - } - case PATH_SPACING: { - readTimeline(input, timelines, - SUPER(spPathConstraintSpacingTimeline_create(frameCount, - bezierCount, - index)), - data->spacingMode == SP_SPACING_MODE_LENGTH || - data->spacingMode == SP_SPACING_MODE_FIXED - ? scale - : 1); - break; - } - case PATH_MIX: { - float time, mixRotate, mixX, mixY; - int frameLast; - spPathConstraintMixTimeline *timeline = spPathConstraintMixTimeline_create(frameCount, bezierCount, - index); - time = readFloat(input); - mixRotate = readFloat(input); - mixX = readFloat(input); - mixY = readFloat(input); - for (frame = 0, bezier = 0, frameLast = timeline->super.super.frameCount - 1;; frame++) { - float time2, mixRotate2, mixX2, mixY2; - spPathConstraintMixTimeline_setFrame(timeline, frame, time, mixRotate, mixX, mixY); - if (frame == frameLast) break; - time2 = readFloat(input); - mixRotate2 = readFloat(input); - mixX2 = readFloat(input); - mixY2 = readFloat(input); - switch (readSByte(input)) { - case CURVE_STEPPED: - spCurveTimeline_setStepped(SUPER(timeline), frame); - break; - case CURVE_BEZIER: - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 0, time, time2, mixRotate, - mixRotate2, 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 1, time, time2, mixX, mixX2, - 1); - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 2, time, time2, mixY, mixY2, - 1); - } - time = time2; - mixRotate = mixRotate2; - mixX = mixX2; - mixY = mixY2; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } - } - } - } - - for (i = 0, n = readVarint(input, 1); i < n; i++) { - int index = readVarint(input, 1) - 1; - for (ii = 0, nn = readVarint(input, 1); ii < nn; ii++) { - int type = readByte(input); - int frameCount = readVarint(input, 1); - if (type == PHYSICS_RESET) { - spPhysicsConstraintResetTimeline *timeline = spPhysicsConstraintResetTimeline_create(frameCount, index); - for (frame = 0; frame < frameCount; frame++) - spPhysicsConstraintResetTimeline_setFrame(timeline, frame, readFloat(input)); - spTimelineArray_add(timelines, SUPER(timeline)); - continue; - } - int bezierCount = readVarint(input, 1); - switch (type) { - case PHYSICS_INERTIA: - readTimeline(input, timelines, SUPER(spPhysicsConstraintTimeline_create(frameCount, bezierCount, index, SP_TIMELINE_PHYSICSCONSTRAINT_INERTIA)), 1); - break; - case PHYSICS_STRENGTH: - readTimeline(input, timelines, SUPER(spPhysicsConstraintTimeline_create(frameCount, bezierCount, index, SP_TIMELINE_PHYSICSCONSTRAINT_STRENGTH)), 1); - break; - case PHYSICS_DAMPING: - readTimeline(input, timelines, SUPER(spPhysicsConstraintTimeline_create(frameCount, bezierCount, index, SP_TIMELINE_PHYSICSCONSTRAINT_DAMPING)), 1); - break; - case PHYSICS_MASS: - readTimeline(input, timelines, SUPER(spPhysicsConstraintTimeline_create(frameCount, bezierCount, index, SP_TIMELINE_PHYSICSCONSTRAINT_MASS)), 1); - break; - case PHYSICS_WIND: - readTimeline(input, timelines, SUPER(spPhysicsConstraintTimeline_create(frameCount, bezierCount, index, SP_TIMELINE_PHYSICSCONSTRAINT_WIND)), 1); - break; - case PHYSICS_GRAVITY: - readTimeline(input, timelines, SUPER(spPhysicsConstraintTimeline_create(frameCount, bezierCount, index, SP_TIMELINE_PHYSICSCONSTRAINT_GRAVITY)), 1); - break; - case PHYSICS_MIX: - readTimeline(input, timelines, SUPER(spPhysicsConstraintTimeline_create(frameCount, bezierCount, index, SP_TIMELINE_PHYSICSCONSTRAINT_MIX)), 1); - } - } - } - - /* Attachment timelines. */ - for (i = 0, n = readVarint(input, 1); i < n; ++i) { - spSkin *skin = skeletonData->skins[readVarint(input, 1)]; - for (ii = 0, nn = readVarint(input, 1); ii < nn; ++ii) { - int slotIndex = readVarint(input, 1); - for (iii = 0, nnn = readVarint(input, 1); iii < nnn; ++iii) { - int frameCount, frameLast, bezierCount; - float time, time2; - unsigned int timelineType; - - const char *attachmentName = readStringRef(input, skeletonData); - spVertexAttachment *attachment = SUB_CAST(spVertexAttachment, - spSkin_getAttachment(skin, slotIndex, attachmentName)); - if (!attachment) { - for (i = 0; i < timelines->size; ++i) - spTimeline_dispose(timelines->items[i]); - spTimelineArray_dispose(timelines); - _spSkeletonBinary_setError(self, "Attachment not found: ", attachmentName); - return NULL; - } - - timelineType = readByte(input); - frameCount = readVarint(input, 1); - frameLast = frameCount - 1; - - switch (timelineType) { - case ATTACHMENT_DEFORM: { - float *tempDeform; - int weighted, deformLength; - spDeformTimeline *timeline; - weighted = attachment->bones != 0; - deformLength = weighted ? attachment->verticesCount / 3 * 2 : attachment->verticesCount; - tempDeform = MALLOC(float, deformLength); - - bezierCount = readVarint(input, 1); - timeline = spDeformTimeline_create(frameCount, deformLength, bezierCount, slotIndex, - attachment); - - time = readFloat(input); - for (frame = 0, bezier = 0;; ++frame) { - float *deform; - int end = readVarint(input, 1); - if (!end) { - if (weighted) { - deform = tempDeform; - memset(deform, 0, sizeof(float) * deformLength); - } else - deform = attachment->vertices; - } else { - int v, start = readVarint(input, 1); - deform = tempDeform; - memset(deform, 0, sizeof(float) * start); - end += start; - if (self->scale == 1) { - for (v = start; v < end; ++v) - deform[v] = readFloat(input); - } else { - for (v = start; v < end; ++v) - deform[v] = readFloat(input) * self->scale; - } - memset(deform + v, 0, sizeof(float) * (deformLength - v)); - if (!weighted) { - float *vertices = attachment->vertices; - for (v = 0; v < deformLength; ++v) - deform[v] += vertices[v]; - } - } - spDeformTimeline_setFrame(timeline, frame, time, deform); - if (frame == frameLast) break; - time2 = readFloat(input); - switch (readSByte(input)) { - case CURVE_STEPPED: - spCurveTimeline_setStepped(SUPER(timeline), frame); - break; - case CURVE_BEZIER: - setBezier(input, SUPER(SUPER(timeline)), bezier++, frame, 0, time, time2, 0, 1, 1); - } - time = time2; - } - FREE(tempDeform); - - spTimelineArray_add(timelines, (spTimeline *) timeline); - break; - } - case ATTACHMENT_SEQUENCE: { - int modeAndIndex; - float delay; - spSequenceTimeline *timeline = spSequenceTimeline_create(frameCount, slotIndex, (spAttachment *) attachment); - for (frame = 0; frame < frameCount; frame++) { - time = readFloat(input); - modeAndIndex = readInt(input); - delay = readFloat(input); - spSequenceTimeline_setFrame(timeline, frame, time, modeAndIndex & 0xf, modeAndIndex >> 4, delay); - } - spTimelineArray_add(timelines, (spTimeline *) timeline); - break; - } - } - } - } - } - - /* Draw order timeline. */ - drawOrderCount = readVarint(input, 1); - if (drawOrderCount) { - spDrawOrderTimeline *timeline = spDrawOrderTimeline_create(drawOrderCount, skeletonData->slotsCount); - for (i = 0; i < drawOrderCount; ++i) { - float time = readFloat(input); - int offsetCount = readVarint(input, 1); - int *drawOrder = MALLOC(int, skeletonData->slotsCount); - int *unchanged = MALLOC(int, skeletonData->slotsCount - offsetCount); - int originalIndex = 0, unchangedIndex = 0; - memset(drawOrder, -1, sizeof(int) * skeletonData->slotsCount); - for (ii = 0; ii < offsetCount; ++ii) { - int slotIndex = readVarint(input, 1); - while (originalIndex != slotIndex) - unchanged[unchangedIndex++] = originalIndex++; - drawOrder[originalIndex + readVarint(input, 1)] = originalIndex; - ++originalIndex; - } - while (originalIndex < skeletonData->slotsCount) - unchanged[unchangedIndex++] = originalIndex++; - for (ii = skeletonData->slotsCount - 1; ii >= 0; ii--) - if (drawOrder[ii] == -1) drawOrder[ii] = unchanged[--unchangedIndex]; - FREE(unchanged); - spDrawOrderTimeline_setFrame(timeline, i, time, drawOrder); - FREE(drawOrder); - } - spTimelineArray_add(timelines, (spTimeline *) timeline); - } - - /* Event timeline. */ - eventCount = readVarint(input, 1); - if (eventCount) { - spEventTimeline *timeline = spEventTimeline_create(eventCount); - for (i = 0; i < eventCount; ++i) { - float time = readFloat(input); - spEventData *eventData = skeletonData->events[readVarint(input, 1)]; - spEvent *event = spEvent_create(time, eventData); - event->intValue = readVarint(input, 0); - event->floatValue = readFloat(input); - const char *event_stringValue = readString(input); - if (event_stringValue == NULL) { - event->stringValue = string_copy(eventData->stringValue); - } else { - event->stringValue = string_copy(event_stringValue); - FREE(event_stringValue); - } - - if (eventData->audioPath) { - event->volume = readFloat(input); - event->balance = readFloat(input); - } - spEventTimeline_setFrame(timeline, i, event); - } - spTimelineArray_add(timelines, (spTimeline *) timeline); - } - - duration = 0; - for (i = 0, n = timelines->size; i < n; i++) { - duration = MAX(duration, spTimeline_getDuration(timelines->items[i])); - } - animation = spAnimation_create(name, timelines, duration); - return animation; -} - -static float *_readFloatArray(_dataInput *input, int n, float scale) { - float *array = MALLOC(float, n); - int i; - if (scale == 1) - for (i = 0; i < n; ++i) - array[i] = readFloat(input); - else - for (i = 0; i < n; ++i) - array[i] = readFloat(input) * scale; - return array; -} - -static unsigned short *_readShortArray(_dataInput *input, int n) { - unsigned short *array = MALLOC(unsigned short, n); - int i; - for (i = 0; i < n; ++i) { - array[i] = (unsigned short) readVarint(input, 1); - } - return array; -} - -static int _readVertices(_dataInput *input, float **vertices, int *verticesLength, int **bones, int *bonesCount, int /*bool*/ weighted, float scale) { - int vertexCount = readVarint(input, 1); - *verticesLength = vertexCount << 1; - if (!weighted) { - *vertices = _readFloatArray(input, *verticesLength, scale); - *bones = NULL; - *bonesCount = 0; - return *verticesLength; - } - - float *v = MALLOC(float, (*verticesLength) * 3 * 3); - int *b = MALLOC(int, (*verticesLength) * 3); - int boneIdx = 0; - int vertexIdx = 0; - for (int i = 0; i < vertexCount; ++i) { - int boneCount = readVarint(input, 1); - b[boneIdx++] = boneCount; - for (int ii = 0; ii < boneCount; ++ii) { - b[boneIdx++] = readVarint(input, 1); - v[vertexIdx++] = readFloat(input) * scale; - v[vertexIdx++] = readFloat(input) * scale; - v[vertexIdx++] = readFloat(input); - } - } - *vertices = v; - *bones = b; - *bonesCount = boneIdx; - *verticesLength = vertexIdx; - return vertexCount << 1; -} - -spAttachment *spSkeletonBinary_readAttachment(spSkeletonBinary *self, _dataInput *input, - spSkin *skin, int slotIndex, const char *attachmentName, - spSkeletonData *skeletonData, int /*bool*/ nonessential) { - int flags = readByte(input); - const char *name = (flags & 8) != 0 ? readStringRef(input, skeletonData) : attachmentName; - spAttachmentType type = (spAttachmentType) (flags & 0x7); - - switch (type) { - case SP_ATTACHMENT_REGION: { - char *path = (flags & 16) != 0 ? readStringRef(input, skeletonData) : (char *) name; - path = string_copy(path); - spColor color; - spColor_setFromFloats(&color, 1, 1, 1, 1); - if ((flags & 32) != 0) readColor(input, &color.r, &color.g, &color.b, &color.a); - spSequence *sequence = (flags & 64) != 0 ? readSequence(input) : NULL; - float rotation = (flags & 128) != 0 ? readFloat(input) : 0; - float x = readFloat(input) * self->scale; - float y = readFloat(input) * self->scale; - float scaleX = readFloat(input); - float scaleY = readFloat(input); - float width = readFloat(input) * self->scale; - float height = readFloat(input) * self->scale; - spRegionAttachment *region = SUB_CAST(spRegionAttachment, spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, - path, sequence)); - region->path = path; - region->rotation = rotation; - region->x = x; - region->y = y; - region->scaleX = scaleX; - region->scaleY = scaleY; - region->width = width; - region->height = height; - spColor_setFromColor(®ion->color, &color); - region->sequence = sequence; - if (sequence == NULL) spRegionAttachment_updateRegion(region); - spAttachmentLoader_configureAttachment(self->attachmentLoader, SUPER(region)); - return SUPER(region); - } - case SP_ATTACHMENT_BOUNDING_BOX: { - spBoundingBoxAttachment *box = SUB_CAST(spBoundingBoxAttachment, spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, 0, - NULL)); - if (!box) return NULL; - _readVertices(input, &box->super.vertices, &box->super.verticesCount, &box->super.bones, &box->super.bonesCount, (flags & 16) != 0, self->scale); - box->super.worldVerticesLength = box->super.verticesCount; - if (nonessential) { - readColor(input, &box->color.r, &box->color.g, &box->color.b, &box->color.a); - } - spAttachmentLoader_configureAttachment(self->attachmentLoader, SUPER(SUPER(box))); - return SUPER(SUPER(box)); - } - case SP_ATTACHMENT_MESH: { - float *uvs = NULL; - int uvsCount = 0; - unsigned short *triangles = NULL; - int trianglesCount = 0; - float *vertices = NULL; - int verticesCount = 0; - int *bones = NULL; - int bonesCount = 0; - int hullLength = 0; - float width = 0; - float height = 0; - unsigned short *edges = NULL; - int edgesCount = 0; - - char *path = (flags & 16) != 0 ? readStringRef(input, skeletonData) : (char *) name; - path = string_copy(path); - spColor color; - spColor_setFromFloats(&color, 1, 1, 1, 1); - if ((flags & 32) != 0) readColor(input, &color.r, &color.g, &color.b, &color.a); - spSequence *sequence = (flags & 64) != 0 ? readSequence(input) : NULL; - hullLength = readVarint(input, 1); - int verticesLength = _readVertices(input, &vertices, &verticesCount, &bones, &bonesCount, (flags & 128) != 0, self->scale); - uvsCount = verticesLength; - uvs = _readFloatArray(input, uvsCount, 1); - trianglesCount = (verticesLength - hullLength - 2) * 3; - triangles = _readShortArray(input, trianglesCount); - - if (nonessential) { - edgesCount = readVarint(input, 1); - edges = _readShortArray(input, edgesCount); - width = readFloat(input); - height = readFloat(input); - } - - - spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, path, sequence); - if (!attachment) return NULL; - spMeshAttachment *mesh = SUB_CAST(spMeshAttachment, attachment); - mesh->path = path; - spColor_setFromColor(&mesh->color, &color); - mesh->regionUVs = uvs; - mesh->triangles = triangles; - mesh->trianglesCount = trianglesCount; - mesh->super.vertices = vertices; - mesh->super.verticesCount = verticesCount; - mesh->super.bones = bones; - mesh->super.bonesCount = bonesCount; - mesh->super.worldVerticesLength = verticesLength; - mesh->hullLength = hullLength; - mesh->edges = edges; - mesh->edgesCount = edgesCount; - mesh->width = width; - mesh->height = height; - mesh->sequence = sequence; - if (sequence == NULL) spMeshAttachment_updateRegion(mesh); - spAttachmentLoader_configureAttachment(self->attachmentLoader, attachment); - return attachment; - } - case SP_ATTACHMENT_LINKED_MESH: { - char *path = (flags & 16) != 0 ? readStringRef(input, skeletonData) : (char *) name; - path = string_copy(path); - spColor color; - spColor_setFromFloats(&color, 1, 1, 1, 1); - if ((flags & 32) != 0) readColor(input, &color.r, &color.g, &color.b, &color.a); - spSequence *sequence = (flags & 64) != 0 ? readSequence(input) : NULL; - int /*bool*/ inheritTimelines = (flags & 128) != 0; - int skinIndex = readVarint(input, 1); - char *parent = readStringRef(input, skeletonData); - float width = 0, height = 0; - if (nonessential) { - width = readFloat(input) * self->scale; - height = readFloat(input) * self->scale; - } - spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, path, sequence); - spMeshAttachment *mesh = NULL; - if (!attachment) - return NULL; - mesh = SUB_CAST(spMeshAttachment, attachment); - mesh->path = (char *) path; - spColor_setFromColor(&mesh->color, &color); - mesh->sequence = sequence; - mesh->width = width; - mesh->height = height; - _spSkeletonBinary_addLinkedMesh(self, mesh, skinIndex, slotIndex, parent, inheritTimelines); - return attachment; - } - case SP_ATTACHMENT_PATH: { - spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, 0, - NULL); - spPathAttachment *path = NULL; - if (!attachment) - return NULL; - path = SUB_CAST(spPathAttachment, attachment); - path->closed = (flags & 16) != 0; - path->constantSpeed = (flags & 32) != 0; - int verticesLength = _readVertices(input, &path->super.vertices, &path->super.verticesCount, &path->super.bones, &path->super.bonesCount, (flags & 64) != 0, self->scale); - path->super.worldVerticesLength = verticesLength; - path->lengthsLength = verticesLength / 6; - path->lengths = MALLOC(float, path->lengthsLength); - for (int i = 0; i < path->lengthsLength; ++i) { - path->lengths[i] = readFloat(input) * self->scale; - } - if (nonessential) { - readColor(input, &path->color.r, &path->color.g, &path->color.b, &path->color.a); - } - spAttachmentLoader_configureAttachment(self->attachmentLoader, attachment); - return attachment; - } - case SP_ATTACHMENT_POINT: { - spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, 0, - NULL); - spPointAttachment *point = NULL; - if (!attachment) - return NULL; - point = SUB_CAST(spPointAttachment, attachment); - point->rotation = readFloat(input); - point->x = readFloat(input) * self->scale; - point->y = readFloat(input) * self->scale; - - if (nonessential) { - readColor(input, &point->color.r, &point->color.g, &point->color.b, &point->color.a); - } - spAttachmentLoader_configureAttachment(self->attachmentLoader, attachment); - return attachment; - } - case SP_ATTACHMENT_CLIPPING: { - int endSlotIndex = readVarint(input, 1); - spAttachment *attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, name, 0, - NULL); - spClippingAttachment *clip = NULL; - if (!attachment) - return NULL; - clip = SUB_CAST(spClippingAttachment, attachment); - int verticesLength = _readVertices(input, &clip->super.vertices, &clip->super.verticesCount, &clip->super.bones, &clip->super.bonesCount, (flags & 16) != 0, self->scale); - clip->super.worldVerticesLength = verticesLength; - if (nonessential) { - readColor(input, &clip->color.r, &clip->color.g, &clip->color.b, &clip->color.a); - } - clip->endSlot = skeletonData->slots[endSlotIndex]; - spAttachmentLoader_configureAttachment(self->attachmentLoader, attachment); - return attachment; - } - } - - return NULL; -} - -spSkin *spSkeletonBinary_readSkin(spSkeletonBinary *self, _dataInput *input, int /*bool*/ defaultSkin, - spSkeletonData *skeletonData, int /*bool*/ nonessential) { - spSkin *skin; - int i, n, ii, nn, slotCount; - - if (defaultSkin) { - slotCount = readVarint(input, 1); - if (slotCount == 0) return NULL; - skin = spSkin_create("default"); - } else { - char *name = readString(input); - skin = spSkin_create(name); - FREE(name); - if (nonessential) readColor(input, &skin->color.r, &skin->color.g, &skin->color.b, &skin->color.a); - for (i = 0, n = readVarint(input, 1); i < n; i++) - spBoneDataArray_add(skin->bones, skeletonData->bones[readVarint(input, 1)]); - - for (i = 0, n = readVarint(input, 1); i < n; i++) - spIkConstraintDataArray_add(skin->ikConstraints, skeletonData->ikConstraints[readVarint(input, 1)]); - - for (i = 0, n = readVarint(input, 1); i < n; i++) - spTransformConstraintDataArray_add(skin->transformConstraints, - skeletonData->transformConstraints[readVarint(input, 1)]); - - for (i = 0, n = readVarint(input, 1); i < n; i++) - spPathConstraintDataArray_add(skin->pathConstraints, skeletonData->pathConstraints[readVarint(input, 1)]); - - for (i = 0, n = readVarint(input, 1); i < n; i++) - spPhysicsConstraintDataArray_add(skin->physicsConstraints, skeletonData->physicsConstraints[readVarint(input, 1)]); - - slotCount = readVarint(input, 1); - } - - for (i = 0; i < slotCount; ++i) { - int slotIndex = readVarint(input, 1); - for (ii = 0, nn = readVarint(input, 1); ii < nn; ++ii) { - const char *name = readStringRef(input, skeletonData); - spAttachment *attachment = spSkeletonBinary_readAttachment(self, input, skin, slotIndex, name, skeletonData, - nonessential); - if (!attachment) - return NULL; - spSkin_setAttachment(skin, slotIndex, name, attachment); - } - } - return skin; -} - -spSkeletonData *spSkeletonBinary_readSkeletonDataFile(spSkeletonBinary *self, const char *path) { - int length; - spSkeletonData *skeletonData; - const char *binary = _spUtil_readFile(path, &length); - if (length == 0 || !binary) { - _spSkeletonBinary_setError(self, "Unable to read skeleton file: ", path); - return NULL; - } - skeletonData = spSkeletonBinary_readSkeletonData(self, (unsigned char *) binary, length); - FREE(binary); - return skeletonData; -} - -spSkeletonData *spSkeletonBinary_readSkeletonData(spSkeletonBinary *self, const unsigned char *binary, - const int length) { - int i, n, ii, nonessential; - char buffer[32]; - int lowHash, highHash; - spSkeletonData *skeletonData; - _spSkeletonBinary *internal = SUB_CAST(_spSkeletonBinary, self); - - _dataInput *input = NEW(_dataInput); - input->cursor = binary; - input->end = binary + length; - - FREE(self->error); - self->error = 0; - internal->linkedMeshCount = 0; - - skeletonData = spSkeletonData_create(); - lowHash = readInt(input); - highHash = readInt(input); - snprintf(buffer, 32, "%x%x", highHash, lowHash); - buffer[31] = 0; - MALLOC_STR(skeletonData->hash, buffer); - - skeletonData->version = readString(input); - if (!strlen(skeletonData->version)) { - FREE(skeletonData->version); - skeletonData->version = 0; - } else { - if (!string_starts_with(skeletonData->version, SPINE_VERSION_STRING)) { - FREE(input); - char errorMsg[255]; - snprintf(errorMsg, 255, "Skeleton version %s does not match runtime version %s", skeletonData->version, SPINE_VERSION_STRING); - spSkeletonData_dispose(skeletonData); - _spSkeletonBinary_setError(self, errorMsg, NULL); - return NULL; - } - } - - skeletonData->x = readFloat(input); - skeletonData->y = readFloat(input); - skeletonData->width = readFloat(input); - skeletonData->height = readFloat(input); - skeletonData->referenceScale = readFloat(input); - - nonessential = readBoolean(input); - - if (nonessential) { - skeletonData->fps = readFloat(input); - skeletonData->imagesPath = readString(input); - if (!strlen(skeletonData->imagesPath)) { - FREE(skeletonData->imagesPath); - skeletonData->imagesPath = 0; - } - skeletonData->audioPath = readString(input); - if (!strlen(skeletonData->audioPath)) { - FREE(skeletonData->audioPath); - skeletonData->audioPath = 0; - } - } - - skeletonData->stringsCount = n = readVarint(input, 1); - skeletonData->strings = MALLOC(char *, skeletonData->stringsCount); - for (i = 0; i < n; i++) { - skeletonData->strings[i] = readString(input); - } - - /* Bones. */ - skeletonData->bonesCount = readVarint(input, 1); - skeletonData->bones = MALLOC(spBoneData *, skeletonData->bonesCount); - for (i = 0; i < skeletonData->bonesCount; ++i) { - const char *name = readString(input); - spBoneData *parent = i == 0 ? 0 : skeletonData->bones[readVarint(input, 1)]; - spBoneData *data = spBoneData_create(i, name, parent); - FREE(name); - data->rotation = readFloat(input); - data->x = readFloat(input) * self->scale; - data->y = readFloat(input) * self->scale; - data->scaleX = readFloat(input); - data->scaleY = readFloat(input); - data->shearX = readFloat(input); - data->shearY = readFloat(input); - data->length = readFloat(input) * self->scale; - data->inherit = (spInherit) readVarint(input, 1); - data->skinRequired = readBoolean(input); - if (nonessential) { - readColor(input, &data->color.r, &data->color.g, &data->color.b, &data->color.a); - data->icon = readString(input); - data->visible = readBoolean(input); - } - skeletonData->bones[i] = data; - } - - /* Slots. */ - skeletonData->slotsCount = readVarint(input, 1); - skeletonData->slots = MALLOC(spSlotData *, skeletonData->slotsCount); - for (i = 0; i < skeletonData->slotsCount; ++i) { - char *slotName = readString(input); - spBoneData *boneData = skeletonData->bones[readVarint(input, 1)]; - spSlotData *slotData = spSlotData_create(i, slotName, boneData); - FREE(slotName); - readColor(input, &slotData->color.r, &slotData->color.g, &slotData->color.b, &slotData->color.a); - int a = readByte(input); - int r = readByte(input); - int g = readByte(input); - int b = readByte(input); - if (!(r == 0xff && g == 0xff && b == 0xff && a == 0xff)) { - slotData->darkColor = spColor_create(); - spColor_setFromFloats(slotData->darkColor, r / 255.0f, g / 255.0f, b / 255.0f, 1); - } - char *attachmentName = readStringRef(input, skeletonData); - if (attachmentName) MALLOC_STR(slotData->attachmentName, attachmentName); - else - slotData->attachmentName = 0; - slotData->blendMode = (spBlendMode) readVarint(input, 1); - if (nonessential) { - slotData->visible = readBoolean(input); - } - skeletonData->slots[i] = slotData; - } - - /* IK constraints. */ - skeletonData->ikConstraintsCount = readVarint(input, 1); - skeletonData->ikConstraints = MALLOC(spIkConstraintData *, skeletonData->ikConstraintsCount); - for (i = 0; i < skeletonData->ikConstraintsCount; ++i) { - const char *name = readString(input); - spIkConstraintData *data = spIkConstraintData_create(name); - FREE(name); - data->order = readVarint(input, 1); - data->bonesCount = readVarint(input, 1); - data->bones = MALLOC(spBoneData *, data->bonesCount); - for (ii = 0; ii < data->bonesCount; ++ii) - data->bones[ii] = skeletonData->bones[readVarint(input, 1)]; - data->target = skeletonData->bones[readVarint(input, 1)]; - int flags = readByte(input); - data->skinRequired = (flags & 1) != 0; - data->bendDirection = (flags & 2) != 0 ? 1 : -1; - data->compress = (flags & 4) != 0; - data->stretch = (flags & 8) != 0; - data->uniform = (flags & 16) != 0; - if ((flags & 32) != 0) data->mix = (flags & 64) != 0 ? readFloat(input) : 1; - if ((flags & 128) != 0) data->softness = readFloat(input) * self->scale; - - skeletonData->ikConstraints[i] = data; - } - - /* Transform constraints. */ - skeletonData->transformConstraintsCount = readVarint(input, 1); - skeletonData->transformConstraints = MALLOC( - spTransformConstraintData *, skeletonData->transformConstraintsCount); - for (i = 0; i < skeletonData->transformConstraintsCount; ++i) { - const char *name = readString(input); - spTransformConstraintData *data = spTransformConstraintData_create(name); - FREE(name); - data->order = readVarint(input, 1); - data->bonesCount = readVarint(input, 1); - data->bones = MALLOC(spBoneData *, data->bonesCount); - for (ii = 0; ii < data->bonesCount; ++ii) - data->bones[ii] = skeletonData->bones[readVarint(input, 1)]; - data->target = skeletonData->bones[readVarint(input, 1)]; - int flags = readByte(input); - data->skinRequired = (flags & 1) != 0; - data->local = (flags & 2) != 0; - data->relative = (flags & 4) != 0; - if ((flags & 8) != 0) data->offsetRotation = readFloat(input); - if ((flags & 16) != 0) data->offsetX = readFloat(input) * self->scale; - if ((flags & 32) != 0) data->offsetY = readFloat(input) * self->scale; - if ((flags & 64) != 0) data->offsetScaleX = readFloat(input); - if ((flags & 128) != 0) data->offsetScaleY = readFloat(input); - flags = readByte(input); - if ((flags & 1) != 0) data->offsetShearY = readFloat(input); - if ((flags & 2) != 0) data->mixRotate = readFloat(input); - if ((flags & 4) != 0) data->mixX = readFloat(input); - if ((flags & 8) != 0) data->mixY = readFloat(input); - if ((flags & 16) != 0) data->mixScaleX = readFloat(input); - if ((flags & 32) != 0) data->mixScaleY = readFloat(input); - if ((flags & 64) != 0) data->mixShearY = readFloat(input); - - skeletonData->transformConstraints[i] = data; - } - - /* Path constraints */ - skeletonData->pathConstraintsCount = readVarint(input, 1); - skeletonData->pathConstraints = MALLOC(spPathConstraintData *, skeletonData->pathConstraintsCount); - for (i = 0; i < skeletonData->pathConstraintsCount; ++i) { - const char *name = readString(input); - spPathConstraintData *data = spPathConstraintData_create(name); - FREE(name); - data->order = readVarint(input, 1); - data->skinRequired = readBoolean(input); - data->bonesCount = readVarint(input, 1); - data->bones = MALLOC(spBoneData *, data->bonesCount); - for (ii = 0; ii < data->bonesCount; ++ii) - data->bones[ii] = skeletonData->bones[readVarint(input, 1)]; - data->target = skeletonData->slots[readVarint(input, 1)]; - int flags = readByte(input); - data->positionMode = (spPositionMode) (flags & 1); - data->spacingMode = (spSpacingMode) ((flags >> 1) & 3); - data->rotateMode = (spRotateMode) ((flags >> 3) & 3); - if ((flags & 128) != 0) data->offsetRotation = readFloat(input); - data->position = readFloat(input); - if (data->positionMode == SP_POSITION_MODE_FIXED) data->position *= self->scale; - data->spacing = readFloat(input); - if (data->spacingMode == SP_SPACING_MODE_LENGTH || data->spacingMode == SP_SPACING_MODE_FIXED) - data->spacing *= self->scale; - data->mixRotate = readFloat(input); - data->mixX = readFloat(input); - data->mixY = readFloat(input); - skeletonData->pathConstraints[i] = data; - } - - // Physics constraints. - skeletonData->physicsConstraintsCount = readVarint(input, 1); - skeletonData->physicsConstraints = MALLOC(spPhysicsConstraintData *, skeletonData->physicsConstraintsCount); - for (i = 0; i < skeletonData->physicsConstraintsCount; i++) { - const char *name = readString(input); - spPhysicsConstraintData *data = spPhysicsConstraintData_create(name); - FREE(name); - data->order = readVarint(input, 1); - data->bone = skeletonData->bones[readVarint(input, 1)]; - int flags = readByte(input); - data->skinRequired = (flags & 1) != 0; - if ((flags & 2) != 0) data->x = readFloat(input); - if ((flags & 4) != 0) data->y = readFloat(input); - if ((flags & 8) != 0) data->rotate = readFloat(input); - if ((flags & 16) != 0) data->scaleX = readFloat(input); - if ((flags & 32) != 0) data->shearX = readFloat(input); - data->limit = ((flags & 64) != 0 ? readFloat(input) : 5000) * self->scale; - data->step = 1.f / readByte(input); - data->inertia = readFloat(input); - data->strength = readFloat(input); - data->damping = readFloat(input); - data->massInverse = (flags & 128) != 0 ? readFloat(input) : 1; - data->wind = readFloat(input); - data->gravity = readFloat(input); - flags = readByte(input); - if ((flags & 1) != 0) data->inertiaGlobal = -1; - if ((flags & 2) != 0) data->strengthGlobal = -1; - if ((flags & 4) != 0) data->dampingGlobal = -1; - if ((flags & 8) != 0) data->massGlobal = -1; - if ((flags & 16) != 0) data->windGlobal = -1; - if ((flags & 32) != 0) data->gravityGlobal = -1; - if ((flags & 64) != 0) data->mixGlobal = -1; - data->mix = (flags & 128) != 0 ? readFloat(input) : 1; - skeletonData->physicsConstraints[i] = data; - } - - /* Default skin. */ - skeletonData->defaultSkin = spSkeletonBinary_readSkin(self, input, -1, skeletonData, nonessential); - if (self->attachmentLoader->error1) { - FREE(input); - spSkin_dispose(skeletonData->defaultSkin); - spSkeletonData_dispose(skeletonData); - _spSkeletonBinary_setError(self, self->attachmentLoader->error1, self->attachmentLoader->error2); - return NULL; - } - skeletonData->skinsCount = readVarint(input, 1); - - if (skeletonData->defaultSkin) - ++skeletonData->skinsCount; - - skeletonData->skins = MALLOC(spSkin *, skeletonData->skinsCount); - - if (skeletonData->defaultSkin) - skeletonData->skins[0] = skeletonData->defaultSkin; - - /* Skins. */ - for (i = skeletonData->defaultSkin ? 1 : 0; i < skeletonData->skinsCount; ++i) { - spSkin *skin = spSkeletonBinary_readSkin(self, input, 0, skeletonData, nonessential); - if (self->attachmentLoader->error1) { - FREE(input); - skeletonData->skinsCount = i + 1; - spSkeletonData_dispose(skeletonData); - _spSkeletonBinary_setError(self, self->attachmentLoader->error1, self->attachmentLoader->error2); - return NULL; - } - skeletonData->skins[i] = skin; - } - - /* Linked meshes. */ - for (i = 0; i < internal->linkedMeshCount; ++i) { - _spLinkedMesh *linkedMesh = internal->linkedMeshes + i; - spSkin *skin = skeletonData->skins[linkedMesh->skinIndex]; - if (!skin) { - FREE(input); - spSkeletonData_dispose(skeletonData); - _spSkeletonBinary_setError(self, "Skin not found", ""); - return NULL; - } - spAttachment *parent = spSkin_getAttachment(skin, linkedMesh->slotIndex, linkedMesh->parent); - if (!parent) { - FREE(input); - spSkeletonData_dispose(skeletonData); - _spSkeletonBinary_setError(self, "Parent mesh not found: ", linkedMesh->parent); - return NULL; - } - linkedMesh->mesh->super.timelineAttachment = linkedMesh->inheritTimeline ? parent - : SUPER(SUPER(linkedMesh->mesh)); - spMeshAttachment_setParentMesh(linkedMesh->mesh, SUB_CAST(spMeshAttachment, parent)); - if (linkedMesh->mesh->region) spMeshAttachment_updateRegion(linkedMesh->mesh); - spAttachmentLoader_configureAttachment(self->attachmentLoader, SUPER(SUPER(linkedMesh->mesh))); - } - - /* Events. */ - skeletonData->eventsCount = readVarint(input, 1); - skeletonData->events = MALLOC(spEventData *, skeletonData->eventsCount); - for (i = 0; i < skeletonData->eventsCount; ++i) { - const char *name = readString(input); - spEventData *eventData = spEventData_create(name); - FREE(name); - eventData->intValue = readVarint(input, 0); - eventData->floatValue = readFloat(input); - eventData->stringValue = readString(input); - eventData->audioPath = readString(input); - if (eventData->audioPath) { - eventData->volume = readFloat(input); - eventData->balance = readFloat(input); - } - skeletonData->events[i] = eventData; - } - - /* Animations. */ - skeletonData->animationsCount = readVarint(input, 1); - skeletonData->animations = MALLOC(spAnimation *, skeletonData->animationsCount); - for (i = 0; i < skeletonData->animationsCount; ++i) { - const char *name = readString(input); - spAnimation *animation = _spSkeletonBinary_readAnimation(self, name, input, skeletonData); - FREE(name); - if (!animation) { - FREE(input); - skeletonData->animationsCount = i + 1; - spSkeletonData_dispose(skeletonData); - _spSkeletonBinary_setError(self, "Animation corrupted: ", name); - return NULL; - } - skeletonData->animations[i] = animation; - } - - FREE(input); - return skeletonData; -} diff --git a/spine-c/spine-c/src/spine/SkeletonBounds.c b/spine-c/spine-c/src/spine/SkeletonBounds.c deleted file mode 100644 index 0e111abea..000000000 --- a/spine-c/spine-c/src/spine/SkeletonBounds.c +++ /dev/null @@ -1,210 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -spPolygon *spPolygon_create(int capacity) { - spPolygon *self = NEW(spPolygon); - self->capacity = capacity; - self->vertices = MALLOC(float, capacity); - return self; -} - -void spPolygon_dispose(spPolygon *self) { - FREE(self->vertices); - FREE(self); -} - -int /*bool*/ spPolygon_containsPoint(spPolygon *self, float x, float y) { - int prevIndex = self->count - 2; - int inside = 0; - int i; - for (i = 0; i < self->count; i += 2) { - float vertexY = self->vertices[i + 1]; - float prevY = self->vertices[prevIndex + 1]; - if ((vertexY < y && prevY >= y) || (prevY < y && vertexY >= y)) { - float vertexX = self->vertices[i]; - if (vertexX + (y - vertexY) / (prevY - vertexY) * (self->vertices[prevIndex] - vertexX) < x) - inside = !inside; - } - prevIndex = i; - } - return inside; -} - -int /*bool*/ spPolygon_intersectsSegment(spPolygon *self, float x1, float y1, float x2, float y2) { - float width12 = x1 - x2, height12 = y1 - y2; - float det1 = x1 * y2 - y1 * x2; - float x3 = self->vertices[self->count - 2], y3 = self->vertices[self->count - 1]; - int i; - for (i = 0; i < self->count; i += 2) { - float x4 = self->vertices[i], y4 = self->vertices[i + 1]; - float det2 = x3 * y4 - y3 * x4; - float width34 = x3 - x4, height34 = y3 - y4; - float det3 = width12 * height34 - height12 * width34; - float x = (det1 * width34 - width12 * det2) / det3; - if (((x >= x3 && x <= x4) || (x >= x4 && x <= x3)) && ((x >= x1 && x <= x2) || (x >= x2 && x <= x1))) { - float y = (det1 * height34 - height12 * det2) / det3; - if (((y >= y3 && y <= y4) || (y >= y4 && y <= y3)) && ((y >= y1 && y <= y2) || (y >= y2 && y <= y1))) - return 1; - } - x3 = x4; - y3 = y4; - } - return 0; -} - -/**/ - -typedef struct { - spSkeletonBounds super; - int capacity; -} _spSkeletonBounds; - -spSkeletonBounds *spSkeletonBounds_create(void) { - return SUPER(NEW(_spSkeletonBounds)); -} - -void spSkeletonBounds_dispose(spSkeletonBounds *self) { - int i; - for (i = 0; i < SUB_CAST(_spSkeletonBounds, self)->capacity; ++i) - if (self->polygons[i]) spPolygon_dispose(self->polygons[i]); - FREE(self->polygons); - FREE(self->boundingBoxes); - FREE(self); -} - -void spSkeletonBounds_update(spSkeletonBounds *self, spSkeleton *skeleton, int /*bool*/ updateAabb) { - int i; - - _spSkeletonBounds *internal = SUB_CAST(_spSkeletonBounds, self); - if (internal->capacity < skeleton->slotsCount) { - spPolygon **newPolygons; - - FREE(self->boundingBoxes); - self->boundingBoxes = MALLOC(spBoundingBoxAttachment *, skeleton->slotsCount); - - newPolygons = CALLOC(spPolygon *, skeleton->slotsCount); - memcpy(newPolygons, self->polygons, sizeof(spPolygon *) * internal->capacity); - FREE(self->polygons); - self->polygons = newPolygons; - - internal->capacity = skeleton->slotsCount; - } - - self->minX = (float) INT_MAX; - self->minY = (float) INT_MAX; - self->maxX = (float) INT_MIN; - self->maxY = (float) INT_MIN; - - self->count = 0; - for (i = 0; i < skeleton->slotsCount; ++i) { - spPolygon *polygon; - spBoundingBoxAttachment *boundingBox; - spAttachment *attachment; - - spSlot *slot = skeleton->slots[i]; - if (!slot->bone->active) continue; - attachment = slot->attachment; - if (!attachment || attachment->type != SP_ATTACHMENT_BOUNDING_BOX) continue; - boundingBox = (spBoundingBoxAttachment *) attachment; - self->boundingBoxes[self->count] = boundingBox; - - polygon = self->polygons[self->count]; - if (!polygon || polygon->capacity < boundingBox->super.worldVerticesLength) { - if (polygon) spPolygon_dispose(polygon); - self->polygons[self->count] = polygon = spPolygon_create(boundingBox->super.worldVerticesLength); - } - polygon->count = boundingBox->super.worldVerticesLength; - spVertexAttachment_computeWorldVertices(SUPER(boundingBox), slot, 0, polygon->count, polygon->vertices, 0, 2); - - if (updateAabb) { - int ii = 0; - for (; ii < polygon->count; ii += 2) { - float x = polygon->vertices[ii]; - float y = polygon->vertices[ii + 1]; - if (x < self->minX) self->minX = x; - if (y < self->minY) self->minY = y; - if (x > self->maxX) self->maxX = x; - if (y > self->maxY) self->maxY = y; - } - } - - self->count++; - } -} - -int /*bool*/ spSkeletonBounds_aabbContainsPoint(spSkeletonBounds *self, float x, float y) { - return x >= self->minX && x <= self->maxX && y >= self->minY && y <= self->maxY; -} - -int /*bool*/ spSkeletonBounds_aabbIntersectsSegment(spSkeletonBounds *self, float x1, float y1, float x2, float y2) { - float m, x, y; - if ((x1 <= self->minX && x2 <= self->minX) || (y1 <= self->minY && y2 <= self->minY) || (x1 >= self->maxX && x2 >= self->maxX) || (y1 >= self->maxY && y2 >= self->maxY)) - return 0; - m = (y2 - y1) / (x2 - x1); - y = m * (self->minX - x1) + y1; - if (y > self->minY && y < self->maxY) return 1; - y = m * (self->maxX - x1) + y1; - if (y > self->minY && y < self->maxY) return 1; - x = (self->minY - y1) / m + x1; - if (x > self->minX && x < self->maxX) return 1; - x = (self->maxY - y1) / m + x1; - if (x > self->minX && x < self->maxX) return 1; - return 0; -} - -int /*bool*/ spSkeletonBounds_aabbIntersectsSkeleton(spSkeletonBounds *self, spSkeletonBounds *bounds) { - return self->minX < bounds->maxX && self->maxX > bounds->minX && self->minY < bounds->maxY && - self->maxY > bounds->minY; -} - -spBoundingBoxAttachment *spSkeletonBounds_containsPoint(spSkeletonBounds *self, float x, float y) { - int i; - for (i = 0; i < self->count; ++i) - if (spPolygon_containsPoint(self->polygons[i], x, y)) return self->boundingBoxes[i]; - return 0; -} - -spBoundingBoxAttachment * -spSkeletonBounds_intersectsSegment(spSkeletonBounds *self, float x1, float y1, float x2, float y2) { - int i; - for (i = 0; i < self->count; ++i) - if (spPolygon_intersectsSegment(self->polygons[i], x1, y1, x2, y2)) return self->boundingBoxes[i]; - return 0; -} - -spPolygon *spSkeletonBounds_getPolygon(spSkeletonBounds *self, spBoundingBoxAttachment *boundingBox) { - int i; - for (i = 0; i < self->count; ++i) - if (self->boundingBoxes[i] == boundingBox) return self->polygons[i]; - return 0; -} diff --git a/spine-c/spine-c/src/spine/SkeletonClipping.c b/spine-c/spine-c/src/spine/SkeletonClipping.c deleted file mode 100644 index be1af6fee..000000000 --- a/spine-c/spine-c/src/spine/SkeletonClipping.c +++ /dev/null @@ -1,337 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -spSkeletonClipping *spSkeletonClipping_create(void) { - spSkeletonClipping *clipping = CALLOC(spSkeletonClipping, 1); - - clipping->triangulator = spTriangulator_create(); - clipping->clippingPolygon = spFloatArray_create(128); - clipping->clipOutput = spFloatArray_create(128); - clipping->clippedVertices = spFloatArray_create(128); - clipping->clippedUVs = spFloatArray_create(128); - clipping->clippedTriangles = spUnsignedShortArray_create(128); - clipping->scratch = spFloatArray_create(128); - - return clipping; -} - -void spSkeletonClipping_dispose(spSkeletonClipping *self) { - spTriangulator_dispose(self->triangulator); - spFloatArray_dispose(self->clippingPolygon); - spFloatArray_dispose(self->clipOutput); - spFloatArray_dispose(self->clippedVertices); - spFloatArray_dispose(self->clippedUVs); - spUnsignedShortArray_dispose(self->clippedTriangles); - spFloatArray_dispose(self->scratch); - FREE(self); -} - -static void _makeClockwise(spFloatArray *polygon) { - int i, n, lastX; - float *vertices = polygon->items; - int verticeslength = polygon->size; - - float area = - vertices[verticeslength - 2] * vertices[1] - vertices[0] * vertices[verticeslength - 1], - p1x, p1y, p2x, p2y; - for (i = 0, n = verticeslength - 3; i < n; i += 2) { - p1x = vertices[i]; - p1y = vertices[i + 1]; - p2x = vertices[i + 2]; - p2y = vertices[i + 3]; - area += p1x * p2y - p2x * p1y; - } - if (area < 0) return; - - for (i = 0, lastX = verticeslength - 2, n = verticeslength >> 1; i < n; i += 2) { - float x = vertices[i], y = vertices[i + 1]; - int other = lastX - i; - vertices[i] = vertices[other]; - vertices[i + 1] = vertices[other + 1]; - vertices[other] = x; - vertices[other + 1] = y; - } -} - -int spSkeletonClipping_clipStart(spSkeletonClipping *self, spSlot *slot, spClippingAttachment *clip) { - int i, n; - float *vertices; - if (self->clipAttachment) return 0; - self->clipAttachment = clip; - - n = clip->super.worldVerticesLength; - vertices = spFloatArray_setSize(self->clippingPolygon, n)->items; - spVertexAttachment_computeWorldVertices(SUPER(clip), slot, 0, n, vertices, 0, 2); - _makeClockwise(self->clippingPolygon); - self->clippingPolygons = spTriangulator_decompose(self->triangulator, self->clippingPolygon, - spTriangulator_triangulate(self->triangulator, - self->clippingPolygon)); - for (i = 0, n = self->clippingPolygons->size; i < n; i++) { - spFloatArray *polygon = self->clippingPolygons->items[i]; - _makeClockwise(polygon); - spFloatArray_add(polygon, polygon->items[0]); - spFloatArray_add(polygon, polygon->items[1]); - } - return self->clippingPolygons->size; -} - -void spSkeletonClipping_clipEnd(spSkeletonClipping *self, spSlot *slot) { - if (self->clipAttachment != 0 && self->clipAttachment->endSlot == slot->data) spSkeletonClipping_clipEnd2(self); -} - -void spSkeletonClipping_clipEnd2(spSkeletonClipping *self) { - if (!self->clipAttachment) return; - self->clipAttachment = 0; - self->clippingPolygons = 0; - spFloatArray_clear(self->clippedVertices); - spFloatArray_clear(self->clippedUVs); - spUnsignedShortArray_clear(self->clippedTriangles); - spFloatArray_clear(self->clippingPolygon); -} - -int /*boolean*/ spSkeletonClipping_isClipping(spSkeletonClipping *self) { - return self->clipAttachment != 0; -} - -int /*boolean*/ -_clip(spSkeletonClipping *self, float x1, float y1, float x2, float y2, float x3, float y3, spFloatArray *clippingArea, - spFloatArray *output) { - spFloatArray *originalOutput = output; - int clipped = 0; - float *clippingVertices; - int clippingVerticesLast; - - spFloatArray *input = 0; - if (clippingArea->size % 4 >= 2) { - input = output; - output = self->scratch; - } else - input = self->scratch; - - spFloatArray_clear(input); - spFloatArray_add(input, x1); - spFloatArray_add(input, y1); - spFloatArray_add(input, x2); - spFloatArray_add(input, y2); - spFloatArray_add(input, x3); - spFloatArray_add(input, y3); - spFloatArray_add(input, x1); - spFloatArray_add(input, y1); - spFloatArray_clear(output); - - clippingVerticesLast = clippingArea->size - 4; - clippingVertices = clippingArea->items; - for (int i = 0;; i += 2) { - spFloatArray *temp; - float edgeX = clippingVertices[i], edgeY = clippingVertices[i + 1]; - float ex = edgeX - clippingVertices[i + 2], ey = edgeY - clippingVertices[i + 3]; - - int outputStart = output->size; - float *inputVertices = input->items; - for (int ii = 0, nn = input->size - 2; ii < nn;) { - float inputX = inputVertices[ii], inputY = inputVertices[ii + 1]; - ii += 2; - float inputX2 = inputVertices[ii], inputY2 = inputVertices[ii + 1]; - float s2 = ey * (edgeX - inputX2) > ex * (edgeY - inputY2); - float s1 = ey * (edgeX - inputX) - ex * (edgeY - inputY); - if (s1 > 0) { - if (s2) {// v1 inside, v2 inside - spFloatArray_add(output, inputX2); - spFloatArray_add(output, inputY2); - continue; - } - // v1 inside, v2 outside - float ix = inputX2 - inputX, iy = inputY2 - inputY, t = s1 / (ix * ey - iy * ex); - if (t >= 0 && t <= 1) { - spFloatArray_add(output, inputX + ix * t); - spFloatArray_add(output, inputY + iy * t); - } else { - spFloatArray_add(output, inputX2); - spFloatArray_add(output, inputY2); - } - } else if (s2) {// v1 outside, v2 inside - float ix = inputX2 - inputX, iy = inputY2 - inputY, t = s1 / (ix * ey - iy * ex); - if (t >= 0 && t <= 1) { - spFloatArray_add(output, inputX + ix * t); - spFloatArray_add(output, inputY + iy * t); - spFloatArray_add(output, inputX2); - spFloatArray_add(output, inputY2); - } else { - spFloatArray_add(output, inputX2); - spFloatArray_add(output, inputY2); - continue; - } - } - clipped = -1; - } - - if (outputStart == output->size) { - spFloatArray_clear(originalOutput); - return 1; - } - - spFloatArray_add(output, output->items[0]); - spFloatArray_add(output, output->items[1]); - - if (i == clippingVerticesLast) break; - temp = output; - output = input; - spFloatArray_clear(output); - input = temp; - } - - if (originalOutput != output) { - spFloatArray_clear(originalOutput); - spFloatArray_addAllValues(originalOutput, output->items, 0, output->size - 2); - } else - spFloatArray_setSize(originalOutput, originalOutput->size - 2); - - return clipped; -} - -void spSkeletonClipping_clipTriangles(spSkeletonClipping *self, float *vertices, int verticesLength, - unsigned short *triangles, int trianglesLength, float *uvs, int stride) { - int i; - spFloatArray *clipOutput = self->clipOutput; - spFloatArray *clippedVertices = self->clippedVertices; - spFloatArray *clippedUVs = self->clippedUVs; - spUnsignedShortArray *clippedTriangles = self->clippedTriangles; - spFloatArray **polygons = self->clippingPolygons->items; - int polygonsCount = self->clippingPolygons->size; - - short index = 0; - spFloatArray_clear(clippedVertices); - spFloatArray_clear(clippedUVs); - spUnsignedShortArray_clear(clippedTriangles); - i = 0; -continue_outer: - for (; i < trianglesLength; i += 3) { - int p; - int vertexOffset = triangles[i] * stride; - float x2, y2, u2, v2, x3, y3, u3, v3; - float x1 = vertices[vertexOffset], y1 = vertices[vertexOffset + 1]; - float u1 = uvs[vertexOffset], v1 = uvs[vertexOffset + 1]; - - vertexOffset = triangles[i + 1] * stride; - x2 = vertices[vertexOffset]; - y2 = vertices[vertexOffset + 1]; - u2 = uvs[vertexOffset]; - v2 = uvs[vertexOffset + 1]; - - vertexOffset = triangles[i + 2] * stride; - x3 = vertices[vertexOffset]; - y3 = vertices[vertexOffset + 1]; - u3 = uvs[vertexOffset]; - v3 = uvs[vertexOffset + 1]; - - for (p = 0; p < polygonsCount; p++) { - int s = clippedVertices->size; - if (_clip(self, x1, y1, x2, y2, x3, y3, polygons[p], clipOutput)) { - int ii; - float d0, d1, d2, d4, d; - unsigned short *clippedTrianglesItems; - int clipOutputCount; - float *clipOutputItems; - float *clippedVerticesItems; - float *clippedUVsItems; - - int clipOutputLength = clipOutput->size; - if (clipOutputLength == 0) continue; - d0 = y2 - y3; - d1 = x3 - x2; - d2 = x1 - x3; - d4 = y3 - y1; - d = 1 / (d0 * d2 + d1 * (y1 - y3)); - - clipOutputCount = clipOutputLength >> 1; - clipOutputItems = clipOutput->items; - clippedVerticesItems = spFloatArray_setSize(clippedVertices, s + (clipOutputCount << 1))->items; - clippedUVsItems = spFloatArray_setSize(clippedUVs, s + (clipOutputCount << 1))->items; - for (ii = 0; ii < clipOutputLength; ii += 2) { - float c0, c1, a, b, c; - float x = clipOutputItems[ii], y = clipOutputItems[ii + 1]; - clippedVerticesItems[s] = x; - clippedVerticesItems[s + 1] = y; - c0 = x - x3; - c1 = y - y3; - a = (d0 * c0 + d1 * c1) * d; - b = (d4 * c0 + d2 * c1) * d; - c = 1 - a - b; - clippedUVsItems[s] = u1 * a + u2 * b + u3 * c; - clippedUVsItems[s + 1] = v1 * a + v2 * b + v3 * c; - s += 2; - } - - s = clippedTriangles->size; - clippedTrianglesItems = spUnsignedShortArray_setSize(clippedTriangles, - s + 3 * (clipOutputCount - 2)) - ->items; - clipOutputCount--; - for (ii = 1; ii < clipOutputCount; ii++) { - clippedTrianglesItems[s] = index; - clippedTrianglesItems[s + 1] = (unsigned short) (index + ii); - clippedTrianglesItems[s + 2] = (unsigned short) (index + ii + 1); - s += 3; - } - index += clipOutputCount + 1; - - } else { - unsigned short *clippedTrianglesItems; - float *clippedVerticesItems = spFloatArray_setSize(clippedVertices, s + (3 << 1))->items; - float *clippedUVsItems = spFloatArray_setSize(clippedUVs, s + (3 << 1))->items; - clippedVerticesItems[s] = x1; - clippedVerticesItems[s + 1] = y1; - clippedVerticesItems[s + 2] = x2; - clippedVerticesItems[s + 3] = y2; - clippedVerticesItems[s + 4] = x3; - clippedVerticesItems[s + 5] = y3; - - clippedUVsItems[s] = u1; - clippedUVsItems[s + 1] = v1; - clippedUVsItems[s + 2] = u2; - clippedUVsItems[s + 3] = v2; - clippedUVsItems[s + 4] = u3; - clippedUVsItems[s + 5] = v3; - - s = clippedTriangles->size; - clippedTrianglesItems = spUnsignedShortArray_setSize(clippedTriangles, s + 3)->items; - clippedTrianglesItems[s] = index; - clippedTrianglesItems[s + 1] = (unsigned short) (index + 1); - clippedTrianglesItems[s + 2] = (unsigned short) (index + 2); - index += 3; - i += 3; - goto continue_outer; - } - } - } - UNUSED(verticesLength); -} diff --git a/spine-c/spine-c/src/spine/SkeletonData.c b/spine-c/spine-c/src/spine/SkeletonData.c deleted file mode 100644 index ee93e9fee..000000000 --- a/spine-c/spine-c/src/spine/SkeletonData.c +++ /dev/null @@ -1,151 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -spSkeletonData *spSkeletonData_create(void) { - return NEW(spSkeletonData); -} - -void spSkeletonData_dispose(spSkeletonData *self) { - int i; - - for (i = 0; i < self->stringsCount; ++i) - FREE(self->strings[i]); - FREE(self->strings); - - for (i = 0; i < self->bonesCount; ++i) - spBoneData_dispose(self->bones[i]); - FREE(self->bones); - - for (i = 0; i < self->slotsCount; ++i) - spSlotData_dispose(self->slots[i]); - FREE(self->slots); - - for (i = 0; i < self->skinsCount; ++i) - spSkin_dispose(self->skins[i]); - FREE(self->skins); - - for (i = 0; i < self->eventsCount; ++i) - spEventData_dispose(self->events[i]); - FREE(self->events); - - for (i = 0; i < self->animationsCount; ++i) - spAnimation_dispose(self->animations[i]); - FREE(self->animations); - - for (i = 0; i < self->ikConstraintsCount; ++i) - spIkConstraintData_dispose(self->ikConstraints[i]); - FREE(self->ikConstraints); - - for (i = 0; i < self->transformConstraintsCount; ++i) - spTransformConstraintData_dispose(self->transformConstraints[i]); - FREE(self->transformConstraints); - - for (i = 0; i < self->pathConstraintsCount; i++) - spPathConstraintData_dispose(self->pathConstraints[i]); - FREE(self->pathConstraints); - - for (i = 0; i < self->physicsConstraintsCount; i++) - spPhysicsConstraintData_dispose(self->physicsConstraints[i]); - FREE(self->physicsConstraints); - - FREE(self->hash); - FREE(self->version); - FREE(self->imagesPath); - FREE(self->audioPath); - - FREE(self); -} - -spBoneData *spSkeletonData_findBone(const spSkeletonData *self, const char *boneName) { - int i; - for (i = 0; i < self->bonesCount; ++i) - if (strcmp(self->bones[i]->name, boneName) == 0) return self->bones[i]; - return 0; -} - -spSlotData *spSkeletonData_findSlot(const spSkeletonData *self, const char *slotName) { - int i; - for (i = 0; i < self->slotsCount; ++i) - if (strcmp(self->slots[i]->name, slotName) == 0) return self->slots[i]; - return 0; -} - -spSkin *spSkeletonData_findSkin(const spSkeletonData *self, const char *skinName) { - int i; - for (i = 0; i < self->skinsCount; ++i) - if (strcmp(self->skins[i]->name, skinName) == 0) return self->skins[i]; - return 0; -} - -spEventData *spSkeletonData_findEvent(const spSkeletonData *self, const char *eventName) { - int i; - for (i = 0; i < self->eventsCount; ++i) - if (strcmp(self->events[i]->name, eventName) == 0) return self->events[i]; - return 0; -} - -spAnimation *spSkeletonData_findAnimation(const spSkeletonData *self, const char *animationName) { - int i; - for (i = 0; i < self->animationsCount; ++i) - if (strcmp(self->animations[i]->name, animationName) == 0) return self->animations[i]; - return 0; -} - -spIkConstraintData *spSkeletonData_findIkConstraint(const spSkeletonData *self, const char *constraintName) { - int i; - for (i = 0; i < self->ikConstraintsCount; ++i) - if (strcmp(self->ikConstraints[i]->name, constraintName) == 0) return self->ikConstraints[i]; - return 0; -} - -spTransformConstraintData * -spSkeletonData_findTransformConstraint(const spSkeletonData *self, const char *constraintName) { - int i; - for (i = 0; i < self->transformConstraintsCount; ++i) - if (strcmp(self->transformConstraints[i]->name, constraintName) == 0) return self->transformConstraints[i]; - return 0; -} - -spPathConstraintData *spSkeletonData_findPathConstraint(const spSkeletonData *self, const char *constraintName) { - int i; - for (i = 0; i < self->pathConstraintsCount; ++i) - if (strcmp(self->pathConstraints[i]->name, constraintName) == 0) return self->pathConstraints[i]; - return 0; -} - -spPhysicsConstraintData *spSkeletonData_findPhysicsConstraint(const spSkeletonData *self, const char *constraintName) { - int i; - for (i = 0; i < self->physicsConstraintsCount; ++i) - if (strcmp(self->physicsConstraints[i]->name, constraintName) == 0) return self->physicsConstraints[i]; - return 0; -} diff --git a/spine-c/spine-c/src/spine/SkeletonJson.c b/spine-c/spine-c/src/spine/SkeletonJson.c deleted file mode 100644 index 52af64b91..000000000 --- a/spine-c/spine-c/src/spine/SkeletonJson.c +++ /dev/null @@ -1,1802 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include "Json.h" -#include -#include -#include -#include -#include -#include - -typedef struct { - const char *parent; - const char *skin; - int slotIndex; - spMeshAttachment *mesh; - int inheritTimeline; -} _spLinkedMesh; - -typedef struct { - spSkeletonJson super; - int ownsLoader; - - int linkedMeshCount; - int linkedMeshCapacity; - _spLinkedMesh *linkedMeshes; -} _spSkeletonJson; - -spSkeletonJson *spSkeletonJson_createWithLoader(spAttachmentLoader *attachmentLoader) { - spSkeletonJson *self = SUPER(NEW(_spSkeletonJson)); - self->scale = 1; - self->attachmentLoader = attachmentLoader; - return self; -} - -spSkeletonJson *spSkeletonJson_create(spAtlas *atlas) { - spAtlasAttachmentLoader *attachmentLoader = spAtlasAttachmentLoader_create(atlas); - spSkeletonJson *self = spSkeletonJson_createWithLoader(SUPER(attachmentLoader)); - SUB_CAST(_spSkeletonJson, self)->ownsLoader = 1; - return self; -} - -void spSkeletonJson_dispose(spSkeletonJson *self) { - _spSkeletonJson *internal = SUB_CAST(_spSkeletonJson, self); - if (internal->ownsLoader) spAttachmentLoader_dispose(self->attachmentLoader); - FREE(internal->linkedMeshes); - FREE(self->error); - FREE(self); -} - -void _spSkeletonJson_setError(spSkeletonJson *self, Json *root, const char *value1, const char *value2) { - char message[256]; - int length; - FREE(self->error); - strcpy(message, value1); - length = (int) strlen(value1); - if (value2) strncat(message + length, value2, 255 - length); - MALLOC_STR(self->error, message); - if (root) Json_dispose(root); -} - -static float toColor(const char *value, int index) { - char digits[3]; - char *error; - int color; - - if ((size_t) index >= strlen(value) / 2) return -1; - value += index * 2; - - digits[0] = *value; - digits[1] = *(value + 1); - digits[2] = '\0'; - color = (int) strtoul(digits, &error, 16); - if (*error != 0) return -1; - return color / (float) 255; -} - -static void toColor2(spColor *color, const char *value, int /*bool*/ hasAlpha) { - color->r = toColor(value, 0); - color->g = toColor(value, 1); - color->b = toColor(value, 2); - if (hasAlpha) color->a = toColor(value, 3); - else - color->a = 1.0f; -} - -static void -setBezier(spCurveTimeline *timeline, int frame, int value, int bezier, float time1, float value1, float cx1, float cy1, - float cx2, float cy2, float time2, float value2) { - spTimeline_setBezier(SUPER(timeline), bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); -} - -static int readCurve(Json *curve, spCurveTimeline *timeline, int bezier, int frame, int value, float time1, float time2, - float value1, float value2, float scale) { - float cx1, cy1, cx2, cy2; - if (curve->type == Json_String && strcmp(curve->valueString, "stepped") == 0) { - spCurveTimeline_setStepped(timeline, frame); - return bezier; - } - curve = Json_getItemAtIndex(curve, value << 2); - cx1 = curve->valueFloat; - curve = curve->next; - cy1 = curve->valueFloat * scale; - curve = curve->next; - cx2 = curve->valueFloat; - curve = curve->next; - cy2 = curve->valueFloat * scale; - setBezier(timeline, frame, value, bezier, time1, value1, cx1, cy1, cx2, cy2, time2, value2); - return bezier + 1; -} - -static spTimeline *readTimeline(Json *keyMap, spCurveTimeline1 *timeline, float defaultValue, float scale) { - float time = Json_getFloat(keyMap, "time", 0); - float value = Json_getFloat(keyMap, "value", defaultValue) * scale; - int frame, bezier = 0; - for (frame = 0;; ++frame) { - Json *nextMap, *curve; - float time2, value2; - spCurveTimeline1_setFrame(timeline, frame, time, value); - nextMap = keyMap->next; - if (nextMap == NULL) break; - time2 = Json_getFloat(nextMap, "time", 0); - value2 = Json_getFloat(nextMap, "value", defaultValue) * scale; - curve = Json_getItem(keyMap, "curve"); - if (curve != NULL) bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value, value2, scale); - time = time2; - value = value2; - keyMap = nextMap; - } - /* timeline.shrink(); // BOZO */ - return SUPER(timeline); -} - -static spTimeline * -readTimeline2(Json *keyMap, spCurveTimeline2 *timeline, const char *name1, const char *name2, float defaultValue, - float scale) { - float time = Json_getFloat(keyMap, "time", 0); - float value1 = Json_getFloat(keyMap, name1, defaultValue) * scale; - float value2 = Json_getFloat(keyMap, name2, defaultValue) * scale; - int frame, bezier = 0; - for (frame = 0;; ++frame) { - Json *nextMap, *curve; - float time2, nvalue1, nvalue2; - spCurveTimeline2_setFrame(timeline, frame, time, value1, value2); - nextMap = keyMap->next; - if (nextMap == NULL) break; - time2 = Json_getFloat(nextMap, "time", 0); - nvalue1 = Json_getFloat(nextMap, name1, defaultValue) * scale; - nvalue2 = Json_getFloat(nextMap, name2, defaultValue) * scale; - curve = Json_getItem(keyMap, "curve"); - if (curve != NULL) { - bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale); - bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale); - } - time = time2; - value1 = nvalue1; - value2 = nvalue2; - keyMap = nextMap; - } - /* timeline.shrink(); // BOZO */ - return SUPER(timeline); -} - -static spSequence *readSequence(Json *item) { - spSequence *sequence; - if (item == NULL) return NULL; - sequence = spSequence_create(Json_getInt(item, "count", 0)); - sequence->start = Json_getInt(item, "start", 1); - sequence->digits = Json_getInt(item, "digits", 0); - sequence->setupIndex = Json_getInt(item, "setupIndex", 0); - return sequence; -} - -static void _spSkeletonJson_addLinkedMesh(spSkeletonJson *self, spMeshAttachment *mesh, const char *skin, int slotIndex, - const char *parent, int inheritDeform) { - _spLinkedMesh *linkedMesh; - _spSkeletonJson *internal = SUB_CAST(_spSkeletonJson, self); - - if (internal->linkedMeshCount == internal->linkedMeshCapacity) { - _spLinkedMesh *linkedMeshes; - internal->linkedMeshCapacity *= 2; - if (internal->linkedMeshCapacity < 8) internal->linkedMeshCapacity = 8; - linkedMeshes = MALLOC(_spLinkedMesh, internal->linkedMeshCapacity); - memcpy(linkedMeshes, internal->linkedMeshes, sizeof(_spLinkedMesh) * internal->linkedMeshCount); - FREE(internal->linkedMeshes); - internal->linkedMeshes = linkedMeshes; - } - - linkedMesh = internal->linkedMeshes + internal->linkedMeshCount++; - linkedMesh->mesh = mesh; - linkedMesh->skin = skin; - linkedMesh->slotIndex = slotIndex; - linkedMesh->parent = parent; - linkedMesh->inheritTimeline = inheritDeform; -} - -static void cleanUpTimelines(spTimelineArray *timelines) { - int i, n; - for (i = 0, n = timelines->size; i < n; ++i) - spTimeline_dispose(timelines->items[i]); - spTimelineArray_dispose(timelines); -} - -static int findSlotIndex(spSkeletonJson *json, const spSkeletonData *skeletonData, const char *slotName, spTimelineArray *timelines) { - spSlotData *slot = spSkeletonData_findSlot(skeletonData, slotName); - if (slot) return slot->index; - cleanUpTimelines(timelines); - _spSkeletonJson_setError(json, NULL, "Slot not found: ", slotName); - return -1; -} - -int findIkConstraintIndex(spSkeletonJson *json, const spSkeletonData *skeletonData, const spIkConstraintData *constraint, spTimelineArray *timelines) { - if (constraint) { - int i; - for (i = 0; i < skeletonData->ikConstraintsCount; ++i) - if (skeletonData->ikConstraints[i] == constraint) return i; - } - cleanUpTimelines(timelines); - _spSkeletonJson_setError(json, NULL, "IK constraint not found: ", constraint->name); - return -1; -} - -int findTransformConstraintIndex(spSkeletonJson *json, const spSkeletonData *skeletonData, const spTransformConstraintData *constraint, spTimelineArray *timelines) { - if (constraint) { - int i; - for (i = 0; i < skeletonData->transformConstraintsCount; ++i) - if (skeletonData->transformConstraints[i] == constraint) return i; - } - cleanUpTimelines(timelines); - _spSkeletonJson_setError(json, NULL, "Transform constraint not found: ", constraint->name); - return -1; -} - -int findPathConstraintIndex(spSkeletonJson *json, const spSkeletonData *skeletonData, const spPathConstraintData *constraint, spTimelineArray *timelines) { - if (constraint) { - int i; - for (i = 0; i < skeletonData->pathConstraintsCount; ++i) - if (skeletonData->pathConstraints[i] == constraint) return i; - } - cleanUpTimelines(timelines); - _spSkeletonJson_setError(json, NULL, "Path constraint not found: ", constraint->name); - return -1; -} - -int findPhysicsConstraintIndex(spSkeletonJson *json, const spSkeletonData *skeletonData, const spPhysicsConstraintData *constraint, spTimelineArray *timelines) { - if (constraint) { - int i; - for (i = 0; i < skeletonData->physicsConstraintsCount; ++i) - if (skeletonData->physicsConstraints[i] == constraint) return i; - } - cleanUpTimelines(timelines); - _spSkeletonJson_setError(json, NULL, "Physics constraint not found: ", constraint->name); - return -1; -} - -static spAnimation *_spSkeletonJson_readAnimation(spSkeletonJson *self, Json *root, spSkeletonData *skeletonData) { - spTimelineArray *timelines = spTimelineArray_create(8); - - float scale = self->scale, duration; - Json *bones = Json_getItem(root, "bones"); - Json *slots = Json_getItem(root, "slots"); - Json *ik = Json_getItem(root, "ik"); - Json *transform = Json_getItem(root, "transform"); - Json *paths = Json_getItem(root, "path"); - Json *physics = Json_getItem(root, "physics"); - Json *attachmentsJson = Json_getItem(root, "attachments"); - Json *drawOrderJson = Json_getItem(root, "drawOrder"); - Json *events = Json_getItem(root, "events"); - Json *boneMap, *slotMap, *keyMap, *nextMap, *curve, *timelineMap; - Json *attachmentsMap, *constraintMap; - int frame, bezier, i, n; - spColor color, color2, newColor, newColor2; - - /* Slot timelines. */ - for (slotMap = slots ? slots->child : 0; slotMap; slotMap = slotMap->next) { - int slotIndex = findSlotIndex(self, skeletonData, slotMap->name, timelines); - if (slotIndex == -1) return NULL; - - for (timelineMap = slotMap->child; timelineMap; timelineMap = timelineMap->next) { - int frames = timelineMap->size; - if (strcmp(timelineMap->name, "attachment") == 0) { - spAttachmentTimeline *timeline = spAttachmentTimeline_create(frames, slotIndex); - for (keyMap = timelineMap->child, frame = 0; keyMap; keyMap = keyMap->next, ++frame) { - spAttachmentTimeline_setFrame(timeline, frame, Json_getFloat(keyMap, "time", 0), - Json_getItem(keyMap, "name") ? Json_getItem(keyMap, "name")->valueString : NULL); - } - spTimelineArray_add(timelines, SUPER(timeline)); - - } else if (strcmp(timelineMap->name, "rgba") == 0) { - float time; - spRGBATimeline *timeline = spRGBATimeline_create(frames, frames << 2, slotIndex); - keyMap = timelineMap->child; - time = Json_getFloat(keyMap, "time", 0); - toColor2(&color, Json_getString(keyMap, "color", 0), 1); - - for (frame = 0, bezier = 0;; ++frame) { - float time2; - spRGBATimeline_setFrame(timeline, frame, time, color.r, color.g, color.b, color.a); - nextMap = keyMap->next; - if (!nextMap) { - /* timeline.shrink(); // BOZO */ - break; - } - time2 = Json_getFloat(nextMap, "time", 0); - toColor2(&newColor, Json_getString(nextMap, "color", 0), 1); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, color.a, newColor.a, - 1); - } - time = time2; - color = newColor; - keyMap = nextMap; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } else if (strcmp(timelineMap->name, "rgb") == 0) { - float time; - spRGBTimeline *timeline = spRGBTimeline_create(frames, frames * 3, slotIndex); - keyMap = timelineMap->child; - time = Json_getFloat(keyMap, "time", 0); - toColor2(&color, Json_getString(keyMap, "color", 0), 1); - - for (frame = 0, bezier = 0;; ++frame) { - float time2; - spRGBTimeline_setFrame(timeline, frame, time, color.r, color.g, color.b); - nextMap = keyMap->next; - if (!nextMap) { - /* timeline.shrink(); // BOZO */ - break; - } - time2 = Json_getFloat(nextMap, "time", 0); - toColor2(&newColor, Json_getString(nextMap, "color", 0), 1); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, - 1); - } - time = time2; - color = newColor; - keyMap = nextMap; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } else if (strcmp(timelineMap->name, "alpha") == 0) { - spTimelineArray_add(timelines, readTimeline(timelineMap->child, - SUPER(spAlphaTimeline_create(frames, - frames, slotIndex)), - 0, 1)); - } else if (strcmp(timelineMap->name, "rgba2") == 0) { - float time; - spRGBA2Timeline *timeline = spRGBA2Timeline_create(frames, frames * 7, slotIndex); - keyMap = timelineMap->child; - time = Json_getFloat(keyMap, "time", 0); - toColor2(&color, Json_getString(keyMap, "light", 0), 1); - toColor2(&color2, Json_getString(keyMap, "dark", 0), 0); - - for (frame = 0, bezier = 0;; ++frame) { - float time2; - spRGBA2Timeline_setFrame(timeline, frame, time, color.r, color.g, color.b, color.a, color2.r, - color2.g, color2.b); - nextMap = keyMap->next; - if (!nextMap) { - /* timeline.shrink(); // BOZO */ - break; - } - time2 = Json_getFloat(nextMap, "time", 0); - toColor2(&newColor, Json_getString(nextMap, "light", 0), 1); - toColor2(&newColor2, Json_getString(nextMap, "dark", 0), 0); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, color.a, newColor.a, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 4, time, time2, color2.r, newColor2.r, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 5, time, time2, color2.g, newColor2.g, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 6, time, time2, color2.b, newColor2.b, - 1); - } - time = time2; - color = newColor; - color2 = newColor2; - keyMap = nextMap; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } else if (strcmp(timelineMap->name, "rgb2") == 0) { - float time; - spRGBA2Timeline *timeline = spRGBA2Timeline_create(frames, frames * 6, slotIndex); - keyMap = timelineMap->child; - time = Json_getFloat(keyMap, "time", 0); - toColor2(&color, Json_getString(keyMap, "light", 0), 0); - toColor2(&color2, Json_getString(keyMap, "dark", 0), 0); - - for (frame = 0, bezier = 0;; ++frame) { - float time2; - spRGBA2Timeline_setFrame(timeline, frame, time, color.r, color.g, color.b, color.a, color2.r, - color2.g, color2.b); - nextMap = keyMap->next; - if (!nextMap) { - /* timeline.shrink(); // BOZO */ - break; - } - time2 = Json_getFloat(nextMap, "time", 0); - toColor2(&newColor, Json_getString(nextMap, "light", 0), 0); - toColor2(&newColor2, Json_getString(nextMap, "dark", 0), 0); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, color2.r, newColor2.r, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 4, time, time2, color2.g, newColor2.g, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 5, time, time2, color2.b, newColor2.b, - 1); - } - time = time2; - color = newColor; - color2 = newColor2; - keyMap = nextMap; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } else { - cleanUpTimelines(timelines); - _spSkeletonJson_setError(self, NULL, "Invalid timeline type for a slot: ", timelineMap->name); - return NULL; - } - } - } - - /* Bone timelines. */ - for (boneMap = bones ? bones->child : 0; boneMap; boneMap = boneMap->next) { - int boneIndex = -1; - for (i = 0; i < skeletonData->bonesCount; ++i) { - if (strcmp(skeletonData->bones[i]->name, boneMap->name) == 0) { - boneIndex = i; - break; - } - } - if (boneIndex == -1) { - cleanUpTimelines(timelines); - _spSkeletonJson_setError(self, NULL, "Bone not found: ", boneMap->name); - return NULL; - } - - for (timelineMap = boneMap->child; timelineMap; timelineMap = timelineMap->next) { - int frames = timelineMap->size; - if (frames == 0) continue; - - if (strcmp(timelineMap->name, "rotate") == 0) { - spTimelineArray_add(timelines, readTimeline(timelineMap->child, - SUPER(spRotateTimeline_create(frames, - frames, - boneIndex)), - 0, 1)); - } else if (strcmp(timelineMap->name, "translate") == 0) { - spTranslateTimeline *timeline = spTranslateTimeline_create(frames, frames << 1, - boneIndex); - spTimelineArray_add(timelines, readTimeline2(timelineMap->child, SUPER(timeline), "x", "y", 0, scale)); - } else if (strcmp(timelineMap->name, "translatex") == 0) { - spTranslateXTimeline *timeline = spTranslateXTimeline_create(frames, frames, - boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, scale)); - } else if (strcmp(timelineMap->name, "translatey") == 0) { - spTranslateYTimeline *timeline = spTranslateYTimeline_create(frames, frames, - boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, scale)); - } else if (strcmp(timelineMap->name, "scale") == 0) { - spScaleTimeline *timeline = spScaleTimeline_create(frames, frames << 1, - boneIndex); - spTimelineArray_add(timelines, readTimeline2(timelineMap->child, SUPER(timeline), "x", "y", 1, 1)); - } else if (strcmp(timelineMap->name, "scalex") == 0) { - spScaleXTimeline *timeline = spScaleXTimeline_create(frames, frames, boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 1, 1)); - } else if (strcmp(timelineMap->name, "scaley") == 0) { - spScaleYTimeline *timeline = spScaleYTimeline_create(frames, frames, boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 1, 1)); - } else if (strcmp(timelineMap->name, "shear") == 0) { - spShearTimeline *timeline = spShearTimeline_create(frames, frames << 1, - boneIndex); - spTimelineArray_add(timelines, readTimeline2(timelineMap->child, SUPER(timeline), "x", "y", 0, 1)); - } else if (strcmp(timelineMap->name, "shearx") == 0) { - spShearXTimeline *timeline = spShearXTimeline_create(frames, frames, boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, 1)); - } else if (strcmp(timelineMap->name, "sheary") == 0) { - spShearYTimeline *timeline = spShearYTimeline_create(frames, frames, boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, 1)); - } else if (strcmp(timelineMap->name, "inherit") == 0) { - spInheritTimeline *timeline = spInheritTimeline_create(frames, boneIndex); - keyMap = timelineMap->child; - for (frame = 0;; frame++) { - float time = Json_getFloat(keyMap, "time", 0); - const char *value = Json_getString(keyMap, "inherit", "normal"); - spInherit inherit = SP_INHERIT_NORMAL; - if (strcmp(value, "normal") == 0) inherit = SP_INHERIT_NORMAL; - else if (strcmp(value, "onlyTranslation") == 0) - inherit = SP_INHERIT_ONLYTRANSLATION; - else if (strcmp(value, "noRotationOrReflection") == 0) - inherit = SP_INHERIT_NOROTATIONORREFLECTION; - else if (strcmp(value, "noScale") == 0) - inherit = SP_INHERIT_NOSCALE; - else if (strcmp(value, "noScaleOrReflection") == 0) - inherit = SP_INHERIT_NOSCALEORREFLECTION; - spInheritTimeline_setFrame(timeline, frame, time, inherit); - nextMap = keyMap->next; - if (!nextMap) break; - } - spTimelineArray_add(timelines, SUPER(timeline)); - } else { - cleanUpTimelines(timelines); - _spSkeletonJson_setError(self, NULL, "Invalid timeline type for a bone: ", timelineMap->name); - return NULL; - } - } - } - - /* IK constraint timelines. */ - for (constraintMap = ik ? ik->child : 0; constraintMap; constraintMap = constraintMap->next) { - spIkConstraintData *constraint; - spIkConstraintTimeline *timeline; - int constraintIndex; - float time, mix, softness; - keyMap = constraintMap->child; - if (keyMap == NULL) continue; - - constraint = spSkeletonData_findIkConstraint(skeletonData, constraintMap->name); - constraintIndex = findIkConstraintIndex(self, skeletonData, constraint, timelines); - if (constraintIndex == -1) return NULL; - timeline = spIkConstraintTimeline_create(constraintMap->size, constraintMap->size << 1, constraintIndex); - - time = Json_getFloat(keyMap, "time", 0); - mix = Json_getFloat(keyMap, "mix", 1); - softness = Json_getFloat(keyMap, "softness", 0) * scale; - - for (frame = 0, bezier = 0;; ++frame) { - float time2, mix2, softness2; - int bendDirection = Json_getInt(keyMap, "bendPositive", 1) ? 1 : -1; - spIkConstraintTimeline_setFrame(timeline, frame, time, mix, softness, bendDirection, - Json_getInt(keyMap, "compress", 0) ? 1 : 0, - Json_getInt(keyMap, "stretch", 0) ? 1 : 0); - nextMap = keyMap->next; - if (!nextMap) { - /* timeline.shrink(); // BOZO */ - break; - } - - time2 = Json_getFloat(nextMap, "time", 0); - mix2 = Json_getFloat(nextMap, "mix", 1); - softness2 = Json_getFloat(nextMap, "softness", 0) * scale; - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, mix, mix2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, softness, softness2, scale); - } - - time = time2; - mix = mix2; - softness = softness2; - keyMap = nextMap; - } - - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } - - /* Transform constraint timelines. */ - for (constraintMap = transform ? transform->child : 0; constraintMap; constraintMap = constraintMap->next) { - spTransformConstraintData *constraint; - spTransformConstraintTimeline *timeline; - int constraintIndex; - float time, mixRotate, mixShearY, mixX, mixY, mixScaleX, mixScaleY; - keyMap = constraintMap->child; - if (keyMap == NULL) continue; - - constraint = spSkeletonData_findTransformConstraint(skeletonData, constraintMap->name); - constraintIndex = findTransformConstraintIndex(self, skeletonData, constraint, timelines); - if (constraintIndex == -1) return NULL; - timeline = spTransformConstraintTimeline_create(constraintMap->size, constraintMap->size * 6, constraintIndex); - - time = Json_getFloat(keyMap, "time", 0); - mixRotate = Json_getFloat(keyMap, "mixRotate", 1); - mixShearY = Json_getFloat(keyMap, "mixShearY", 1); - mixX = Json_getFloat(keyMap, "mixX", 1); - mixY = Json_getFloat(keyMap, "mixY", mixX); - mixScaleX = Json_getFloat(keyMap, "mixScaleX", 1); - mixScaleY = Json_getFloat(keyMap, "mixScaleY", mixScaleX); - - for (frame = 0, bezier = 0;; ++frame) { - float time2, mixRotate2, mixShearY2, mixX2, mixY2, mixScaleX2, mixScaleY2; - spTransformConstraintTimeline_setFrame(timeline, frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, - mixShearY); - nextMap = keyMap->next; - if (!nextMap) { - /* timeline.shrink(); // BOZO */ - break; - } - - time2 = Json_getFloat(nextMap, "time", 0); - mixRotate2 = Json_getFloat(nextMap, "mixRotate", 1); - mixShearY2 = Json_getFloat(nextMap, "mixShearY", 1); - mixX2 = Json_getFloat(nextMap, "mixX", 1); - mixY2 = Json_getFloat(nextMap, "mixY", mixX2); - mixScaleX2 = Json_getFloat(nextMap, "mixScaleX", 1); - mixScaleY2 = Json_getFloat(nextMap, "mixScaleY", mixScaleX2); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, mixX, mixX2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, mixY, mixY2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1); - } - - time = time2; - mixRotate = mixRotate2; - mixX = mixX2; - mixY = mixY2; - mixScaleX = mixScaleX2; - mixScaleY = mixScaleY2; - mixScaleX = mixScaleX2; - keyMap = nextMap; - } - - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } - - /** Path constraint timelines. */ - for (constraintMap = paths ? paths->child : 0; constraintMap; constraintMap = constraintMap->next) { - spPathConstraintData *constraint = spSkeletonData_findPathConstraint(skeletonData, constraintMap->name); - int constraintIndex = findPathConstraintIndex(self, skeletonData, constraint, timelines); - if (constraintIndex == -1) return NULL; - for (timelineMap = constraintMap->child; timelineMap; timelineMap = timelineMap->next) { - const char *timelineName; - int frames; - keyMap = timelineMap->child; - if (keyMap == NULL) continue; - frames = timelineMap->size; - timelineName = timelineMap->name; - if (strcmp(timelineName, "position") == 0) { - spPathConstraintPositionTimeline *timeline = spPathConstraintPositionTimeline_create(frames, - frames, - constraintIndex); - spTimelineArray_add(timelines, readTimeline(keyMap, SUPER(timeline), 0, - constraint->positionMode == SP_POSITION_MODE_FIXED ? scale : 1)); - } else if (strcmp(timelineName, "spacing") == 0) { - spCurveTimeline1 *timeline = SUPER( - spPathConstraintSpacingTimeline_create(frames, frames, constraintIndex)); - spTimelineArray_add(timelines, readTimeline(keyMap, timeline, 0, - constraint->spacingMode == SP_SPACING_MODE_LENGTH || - constraint->spacingMode == SP_SPACING_MODE_FIXED - ? scale - : 1)); - } else if (strcmp(timelineName, "mix") == 0) { - spPathConstraintMixTimeline *timeline = spPathConstraintMixTimeline_create(frames, - frames * 3, - constraintIndex); - float time = Json_getFloat(keyMap, "time", 0); - float mixRotate = Json_getFloat(keyMap, "mixRotate", 1); - float mixX = Json_getFloat(keyMap, "mixX", 1); - float mixY = Json_getFloat(keyMap, "mixY", mixX); - for (frame = 0, bezier = 0;; ++frame) { - float time2, mixRotate2, mixX2, mixY2; - spPathConstraintMixTimeline_setFrame(timeline, frame, time, mixRotate, mixX, mixY); - nextMap = keyMap->next; - if (!nextMap) { - /* timeline.shrink(); // BOZO */ - break; - } - - time2 = Json_getFloat(nextMap, "time", 0); - mixRotate2 = Json_getFloat(nextMap, "mixRotate", 1); - mixX2 = Json_getFloat(nextMap, "mixX", 1); - mixY2 = Json_getFloat(nextMap, "mixY", mixX2); - curve = Json_getItem(keyMap, "curve"); - if (curve != NULL) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, mixRotate, mixRotate2, - 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, mixX, mixX2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, mixY, mixY2, 1); - } - time = time2; - mixRotate = mixRotate2; - mixX = mixX2; - mixY = mixY2; - keyMap = nextMap; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } - } - } - - /** Physics constraint timelines. */ - for (constraintMap = physics ? physics->child : 0; constraintMap; constraintMap = constraintMap->next) { - int index = -1; - if (constraintMap->name && strlen(constraintMap->name) > 0) { - spPhysicsConstraintData *constraint = spSkeletonData_findPhysicsConstraint(skeletonData, constraintMap->name); - index = findPhysicsConstraintIndex(self, skeletonData, constraint, timelines); - if (index == -1) return NULL; - } - for (timelineMap = constraintMap->child; timelineMap; timelineMap = timelineMap->next) { - keyMap = timelineMap->child; - if (keyMap == NULL) continue; - const char *timelineName = timelineMap->name; - int frames = timelineMap->size; - if (strcmp(timelineName, "reset") == 0) { - spPhysicsConstraintResetTimeline *timeline = spPhysicsConstraintResetTimeline_create(frames, index); - for (frame = 0; keyMap != NULL; keyMap = keyMap->next, frame++) { - spPhysicsConstraintResetTimeline_setFrame(timeline, frame, Json_getFloat(keyMap, "time", 0)); - } - spTimelineArray_add(timelines, SUPER(timeline)); - continue; - } - - spPhysicsConstraintTimeline *timeline = NULL; - if (strcmp(timelineName, "inertia") == 0) { - timeline = spPhysicsConstraintTimeline_create(frames, frames, index, SP_TIMELINE_PHYSICSCONSTRAINT_INERTIA); - } else if (strcmp(timelineName, "strength") == 0) { - timeline = spPhysicsConstraintTimeline_create(frames, frames, index, SP_TIMELINE_PHYSICSCONSTRAINT_STRENGTH); - } else if (strcmp(timelineName, "damping") == 0) { - timeline = spPhysicsConstraintTimeline_create(frames, frames, index, SP_TIMELINE_PHYSICSCONSTRAINT_DAMPING); - } else if (strcmp(timelineName, "mass") == 0) { - timeline = spPhysicsConstraintTimeline_create(frames, frames, index, SP_TIMELINE_PHYSICSCONSTRAINT_MASS); - } else if (strcmp(timelineName, "wind") == 0) { - timeline = spPhysicsConstraintTimeline_create(frames, frames, index, SP_TIMELINE_PHYSICSCONSTRAINT_WIND); - } else if (strcmp(timelineName, "gravity") == 0) { - timeline = spPhysicsConstraintTimeline_create(frames, frames, index, SP_TIMELINE_PHYSICSCONSTRAINT_GRAVITY); - } else if (strcmp(timelineName, "mix") == 0) { - timeline = spPhysicsConstraintTimeline_create(frames, frames, index, SP_TIMELINE_PHYSICSCONSTRAINT_MIX); - } else { - continue; - } - spTimelineArray_add(timelines, readTimeline(keyMap, SUPER(timeline), 0, 1)); - } - } - - /* Attachment timelines. */ - for (attachmentsMap = attachmentsJson ? attachmentsJson->child : 0; attachmentsMap; attachmentsMap = attachmentsMap->next) { - spSkin *skin = spSkeletonData_findSkin(skeletonData, attachmentsMap->name); - for (slotMap = attachmentsMap->child; slotMap; slotMap = slotMap->next) { - Json *attachmentMap; - int slotIndex = findSlotIndex(self, skeletonData, slotMap->name, timelines); - if (slotIndex == -1) return NULL; - - for (attachmentMap = slotMap->child; attachmentMap; attachmentMap = attachmentMap->next) { - spAttachment *baseAttachment = spSkin_getAttachment(skin, slotIndex, attachmentMap->name); - if (!baseAttachment) { - cleanUpTimelines(timelines); - _spSkeletonJson_setError(self, 0, "Attachment not found: ", attachmentMap->name); - return NULL; - } - - for (timelineMap = attachmentMap->child; timelineMap; timelineMap = timelineMap->next) { - int frames; - const char *timelineName; - keyMap = timelineMap->child; - if (keyMap == NULL) continue; - frames = timelineMap->size; - timelineName = timelineMap->name; - if (!strcmp("deform", timelineName)) { - float *tempDeform; - spVertexAttachment *vertexAttachment; - int weighted, deformLength; - spDeformTimeline *timeline; - float time; - - vertexAttachment = SUB_CAST(spVertexAttachment, baseAttachment); - weighted = vertexAttachment->bones != 0; - deformLength = weighted ? vertexAttachment->verticesCount / 3 * 2 : vertexAttachment->verticesCount; - tempDeform = MALLOC(float, deformLength); - - timeline = spDeformTimeline_create(timelineMap->size, deformLength, timelineMap->size, - slotIndex, - vertexAttachment); - - time = Json_getFloat(keyMap, "time", 0); - for (frame = 0, bezier = 0;; ++frame) { - Json *vertices = Json_getItem(keyMap, "vertices"); - float *deform; - float time2; - - if (!vertices) { - if (weighted) { - deform = tempDeform; - memset(deform, 0, sizeof(float) * deformLength); - } else - deform = vertexAttachment->vertices; - } else { - int v, start = Json_getInt(keyMap, "offset", 0); - Json *vertex; - deform = tempDeform; - memset(deform, 0, sizeof(float) * start); - if (self->scale == 1) { - for (vertex = vertices->child, v = start; vertex; vertex = vertex->next, ++v) - deform[v] = vertex->valueFloat; - } else { - for (vertex = vertices->child, v = start; vertex; vertex = vertex->next, ++v) - deform[v] = vertex->valueFloat * self->scale; - } - memset(deform + v, 0, sizeof(float) * (deformLength - v)); - if (!weighted) { - float *verticesValues = vertexAttachment->vertices; - for (v = 0; v < deformLength; ++v) - deform[v] += verticesValues[v]; - } - } - spDeformTimeline_setFrame(timeline, frame, time, deform); - nextMap = keyMap->next; - if (!nextMap) { - /* timeline.shrink(); // BOZO */ - break; - } - time2 = Json_getFloat(nextMap, "time", 0); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, 0, 1, 1); - } - time = time2; - keyMap = nextMap; - } - FREE(tempDeform); - - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } else if (!strcmp(timelineName, "sequence")) { - spSequenceTimeline *timeline = spSequenceTimeline_create(frames, slotIndex, baseAttachment); - float lastDelay = 0; - for (frame = 0; keyMap != NULL; keyMap = keyMap->next, frame++) { - float delay = Json_getFloat(keyMap, "delay", lastDelay); - float time = Json_getFloat(keyMap, "time", 0); - const char *modeString = Json_getString(keyMap, "mode", "hold"); - int index = Json_getInt(keyMap, "index", 0); - int mode = SP_SEQUENCE_MODE_HOLD; - if (!strcmp(modeString, "once")) mode = SP_SEQUENCE_MODE_ONCE; - if (!strcmp(modeString, "loop")) mode = SP_SEQUENCE_MODE_LOOP; - if (!strcmp(modeString, "pingpong")) mode = SP_SEQUENCE_MODE_PINGPONG; - if (!strcmp(modeString, "onceReverse")) mode = SP_SEQUENCE_MODE_ONCEREVERSE; - if (!strcmp(modeString, "loopReverse")) mode = SP_SEQUENCE_MODE_LOOPREVERSE; - if (!strcmp(modeString, "pingpongReverse")) mode = SP_SEQUENCE_MODE_PINGPONGREVERSE; - spSequenceTimeline_setFrame(timeline, frame, time, mode, index, delay); - lastDelay = delay; - } - spTimelineArray_add(timelines, SUPER(timeline)); - } - } - } - } - } - - /* Draw order timeline. */ - if (drawOrderJson) { - spDrawOrderTimeline *timeline = spDrawOrderTimeline_create(drawOrderJson->size, skeletonData->slotsCount); - for (keyMap = drawOrderJson->child, frame = 0; keyMap; keyMap = keyMap->next, ++frame) { - int ii; - int *drawOrder = 0; - Json *offsets = Json_getItem(keyMap, "offsets"); - if (offsets) { - Json *offsetMap; - int *unchanged = MALLOC(int, skeletonData->slotsCount - offsets->size); - int originalIndex = 0, unchangedIndex = 0; - - drawOrder = MALLOC(int, skeletonData->slotsCount); - for (ii = skeletonData->slotsCount - 1; ii >= 0; --ii) - drawOrder[ii] = -1; - - for (offsetMap = offsets->child; offsetMap; offsetMap = offsetMap->next) { - int slotIndex = findSlotIndex(self, skeletonData, Json_getString(offsetMap, "slot", 0), timelines); - if (slotIndex == -1) return NULL; - - /* Collect unchanged items. */ - while (originalIndex != slotIndex) - unchanged[unchangedIndex++] = originalIndex++; - /* Set changed items. */ - drawOrder[originalIndex + Json_getInt(offsetMap, "offset", 0)] = originalIndex; - originalIndex++; - } - /* Collect remaining unchanged items. */ - while (originalIndex < skeletonData->slotsCount) - unchanged[unchangedIndex++] = originalIndex++; - /* Fill in unchanged items. */ - for (ii = skeletonData->slotsCount - 1; ii >= 0; ii--) - if (drawOrder[ii] == -1) drawOrder[ii] = unchanged[--unchangedIndex]; - FREE(unchanged); - } - spDrawOrderTimeline_setFrame(timeline, frame, Json_getFloat(keyMap, "time", 0), drawOrder); - FREE(drawOrder); - } - - spTimelineArray_add(timelines, SUPER(timeline)); - } - - /* Event timeline. */ - if (events) { - spEventTimeline *timeline = spEventTimeline_create(events->size); - for (keyMap = events->child, frame = 0; keyMap; keyMap = keyMap->next, ++frame) { - spEvent *event; - const char *stringValue; - spEventData *eventData = spSkeletonData_findEvent(skeletonData, Json_getString(keyMap, "name", 0)); - if (!eventData) { - cleanUpTimelines(timelines); - _spSkeletonJson_setError(self, 0, "Event not found: ", Json_getString(keyMap, "name", 0)); - return NULL; - } - event = spEvent_create(Json_getFloat(keyMap, "time", 0), eventData); - event->intValue = Json_getInt(keyMap, "int", eventData->intValue); - event->floatValue = Json_getFloat(keyMap, "float", eventData->floatValue); - stringValue = Json_getString(keyMap, "string", eventData->stringValue); - if (stringValue) MALLOC_STR(event->stringValue, stringValue); - if (eventData->audioPath) { - event->volume = Json_getFloat(keyMap, "volume", 1); - event->balance = Json_getFloat(keyMap, "volume", 0); - } - spEventTimeline_setFrame(timeline, frame, event); - } - spTimelineArray_add(timelines, SUPER(timeline)); - } - - duration = 0; - for (i = 0, n = timelines->size; i < n; ++i) - duration = MAX(duration, spTimeline_getDuration(timelines->items[i])); - return spAnimation_create(root->name, timelines, duration); -} - -static void -_readVertices(spSkeletonJson *self, Json *attachmentMap, spVertexAttachment *attachment, int verticesLength) { - Json *entry; - float *vertices; - int i, n, nn, entrySize; - spFloatArray *weights; - spIntArray *bones; - - attachment->worldVerticesLength = verticesLength; - - entry = Json_getItem(attachmentMap, "vertices"); - entrySize = entry->size; - vertices = MALLOC(float, entrySize); - for (entry = entry->child, i = 0; entry; entry = entry->next, ++i) - vertices[i] = entry->valueFloat; - - if (verticesLength == entrySize) { - if (self->scale != 1) - for (i = 0; i < entrySize; ++i) - vertices[i] *= self->scale; - attachment->verticesCount = verticesLength; - attachment->vertices = vertices; - - attachment->bonesCount = 0; - attachment->bones = 0; - return; - } - - weights = spFloatArray_create(verticesLength * 3 * 3); - bones = spIntArray_create(verticesLength * 3); - - for (i = 0, n = entrySize; i < n;) { - int boneCount = (int) vertices[i++]; - spIntArray_add(bones, boneCount); - for (nn = i + boneCount * 4; i < nn; i += 4) { - spIntArray_add(bones, (int) vertices[i]); - spFloatArray_add(weights, vertices[i + 1] * self->scale); - spFloatArray_add(weights, vertices[i + 2] * self->scale); - spFloatArray_add(weights, vertices[i + 3]); - } - } - - attachment->verticesCount = weights->size; - attachment->vertices = weights->items; - FREE(weights); - attachment->bonesCount = bones->size; - attachment->bones = bones->items; - FREE(bones); - - FREE(vertices); -} - -spSkeletonData *spSkeletonJson_readSkeletonDataFile(spSkeletonJson *self, const char *path) { - int length; - spSkeletonData *skeletonData; - const char *json = _spUtil_readFile(path, &length); - if (length == 0 || !json) { - _spSkeletonJson_setError(self, 0, "Unable to read skeleton file: ", path); - return NULL; - } - skeletonData = spSkeletonJson_readSkeletonData(self, json); - FREE(json); - return skeletonData; -} - -static int string_starts_with(const char *str, const char *needle) { - int lenStr, lenNeedle, i; - if (!str) return 0; - lenStr = (int) strlen(str); - lenNeedle = (int) strlen(needle); - if (lenStr < lenNeedle) return 0; - for (i = 0; i < lenNeedle; i++) { - if (str[i] != needle[i]) return 0; - } - return -1; -} - -spSkeletonData *spSkeletonJson_readSkeletonData(spSkeletonJson *self, const char *json) { - int i, ii; - spSkeletonData *skeletonData; - Json *root, *skeleton, *bones, *boneMap, *ik, *transform, *pathJson, *physics, *slots, *skins, *animations, *events; - _spSkeletonJson *internal = SUB_CAST(_spSkeletonJson, self); - - FREE(self->error); - self->error = 0; - internal->linkedMeshCount = 0; - - root = Json_create(json); - if (!root) { - _spSkeletonJson_setError(self, 0, "Invalid skeleton JSON: ", Json_getError()); - return NULL; - } - - skeletonData = spSkeletonData_create(); - - skeleton = Json_getItem(root, "skeleton"); - if (skeleton) { - MALLOC_STR(skeletonData->hash, Json_getString(skeleton, "hash", "0")); - MALLOC_STR(skeletonData->version, Json_getString(skeleton, "spine", "0")); - if (!string_starts_with(skeletonData->version, SPINE_VERSION_STRING)) { - char errorMsg[255]; - snprintf(errorMsg, 255, "Skeleton version %s does not match runtime version %s", skeletonData->version, SPINE_VERSION_STRING); - _spSkeletonJson_setError(self, 0, errorMsg, NULL); - return NULL; - } - skeletonData->x = Json_getFloat(skeleton, "x", 0); - skeletonData->y = Json_getFloat(skeleton, "y", 0); - skeletonData->width = Json_getFloat(skeleton, "width", 0); - skeletonData->height = Json_getFloat(skeleton, "height", 0); - skeletonData->referenceScale = Json_getFloat(skeleton, "referenceScale", 100) * self->scale; - skeletonData->fps = Json_getFloat(skeleton, "fps", 30); - skeletonData->imagesPath = Json_getString(skeleton, "images", 0); - if (skeletonData->imagesPath) { - char *tmp = NULL; - MALLOC_STR(tmp, skeletonData->imagesPath); - skeletonData->imagesPath = tmp; - } - skeletonData->audioPath = Json_getString(skeleton, "audio", 0); - if (skeletonData->audioPath) { - char *tmp = NULL; - MALLOC_STR(tmp, skeletonData->audioPath); - skeletonData->audioPath = tmp; - } - } - - /* Bones. */ - bones = Json_getItem(root, "bones"); - skeletonData->bones = MALLOC(spBoneData *, bones->size); - for (boneMap = bones->child, i = 0; boneMap; boneMap = boneMap->next, ++i) { - spBoneData *data; - const char *inherit; - const char *color; - - spBoneData *parent = 0; - const char *parentName = Json_getString(boneMap, "parent", 0); - if (parentName) { - parent = spSkeletonData_findBone(skeletonData, parentName); - if (!parent) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Parent bone not found: ", parentName); - return NULL; - } - } - - data = spBoneData_create(skeletonData->bonesCount, Json_getString(boneMap, "name", 0), parent); - data->length = Json_getFloat(boneMap, "length", 0) * self->scale; - data->x = Json_getFloat(boneMap, "x", 0) * self->scale; - data->y = Json_getFloat(boneMap, "y", 0) * self->scale; - data->rotation = Json_getFloat(boneMap, "rotation", 0); - data->scaleX = Json_getFloat(boneMap, "scaleX", 1); - data->scaleY = Json_getFloat(boneMap, "scaleY", 1); - data->shearX = Json_getFloat(boneMap, "shearX", 0); - data->shearY = Json_getFloat(boneMap, "shearY", 0); - inherit = Json_getString(boneMap, "inherit", "normal"); - data->inherit = SP_INHERIT_NORMAL; - if (strcmp(inherit, "normal") == 0) data->inherit = SP_INHERIT_NORMAL; - else if (strcmp(inherit, "onlyTranslation") == 0) - data->inherit = SP_INHERIT_ONLYTRANSLATION; - else if (strcmp(inherit, "noRotationOrReflection") == 0) - data->inherit = SP_INHERIT_NOROTATIONORREFLECTION; - else if (strcmp(inherit, "noScale") == 0) - data->inherit = SP_INHERIT_NOSCALE; - else if (strcmp(inherit, "noScaleOrReflection") == 0) - data->inherit = SP_INHERIT_NOSCALEORREFLECTION; - data->skinRequired = Json_getInt(boneMap, "skin", 0) ? 1 : 0; - - color = Json_getString(boneMap, "color", 0); - if (color) toColor2(&data->color, color, -1); - - data->icon = Json_getString(boneMap, "icon", ""); - if (data->icon) { - char *tmp = NULL; - MALLOC_STR(tmp, data->icon); - data->icon = tmp; - } - data->visible = Json_getInt(boneMap, "visible", -1) ? -1 : 0; - - skeletonData->bones[i] = data; - skeletonData->bonesCount++; - } - - /* Slots. */ - slots = Json_getItem(root, "slots"); - if (slots) { - Json *slotMap; - skeletonData->slots = MALLOC(spSlotData *, slots->size); - for (slotMap = slots->child, i = 0; slotMap; slotMap = slotMap->next, ++i) { - spSlotData *data; - const char *color; - const char *dark; - Json *item; - - const char *boneName = Json_getString(slotMap, "bone", 0); - spBoneData *boneData = spSkeletonData_findBone(skeletonData, boneName); - if (!boneData) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Slot bone not found: ", boneName); - return NULL; - } - - char *slotName = (char *) Json_getString(slotMap, "name", NULL); - data = spSlotData_create(i, slotName, boneData); - - color = Json_getString(slotMap, "color", 0); - if (color) { - spColor_setFromFloats(&data->color, - toColor(color, 0), - toColor(color, 1), - toColor(color, 2), - toColor(color, 3)); - } - - dark = Json_getString(slotMap, "dark", 0); - if (dark) { - data->darkColor = spColor_create(); - spColor_setFromFloats(data->darkColor, - toColor(dark, 0), - toColor(dark, 1), - toColor(dark, 2), - 1.0f); - } - - item = Json_getItem(slotMap, "attachment"); - if (item) spSlotData_setAttachmentName(data, item->valueString); - - item = Json_getItem(slotMap, "blend"); - if (item) { - if (strcmp(item->valueString, "additive") == 0) - data->blendMode = SP_BLEND_MODE_ADDITIVE; - else if (strcmp(item->valueString, "multiply") == 0) - data->blendMode = SP_BLEND_MODE_MULTIPLY; - else if (strcmp(item->valueString, "screen") == 0) - data->blendMode = SP_BLEND_MODE_SCREEN; - } - - data->visible = Json_getInt(slotMap, "visible", -1); - skeletonData->slots[i] = data; - skeletonData->slotsCount++; - } - } - - /* IK constraints. */ - ik = Json_getItem(root, "ik"); - if (ik) { - Json *constraintMap; - skeletonData->ikConstraints = MALLOC(spIkConstraintData *, ik->size); - for (constraintMap = ik->child, i = 0; constraintMap; constraintMap = constraintMap->next, ++i) { - const char *targetName; - - spIkConstraintData *data = spIkConstraintData_create(Json_getString(constraintMap, "name", 0)); - data->order = Json_getInt(constraintMap, "order", 0); - data->skinRequired = Json_getInt(constraintMap, "skin", 0) ? 1 : 0; - - boneMap = Json_getItem(constraintMap, "bones"); - data->bonesCount = boneMap->size; - data->bones = MALLOC(spBoneData *, boneMap->size); - for (boneMap = boneMap->child, ii = 0; boneMap; boneMap = boneMap->next, ++ii) { - data->bones[ii] = spSkeletonData_findBone(skeletonData, boneMap->valueString); - if (!data->bones[ii]) { - spIkConstraintData_dispose(data); - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "IK bone not found: ", boneMap->valueString); - return NULL; - } - } - - targetName = Json_getString(constraintMap, "target", 0); - data->target = spSkeletonData_findBone(skeletonData, targetName); - if (!data->target) { - spIkConstraintData_dispose(data); - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Target bone not found: ", targetName); - return NULL; - } - - data->bendDirection = Json_getInt(constraintMap, "bendPositive", 1) ? 1 : -1; - data->compress = Json_getInt(constraintMap, "compress", 0) ? 1 : 0; - data->stretch = Json_getInt(constraintMap, "stretch", 0) ? 1 : 0; - data->uniform = Json_getInt(constraintMap, "uniform", 0) ? 1 : 0; - data->mix = Json_getFloat(constraintMap, "mix", 1); - data->softness = Json_getFloat(constraintMap, "softness", 0) * self->scale; - - skeletonData->ikConstraints[i] = data; - skeletonData->ikConstraintsCount++; - } - } - - /* Transform constraints. */ - transform = Json_getItem(root, "transform"); - if (transform) { - Json *constraintMap; - skeletonData->transformConstraints = MALLOC(spTransformConstraintData *, transform->size); - for (constraintMap = transform->child, i = 0; constraintMap; constraintMap = constraintMap->next, ++i) { - const char *name; - - spTransformConstraintData *data = spTransformConstraintData_create( - Json_getString(constraintMap, "name", 0)); - data->order = Json_getInt(constraintMap, "order", 0); - data->skinRequired = Json_getInt(constraintMap, "skin", 0) ? 1 : 0; - - boneMap = Json_getItem(constraintMap, "bones"); - data->bonesCount = boneMap->size; - data->bones = MALLOC(spBoneData *, boneMap->size); - for (boneMap = boneMap->child, ii = 0; boneMap; boneMap = boneMap->next, ++ii) { - data->bones[ii] = spSkeletonData_findBone(skeletonData, boneMap->valueString); - if (!data->bones[ii]) { - spTransformConstraintData_dispose(data); - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Transform bone not found: ", boneMap->valueString); - return NULL; - } - } - - name = Json_getString(constraintMap, "target", 0); - data->target = spSkeletonData_findBone(skeletonData, name); - if (!data->target) { - spTransformConstraintData_dispose(data); - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Target bone not found: ", name); - return NULL; - } - - data->local = Json_getInt(constraintMap, "local", 0); - data->relative = Json_getInt(constraintMap, "relative", 0); - data->offsetRotation = Json_getFloat(constraintMap, "rotation", 0); - data->offsetX = Json_getFloat(constraintMap, "x", 0) * self->scale; - data->offsetY = Json_getFloat(constraintMap, "y", 0) * self->scale; - data->offsetScaleX = Json_getFloat(constraintMap, "scaleX", 0); - data->offsetScaleY = Json_getFloat(constraintMap, "scaleY", 0); - data->offsetShearY = Json_getFloat(constraintMap, "shearY", 0); - - data->mixRotate = Json_getFloat(constraintMap, "mixRotate", 1); - data->mixX = Json_getFloat(constraintMap, "mixX", 1); - data->mixY = Json_getFloat(constraintMap, "mixY", data->mixX); - data->mixScaleX = Json_getFloat(constraintMap, "mixScaleX", 1); - data->mixScaleY = Json_getFloat(constraintMap, "mixScaleY", data->mixScaleX); - data->mixShearY = Json_getFloat(constraintMap, "mixShearY", 1); - - skeletonData->transformConstraints[i] = data; - skeletonData->transformConstraintsCount++; - } - } - - /* Path constraints */ - pathJson = Json_getItem(root, "path"); - if (pathJson) { - Json *constraintMap; - skeletonData->pathConstraints = MALLOC(spPathConstraintData *, pathJson->size); - for (constraintMap = pathJson->child, i = 0; constraintMap; constraintMap = constraintMap->next, ++i) { - const char *name; - const char *item; - - spPathConstraintData *data = spPathConstraintData_create(Json_getString(constraintMap, "name", 0)); - data->order = Json_getInt(constraintMap, "order", 0); - data->skinRequired = Json_getInt(constraintMap, "skin", 0) ? 1 : 0; - - boneMap = Json_getItem(constraintMap, "bones"); - data->bonesCount = boneMap->size; - data->bones = MALLOC(spBoneData *, boneMap->size); - for (boneMap = boneMap->child, ii = 0; boneMap; boneMap = boneMap->next, ++ii) { - data->bones[ii] = spSkeletonData_findBone(skeletonData, boneMap->valueString); - if (!data->bones[ii]) { - spPathConstraintData_dispose(data); - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Path bone not found: ", boneMap->valueString); - return NULL; - } - } - - name = Json_getString(constraintMap, "target", 0); - data->target = spSkeletonData_findSlot(skeletonData, name); - if (!data->target) { - spPathConstraintData_dispose(data); - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Target slot not found: ", name); - return NULL; - } - - item = Json_getString(constraintMap, "positionMode", "percent"); - if (strcmp(item, "fixed") == 0) data->positionMode = SP_POSITION_MODE_FIXED; - else if (strcmp(item, "percent") == 0) - data->positionMode = SP_POSITION_MODE_PERCENT; - - item = Json_getString(constraintMap, "spacingMode", "length"); - if (strcmp(item, "length") == 0) data->spacingMode = SP_SPACING_MODE_LENGTH; - else if (strcmp(item, "fixed") == 0) - data->spacingMode = SP_SPACING_MODE_FIXED; - else if (strcmp(item, "percent") == 0) - data->spacingMode = SP_SPACING_MODE_PERCENT; - else - data->spacingMode = SP_SPACING_MODE_PROPORTIONAL; - - item = Json_getString(constraintMap, "rotateMode", "tangent"); - if (strcmp(item, "tangent") == 0) data->rotateMode = SP_ROTATE_MODE_TANGENT; - else if (strcmp(item, "chain") == 0) - data->rotateMode = SP_ROTATE_MODE_CHAIN; - else if (strcmp(item, "chainScale") == 0) - data->rotateMode = SP_ROTATE_MODE_CHAIN_SCALE; - - data->offsetRotation = Json_getFloat(constraintMap, "rotation", 0); - data->position = Json_getFloat(constraintMap, "position", 0); - if (data->positionMode == SP_POSITION_MODE_FIXED) data->position *= self->scale; - data->spacing = Json_getFloat(constraintMap, "spacing", 0); - if (data->spacingMode == SP_SPACING_MODE_LENGTH || data->spacingMode == SP_SPACING_MODE_FIXED) - data->spacing *= self->scale; - data->mixRotate = Json_getFloat(constraintMap, "mixRotate", 1); - data->mixX = Json_getFloat(constraintMap, "mixX", 1); - data->mixY = Json_getFloat(constraintMap, "mixY", data->mixX); - - skeletonData->pathConstraints[i] = data; - skeletonData->pathConstraintsCount++; - } - } - - /* Physics constraints */ - physics = Json_getItem(root, "physics"); - if (physics) { - Json *constraintMap; - skeletonData->physicsConstraintsCount = physics->size; - skeletonData->physicsConstraints = MALLOC(spPhysicsConstraintData *, physics->size); - for (constraintMap = physics->child, i = 0; constraintMap; constraintMap = constraintMap->next, ++i) { - const char *name; - - spPhysicsConstraintData *data = spPhysicsConstraintData_create( - Json_getString(constraintMap, "name", 0)); - data->order = Json_getInt(constraintMap, "order", 0); - data->skinRequired = Json_getInt(constraintMap, "skin", 0); - - name = Json_getString(constraintMap, "bone", 0); - data->bone = spSkeletonData_findBone(skeletonData, name); - if (!data->bone) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Physics bone not found: ", name); - return NULL; - } - - data->x = Json_getFloat(constraintMap, "x", 0); - data->y = Json_getFloat(constraintMap, "y", 0); - data->rotate = Json_getFloat(constraintMap, "rotate", 0); - data->scaleX = Json_getFloat(constraintMap, "scaleX", 0); - data->shearX = Json_getFloat(constraintMap, "shearX", 0); - data->limit = Json_getFloat(constraintMap, "limit", 5000) * self->scale; - data->step = 1.0f / Json_getInt(constraintMap, "fps", 60); - data->inertia = Json_getFloat(constraintMap, "inertia", 1); - data->strength = Json_getFloat(constraintMap, "strength", 100); - data->damping = Json_getFloat(constraintMap, "damping", 1); - data->massInverse = 1.0f / Json_getFloat(constraintMap, "mass", 1); - data->wind = Json_getFloat(constraintMap, "wind", 0); - data->gravity = Json_getFloat(constraintMap, "gravity", 0); - data->mix = Json_getFloat(constraintMap, "mix", 1); - data->inertiaGlobal = Json_getInt(constraintMap, "inertiaGlobal", 0); - data->strengthGlobal = Json_getInt(constraintMap, "strengthGlobal", 0); - data->dampingGlobal = Json_getInt(constraintMap, "dampingGlobal", 0); - data->massGlobal = Json_getInt(constraintMap, "massGlobal", 0); - data->windGlobal = Json_getInt(constraintMap, "windGlobal", 0); - data->gravityGlobal = Json_getInt(constraintMap, "gravityGlobal", 0); - data->mixGlobal = Json_getInt(constraintMap, "mixGlobal", 0); - - skeletonData->physicsConstraints[i] = data; - } - } - - /* Skins. */ - skins = Json_getItem(root, "skins"); - if (skins) { - Json *skinMap; - skeletonData->skins = MALLOC(spSkin *, skins->size); - for (skinMap = skins->child, i = 0; skinMap; skinMap = skinMap->next, ++i) { - Json *attachmentsMap; - Json *curves; - Json *skinPart; - spSkin *skin = spSkin_create(Json_getString(skinMap, "name", "")); - - skinPart = Json_getItem(skinMap, "bones"); - if (skinPart) { - for (skinPart = skinPart->child; skinPart; skinPart = skinPart->next) { - spBoneData *bone = spSkeletonData_findBone(skeletonData, skinPart->valueString); - if (!bone) { - spSkin_dispose(skin); - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Skin bone constraint not found: ", skinPart->valueString); - return NULL; - } - spBoneDataArray_add(skin->bones, bone); - } - } - - skinPart = Json_getItem(skinMap, "ik"); - if (skinPart) { - for (skinPart = skinPart->child; skinPart; skinPart = skinPart->next) { - spIkConstraintData *constraint = spSkeletonData_findIkConstraint(skeletonData, - skinPart->valueString); - if (!constraint) { - spSkin_dispose(skin); - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Skin IK constraint not found: ", skinPart->valueString); - return NULL; - } - spIkConstraintDataArray_add(skin->ikConstraints, constraint); - } - } - - skinPart = Json_getItem(skinMap, "path"); - if (skinPart) { - for (skinPart = skinPart->child; skinPart; skinPart = skinPart->next) { - spPathConstraintData *constraint = spSkeletonData_findPathConstraint(skeletonData, - skinPart->valueString); - if (!constraint) { - spSkin_dispose(skin); - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Skin path constraint not found: ", skinPart->valueString); - return NULL; - } - spPathConstraintDataArray_add(skin->pathConstraints, constraint); - } - } - - skinPart = Json_getItem(skinMap, "transform"); - if (skinPart) { - for (skinPart = skinPart->child; skinPart; skinPart = skinPart->next) { - spTransformConstraintData *constraint = spSkeletonData_findTransformConstraint(skeletonData, - skinPart->valueString); - if (!constraint) { - spSkin_dispose(skin); - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Skin transform constraint not found: ", - skinPart->valueString); - return NULL; - } - spTransformConstraintDataArray_add(skin->transformConstraints, constraint); - } - } - - skinPart = Json_getItem(skinMap, "physics"); - if (skinPart) { - for (skinPart = skinPart->child; skinPart; skinPart = skinPart->next) { - spPhysicsConstraintData *constraint = spSkeletonData_findPhysicsConstraint(skeletonData, - skinPart->valueString); - if (!constraint) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Skin physics constraint not found: ", skinPart->valueString); - return NULL; - } - spPhysicsConstraintDataArray_add(skin->physicsConstraints, constraint); - } - } - - skeletonData->skins[skeletonData->skinsCount++] = skin; - if (strcmp(skin->name, "default") == 0) skeletonData->defaultSkin = skin; - - skinPart = Json_getItem(skinMap, "attachments"); - if (skinPart) { - for (attachmentsMap = skinPart->child; attachmentsMap; attachmentsMap = attachmentsMap->next) { - spSlotData *slot = spSkeletonData_findSlot(skeletonData, attachmentsMap->name); - Json *attachmentMap; - - for (attachmentMap = attachmentsMap->child; attachmentMap; attachmentMap = attachmentMap->next) { - spAttachment *attachment; - const char *skinAttachmentName = attachmentMap->name; - const char *attachmentName = Json_getString(attachmentMap, "name", skinAttachmentName); - const char *path = Json_getString(attachmentMap, "path", attachmentName); - const char *color; - Json *entry; - spSequence *sequence; - - const char *typeString = Json_getString(attachmentMap, "type", "region"); - spAttachmentType type; - if (strcmp(typeString, "region") == 0) type = SP_ATTACHMENT_REGION; - else if (strcmp(typeString, "mesh") == 0) - type = SP_ATTACHMENT_MESH; - else if (strcmp(typeString, "linkedmesh") == 0) - type = SP_ATTACHMENT_LINKED_MESH; - else if (strcmp(typeString, "boundingbox") == 0) - type = SP_ATTACHMENT_BOUNDING_BOX; - else if (strcmp(typeString, "path") == 0) - type = SP_ATTACHMENT_PATH; - else if (strcmp(typeString, "clipping") == 0) - type = SP_ATTACHMENT_CLIPPING; - else if (strcmp(typeString, "point") == 0) - type = SP_ATTACHMENT_POINT; - else { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Unknown attachment type: ", typeString); - return NULL; - } - - sequence = readSequence(Json_getItem(attachmentMap, "sequence")); - attachment = spAttachmentLoader_createAttachment(self->attachmentLoader, skin, type, - attachmentName, - path, sequence); - if (!attachment) { - if (self->attachmentLoader->error1) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, self->attachmentLoader->error1, - self->attachmentLoader->error2); - return NULL; - } - continue; - } - - switch (attachment->type) { - case SP_ATTACHMENT_REGION: { - spRegionAttachment *region = SUB_CAST(spRegionAttachment, attachment); - if (path) MALLOC_STR(region->path, path); - region->x = Json_getFloat(attachmentMap, "x", 0) * self->scale; - region->y = Json_getFloat(attachmentMap, "y", 0) * self->scale; - region->scaleX = Json_getFloat(attachmentMap, "scaleX", 1); - region->scaleY = Json_getFloat(attachmentMap, "scaleY", 1); - region->rotation = Json_getFloat(attachmentMap, "rotation", 0); - region->width = Json_getFloat(attachmentMap, "width", 32) * self->scale; - region->height = Json_getFloat(attachmentMap, "height", 32) * self->scale; - region->sequence = sequence; - - color = Json_getString(attachmentMap, "color", 0); - if (color) { - spColor_setFromFloats(®ion->color, - toColor(color, 0), - toColor(color, 1), - toColor(color, 2), - toColor(color, 3)); - } - - if (region->region != NULL) spRegionAttachment_updateRegion(region); - - spAttachmentLoader_configureAttachment(self->attachmentLoader, attachment); - break; - } - case SP_ATTACHMENT_MESH: - case SP_ATTACHMENT_LINKED_MESH: { - spMeshAttachment *mesh = SUB_CAST(spMeshAttachment, attachment); - - MALLOC_STR(mesh->path, path); - - color = Json_getString(attachmentMap, "color", 0); - if (color) { - spColor_setFromFloats(&mesh->color, - toColor(color, 0), - toColor(color, 1), - toColor(color, 2), - toColor(color, 3)); - } - - mesh->width = Json_getFloat(attachmentMap, "width", 32) * self->scale; - mesh->height = Json_getFloat(attachmentMap, "height", 32) * self->scale; - mesh->sequence = sequence; - - entry = Json_getItem(attachmentMap, "parent"); - if (!entry) { - int verticesLength; - entry = Json_getItem(attachmentMap, "triangles"); - mesh->trianglesCount = entry->size; - mesh->triangles = MALLOC(unsigned short, entry->size); - for (entry = entry->child, ii = 0; entry; entry = entry->next, ++ii) - mesh->triangles[ii] = (unsigned short) entry->valueInt; - - entry = Json_getItem(attachmentMap, "uvs"); - verticesLength = entry->size; - mesh->regionUVs = MALLOC(float, verticesLength); - for (entry = entry->child, ii = 0; entry; entry = entry->next, ++ii) - mesh->regionUVs[ii] = entry->valueFloat; - - _readVertices(self, attachmentMap, SUPER(mesh), verticesLength); - - if (mesh->region != NULL) spMeshAttachment_updateRegion(mesh); - - mesh->hullLength = Json_getInt(attachmentMap, "hull", 0); - - entry = Json_getItem(attachmentMap, "edges"); - if (entry) { - mesh->edgesCount = entry->size; - mesh->edges = MALLOC(unsigned short, entry->size); - for (entry = entry->child, ii = 0; entry; entry = entry->next, ++ii) - mesh->edges[ii] = (unsigned short) entry->valueInt; - } - - spAttachmentLoader_configureAttachment(self->attachmentLoader, attachment); - } else { - int inheritTimelines = Json_getInt(attachmentMap, "timelines", 1); - _spSkeletonJson_addLinkedMesh(self, SUB_CAST(spMeshAttachment, attachment), - Json_getString(attachmentMap, "skin", 0), slot->index, - entry->valueString, inheritTimelines); - } - break; - } - case SP_ATTACHMENT_BOUNDING_BOX: { - spBoundingBoxAttachment *box = SUB_CAST(spBoundingBoxAttachment, attachment); - int vertexCount = Json_getInt(attachmentMap, "vertexCount", 0) << 1; - _readVertices(self, attachmentMap, SUPER(box), vertexCount); - box->super.verticesCount = vertexCount; - color = Json_getString(attachmentMap, "color", 0); - if (color) { - spColor_setFromFloats(&box->color, - toColor(color, 0), - toColor(color, 1), - toColor(color, 2), - toColor(color, 3)); - } - spAttachmentLoader_configureAttachment(self->attachmentLoader, attachment); - break; - } - case SP_ATTACHMENT_PATH: { - spPathAttachment *pathAttachment = SUB_CAST(spPathAttachment, attachment); - int vertexCount = 0; - pathAttachment->closed = Json_getInt(attachmentMap, "closed", 0); - pathAttachment->constantSpeed = Json_getInt(attachmentMap, "constantSpeed", 1); - vertexCount = Json_getInt(attachmentMap, "vertexCount", 0); - _readVertices(self, attachmentMap, SUPER(pathAttachment), vertexCount << 1); - - pathAttachment->lengthsLength = vertexCount / 3; - pathAttachment->lengths = MALLOC(float, pathAttachment->lengthsLength); - - curves = Json_getItem(attachmentMap, "lengths"); - for (curves = curves->child, ii = 0; curves; curves = curves->next, ++ii) - pathAttachment->lengths[ii] = curves->valueFloat * self->scale; - color = Json_getString(attachmentMap, "color", 0); - if (color) { - spColor_setFromFloats(&pathAttachment->color, - toColor(color, 0), - toColor(color, 1), - toColor(color, 2), - toColor(color, 3)); - } - break; - } - case SP_ATTACHMENT_POINT: { - spPointAttachment *point = SUB_CAST(spPointAttachment, attachment); - point->x = Json_getFloat(attachmentMap, "x", 0) * self->scale; - point->y = Json_getFloat(attachmentMap, "y", 0) * self->scale; - point->rotation = Json_getFloat(attachmentMap, "rotation", 0); - - color = Json_getString(attachmentMap, "color", 0); - if (color) { - spColor_setFromFloats(&point->color, - toColor(color, 0), - toColor(color, 1), - toColor(color, 2), - toColor(color, 3)); - } - break; - } - case SP_ATTACHMENT_CLIPPING: { - spClippingAttachment *clip = SUB_CAST(spClippingAttachment, attachment); - int vertexCount = 0; - const char *end = Json_getString(attachmentMap, "end", 0); - if (end) { - spSlotData *endSlot = spSkeletonData_findSlot(skeletonData, end); - clip->endSlot = endSlot; - } - vertexCount = Json_getInt(attachmentMap, "vertexCount", 0) << 1; - _readVertices(self, attachmentMap, SUPER(clip), vertexCount); - color = Json_getString(attachmentMap, "color", 0); - if (color) { - spColor_setFromFloats(&clip->color, - toColor(color, 0), - toColor(color, 1), - toColor(color, 2), - toColor(color, 3)); - } - spAttachmentLoader_configureAttachment(self->attachmentLoader, attachment); - break; - } - } - - spSkin_setAttachment(skin, slot->index, skinAttachmentName, attachment); - } - } - } - } - } - - /* Linked meshes. */ - for (i = 0; i < internal->linkedMeshCount; ++i) { - spAttachment *parent; - _spLinkedMesh *linkedMesh = internal->linkedMeshes + i; - spSkin *skin = !linkedMesh->skin ? skeletonData->defaultSkin : spSkeletonData_findSkin(skeletonData, linkedMesh->skin); - if (!skin) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Skin not found: ", linkedMesh->skin); - return NULL; - } - parent = spSkin_getAttachment(skin, linkedMesh->slotIndex, linkedMesh->parent); - if (!parent) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Parent mesh not found: ", linkedMesh->parent); - return NULL; - } - linkedMesh->mesh->super.timelineAttachment = linkedMesh->inheritTimeline ? parent - : SUPER(SUPER(linkedMesh->mesh)); - spMeshAttachment_setParentMesh(linkedMesh->mesh, SUB_CAST(spMeshAttachment, parent)); - if (linkedMesh->mesh->region != NULL) spMeshAttachment_updateRegion(linkedMesh->mesh); - spAttachmentLoader_configureAttachment(self->attachmentLoader, SUPER(SUPER(linkedMesh->mesh))); - } - - /* Events. */ - events = Json_getItem(root, "events"); - if (events) { - Json *eventMap; - const char *stringValue; - const char *audioPath; - skeletonData->eventsCount = events->size; - skeletonData->events = MALLOC(spEventData *, events->size); - for (eventMap = events->child, i = 0; eventMap; eventMap = eventMap->next, ++i) { - spEventData *eventData = spEventData_create(eventMap->name); - eventData->intValue = Json_getInt(eventMap, "int", 0); - eventData->floatValue = Json_getFloat(eventMap, "float", 0); - stringValue = Json_getString(eventMap, "string", 0); - if (stringValue) MALLOC_STR(eventData->stringValue, stringValue); - audioPath = Json_getString(eventMap, "audio", 0); - if (audioPath) { - MALLOC_STR(eventData->audioPath, audioPath); - eventData->volume = Json_getFloat(eventMap, "volume", 1); - eventData->balance = Json_getFloat(eventMap, "balance", 0); - } - skeletonData->events[i] = eventData; - } - } - - /* Animations. */ - animations = Json_getItem(root, "animations"); - if (animations) { - Json *animationMap; - skeletonData->animations = MALLOC(spAnimation *, animations->size); - for (animationMap = animations->child; animationMap; animationMap = animationMap->next) { - spAnimation *animation = _spSkeletonJson_readAnimation(self, animationMap, skeletonData); - if (!animation) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Animation broken: ", animationMap->name); - return NULL; - } - skeletonData->animations[skeletonData->animationsCount++] = animation; - } - } - - Json_dispose(root); - return skeletonData; -} diff --git a/spine-c/spine-c/src/spine/Skin.c b/spine-c/spine-c/src/spine/Skin.c deleted file mode 100644 index 4203d471e..000000000 --- a/spine-c/spine-c/src/spine/Skin.c +++ /dev/null @@ -1,297 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -_SP_ARRAY_IMPLEMENT_TYPE(spBoneDataArray, spBoneData *) - -_SP_ARRAY_IMPLEMENT_TYPE(spIkConstraintDataArray, spIkConstraintData *) - -_SP_ARRAY_IMPLEMENT_TYPE(spTransformConstraintDataArray, spTransformConstraintData *) - -_SP_ARRAY_IMPLEMENT_TYPE(spPathConstraintDataArray, spPathConstraintData *) - -_SP_ARRAY_IMPLEMENT_TYPE(spPhysicsConstraintDataArray, spPhysicsConstraintData *) - -_Entry *_Entry_create(int slotIndex, const char *name, spAttachment *attachment) { - _Entry *self = NEW(_Entry); - self->slotIndex = slotIndex; - MALLOC_STR(self->name, (char *) name); - self->attachment = attachment; - return self; -} - -void _Entry_dispose(_Entry *self) { - spAttachment_dispose(self->attachment); - FREE(self->name); - FREE(self); -} - -static _SkinHashTableEntry *_SkinHashTableEntry_create(_Entry *entry) { - _SkinHashTableEntry *self = NEW(_SkinHashTableEntry); - self->entry = entry; - return self; -} - -static void _SkinHashTableEntry_dispose(_SkinHashTableEntry *self) { - FREE(self); -} - -/**/ - -spSkin *spSkin_create(const char *name) { - spSkin *self = SUPER(NEW(_spSkin)); - MALLOC_STR(self->name, (char *) name); - self->bones = spBoneDataArray_create(4); - self->ikConstraints = spIkConstraintDataArray_create(4); - self->transformConstraints = spTransformConstraintDataArray_create(4); - self->pathConstraints = spPathConstraintDataArray_create(4); - self->physicsConstraints = spPhysicsConstraintDataArray_create(4); - spColor_setFromFloats(&self->color, 0.99607843f, 0.61960787f, 0.30980393f, 1); - return self; -} - -void spSkin_dispose(spSkin *self) { - _Entry *entry = SUB_CAST(_spSkin, self)->entries; - - while (entry) { - _Entry *nextEntry = entry->next; - _Entry_dispose(entry); - entry = nextEntry; - } - - { - _SkinHashTableEntry **currentHashtableEntry = SUB_CAST(_spSkin, self)->entriesHashTable; - int i; - - for (i = 0; i < SKIN_ENTRIES_HASH_TABLE_SIZE; ++i, ++currentHashtableEntry) { - _SkinHashTableEntry *hashtableEntry = *currentHashtableEntry; - - while (hashtableEntry) { - _SkinHashTableEntry *nextEntry = hashtableEntry->next; - _SkinHashTableEntry_dispose(hashtableEntry); - hashtableEntry = nextEntry; - } - } - } - - spBoneDataArray_dispose(self->bones); - spIkConstraintDataArray_dispose(self->ikConstraints); - spTransformConstraintDataArray_dispose(self->transformConstraints); - spPathConstraintDataArray_dispose(self->pathConstraints); - spPhysicsConstraintDataArray_dispose(self->physicsConstraints); - FREE(self->name); - FREE(self); -} - -void spSkin_setAttachment(spSkin *self, int slotIndex, const char *name, spAttachment *attachment) { - _SkinHashTableEntry *existingEntry = 0; - _SkinHashTableEntry *hashEntry = SUB_CAST(_spSkin, self)->entriesHashTable[(unsigned int) slotIndex % SKIN_ENTRIES_HASH_TABLE_SIZE]; - while (hashEntry) { - if (hashEntry->entry->slotIndex == slotIndex && strcmp(hashEntry->entry->name, name) == 0) { - existingEntry = hashEntry; - break; - } - hashEntry = hashEntry->next; - } - - if (attachment) attachment->refCount++; - - if (existingEntry) { - if (hashEntry->entry->attachment) spAttachment_dispose(hashEntry->entry->attachment); - hashEntry->entry->attachment = attachment; - } else { - _Entry *newEntry = _Entry_create(slotIndex, name, attachment); - newEntry->next = SUB_CAST(_spSkin, self)->entries; - SUB_CAST(_spSkin, self)->entries = newEntry; - { - unsigned int hashTableIndex = (unsigned int) slotIndex % SKIN_ENTRIES_HASH_TABLE_SIZE; - _SkinHashTableEntry **hashTable = SUB_CAST(_spSkin, self)->entriesHashTable; - - _SkinHashTableEntry *newHashEntry = _SkinHashTableEntry_create(newEntry); - newHashEntry->next = hashTable[hashTableIndex]; - SUB_CAST(_spSkin, self)->entriesHashTable[hashTableIndex] = newHashEntry; - } - } -} - -spAttachment *spSkin_getAttachment(const spSkin *self, int slotIndex, const char *name) { - const _SkinHashTableEntry *hashEntry = SUB_CAST(_spSkin, self)->entriesHashTable[(unsigned int) slotIndex % SKIN_ENTRIES_HASH_TABLE_SIZE]; - while (hashEntry) { - if (hashEntry->entry->slotIndex == slotIndex && strcmp(hashEntry->entry->name, name) == 0) - return hashEntry->entry->attachment; - hashEntry = hashEntry->next; - } - return 0; -} - -const char *spSkin_getAttachmentName(const spSkin *self, int slotIndex, int attachmentIndex) { - const _Entry *entry = SUB_CAST(_spSkin, self)->entries; - int i = 0; - while (entry) { - if (entry->slotIndex == slotIndex) { - if (i == attachmentIndex) return entry->name; - i++; - } - entry = entry->next; - } - return 0; -} - -void spSkin_attachAll(const spSkin *self, spSkeleton *skeleton, const spSkin *oldSkin) { - const _Entry *entry = SUB_CAST(_spSkin, oldSkin)->entries; - while (entry) { - spSlot *slot = skeleton->slots[entry->slotIndex]; - if (slot->attachment == entry->attachment) { - spAttachment *attachment = spSkin_getAttachment(self, entry->slotIndex, entry->name); - if (attachment) spSlot_setAttachment(slot, attachment); - } - entry = entry->next; - } -} - -void spSkin_addSkin(spSkin *self, const spSkin *other) { - int i = 0; - spSkinEntry *entry; - - for (i = 0; i < other->bones->size; i++) { - if (!spBoneDataArray_contains(self->bones, other->bones->items[i])) - spBoneDataArray_add(self->bones, other->bones->items[i]); - } - - for (i = 0; i < other->ikConstraints->size; i++) { - if (!spIkConstraintDataArray_contains(self->ikConstraints, other->ikConstraints->items[i])) - spIkConstraintDataArray_add(self->ikConstraints, other->ikConstraints->items[i]); - } - - for (i = 0; i < other->transformConstraints->size; i++) { - if (!spTransformConstraintDataArray_contains(self->transformConstraints, other->transformConstraints->items[i])) - spTransformConstraintDataArray_add(self->transformConstraints, other->transformConstraints->items[i]); - } - - for (i = 0; i < other->pathConstraints->size; i++) { - if (!spPathConstraintDataArray_contains(self->pathConstraints, other->pathConstraints->items[i])) - spPathConstraintDataArray_add(self->pathConstraints, other->pathConstraints->items[i]); - } - - for (i = 0; i < other->physicsConstraints->size; i++) { - if (!spPhysicsConstraintDataArray_contains(self->physicsConstraints, other->physicsConstraints->items[i])) - spPhysicsConstraintDataArray_add(self->physicsConstraints, other->physicsConstraints->items[i]); - } - - entry = spSkin_getAttachments(other); - while (entry) { - spSkin_setAttachment(self, entry->slotIndex, entry->name, entry->attachment); - entry = entry->next; - } -} - -void spSkin_copySkin(spSkin *self, const spSkin *other) { - int i = 0; - spSkinEntry *entry; - - for (i = 0; i < other->bones->size; i++) { - if (!spBoneDataArray_contains(self->bones, other->bones->items[i])) - spBoneDataArray_add(self->bones, other->bones->items[i]); - } - - for (i = 0; i < other->ikConstraints->size; i++) { - if (!spIkConstraintDataArray_contains(self->ikConstraints, other->ikConstraints->items[i])) - spIkConstraintDataArray_add(self->ikConstraints, other->ikConstraints->items[i]); - } - - for (i = 0; i < other->transformConstraints->size; i++) { - if (!spTransformConstraintDataArray_contains(self->transformConstraints, other->transformConstraints->items[i])) - spTransformConstraintDataArray_add(self->transformConstraints, other->transformConstraints->items[i]); - } - - for (i = 0; i < other->pathConstraints->size; i++) { - if (!spPathConstraintDataArray_contains(self->pathConstraints, other->pathConstraints->items[i])) - spPathConstraintDataArray_add(self->pathConstraints, other->pathConstraints->items[i]); - } - - for (i = 0; i < other->physicsConstraints->size; i++) { - if (!spPhysicsConstraintDataArray_contains(self->physicsConstraints, other->physicsConstraints->items[i])) - spPhysicsConstraintDataArray_add(self->physicsConstraints, other->physicsConstraints->items[i]); - } - - entry = spSkin_getAttachments(other); - while (entry) { - if (entry->attachment->type == SP_ATTACHMENT_MESH) { - spMeshAttachment *attachment = spMeshAttachment_newLinkedMesh( - SUB_CAST(spMeshAttachment, entry->attachment)); - spSkin_setAttachment(self, entry->slotIndex, entry->name, SUPER(SUPER(attachment))); - } else { - spAttachment *attachment = entry->attachment ? spAttachment_copy(entry->attachment) : 0; - spSkin_setAttachment(self, entry->slotIndex, entry->name, attachment); - } - entry = entry->next; - } -} - -spSkinEntry *spSkin_getAttachments(const spSkin *self) { - return SUB_CAST(_spSkin, self)->entries; -} - -void spSkin_clear(spSkin *self) { - _Entry *entry = SUB_CAST(_spSkin, self)->entries; - - while (entry) { - _Entry *nextEntry = entry->next; - _Entry_dispose(entry); - entry = nextEntry; - } - - SUB_CAST(_spSkin, self)->entries = 0; - - { - _SkinHashTableEntry **currentHashtableEntry = SUB_CAST(_spSkin, self)->entriesHashTable; - int i; - - for (i = 0; i < SKIN_ENTRIES_HASH_TABLE_SIZE; ++i, ++currentHashtableEntry) { - _SkinHashTableEntry *hashtableEntry = *currentHashtableEntry; - - while (hashtableEntry) { - _SkinHashTableEntry *nextEntry = hashtableEntry->next; - _SkinHashTableEntry_dispose(hashtableEntry); - hashtableEntry = nextEntry; - } - - SUB_CAST(_spSkin, self)->entriesHashTable[i] = 0; - } - } - - spBoneDataArray_clear(self->bones); - spIkConstraintDataArray_clear(self->ikConstraints); - spTransformConstraintDataArray_clear(self->transformConstraints); - spPathConstraintDataArray_clear(self->pathConstraints); - spPhysicsConstraintDataArray_clear(self->physicsConstraints); -} diff --git a/spine-c/spine-c/src/spine/Slot.c b/spine-c/spine-c/src/spine/Slot.c deleted file mode 100644 index 35bfce74c..000000000 --- a/spine-c/spine-c/src/spine/Slot.c +++ /dev/null @@ -1,86 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -spSlot *spSlot_create(spSlotData *data, spBone *bone) { - spSlot *self = NEW(spSlot); - self->data = data; - self->bone = bone; - spColor_setFromFloats(&self->color, 1, 1, 1, 1); - self->darkColor = data->darkColor == 0 ? 0 : spColor_create(); - spSlot_setToSetupPose(self); - return self; -} - -void spSlot_dispose(spSlot *self) { - FREE(self->deform); - FREE(self->darkColor); - FREE(self); -} - -static int isVertexAttachment(spAttachment *attachment) { - if (attachment == NULL) return 0; - switch (attachment->type) { - case SP_ATTACHMENT_BOUNDING_BOX: - case SP_ATTACHMENT_CLIPPING: - case SP_ATTACHMENT_MESH: - case SP_ATTACHMENT_PATH: - return -1; - default: - return 0; - } -} - -void spSlot_setAttachment(spSlot *self, spAttachment *attachment) { - if (attachment == self->attachment) return; - - if (!isVertexAttachment(attachment) || - !isVertexAttachment(self->attachment) || (SUB_CAST(spVertexAttachment, attachment)->timelineAttachment != SUB_CAST(spVertexAttachment, self->attachment)->timelineAttachment)) { - self->deformCount = 0; - } - - self->attachment = attachment; - self->sequenceIndex = -1; -} - -void spSlot_setToSetupPose(spSlot *self) { - spColor_setFromColor(&self->color, &self->data->color); - if (self->darkColor) spColor_setFromColor(self->darkColor, self->data->darkColor); - - if (!self->data->attachmentName) - spSlot_setAttachment(self, 0); - else { - spAttachment *attachment = spSkeleton_getAttachmentForSlotIndex( - self->bone->skeleton, self->data->index, self->data->attachmentName); - self->attachment = 0; - spSlot_setAttachment(self, attachment); - } -} diff --git a/spine-c/spine-c/src/spine/SlotData.c b/spine-c/spine-c/src/spine/SlotData.c deleted file mode 100644 index b0f6825c8..000000000 --- a/spine-c/spine-c/src/spine/SlotData.c +++ /dev/null @@ -1,56 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -spSlotData *spSlotData_create(const int index, const char *name, spBoneData *boneData) { - spSlotData *self = NEW(spSlotData); - self->index = index; - MALLOC_STR(self->name, name); - self->boneData = boneData; - spColor_setFromFloats(&self->color, 1, 1, 1, 1); - self->visible = -1; - return self; -} - -void spSlotData_dispose(spSlotData *self) { - FREE(self->name); - FREE(self->attachmentName); - FREE(self->darkColor); - FREE(self); -} - -void spSlotData_setAttachmentName(spSlotData *self, const char *attachmentName) { - FREE(self->attachmentName); - if (attachmentName) - MALLOC_STR(self->attachmentName, attachmentName); - else - self->attachmentName = 0; -} diff --git a/spine-c/spine-c/src/spine/TransformConstraint.c b/spine-c/spine-c/src/spine/TransformConstraint.c deleted file mode 100644 index 914c3f87f..000000000 --- a/spine-c/spine-c/src/spine/TransformConstraint.c +++ /dev/null @@ -1,269 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -spTransformConstraint *spTransformConstraint_create(spTransformConstraintData *data, const spSkeleton *skeleton) { - int i; - spTransformConstraint *self = NEW(spTransformConstraint); - self->data = data; - self->mixRotate = data->mixRotate; - self->mixX = data->mixX; - self->mixY = data->mixY; - self->mixScaleX = data->mixScaleX; - self->mixScaleY = data->mixScaleY; - self->mixShearY = data->mixShearY; - self->bonesCount = data->bonesCount; - self->bones = MALLOC(spBone *, self->bonesCount); - for (i = 0; i < self->bonesCount; ++i) - self->bones[i] = spSkeleton_findBone(skeleton, self->data->bones[i]->name); - self->target = spSkeleton_findBone(skeleton, self->data->target->name); - return self; -} - -void spTransformConstraint_dispose(spTransformConstraint *self) { - FREE(self->bones); - FREE(self); -} - -void _spTransformConstraint_applyAbsoluteWorld(spTransformConstraint *self) { - float mixRotate = self->mixRotate, mixX = self->mixX, mixY = self->mixY, mixScaleX = self->mixScaleX, - mixScaleY = self->mixScaleY, mixShearY = self->mixShearY; - int /*bool*/ translate = mixX != 0 || mixY != 0; - spBone *target = self->target; - float ta = target->a, tb = target->b, tc = target->c, td = target->d; - float degRadReflect = ta * td - tb * tc > 0 ? DEG_RAD : -DEG_RAD; - float offsetRotation = self->data->offsetRotation * degRadReflect, offsetShearY = - self->data->offsetShearY * degRadReflect; - int i; - float a, b, c, d, r, cosine, sine, x, y, s, by; - for (i = 0; i < self->bonesCount; ++i) { - spBone *bone = self->bones[i]; - - if (mixRotate != 0) { - a = bone->a, b = bone->b, c = bone->c, d = bone->d; - r = ATAN2(tc, ta) - ATAN2(c, a) + offsetRotation; - if (r > PI) r -= PI2; - else if (r < -PI) - r += PI2; - r *= mixRotate; - cosine = COS(r); - sine = SIN(r); - bone->a = cosine * a - sine * c; - bone->b = cosine * b - sine * d; - bone->c = sine * a + cosine * c; - bone->d = sine * b + cosine * d; - } - - if (translate) { - spBone_localToWorld(target, self->data->offsetX, self->data->offsetY, &x, &y); - bone->worldX += (x - bone->worldX) * mixX; - bone->worldY += (y - bone->worldY) * mixY; - } - - if (mixScaleX > 0) { - s = SQRT(bone->a * bone->a + bone->c * bone->c); - if (s != 0) s = (s + (SQRT(ta * ta + tc * tc) - s + self->data->offsetScaleX) * mixScaleX) / s; - bone->a *= s; - bone->c *= s; - } - if (mixScaleY != 0) { - s = SQRT(bone->b * bone->b + bone->d * bone->d); - if (s != 0) s = (s + (SQRT(tb * tb + td * td) - s + self->data->offsetScaleY) * mixScaleY) / s; - bone->b *= s; - bone->d *= s; - } - - if (mixShearY > 0) { - b = bone->b, d = bone->d; - by = ATAN2(d, b); - r = ATAN2(td, tb) - ATAN2(tc, ta) - (by - ATAN2(bone->c, bone->a)); - s = SQRT(b * b + d * d); - if (r > PI) r -= PI2; - else if (r < -PI) - r += PI2; - r = by + (r + offsetShearY) * mixShearY; - bone->b = COS(r) * s; - bone->d = SIN(r) * s; - } - spBone_updateAppliedTransform(bone); - } -} - -void _spTransformConstraint_applyRelativeWorld(spTransformConstraint *self) { - float mixRotate = self->mixRotate, mixX = self->mixX, mixY = self->mixY, mixScaleX = self->mixScaleX, - mixScaleY = self->mixScaleY, mixShearY = self->mixShearY; - int /*bool*/ translate = mixX != 0 || mixY != 0; - spBone *target = self->target; - float ta = target->a, tb = target->b, tc = target->c, td = target->d; - float degRadReflect = ta * td - tb * tc > 0 ? DEG_RAD : -DEG_RAD; - float offsetRotation = self->data->offsetRotation * degRadReflect, offsetShearY = - self->data->offsetShearY * degRadReflect; - int i; - float a, b, c, d, r, cosine, sine, x, y, s; - for (i = 0; i < self->bonesCount; ++i) { - spBone *bone = self->bones[i]; - - if (mixRotate != 0) { - a = bone->a, b = bone->b, c = bone->c, d = bone->d; - r = ATAN2(tc, ta) + offsetRotation; - if (r > PI) r -= PI2; - else if (r < -PI) - r += PI2; - r *= mixRotate; - cosine = COS(r); - sine = SIN(r); - bone->a = cosine * a - sine * c; - bone->b = cosine * b - sine * d; - bone->c = sine * a + cosine * c; - bone->d = sine * b + cosine * d; - } - - if (translate != 0) { - spBone_localToWorld(target, self->data->offsetX, self->data->offsetY, &x, &y); - bone->worldX += (x * mixX); - bone->worldY += (y * mixY); - } - - if (mixScaleX != 0) { - s = (SQRT(ta * ta + tc * tc) - 1 + self->data->offsetScaleX) * mixScaleX + 1; - bone->a *= s; - bone->c *= s; - } - if (mixScaleY > 0) { - s = (SQRT(tb * tb + td * td) - 1 + self->data->offsetScaleY) * mixScaleY + 1; - bone->b *= s; - bone->d *= s; - } - - if (mixShearY > 0) { - r = ATAN2(td, tb) - ATAN2(tc, ta); - if (r > PI) r -= PI2; - else if (r < -PI) - r += PI2; - b = bone->b, d = bone->d; - r = ATAN2(d, b) + (r - PI / 2 + offsetShearY) * mixShearY; - s = SQRT(b * b + d * d); - bone->b = COS(r) * s; - bone->d = SIN(r) * s; - } - - spBone_updateAppliedTransform(bone); - } -} - -void _spTransformConstraint_applyAbsoluteLocal(spTransformConstraint *self) { - float mixRotate = self->mixRotate, mixX = self->mixX, mixY = self->mixY, mixScaleX = self->mixScaleX, - mixScaleY = self->mixScaleY, mixShearY = self->mixShearY; - spBone *target = self->target; - int i; - float rotation, r, x, y, scaleX, scaleY, shearY; - - for (i = 0; i < self->bonesCount; ++i) { - spBone *bone = self->bones[i]; - - rotation = bone->arotation; - if (mixRotate != 0) { - r = target->arotation - rotation + self->data->offsetRotation; - r -= CEIL(r / 360 - 0.5) * 360; - rotation += r * mixRotate; - } - - x = bone->ax, y = bone->ay; - x += (target->ax - x + self->data->offsetX) * mixX; - y += (target->ay - y + self->data->offsetY) * mixY; - - scaleX = bone->ascaleX, scaleY = bone->ascaleY; - if (mixScaleX != 0 && scaleX != 0) - scaleX = (scaleX + (target->ascaleX - scaleX + self->data->offsetScaleX) * mixScaleX) / scaleX; - if (mixScaleY != 0 && scaleY != 0) - scaleY = (scaleY + (target->ascaleY - scaleY + self->data->offsetScaleY) * mixScaleY) / scaleY; - - shearY = bone->ashearY; - if (mixShearY != 0) { - r = target->ashearY - shearY + self->data->offsetShearY; - r -= CEIL(r / 360 - 0.5) * 360; - shearY += r * mixShearY; - } - - spBone_updateWorldTransformWith(bone, x, y, rotation, scaleX, scaleY, bone->ashearX, shearY); - } -} - -void _spTransformConstraint_applyRelativeLocal(spTransformConstraint *self) { - float mixRotate = self->mixRotate, mixX = self->mixX, mixY = self->mixY, mixScaleX = self->mixScaleX, - mixScaleY = self->mixScaleY, mixShearY = self->mixShearY; - spBone *target = self->target; - int i; - float rotation, x, y, scaleX, scaleY, shearY; - - for (i = 0; i < self->bonesCount; ++i) { - spBone *bone = self->bones[i]; - - rotation = bone->arotation + (target->arotation + self->data->offsetRotation) * mixRotate; - x = bone->ax + (target->ax + self->data->offsetX) * mixX; - y = bone->ay + (target->ay + self->data->offsetY) * mixY; - scaleX = bone->ascaleX * (((target->ascaleX - 1 + self->data->offsetScaleX) * mixScaleX) + 1); - scaleY = bone->ascaleY * (((target->ascaleY - 1 + self->data->offsetScaleY) * mixScaleY) + 1); - shearY = bone->ashearY + (target->ashearY + self->data->offsetShearY) * mixShearY; - - spBone_updateWorldTransformWith(bone, x, y, rotation, scaleX, scaleY, bone->ashearX, shearY); - } -} - -void spTransformConstraint_update(spTransformConstraint *self) { - if (self->mixRotate == 0 && self->mixX == 0 && self->mixY == 0 && self->mixScaleX == 0 && self->mixScaleY == 0 && - self->mixShearY == 0) - return; - - if (self->data->local) { - if (self->data->relative) - _spTransformConstraint_applyRelativeLocal(self); - else - _spTransformConstraint_applyAbsoluteLocal(self); - - } else { - if (self->data->relative) - _spTransformConstraint_applyRelativeWorld(self); - else - _spTransformConstraint_applyAbsoluteWorld(self); - } -} - -void spTransformConstraint_setToSetupPose(spTransformConstraint *self) { - spTransformConstraintData *data = self->data; - self->mixRotate = data->mixRotate; - self->mixX = data->mixX; - self->mixY = data->mixY; - self->mixScaleX = data->mixScaleX; - self->mixScaleY = data->mixScaleY; - self->mixShearY = data->mixShearY; -} diff --git a/spine-c/spine-c/src/spine/TransformConstraintData.c b/spine-c/spine-c/src/spine/TransformConstraintData.c deleted file mode 100644 index 1d7f18037..000000000 --- a/spine-c/spine-c/src/spine/TransformConstraintData.c +++ /dev/null @@ -1,43 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -spTransformConstraintData *spTransformConstraintData_create(const char *name) { - spTransformConstraintData *self = NEW(spTransformConstraintData); - MALLOC_STR(self->name, name); - return self; -} - -void spTransformConstraintData_dispose(spTransformConstraintData *self) { - FREE(self->name); - FREE(self->bones); - FREE(self); -} diff --git a/spine-c/spine-c/src/spine/Triangulator.c b/spine-c/spine-c/src/spine/Triangulator.c deleted file mode 100644 index 1dc50d899..000000000 --- a/spine-c/spine-c/src/spine/Triangulator.c +++ /dev/null @@ -1,371 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include - -spTriangulator *spTriangulator_create(void) { - spTriangulator *triangulator = CALLOC(spTriangulator, 1); - - triangulator->convexPolygons = spArrayFloatArray_create(16); - triangulator->convexPolygonsIndices = spArrayShortArray_create(16); - triangulator->indicesArray = spShortArray_create(128); - triangulator->isConcaveArray = spIntArray_create(128); - triangulator->triangles = spShortArray_create(128); - triangulator->polygonPool = spArrayFloatArray_create(16); - triangulator->polygonIndicesPool = spArrayShortArray_create(128); - - return triangulator; -} - -void spTriangulator_dispose(spTriangulator *self) { - int i; - - for (i = 0; i < self->convexPolygons->size; i++) { - spFloatArray_dispose(self->convexPolygons->items[i]); - } - spArrayFloatArray_dispose(self->convexPolygons); - - for (i = 0; i < self->convexPolygonsIndices->size; i++) { - spShortArray_dispose(self->convexPolygonsIndices->items[i]); - } - spArrayShortArray_dispose(self->convexPolygonsIndices); - - spShortArray_dispose(self->indicesArray); - spIntArray_dispose(self->isConcaveArray); - spShortArray_dispose(self->triangles); - - for (i = 0; i < self->polygonPool->size; i++) { - spFloatArray_dispose(self->polygonPool->items[i]); - } - spArrayFloatArray_dispose(self->polygonPool); - - for (i = 0; i < self->polygonIndicesPool->size; i++) { - spShortArray_dispose(self->polygonIndicesPool->items[i]); - } - spArrayShortArray_dispose(self->polygonIndicesPool); - - FREE(self); -} - -static spFloatArray *_obtainPolygon(spTriangulator *self) { - if (self->polygonPool->size == 0) return spFloatArray_create(16); - else - return spArrayFloatArray_pop(self->polygonPool); -} - -static void _freePolygon(spTriangulator *self, spFloatArray *polygon) { - spArrayFloatArray_add(self->polygonPool, polygon); -} - -static void _freeAllPolygons(spTriangulator *self, spArrayFloatArray *polygons) { - int i; - for (i = 0; i < polygons->size; i++) { - _freePolygon(self, polygons->items[i]); - } -} - -static spShortArray *_obtainPolygonIndices(spTriangulator *self) { - if (self->polygonIndicesPool->size == 0) return spShortArray_create(16); - else - return spArrayShortArray_pop(self->polygonIndicesPool); -} - -static void _freePolygonIndices(spTriangulator *self, spShortArray *indices) { - spArrayShortArray_add(self->polygonIndicesPool, indices); -} - -static void _freeAllPolygonIndices(spTriangulator *self, spArrayShortArray *polygonIndices) { - int i; - for (i = 0; i < polygonIndices->size; i++) { - _freePolygonIndices(self, polygonIndices->items[i]); - } -} - -static int _positiveArea(float p1x, float p1y, float p2x, float p2y, float p3x, float p3y) { - return p1x * (p3y - p2y) + p2x * (p1y - p3y) + p3x * (p2y - p1y) >= 0; -} - -static int _isConcave(int index, int vertexCount, float *vertices, short *indices) { - int previous = indices[(vertexCount + index - 1) % vertexCount] << 1; - int current = indices[index] << 1; - int next = indices[(index + 1) % vertexCount] << 1; - return !_positiveArea(vertices[previous], vertices[previous + 1], - vertices[current], vertices[current + 1], - vertices[next], vertices[next + 1]); -} - -static int _winding(float p1x, float p1y, float p2x, float p2y, float p3x, float p3y) { - float px = p2x - p1x, py = p2y - p1y; - return p3x * py - p3y * px + px * p1y - p1x * py >= 0 ? 1 : -1; -} - -spShortArray *spTriangulator_triangulate(spTriangulator *self, spFloatArray *verticesArray) { - float *vertices = verticesArray->items; - int vertexCount = verticesArray->size >> 1; - int i, n, ii; - - spShortArray *indicesArray = self->indicesArray; - short *indices; - spIntArray *isConcaveArray; - int *isConcave; - spShortArray *triangles; - - spShortArray_clear(indicesArray); - indices = spShortArray_setSize(indicesArray, vertexCount)->items; - for (i = 0; i < vertexCount; i++) - indices[i] = (short) i; - - isConcaveArray = self->isConcaveArray; - isConcave = spIntArray_setSize(isConcaveArray, vertexCount)->items; - for (i = 0, n = vertexCount; i < n; ++i) - isConcave[i] = _isConcave(i, vertexCount, vertices, indices); - - triangles = self->triangles; - spShortArray_clear(triangles); - spShortArray_ensureCapacity(triangles, MAX(0, vertexCount - 2) << 2); - - while (vertexCount > 3) { - int previous = vertexCount - 1, next = 1; - int previousIndex, nextIndex; - i = 0; - while (1) { - if (!isConcave[i]) { - int p1 = indices[previous] << 1, p2 = indices[i] << 1, p3 = indices[next] << 1; - float p1x = vertices[p1], p1y = vertices[p1 + 1]; - float p2x = vertices[p2], p2y = vertices[p2 + 1]; - float p3x = vertices[p3], p3y = vertices[p3 + 1]; - for (ii = (next + 1) % vertexCount; ii != previous; ii = (ii + 1) % vertexCount) { - int v; - float vx, vy; - if (!isConcave[ii]) continue; - v = indices[ii] << 1; - vx = vertices[v]; - vy = vertices[v + 1]; - if (_positiveArea(p3x, p3y, p1x, p1y, vx, vy)) { - if (_positiveArea(p1x, p1y, p2x, p2y, vx, vy)) { - if (_positiveArea(p2x, p2y, p3x, p3y, vx, vy)) goto break_outer; - } - } - } - break; - } - break_outer: - - if (next == 0) { - do { - if (!isConcave[i]) break; - i--; - } while (i > 0); - break; - } - - previous = i; - i = next; - next = (next + 1) % vertexCount; - } - - spShortArray_add(triangles, indices[(vertexCount + i - 1) % vertexCount]); - spShortArray_add(triangles, indices[i]); - spShortArray_add(triangles, indices[(i + 1) % vertexCount]); - spShortArray_removeAt(indicesArray, i); - spIntArray_removeAt(isConcaveArray, i); - vertexCount--; - - previousIndex = (vertexCount + i - 1) % vertexCount; - nextIndex = i == vertexCount ? 0 : i; - isConcave[previousIndex] = _isConcave(previousIndex, vertexCount, vertices, indices); - isConcave[nextIndex] = _isConcave(nextIndex, vertexCount, vertices, indices); - } - - if (vertexCount == 3) { - spShortArray_add(triangles, indices[2]); - spShortArray_add(triangles, indices[0]); - spShortArray_add(triangles, indices[1]); - } - - return triangles; -} - -spArrayFloatArray * -spTriangulator_decompose(spTriangulator *self, spFloatArray *verticesArray, spShortArray *triangles) { - float *vertices = verticesArray->items; - - spArrayFloatArray *convexPolygons = self->convexPolygons; - spArrayShortArray *convexPolygonsIndices; - spShortArray *polygonIndices; - spFloatArray *polygon; - - int fanBaseIndex, lastWinding; - short *trianglesItems; - int i, n; - - _freeAllPolygons(self, convexPolygons); - spArrayFloatArray_clear(convexPolygons); - - convexPolygonsIndices = self->convexPolygonsIndices; - _freeAllPolygonIndices(self, convexPolygonsIndices); - spArrayShortArray_clear(convexPolygonsIndices); - - polygonIndices = _obtainPolygonIndices(self); - spShortArray_clear(polygonIndices); - - polygon = _obtainPolygon(self); - spFloatArray_clear(polygon); - - fanBaseIndex = -1; - lastWinding = 0; - trianglesItems = triangles->items; - for (i = 0, n = triangles->size; i < n; i += 3) { - int t1 = trianglesItems[i] << 1, t2 = trianglesItems[i + 1] << 1, t3 = trianglesItems[i + 2] << 1; - float x1 = vertices[t1], y1 = vertices[t1 + 1]; - float x2 = vertices[t2], y2 = vertices[t2 + 1]; - float x3 = vertices[t3], y3 = vertices[t3 + 1]; - - int merged = 0; - if (fanBaseIndex == t1) { - int o = polygon->size - 4; - float *p = polygon->items; - int winding1 = _winding(p[o], p[o + 1], p[o + 2], p[o + 3], x3, y3); - int winding2 = _winding(x3, y3, p[0], p[1], p[2], p[3]); - if (winding1 == lastWinding && winding2 == lastWinding) { - spFloatArray_add(polygon, x3); - spFloatArray_add(polygon, y3); - spShortArray_add(polygonIndices, t3); - merged = 1; - } - } - - if (!merged) { - if (polygon->size > 0) { - spArrayFloatArray_add(convexPolygons, polygon); - spArrayShortArray_add(convexPolygonsIndices, polygonIndices); - } else { - _freePolygon(self, polygon); - _freePolygonIndices(self, polygonIndices); - } - polygon = _obtainPolygon(self); - spFloatArray_clear(polygon); - spFloatArray_add(polygon, x1); - spFloatArray_add(polygon, y1); - spFloatArray_add(polygon, x2); - spFloatArray_add(polygon, y2); - spFloatArray_add(polygon, x3); - spFloatArray_add(polygon, y3); - polygonIndices = _obtainPolygonIndices(self); - spShortArray_clear(polygonIndices); - spShortArray_add(polygonIndices, t1); - spShortArray_add(polygonIndices, t2); - spShortArray_add(polygonIndices, t3); - lastWinding = _winding(x1, y1, x2, y2, x3, y3); - fanBaseIndex = t1; - } - } - - if (polygon->size > 0) { - spArrayFloatArray_add(convexPolygons, polygon); - spArrayShortArray_add(convexPolygonsIndices, polygonIndices); - } - - for (i = 0, n = convexPolygons->size; i < n; i++) { - int firstIndex, lastIndex; - int o; - float *p; - float prevPrevX, prevPrevY, prevX, prevY, firstX, firstY, secondX, secondY; - int winding; - int ii; - - polygonIndices = convexPolygonsIndices->items[i]; - if (polygonIndices->size == 0) continue; - firstIndex = polygonIndices->items[0]; - lastIndex = polygonIndices->items[polygonIndices->size - 1]; - - polygon = convexPolygons->items[i]; - o = polygon->size - 4; - p = polygon->items; - prevPrevX = p[o]; - prevPrevY = p[o + 1]; - prevX = p[o + 2]; - prevY = p[o + 3]; - firstX = p[0]; - firstY = p[1]; - secondX = p[2]; - secondY = p[3]; - winding = _winding(prevPrevX, prevPrevY, prevX, prevY, firstX, firstY); - - for (ii = 0; ii < n; ii++) { - spShortArray *otherIndices; - int otherFirstIndex, otherSecondIndex, otherLastIndex; - spFloatArray *otherPoly; - float x3, y3; - int winding1, winding2; - - if (ii == i) continue; - otherIndices = convexPolygonsIndices->items[ii]; - if (otherIndices->size != 3) continue; - otherFirstIndex = otherIndices->items[0]; - otherSecondIndex = otherIndices->items[1]; - otherLastIndex = otherIndices->items[2]; - - otherPoly = convexPolygons->items[ii]; - x3 = otherPoly->items[otherPoly->size - 2]; - y3 = otherPoly->items[otherPoly->size - 1]; - - if (otherFirstIndex != firstIndex || otherSecondIndex != lastIndex) continue; - winding1 = _winding(prevPrevX, prevPrevY, prevX, prevY, x3, y3); - winding2 = _winding(x3, y3, firstX, firstY, secondX, secondY); - if (winding1 == winding && winding2 == winding) { - spFloatArray_clear(otherPoly); - spShortArray_clear(otherIndices); - spFloatArray_add(polygon, x3); - spFloatArray_add(polygon, y3); - spShortArray_add(polygonIndices, otherLastIndex); - prevPrevX = prevX; - prevPrevY = prevY; - prevX = x3; - prevY = y3; - ii = 0; - } - } - } - - for (i = convexPolygons->size - 1; i >= 0; i--) { - polygon = convexPolygons->items[i]; - if (polygon->size == 0) { - spArrayFloatArray_removeAt(convexPolygons, i); - _freePolygon(self, polygon); - polygonIndices = convexPolygonsIndices->items[i]; - spArrayShortArray_removeAt(convexPolygonsIndices, i); - _freePolygonIndices(self, polygonIndices); - } - } - - return convexPolygons; -} diff --git a/spine-c/spine-c/src/spine/VertexAttachment.c b/spine-c/spine-c/src/spine/VertexAttachment.c deleted file mode 100644 index a4f013b6a..000000000 --- a/spine-c/spine-c/src/spine/VertexAttachment.c +++ /dev/null @@ -1,147 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -/* FIXME this is not thread-safe */ -static int nextID = 0; - -void _spVertexAttachment_init(spVertexAttachment *attachment) { - attachment->id = nextID++; - attachment->timelineAttachment = SUPER(attachment); -} - -void _spVertexAttachment_deinit(spVertexAttachment *attachment) { - _spAttachment_deinit(SUPER(attachment)); - FREE(attachment->bones); - FREE(attachment->vertices); -} - -void spVertexAttachment_computeWorldVertices(spVertexAttachment *self, spSlot *slot, int start, int count, - float *worldVertices, int offset, int stride) { - spSkeleton *skeleton; - int deformLength; - float *deformArray; - float *vertices; - int *bones; - - if (self->super.type == SP_ATTACHMENT_MESH || self->super.type == SP_ATTACHMENT_LINKED_MESH) { - spMeshAttachment *mesh = SUB_CAST(spMeshAttachment, self); - if (mesh->sequence) spSequence_apply(mesh->sequence, slot, SUPER(self)); - } - - count = offset + (count >> 1) * stride; - skeleton = slot->bone->skeleton; - deformLength = slot->deformCount; - deformArray = slot->deform; - vertices = self->vertices; - bones = self->bones; - if (!bones) { - spBone *bone; - int v, w; - float x, y; - if (deformLength > 0) vertices = deformArray; - bone = slot->bone; - x = bone->worldX; - y = bone->worldY; - for (v = start, w = offset; w < count; v += 2, w += stride) { - float vx = vertices[v], vy = vertices[v + 1]; - worldVertices[w] = vx * bone->a + vy * bone->b + x; - worldVertices[w + 1] = vx * bone->c + vy * bone->d + y; - } - } else { - int v = 0, skip = 0, i; - spBone **skeletonBones; - for (i = 0; i < start; i += 2) { - int n = bones[v]; - v += n + 1; - skip += n; - } - skeletonBones = skeleton->bones; - if (deformLength == 0) { - int w, b; - for (w = offset, b = skip * 3; w < count; w += stride) { - float wx = 0, wy = 0; - int n = bones[v++]; - n += v; - for (; v < n; v++, b += 3) { - spBone *bone = skeletonBones[bones[v]]; - float vx = vertices[b], vy = vertices[b + 1], weight = vertices[b + 2]; - wx += (vx * bone->a + vy * bone->b + bone->worldX) * weight; - wy += (vx * bone->c + vy * bone->d + bone->worldY) * weight; - } - worldVertices[w] = wx; - worldVertices[w + 1] = wy; - } - } else { - int w, b, f; - for (w = offset, b = skip * 3, f = skip << 1; w < count; w += stride) { - float wx = 0, wy = 0; - int n = bones[v++]; - n += v; - for (; v < n; v++, b += 3, f += 2) { - spBone *bone = skeletonBones[bones[v]]; - float vx = vertices[b] + deformArray[f], vy = vertices[b + 1] + deformArray[f + 1], weight = vertices[b + 2]; - wx += (vx * bone->a + vy * bone->b + bone->worldX) * weight; - wy += (vx * bone->c + vy * bone->d + bone->worldY) * weight; - } - worldVertices[w] = wx; - worldVertices[w + 1] = wy; - } - } - } -} - -void spVertexAttachment_copyTo(spVertexAttachment *from, spVertexAttachment *to) { - if (from->bonesCount) { - to->bonesCount = from->bonesCount; - to->bones = MALLOC(int, from->bonesCount); - memcpy(to->bones, from->bones, from->bonesCount * sizeof(int)); - } else { - to->bonesCount = 0; - if (to->bones) { - FREE(to->bones); - to->bones = 0; - } - } - - if (from->verticesCount) { - to->verticesCount = from->verticesCount; - to->vertices = MALLOC(float, from->verticesCount); - memcpy(to->vertices, from->vertices, from->verticesCount * sizeof(float)); - } else { - to->verticesCount = 0; - if (to->vertices) { - FREE(to->vertices); - to->vertices = 0; - } - } - to->worldVerticesLength = from->worldVerticesLength; -} diff --git a/spine-c/spine-c/src/spine/extension.c b/spine-c/spine-c/src/spine/extension.c deleted file mode 100644 index 67fccb43d..000000000 --- a/spine-c/spine-c/src/spine/extension.c +++ /dev/null @@ -1,136 +0,0 @@ -/****************************************************************************** - * Spine Runtimes License Agreement - * Last updated April 5, 2025. Replaces all prior versions. - * - * Copyright (c) 2013-2025, Esoteric Software LLC - * - * Integration of the Spine Runtimes into software or otherwise creating - * derivative works of the Spine Runtimes is permitted under the terms and - * conditions of Section 2 of the Spine Editor License Agreement: - * http://esotericsoftware.com/spine-editor-license - * - * Otherwise, it is permitted to integrate the Spine Runtimes into software - * or otherwise create derivative works of the Spine Runtimes (collectively, - * "Products"), provided that each user of the Products must obtain their own - * Spine Editor license and redistribution of the Products in any form must - * include this license and copyright notice. - * - * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, - * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -float _spInternalRandom(void) { - return rand() / (float) RAND_MAX; -} - -static void *(*mallocFunc)(size_t size) = malloc; - -static void *(*reallocFunc)(void *ptr, size_t size) = realloc; - -static void *(*debugMallocFunc)(size_t size, const char *file, int line) = NULL; - -static void (*freeFunc)(void *ptr) = free; - -static float (*randomFunc)(void) = _spInternalRandom; - -void *_spMalloc(size_t size, const char *file, int line) { - if (debugMallocFunc) - return debugMallocFunc(size, file, line); - - return mallocFunc(size); -} - -void *_spCalloc(size_t num, size_t size, const char *file, int line) { - void *ptr = _spMalloc(num * size, file, line); - if (ptr) memset(ptr, 0, num * size); - return ptr; -} - -void *_spRealloc(void *ptr, size_t size) { - return reallocFunc(ptr, size); -} - -void _spFree(void *ptr) { - freeFunc(ptr); -} - -float _spRandom(void) { - return randomFunc(); -} - -void _spSetDebugMalloc(void *(*malloc)(size_t size, const char *file, int line)) { - debugMallocFunc = malloc; -} - -void _spSetMalloc(void *(*malloc)(size_t size)) { - mallocFunc = malloc; -} - -void _spSetRealloc(void *(*realloc)(void *ptr, size_t size)) { - reallocFunc = realloc; -} - -void _spSetFree(void (*free)(void *ptr)) { - freeFunc = free; -} - -void _spSetRandom(float (*random)(void)) { - randomFunc = random; -} - -char *_spReadFile(const char *path, int *length) { - char *data; - size_t result; - FILE *file = fopen(path, "rb"); - if (!file) return 0; - - fseek(file, 0, SEEK_END); - *length = (int) ftell(file); - fseek(file, 0, SEEK_SET); - - data = MALLOC(char, *length); - result = fread(data, 1, *length, file); - UNUSED(result); - fclose(file); - - return data; -} - -float _spMath_random(float min, float max) { - return min + (max - min) * _spRandom(); -} - -float _spMath_randomTriangular(float min, float max) { - return _spMath_randomTriangularWith(min, max, (min + max) * 0.5f); -} - -float _spMath_randomTriangularWith(float min, float max, float mode) { - float u = _spRandom(); - float d = max - min; - if (u <= (mode - min) / d) return min + SQRT(u * d * (mode - min)); - return max - SQRT((1 - u) * d * (max - mode)); -} - -float _spMath_interpolate(float (*apply)(float a), float start, float end, float a) { - return start + (end - start) * apply(a); -} - -float _spMath_pow2_apply(float a) { - if (a <= 0.5) return POW(a * 2, 2) / 2; - return POW((a - 1) * 2, 2) / -2 + 1; -} - -float _spMath_pow2out_apply(float a) { - return POW(a - 1, 2) * -1 + 1; -} diff --git a/spine-c-new/src/base.h b/spine-c/src/base.h similarity index 100% rename from spine-c-new/src/base.h rename to spine-c/src/base.h diff --git a/spine-c-new/src/extensions.cpp b/spine-c/src/extensions.cpp similarity index 100% rename from spine-c-new/src/extensions.cpp rename to spine-c/src/extensions.cpp diff --git a/spine-c-new/src/extensions.h b/spine-c/src/extensions.h similarity index 100% rename from spine-c-new/src/extensions.h rename to spine-c/src/extensions.h diff --git a/spine-c-new/src/generated/alpha_timeline.cpp b/spine-c/src/generated/alpha_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/alpha_timeline.cpp rename to spine-c/src/generated/alpha_timeline.cpp diff --git a/spine-c-new/src/generated/alpha_timeline.h b/spine-c/src/generated/alpha_timeline.h similarity index 100% rename from spine-c-new/src/generated/alpha_timeline.h rename to spine-c/src/generated/alpha_timeline.h diff --git a/spine-c-new/src/generated/animation.cpp b/spine-c/src/generated/animation.cpp similarity index 100% rename from spine-c-new/src/generated/animation.cpp rename to spine-c/src/generated/animation.cpp diff --git a/spine-c-new/src/generated/animation.h b/spine-c/src/generated/animation.h similarity index 100% rename from spine-c-new/src/generated/animation.h rename to spine-c/src/generated/animation.h diff --git a/spine-c-new/src/generated/animation_state.cpp b/spine-c/src/generated/animation_state.cpp similarity index 100% rename from spine-c-new/src/generated/animation_state.cpp rename to spine-c/src/generated/animation_state.cpp diff --git a/spine-c-new/src/generated/animation_state.h b/spine-c/src/generated/animation_state.h similarity index 100% rename from spine-c-new/src/generated/animation_state.h rename to spine-c/src/generated/animation_state.h diff --git a/spine-c-new/src/generated/animation_state_data.cpp b/spine-c/src/generated/animation_state_data.cpp similarity index 100% rename from spine-c-new/src/generated/animation_state_data.cpp rename to spine-c/src/generated/animation_state_data.cpp diff --git a/spine-c-new/src/generated/animation_state_data.h b/spine-c/src/generated/animation_state_data.h similarity index 100% rename from spine-c-new/src/generated/animation_state_data.h rename to spine-c/src/generated/animation_state_data.h diff --git a/spine-c-new/src/generated/arrays.cpp b/spine-c/src/generated/arrays.cpp similarity index 100% rename from spine-c-new/src/generated/arrays.cpp rename to spine-c/src/generated/arrays.cpp diff --git a/spine-c-new/src/generated/arrays.h b/spine-c/src/generated/arrays.h similarity index 100% rename from spine-c-new/src/generated/arrays.h rename to spine-c/src/generated/arrays.h diff --git a/spine-c-new/src/generated/atlas.cpp b/spine-c/src/generated/atlas.cpp similarity index 100% rename from spine-c-new/src/generated/atlas.cpp rename to spine-c/src/generated/atlas.cpp diff --git a/spine-c-new/src/generated/atlas.h b/spine-c/src/generated/atlas.h similarity index 100% rename from spine-c-new/src/generated/atlas.h rename to spine-c/src/generated/atlas.h diff --git a/spine-c-new/src/generated/atlas_attachment_loader.cpp b/spine-c/src/generated/atlas_attachment_loader.cpp similarity index 100% rename from spine-c-new/src/generated/atlas_attachment_loader.cpp rename to spine-c/src/generated/atlas_attachment_loader.cpp diff --git a/spine-c-new/src/generated/atlas_attachment_loader.h b/spine-c/src/generated/atlas_attachment_loader.h similarity index 100% rename from spine-c-new/src/generated/atlas_attachment_loader.h rename to spine-c/src/generated/atlas_attachment_loader.h diff --git a/spine-c-new/src/generated/atlas_page.cpp b/spine-c/src/generated/atlas_page.cpp similarity index 100% rename from spine-c-new/src/generated/atlas_page.cpp rename to spine-c/src/generated/atlas_page.cpp diff --git a/spine-c-new/src/generated/atlas_page.h b/spine-c/src/generated/atlas_page.h similarity index 100% rename from spine-c-new/src/generated/atlas_page.h rename to spine-c/src/generated/atlas_page.h diff --git a/spine-c-new/src/generated/atlas_region.cpp b/spine-c/src/generated/atlas_region.cpp similarity index 100% rename from spine-c-new/src/generated/atlas_region.cpp rename to spine-c/src/generated/atlas_region.cpp diff --git a/spine-c-new/src/generated/atlas_region.h b/spine-c/src/generated/atlas_region.h similarity index 100% rename from spine-c-new/src/generated/atlas_region.h rename to spine-c/src/generated/atlas_region.h diff --git a/spine-c-new/src/generated/attachment.cpp b/spine-c/src/generated/attachment.cpp similarity index 100% rename from spine-c-new/src/generated/attachment.cpp rename to spine-c/src/generated/attachment.cpp diff --git a/spine-c-new/src/generated/attachment.h b/spine-c/src/generated/attachment.h similarity index 100% rename from spine-c-new/src/generated/attachment.h rename to spine-c/src/generated/attachment.h diff --git a/spine-c-new/src/generated/attachment_loader.cpp b/spine-c/src/generated/attachment_loader.cpp similarity index 100% rename from spine-c-new/src/generated/attachment_loader.cpp rename to spine-c/src/generated/attachment_loader.cpp diff --git a/spine-c-new/src/generated/attachment_loader.h b/spine-c/src/generated/attachment_loader.h similarity index 100% rename from spine-c-new/src/generated/attachment_loader.h rename to spine-c/src/generated/attachment_loader.h diff --git a/spine-c-new/src/generated/attachment_timeline.cpp b/spine-c/src/generated/attachment_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/attachment_timeline.cpp rename to spine-c/src/generated/attachment_timeline.cpp diff --git a/spine-c-new/src/generated/attachment_timeline.h b/spine-c/src/generated/attachment_timeline.h similarity index 100% rename from spine-c-new/src/generated/attachment_timeline.h rename to spine-c/src/generated/attachment_timeline.h diff --git a/spine-c-new/src/generated/attachment_type.h b/spine-c/src/generated/attachment_type.h similarity index 100% rename from spine-c-new/src/generated/attachment_type.h rename to spine-c/src/generated/attachment_type.h diff --git a/spine-c-new/src/generated/blend_mode.h b/spine-c/src/generated/blend_mode.h similarity index 100% rename from spine-c-new/src/generated/blend_mode.h rename to spine-c/src/generated/blend_mode.h diff --git a/spine-c-new/src/generated/bone.cpp b/spine-c/src/generated/bone.cpp similarity index 100% rename from spine-c-new/src/generated/bone.cpp rename to spine-c/src/generated/bone.cpp diff --git a/spine-c-new/src/generated/bone.h b/spine-c/src/generated/bone.h similarity index 100% rename from spine-c-new/src/generated/bone.h rename to spine-c/src/generated/bone.h diff --git a/spine-c-new/src/generated/bone_data.cpp b/spine-c/src/generated/bone_data.cpp similarity index 100% rename from spine-c-new/src/generated/bone_data.cpp rename to spine-c/src/generated/bone_data.cpp diff --git a/spine-c-new/src/generated/bone_data.h b/spine-c/src/generated/bone_data.h similarity index 100% rename from spine-c-new/src/generated/bone_data.h rename to spine-c/src/generated/bone_data.h diff --git a/spine-c-new/src/generated/bone_local.cpp b/spine-c/src/generated/bone_local.cpp similarity index 100% rename from spine-c-new/src/generated/bone_local.cpp rename to spine-c/src/generated/bone_local.cpp diff --git a/spine-c-new/src/generated/bone_local.h b/spine-c/src/generated/bone_local.h similarity index 100% rename from spine-c-new/src/generated/bone_local.h rename to spine-c/src/generated/bone_local.h diff --git a/spine-c-new/src/generated/bone_pose.cpp b/spine-c/src/generated/bone_pose.cpp similarity index 100% rename from spine-c-new/src/generated/bone_pose.cpp rename to spine-c/src/generated/bone_pose.cpp diff --git a/spine-c-new/src/generated/bone_pose.h b/spine-c/src/generated/bone_pose.h similarity index 100% rename from spine-c-new/src/generated/bone_pose.h rename to spine-c/src/generated/bone_pose.h diff --git a/spine-c-new/src/generated/bone_timeline.cpp b/spine-c/src/generated/bone_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/bone_timeline.cpp rename to spine-c/src/generated/bone_timeline.cpp diff --git a/spine-c-new/src/generated/bone_timeline.h b/spine-c/src/generated/bone_timeline.h similarity index 100% rename from spine-c-new/src/generated/bone_timeline.h rename to spine-c/src/generated/bone_timeline.h diff --git a/spine-c-new/src/generated/bone_timeline1.cpp b/spine-c/src/generated/bone_timeline1.cpp similarity index 100% rename from spine-c-new/src/generated/bone_timeline1.cpp rename to spine-c/src/generated/bone_timeline1.cpp diff --git a/spine-c-new/src/generated/bone_timeline1.h b/spine-c/src/generated/bone_timeline1.h similarity index 100% rename from spine-c-new/src/generated/bone_timeline1.h rename to spine-c/src/generated/bone_timeline1.h diff --git a/spine-c-new/src/generated/bone_timeline2.cpp b/spine-c/src/generated/bone_timeline2.cpp similarity index 100% rename from spine-c-new/src/generated/bone_timeline2.cpp rename to spine-c/src/generated/bone_timeline2.cpp diff --git a/spine-c-new/src/generated/bone_timeline2.h b/spine-c/src/generated/bone_timeline2.h similarity index 100% rename from spine-c-new/src/generated/bone_timeline2.h rename to spine-c/src/generated/bone_timeline2.h diff --git a/spine-c-new/src/generated/bounding_box_attachment.cpp b/spine-c/src/generated/bounding_box_attachment.cpp similarity index 100% rename from spine-c-new/src/generated/bounding_box_attachment.cpp rename to spine-c/src/generated/bounding_box_attachment.cpp diff --git a/spine-c-new/src/generated/bounding_box_attachment.h b/spine-c/src/generated/bounding_box_attachment.h similarity index 100% rename from spine-c-new/src/generated/bounding_box_attachment.h rename to spine-c/src/generated/bounding_box_attachment.h diff --git a/spine-c-new/src/generated/clipping_attachment.cpp b/spine-c/src/generated/clipping_attachment.cpp similarity index 100% rename from spine-c-new/src/generated/clipping_attachment.cpp rename to spine-c/src/generated/clipping_attachment.cpp diff --git a/spine-c-new/src/generated/clipping_attachment.h b/spine-c/src/generated/clipping_attachment.h similarity index 100% rename from spine-c-new/src/generated/clipping_attachment.h rename to spine-c/src/generated/clipping_attachment.h diff --git a/spine-c-new/src/generated/color.cpp b/spine-c/src/generated/color.cpp similarity index 100% rename from spine-c-new/src/generated/color.cpp rename to spine-c/src/generated/color.cpp diff --git a/spine-c-new/src/generated/color.h b/spine-c/src/generated/color.h similarity index 100% rename from spine-c-new/src/generated/color.h rename to spine-c/src/generated/color.h diff --git a/spine-c-new/src/generated/constraint.cpp b/spine-c/src/generated/constraint.cpp similarity index 100% rename from spine-c-new/src/generated/constraint.cpp rename to spine-c/src/generated/constraint.cpp diff --git a/spine-c-new/src/generated/constraint.h b/spine-c/src/generated/constraint.h similarity index 100% rename from spine-c-new/src/generated/constraint.h rename to spine-c/src/generated/constraint.h diff --git a/spine-c-new/src/generated/constraint_data.cpp b/spine-c/src/generated/constraint_data.cpp similarity index 100% rename from spine-c-new/src/generated/constraint_data.cpp rename to spine-c/src/generated/constraint_data.cpp diff --git a/spine-c-new/src/generated/constraint_data.h b/spine-c/src/generated/constraint_data.h similarity index 100% rename from spine-c-new/src/generated/constraint_data.h rename to spine-c/src/generated/constraint_data.h diff --git a/spine-c-new/src/generated/constraint_timeline.cpp b/spine-c/src/generated/constraint_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/constraint_timeline.cpp rename to spine-c/src/generated/constraint_timeline.cpp diff --git a/spine-c-new/src/generated/constraint_timeline.h b/spine-c/src/generated/constraint_timeline.h similarity index 100% rename from spine-c-new/src/generated/constraint_timeline.h rename to spine-c/src/generated/constraint_timeline.h diff --git a/spine-c-new/src/generated/constraint_timeline1.cpp b/spine-c/src/generated/constraint_timeline1.cpp similarity index 100% rename from spine-c-new/src/generated/constraint_timeline1.cpp rename to spine-c/src/generated/constraint_timeline1.cpp diff --git a/spine-c-new/src/generated/constraint_timeline1.h b/spine-c/src/generated/constraint_timeline1.h similarity index 100% rename from spine-c-new/src/generated/constraint_timeline1.h rename to spine-c/src/generated/constraint_timeline1.h diff --git a/spine-c-new/src/generated/curve_timeline.cpp b/spine-c/src/generated/curve_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/curve_timeline.cpp rename to spine-c/src/generated/curve_timeline.cpp diff --git a/spine-c-new/src/generated/curve_timeline.h b/spine-c/src/generated/curve_timeline.h similarity index 100% rename from spine-c-new/src/generated/curve_timeline.h rename to spine-c/src/generated/curve_timeline.h diff --git a/spine-c-new/src/generated/curve_timeline1.cpp b/spine-c/src/generated/curve_timeline1.cpp similarity index 100% rename from spine-c-new/src/generated/curve_timeline1.cpp rename to spine-c/src/generated/curve_timeline1.cpp diff --git a/spine-c-new/src/generated/curve_timeline1.h b/spine-c/src/generated/curve_timeline1.h similarity index 100% rename from spine-c-new/src/generated/curve_timeline1.h rename to spine-c/src/generated/curve_timeline1.h diff --git a/spine-c-new/src/generated/curve_timeline2.cpp b/spine-c/src/generated/curve_timeline2.cpp similarity index 100% rename from spine-c-new/src/generated/curve_timeline2.cpp rename to spine-c/src/generated/curve_timeline2.cpp diff --git a/spine-c-new/src/generated/curve_timeline2.h b/spine-c/src/generated/curve_timeline2.h similarity index 100% rename from spine-c-new/src/generated/curve_timeline2.h rename to spine-c/src/generated/curve_timeline2.h diff --git a/spine-c-new/src/generated/deform_timeline.cpp b/spine-c/src/generated/deform_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/deform_timeline.cpp rename to spine-c/src/generated/deform_timeline.cpp diff --git a/spine-c-new/src/generated/deform_timeline.h b/spine-c/src/generated/deform_timeline.h similarity index 100% rename from spine-c-new/src/generated/deform_timeline.h rename to spine-c/src/generated/deform_timeline.h diff --git a/spine-c-new/src/generated/draw_order_timeline.cpp b/spine-c/src/generated/draw_order_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/draw_order_timeline.cpp rename to spine-c/src/generated/draw_order_timeline.cpp diff --git a/spine-c-new/src/generated/draw_order_timeline.h b/spine-c/src/generated/draw_order_timeline.h similarity index 100% rename from spine-c-new/src/generated/draw_order_timeline.h rename to spine-c/src/generated/draw_order_timeline.h diff --git a/spine-c-new/src/generated/event.cpp b/spine-c/src/generated/event.cpp similarity index 100% rename from spine-c-new/src/generated/event.cpp rename to spine-c/src/generated/event.cpp diff --git a/spine-c-new/src/generated/event.h b/spine-c/src/generated/event.h similarity index 100% rename from spine-c-new/src/generated/event.h rename to spine-c/src/generated/event.h diff --git a/spine-c-new/src/generated/event_data.cpp b/spine-c/src/generated/event_data.cpp similarity index 100% rename from spine-c-new/src/generated/event_data.cpp rename to spine-c/src/generated/event_data.cpp diff --git a/spine-c-new/src/generated/event_data.h b/spine-c/src/generated/event_data.h similarity index 100% rename from spine-c-new/src/generated/event_data.h rename to spine-c/src/generated/event_data.h diff --git a/spine-c-new/src/generated/event_queue_entry.cpp b/spine-c/src/generated/event_queue_entry.cpp similarity index 100% rename from spine-c-new/src/generated/event_queue_entry.cpp rename to spine-c/src/generated/event_queue_entry.cpp diff --git a/spine-c-new/src/generated/event_queue_entry.h b/spine-c/src/generated/event_queue_entry.h similarity index 100% rename from spine-c-new/src/generated/event_queue_entry.h rename to spine-c/src/generated/event_queue_entry.h diff --git a/spine-c-new/src/generated/event_timeline.cpp b/spine-c/src/generated/event_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/event_timeline.cpp rename to spine-c/src/generated/event_timeline.cpp diff --git a/spine-c-new/src/generated/event_timeline.h b/spine-c/src/generated/event_timeline.h similarity index 100% rename from spine-c-new/src/generated/event_timeline.h rename to spine-c/src/generated/event_timeline.h diff --git a/spine-c-new/src/generated/event_type.h b/spine-c/src/generated/event_type.h similarity index 100% rename from spine-c-new/src/generated/event_type.h rename to spine-c/src/generated/event_type.h diff --git a/spine-c-new/src/generated/format.h b/spine-c/src/generated/format.h similarity index 100% rename from spine-c-new/src/generated/format.h rename to spine-c/src/generated/format.h diff --git a/spine-c-new/src/generated/from_property.cpp b/spine-c/src/generated/from_property.cpp similarity index 100% rename from spine-c-new/src/generated/from_property.cpp rename to spine-c/src/generated/from_property.cpp diff --git a/spine-c-new/src/generated/from_property.h b/spine-c/src/generated/from_property.h similarity index 100% rename from spine-c-new/src/generated/from_property.h rename to spine-c/src/generated/from_property.h diff --git a/spine-c-new/src/generated/from_rotate.cpp b/spine-c/src/generated/from_rotate.cpp similarity index 100% rename from spine-c-new/src/generated/from_rotate.cpp rename to spine-c/src/generated/from_rotate.cpp diff --git a/spine-c-new/src/generated/from_rotate.h b/spine-c/src/generated/from_rotate.h similarity index 100% rename from spine-c-new/src/generated/from_rotate.h rename to spine-c/src/generated/from_rotate.h diff --git a/spine-c-new/src/generated/from_scale_x.cpp b/spine-c/src/generated/from_scale_x.cpp similarity index 100% rename from spine-c-new/src/generated/from_scale_x.cpp rename to spine-c/src/generated/from_scale_x.cpp diff --git a/spine-c-new/src/generated/from_scale_x.h b/spine-c/src/generated/from_scale_x.h similarity index 100% rename from spine-c-new/src/generated/from_scale_x.h rename to spine-c/src/generated/from_scale_x.h diff --git a/spine-c-new/src/generated/from_scale_y.cpp b/spine-c/src/generated/from_scale_y.cpp similarity index 100% rename from spine-c-new/src/generated/from_scale_y.cpp rename to spine-c/src/generated/from_scale_y.cpp diff --git a/spine-c-new/src/generated/from_scale_y.h b/spine-c/src/generated/from_scale_y.h similarity index 100% rename from spine-c-new/src/generated/from_scale_y.h rename to spine-c/src/generated/from_scale_y.h diff --git a/spine-c-new/src/generated/from_shear_y.cpp b/spine-c/src/generated/from_shear_y.cpp similarity index 100% rename from spine-c-new/src/generated/from_shear_y.cpp rename to spine-c/src/generated/from_shear_y.cpp diff --git a/spine-c-new/src/generated/from_shear_y.h b/spine-c/src/generated/from_shear_y.h similarity index 100% rename from spine-c-new/src/generated/from_shear_y.h rename to spine-c/src/generated/from_shear_y.h diff --git a/spine-c-new/src/generated/from_x.cpp b/spine-c/src/generated/from_x.cpp similarity index 100% rename from spine-c-new/src/generated/from_x.cpp rename to spine-c/src/generated/from_x.cpp diff --git a/spine-c-new/src/generated/from_x.h b/spine-c/src/generated/from_x.h similarity index 100% rename from spine-c-new/src/generated/from_x.h rename to spine-c/src/generated/from_x.h diff --git a/spine-c-new/src/generated/from_y.cpp b/spine-c/src/generated/from_y.cpp similarity index 100% rename from spine-c-new/src/generated/from_y.cpp rename to spine-c/src/generated/from_y.cpp diff --git a/spine-c-new/src/generated/from_y.h b/spine-c/src/generated/from_y.h similarity index 100% rename from spine-c-new/src/generated/from_y.h rename to spine-c/src/generated/from_y.h diff --git a/spine-c-new/src/generated/ik_constraint.cpp b/spine-c/src/generated/ik_constraint.cpp similarity index 100% rename from spine-c-new/src/generated/ik_constraint.cpp rename to spine-c/src/generated/ik_constraint.cpp diff --git a/spine-c-new/src/generated/ik_constraint.h b/spine-c/src/generated/ik_constraint.h similarity index 100% rename from spine-c-new/src/generated/ik_constraint.h rename to spine-c/src/generated/ik_constraint.h diff --git a/spine-c-new/src/generated/ik_constraint_data.cpp b/spine-c/src/generated/ik_constraint_data.cpp similarity index 100% rename from spine-c-new/src/generated/ik_constraint_data.cpp rename to spine-c/src/generated/ik_constraint_data.cpp diff --git a/spine-c-new/src/generated/ik_constraint_data.h b/spine-c/src/generated/ik_constraint_data.h similarity index 100% rename from spine-c-new/src/generated/ik_constraint_data.h rename to spine-c/src/generated/ik_constraint_data.h diff --git a/spine-c-new/src/generated/ik_constraint_pose.cpp b/spine-c/src/generated/ik_constraint_pose.cpp similarity index 100% rename from spine-c-new/src/generated/ik_constraint_pose.cpp rename to spine-c/src/generated/ik_constraint_pose.cpp diff --git a/spine-c-new/src/generated/ik_constraint_pose.h b/spine-c/src/generated/ik_constraint_pose.h similarity index 100% rename from spine-c-new/src/generated/ik_constraint_pose.h rename to spine-c/src/generated/ik_constraint_pose.h diff --git a/spine-c-new/src/generated/ik_constraint_timeline.cpp b/spine-c/src/generated/ik_constraint_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/ik_constraint_timeline.cpp rename to spine-c/src/generated/ik_constraint_timeline.cpp diff --git a/spine-c-new/src/generated/ik_constraint_timeline.h b/spine-c/src/generated/ik_constraint_timeline.h similarity index 100% rename from spine-c-new/src/generated/ik_constraint_timeline.h rename to spine-c/src/generated/ik_constraint_timeline.h diff --git a/spine-c-new/src/generated/inherit.h b/spine-c/src/generated/inherit.h similarity index 100% rename from spine-c-new/src/generated/inherit.h rename to spine-c/src/generated/inherit.h diff --git a/spine-c-new/src/generated/inherit_timeline.cpp b/spine-c/src/generated/inherit_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/inherit_timeline.cpp rename to spine-c/src/generated/inherit_timeline.cpp diff --git a/spine-c-new/src/generated/inherit_timeline.h b/spine-c/src/generated/inherit_timeline.h similarity index 100% rename from spine-c-new/src/generated/inherit_timeline.h rename to spine-c/src/generated/inherit_timeline.h diff --git a/spine-c-new/src/generated/linked_mesh.cpp b/spine-c/src/generated/linked_mesh.cpp similarity index 100% rename from spine-c-new/src/generated/linked_mesh.cpp rename to spine-c/src/generated/linked_mesh.cpp diff --git a/spine-c-new/src/generated/linked_mesh.h b/spine-c/src/generated/linked_mesh.h similarity index 100% rename from spine-c-new/src/generated/linked_mesh.h rename to spine-c/src/generated/linked_mesh.h diff --git a/spine-c-new/src/generated/mesh_attachment.cpp b/spine-c/src/generated/mesh_attachment.cpp similarity index 100% rename from spine-c-new/src/generated/mesh_attachment.cpp rename to spine-c/src/generated/mesh_attachment.cpp diff --git a/spine-c-new/src/generated/mesh_attachment.h b/spine-c/src/generated/mesh_attachment.h similarity index 100% rename from spine-c-new/src/generated/mesh_attachment.h rename to spine-c/src/generated/mesh_attachment.h diff --git a/spine-c-new/src/generated/mix_blend.h b/spine-c/src/generated/mix_blend.h similarity index 100% rename from spine-c-new/src/generated/mix_blend.h rename to spine-c/src/generated/mix_blend.h diff --git a/spine-c-new/src/generated/mix_direction.h b/spine-c/src/generated/mix_direction.h similarity index 100% rename from spine-c-new/src/generated/mix_direction.h rename to spine-c/src/generated/mix_direction.h diff --git a/spine-c-new/src/generated/path_attachment.cpp b/spine-c/src/generated/path_attachment.cpp similarity index 100% rename from spine-c-new/src/generated/path_attachment.cpp rename to spine-c/src/generated/path_attachment.cpp diff --git a/spine-c-new/src/generated/path_attachment.h b/spine-c/src/generated/path_attachment.h similarity index 100% rename from spine-c-new/src/generated/path_attachment.h rename to spine-c/src/generated/path_attachment.h diff --git a/spine-c-new/src/generated/path_constraint.cpp b/spine-c/src/generated/path_constraint.cpp similarity index 100% rename from spine-c-new/src/generated/path_constraint.cpp rename to spine-c/src/generated/path_constraint.cpp diff --git a/spine-c-new/src/generated/path_constraint.h b/spine-c/src/generated/path_constraint.h similarity index 100% rename from spine-c-new/src/generated/path_constraint.h rename to spine-c/src/generated/path_constraint.h diff --git a/spine-c-new/src/generated/path_constraint_data.cpp b/spine-c/src/generated/path_constraint_data.cpp similarity index 100% rename from spine-c-new/src/generated/path_constraint_data.cpp rename to spine-c/src/generated/path_constraint_data.cpp diff --git a/spine-c-new/src/generated/path_constraint_data.h b/spine-c/src/generated/path_constraint_data.h similarity index 100% rename from spine-c-new/src/generated/path_constraint_data.h rename to spine-c/src/generated/path_constraint_data.h diff --git a/spine-c-new/src/generated/path_constraint_mix_timeline.cpp b/spine-c/src/generated/path_constraint_mix_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/path_constraint_mix_timeline.cpp rename to spine-c/src/generated/path_constraint_mix_timeline.cpp diff --git a/spine-c-new/src/generated/path_constraint_mix_timeline.h b/spine-c/src/generated/path_constraint_mix_timeline.h similarity index 100% rename from spine-c-new/src/generated/path_constraint_mix_timeline.h rename to spine-c/src/generated/path_constraint_mix_timeline.h diff --git a/spine-c-new/src/generated/path_constraint_pose.cpp b/spine-c/src/generated/path_constraint_pose.cpp similarity index 100% rename from spine-c-new/src/generated/path_constraint_pose.cpp rename to spine-c/src/generated/path_constraint_pose.cpp diff --git a/spine-c-new/src/generated/path_constraint_pose.h b/spine-c/src/generated/path_constraint_pose.h similarity index 100% rename from spine-c-new/src/generated/path_constraint_pose.h rename to spine-c/src/generated/path_constraint_pose.h diff --git a/spine-c-new/src/generated/path_constraint_position_timeline.cpp b/spine-c/src/generated/path_constraint_position_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/path_constraint_position_timeline.cpp rename to spine-c/src/generated/path_constraint_position_timeline.cpp diff --git a/spine-c-new/src/generated/path_constraint_position_timeline.h b/spine-c/src/generated/path_constraint_position_timeline.h similarity index 100% rename from spine-c-new/src/generated/path_constraint_position_timeline.h rename to spine-c/src/generated/path_constraint_position_timeline.h diff --git a/spine-c-new/src/generated/path_constraint_spacing_timeline.cpp b/spine-c/src/generated/path_constraint_spacing_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/path_constraint_spacing_timeline.cpp rename to spine-c/src/generated/path_constraint_spacing_timeline.cpp diff --git a/spine-c-new/src/generated/path_constraint_spacing_timeline.h b/spine-c/src/generated/path_constraint_spacing_timeline.h similarity index 100% rename from spine-c-new/src/generated/path_constraint_spacing_timeline.h rename to spine-c/src/generated/path_constraint_spacing_timeline.h diff --git a/spine-c-new/src/generated/physics.h b/spine-c/src/generated/physics.h similarity index 100% rename from spine-c-new/src/generated/physics.h rename to spine-c/src/generated/physics.h diff --git a/spine-c-new/src/generated/physics_constraint.cpp b/spine-c/src/generated/physics_constraint.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint.cpp rename to spine-c/src/generated/physics_constraint.cpp diff --git a/spine-c-new/src/generated/physics_constraint.h b/spine-c/src/generated/physics_constraint.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint.h rename to spine-c/src/generated/physics_constraint.h diff --git a/spine-c-new/src/generated/physics_constraint_damping_timeline.cpp b/spine-c/src/generated/physics_constraint_damping_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint_damping_timeline.cpp rename to spine-c/src/generated/physics_constraint_damping_timeline.cpp diff --git a/spine-c-new/src/generated/physics_constraint_damping_timeline.h b/spine-c/src/generated/physics_constraint_damping_timeline.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint_damping_timeline.h rename to spine-c/src/generated/physics_constraint_damping_timeline.h diff --git a/spine-c-new/src/generated/physics_constraint_data.cpp b/spine-c/src/generated/physics_constraint_data.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint_data.cpp rename to spine-c/src/generated/physics_constraint_data.cpp diff --git a/spine-c-new/src/generated/physics_constraint_data.h b/spine-c/src/generated/physics_constraint_data.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint_data.h rename to spine-c/src/generated/physics_constraint_data.h diff --git a/spine-c-new/src/generated/physics_constraint_gravity_timeline.cpp b/spine-c/src/generated/physics_constraint_gravity_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint_gravity_timeline.cpp rename to spine-c/src/generated/physics_constraint_gravity_timeline.cpp diff --git a/spine-c-new/src/generated/physics_constraint_gravity_timeline.h b/spine-c/src/generated/physics_constraint_gravity_timeline.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint_gravity_timeline.h rename to spine-c/src/generated/physics_constraint_gravity_timeline.h diff --git a/spine-c-new/src/generated/physics_constraint_inertia_timeline.cpp b/spine-c/src/generated/physics_constraint_inertia_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint_inertia_timeline.cpp rename to spine-c/src/generated/physics_constraint_inertia_timeline.cpp diff --git a/spine-c-new/src/generated/physics_constraint_inertia_timeline.h b/spine-c/src/generated/physics_constraint_inertia_timeline.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint_inertia_timeline.h rename to spine-c/src/generated/physics_constraint_inertia_timeline.h diff --git a/spine-c-new/src/generated/physics_constraint_mass_timeline.cpp b/spine-c/src/generated/physics_constraint_mass_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint_mass_timeline.cpp rename to spine-c/src/generated/physics_constraint_mass_timeline.cpp diff --git a/spine-c-new/src/generated/physics_constraint_mass_timeline.h b/spine-c/src/generated/physics_constraint_mass_timeline.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint_mass_timeline.h rename to spine-c/src/generated/physics_constraint_mass_timeline.h diff --git a/spine-c-new/src/generated/physics_constraint_mix_timeline.cpp b/spine-c/src/generated/physics_constraint_mix_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint_mix_timeline.cpp rename to spine-c/src/generated/physics_constraint_mix_timeline.cpp diff --git a/spine-c-new/src/generated/physics_constraint_mix_timeline.h b/spine-c/src/generated/physics_constraint_mix_timeline.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint_mix_timeline.h rename to spine-c/src/generated/physics_constraint_mix_timeline.h diff --git a/spine-c-new/src/generated/physics_constraint_pose.cpp b/spine-c/src/generated/physics_constraint_pose.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint_pose.cpp rename to spine-c/src/generated/physics_constraint_pose.cpp diff --git a/spine-c-new/src/generated/physics_constraint_pose.h b/spine-c/src/generated/physics_constraint_pose.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint_pose.h rename to spine-c/src/generated/physics_constraint_pose.h diff --git a/spine-c-new/src/generated/physics_constraint_reset_timeline.cpp b/spine-c/src/generated/physics_constraint_reset_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint_reset_timeline.cpp rename to spine-c/src/generated/physics_constraint_reset_timeline.cpp diff --git a/spine-c-new/src/generated/physics_constraint_reset_timeline.h b/spine-c/src/generated/physics_constraint_reset_timeline.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint_reset_timeline.h rename to spine-c/src/generated/physics_constraint_reset_timeline.h diff --git a/spine-c-new/src/generated/physics_constraint_strength_timeline.cpp b/spine-c/src/generated/physics_constraint_strength_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint_strength_timeline.cpp rename to spine-c/src/generated/physics_constraint_strength_timeline.cpp diff --git a/spine-c-new/src/generated/physics_constraint_strength_timeline.h b/spine-c/src/generated/physics_constraint_strength_timeline.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint_strength_timeline.h rename to spine-c/src/generated/physics_constraint_strength_timeline.h diff --git a/spine-c-new/src/generated/physics_constraint_timeline.cpp b/spine-c/src/generated/physics_constraint_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint_timeline.cpp rename to spine-c/src/generated/physics_constraint_timeline.cpp diff --git a/spine-c-new/src/generated/physics_constraint_timeline.h b/spine-c/src/generated/physics_constraint_timeline.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint_timeline.h rename to spine-c/src/generated/physics_constraint_timeline.h diff --git a/spine-c-new/src/generated/physics_constraint_wind_timeline.cpp b/spine-c/src/generated/physics_constraint_wind_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/physics_constraint_wind_timeline.cpp rename to spine-c/src/generated/physics_constraint_wind_timeline.cpp diff --git a/spine-c-new/src/generated/physics_constraint_wind_timeline.h b/spine-c/src/generated/physics_constraint_wind_timeline.h similarity index 100% rename from spine-c-new/src/generated/physics_constraint_wind_timeline.h rename to spine-c/src/generated/physics_constraint_wind_timeline.h diff --git a/spine-c-new/src/generated/point_attachment.cpp b/spine-c/src/generated/point_attachment.cpp similarity index 100% rename from spine-c-new/src/generated/point_attachment.cpp rename to spine-c/src/generated/point_attachment.cpp diff --git a/spine-c-new/src/generated/point_attachment.h b/spine-c/src/generated/point_attachment.h similarity index 100% rename from spine-c-new/src/generated/point_attachment.h rename to spine-c/src/generated/point_attachment.h diff --git a/spine-c-new/src/generated/polygon.cpp b/spine-c/src/generated/polygon.cpp similarity index 100% rename from spine-c-new/src/generated/polygon.cpp rename to spine-c/src/generated/polygon.cpp diff --git a/spine-c-new/src/generated/polygon.h b/spine-c/src/generated/polygon.h similarity index 100% rename from spine-c-new/src/generated/polygon.h rename to spine-c/src/generated/polygon.h diff --git a/spine-c-new/src/generated/posed.cpp b/spine-c/src/generated/posed.cpp similarity index 100% rename from spine-c-new/src/generated/posed.cpp rename to spine-c/src/generated/posed.cpp diff --git a/spine-c-new/src/generated/posed.h b/spine-c/src/generated/posed.h similarity index 100% rename from spine-c-new/src/generated/posed.h rename to spine-c/src/generated/posed.h diff --git a/spine-c-new/src/generated/posed_active.cpp b/spine-c/src/generated/posed_active.cpp similarity index 100% rename from spine-c-new/src/generated/posed_active.cpp rename to spine-c/src/generated/posed_active.cpp diff --git a/spine-c-new/src/generated/posed_active.h b/spine-c/src/generated/posed_active.h similarity index 100% rename from spine-c-new/src/generated/posed_active.h rename to spine-c/src/generated/posed_active.h diff --git a/spine-c-new/src/generated/posed_data.cpp b/spine-c/src/generated/posed_data.cpp similarity index 100% rename from spine-c-new/src/generated/posed_data.cpp rename to spine-c/src/generated/posed_data.cpp diff --git a/spine-c-new/src/generated/posed_data.h b/spine-c/src/generated/posed_data.h similarity index 100% rename from spine-c-new/src/generated/posed_data.h rename to spine-c/src/generated/posed_data.h diff --git a/spine-c-new/src/generated/position_mode.h b/spine-c/src/generated/position_mode.h similarity index 100% rename from spine-c-new/src/generated/position_mode.h rename to spine-c/src/generated/position_mode.h diff --git a/spine-c-new/src/generated/property.h b/spine-c/src/generated/property.h similarity index 100% rename from spine-c-new/src/generated/property.h rename to spine-c/src/generated/property.h diff --git a/spine-c-new/src/generated/region_attachment.cpp b/spine-c/src/generated/region_attachment.cpp similarity index 100% rename from spine-c-new/src/generated/region_attachment.cpp rename to spine-c/src/generated/region_attachment.cpp diff --git a/spine-c-new/src/generated/region_attachment.h b/spine-c/src/generated/region_attachment.h similarity index 100% rename from spine-c-new/src/generated/region_attachment.h rename to spine-c/src/generated/region_attachment.h diff --git a/spine-c-new/src/generated/render_command.cpp b/spine-c/src/generated/render_command.cpp similarity index 100% rename from spine-c-new/src/generated/render_command.cpp rename to spine-c/src/generated/render_command.cpp diff --git a/spine-c-new/src/generated/render_command.h b/spine-c/src/generated/render_command.h similarity index 100% rename from spine-c-new/src/generated/render_command.h rename to spine-c/src/generated/render_command.h diff --git a/spine-c-new/src/generated/rgb2_timeline.cpp b/spine-c/src/generated/rgb2_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/rgb2_timeline.cpp rename to spine-c/src/generated/rgb2_timeline.cpp diff --git a/spine-c-new/src/generated/rgb2_timeline.h b/spine-c/src/generated/rgb2_timeline.h similarity index 100% rename from spine-c-new/src/generated/rgb2_timeline.h rename to spine-c/src/generated/rgb2_timeline.h diff --git a/spine-c-new/src/generated/rgb_timeline.cpp b/spine-c/src/generated/rgb_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/rgb_timeline.cpp rename to spine-c/src/generated/rgb_timeline.cpp diff --git a/spine-c-new/src/generated/rgb_timeline.h b/spine-c/src/generated/rgb_timeline.h similarity index 100% rename from spine-c-new/src/generated/rgb_timeline.h rename to spine-c/src/generated/rgb_timeline.h diff --git a/spine-c-new/src/generated/rgba2_timeline.cpp b/spine-c/src/generated/rgba2_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/rgba2_timeline.cpp rename to spine-c/src/generated/rgba2_timeline.cpp diff --git a/spine-c-new/src/generated/rgba2_timeline.h b/spine-c/src/generated/rgba2_timeline.h similarity index 100% rename from spine-c-new/src/generated/rgba2_timeline.h rename to spine-c/src/generated/rgba2_timeline.h diff --git a/spine-c-new/src/generated/rgba_timeline.cpp b/spine-c/src/generated/rgba_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/rgba_timeline.cpp rename to spine-c/src/generated/rgba_timeline.cpp diff --git a/spine-c-new/src/generated/rgba_timeline.h b/spine-c/src/generated/rgba_timeline.h similarity index 100% rename from spine-c-new/src/generated/rgba_timeline.h rename to spine-c/src/generated/rgba_timeline.h diff --git a/spine-c-new/src/generated/rotate_mode.h b/spine-c/src/generated/rotate_mode.h similarity index 100% rename from spine-c-new/src/generated/rotate_mode.h rename to spine-c/src/generated/rotate_mode.h diff --git a/spine-c-new/src/generated/rotate_timeline.cpp b/spine-c/src/generated/rotate_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/rotate_timeline.cpp rename to spine-c/src/generated/rotate_timeline.cpp diff --git a/spine-c-new/src/generated/rotate_timeline.h b/spine-c/src/generated/rotate_timeline.h similarity index 100% rename from spine-c-new/src/generated/rotate_timeline.h rename to spine-c/src/generated/rotate_timeline.h diff --git a/spine-c-new/src/generated/rtti.cpp b/spine-c/src/generated/rtti.cpp similarity index 100% rename from spine-c-new/src/generated/rtti.cpp rename to spine-c/src/generated/rtti.cpp diff --git a/spine-c-new/src/generated/rtti.h b/spine-c/src/generated/rtti.h similarity index 100% rename from spine-c-new/src/generated/rtti.h rename to spine-c/src/generated/rtti.h diff --git a/spine-c-new/src/generated/scale_timeline.cpp b/spine-c/src/generated/scale_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/scale_timeline.cpp rename to spine-c/src/generated/scale_timeline.cpp diff --git a/spine-c-new/src/generated/scale_timeline.h b/spine-c/src/generated/scale_timeline.h similarity index 100% rename from spine-c-new/src/generated/scale_timeline.h rename to spine-c/src/generated/scale_timeline.h diff --git a/spine-c-new/src/generated/scale_x_timeline.cpp b/spine-c/src/generated/scale_x_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/scale_x_timeline.cpp rename to spine-c/src/generated/scale_x_timeline.cpp diff --git a/spine-c-new/src/generated/scale_x_timeline.h b/spine-c/src/generated/scale_x_timeline.h similarity index 100% rename from spine-c-new/src/generated/scale_x_timeline.h rename to spine-c/src/generated/scale_x_timeline.h diff --git a/spine-c-new/src/generated/scale_y_timeline.cpp b/spine-c/src/generated/scale_y_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/scale_y_timeline.cpp rename to spine-c/src/generated/scale_y_timeline.cpp diff --git a/spine-c-new/src/generated/scale_y_timeline.h b/spine-c/src/generated/scale_y_timeline.h similarity index 100% rename from spine-c-new/src/generated/scale_y_timeline.h rename to spine-c/src/generated/scale_y_timeline.h diff --git a/spine-c-new/src/generated/sequence.cpp b/spine-c/src/generated/sequence.cpp similarity index 100% rename from spine-c-new/src/generated/sequence.cpp rename to spine-c/src/generated/sequence.cpp diff --git a/spine-c-new/src/generated/sequence.h b/spine-c/src/generated/sequence.h similarity index 100% rename from spine-c-new/src/generated/sequence.h rename to spine-c/src/generated/sequence.h diff --git a/spine-c-new/src/generated/sequence_mode.h b/spine-c/src/generated/sequence_mode.h similarity index 100% rename from spine-c-new/src/generated/sequence_mode.h rename to spine-c/src/generated/sequence_mode.h diff --git a/spine-c-new/src/generated/sequence_timeline.cpp b/spine-c/src/generated/sequence_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/sequence_timeline.cpp rename to spine-c/src/generated/sequence_timeline.cpp diff --git a/spine-c-new/src/generated/sequence_timeline.h b/spine-c/src/generated/sequence_timeline.h similarity index 100% rename from spine-c-new/src/generated/sequence_timeline.h rename to spine-c/src/generated/sequence_timeline.h diff --git a/spine-c-new/src/generated/shear_timeline.cpp b/spine-c/src/generated/shear_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/shear_timeline.cpp rename to spine-c/src/generated/shear_timeline.cpp diff --git a/spine-c-new/src/generated/shear_timeline.h b/spine-c/src/generated/shear_timeline.h similarity index 100% rename from spine-c-new/src/generated/shear_timeline.h rename to spine-c/src/generated/shear_timeline.h diff --git a/spine-c-new/src/generated/shear_x_timeline.cpp b/spine-c/src/generated/shear_x_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/shear_x_timeline.cpp rename to spine-c/src/generated/shear_x_timeline.cpp diff --git a/spine-c-new/src/generated/shear_x_timeline.h b/spine-c/src/generated/shear_x_timeline.h similarity index 100% rename from spine-c-new/src/generated/shear_x_timeline.h rename to spine-c/src/generated/shear_x_timeline.h diff --git a/spine-c-new/src/generated/shear_y_timeline.cpp b/spine-c/src/generated/shear_y_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/shear_y_timeline.cpp rename to spine-c/src/generated/shear_y_timeline.cpp diff --git a/spine-c-new/src/generated/shear_y_timeline.h b/spine-c/src/generated/shear_y_timeline.h similarity index 100% rename from spine-c-new/src/generated/shear_y_timeline.h rename to spine-c/src/generated/shear_y_timeline.h diff --git a/spine-c-new/src/generated/skeleton.cpp b/spine-c/src/generated/skeleton.cpp similarity index 100% rename from spine-c-new/src/generated/skeleton.cpp rename to spine-c/src/generated/skeleton.cpp diff --git a/spine-c-new/src/generated/skeleton.h b/spine-c/src/generated/skeleton.h similarity index 100% rename from spine-c-new/src/generated/skeleton.h rename to spine-c/src/generated/skeleton.h diff --git a/spine-c-new/src/generated/skeleton_binary.cpp b/spine-c/src/generated/skeleton_binary.cpp similarity index 100% rename from spine-c-new/src/generated/skeleton_binary.cpp rename to spine-c/src/generated/skeleton_binary.cpp diff --git a/spine-c-new/src/generated/skeleton_binary.h b/spine-c/src/generated/skeleton_binary.h similarity index 100% rename from spine-c-new/src/generated/skeleton_binary.h rename to spine-c/src/generated/skeleton_binary.h diff --git a/spine-c-new/src/generated/skeleton_bounds.cpp b/spine-c/src/generated/skeleton_bounds.cpp similarity index 100% rename from spine-c-new/src/generated/skeleton_bounds.cpp rename to spine-c/src/generated/skeleton_bounds.cpp diff --git a/spine-c-new/src/generated/skeleton_bounds.h b/spine-c/src/generated/skeleton_bounds.h similarity index 100% rename from spine-c-new/src/generated/skeleton_bounds.h rename to spine-c/src/generated/skeleton_bounds.h diff --git a/spine-c-new/src/generated/skeleton_clipping.cpp b/spine-c/src/generated/skeleton_clipping.cpp similarity index 100% rename from spine-c-new/src/generated/skeleton_clipping.cpp rename to spine-c/src/generated/skeleton_clipping.cpp diff --git a/spine-c-new/src/generated/skeleton_clipping.h b/spine-c/src/generated/skeleton_clipping.h similarity index 100% rename from spine-c-new/src/generated/skeleton_clipping.h rename to spine-c/src/generated/skeleton_clipping.h diff --git a/spine-c-new/src/generated/skeleton_data.cpp b/spine-c/src/generated/skeleton_data.cpp similarity index 100% rename from spine-c-new/src/generated/skeleton_data.cpp rename to spine-c/src/generated/skeleton_data.cpp diff --git a/spine-c-new/src/generated/skeleton_data.h b/spine-c/src/generated/skeleton_data.h similarity index 100% rename from spine-c-new/src/generated/skeleton_data.h rename to spine-c/src/generated/skeleton_data.h diff --git a/spine-c-new/src/generated/skeleton_json.cpp b/spine-c/src/generated/skeleton_json.cpp similarity index 100% rename from spine-c-new/src/generated/skeleton_json.cpp rename to spine-c/src/generated/skeleton_json.cpp diff --git a/spine-c-new/src/generated/skeleton_json.h b/spine-c/src/generated/skeleton_json.h similarity index 100% rename from spine-c-new/src/generated/skeleton_json.h rename to spine-c/src/generated/skeleton_json.h diff --git a/spine-c-new/src/generated/skeleton_renderer.cpp b/spine-c/src/generated/skeleton_renderer.cpp similarity index 100% rename from spine-c-new/src/generated/skeleton_renderer.cpp rename to spine-c/src/generated/skeleton_renderer.cpp diff --git a/spine-c-new/src/generated/skeleton_renderer.h b/spine-c/src/generated/skeleton_renderer.h similarity index 100% rename from spine-c-new/src/generated/skeleton_renderer.h rename to spine-c/src/generated/skeleton_renderer.h diff --git a/spine-c-new/src/generated/skin.cpp b/spine-c/src/generated/skin.cpp similarity index 100% rename from spine-c-new/src/generated/skin.cpp rename to spine-c/src/generated/skin.cpp diff --git a/spine-c-new/src/generated/skin.h b/spine-c/src/generated/skin.h similarity index 100% rename from spine-c-new/src/generated/skin.h rename to spine-c/src/generated/skin.h diff --git a/spine-c-new/src/generated/slider.cpp b/spine-c/src/generated/slider.cpp similarity index 100% rename from spine-c-new/src/generated/slider.cpp rename to spine-c/src/generated/slider.cpp diff --git a/spine-c-new/src/generated/slider.h b/spine-c/src/generated/slider.h similarity index 100% rename from spine-c-new/src/generated/slider.h rename to spine-c/src/generated/slider.h diff --git a/spine-c-new/src/generated/slider_data.cpp b/spine-c/src/generated/slider_data.cpp similarity index 100% rename from spine-c-new/src/generated/slider_data.cpp rename to spine-c/src/generated/slider_data.cpp diff --git a/spine-c-new/src/generated/slider_data.h b/spine-c/src/generated/slider_data.h similarity index 100% rename from spine-c-new/src/generated/slider_data.h rename to spine-c/src/generated/slider_data.h diff --git a/spine-c-new/src/generated/slider_mix_timeline.cpp b/spine-c/src/generated/slider_mix_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/slider_mix_timeline.cpp rename to spine-c/src/generated/slider_mix_timeline.cpp diff --git a/spine-c-new/src/generated/slider_mix_timeline.h b/spine-c/src/generated/slider_mix_timeline.h similarity index 100% rename from spine-c-new/src/generated/slider_mix_timeline.h rename to spine-c/src/generated/slider_mix_timeline.h diff --git a/spine-c-new/src/generated/slider_pose.cpp b/spine-c/src/generated/slider_pose.cpp similarity index 100% rename from spine-c-new/src/generated/slider_pose.cpp rename to spine-c/src/generated/slider_pose.cpp diff --git a/spine-c-new/src/generated/slider_pose.h b/spine-c/src/generated/slider_pose.h similarity index 100% rename from spine-c-new/src/generated/slider_pose.h rename to spine-c/src/generated/slider_pose.h diff --git a/spine-c-new/src/generated/slider_timeline.cpp b/spine-c/src/generated/slider_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/slider_timeline.cpp rename to spine-c/src/generated/slider_timeline.cpp diff --git a/spine-c-new/src/generated/slider_timeline.h b/spine-c/src/generated/slider_timeline.h similarity index 100% rename from spine-c-new/src/generated/slider_timeline.h rename to spine-c/src/generated/slider_timeline.h diff --git a/spine-c-new/src/generated/slot.cpp b/spine-c/src/generated/slot.cpp similarity index 100% rename from spine-c-new/src/generated/slot.cpp rename to spine-c/src/generated/slot.cpp diff --git a/spine-c-new/src/generated/slot.h b/spine-c/src/generated/slot.h similarity index 100% rename from spine-c-new/src/generated/slot.h rename to spine-c/src/generated/slot.h diff --git a/spine-c-new/src/generated/slot_curve_timeline.cpp b/spine-c/src/generated/slot_curve_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/slot_curve_timeline.cpp rename to spine-c/src/generated/slot_curve_timeline.cpp diff --git a/spine-c-new/src/generated/slot_curve_timeline.h b/spine-c/src/generated/slot_curve_timeline.h similarity index 100% rename from spine-c-new/src/generated/slot_curve_timeline.h rename to spine-c/src/generated/slot_curve_timeline.h diff --git a/spine-c-new/src/generated/slot_data.cpp b/spine-c/src/generated/slot_data.cpp similarity index 100% rename from spine-c-new/src/generated/slot_data.cpp rename to spine-c/src/generated/slot_data.cpp diff --git a/spine-c-new/src/generated/slot_data.h b/spine-c/src/generated/slot_data.h similarity index 100% rename from spine-c-new/src/generated/slot_data.h rename to spine-c/src/generated/slot_data.h diff --git a/spine-c-new/src/generated/slot_pose.cpp b/spine-c/src/generated/slot_pose.cpp similarity index 100% rename from spine-c-new/src/generated/slot_pose.cpp rename to spine-c/src/generated/slot_pose.cpp diff --git a/spine-c-new/src/generated/slot_pose.h b/spine-c/src/generated/slot_pose.h similarity index 100% rename from spine-c-new/src/generated/slot_pose.h rename to spine-c/src/generated/slot_pose.h diff --git a/spine-c-new/src/generated/slot_timeline.cpp b/spine-c/src/generated/slot_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/slot_timeline.cpp rename to spine-c/src/generated/slot_timeline.cpp diff --git a/spine-c-new/src/generated/slot_timeline.h b/spine-c/src/generated/slot_timeline.h similarity index 100% rename from spine-c-new/src/generated/slot_timeline.h rename to spine-c/src/generated/slot_timeline.h diff --git a/spine-c-new/src/generated/spacing_mode.h b/spine-c/src/generated/spacing_mode.h similarity index 100% rename from spine-c-new/src/generated/spacing_mode.h rename to spine-c/src/generated/spacing_mode.h diff --git a/spine-c-new/src/generated/texture_filter.h b/spine-c/src/generated/texture_filter.h similarity index 100% rename from spine-c-new/src/generated/texture_filter.h rename to spine-c/src/generated/texture_filter.h diff --git a/spine-c-new/src/generated/texture_region.cpp b/spine-c/src/generated/texture_region.cpp similarity index 100% rename from spine-c-new/src/generated/texture_region.cpp rename to spine-c/src/generated/texture_region.cpp diff --git a/spine-c-new/src/generated/texture_region.h b/spine-c/src/generated/texture_region.h similarity index 100% rename from spine-c-new/src/generated/texture_region.h rename to spine-c/src/generated/texture_region.h diff --git a/spine-c-new/src/generated/texture_wrap.h b/spine-c/src/generated/texture_wrap.h similarity index 100% rename from spine-c-new/src/generated/texture_wrap.h rename to spine-c/src/generated/texture_wrap.h diff --git a/spine-c-new/src/generated/timeline.cpp b/spine-c/src/generated/timeline.cpp similarity index 100% rename from spine-c-new/src/generated/timeline.cpp rename to spine-c/src/generated/timeline.cpp diff --git a/spine-c-new/src/generated/timeline.h b/spine-c/src/generated/timeline.h similarity index 100% rename from spine-c-new/src/generated/timeline.h rename to spine-c/src/generated/timeline.h diff --git a/spine-c-new/src/generated/to_property.cpp b/spine-c/src/generated/to_property.cpp similarity index 100% rename from spine-c-new/src/generated/to_property.cpp rename to spine-c/src/generated/to_property.cpp diff --git a/spine-c-new/src/generated/to_property.h b/spine-c/src/generated/to_property.h similarity index 100% rename from spine-c-new/src/generated/to_property.h rename to spine-c/src/generated/to_property.h diff --git a/spine-c-new/src/generated/to_rotate.cpp b/spine-c/src/generated/to_rotate.cpp similarity index 100% rename from spine-c-new/src/generated/to_rotate.cpp rename to spine-c/src/generated/to_rotate.cpp diff --git a/spine-c-new/src/generated/to_rotate.h b/spine-c/src/generated/to_rotate.h similarity index 100% rename from spine-c-new/src/generated/to_rotate.h rename to spine-c/src/generated/to_rotate.h diff --git a/spine-c-new/src/generated/to_scale_x.cpp b/spine-c/src/generated/to_scale_x.cpp similarity index 100% rename from spine-c-new/src/generated/to_scale_x.cpp rename to spine-c/src/generated/to_scale_x.cpp diff --git a/spine-c-new/src/generated/to_scale_x.h b/spine-c/src/generated/to_scale_x.h similarity index 100% rename from spine-c-new/src/generated/to_scale_x.h rename to spine-c/src/generated/to_scale_x.h diff --git a/spine-c-new/src/generated/to_scale_y.cpp b/spine-c/src/generated/to_scale_y.cpp similarity index 100% rename from spine-c-new/src/generated/to_scale_y.cpp rename to spine-c/src/generated/to_scale_y.cpp diff --git a/spine-c-new/src/generated/to_scale_y.h b/spine-c/src/generated/to_scale_y.h similarity index 100% rename from spine-c-new/src/generated/to_scale_y.h rename to spine-c/src/generated/to_scale_y.h diff --git a/spine-c-new/src/generated/to_shear_y.cpp b/spine-c/src/generated/to_shear_y.cpp similarity index 100% rename from spine-c-new/src/generated/to_shear_y.cpp rename to spine-c/src/generated/to_shear_y.cpp diff --git a/spine-c-new/src/generated/to_shear_y.h b/spine-c/src/generated/to_shear_y.h similarity index 100% rename from spine-c-new/src/generated/to_shear_y.h rename to spine-c/src/generated/to_shear_y.h diff --git a/spine-c-new/src/generated/to_x.cpp b/spine-c/src/generated/to_x.cpp similarity index 100% rename from spine-c-new/src/generated/to_x.cpp rename to spine-c/src/generated/to_x.cpp diff --git a/spine-c-new/src/generated/to_x.h b/spine-c/src/generated/to_x.h similarity index 100% rename from spine-c-new/src/generated/to_x.h rename to spine-c/src/generated/to_x.h diff --git a/spine-c-new/src/generated/to_y.cpp b/spine-c/src/generated/to_y.cpp similarity index 100% rename from spine-c-new/src/generated/to_y.cpp rename to spine-c/src/generated/to_y.cpp diff --git a/spine-c-new/src/generated/to_y.h b/spine-c/src/generated/to_y.h similarity index 100% rename from spine-c-new/src/generated/to_y.h rename to spine-c/src/generated/to_y.h diff --git a/spine-c-new/src/generated/track_entry.cpp b/spine-c/src/generated/track_entry.cpp similarity index 100% rename from spine-c-new/src/generated/track_entry.cpp rename to spine-c/src/generated/track_entry.cpp diff --git a/spine-c-new/src/generated/track_entry.h b/spine-c/src/generated/track_entry.h similarity index 100% rename from spine-c-new/src/generated/track_entry.h rename to spine-c/src/generated/track_entry.h diff --git a/spine-c-new/src/generated/transform_constraint.cpp b/spine-c/src/generated/transform_constraint.cpp similarity index 100% rename from spine-c-new/src/generated/transform_constraint.cpp rename to spine-c/src/generated/transform_constraint.cpp diff --git a/spine-c-new/src/generated/transform_constraint.h b/spine-c/src/generated/transform_constraint.h similarity index 100% rename from spine-c-new/src/generated/transform_constraint.h rename to spine-c/src/generated/transform_constraint.h diff --git a/spine-c-new/src/generated/transform_constraint_data.cpp b/spine-c/src/generated/transform_constraint_data.cpp similarity index 100% rename from spine-c-new/src/generated/transform_constraint_data.cpp rename to spine-c/src/generated/transform_constraint_data.cpp diff --git a/spine-c-new/src/generated/transform_constraint_data.h b/spine-c/src/generated/transform_constraint_data.h similarity index 100% rename from spine-c-new/src/generated/transform_constraint_data.h rename to spine-c/src/generated/transform_constraint_data.h diff --git a/spine-c-new/src/generated/transform_constraint_pose.cpp b/spine-c/src/generated/transform_constraint_pose.cpp similarity index 100% rename from spine-c-new/src/generated/transform_constraint_pose.cpp rename to spine-c/src/generated/transform_constraint_pose.cpp diff --git a/spine-c-new/src/generated/transform_constraint_pose.h b/spine-c/src/generated/transform_constraint_pose.h similarity index 100% rename from spine-c-new/src/generated/transform_constraint_pose.h rename to spine-c/src/generated/transform_constraint_pose.h diff --git a/spine-c-new/src/generated/transform_constraint_timeline.cpp b/spine-c/src/generated/transform_constraint_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/transform_constraint_timeline.cpp rename to spine-c/src/generated/transform_constraint_timeline.cpp diff --git a/spine-c-new/src/generated/transform_constraint_timeline.h b/spine-c/src/generated/transform_constraint_timeline.h similarity index 100% rename from spine-c-new/src/generated/transform_constraint_timeline.h rename to spine-c/src/generated/transform_constraint_timeline.h diff --git a/spine-c-new/src/generated/translate_timeline.cpp b/spine-c/src/generated/translate_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/translate_timeline.cpp rename to spine-c/src/generated/translate_timeline.cpp diff --git a/spine-c-new/src/generated/translate_timeline.h b/spine-c/src/generated/translate_timeline.h similarity index 100% rename from spine-c-new/src/generated/translate_timeline.h rename to spine-c/src/generated/translate_timeline.h diff --git a/spine-c-new/src/generated/translate_x_timeline.cpp b/spine-c/src/generated/translate_x_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/translate_x_timeline.cpp rename to spine-c/src/generated/translate_x_timeline.cpp diff --git a/spine-c-new/src/generated/translate_x_timeline.h b/spine-c/src/generated/translate_x_timeline.h similarity index 100% rename from spine-c-new/src/generated/translate_x_timeline.h rename to spine-c/src/generated/translate_x_timeline.h diff --git a/spine-c-new/src/generated/translate_y_timeline.cpp b/spine-c/src/generated/translate_y_timeline.cpp similarity index 100% rename from spine-c-new/src/generated/translate_y_timeline.cpp rename to spine-c/src/generated/translate_y_timeline.cpp diff --git a/spine-c-new/src/generated/translate_y_timeline.h b/spine-c/src/generated/translate_y_timeline.h similarity index 100% rename from spine-c-new/src/generated/translate_y_timeline.h rename to spine-c/src/generated/translate_y_timeline.h diff --git a/spine-c-new/src/generated/types.h b/spine-c/src/generated/types.h similarity index 100% rename from spine-c-new/src/generated/types.h rename to spine-c/src/generated/types.h diff --git a/spine-c-new/src/generated/update.cpp b/spine-c/src/generated/update.cpp similarity index 100% rename from spine-c-new/src/generated/update.cpp rename to spine-c/src/generated/update.cpp diff --git a/spine-c-new/src/generated/update.h b/spine-c/src/generated/update.h similarity index 100% rename from spine-c-new/src/generated/update.h rename to spine-c/src/generated/update.h diff --git a/spine-c-new/src/generated/vertex_attachment.cpp b/spine-c/src/generated/vertex_attachment.cpp similarity index 100% rename from spine-c-new/src/generated/vertex_attachment.cpp rename to spine-c/src/generated/vertex_attachment.cpp diff --git a/spine-c-new/src/generated/vertex_attachment.h b/spine-c/src/generated/vertex_attachment.h similarity index 100% rename from spine-c-new/src/generated/vertex_attachment.h rename to spine-c/src/generated/vertex_attachment.h diff --git a/spine-c-new/test/test.c b/spine-c/test/test.c similarity index 100% rename from spine-c-new/test/test.c rename to spine-c/test/test.c