diff --git a/.gitignore b/.gitignore index e7ca0f590..410a8d9b7 100644 --- a/.gitignore +++ b/.gitignore @@ -252,3 +252,4 @@ spine-libgdx/.project .clang-format spine-c/codegen/spine-cpp-types.json spine-flutter/example/devtools_options.yaml +spine-glfw/.cache diff --git a/formatters/.gitignore b/formatters/.gitignore new file mode 100644 index 000000000..23d818327 --- /dev/null +++ b/formatters/.gitignore @@ -0,0 +1 @@ +eclipse-formatter/target/ diff --git a/formatters/build.gradle b/formatters/build.gradle deleted file mode 100644 index 1b8b485ae..000000000 --- a/formatters/build.gradle +++ /dev/null @@ -1,51 +0,0 @@ -buildscript { repositories { mavenCentral() }} - -plugins { - id "com.diffplug.spotless" version "5.14.0" -} - -spotless { - lineEndings 'UNIX' - - java { - target 'spine-libgdx/**/*.java', - 'spine-android/**/*.java' - eclipse().configFile('formatters/eclipse-formatter.xml') - } - - cpp { - target 'spine-c/**/*.c', - 'spine-c/**/.h', - 'spine-cpp/**/*.cpp', - 'spine-cpp/**/.h', - 'spine-cocos2dx/src/**/*.cpp', - 'spine-cocos2dx/src/**/*.h', - 'spine-cocos2dx/example/Classes/**/*.cpp', - 'spine-cocos2dx/example/Classes/**/*.h', - 'spine-glfw/src/**/*.cpp', - 'spine-glfw/src/**/*.h', - 'spine-glfw/example/**/*.cpp', - 'spine-glfw/example/**/*.h', - 'spine-sdl/src/**/*.c', - 'spine-sdl/src/**/*.cpp', - 'spine-sdl/src/**/*.h', - 'spine-sdl/example/**/*.c', - 'spine-sdl/example/**/*.cpp', - 'spine-sdl/example/**/*.h', - 'spine-sfml/c/src/**/*.c', - 'spine-sfml/c/src/**/*.h', - 'spine-sfml/cpp/src/**/*.cpp', - 'spine-sfml/cpp/src/**/*.h', - 'spine-ue/**/*.cpp', - 'spine-ue/**/*.h', - 'spine-godot/spine_godot/*.cpp', - 'spine-godot/spine_godot/*.h' - clangFormat("13.0.1").pathToExe("$System.env.CLANGFORMAT").style('file') - } - - typescript { - target 'spine-ts/**/src/*.ts' - targetExclude 'spine-ts/**/*.d.ts', 'spine-ts/**/node_modules/**/*.ts' - tsfmt('7.2.2').tsfmtFile('formatters/tsfmt.json') - } -} \ No newline at end of file diff --git a/formatters/eclipse-formatter/pom.xml b/formatters/eclipse-formatter/pom.xml new file mode 100644 index 000000000..2fb1a086f --- /dev/null +++ b/formatters/eclipse-formatter/pom.xml @@ -0,0 +1,106 @@ + + + 4.0.0 + + com.esotericsoftware.spine + eclipse-formatter + 1.0.0 + jar + + + 11 + 11 + UTF-8 + 4.26 + + + + + + org.eclipse.jdt + org.eclipse.jdt.core + 3.32.0 + + + + + org.eclipse.platform + org.eclipse.text + 3.12.300 + + + + + org.eclipse.platform + org.eclipse.jface.text + 3.22.0 + + + + + org.eclipse.platform + org.eclipse.core.runtime + 3.26.100 + + + + + org.eclipse.platform + org.eclipse.equinox.common + 3.17.100 + + + + + org.eclipse.platform + org.eclipse.core.resources + 3.18.100 + + + + + org.eclipse.platform + org.eclipse.osgi + 3.18.300 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.6.0 + + + jar-with-dependencies + + + + com.esotericsoftware.spine.formatter.EclipseFormatter + + + + + + make-assembly + package + + single + + + + + + + \ No newline at end of file diff --git a/formatters/eclipse-formatter/src/main/java/com/esotericsoftware/spine/formatter/EclipseFormatter.java b/formatters/eclipse-formatter/src/main/java/com/esotericsoftware/spine/formatter/EclipseFormatter.java new file mode 100644 index 000000000..02f8bd90d --- /dev/null +++ b/formatters/eclipse-formatter/src/main/java/com/esotericsoftware/spine/formatter/EclipseFormatter.java @@ -0,0 +1,126 @@ +package com.esotericsoftware.spine.formatter; + +import java.io.*; +import java.nio.file.*; +import java.util.*; +import javax.xml.parsers.*; +import org.w3c.dom.*; +import org.eclipse.jdt.core.formatter.CodeFormatter; +import org.eclipse.jdt.internal.formatter.DefaultCodeFormatter; +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.text.edits.TextEdit; + +public class EclipseFormatter { + private static final String LINE_DELIMITER = "\n"; + + public static void main(String[] args) throws Exception { + if (args.length < 2) { + System.err.println("Usage: java -jar eclipse-formatter.jar [file2.java ...]"); + System.exit(1); + } + + // Load formatter settings from XML + Map options = loadFormatterSettings(args[0]); + + // Create formatter + CodeFormatter formatter = new DefaultCodeFormatter(options); + + // Format each file + int successCount = 0; + int errorCount = 0; + + for (int i = 1; i < args.length; i++) { + try { + formatFile(formatter, args[i]); + successCount++; + } catch (Exception e) { + System.err.println("Error formatting " + args[i] + ": " + e.getMessage()); + errorCount++; + } + } + + System.out.println("Formatting complete: " + successCount + " files formatted, " + errorCount + " errors"); + + if (errorCount > 0) { + System.exit(1); + } + } + + private static Map loadFormatterSettings(String xmlPath) throws Exception { + Map settings = new HashMap<>(); + + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + org.w3c.dom.Document doc = builder.parse(new File(xmlPath)); + + // Handle both direct settings and profile-based settings + NodeList profiles = doc.getElementsByTagName("profile"); + if (profiles.getLength() > 0) { + // Profile-based format (Eclipse export) + Element profile = (Element) profiles.item(0); + NodeList settingNodes = profile.getElementsByTagName("setting"); + + for (int i = 0; i < settingNodes.getLength(); i++) { + Element setting = (Element) settingNodes.item(i); + String id = setting.getAttribute("id"); + String value = setting.getAttribute("value"); + if (id != null && !id.isEmpty() && value != null) { + settings.put(id, value); + } + } + } else { + // Direct settings format + NodeList settingNodes = doc.getElementsByTagName("setting"); + + for (int i = 0; i < settingNodes.getLength(); i++) { + Element setting = (Element) settingNodes.item(i); + String id = setting.getAttribute("id"); + String value = setting.getAttribute("value"); + if (id != null && !id.isEmpty() && value != null) { + settings.put(id, value); + } + } + } + + System.out.println("Loaded " + settings.size() + " formatter settings from " + xmlPath); + + return settings; + } + + private static void formatFile(CodeFormatter formatter, String filePath) throws Exception { + Path path = Paths.get(filePath); + + if (!Files.exists(path)) { + throw new FileNotFoundException("File not found: " + filePath); + } + + String content = Files.readString(path); + + // Determine if it's a module-info.java file + int kind = path.getFileName().toString().equals("module-info.java") + ? CodeFormatter.K_MODULE_INFO + : CodeFormatter.K_COMPILATION_UNIT; + kind |= CodeFormatter.F_INCLUDE_COMMENTS; + + // Format the code + TextEdit edit = formatter.format(kind, content, 0, content.length(), 0, LINE_DELIMITER); + + if (edit == null) { + throw new IllegalArgumentException("Cannot format file - invalid Java syntax or formatter configuration issue"); + } + + // Apply the edit + IDocument document = new Document(content); + edit.apply(document); + String formatted = document.get(); + + // Only write if content changed + if (!content.equals(formatted)) { + Files.writeString(path, formatted); + System.out.println("Formatted: " + filePath); + } else { + System.out.println("No changes: " + filePath); + } + } +} \ No newline at end of file diff --git a/formatters/format-java.sh b/formatters/format-java.sh index 7dcfb1f44..867bc0b9f 100755 --- a/formatters/format-java.sh +++ b/formatters/format-java.sh @@ -1,7 +1,7 @@ #!/bin/bash set -e -# Format Java files with Spotless (keeping this for Eclipse formatter) +# Format Java files with Eclipse formatter echo "Formatting Java files..." dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" @@ -9,8 +9,31 @@ dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" # Store original directory pushd "$dir" > /dev/null -# Run gradle from the formatters directory -./gradlew spotlessJavaApply --quiet +# Build the Eclipse formatter if needed +if [ ! -f "eclipse-formatter/target/eclipse-formatter-1.0.0-jar-with-dependencies.jar" ]; then + echo "Building Eclipse formatter..." + pushd eclipse-formatter > /dev/null + mvn clean package + popd > /dev/null +fi + +# Find all Java files +java_files=$(find ../spine-libgdx ../spine-android -name "*.java" -type f \ + -not -path "*/build/*" \ + -not -path "*/.gradle/*" \ + -not -path "*/bin/*" \ + -not -path "*/gen/*" \ + -not -path "*/target/*") + +# Run the formatter +if [ -n "$java_files" ]; then + echo "Running Eclipse formatter on Java files..." + java -jar eclipse-formatter/target/eclipse-formatter-1.0.0-jar-with-dependencies.jar \ + eclipse-formatter.xml \ + $java_files +fi + +echo "Java formatting complete" # Return to original directory popd > /dev/null \ No newline at end of file diff --git a/formatters/format.sh b/formatters/format.sh index 885e484b5..f2bc76e56 100755 --- a/formatters/format.sh +++ b/formatters/format.sh @@ -31,7 +31,7 @@ show_help() { echo "Multiple language flags can be combined, e.g.: ./format.sh java ts" echo "" echo "Tools used:" - echo " Java: Spotless with Eclipse formatter" + echo " Java: Eclipse formatter (via eclipse-formatter.xml)" echo " TypeScript: tsfmt (typescript-formatter)" echo " C/C++: clang-format" echo " C#: dotnet format" diff --git a/formatters/gradle/wrapper/gradle-wrapper.jar b/formatters/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 01b8bf6b1..000000000 Binary files a/formatters/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/formatters/gradle/wrapper/gradle-wrapper.properties b/formatters/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 6b74f0f6b..000000000 --- a/formatters/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip diff --git a/formatters/gradlew b/formatters/gradlew deleted file mode 100755 index cccdd3d51..000000000 --- a/formatters/gradlew +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/formatters/gradlew.bat b/formatters/gradlew.bat deleted file mode 100644 index f9553162f..000000000 --- a/formatters/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/formatters/settings.gradle b/formatters/settings.gradle deleted file mode 100644 index c98ec4958..000000000 --- a/formatters/settings.gradle +++ /dev/null @@ -1,3 +0,0 @@ -include ':spine-libgdx:spine-libgdx' -include ':spine-libgdx:spine-libgdx-tests' -include ':spine-libgdx:spine-skeletonviewer' diff --git a/spine-glfw/CMakePresets.json b/spine-glfw/CMakePresets.json new file mode 100644 index 000000000..97930d03f --- /dev/null +++ b/spine-glfw/CMakePresets.json @@ -0,0 +1,41 @@ +{ + "version": 3, + "cmakeMinimumRequired": { + "major": 3, + "minor": 20, + "patch": 0 + }, + "configurePresets": [ + { + "name": "debug", + "displayName": "Debug", + "description": "Debug build with compile commands", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/debug", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON" + } + }, + { + "name": "release", + "displayName": "Release", + "description": "Release build", + "inherits": "debug", + "binaryDir": "${sourceDir}/build/release", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release" + } + } + ], + "buildPresets": [ + { + "name": "debug", + "configurePreset": "debug" + }, + { + "name": "release", + "configurePreset": "release" + } + ] +} \ No newline at end of file diff --git a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/utils/SkeletonSerializer.java b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/utils/SkeletonSerializer.java index 0987962e3..90b9bc51e 100644 --- a/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/utils/SkeletonSerializer.java +++ b/spine-libgdx/spine-libgdx-tests/src/com/esotericsoftware/spine/utils/SkeletonSerializer.java @@ -1,3 +1,4 @@ + package com.esotericsoftware.spine.utils; import com.esotericsoftware.spine.*; @@ -19,3847 +20,3847 @@ import java.util.Set; import java.util.HashSet; public class SkeletonSerializer { - private final Set visitedObjects = new HashSet<>(); - private JsonWriter json; - - public String serializeSkeletonData(SkeletonData data) { - visitedObjects.clear(); - json = new JsonWriter(); - writeSkeletonData(data); - json.close(); - return json.getString(); - } - - public String serializeSkeleton(Skeleton skeleton) { - visitedObjects.clear(); - json = new JsonWriter(); - writeSkeleton(skeleton); - json.close(); - return json.getString(); - } - - public String serializeAnimationState(AnimationState state) { - visitedObjects.clear(); - json = new JsonWriter(); - writeAnimationState(state); - json.close(); - return json.getString(); - } - - private void writeAnimation(Animation obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("Animation"); - - json.writeName("timelines"); - json.writeArrayStart(); - for (Timeline item : obj.getTimelines()) { - writeTimeline(item); - } - json.writeArrayEnd(); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeName("bones"); - writeIntArray(obj.getBones()); - - json.writeName("name"); - json.writeValue(obj.getName()); - - json.writeObjectEnd(); - } - - private void writeAlphaTimeline(Animation.AlphaTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("AlphaTimeline"); - - json.writeName("slotIndex"); - json.writeValue(obj.getSlotIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeAttachmentTimeline(Animation.AttachmentTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("AttachmentTimeline"); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("slotIndex"); - json.writeValue(obj.getSlotIndex()); - - json.writeName("attachmentNames"); - json.writeArrayStart(); - for (String item : obj.getAttachmentNames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeDeformTimeline(Animation.DeformTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("DeformTimeline"); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("attachment"); - writeVertexAttachment(obj.getAttachment()); - - json.writeName("vertices"); - json.writeArrayStart(); - for (float[] nestedArray : obj.getVertices()) { - json.writeArrayStart(); - for (float elem : nestedArray) { - json.writeValue(elem); - } - json.writeArrayEnd(); - } - json.writeArrayEnd(); - - json.writeName("slotIndex"); - json.writeValue(obj.getSlotIndex()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeDrawOrderTimeline(Animation.DrawOrderTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("DrawOrderTimeline"); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("drawOrders"); - json.writeArrayStart(); - for (int[] nestedArray : obj.getDrawOrders()) { - json.writeArrayStart(); - for (int elem : nestedArray) { - json.writeValue(elem); - } - json.writeArrayEnd(); - } - json.writeArrayEnd(); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeEventTimeline(Animation.EventTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("EventTimeline"); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("events"); - json.writeArrayStart(); - for (Event item : obj.getEvents()) { - writeEvent(item); - } - json.writeArrayEnd(); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeIkConstraintTimeline(Animation.IkConstraintTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("IkConstraintTimeline"); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeInheritTimeline(Animation.InheritTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("InheritTimeline"); - - json.writeName("boneIndex"); - json.writeValue(obj.getBoneIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writePathConstraintMixTimeline(Animation.PathConstraintMixTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PathConstraintMixTimeline"); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writePathConstraintPositionTimeline(Animation.PathConstraintPositionTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PathConstraintPositionTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writePathConstraintSpacingTimeline(Animation.PathConstraintSpacingTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PathConstraintSpacingTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writePhysicsConstraintDampingTimeline(Animation.PhysicsConstraintDampingTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PhysicsConstraintDampingTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writePhysicsConstraintGravityTimeline(Animation.PhysicsConstraintGravityTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PhysicsConstraintGravityTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writePhysicsConstraintInertiaTimeline(Animation.PhysicsConstraintInertiaTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PhysicsConstraintInertiaTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writePhysicsConstraintMassTimeline(Animation.PhysicsConstraintMassTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PhysicsConstraintMassTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writePhysicsConstraintMixTimeline(Animation.PhysicsConstraintMixTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PhysicsConstraintMixTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writePhysicsConstraintResetTimeline(Animation.PhysicsConstraintResetTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PhysicsConstraintResetTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writePhysicsConstraintStrengthTimeline(Animation.PhysicsConstraintStrengthTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PhysicsConstraintStrengthTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writePhysicsConstraintWindTimeline(Animation.PhysicsConstraintWindTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PhysicsConstraintWindTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeRGB2Timeline(Animation.RGB2Timeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("RGB2Timeline"); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("slotIndex"); - json.writeValue(obj.getSlotIndex()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeRGBA2Timeline(Animation.RGBA2Timeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("RGBA2Timeline"); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("slotIndex"); - json.writeValue(obj.getSlotIndex()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeRGBATimeline(Animation.RGBATimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("RGBATimeline"); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("slotIndex"); - json.writeValue(obj.getSlotIndex()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeRGBTimeline(Animation.RGBTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("RGBTimeline"); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("slotIndex"); - json.writeValue(obj.getSlotIndex()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeRotateTimeline(Animation.RotateTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("RotateTimeline"); - - json.writeName("boneIndex"); - json.writeValue(obj.getBoneIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeScaleTimeline(Animation.ScaleTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ScaleTimeline"); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("boneIndex"); - json.writeValue(obj.getBoneIndex()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeScaleXTimeline(Animation.ScaleXTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ScaleXTimeline"); - - json.writeName("boneIndex"); - json.writeValue(obj.getBoneIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeScaleYTimeline(Animation.ScaleYTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ScaleYTimeline"); - - json.writeName("boneIndex"); - json.writeValue(obj.getBoneIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeSequenceTimeline(Animation.SequenceTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("SequenceTimeline"); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("slotIndex"); - json.writeValue(obj.getSlotIndex()); - - json.writeName("attachment"); - writeAttachment(obj.getAttachment()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeShearTimeline(Animation.ShearTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ShearTimeline"); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("boneIndex"); - json.writeValue(obj.getBoneIndex()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeShearXTimeline(Animation.ShearXTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ShearXTimeline"); - - json.writeName("boneIndex"); - json.writeValue(obj.getBoneIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeShearYTimeline(Animation.ShearYTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ShearYTimeline"); - - json.writeName("boneIndex"); - json.writeValue(obj.getBoneIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeSliderMixTimeline(Animation.SliderMixTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("SliderMixTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeSliderTimeline(Animation.SliderTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("SliderTimeline"); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeTimeline(Animation.Timeline obj) { - if (obj instanceof Animation.AlphaTimeline) { - writeAlphaTimeline((Animation.AlphaTimeline) obj); - } else if (obj instanceof Animation.AttachmentTimeline) { - writeAttachmentTimeline((Animation.AttachmentTimeline) obj); - } else if (obj instanceof Animation.DeformTimeline) { - writeDeformTimeline((Animation.DeformTimeline) obj); - } else if (obj instanceof Animation.DrawOrderTimeline) { - writeDrawOrderTimeline((Animation.DrawOrderTimeline) obj); - } else if (obj instanceof Animation.EventTimeline) { - writeEventTimeline((Animation.EventTimeline) obj); - } else if (obj instanceof Animation.IkConstraintTimeline) { - writeIkConstraintTimeline((Animation.IkConstraintTimeline) obj); - } else if (obj instanceof Animation.InheritTimeline) { - writeInheritTimeline((Animation.InheritTimeline) obj); - } else if (obj instanceof Animation.PathConstraintMixTimeline) { - writePathConstraintMixTimeline((Animation.PathConstraintMixTimeline) obj); - } else if (obj instanceof Animation.PathConstraintPositionTimeline) { - writePathConstraintPositionTimeline((Animation.PathConstraintPositionTimeline) obj); - } else if (obj instanceof Animation.PathConstraintSpacingTimeline) { - writePathConstraintSpacingTimeline((Animation.PathConstraintSpacingTimeline) obj); - } else if (obj instanceof Animation.PhysicsConstraintDampingTimeline) { - writePhysicsConstraintDampingTimeline((Animation.PhysicsConstraintDampingTimeline) obj); - } else if (obj instanceof Animation.PhysicsConstraintGravityTimeline) { - writePhysicsConstraintGravityTimeline((Animation.PhysicsConstraintGravityTimeline) obj); - } else if (obj instanceof Animation.PhysicsConstraintInertiaTimeline) { - writePhysicsConstraintInertiaTimeline((Animation.PhysicsConstraintInertiaTimeline) obj); - } else if (obj instanceof Animation.PhysicsConstraintMassTimeline) { - writePhysicsConstraintMassTimeline((Animation.PhysicsConstraintMassTimeline) obj); - } else if (obj instanceof Animation.PhysicsConstraintMixTimeline) { - writePhysicsConstraintMixTimeline((Animation.PhysicsConstraintMixTimeline) obj); - } else if (obj instanceof Animation.PhysicsConstraintResetTimeline) { - writePhysicsConstraintResetTimeline((Animation.PhysicsConstraintResetTimeline) obj); - } else if (obj instanceof Animation.PhysicsConstraintStrengthTimeline) { - writePhysicsConstraintStrengthTimeline((Animation.PhysicsConstraintStrengthTimeline) obj); - } else if (obj instanceof Animation.PhysicsConstraintWindTimeline) { - writePhysicsConstraintWindTimeline((Animation.PhysicsConstraintWindTimeline) obj); - } else if (obj instanceof Animation.RGB2Timeline) { - writeRGB2Timeline((Animation.RGB2Timeline) obj); - } else if (obj instanceof Animation.RGBA2Timeline) { - writeRGBA2Timeline((Animation.RGBA2Timeline) obj); - } else if (obj instanceof Animation.RGBATimeline) { - writeRGBATimeline((Animation.RGBATimeline) obj); - } else if (obj instanceof Animation.RGBTimeline) { - writeRGBTimeline((Animation.RGBTimeline) obj); - } else if (obj instanceof Animation.RotateTimeline) { - writeRotateTimeline((Animation.RotateTimeline) obj); - } else if (obj instanceof Animation.ScaleTimeline) { - writeScaleTimeline((Animation.ScaleTimeline) obj); - } else if (obj instanceof Animation.ScaleXTimeline) { - writeScaleXTimeline((Animation.ScaleXTimeline) obj); - } else if (obj instanceof Animation.ScaleYTimeline) { - writeScaleYTimeline((Animation.ScaleYTimeline) obj); - } else if (obj instanceof Animation.SequenceTimeline) { - writeSequenceTimeline((Animation.SequenceTimeline) obj); - } else if (obj instanceof Animation.ShearTimeline) { - writeShearTimeline((Animation.ShearTimeline) obj); - } else if (obj instanceof Animation.ShearXTimeline) { - writeShearXTimeline((Animation.ShearXTimeline) obj); - } else if (obj instanceof Animation.ShearYTimeline) { - writeShearYTimeline((Animation.ShearYTimeline) obj); - } else if (obj instanceof Animation.SliderMixTimeline) { - writeSliderMixTimeline((Animation.SliderMixTimeline) obj); - } else if (obj instanceof Animation.SliderTimeline) { - writeSliderTimeline((Animation.SliderTimeline) obj); - } else if (obj instanceof Animation.TransformConstraintTimeline) { - writeTransformConstraintTimeline((Animation.TransformConstraintTimeline) obj); - } else if (obj instanceof Animation.TranslateTimeline) { - writeTranslateTimeline((Animation.TranslateTimeline) obj); - } else if (obj instanceof Animation.TranslateXTimeline) { - writeTranslateXTimeline((Animation.TranslateXTimeline) obj); - } else if (obj instanceof Animation.TranslateYTimeline) { - writeTranslateYTimeline((Animation.TranslateYTimeline) obj); - } else { - throw new RuntimeException("Unknown Timeline type: " + obj.getClass().getName()); - } - } - - private void writeTransformConstraintTimeline(Animation.TransformConstraintTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("TransformConstraintTimeline"); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("constraintIndex"); - json.writeValue(obj.getConstraintIndex()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeTranslateTimeline(Animation.TranslateTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("TranslateTimeline"); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("boneIndex"); - json.writeValue(obj.getBoneIndex()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeTranslateXTimeline(Animation.TranslateXTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("TranslateXTimeline"); - - json.writeName("boneIndex"); - json.writeValue(obj.getBoneIndex()); - - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); - - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); - - json.writeName("duration"); - json.writeValue(obj.getDuration()); - - json.writeObjectEnd(); - } - - private void writeTranslateYTimeline(Animation.TranslateYTimeline obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("TranslateYTimeline"); + private final Set visitedObjects = new HashSet<>(); + private JsonWriter json; + + public String serializeSkeletonData (SkeletonData data) { + visitedObjects.clear(); + json = new JsonWriter(); + writeSkeletonData(data); + json.close(); + return json.getString(); + } + + public String serializeSkeleton (Skeleton skeleton) { + visitedObjects.clear(); + json = new JsonWriter(); + writeSkeleton(skeleton); + json.close(); + return json.getString(); + } + + public String serializeAnimationState (AnimationState state) { + visitedObjects.clear(); + json = new JsonWriter(); + writeAnimationState(state); + json.close(); + return json.getString(); + } + + private void writeAnimation (Animation obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("Animation"); + + json.writeName("timelines"); + json.writeArrayStart(); + for (Timeline item : obj.getTimelines()) { + writeTimeline(item); + } + json.writeArrayEnd(); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeName("bones"); + writeIntArray(obj.getBones()); + + json.writeName("name"); + json.writeValue(obj.getName()); + + json.writeObjectEnd(); + } + + private void writeAlphaTimeline (Animation.AlphaTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("AlphaTimeline"); + + json.writeName("slotIndex"); + json.writeValue(obj.getSlotIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeAttachmentTimeline (Animation.AttachmentTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("AttachmentTimeline"); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("slotIndex"); + json.writeValue(obj.getSlotIndex()); + + json.writeName("attachmentNames"); + json.writeArrayStart(); + for (String item : obj.getAttachmentNames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeDeformTimeline (Animation.DeformTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("DeformTimeline"); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("attachment"); + writeVertexAttachment(obj.getAttachment()); + + json.writeName("vertices"); + json.writeArrayStart(); + for (float[] nestedArray : obj.getVertices()) { + json.writeArrayStart(); + for (float elem : nestedArray) { + json.writeValue(elem); + } + json.writeArrayEnd(); + } + json.writeArrayEnd(); + + json.writeName("slotIndex"); + json.writeValue(obj.getSlotIndex()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeDrawOrderTimeline (Animation.DrawOrderTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("DrawOrderTimeline"); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("drawOrders"); + json.writeArrayStart(); + for (int[] nestedArray : obj.getDrawOrders()) { + json.writeArrayStart(); + for (int elem : nestedArray) { + json.writeValue(elem); + } + json.writeArrayEnd(); + } + json.writeArrayEnd(); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeEventTimeline (Animation.EventTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("EventTimeline"); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("events"); + json.writeArrayStart(); + for (Event item : obj.getEvents()) { + writeEvent(item); + } + json.writeArrayEnd(); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeIkConstraintTimeline (Animation.IkConstraintTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("IkConstraintTimeline"); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeInheritTimeline (Animation.InheritTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("InheritTimeline"); + + json.writeName("boneIndex"); + json.writeValue(obj.getBoneIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writePathConstraintMixTimeline (Animation.PathConstraintMixTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PathConstraintMixTimeline"); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writePathConstraintPositionTimeline (Animation.PathConstraintPositionTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PathConstraintPositionTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writePathConstraintSpacingTimeline (Animation.PathConstraintSpacingTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PathConstraintSpacingTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writePhysicsConstraintDampingTimeline (Animation.PhysicsConstraintDampingTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PhysicsConstraintDampingTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writePhysicsConstraintGravityTimeline (Animation.PhysicsConstraintGravityTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PhysicsConstraintGravityTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writePhysicsConstraintInertiaTimeline (Animation.PhysicsConstraintInertiaTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PhysicsConstraintInertiaTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writePhysicsConstraintMassTimeline (Animation.PhysicsConstraintMassTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PhysicsConstraintMassTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writePhysicsConstraintMixTimeline (Animation.PhysicsConstraintMixTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PhysicsConstraintMixTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writePhysicsConstraintResetTimeline (Animation.PhysicsConstraintResetTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PhysicsConstraintResetTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writePhysicsConstraintStrengthTimeline (Animation.PhysicsConstraintStrengthTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PhysicsConstraintStrengthTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writePhysicsConstraintWindTimeline (Animation.PhysicsConstraintWindTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PhysicsConstraintWindTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeRGB2Timeline (Animation.RGB2Timeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("RGB2Timeline"); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("slotIndex"); + json.writeValue(obj.getSlotIndex()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeRGBA2Timeline (Animation.RGBA2Timeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("RGBA2Timeline"); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("slotIndex"); + json.writeValue(obj.getSlotIndex()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeRGBATimeline (Animation.RGBATimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("RGBATimeline"); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("slotIndex"); + json.writeValue(obj.getSlotIndex()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeRGBTimeline (Animation.RGBTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("RGBTimeline"); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("slotIndex"); + json.writeValue(obj.getSlotIndex()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeRotateTimeline (Animation.RotateTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("RotateTimeline"); + + json.writeName("boneIndex"); + json.writeValue(obj.getBoneIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeScaleTimeline (Animation.ScaleTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ScaleTimeline"); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("boneIndex"); + json.writeValue(obj.getBoneIndex()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeScaleXTimeline (Animation.ScaleXTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ScaleXTimeline"); + + json.writeName("boneIndex"); + json.writeValue(obj.getBoneIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeScaleYTimeline (Animation.ScaleYTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ScaleYTimeline"); + + json.writeName("boneIndex"); + json.writeValue(obj.getBoneIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeSequenceTimeline (Animation.SequenceTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("SequenceTimeline"); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("slotIndex"); + json.writeValue(obj.getSlotIndex()); + + json.writeName("attachment"); + writeAttachment(obj.getAttachment()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeShearTimeline (Animation.ShearTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ShearTimeline"); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("boneIndex"); + json.writeValue(obj.getBoneIndex()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeShearXTimeline (Animation.ShearXTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ShearXTimeline"); + + json.writeName("boneIndex"); + json.writeValue(obj.getBoneIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeShearYTimeline (Animation.ShearYTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ShearYTimeline"); + + json.writeName("boneIndex"); + json.writeValue(obj.getBoneIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeSliderMixTimeline (Animation.SliderMixTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("SliderMixTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeSliderTimeline (Animation.SliderTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("SliderTimeline"); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeTimeline (Animation.Timeline obj) { + if (obj instanceof Animation.AlphaTimeline) { + writeAlphaTimeline((Animation.AlphaTimeline)obj); + } else if (obj instanceof Animation.AttachmentTimeline) { + writeAttachmentTimeline((Animation.AttachmentTimeline)obj); + } else if (obj instanceof Animation.DeformTimeline) { + writeDeformTimeline((Animation.DeformTimeline)obj); + } else if (obj instanceof Animation.DrawOrderTimeline) { + writeDrawOrderTimeline((Animation.DrawOrderTimeline)obj); + } else if (obj instanceof Animation.EventTimeline) { + writeEventTimeline((Animation.EventTimeline)obj); + } else if (obj instanceof Animation.IkConstraintTimeline) { + writeIkConstraintTimeline((Animation.IkConstraintTimeline)obj); + } else if (obj instanceof Animation.InheritTimeline) { + writeInheritTimeline((Animation.InheritTimeline)obj); + } else if (obj instanceof Animation.PathConstraintMixTimeline) { + writePathConstraintMixTimeline((Animation.PathConstraintMixTimeline)obj); + } else if (obj instanceof Animation.PathConstraintPositionTimeline) { + writePathConstraintPositionTimeline((Animation.PathConstraintPositionTimeline)obj); + } else if (obj instanceof Animation.PathConstraintSpacingTimeline) { + writePathConstraintSpacingTimeline((Animation.PathConstraintSpacingTimeline)obj); + } else if (obj instanceof Animation.PhysicsConstraintDampingTimeline) { + writePhysicsConstraintDampingTimeline((Animation.PhysicsConstraintDampingTimeline)obj); + } else if (obj instanceof Animation.PhysicsConstraintGravityTimeline) { + writePhysicsConstraintGravityTimeline((Animation.PhysicsConstraintGravityTimeline)obj); + } else if (obj instanceof Animation.PhysicsConstraintInertiaTimeline) { + writePhysicsConstraintInertiaTimeline((Animation.PhysicsConstraintInertiaTimeline)obj); + } else if (obj instanceof Animation.PhysicsConstraintMassTimeline) { + writePhysicsConstraintMassTimeline((Animation.PhysicsConstraintMassTimeline)obj); + } else if (obj instanceof Animation.PhysicsConstraintMixTimeline) { + writePhysicsConstraintMixTimeline((Animation.PhysicsConstraintMixTimeline)obj); + } else if (obj instanceof Animation.PhysicsConstraintResetTimeline) { + writePhysicsConstraintResetTimeline((Animation.PhysicsConstraintResetTimeline)obj); + } else if (obj instanceof Animation.PhysicsConstraintStrengthTimeline) { + writePhysicsConstraintStrengthTimeline((Animation.PhysicsConstraintStrengthTimeline)obj); + } else if (obj instanceof Animation.PhysicsConstraintWindTimeline) { + writePhysicsConstraintWindTimeline((Animation.PhysicsConstraintWindTimeline)obj); + } else if (obj instanceof Animation.RGB2Timeline) { + writeRGB2Timeline((Animation.RGB2Timeline)obj); + } else if (obj instanceof Animation.RGBA2Timeline) { + writeRGBA2Timeline((Animation.RGBA2Timeline)obj); + } else if (obj instanceof Animation.RGBATimeline) { + writeRGBATimeline((Animation.RGBATimeline)obj); + } else if (obj instanceof Animation.RGBTimeline) { + writeRGBTimeline((Animation.RGBTimeline)obj); + } else if (obj instanceof Animation.RotateTimeline) { + writeRotateTimeline((Animation.RotateTimeline)obj); + } else if (obj instanceof Animation.ScaleTimeline) { + writeScaleTimeline((Animation.ScaleTimeline)obj); + } else if (obj instanceof Animation.ScaleXTimeline) { + writeScaleXTimeline((Animation.ScaleXTimeline)obj); + } else if (obj instanceof Animation.ScaleYTimeline) { + writeScaleYTimeline((Animation.ScaleYTimeline)obj); + } else if (obj instanceof Animation.SequenceTimeline) { + writeSequenceTimeline((Animation.SequenceTimeline)obj); + } else if (obj instanceof Animation.ShearTimeline) { + writeShearTimeline((Animation.ShearTimeline)obj); + } else if (obj instanceof Animation.ShearXTimeline) { + writeShearXTimeline((Animation.ShearXTimeline)obj); + } else if (obj instanceof Animation.ShearYTimeline) { + writeShearYTimeline((Animation.ShearYTimeline)obj); + } else if (obj instanceof Animation.SliderMixTimeline) { + writeSliderMixTimeline((Animation.SliderMixTimeline)obj); + } else if (obj instanceof Animation.SliderTimeline) { + writeSliderTimeline((Animation.SliderTimeline)obj); + } else if (obj instanceof Animation.TransformConstraintTimeline) { + writeTransformConstraintTimeline((Animation.TransformConstraintTimeline)obj); + } else if (obj instanceof Animation.TranslateTimeline) { + writeTranslateTimeline((Animation.TranslateTimeline)obj); + } else if (obj instanceof Animation.TranslateXTimeline) { + writeTranslateXTimeline((Animation.TranslateXTimeline)obj); + } else if (obj instanceof Animation.TranslateYTimeline) { + writeTranslateYTimeline((Animation.TranslateYTimeline)obj); + } else { + throw new RuntimeException("Unknown Timeline type: " + obj.getClass().getName()); + } + } + + private void writeTransformConstraintTimeline (Animation.TransformConstraintTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("TransformConstraintTimeline"); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("constraintIndex"); + json.writeValue(obj.getConstraintIndex()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeTranslateTimeline (Animation.TranslateTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("TranslateTimeline"); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("boneIndex"); + json.writeValue(obj.getBoneIndex()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeTranslateXTimeline (Animation.TranslateXTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("TranslateXTimeline"); + + json.writeName("boneIndex"); + json.writeValue(obj.getBoneIndex()); + + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); + + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); + + json.writeName("duration"); + json.writeValue(obj.getDuration()); + + json.writeObjectEnd(); + } + + private void writeTranslateYTimeline (Animation.TranslateYTimeline obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("TranslateYTimeline"); - json.writeName("boneIndex"); - json.writeValue(obj.getBoneIndex()); + json.writeName("boneIndex"); + json.writeValue(obj.getBoneIndex()); - json.writeName("frameEntries"); - json.writeValue(obj.getFrameEntries()); + json.writeName("frameEntries"); + json.writeValue(obj.getFrameEntries()); - json.writeName("propertyIds"); - json.writeArrayStart(); - for (String item : obj.getPropertyIds()) { - json.writeValue(item); - } - json.writeArrayEnd(); + json.writeName("propertyIds"); + json.writeArrayStart(); + for (String item : obj.getPropertyIds()) { + json.writeValue(item); + } + json.writeArrayEnd(); - json.writeName("frames"); - json.writeArrayStart(); - for (float item : obj.getFrames()) { - json.writeValue(item); - } - json.writeArrayEnd(); + json.writeName("frames"); + json.writeArrayStart(); + for (float item : obj.getFrames()) { + json.writeValue(item); + } + json.writeArrayEnd(); - json.writeName("frameCount"); - json.writeValue(obj.getFrameCount()); + json.writeName("frameCount"); + json.writeValue(obj.getFrameCount()); - json.writeName("duration"); - json.writeValue(obj.getDuration()); + json.writeName("duration"); + json.writeValue(obj.getDuration()); - json.writeObjectEnd(); - } - - private void writeAnimationState(AnimationState obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + json.writeObjectEnd(); + } + + private void writeAnimationState (AnimationState obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("AnimationState"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("AnimationState"); - json.writeName("timeScale"); - json.writeValue(obj.getTimeScale()); + json.writeName("timeScale"); + json.writeValue(obj.getTimeScale()); - json.writeName("data"); - writeAnimationStateData(obj.getData()); + json.writeName("data"); + writeAnimationStateData(obj.getData()); - json.writeName("tracks"); - json.writeArrayStart(); - for (TrackEntry item : obj.getTracks()) { - writeTrackEntry(item); - } - json.writeArrayEnd(); - - json.writeObjectEnd(); - } + json.writeName("tracks"); + json.writeArrayStart(); + for (TrackEntry item : obj.getTracks()) { + writeTrackEntry(item); + } + json.writeArrayEnd(); + + json.writeObjectEnd(); + } - private void writeTrackEntry(AnimationState.TrackEntry obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeTrackEntry (AnimationState.TrackEntry obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("TrackEntry"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("TrackEntry"); - json.writeName("trackIndex"); - json.writeValue(obj.getTrackIndex()); + json.writeName("trackIndex"); + json.writeValue(obj.getTrackIndex()); - json.writeName("animation"); - writeAnimation(obj.getAnimation()); + json.writeName("animation"); + writeAnimation(obj.getAnimation()); - json.writeName("loop"); - json.writeValue(obj.getLoop()); + json.writeName("loop"); + json.writeValue(obj.getLoop()); - json.writeName("delay"); - json.writeValue(obj.getDelay()); + json.writeName("delay"); + json.writeValue(obj.getDelay()); - json.writeName("trackTime"); - json.writeValue(obj.getTrackTime()); + json.writeName("trackTime"); + json.writeValue(obj.getTrackTime()); - json.writeName("trackEnd"); - json.writeValue(obj.getTrackEnd()); + json.writeName("trackEnd"); + json.writeValue(obj.getTrackEnd()); - json.writeName("trackComplete"); - json.writeValue(obj.getTrackComplete()); + json.writeName("trackComplete"); + json.writeValue(obj.getTrackComplete()); - json.writeName("animationStart"); - json.writeValue(obj.getAnimationStart()); + json.writeName("animationStart"); + json.writeValue(obj.getAnimationStart()); - json.writeName("animationEnd"); - json.writeValue(obj.getAnimationEnd()); + json.writeName("animationEnd"); + json.writeValue(obj.getAnimationEnd()); - json.writeName("animationLast"); - json.writeValue(obj.getAnimationLast()); - - json.writeName("animationTime"); - json.writeValue(obj.getAnimationTime()); - - json.writeName("timeScale"); - json.writeValue(obj.getTimeScale()); - - json.writeName("alpha"); - json.writeValue(obj.getAlpha()); - - json.writeName("eventThreshold"); - json.writeValue(obj.getEventThreshold()); - - json.writeName("alphaAttachmentThreshold"); - json.writeValue(obj.getAlphaAttachmentThreshold()); - - json.writeName("mixAttachmentThreshold"); - json.writeValue(obj.getMixAttachmentThreshold()); - - json.writeName("mixDrawOrderThreshold"); - json.writeValue(obj.getMixDrawOrderThreshold()); - - json.writeName("next"); - if (obj.getNext() == null) { - json.writeNull(); - } else { - writeTrackEntry(obj.getNext()); - } - - json.writeName("previous"); - if (obj.getPrevious() == null) { - json.writeNull(); - } else { - writeTrackEntry(obj.getPrevious()); - } - - json.writeName("mixTime"); - json.writeValue(obj.getMixTime()); - - json.writeName("mixDuration"); - json.writeValue(obj.getMixDuration()); - - json.writeName("mixBlend"); - json.writeValue(obj.getMixBlend().name()); - - json.writeName("mixingFrom"); - if (obj.getMixingFrom() == null) { - json.writeNull(); - } else { - writeTrackEntry(obj.getMixingFrom()); - } - - json.writeName("mixingTo"); - if (obj.getMixingTo() == null) { - json.writeNull(); - } else { - writeTrackEntry(obj.getMixingTo()); - } - - json.writeName("holdPrevious"); - json.writeValue(obj.getHoldPrevious()); - - json.writeName("shortestRotation"); - json.writeValue(obj.getShortestRotation()); - - json.writeName("reverse"); - json.writeValue(obj.getReverse()); - - json.writeObjectEnd(); - } - - private void writeAnimationStateData(AnimationStateData obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("AnimationStateData"); - - json.writeName("skeletonData"); - writeSkeletonData(obj.getSkeletonData()); - - json.writeName("defaultMix"); - json.writeValue(obj.getDefaultMix()); - - json.writeObjectEnd(); - } - - private void writeAttachment(Attachment obj) { - if (obj instanceof BoundingBoxAttachment) { - writeBoundingBoxAttachment((BoundingBoxAttachment) obj); - } else if (obj instanceof ClippingAttachment) { - writeClippingAttachment((ClippingAttachment) obj); - } else if (obj instanceof MeshAttachment) { - writeMeshAttachment((MeshAttachment) obj); - } else if (obj instanceof PathAttachment) { - writePathAttachment((PathAttachment) obj); - } else if (obj instanceof PointAttachment) { - writePointAttachment((PointAttachment) obj); - } else if (obj instanceof RegionAttachment) { - writeRegionAttachment((RegionAttachment) obj); - } else { - throw new RuntimeException("Unknown Attachment type: " + obj.getClass().getName()); - } - } - - private void writeBone(Bone obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("Bone"); - - json.writeName("parent"); - if (obj.getParent() == null) { - json.writeNull(); - } else { - writeBone(obj.getParent()); - } - - json.writeName("children"); - json.writeArrayStart(); - for (Bone item : obj.getChildren()) { - writeBone(item); - } - json.writeArrayEnd(); - - json.writeName("data"); - writeBoneData(obj.getData()); - - json.writeName("pose"); - writeBoneLocal(obj.getPose()); - - json.writeName("appliedPose"); - writeBonePose(obj.getAppliedPose()); - - json.writeObjectEnd(); - } - - private void writeBoneData(BoneData obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("BoneData"); - - json.writeName("index"); - json.writeValue(obj.getIndex()); - - json.writeName("parent"); - if (obj.getParent() == null) { - json.writeNull(); - } else { - writeBoneData(obj.getParent()); - } + json.writeName("animationLast"); + json.writeValue(obj.getAnimationLast()); + + json.writeName("animationTime"); + json.writeValue(obj.getAnimationTime()); + + json.writeName("timeScale"); + json.writeValue(obj.getTimeScale()); + + json.writeName("alpha"); + json.writeValue(obj.getAlpha()); + + json.writeName("eventThreshold"); + json.writeValue(obj.getEventThreshold()); + + json.writeName("alphaAttachmentThreshold"); + json.writeValue(obj.getAlphaAttachmentThreshold()); + + json.writeName("mixAttachmentThreshold"); + json.writeValue(obj.getMixAttachmentThreshold()); + + json.writeName("mixDrawOrderThreshold"); + json.writeValue(obj.getMixDrawOrderThreshold()); + + json.writeName("next"); + if (obj.getNext() == null) { + json.writeNull(); + } else { + writeTrackEntry(obj.getNext()); + } + + json.writeName("previous"); + if (obj.getPrevious() == null) { + json.writeNull(); + } else { + writeTrackEntry(obj.getPrevious()); + } + + json.writeName("mixTime"); + json.writeValue(obj.getMixTime()); + + json.writeName("mixDuration"); + json.writeValue(obj.getMixDuration()); + + json.writeName("mixBlend"); + json.writeValue(obj.getMixBlend().name()); + + json.writeName("mixingFrom"); + if (obj.getMixingFrom() == null) { + json.writeNull(); + } else { + writeTrackEntry(obj.getMixingFrom()); + } + + json.writeName("mixingTo"); + if (obj.getMixingTo() == null) { + json.writeNull(); + } else { + writeTrackEntry(obj.getMixingTo()); + } + + json.writeName("holdPrevious"); + json.writeValue(obj.getHoldPrevious()); + + json.writeName("shortestRotation"); + json.writeValue(obj.getShortestRotation()); + + json.writeName("reverse"); + json.writeValue(obj.getReverse()); + + json.writeObjectEnd(); + } + + private void writeAnimationStateData (AnimationStateData obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("AnimationStateData"); + + json.writeName("skeletonData"); + writeSkeletonData(obj.getSkeletonData()); + + json.writeName("defaultMix"); + json.writeValue(obj.getDefaultMix()); + + json.writeObjectEnd(); + } + + private void writeAttachment (Attachment obj) { + if (obj instanceof BoundingBoxAttachment) { + writeBoundingBoxAttachment((BoundingBoxAttachment)obj); + } else if (obj instanceof ClippingAttachment) { + writeClippingAttachment((ClippingAttachment)obj); + } else if (obj instanceof MeshAttachment) { + writeMeshAttachment((MeshAttachment)obj); + } else if (obj instanceof PathAttachment) { + writePathAttachment((PathAttachment)obj); + } else if (obj instanceof PointAttachment) { + writePointAttachment((PointAttachment)obj); + } else if (obj instanceof RegionAttachment) { + writeRegionAttachment((RegionAttachment)obj); + } else { + throw new RuntimeException("Unknown Attachment type: " + obj.getClass().getName()); + } + } + + private void writeBone (Bone obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("Bone"); + + json.writeName("parent"); + if (obj.getParent() == null) { + json.writeNull(); + } else { + writeBone(obj.getParent()); + } + + json.writeName("children"); + json.writeArrayStart(); + for (Bone item : obj.getChildren()) { + writeBone(item); + } + json.writeArrayEnd(); + + json.writeName("data"); + writeBoneData(obj.getData()); + + json.writeName("pose"); + writeBoneLocal(obj.getPose()); + + json.writeName("appliedPose"); + writeBonePose(obj.getAppliedPose()); + + json.writeObjectEnd(); + } + + private void writeBoneData (BoneData obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("BoneData"); + + json.writeName("index"); + json.writeValue(obj.getIndex()); + + json.writeName("parent"); + if (obj.getParent() == null) { + json.writeNull(); + } else { + writeBoneData(obj.getParent()); + } - json.writeName("length"); - json.writeValue(obj.getLength()); + json.writeName("length"); + json.writeValue(obj.getLength()); - json.writeName("color"); - writeColor(obj.getColor()); + json.writeName("color"); + writeColor(obj.getColor()); - json.writeName("icon"); - json.writeValue(obj.getIcon()); + json.writeName("icon"); + json.writeValue(obj.getIcon()); - json.writeName("visible"); - json.writeValue(obj.getVisible()); + json.writeName("visible"); + json.writeValue(obj.getVisible()); - json.writeName("name"); - json.writeValue(obj.getName()); + json.writeName("name"); + json.writeValue(obj.getName()); - json.writeName("setupPose"); - writeBoneLocal(obj.getSetupPose()); + json.writeName("setupPose"); + writeBoneLocal(obj.getSetupPose()); - json.writeName("skinRequired"); - json.writeValue(obj.getSkinRequired()); + json.writeName("skinRequired"); + json.writeValue(obj.getSkinRequired()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writeBoneLocal(BoneLocal obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeBoneLocal (BoneLocal obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("BoneLocal"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("BoneLocal"); - json.writeName("x"); - json.writeValue(obj.getX()); + json.writeName("x"); + json.writeValue(obj.getX()); - json.writeName("y"); - json.writeValue(obj.getY()); + json.writeName("y"); + json.writeValue(obj.getY()); - json.writeName("rotation"); - json.writeValue(obj.getRotation()); + json.writeName("rotation"); + json.writeValue(obj.getRotation()); - json.writeName("scaleX"); - json.writeValue(obj.getScaleX()); + json.writeName("scaleX"); + json.writeValue(obj.getScaleX()); - json.writeName("scaleY"); - json.writeValue(obj.getScaleY()); + json.writeName("scaleY"); + json.writeValue(obj.getScaleY()); - json.writeName("shearX"); - json.writeValue(obj.getShearX()); + json.writeName("shearX"); + json.writeValue(obj.getShearX()); - json.writeName("shearY"); - json.writeValue(obj.getShearY()); + json.writeName("shearY"); + json.writeValue(obj.getShearY()); - json.writeName("inherit"); - json.writeValue(obj.getInherit().name()); + json.writeName("inherit"); + json.writeValue(obj.getInherit().name()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writeBonePose(BonePose obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeBonePose (BonePose obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("BonePose"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("BonePose"); - json.writeName("a"); - json.writeValue(obj.getA()); + json.writeName("a"); + json.writeValue(obj.getA()); - json.writeName("b"); - json.writeValue(obj.getB()); + json.writeName("b"); + json.writeValue(obj.getB()); - json.writeName("c"); - json.writeValue(obj.getC()); + json.writeName("c"); + json.writeValue(obj.getC()); - json.writeName("d"); - json.writeValue(obj.getD()); + json.writeName("d"); + json.writeValue(obj.getD()); - json.writeName("worldX"); - json.writeValue(obj.getWorldX()); + json.writeName("worldX"); + json.writeValue(obj.getWorldX()); - json.writeName("worldY"); - json.writeValue(obj.getWorldY()); + json.writeName("worldY"); + json.writeValue(obj.getWorldY()); - json.writeName("worldRotationX"); - json.writeValue(obj.getWorldRotationX()); + json.writeName("worldRotationX"); + json.writeValue(obj.getWorldRotationX()); - json.writeName("worldRotationY"); - json.writeValue(obj.getWorldRotationY()); + json.writeName("worldRotationY"); + json.writeValue(obj.getWorldRotationY()); - json.writeName("worldScaleX"); - json.writeValue(obj.getWorldScaleX()); + json.writeName("worldScaleX"); + json.writeValue(obj.getWorldScaleX()); - json.writeName("worldScaleY"); - json.writeValue(obj.getWorldScaleY()); + json.writeName("worldScaleY"); + json.writeValue(obj.getWorldScaleY()); - json.writeName("x"); - json.writeValue(obj.getX()); + json.writeName("x"); + json.writeValue(obj.getX()); - json.writeName("y"); - json.writeValue(obj.getY()); + json.writeName("y"); + json.writeValue(obj.getY()); - json.writeName("rotation"); - json.writeValue(obj.getRotation()); + json.writeName("rotation"); + json.writeValue(obj.getRotation()); - json.writeName("scaleX"); - json.writeValue(obj.getScaleX()); + json.writeName("scaleX"); + json.writeValue(obj.getScaleX()); - json.writeName("scaleY"); - json.writeValue(obj.getScaleY()); + json.writeName("scaleY"); + json.writeValue(obj.getScaleY()); - json.writeName("shearX"); - json.writeValue(obj.getShearX()); + json.writeName("shearX"); + json.writeValue(obj.getShearX()); - json.writeName("shearY"); - json.writeValue(obj.getShearY()); + json.writeName("shearY"); + json.writeValue(obj.getShearY()); - json.writeName("inherit"); - json.writeValue(obj.getInherit().name()); - - json.writeObjectEnd(); - } + json.writeName("inherit"); + json.writeValue(obj.getInherit().name()); + + json.writeObjectEnd(); + } - private void writeBoundingBoxAttachment(BoundingBoxAttachment obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeBoundingBoxAttachment (BoundingBoxAttachment obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("BoundingBoxAttachment"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("BoundingBoxAttachment"); - json.writeName("color"); - writeColor(obj.getColor()); - - json.writeName("bones"); - if (obj.getBones() == null) { - json.writeNull(); - } else { - json.writeArrayStart(); - for (int item : obj.getBones()) { - json.writeValue(item); - } - json.writeArrayEnd(); - } - - json.writeName("vertices"); - json.writeArrayStart(); - for (float item : obj.getVertices()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("worldVerticesLength"); - json.writeValue(obj.getWorldVerticesLength()); - - json.writeName("timelineAttachment"); - if (obj.getTimelineAttachment() == null) { - json.writeNull(); - } else { - writeAttachment(obj.getTimelineAttachment()); - } - - json.writeName("id"); - json.writeValue(obj.getId()); - - json.writeName("name"); - json.writeValue(obj.getName()); - - json.writeObjectEnd(); - } - - private void writeClippingAttachment(ClippingAttachment obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ClippingAttachment"); - - json.writeName("endSlot"); - if (obj.getEndSlot() == null) { - json.writeNull(); - } else { - writeSlotData(obj.getEndSlot()); - } - - json.writeName("color"); - writeColor(obj.getColor()); - - json.writeName("bones"); - if (obj.getBones() == null) { - json.writeNull(); - } else { - json.writeArrayStart(); - for (int item : obj.getBones()) { - json.writeValue(item); - } - json.writeArrayEnd(); - } - - json.writeName("vertices"); - json.writeArrayStart(); - for (float item : obj.getVertices()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("worldVerticesLength"); - json.writeValue(obj.getWorldVerticesLength()); - - json.writeName("timelineAttachment"); - if (obj.getTimelineAttachment() == null) { - json.writeNull(); - } else { - writeAttachment(obj.getTimelineAttachment()); - } - - json.writeName("id"); - json.writeValue(obj.getId()); - - json.writeName("name"); - json.writeValue(obj.getName()); - - json.writeObjectEnd(); - } - - private void writeConstraint(Constraint obj) { - if (obj instanceof IkConstraint) { - writeIkConstraint((IkConstraint) obj); - } else if (obj instanceof PathConstraint) { - writePathConstraint((PathConstraint) obj); - } else if (obj instanceof PhysicsConstraint) { - writePhysicsConstraint((PhysicsConstraint) obj); - } else if (obj instanceof Slider) { - writeSlider((Slider) obj); - } else if (obj instanceof TransformConstraint) { - writeTransformConstraint((TransformConstraint) obj); - } else { - throw new RuntimeException("Unknown Constraint type: " + obj.getClass().getName()); - } - } - - private void writeConstraintData(ConstraintData obj) { - if (obj instanceof IkConstraintData) { - writeIkConstraintData((IkConstraintData) obj); - } else if (obj instanceof PathConstraintData) { - writePathConstraintData((PathConstraintData) obj); - } else if (obj instanceof PhysicsConstraintData) { - writePhysicsConstraintData((PhysicsConstraintData) obj); - } else if (obj instanceof SliderData) { - writeSliderData((SliderData) obj); - } else if (obj instanceof TransformConstraintData) { - writeTransformConstraintData((TransformConstraintData) obj); - } else { - throw new RuntimeException("Unknown ConstraintData type: " + obj.getClass().getName()); - } - } - - private void writeEvent(Event obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("Event"); - - json.writeName("int"); - json.writeValue(obj.getInt()); - - json.writeName("float"); - json.writeValue(obj.getFloat()); - - json.writeName("string"); - json.writeValue(obj.getString()); - - json.writeName("volume"); - json.writeValue(obj.getVolume()); - - json.writeName("balance"); - json.writeValue(obj.getBalance()); - - json.writeName("time"); - json.writeValue(obj.getTime()); - - json.writeName("data"); - writeEventData(obj.getData()); - - json.writeObjectEnd(); - } - - private void writeEventData(EventData obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("EventData"); - - json.writeName("int"); - json.writeValue(obj.getInt()); - - json.writeName("float"); - json.writeValue(obj.getFloat()); - - json.writeName("string"); - json.writeValue(obj.getString()); - - json.writeName("audioPath"); - json.writeValue(obj.getAudioPath()); - - json.writeName("volume"); - json.writeValue(obj.getVolume()); - - json.writeName("balance"); - json.writeValue(obj.getBalance()); - - json.writeName("name"); - json.writeValue(obj.getName()); - - json.writeObjectEnd(); - } - - private void writeIkConstraint(IkConstraint obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("IkConstraint"); - - json.writeName("bones"); - json.writeArrayStart(); - for (BonePose item : obj.getBones()) { - writeBonePose(item); - } - json.writeArrayEnd(); - - json.writeName("target"); - writeBone(obj.getTarget()); - - json.writeName("data"); - writeIkConstraintData(obj.getData()); + json.writeName("color"); + writeColor(obj.getColor()); + + json.writeName("bones"); + if (obj.getBones() == null) { + json.writeNull(); + } else { + json.writeArrayStart(); + for (int item : obj.getBones()) { + json.writeValue(item); + } + json.writeArrayEnd(); + } + + json.writeName("vertices"); + json.writeArrayStart(); + for (float item : obj.getVertices()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("worldVerticesLength"); + json.writeValue(obj.getWorldVerticesLength()); + + json.writeName("timelineAttachment"); + if (obj.getTimelineAttachment() == null) { + json.writeNull(); + } else { + writeAttachment(obj.getTimelineAttachment()); + } + + json.writeName("id"); + json.writeValue(obj.getId()); + + json.writeName("name"); + json.writeValue(obj.getName()); + + json.writeObjectEnd(); + } + + private void writeClippingAttachment (ClippingAttachment obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ClippingAttachment"); + + json.writeName("endSlot"); + if (obj.getEndSlot() == null) { + json.writeNull(); + } else { + writeSlotData(obj.getEndSlot()); + } + + json.writeName("color"); + writeColor(obj.getColor()); + + json.writeName("bones"); + if (obj.getBones() == null) { + json.writeNull(); + } else { + json.writeArrayStart(); + for (int item : obj.getBones()) { + json.writeValue(item); + } + json.writeArrayEnd(); + } + + json.writeName("vertices"); + json.writeArrayStart(); + for (float item : obj.getVertices()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("worldVerticesLength"); + json.writeValue(obj.getWorldVerticesLength()); + + json.writeName("timelineAttachment"); + if (obj.getTimelineAttachment() == null) { + json.writeNull(); + } else { + writeAttachment(obj.getTimelineAttachment()); + } + + json.writeName("id"); + json.writeValue(obj.getId()); + + json.writeName("name"); + json.writeValue(obj.getName()); + + json.writeObjectEnd(); + } + + private void writeConstraint (Constraint obj) { + if (obj instanceof IkConstraint) { + writeIkConstraint((IkConstraint)obj); + } else if (obj instanceof PathConstraint) { + writePathConstraint((PathConstraint)obj); + } else if (obj instanceof PhysicsConstraint) { + writePhysicsConstraint((PhysicsConstraint)obj); + } else if (obj instanceof Slider) { + writeSlider((Slider)obj); + } else if (obj instanceof TransformConstraint) { + writeTransformConstraint((TransformConstraint)obj); + } else { + throw new RuntimeException("Unknown Constraint type: " + obj.getClass().getName()); + } + } + + private void writeConstraintData (ConstraintData obj) { + if (obj instanceof IkConstraintData) { + writeIkConstraintData((IkConstraintData)obj); + } else if (obj instanceof PathConstraintData) { + writePathConstraintData((PathConstraintData)obj); + } else if (obj instanceof PhysicsConstraintData) { + writePhysicsConstraintData((PhysicsConstraintData)obj); + } else if (obj instanceof SliderData) { + writeSliderData((SliderData)obj); + } else if (obj instanceof TransformConstraintData) { + writeTransformConstraintData((TransformConstraintData)obj); + } else { + throw new RuntimeException("Unknown ConstraintData type: " + obj.getClass().getName()); + } + } + + private void writeEvent (Event obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("Event"); + + json.writeName("int"); + json.writeValue(obj.getInt()); + + json.writeName("float"); + json.writeValue(obj.getFloat()); + + json.writeName("string"); + json.writeValue(obj.getString()); + + json.writeName("volume"); + json.writeValue(obj.getVolume()); + + json.writeName("balance"); + json.writeValue(obj.getBalance()); + + json.writeName("time"); + json.writeValue(obj.getTime()); + + json.writeName("data"); + writeEventData(obj.getData()); + + json.writeObjectEnd(); + } + + private void writeEventData (EventData obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("EventData"); + + json.writeName("int"); + json.writeValue(obj.getInt()); + + json.writeName("float"); + json.writeValue(obj.getFloat()); + + json.writeName("string"); + json.writeValue(obj.getString()); + + json.writeName("audioPath"); + json.writeValue(obj.getAudioPath()); + + json.writeName("volume"); + json.writeValue(obj.getVolume()); + + json.writeName("balance"); + json.writeValue(obj.getBalance()); + + json.writeName("name"); + json.writeValue(obj.getName()); + + json.writeObjectEnd(); + } + + private void writeIkConstraint (IkConstraint obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("IkConstraint"); + + json.writeName("bones"); + json.writeArrayStart(); + for (BonePose item : obj.getBones()) { + writeBonePose(item); + } + json.writeArrayEnd(); + + json.writeName("target"); + writeBone(obj.getTarget()); + + json.writeName("data"); + writeIkConstraintData(obj.getData()); - json.writeName("pose"); - writeIkConstraintPose(obj.getPose()); + json.writeName("pose"); + writeIkConstraintPose(obj.getPose()); - json.writeName("appliedPose"); - writeIkConstraintPose(obj.getAppliedPose()); + json.writeName("appliedPose"); + writeIkConstraintPose(obj.getAppliedPose()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writeIkConstraintData(IkConstraintData obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeIkConstraintData (IkConstraintData obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("IkConstraintData"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("IkConstraintData"); - json.writeName("bones"); - json.writeArrayStart(); - for (BoneData item : obj.getBones()) { - writeBoneData(item); - } - json.writeArrayEnd(); - - json.writeName("target"); - writeBoneData(obj.getTarget()); - - json.writeName("uniform"); - json.writeValue(obj.getUniform()); - - json.writeName("name"); - json.writeValue(obj.getName()); - - json.writeName("setupPose"); - writeIkConstraintPose(obj.getSetupPose()); - - json.writeName("skinRequired"); - json.writeValue(obj.getSkinRequired()); - - json.writeObjectEnd(); - } - - private void writeIkConstraintPose(IkConstraintPose obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("IkConstraintPose"); - - json.writeName("mix"); - json.writeValue(obj.getMix()); - - json.writeName("softness"); - json.writeValue(obj.getSoftness()); - - json.writeName("bendDirection"); - json.writeValue(obj.getBendDirection()); - - json.writeName("compress"); - json.writeValue(obj.getCompress()); - - json.writeName("stretch"); - json.writeValue(obj.getStretch()); - - json.writeObjectEnd(); - } - - private void writeMeshAttachment(MeshAttachment obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("MeshAttachment"); - - json.writeName("region"); - if (obj.getRegion() == null) { - json.writeNull(); - } else { - writeTextureRegion(obj.getRegion()); - } - - json.writeName("triangles"); - json.writeArrayStart(); - for (short item : obj.getTriangles()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("regionUVs"); - json.writeArrayStart(); - for (float item : obj.getRegionUVs()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("uVs"); - json.writeArrayStart(); - for (float item : obj.getUVs()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("color"); - writeColor(obj.getColor()); - - json.writeName("path"); - json.writeValue(obj.getPath()); - - json.writeName("hullLength"); - json.writeValue(obj.getHullLength()); - - json.writeName("edges"); - if (obj.getEdges() == null) { - json.writeNull(); - } else { - json.writeArrayStart(); - for (short item : obj.getEdges()) { - json.writeValue(item); - } - json.writeArrayEnd(); - } - - json.writeName("width"); - json.writeValue(obj.getWidth()); - - json.writeName("height"); - json.writeValue(obj.getHeight()); - - json.writeName("sequence"); - if (obj.getSequence() == null) { - json.writeNull(); - } else { - writeSequence(obj.getSequence()); - } - - json.writeName("parentMesh"); - if (obj.getParentMesh() == null) { - json.writeNull(); - } else { - writeMeshAttachment(obj.getParentMesh()); - } - - json.writeName("bones"); - if (obj.getBones() == null) { - json.writeNull(); - } else { - json.writeArrayStart(); - for (int item : obj.getBones()) { - json.writeValue(item); - } - json.writeArrayEnd(); - } - - json.writeName("vertices"); - json.writeArrayStart(); - for (float item : obj.getVertices()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("worldVerticesLength"); - json.writeValue(obj.getWorldVerticesLength()); - - json.writeName("timelineAttachment"); - if (obj.getTimelineAttachment() == null) { - json.writeNull(); - } else { - writeAttachment(obj.getTimelineAttachment()); - } - - json.writeName("id"); - json.writeValue(obj.getId()); - - json.writeName("name"); - json.writeValue(obj.getName()); - - json.writeObjectEnd(); - } - - private void writePathAttachment(PathAttachment obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PathAttachment"); - - json.writeName("closed"); - json.writeValue(obj.getClosed()); - - json.writeName("constantSpeed"); - json.writeValue(obj.getConstantSpeed()); - - json.writeName("lengths"); - json.writeArrayStart(); - for (float item : obj.getLengths()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("color"); - writeColor(obj.getColor()); - - json.writeName("bones"); - if (obj.getBones() == null) { - json.writeNull(); - } else { - json.writeArrayStart(); - for (int item : obj.getBones()) { - json.writeValue(item); - } - json.writeArrayEnd(); - } - - json.writeName("vertices"); - json.writeArrayStart(); - for (float item : obj.getVertices()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("worldVerticesLength"); - json.writeValue(obj.getWorldVerticesLength()); - - json.writeName("timelineAttachment"); - if (obj.getTimelineAttachment() == null) { - json.writeNull(); - } else { - writeAttachment(obj.getTimelineAttachment()); - } - - json.writeName("id"); - json.writeValue(obj.getId()); - - json.writeName("name"); - json.writeValue(obj.getName()); - - json.writeObjectEnd(); - } - - private void writePathConstraint(PathConstraint obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PathConstraint"); - - json.writeName("bones"); - json.writeArrayStart(); - for (BonePose item : obj.getBones()) { - writeBonePose(item); - } - json.writeArrayEnd(); - - json.writeName("slot"); - writeSlot(obj.getSlot()); - - json.writeName("data"); - writePathConstraintData(obj.getData()); - - json.writeName("pose"); - writePathConstraintPose(obj.getPose()); + json.writeName("bones"); + json.writeArrayStart(); + for (BoneData item : obj.getBones()) { + writeBoneData(item); + } + json.writeArrayEnd(); + + json.writeName("target"); + writeBoneData(obj.getTarget()); + + json.writeName("uniform"); + json.writeValue(obj.getUniform()); + + json.writeName("name"); + json.writeValue(obj.getName()); + + json.writeName("setupPose"); + writeIkConstraintPose(obj.getSetupPose()); + + json.writeName("skinRequired"); + json.writeValue(obj.getSkinRequired()); + + json.writeObjectEnd(); + } + + private void writeIkConstraintPose (IkConstraintPose obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("IkConstraintPose"); + + json.writeName("mix"); + json.writeValue(obj.getMix()); + + json.writeName("softness"); + json.writeValue(obj.getSoftness()); + + json.writeName("bendDirection"); + json.writeValue(obj.getBendDirection()); + + json.writeName("compress"); + json.writeValue(obj.getCompress()); + + json.writeName("stretch"); + json.writeValue(obj.getStretch()); + + json.writeObjectEnd(); + } + + private void writeMeshAttachment (MeshAttachment obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("MeshAttachment"); + + json.writeName("region"); + if (obj.getRegion() == null) { + json.writeNull(); + } else { + writeTextureRegion(obj.getRegion()); + } + + json.writeName("triangles"); + json.writeArrayStart(); + for (short item : obj.getTriangles()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("regionUVs"); + json.writeArrayStart(); + for (float item : obj.getRegionUVs()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("uVs"); + json.writeArrayStart(); + for (float item : obj.getUVs()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("color"); + writeColor(obj.getColor()); + + json.writeName("path"); + json.writeValue(obj.getPath()); + + json.writeName("hullLength"); + json.writeValue(obj.getHullLength()); + + json.writeName("edges"); + if (obj.getEdges() == null) { + json.writeNull(); + } else { + json.writeArrayStart(); + for (short item : obj.getEdges()) { + json.writeValue(item); + } + json.writeArrayEnd(); + } + + json.writeName("width"); + json.writeValue(obj.getWidth()); + + json.writeName("height"); + json.writeValue(obj.getHeight()); + + json.writeName("sequence"); + if (obj.getSequence() == null) { + json.writeNull(); + } else { + writeSequence(obj.getSequence()); + } + + json.writeName("parentMesh"); + if (obj.getParentMesh() == null) { + json.writeNull(); + } else { + writeMeshAttachment(obj.getParentMesh()); + } + + json.writeName("bones"); + if (obj.getBones() == null) { + json.writeNull(); + } else { + json.writeArrayStart(); + for (int item : obj.getBones()) { + json.writeValue(item); + } + json.writeArrayEnd(); + } + + json.writeName("vertices"); + json.writeArrayStart(); + for (float item : obj.getVertices()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("worldVerticesLength"); + json.writeValue(obj.getWorldVerticesLength()); + + json.writeName("timelineAttachment"); + if (obj.getTimelineAttachment() == null) { + json.writeNull(); + } else { + writeAttachment(obj.getTimelineAttachment()); + } + + json.writeName("id"); + json.writeValue(obj.getId()); + + json.writeName("name"); + json.writeValue(obj.getName()); + + json.writeObjectEnd(); + } + + private void writePathAttachment (PathAttachment obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PathAttachment"); + + json.writeName("closed"); + json.writeValue(obj.getClosed()); + + json.writeName("constantSpeed"); + json.writeValue(obj.getConstantSpeed()); + + json.writeName("lengths"); + json.writeArrayStart(); + for (float item : obj.getLengths()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("color"); + writeColor(obj.getColor()); + + json.writeName("bones"); + if (obj.getBones() == null) { + json.writeNull(); + } else { + json.writeArrayStart(); + for (int item : obj.getBones()) { + json.writeValue(item); + } + json.writeArrayEnd(); + } + + json.writeName("vertices"); + json.writeArrayStart(); + for (float item : obj.getVertices()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("worldVerticesLength"); + json.writeValue(obj.getWorldVerticesLength()); + + json.writeName("timelineAttachment"); + if (obj.getTimelineAttachment() == null) { + json.writeNull(); + } else { + writeAttachment(obj.getTimelineAttachment()); + } + + json.writeName("id"); + json.writeValue(obj.getId()); + + json.writeName("name"); + json.writeValue(obj.getName()); + + json.writeObjectEnd(); + } + + private void writePathConstraint (PathConstraint obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PathConstraint"); + + json.writeName("bones"); + json.writeArrayStart(); + for (BonePose item : obj.getBones()) { + writeBonePose(item); + } + json.writeArrayEnd(); + + json.writeName("slot"); + writeSlot(obj.getSlot()); + + json.writeName("data"); + writePathConstraintData(obj.getData()); + + json.writeName("pose"); + writePathConstraintPose(obj.getPose()); - json.writeName("appliedPose"); - writePathConstraintPose(obj.getAppliedPose()); + json.writeName("appliedPose"); + writePathConstraintPose(obj.getAppliedPose()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writePathConstraintData(PathConstraintData obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PathConstraintData"); - - json.writeName("bones"); - json.writeArrayStart(); - for (BoneData item : obj.getBones()) { - writeBoneData(item); - } - json.writeArrayEnd(); - - json.writeName("slot"); - writeSlotData(obj.getSlot()); - - json.writeName("positionMode"); - json.writeValue(obj.getPositionMode().name()); + private void writePathConstraintData (PathConstraintData obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PathConstraintData"); + + json.writeName("bones"); + json.writeArrayStart(); + for (BoneData item : obj.getBones()) { + writeBoneData(item); + } + json.writeArrayEnd(); + + json.writeName("slot"); + writeSlotData(obj.getSlot()); + + json.writeName("positionMode"); + json.writeValue(obj.getPositionMode().name()); - json.writeName("spacingMode"); - json.writeValue(obj.getSpacingMode().name()); + json.writeName("spacingMode"); + json.writeValue(obj.getSpacingMode().name()); - json.writeName("rotateMode"); - json.writeValue(obj.getRotateMode().name()); + json.writeName("rotateMode"); + json.writeValue(obj.getRotateMode().name()); - json.writeName("offsetRotation"); - json.writeValue(obj.getOffsetRotation()); + json.writeName("offsetRotation"); + json.writeValue(obj.getOffsetRotation()); - json.writeName("name"); - json.writeValue(obj.getName()); + json.writeName("name"); + json.writeValue(obj.getName()); - json.writeName("setupPose"); - writePathConstraintPose(obj.getSetupPose()); + json.writeName("setupPose"); + writePathConstraintPose(obj.getSetupPose()); - json.writeName("skinRequired"); - json.writeValue(obj.getSkinRequired()); + json.writeName("skinRequired"); + json.writeValue(obj.getSkinRequired()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writePathConstraintPose(PathConstraintPose obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writePathConstraintPose (PathConstraintPose obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PathConstraintPose"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PathConstraintPose"); - json.writeName("position"); - json.writeValue(obj.getPosition()); + json.writeName("position"); + json.writeValue(obj.getPosition()); - json.writeName("spacing"); - json.writeValue(obj.getSpacing()); + json.writeName("spacing"); + json.writeValue(obj.getSpacing()); - json.writeName("mixRotate"); - json.writeValue(obj.getMixRotate()); + json.writeName("mixRotate"); + json.writeValue(obj.getMixRotate()); - json.writeName("mixX"); - json.writeValue(obj.getMixX()); + json.writeName("mixX"); + json.writeValue(obj.getMixX()); - json.writeName("mixY"); - json.writeValue(obj.getMixY()); + json.writeName("mixY"); + json.writeValue(obj.getMixY()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writePhysicsConstraint(PhysicsConstraint obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writePhysicsConstraint (PhysicsConstraint obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PhysicsConstraint"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PhysicsConstraint"); - json.writeName("bone"); - writeBonePose(obj.getBone()); + json.writeName("bone"); + writeBonePose(obj.getBone()); - json.writeName("data"); - writePhysicsConstraintData(obj.getData()); + json.writeName("data"); + writePhysicsConstraintData(obj.getData()); - json.writeName("pose"); - writePhysicsConstraintPose(obj.getPose()); + json.writeName("pose"); + writePhysicsConstraintPose(obj.getPose()); - json.writeName("appliedPose"); - writePhysicsConstraintPose(obj.getAppliedPose()); + json.writeName("appliedPose"); + writePhysicsConstraintPose(obj.getAppliedPose()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writePhysicsConstraintData(PhysicsConstraintData obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writePhysicsConstraintData (PhysicsConstraintData obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PhysicsConstraintData"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PhysicsConstraintData"); - json.writeName("bone"); - writeBoneData(obj.getBone()); + json.writeName("bone"); + writeBoneData(obj.getBone()); - json.writeName("step"); - json.writeValue(obj.getStep()); + json.writeName("step"); + json.writeValue(obj.getStep()); - json.writeName("x"); - json.writeValue(obj.getX()); + json.writeName("x"); + json.writeValue(obj.getX()); - json.writeName("y"); - json.writeValue(obj.getY()); + json.writeName("y"); + json.writeValue(obj.getY()); - json.writeName("rotate"); - json.writeValue(obj.getRotate()); + json.writeName("rotate"); + json.writeValue(obj.getRotate()); - json.writeName("scaleX"); - json.writeValue(obj.getScaleX()); + json.writeName("scaleX"); + json.writeValue(obj.getScaleX()); - json.writeName("shearX"); - json.writeValue(obj.getShearX()); + json.writeName("shearX"); + json.writeValue(obj.getShearX()); - json.writeName("limit"); - json.writeValue(obj.getLimit()); + json.writeName("limit"); + json.writeValue(obj.getLimit()); - json.writeName("inertiaGlobal"); - json.writeValue(obj.getInertiaGlobal()); + json.writeName("inertiaGlobal"); + json.writeValue(obj.getInertiaGlobal()); - json.writeName("strengthGlobal"); - json.writeValue(obj.getStrengthGlobal()); + json.writeName("strengthGlobal"); + json.writeValue(obj.getStrengthGlobal()); - json.writeName("dampingGlobal"); - json.writeValue(obj.getDampingGlobal()); + json.writeName("dampingGlobal"); + json.writeValue(obj.getDampingGlobal()); - json.writeName("massGlobal"); - json.writeValue(obj.getMassGlobal()); + json.writeName("massGlobal"); + json.writeValue(obj.getMassGlobal()); - json.writeName("windGlobal"); - json.writeValue(obj.getWindGlobal()); + json.writeName("windGlobal"); + json.writeValue(obj.getWindGlobal()); - json.writeName("gravityGlobal"); - json.writeValue(obj.getGravityGlobal()); + json.writeName("gravityGlobal"); + json.writeValue(obj.getGravityGlobal()); - json.writeName("mixGlobal"); - json.writeValue(obj.getMixGlobal()); + json.writeName("mixGlobal"); + json.writeValue(obj.getMixGlobal()); - json.writeName("name"); - json.writeValue(obj.getName()); + json.writeName("name"); + json.writeValue(obj.getName()); - json.writeName("setupPose"); - writePhysicsConstraintPose(obj.getSetupPose()); + json.writeName("setupPose"); + writePhysicsConstraintPose(obj.getSetupPose()); - json.writeName("skinRequired"); - json.writeValue(obj.getSkinRequired()); + json.writeName("skinRequired"); + json.writeValue(obj.getSkinRequired()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writePhysicsConstraintPose(PhysicsConstraintPose obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writePhysicsConstraintPose (PhysicsConstraintPose obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PhysicsConstraintPose"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PhysicsConstraintPose"); - json.writeName("inertia"); - json.writeValue(obj.getInertia()); + json.writeName("inertia"); + json.writeValue(obj.getInertia()); - json.writeName("strength"); - json.writeValue(obj.getStrength()); + json.writeName("strength"); + json.writeValue(obj.getStrength()); - json.writeName("damping"); - json.writeValue(obj.getDamping()); + json.writeName("damping"); + json.writeValue(obj.getDamping()); - json.writeName("massInverse"); - json.writeValue(obj.getMassInverse()); + json.writeName("massInverse"); + json.writeValue(obj.getMassInverse()); - json.writeName("wind"); - json.writeValue(obj.getWind()); + json.writeName("wind"); + json.writeValue(obj.getWind()); - json.writeName("gravity"); - json.writeValue(obj.getGravity()); + json.writeName("gravity"); + json.writeValue(obj.getGravity()); - json.writeName("mix"); - json.writeValue(obj.getMix()); + json.writeName("mix"); + json.writeValue(obj.getMix()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writePointAttachment(PointAttachment obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writePointAttachment (PointAttachment obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("PointAttachment"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("PointAttachment"); - json.writeName("x"); - json.writeValue(obj.getX()); + json.writeName("x"); + json.writeValue(obj.getX()); - json.writeName("y"); - json.writeValue(obj.getY()); + json.writeName("y"); + json.writeValue(obj.getY()); - json.writeName("rotation"); - json.writeValue(obj.getRotation()); + json.writeName("rotation"); + json.writeValue(obj.getRotation()); - json.writeName("color"); - writeColor(obj.getColor()); + json.writeName("color"); + writeColor(obj.getColor()); - json.writeName("name"); - json.writeValue(obj.getName()); + json.writeName("name"); + json.writeValue(obj.getName()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writeRegionAttachment(RegionAttachment obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeRegionAttachment (RegionAttachment obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("RegionAttachment"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("RegionAttachment"); - json.writeName("region"); - if (obj.getRegion() == null) { - json.writeNull(); - } else { - writeTextureRegion(obj.getRegion()); - } + json.writeName("region"); + if (obj.getRegion() == null) { + json.writeNull(); + } else { + writeTextureRegion(obj.getRegion()); + } - json.writeName("offset"); - json.writeArrayStart(); - for (float item : obj.getOffset()) { - json.writeValue(item); - } - json.writeArrayEnd(); + json.writeName("offset"); + json.writeArrayStart(); + for (float item : obj.getOffset()) { + json.writeValue(item); + } + json.writeArrayEnd(); - json.writeName("uVs"); - json.writeArrayStart(); - for (float item : obj.getUVs()) { - json.writeValue(item); - } - json.writeArrayEnd(); - - json.writeName("x"); - json.writeValue(obj.getX()); - - json.writeName("y"); - json.writeValue(obj.getY()); - - json.writeName("scaleX"); - json.writeValue(obj.getScaleX()); - - json.writeName("scaleY"); - json.writeValue(obj.getScaleY()); - - json.writeName("rotation"); - json.writeValue(obj.getRotation()); - - json.writeName("width"); - json.writeValue(obj.getWidth()); - - json.writeName("height"); - json.writeValue(obj.getHeight()); - - json.writeName("color"); - writeColor(obj.getColor()); - - json.writeName("path"); - json.writeValue(obj.getPath()); - - json.writeName("sequence"); - if (obj.getSequence() == null) { - json.writeNull(); - } else { - writeSequence(obj.getSequence()); - } - - json.writeName("name"); - json.writeValue(obj.getName()); - - json.writeObjectEnd(); - } - - private void writeSequence(Sequence obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("Sequence"); - - json.writeName("start"); - json.writeValue(obj.getStart()); - - json.writeName("digits"); - json.writeValue(obj.getDigits()); - - json.writeName("setupIndex"); - json.writeValue(obj.getSetupIndex()); - - json.writeName("regions"); - json.writeArrayStart(); - for (TextureRegion item : obj.getRegions()) { - writeTextureRegion(item); - } - json.writeArrayEnd(); - - json.writeName("id"); - json.writeValue(obj.getId()); - - json.writeObjectEnd(); - } - - private void writeSkeleton(Skeleton obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("Skeleton"); - - json.writeName("data"); - writeSkeletonData(obj.getData()); - - json.writeName("bones"); - json.writeArrayStart(); - for (Bone item : obj.getBones()) { - writeBone(item); - } - json.writeArrayEnd(); - - json.writeName("updateCache"); - json.writeArrayStart(); - for (Update item : obj.getUpdateCache()) { - writeUpdate(item); - } - json.writeArrayEnd(); - - json.writeName("rootBone"); - writeBone(obj.getRootBone()); - - json.writeName("slots"); - json.writeArrayStart(); - for (Slot item : obj.getSlots()) { - writeSlot(item); - } - json.writeArrayEnd(); - - json.writeName("drawOrder"); - json.writeArrayStart(); - for (Slot item : obj.getDrawOrder()) { - writeSlot(item); - } - json.writeArrayEnd(); - - json.writeName("skin"); - if (obj.getSkin() == null) { - json.writeNull(); - } else { - writeSkin(obj.getSkin()); - } - - json.writeName("constraints"); - json.writeArrayStart(); - for (Constraint item : obj.getConstraints()) { - writeConstraint(item); - } - json.writeArrayEnd(); - - json.writeName("physicsConstraints"); - json.writeArrayStart(); - for (PhysicsConstraint item : obj.getPhysicsConstraints()) { - writePhysicsConstraint(item); - } - json.writeArrayEnd(); - - json.writeName("color"); - writeColor(obj.getColor()); - - json.writeName("scaleX"); - json.writeValue(obj.getScaleX()); - - json.writeName("scaleY"); - json.writeValue(obj.getScaleY()); - - json.writeName("x"); - json.writeValue(obj.getX()); - - json.writeName("y"); - json.writeValue(obj.getY()); - - json.writeName("windX"); - json.writeValue(obj.getWindX()); - - json.writeName("windY"); - json.writeValue(obj.getWindY()); - - json.writeName("gravityX"); - json.writeValue(obj.getGravityX()); - - json.writeName("gravityY"); - json.writeValue(obj.getGravityY()); - - json.writeName("time"); - json.writeValue(obj.getTime()); - - json.writeObjectEnd(); - } - - private void writeSkeletonData(SkeletonData obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("SkeletonData"); - - json.writeName("bones"); - json.writeArrayStart(); - for (BoneData item : obj.getBones()) { - writeBoneData(item); - } - json.writeArrayEnd(); - - json.writeName("slots"); - json.writeArrayStart(); - for (SlotData item : obj.getSlots()) { - writeSlotData(item); - } - json.writeArrayEnd(); - - json.writeName("defaultSkin"); - if (obj.getDefaultSkin() == null) { - json.writeNull(); - } else { - writeSkin(obj.getDefaultSkin()); - } - - json.writeName("skins"); - json.writeArrayStart(); - for (Skin item : obj.getSkins()) { - writeSkin(item); - } - json.writeArrayEnd(); - - json.writeName("events"); - json.writeArrayStart(); - for (EventData item : obj.getEvents()) { - writeEventData(item); - } - json.writeArrayEnd(); - - json.writeName("animations"); - json.writeArrayStart(); - for (Animation item : obj.getAnimations()) { - writeAnimation(item); - } - json.writeArrayEnd(); - - json.writeName("constraints"); - json.writeArrayStart(); - for (ConstraintData item : obj.getConstraints()) { - writeConstraintData(item); - } - json.writeArrayEnd(); - - json.writeName("name"); - json.writeValue(obj.getName()); - - json.writeName("x"); - json.writeValue(obj.getX()); - - json.writeName("y"); - json.writeValue(obj.getY()); - - json.writeName("width"); - json.writeValue(obj.getWidth()); - - json.writeName("height"); - json.writeValue(obj.getHeight()); - - json.writeName("referenceScale"); - json.writeValue(obj.getReferenceScale()); - - json.writeName("version"); - json.writeValue(obj.getVersion()); - - json.writeName("hash"); - json.writeValue(obj.getHash()); - - json.writeName("imagesPath"); - json.writeValue(obj.getImagesPath()); - - json.writeName("audioPath"); - json.writeValue(obj.getAudioPath()); - - json.writeName("fps"); - json.writeValue(obj.getFps()); - - json.writeObjectEnd(); - } - - private void writeSkin(Skin obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("Skin"); - - json.writeName("attachments"); - Array sortedAttachments = new Array<>(obj.getAttachments()); - sortedAttachments.sort((a, b) -> Integer.compare(a.getSlotIndex(), b.getSlotIndex())); - json.writeArrayStart(); - for (SkinEntry item : sortedAttachments) { - writeSkinEntry(item); - } - json.writeArrayEnd(); - - json.writeName("bones"); - json.writeArrayStart(); - for (BoneData item : obj.getBones()) { - writeBoneData(item); - } - json.writeArrayEnd(); - - json.writeName("constraints"); - json.writeArrayStart(); - for (ConstraintData item : obj.getConstraints()) { - writeConstraintData(item); - } - json.writeArrayEnd(); - - json.writeName("name"); - json.writeValue(obj.getName()); - - json.writeName("color"); - writeColor(obj.getColor()); - - json.writeObjectEnd(); - } - - private void writeSkinEntry(Skin.SkinEntry obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + json.writeName("uVs"); + json.writeArrayStart(); + for (float item : obj.getUVs()) { + json.writeValue(item); + } + json.writeArrayEnd(); + + json.writeName("x"); + json.writeValue(obj.getX()); + + json.writeName("y"); + json.writeValue(obj.getY()); + + json.writeName("scaleX"); + json.writeValue(obj.getScaleX()); + + json.writeName("scaleY"); + json.writeValue(obj.getScaleY()); + + json.writeName("rotation"); + json.writeValue(obj.getRotation()); + + json.writeName("width"); + json.writeValue(obj.getWidth()); + + json.writeName("height"); + json.writeValue(obj.getHeight()); + + json.writeName("color"); + writeColor(obj.getColor()); + + json.writeName("path"); + json.writeValue(obj.getPath()); + + json.writeName("sequence"); + if (obj.getSequence() == null) { + json.writeNull(); + } else { + writeSequence(obj.getSequence()); + } + + json.writeName("name"); + json.writeValue(obj.getName()); + + json.writeObjectEnd(); + } + + private void writeSequence (Sequence obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("Sequence"); + + json.writeName("start"); + json.writeValue(obj.getStart()); + + json.writeName("digits"); + json.writeValue(obj.getDigits()); + + json.writeName("setupIndex"); + json.writeValue(obj.getSetupIndex()); + + json.writeName("regions"); + json.writeArrayStart(); + for (TextureRegion item : obj.getRegions()) { + writeTextureRegion(item); + } + json.writeArrayEnd(); + + json.writeName("id"); + json.writeValue(obj.getId()); + + json.writeObjectEnd(); + } + + private void writeSkeleton (Skeleton obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("Skeleton"); + + json.writeName("data"); + writeSkeletonData(obj.getData()); + + json.writeName("bones"); + json.writeArrayStart(); + for (Bone item : obj.getBones()) { + writeBone(item); + } + json.writeArrayEnd(); + + json.writeName("updateCache"); + json.writeArrayStart(); + for (Update item : obj.getUpdateCache()) { + writeUpdate(item); + } + json.writeArrayEnd(); + + json.writeName("rootBone"); + writeBone(obj.getRootBone()); + + json.writeName("slots"); + json.writeArrayStart(); + for (Slot item : obj.getSlots()) { + writeSlot(item); + } + json.writeArrayEnd(); + + json.writeName("drawOrder"); + json.writeArrayStart(); + for (Slot item : obj.getDrawOrder()) { + writeSlot(item); + } + json.writeArrayEnd(); + + json.writeName("skin"); + if (obj.getSkin() == null) { + json.writeNull(); + } else { + writeSkin(obj.getSkin()); + } + + json.writeName("constraints"); + json.writeArrayStart(); + for (Constraint item : obj.getConstraints()) { + writeConstraint(item); + } + json.writeArrayEnd(); + + json.writeName("physicsConstraints"); + json.writeArrayStart(); + for (PhysicsConstraint item : obj.getPhysicsConstraints()) { + writePhysicsConstraint(item); + } + json.writeArrayEnd(); + + json.writeName("color"); + writeColor(obj.getColor()); + + json.writeName("scaleX"); + json.writeValue(obj.getScaleX()); + + json.writeName("scaleY"); + json.writeValue(obj.getScaleY()); + + json.writeName("x"); + json.writeValue(obj.getX()); + + json.writeName("y"); + json.writeValue(obj.getY()); + + json.writeName("windX"); + json.writeValue(obj.getWindX()); + + json.writeName("windY"); + json.writeValue(obj.getWindY()); + + json.writeName("gravityX"); + json.writeValue(obj.getGravityX()); + + json.writeName("gravityY"); + json.writeValue(obj.getGravityY()); + + json.writeName("time"); + json.writeValue(obj.getTime()); + + json.writeObjectEnd(); + } + + private void writeSkeletonData (SkeletonData obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("SkeletonData"); + + json.writeName("bones"); + json.writeArrayStart(); + for (BoneData item : obj.getBones()) { + writeBoneData(item); + } + json.writeArrayEnd(); + + json.writeName("slots"); + json.writeArrayStart(); + for (SlotData item : obj.getSlots()) { + writeSlotData(item); + } + json.writeArrayEnd(); + + json.writeName("defaultSkin"); + if (obj.getDefaultSkin() == null) { + json.writeNull(); + } else { + writeSkin(obj.getDefaultSkin()); + } + + json.writeName("skins"); + json.writeArrayStart(); + for (Skin item : obj.getSkins()) { + writeSkin(item); + } + json.writeArrayEnd(); + + json.writeName("events"); + json.writeArrayStart(); + for (EventData item : obj.getEvents()) { + writeEventData(item); + } + json.writeArrayEnd(); + + json.writeName("animations"); + json.writeArrayStart(); + for (Animation item : obj.getAnimations()) { + writeAnimation(item); + } + json.writeArrayEnd(); + + json.writeName("constraints"); + json.writeArrayStart(); + for (ConstraintData item : obj.getConstraints()) { + writeConstraintData(item); + } + json.writeArrayEnd(); + + json.writeName("name"); + json.writeValue(obj.getName()); + + json.writeName("x"); + json.writeValue(obj.getX()); + + json.writeName("y"); + json.writeValue(obj.getY()); + + json.writeName("width"); + json.writeValue(obj.getWidth()); + + json.writeName("height"); + json.writeValue(obj.getHeight()); + + json.writeName("referenceScale"); + json.writeValue(obj.getReferenceScale()); + + json.writeName("version"); + json.writeValue(obj.getVersion()); + + json.writeName("hash"); + json.writeValue(obj.getHash()); + + json.writeName("imagesPath"); + json.writeValue(obj.getImagesPath()); + + json.writeName("audioPath"); + json.writeValue(obj.getAudioPath()); + + json.writeName("fps"); + json.writeValue(obj.getFps()); + + json.writeObjectEnd(); + } + + private void writeSkin (Skin obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("Skin"); + + json.writeName("attachments"); + Array sortedAttachments = new Array<>(obj.getAttachments()); + sortedAttachments.sort( (a, b) -> Integer.compare(a.getSlotIndex(), b.getSlotIndex())); + json.writeArrayStart(); + for (SkinEntry item : sortedAttachments) { + writeSkinEntry(item); + } + json.writeArrayEnd(); + + json.writeName("bones"); + json.writeArrayStart(); + for (BoneData item : obj.getBones()) { + writeBoneData(item); + } + json.writeArrayEnd(); + + json.writeName("constraints"); + json.writeArrayStart(); + for (ConstraintData item : obj.getConstraints()) { + writeConstraintData(item); + } + json.writeArrayEnd(); + + json.writeName("name"); + json.writeValue(obj.getName()); + + json.writeName("color"); + writeColor(obj.getColor()); + + json.writeObjectEnd(); + } + + private void writeSkinEntry (Skin.SkinEntry obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("SkinEntry"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("SkinEntry"); - json.writeName("slotIndex"); - json.writeValue(obj.getSlotIndex()); + json.writeName("slotIndex"); + json.writeValue(obj.getSlotIndex()); - json.writeName("name"); - json.writeValue(obj.getName()); + json.writeName("name"); + json.writeValue(obj.getName()); - json.writeName("attachment"); - writeAttachment(obj.getAttachment()); + json.writeName("attachment"); + writeAttachment(obj.getAttachment()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writeSlider(Slider obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeSlider (Slider obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("Slider"); - - json.writeName("bone"); - writeBone(obj.getBone()); - - json.writeName("data"); - writeSliderData(obj.getData()); - - json.writeName("pose"); - writeSliderPose(obj.getPose()); - - json.writeName("appliedPose"); - writeSliderPose(obj.getAppliedPose()); - - json.writeObjectEnd(); - } - - private void writeSliderData(SliderData obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("SliderData"); - - json.writeName("animation"); - writeAnimation(obj.getAnimation()); - - json.writeName("additive"); - json.writeValue(obj.getAdditive()); - - json.writeName("loop"); - json.writeValue(obj.getLoop()); - - json.writeName("bone"); - if (obj.getBone() == null) { - json.writeNull(); - } else { - writeBoneData(obj.getBone()); - } + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("Slider"); + + json.writeName("bone"); + writeBone(obj.getBone()); + + json.writeName("data"); + writeSliderData(obj.getData()); + + json.writeName("pose"); + writeSliderPose(obj.getPose()); + + json.writeName("appliedPose"); + writeSliderPose(obj.getAppliedPose()); + + json.writeObjectEnd(); + } + + private void writeSliderData (SliderData obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("SliderData"); + + json.writeName("animation"); + writeAnimation(obj.getAnimation()); + + json.writeName("additive"); + json.writeValue(obj.getAdditive()); + + json.writeName("loop"); + json.writeValue(obj.getLoop()); + + json.writeName("bone"); + if (obj.getBone() == null) { + json.writeNull(); + } else { + writeBoneData(obj.getBone()); + } - json.writeName("property"); - if (obj.getProperty() == null) { - json.writeNull(); - } else { - writeFromProperty(obj.getProperty()); - } + json.writeName("property"); + if (obj.getProperty() == null) { + json.writeNull(); + } else { + writeFromProperty(obj.getProperty()); + } - json.writeName("offset"); - json.writeValue(obj.getOffset()); + json.writeName("offset"); + json.writeValue(obj.getOffset()); - json.writeName("scale"); - json.writeValue(obj.getScale()); + json.writeName("scale"); + json.writeValue(obj.getScale()); - json.writeName("local"); - json.writeValue(obj.getLocal()); + json.writeName("local"); + json.writeValue(obj.getLocal()); - json.writeName("name"); - json.writeValue(obj.getName()); + json.writeName("name"); + json.writeValue(obj.getName()); - json.writeName("setupPose"); - writeSliderPose(obj.getSetupPose()); + json.writeName("setupPose"); + writeSliderPose(obj.getSetupPose()); - json.writeName("skinRequired"); - json.writeValue(obj.getSkinRequired()); + json.writeName("skinRequired"); + json.writeValue(obj.getSkinRequired()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writeSliderPose(SliderPose obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeSliderPose (SliderPose obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("SliderPose"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("SliderPose"); - json.writeName("time"); - json.writeValue(obj.getTime()); + json.writeName("time"); + json.writeValue(obj.getTime()); - json.writeName("mix"); - json.writeValue(obj.getMix()); + json.writeName("mix"); + json.writeValue(obj.getMix()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writeSlot(Slot obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeSlot (Slot obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("Slot"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("Slot"); - json.writeName("bone"); - writeBone(obj.getBone()); + json.writeName("bone"); + writeBone(obj.getBone()); - json.writeName("data"); - writeSlotData(obj.getData()); + json.writeName("data"); + writeSlotData(obj.getData()); - json.writeName("pose"); - writeSlotPose(obj.getPose()); + json.writeName("pose"); + writeSlotPose(obj.getPose()); - json.writeName("appliedPose"); - writeSlotPose(obj.getAppliedPose()); + json.writeName("appliedPose"); + writeSlotPose(obj.getAppliedPose()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writeSlotData(SlotData obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeSlotData (SlotData obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("SlotData"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("SlotData"); - json.writeName("index"); - json.writeValue(obj.getIndex()); + json.writeName("index"); + json.writeValue(obj.getIndex()); - json.writeName("boneData"); - writeBoneData(obj.getBoneData()); + json.writeName("boneData"); + writeBoneData(obj.getBoneData()); - json.writeName("attachmentName"); - json.writeValue(obj.getAttachmentName()); + json.writeName("attachmentName"); + json.writeValue(obj.getAttachmentName()); - json.writeName("blendMode"); - json.writeValue(obj.getBlendMode().name()); + json.writeName("blendMode"); + json.writeValue(obj.getBlendMode().name()); - json.writeName("visible"); - json.writeValue(obj.getVisible()); + json.writeName("visible"); + json.writeValue(obj.getVisible()); - json.writeName("name"); - json.writeValue(obj.getName()); + json.writeName("name"); + json.writeValue(obj.getName()); - json.writeName("setupPose"); - writeSlotPose(obj.getSetupPose()); + json.writeName("setupPose"); + writeSlotPose(obj.getSetupPose()); - json.writeName("skinRequired"); - json.writeValue(obj.getSkinRequired()); + json.writeName("skinRequired"); + json.writeValue(obj.getSkinRequired()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writeSlotPose(SlotPose obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeSlotPose (SlotPose obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("SlotPose"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("SlotPose"); - json.writeName("color"); - writeColor(obj.getColor()); + json.writeName("color"); + writeColor(obj.getColor()); - json.writeName("darkColor"); - if (obj.getDarkColor() == null) { - json.writeNull(); - } else { - writeColor(obj.getDarkColor()); - } + json.writeName("darkColor"); + if (obj.getDarkColor() == null) { + json.writeNull(); + } else { + writeColor(obj.getDarkColor()); + } - json.writeName("attachment"); - if (obj.getAttachment() == null) { - json.writeNull(); - } else { - writeAttachment(obj.getAttachment()); - } + json.writeName("attachment"); + if (obj.getAttachment() == null) { + json.writeNull(); + } else { + writeAttachment(obj.getAttachment()); + } - json.writeName("sequenceIndex"); - json.writeValue(obj.getSequenceIndex()); + json.writeName("sequenceIndex"); + json.writeValue(obj.getSequenceIndex()); - json.writeName("deform"); - writeFloatArray(obj.getDeform()); + json.writeName("deform"); + writeFloatArray(obj.getDeform()); - json.writeObjectEnd(); - } + json.writeObjectEnd(); + } - private void writeTransformConstraint(TransformConstraint obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); + private void writeTransformConstraint (TransformConstraint obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("TransformConstraint"); + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("TransformConstraint"); - json.writeName("bones"); - json.writeArrayStart(); - for (BonePose item : obj.getBones()) { - writeBonePose(item); - } - json.writeArrayEnd(); - - json.writeName("source"); - writeBone(obj.getSource()); - - json.writeName("data"); - writeTransformConstraintData(obj.getData()); - - json.writeName("pose"); - writeTransformConstraintPose(obj.getPose()); - - json.writeName("appliedPose"); - writeTransformConstraintPose(obj.getAppliedPose()); - - json.writeObjectEnd(); - } - - private void writeTransformConstraintData(TransformConstraintData obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("TransformConstraintData"); - - json.writeName("bones"); - json.writeArrayStart(); - for (BoneData item : obj.getBones()) { - writeBoneData(item); - } - json.writeArrayEnd(); - - json.writeName("source"); - writeBoneData(obj.getSource()); - - json.writeName("offsetRotation"); - json.writeValue(obj.getOffsetRotation()); - - json.writeName("offsetX"); - json.writeValue(obj.getOffsetX()); - - json.writeName("offsetY"); - json.writeValue(obj.getOffsetY()); - - json.writeName("offsetScaleX"); - json.writeValue(obj.getOffsetScaleX()); - - json.writeName("offsetScaleY"); - json.writeValue(obj.getOffsetScaleY()); - - json.writeName("offsetShearY"); - json.writeValue(obj.getOffsetShearY()); - - json.writeName("localSource"); - json.writeValue(obj.getLocalSource()); - - json.writeName("localTarget"); - json.writeValue(obj.getLocalTarget()); - - json.writeName("additive"); - json.writeValue(obj.getAdditive()); - - json.writeName("clamp"); - json.writeValue(obj.getClamp()); - - json.writeName("properties"); - json.writeArrayStart(); - for (FromProperty item : obj.getProperties()) { - writeFromProperty(item); - } - json.writeArrayEnd(); - - json.writeName("name"); - json.writeValue(obj.getName()); - - json.writeName("setupPose"); - writeTransformConstraintPose(obj.getSetupPose()); - - json.writeName("skinRequired"); - json.writeValue(obj.getSkinRequired()); - - json.writeObjectEnd(); - } - - private void writeFromProperty(TransformConstraintData.FromProperty obj) { - if (obj instanceof TransformConstraintData.FromRotate) { - writeFromRotate((TransformConstraintData.FromRotate) obj); - } else if (obj instanceof TransformConstraintData.FromScaleX) { - writeFromScaleX((TransformConstraintData.FromScaleX) obj); - } else if (obj instanceof TransformConstraintData.FromScaleY) { - writeFromScaleY((TransformConstraintData.FromScaleY) obj); - } else if (obj instanceof TransformConstraintData.FromShearY) { - writeFromShearY((TransformConstraintData.FromShearY) obj); - } else if (obj instanceof TransformConstraintData.FromX) { - writeFromX((TransformConstraintData.FromX) obj); - } else if (obj instanceof TransformConstraintData.FromY) { - writeFromY((TransformConstraintData.FromY) obj); - } else { - throw new RuntimeException("Unknown FromProperty type: " + obj.getClass().getName()); - } - } - - private void writeFromRotate(TransformConstraintData.FromRotate obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("FromRotate"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("to"); - json.writeArrayStart(); - for (ToProperty item : obj.to) { - writeToProperty(item); - } - json.writeArrayEnd(); - - json.writeObjectEnd(); - } - - private void writeFromScaleX(TransformConstraintData.FromScaleX obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("FromScaleX"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("to"); - json.writeArrayStart(); - for (ToProperty item : obj.to) { - writeToProperty(item); - } - json.writeArrayEnd(); - - json.writeObjectEnd(); - } - - private void writeFromScaleY(TransformConstraintData.FromScaleY obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("FromScaleY"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("to"); - json.writeArrayStart(); - for (ToProperty item : obj.to) { - writeToProperty(item); - } - json.writeArrayEnd(); - - json.writeObjectEnd(); - } - - private void writeFromShearY(TransformConstraintData.FromShearY obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("FromShearY"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("to"); - json.writeArrayStart(); - for (ToProperty item : obj.to) { - writeToProperty(item); - } - json.writeArrayEnd(); - - json.writeObjectEnd(); - } - - private void writeFromX(TransformConstraintData.FromX obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("FromX"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("to"); - json.writeArrayStart(); - for (ToProperty item : obj.to) { - writeToProperty(item); - } - json.writeArrayEnd(); - - json.writeObjectEnd(); - } - - private void writeFromY(TransformConstraintData.FromY obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("FromY"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("to"); - json.writeArrayStart(); - for (ToProperty item : obj.to) { - writeToProperty(item); - } - json.writeArrayEnd(); - - json.writeObjectEnd(); - } - - private void writeToProperty(TransformConstraintData.ToProperty obj) { - if (obj instanceof TransformConstraintData.ToRotate) { - writeToRotate((TransformConstraintData.ToRotate) obj); - } else if (obj instanceof TransformConstraintData.ToScaleX) { - writeToScaleX((TransformConstraintData.ToScaleX) obj); - } else if (obj instanceof TransformConstraintData.ToScaleY) { - writeToScaleY((TransformConstraintData.ToScaleY) obj); - } else if (obj instanceof TransformConstraintData.ToShearY) { - writeToShearY((TransformConstraintData.ToShearY) obj); - } else if (obj instanceof TransformConstraintData.ToX) { - writeToX((TransformConstraintData.ToX) obj); - } else if (obj instanceof TransformConstraintData.ToY) { - writeToY((TransformConstraintData.ToY) obj); - } else { - throw new RuntimeException("Unknown ToProperty type: " + obj.getClass().getName()); - } - } - - private void writeToRotate(TransformConstraintData.ToRotate obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ToRotate"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("max"); - json.writeValue(obj.max); - - json.writeName("scale"); - json.writeValue(obj.scale); - - json.writeObjectEnd(); - } - - private void writeToScaleX(TransformConstraintData.ToScaleX obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ToScaleX"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("max"); - json.writeValue(obj.max); - - json.writeName("scale"); - json.writeValue(obj.scale); - - json.writeObjectEnd(); - } - - private void writeToScaleY(TransformConstraintData.ToScaleY obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ToScaleY"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("max"); - json.writeValue(obj.max); - - json.writeName("scale"); - json.writeValue(obj.scale); - - json.writeObjectEnd(); - } - - private void writeToShearY(TransformConstraintData.ToShearY obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ToShearY"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("max"); - json.writeValue(obj.max); - - json.writeName("scale"); - json.writeValue(obj.scale); - - json.writeObjectEnd(); - } - - private void writeToX(TransformConstraintData.ToX obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ToX"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("max"); - json.writeValue(obj.max); - - json.writeName("scale"); - json.writeValue(obj.scale); - - json.writeObjectEnd(); - } - - private void writeToY(TransformConstraintData.ToY obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("ToY"); - - json.writeName("offset"); - json.writeValue(obj.offset); - - json.writeName("max"); - json.writeValue(obj.max); - - json.writeName("scale"); - json.writeValue(obj.scale); - - json.writeObjectEnd(); - } - - private void writeTransformConstraintPose(TransformConstraintPose obj) { - if (visitedObjects.contains(obj)) { - json.writeValue(""); - return; - } - visitedObjects.add(obj); - - json.writeObjectStart(); - json.writeName("type"); - json.writeValue("TransformConstraintPose"); - - json.writeName("mixRotate"); - json.writeValue(obj.getMixRotate()); - - json.writeName("mixX"); - json.writeValue(obj.getMixX()); - - json.writeName("mixY"); - json.writeValue(obj.getMixY()); - - json.writeName("mixScaleX"); - json.writeValue(obj.getMixScaleX()); - - json.writeName("mixScaleY"); - json.writeValue(obj.getMixScaleY()); - - json.writeName("mixShearY"); - json.writeValue(obj.getMixShearY()); - - json.writeObjectEnd(); - } - - private void writeUpdate(Update obj) { - if (obj instanceof BonePose) { - writeBonePose((BonePose) obj); - } else if (obj instanceof IkConstraint) { - writeIkConstraint((IkConstraint) obj); - } else if (obj instanceof PathConstraint) { - writePathConstraint((PathConstraint) obj); - } else if (obj instanceof PhysicsConstraint) { - writePhysicsConstraint((PhysicsConstraint) obj); - } else if (obj instanceof Slider) { - writeSlider((Slider) obj); - } else if (obj instanceof TransformConstraint) { - writeTransformConstraint((TransformConstraint) obj); - } else { - throw new RuntimeException("Unknown Update type: " + obj.getClass().getName()); - } - } - - private void writeVertexAttachment(VertexAttachment obj) { - if (obj instanceof BoundingBoxAttachment) { - writeBoundingBoxAttachment((BoundingBoxAttachment) obj); - } else if (obj instanceof ClippingAttachment) { - writeClippingAttachment((ClippingAttachment) obj); - } else if (obj instanceof MeshAttachment) { - writeMeshAttachment((MeshAttachment) obj); - } else if (obj instanceof PathAttachment) { - writePathAttachment((PathAttachment) obj); - } else { - throw new RuntimeException("Unknown VertexAttachment type: " + obj.getClass().getName()); - } - } - - private void writeColor(Color obj) { - if (obj == null) { - json.writeNull(); - } else { - json.writeObjectStart(); - json.writeName("r"); - json.writeValue(obj.r); - json.writeName("g"); - json.writeValue(obj.g); - json.writeName("b"); - json.writeValue(obj.b); - json.writeName("a"); - json.writeValue(obj.a); - json.writeObjectEnd(); - } - } - - private void writeTextureRegion(TextureRegion obj) { - if (obj == null) { - json.writeNull(); - } else { - json.writeObjectStart(); - json.writeName("u"); - json.writeValue(obj.getU()); - json.writeName("v"); - json.writeValue(obj.getV()); - json.writeName("u2"); - json.writeValue(obj.getU2()); - json.writeName("v2"); - json.writeValue(obj.getV2()); - json.writeName("width"); - json.writeValue(obj.getRegionWidth()); - json.writeName("height"); - json.writeValue(obj.getRegionHeight()); - json.writeObjectEnd(); - } - } - - private void writeIntArray(IntArray obj) { - if (obj == null) { - json.writeNull(); - } else { - json.writeArrayStart(); - for (int i = 0; i < obj.size; i++) { - json.writeValue(obj.get(i)); - } - json.writeArrayEnd(); - } - } - - private void writeFloatArray(FloatArray obj) { - if (obj == null) { - json.writeNull(); - } else { - json.writeArrayStart(); - for (int i = 0; i < obj.size; i++) { - json.writeValue(obj.get(i)); - } - json.writeArrayEnd(); - } - } -} \ No newline at end of file + json.writeName("bones"); + json.writeArrayStart(); + for (BonePose item : obj.getBones()) { + writeBonePose(item); + } + json.writeArrayEnd(); + + json.writeName("source"); + writeBone(obj.getSource()); + + json.writeName("data"); + writeTransformConstraintData(obj.getData()); + + json.writeName("pose"); + writeTransformConstraintPose(obj.getPose()); + + json.writeName("appliedPose"); + writeTransformConstraintPose(obj.getAppliedPose()); + + json.writeObjectEnd(); + } + + private void writeTransformConstraintData (TransformConstraintData obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("TransformConstraintData"); + + json.writeName("bones"); + json.writeArrayStart(); + for (BoneData item : obj.getBones()) { + writeBoneData(item); + } + json.writeArrayEnd(); + + json.writeName("source"); + writeBoneData(obj.getSource()); + + json.writeName("offsetRotation"); + json.writeValue(obj.getOffsetRotation()); + + json.writeName("offsetX"); + json.writeValue(obj.getOffsetX()); + + json.writeName("offsetY"); + json.writeValue(obj.getOffsetY()); + + json.writeName("offsetScaleX"); + json.writeValue(obj.getOffsetScaleX()); + + json.writeName("offsetScaleY"); + json.writeValue(obj.getOffsetScaleY()); + + json.writeName("offsetShearY"); + json.writeValue(obj.getOffsetShearY()); + + json.writeName("localSource"); + json.writeValue(obj.getLocalSource()); + + json.writeName("localTarget"); + json.writeValue(obj.getLocalTarget()); + + json.writeName("additive"); + json.writeValue(obj.getAdditive()); + + json.writeName("clamp"); + json.writeValue(obj.getClamp()); + + json.writeName("properties"); + json.writeArrayStart(); + for (FromProperty item : obj.getProperties()) { + writeFromProperty(item); + } + json.writeArrayEnd(); + + json.writeName("name"); + json.writeValue(obj.getName()); + + json.writeName("setupPose"); + writeTransformConstraintPose(obj.getSetupPose()); + + json.writeName("skinRequired"); + json.writeValue(obj.getSkinRequired()); + + json.writeObjectEnd(); + } + + private void writeFromProperty (TransformConstraintData.FromProperty obj) { + if (obj instanceof TransformConstraintData.FromRotate) { + writeFromRotate((TransformConstraintData.FromRotate)obj); + } else if (obj instanceof TransformConstraintData.FromScaleX) { + writeFromScaleX((TransformConstraintData.FromScaleX)obj); + } else if (obj instanceof TransformConstraintData.FromScaleY) { + writeFromScaleY((TransformConstraintData.FromScaleY)obj); + } else if (obj instanceof TransformConstraintData.FromShearY) { + writeFromShearY((TransformConstraintData.FromShearY)obj); + } else if (obj instanceof TransformConstraintData.FromX) { + writeFromX((TransformConstraintData.FromX)obj); + } else if (obj instanceof TransformConstraintData.FromY) { + writeFromY((TransformConstraintData.FromY)obj); + } else { + throw new RuntimeException("Unknown FromProperty type: " + obj.getClass().getName()); + } + } + + private void writeFromRotate (TransformConstraintData.FromRotate obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("FromRotate"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("to"); + json.writeArrayStart(); + for (ToProperty item : obj.to) { + writeToProperty(item); + } + json.writeArrayEnd(); + + json.writeObjectEnd(); + } + + private void writeFromScaleX (TransformConstraintData.FromScaleX obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("FromScaleX"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("to"); + json.writeArrayStart(); + for (ToProperty item : obj.to) { + writeToProperty(item); + } + json.writeArrayEnd(); + + json.writeObjectEnd(); + } + + private void writeFromScaleY (TransformConstraintData.FromScaleY obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("FromScaleY"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("to"); + json.writeArrayStart(); + for (ToProperty item : obj.to) { + writeToProperty(item); + } + json.writeArrayEnd(); + + json.writeObjectEnd(); + } + + private void writeFromShearY (TransformConstraintData.FromShearY obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("FromShearY"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("to"); + json.writeArrayStart(); + for (ToProperty item : obj.to) { + writeToProperty(item); + } + json.writeArrayEnd(); + + json.writeObjectEnd(); + } + + private void writeFromX (TransformConstraintData.FromX obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("FromX"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("to"); + json.writeArrayStart(); + for (ToProperty item : obj.to) { + writeToProperty(item); + } + json.writeArrayEnd(); + + json.writeObjectEnd(); + } + + private void writeFromY (TransformConstraintData.FromY obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("FromY"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("to"); + json.writeArrayStart(); + for (ToProperty item : obj.to) { + writeToProperty(item); + } + json.writeArrayEnd(); + + json.writeObjectEnd(); + } + + private void writeToProperty (TransformConstraintData.ToProperty obj) { + if (obj instanceof TransformConstraintData.ToRotate) { + writeToRotate((TransformConstraintData.ToRotate)obj); + } else if (obj instanceof TransformConstraintData.ToScaleX) { + writeToScaleX((TransformConstraintData.ToScaleX)obj); + } else if (obj instanceof TransformConstraintData.ToScaleY) { + writeToScaleY((TransformConstraintData.ToScaleY)obj); + } else if (obj instanceof TransformConstraintData.ToShearY) { + writeToShearY((TransformConstraintData.ToShearY)obj); + } else if (obj instanceof TransformConstraintData.ToX) { + writeToX((TransformConstraintData.ToX)obj); + } else if (obj instanceof TransformConstraintData.ToY) { + writeToY((TransformConstraintData.ToY)obj); + } else { + throw new RuntimeException("Unknown ToProperty type: " + obj.getClass().getName()); + } + } + + private void writeToRotate (TransformConstraintData.ToRotate obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ToRotate"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("max"); + json.writeValue(obj.max); + + json.writeName("scale"); + json.writeValue(obj.scale); + + json.writeObjectEnd(); + } + + private void writeToScaleX (TransformConstraintData.ToScaleX obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ToScaleX"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("max"); + json.writeValue(obj.max); + + json.writeName("scale"); + json.writeValue(obj.scale); + + json.writeObjectEnd(); + } + + private void writeToScaleY (TransformConstraintData.ToScaleY obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ToScaleY"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("max"); + json.writeValue(obj.max); + + json.writeName("scale"); + json.writeValue(obj.scale); + + json.writeObjectEnd(); + } + + private void writeToShearY (TransformConstraintData.ToShearY obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ToShearY"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("max"); + json.writeValue(obj.max); + + json.writeName("scale"); + json.writeValue(obj.scale); + + json.writeObjectEnd(); + } + + private void writeToX (TransformConstraintData.ToX obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ToX"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("max"); + json.writeValue(obj.max); + + json.writeName("scale"); + json.writeValue(obj.scale); + + json.writeObjectEnd(); + } + + private void writeToY (TransformConstraintData.ToY obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("ToY"); + + json.writeName("offset"); + json.writeValue(obj.offset); + + json.writeName("max"); + json.writeValue(obj.max); + + json.writeName("scale"); + json.writeValue(obj.scale); + + json.writeObjectEnd(); + } + + private void writeTransformConstraintPose (TransformConstraintPose obj) { + if (visitedObjects.contains(obj)) { + json.writeValue(""); + return; + } + visitedObjects.add(obj); + + json.writeObjectStart(); + json.writeName("type"); + json.writeValue("TransformConstraintPose"); + + json.writeName("mixRotate"); + json.writeValue(obj.getMixRotate()); + + json.writeName("mixX"); + json.writeValue(obj.getMixX()); + + json.writeName("mixY"); + json.writeValue(obj.getMixY()); + + json.writeName("mixScaleX"); + json.writeValue(obj.getMixScaleX()); + + json.writeName("mixScaleY"); + json.writeValue(obj.getMixScaleY()); + + json.writeName("mixShearY"); + json.writeValue(obj.getMixShearY()); + + json.writeObjectEnd(); + } + + private void writeUpdate (Update obj) { + if (obj instanceof BonePose) { + writeBonePose((BonePose)obj); + } else if (obj instanceof IkConstraint) { + writeIkConstraint((IkConstraint)obj); + } else if (obj instanceof PathConstraint) { + writePathConstraint((PathConstraint)obj); + } else if (obj instanceof PhysicsConstraint) { + writePhysicsConstraint((PhysicsConstraint)obj); + } else if (obj instanceof Slider) { + writeSlider((Slider)obj); + } else if (obj instanceof TransformConstraint) { + writeTransformConstraint((TransformConstraint)obj); + } else { + throw new RuntimeException("Unknown Update type: " + obj.getClass().getName()); + } + } + + private void writeVertexAttachment (VertexAttachment obj) { + if (obj instanceof BoundingBoxAttachment) { + writeBoundingBoxAttachment((BoundingBoxAttachment)obj); + } else if (obj instanceof ClippingAttachment) { + writeClippingAttachment((ClippingAttachment)obj); + } else if (obj instanceof MeshAttachment) { + writeMeshAttachment((MeshAttachment)obj); + } else if (obj instanceof PathAttachment) { + writePathAttachment((PathAttachment)obj); + } else { + throw new RuntimeException("Unknown VertexAttachment type: " + obj.getClass().getName()); + } + } + + private void writeColor (Color obj) { + if (obj == null) { + json.writeNull(); + } else { + json.writeObjectStart(); + json.writeName("r"); + json.writeValue(obj.r); + json.writeName("g"); + json.writeValue(obj.g); + json.writeName("b"); + json.writeValue(obj.b); + json.writeName("a"); + json.writeValue(obj.a); + json.writeObjectEnd(); + } + } + + private void writeTextureRegion (TextureRegion obj) { + if (obj == null) { + json.writeNull(); + } else { + json.writeObjectStart(); + json.writeName("u"); + json.writeValue(obj.getU()); + json.writeName("v"); + json.writeValue(obj.getV()); + json.writeName("u2"); + json.writeValue(obj.getU2()); + json.writeName("v2"); + json.writeValue(obj.getV2()); + json.writeName("width"); + json.writeValue(obj.getRegionWidth()); + json.writeName("height"); + json.writeValue(obj.getRegionHeight()); + json.writeObjectEnd(); + } + } + + private void writeIntArray (IntArray obj) { + if (obj == null) { + json.writeNull(); + } else { + json.writeArrayStart(); + for (int i = 0; i < obj.size; i++) { + json.writeValue(obj.get(i)); + } + json.writeArrayEnd(); + } + } + + private void writeFloatArray (FloatArray obj) { + if (obj == null) { + json.writeNull(); + } else { + json.writeArrayStart(); + for (int i = 0; i < obj.size; i++) { + json.writeValue(obj.get(i)); + } + json.writeArrayEnd(); + } + } +}