diff --git a/.gitignore b/.gitignore index c9761c797..48c4c8354 100644 --- a/.gitignore +++ b/.gitignore @@ -12,29 +12,30 @@ target *.user .DS_Store +.idea/ +build/ + spine-c/Debug/* spine-cpp/Debug/* spine-sfml/Debug/* spine-sfml/SFML +spine-sfml/dependencies spine-libgdx/spine-libgdx/bin/* spine-libgdx/spine-libgdx-tests/bin/* spine-libgdx/spine-skeletonviewer/bin/* -spine-cocos2dx/2/cocos2dx/ -!spine-cocos2dx/2/cocos2dx/Place cocos2dx here.txt -spine-cocos2dx/2/example/proj.win32/Debug -spine-cocos2dx/3/cocos2dx/ -!spine-cocos2dx/3/cocos2dx/Place cocos2dx here.txt -spine-cocos2dx/3/example/proj.win32/Debug -xcuserdata +spine-cocos2dx/dependencies +spine-cocos2dx/example/cocos2dx.zip +spine-cocos2dx/example/__MACOSX +spine-cocos2dx/example/cocos2d +spine-cocos2dx/example/proj.win32/spine-cocos2d-x.VC.opendb +xcuserdata/ -spine-cocos2d-iphone/2/cocos2d/* -!spine-cocos2d-iphone/2/cocos2d/Place cocos2d here.txt -spine-cocos2d-iphone/3/cocos2d/* -!spine-cocos2d-iphone/3/cocos2d/Place cocos2d here.txt +spine-cocos2d-iphone/cocos2d/* +spine-cocos2d-iphone/spine-cocos2d-iphone-ios.xcodeproj/project.xcworkspace/xcshareddata/ spine-csharp/bin spine-csharp/obj diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..cd2bf60f7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 2.8.9) +project(spine) + +set(CMAKE_INSTALL_PREFIX "./") +set(CMAKE_VERBOSE_MAKEFILE ON) +set(SPINE_SFML FALSE CACHE BOOL FALSE) +set(SPINE_COCOS2D_OBJC FALSE CACHE BOOL FALSE) +set(SPINE_COCOS2D_X FALSE CACHE BOOL FALSE) + +if((${SPINE_SFML}) OR (${CMAKE_CURRENT_BINARY_DIR} MATCHES "spine-sfml")) + add_subdirectory(spine-c) + add_subdirectory(spine-sfml) +endif() + +if((${SPINE_COCOS2D_OBJC}) OR (${CMAKE_CURRENT_BINARY_DIR} MATCHES "spine-cocos2d-objc")) + if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + add_subdirectory(spine-cocos2d-objc) + endif() +endif() + +if((${SPINE_COCOS2D_X}) OR (${CMAKE_CURRENT_BINARY_DIR} MATCHES "spine-cocos2dx")) + add_subdirectory(spine-cocos2dx) +endif() \ No newline at end of file diff --git a/spine-as3/README.md b/spine-as3/README.md index 56af9c374..33b21559b 100644 --- a/spine-as3/README.md +++ b/spine-as3/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-as3 works with data exported from Spine 3.1.08. Updating spine-as3 to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-as3 works with data exported from Spine 3.1.08. Updating spine-as3 to [v3.2](https://github.com/EsotericSoftware/spine-runtimes/issues/586) and [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-as3 supports all Spine features, including meshes. If using the `spine.flash` classes for rendering, meshes are not supported. diff --git a/spine-c/CMakeLists.txt b/spine-c/CMakeLists.txt new file mode 100644 index 000000000..6c42403a8 --- /dev/null +++ b/spine-c/CMakeLists.txt @@ -0,0 +1,9 @@ +include_directories(include) +file(GLOB INCLUDES "include/**/*.h") +file(GLOB SOURCES "src/**/*.c" "src/**/*.cpp") + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c89 -pedantic") +add_library(spine-c STATIC ${SOURCES} ${INCLUDES}) +target_include_directories(spine-c PUBLIC include) +install(TARGETS spine-c DESTINATION dist/lib) +install(FILES ${INCLUDES} DESTINATION dist/include) \ No newline at end of file diff --git a/spine-c/Makefile b/spine-c/Makefile deleted file mode 100644 index a277e035b..000000000 --- a/spine-c/Makefile +++ /dev/null @@ -1,50 +0,0 @@ -LIBS = -lm -CFLAGS = -Wall -I./include/ - -SRC=$(wildcard src/spine/*.c) -OBJ_FILES := $(addprefix obj/,$(notdir $(SRC:.c=.o))) -STATIC_OBJ_FILES := $(addprefix obj/,$(notdir $(SRC:.c=-s.o))) -DEBUG_OBJ_FILES := $(addprefix obj/,$(notdir $(SRC:.c=-d.o))) - -default: - @echo - @echo "- Options are (debug|release)-dynamic and release-static." - @echo "- Ex: release-static" - @echo - -release-dynamic: $(OBJ_FILES) - @mkdir -p dist - gcc -s -shared -Wl,-soname,libspine.so -o dist/libspine.so $(OBJ_FILES) - @echo - @echo - /dist/libspine.so - @echo - -debug-dynamic: $(DEBUG_OBJ_FILES) - @mkdir -p dist - gcc -g3 -shared -Wl,-soname,libspine.so -o dist/libspine-d.so $(DEBUG_OBJ_FILES) - @echo - @echo - /dist/libspine-d.so - @echo - -obj/%.o: src/spine/%.c - @mkdir -p obj - gcc -fPIC -c -o $@ $< $(CFLAGS) $(LIBS) - -obj/%-d.o: src/spine/%.c - @mkdir -p obj - gcc -fPIC -c -o $@ $< $(CFLAGS) - -release-static: $(STATIC_OBJ_FILES) - @mkdir -p dist - ar rcs dist/libspine-s.a $(STATIC_OBJ_FILES) - @echo - @echo - /dist/libspine-s.a - @echo - -obj/%-s.o: src/spine/%.c - @mkdir -p obj - gcc -c -o $@ $< $(CFLAGS) $(LIBS) - -clean: - rm -rf obj/* - rm -rf dist/* diff --git a/spine-c/README.md b/spine-c/README.md index e27415eee..c1bcbfb1a 100644 --- a/spine-c/README.md +++ b/spine-c/README.md @@ -12,7 +12,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-c works with data exported from Spine 3.1.08. Updating spine-c to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-c works with data exported from Spine version 3.2.01. spine-c supports all Spine features. diff --git a/spine-c/data/spineboy.json b/spine-c/data/spineboy.json deleted file mode 100644 index 7b4497712..000000000 --- a/spine-c/data/spineboy.json +++ /dev/null @@ -1,2419 +0,0 @@ -{ -"bones": [ - { "name": "hip", "y": 247.47 }, - { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, - { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, - { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, - { - "name": "front_shin", - "parent": "front_thigh", - "length": 128.76, - "x": 78.69, - "y": 1.6, - "rotation": -2.21, - "inheritScale": false, - "color": "00ff04ff" - }, - { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, - { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, - { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, - { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, - { - "name": "front_bracer", - "parent": "front_upper_arm", - "length": 40.57, - "x": 68.8, - "y": -0.68, - "rotation": 18.29, - "color": "00ff04ff" - }, - { "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" }, - { "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, - { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, - { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" }, - { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, - { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, - { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "color": "ff000dff" } -], -"slots": [ - { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, - { "name": "rear_bracer", "bone": "rear_bracer", "attachment": "rear_bracer" }, - { "name": "gun", "bone": "gun", "attachment": "gun" }, - { "name": "rear_foot", "bone": "rear_foot", "attachment": "rear_foot" }, - { "name": "rear_thigh", "bone": "rear_thigh", "attachment": "rear_thigh" }, - { "name": "rear_shin", "bone": "rear_shin", "attachment": "rear_shin" }, - { "name": "neck", "bone": "neck", "attachment": "neck" }, - { "name": "torso", "bone": "torso", "attachment": "torso" }, - { "name": "front_upper_arm", "bone": "front_upper_arm", "attachment": "front_upper_arm" }, - { "name": "head", "bone": "head", "attachment": "head" }, - { "name": "eye", "bone": "head", "attachment": "eye_indifferent" }, - { "name": "front_thigh", "bone": "front_thigh", "attachment": "front_thigh" }, - { "name": "front_foot", "bone": "front_foot", "attachment": "front_foot" }, - { "name": "front_shin", "bone": "front_shin", "attachment": "front_shin" }, - { "name": "mouth", "bone": "head", "attachment": "mouth_smile" }, - { "name": "goggles", "bone": "head", "attachment": "goggles" }, - { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, - { "name": "front_fist", "bone": "front_fist", "attachment": "front_fist_closed" }, - { "name": "muzzle", "bone": "gunTip", "additive": true }, - { "name": "head-bb", "bone": "head" } -], -"skins": { - "default": { - "eye": { - "eye_indifferent": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 }, - "eye_surprised": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 } - }, - "front_bracer": { - "front_bracer": { "x": 12.03, "y": -1.67, "rotation": 79.59, "width": 58, "height": 80 } - }, - "front_fist": { - "front_fist_closed": { "x": 35.49, "y": 6, "rotation": 67.16, "width": 75, "height": 82 }, - "front_fist_open": { "x": 39.56, "y": 7.76, "rotation": 67.16, "width": 86, "height": 87 } - }, - "front_foot": { - "front_foot": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 126, "height": 69 }, - "front_foot_bend1": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 128, "height": 70 }, - "front_foot_bend2": { "x": 16.07, "y": 13.83, "rotation": 18.68, "width": 108, "height": 93 } - }, - "front_shin": { - "front_shin": { "x": 55.11, "y": -3.54, "rotation": 96.59, "width": 82, "height": 184 } - }, - "front_thigh": { - "front_thigh": { "x": 42.47, "y": 4.44, "rotation": 84.86, "width": 48, "height": 112 } - }, - "front_upper_arm": { - "front_upper_arm": { "x": 28.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } - }, - "goggles": { - "goggles": { "x": 97.07, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 } - }, - "gun": { - "gun": { "x": 77.3, "y": 16.4, "rotation": 60.82, "width": 210, "height": 203 } - }, - "head": { - "head": { "x": 128.95, "y": 0.29, "rotation": -70.63, "width": 271, "height": 298 } - }, - "head-bb": { - "head": { - "type": "boundingbox", - "vertices": [ -19.143097, -70.30209, 40.80313, -118.074234, 257.77155, -115.61827, 285.16193, 57.18005, 120.77191, 164.95125, -5.067627, 76.94907 ] - } - }, - "mouth": { - "mouth_grind": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, - "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, - "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 } - }, - "muzzle": { - "muzzle": { "x": 18.25, "y": 5.44, "rotation": 0.15, "width": 462, "height": 400 } - }, - "neck": { - "neck": { "x": 9.76, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 } - }, - "rear_bracer": { - "rear_bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 } - }, - "rear_foot": { - "rear_foot": { "x": 31.51, "y": 3.57, "rotation": 23.07, "width": 113, "height": 60 }, - "rear_foot_bend1": { "x": 34.39, "y": 4.8, "rotation": 23.07, "width": 117, "height": 66 }, - "rear_foot_bend2": { "x": 30.38, "y": 12.62, "rotation": 23.07, "width": 103, "height": 83 } - }, - "rear_shin": { - "rear_shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 } - }, - "rear_thigh": { - "rear_thigh": { "x": 33.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } - }, - "rear_upper_arm": { - "rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 } - }, - "torso": { - "torso": { "x": 63.61, "y": 7.12, "rotation": -94.53, "width": 98, "height": 180 } - } - } -}, -"events": { - "footstep": {}, - "headAttach": { "int": 3, "float": 4 }, - "headBehind": { "int": 5, "float": 6, "string": "setup" }, - "headPop": { "int": 1, "float": 2 } -}, -"animations": { - "death": { - "slots": { - "eye": { - "attachment": [ - { "time": 0, "name": "eye_surprised" }, - { "time": 0.4666, "name": "eye_indifferent" }, - { "time": 2.2333, "name": "eye_surprised" }, - { "time": 4.5333, "name": "eye_indifferent" } - ] - }, - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_oooo" }, - { "time": 2.2333, "name": "mouth_grind" }, - { "time": 4.5333, "name": "mouth_oooo" } - ] - } - }, - "bones": { - "head": { - "rotate": [ - { "time": 0, "angle": -2.82 }, - { "time": 0.1333, "angle": -28.74 }, - { "time": 0.2333, "angle": 11.42 }, - { "time": 0.3333, "angle": -50.24 }, - { "time": 0.4, "angle": -72.66, "curve": "stepped" }, - { "time": 0.4333, "angle": -72.66 }, - { "time": 0.5, "angle": -20.24 }, - { "time": 0.5666, "angle": -85.28, "curve": "stepped" }, - { "time": 0.9333, "angle": -85.28, "curve": "stepped" }, - { "time": 2.2333, "angle": -85.28 }, - { "time": 2.5, "angle": -51.96, "curve": "stepped" }, - { "time": 4.5333, "angle": -51.96 }, - { "time": 4.6666, "angle": -85.28 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": -2.82 }, - { "time": 0.1333, "angle": 12.35 }, - { "time": 0.2333, "angle": 29.89 }, - { "time": 0.3, "angle": 70.36 }, - { "time": 0.4, "angle": -10.22, "curve": "stepped" }, - { "time": 0.4333, "angle": -10.22 }, - { "time": 0.5, "angle": 2.92 }, - { "time": 0.5666, "angle": 47.94, "curve": "stepped" }, - { "time": 2.2333, "angle": 47.94 }, - { "time": 2.5, "angle": 18.5, "curve": "stepped" }, - { "time": 4.5333, "angle": 18.5 }, - { "time": 4.6666, "angle": 47.94 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -8.61 }, - { "time": 0.1333, "angle": 28.19 }, - { "time": 0.2666, "angle": -280.19 }, - { "time": 0.4, "angle": -237.22, "curve": "stepped" }, - { "time": 0.4333, "angle": -237.22 }, - { "time": 0.5, "angle": 76.03, "curve": "stepped" }, - { "time": 0.8, "angle": 76.03, "curve": "stepped" }, - { "time": 0.9333, "angle": 76.03, "curve": "stepped" }, - { "time": 2.2333, "angle": 76.03 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 2.2333, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -38.85 }, - { "time": 0.1333, "angle": -299.58 }, - { "time": 0.2666, "angle": -244.74 }, - { "time": 0.4, "angle": -292.35 }, - { "time": 0.4333, "angle": -315.84 }, - { "time": 0.5, "angle": -347.94 }, - { "time": 0.7, "angle": -347.33, "curve": "stepped" }, - { "time": 2.2333, "angle": -347.33 }, - { "time": 2.7, "angle": -290.68 }, - { "time": 2.7666, "angle": -285.1 }, - { "time": 4.6666, "angle": -290.68 }, - { "time": 4.8, "angle": 8.61 }, - { "time": 4.8666, "angle": 10.94 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": -44.69 }, - { "time": 0.1333, "angle": 112.26 }, - { "time": 0.2666, "angle": 129.07 }, - { "time": 0.4, "angle": 134.94, "curve": "stepped" }, - { "time": 0.4333, "angle": 134.94 }, - { "time": 0.5666, "angle": 172.6, "curve": "stepped" }, - { "time": 0.9333, "angle": 172.6, "curve": "stepped" }, - { "time": 2.2333, "angle": 172.6 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 21.88 }, - { "time": 0.1333, "angle": 11.48 }, - { "time": 0.2666, "angle": -18.81 }, - { "time": 0.4, "angle": -18.92 }, - { "time": 0.4333, "angle": -18.28 }, - { "time": 0.5, "angle": 60.61 }, - { "time": 0.7, "angle": -18.87, "curve": "stepped" }, - { "time": 2.2333, "angle": -18.87 }, - { "time": 2.7, "angle": -1.95, "curve": "stepped" }, - { "time": 4.6666, "angle": -1.95 }, - { "time": 4.8, "angle": 34.55 }, - { "time": 4.9333, "angle": -18.74 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -2.33 }, - { "time": 0.2666, "angle": 26.34 }, - { "time": 0.7, "angle": -6.07, "curve": "stepped" }, - { "time": 2.2333, "angle": -6.07 }, - { "time": 2.7, "angle": 5.72, "curve": "stepped" }, - { "time": 4.6666, "angle": 5.72 }, - { "time": 4.8666, "angle": -6.52 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 10.36 }, - { "time": 0.1333, "angle": -23.12 }, - { "time": 0.2666, "angle": -23.11 }, - { "time": 0.4, "angle": -23.16, "curve": "stepped" }, - { "time": 0.4333, "angle": -23.16 }, - { "time": 0.5666, "angle": -23.2, "curve": "stepped" }, - { "time": 0.9333, "angle": -23.2, "curve": "stepped" }, - { "time": 2.2333, "angle": -23.2 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": -2.78 }, - { "time": 0.1333, "angle": -24.58 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.9333, "angle": 0, "curve": "stepped" }, - { "time": 2.2333, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.2, "x": 50.34, "y": 151.73 }, - { "time": 0.4, "x": 5.16, "y": -119.64, "curve": "stepped" }, - { "time": 0.4333, "x": 5.16, "y": -119.64 }, - { "time": 0.5, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 0.8, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 0.9333, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 2.2333, "x": 50.34, "y": -205.18 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_thigh": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 8.47 }, - { "time": 0.2666, "angle": 115.95 }, - { "time": 0.4, "angle": 180.66, "curve": "stepped" }, - { "time": 0.4333, "angle": 180.66 }, - { "time": 0.5, "angle": 155.22 }, - { "time": 0.6, "angle": 97.73 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": -27.37 }, - { "time": 0.2666, "angle": -35.1 }, - { "time": 0.4, "angle": -37.72, "curve": "stepped" }, - { "time": 0.4333, "angle": -37.72 }, - { "time": 0.5, "angle": -40.06 }, - { "time": 0.6, "angle": 2.76 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 70.45 }, - { "time": 0.2666, "angle": 155.34 }, - { "time": 0.4, "angle": 214.31, "curve": "stepped" }, - { "time": 0.4333, "angle": 214.31 }, - { "time": 0.5, "angle": 169.67 }, - { "time": 0.8, "angle": 83.27 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 18.93 }, - { "time": 0.2666, "angle": -21.04 }, - { "time": 0.4, "angle": -29.93, "curve": "stepped" }, - { "time": 0.4333, "angle": -29.93 }, - { "time": 0.5, "angle": -16.79 }, - { "time": 0.8, "angle": 7.77 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": -11.62 }, - { "time": 0.4, "angle": -45.59, "curve": "stepped" }, - { "time": 0.4333, "angle": -45.59 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.4, "angle": -48.75, "curve": "stepped" }, - { "time": 0.4333, "angle": -48.75 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "gunTip": { - "rotate": [ - { "time": 0, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - } - } - }, - "hit": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0.1666, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_grind" }, - { "time": 0.3333, "name": "mouth_smile" } - ] - } - }, - "bones": { - "torso": { - "rotate": [ - { "time": 0, "angle": 56.42 }, - { "time": 0.3333, "angle": 8.89 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 35.38 }, - { "time": 0.2333, "angle": 24.94 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 10.21 }, - { "time": 0.3333, "angle": -41.3 } - ] - }, - "front_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": -310.92, - "curve": [ 0.38, 0.53, 0.744, 1 ] - }, - { "time": 0.3333, "angle": -112.59 } - ], - "translate": [ - { "time": 0, "x": 7.23, "y": -13.13 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 36.99 }, - { "time": 0.3333, "angle": -28.64 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": 13.59 }, - { "time": 0.3333, "angle": 7.55 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": 271.02, - "curve": [ 0.342, 0.36, 0.68, 0.71 ] - }, - { "time": 0.3333, "angle": -15.84 } - ], - "translate": [ - { "time": 0.3333, "x": -0.09, "y": -0.46 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.3333, "angle": 40.03 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 14.98 }, - { "time": 0.3333, "angle": 39.75 } - ] - }, - "hip": { - "translate": [ - { "time": 0, "x": -75.54, "y": -78.03 }, - { "time": 0.2333, "x": -36.48, "y": 12.42 }, - { "time": 0.3333, "x": -36.48, "y": -2.99 } - ] - }, - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 90.94, - "curve": [ 0.227, 0.26, 0.432, 1 ] - }, - { "time": 0.3333, "angle": 32.02 } - ], - "translate": [ - { "time": 0, "x": 7.21, "y": -4 } - ] - }, - "rear_thigh": { - "rotate": [ - { - "time": 0, - "angle": 40.51, - "curve": [ 0.295, 0.3, 0.59, 0.99 ] - }, - { "time": 0.3333, "angle": 90.76 } - ], - "translate": [ - { "time": 0, "x": -1.96, "y": -0.32 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": -96.62 }, - { "time": 0.3333, "angle": -15.13 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": 7.99 }, - { "time": 0.3333, "angle": -67.54 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 5.4 }, - { "time": 0.3333, "angle": -16.26 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 2.67 }, - { "time": 0.3333, "angle": -10.31 } - ] - } - } - }, - "idle": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_open" }, - { "time": 1.6666, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_smile" }, - { "time": 1.6666, "name": "mouth_smile" } - ] - } - }, - "bones": { - "torso": { - "rotate": [ - { - "time": 0, - "angle": -5.61, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.8333, - "angle": -9.65, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -5.61 } - ], - "translate": [ - { "time": 0, "x": -6.49, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": -59.85, - "curve": [ 0.492, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -54.31, - "curve": [ 0.324, 0.11, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -59.85 } - ], - "translate": [ - { "time": 0, "x": -7.12, "y": -8.23 }, - { "time": 0.6666, "x": -6.32, "y": -8.3 }, - { "time": 1.6666, "x": -7.12, "y": -8.23 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": 62.41, - "curve": [ 0.504, 0.02, 0.75, 1 ] - }, - { - "time": 0.7333, - "angle": 43.83, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": 62.41 } - ], - "translate": [ - { "time": 0, "x": -1.83, "y": -16.78 }, - { "time": 0.6666, "x": 0.34, "y": -15.23 }, - { "time": 1.6666, "x": -1.83, "y": -16.78 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.6666, "angle": 2.39 }, - { "time": 1.6666, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": -1.88, "y": -4.76, "curve": "stepped" }, - { "time": 1.6666, "x": -1.88, "y": -4.76 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 0.64, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": -4.34, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": 0.64 } - ], - "translate": [ - { "time": 0, "x": -13.39, "y": 6.69, "curve": "stepped" }, - { "time": 1.6666, "x": -13.39, "y": 6.69 } - ], - "scale": [ - { - "time": 0, - "x": 0.896, - "y": 1, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "x": 0.825, - "y": 1, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "x": 0.896, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": -19.28, "curve": "stepped" }, - { "time": 1.6666, "angle": -19.28 } - ], - "scale": [ - { - "time": 0, - "x": 1, - "y": 1, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "x": 0.994, - "y": 1, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { - "time": 0, - "angle": 30.5, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": 40.15, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": 30.5 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { - "time": 0, - "angle": -23.83, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": -43.77, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": -23.83 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { - "time": 0, - "angle": 5.13, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": 10.04, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": 5.13 } - ], - "scale": [ - { "time": 0, "x": 0.755, "y": 1.309, "curve": "stepped" }, - { "time": 1.6666, "x": 0.755, "y": 1.309 } - ] - }, - "hip": { - "translate": [ - { - "time": 0, - "x": -6.63, - "y": -23.01, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "x": 6.27, - "y": -35, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "x": -6.63, "y": -23.01 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { - "time": 0, - "angle": -7.34, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": 3.85, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": -7.34 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { - "time": 0, - "angle": -17.16, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": 12.52, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -17.16 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { - "time": 0, - "angle": -5.51, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -3.12, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -5.51 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { - "time": 0, - "angle": 45.46, - "curve": [ 0.492, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": 41.33, - "curve": [ 0.32, 0.1, 0.736, 0.91 ] - }, - { "time": 1.6666, "angle": 45.46 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { - "time": 0, - "angle": 0, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -15.59, - "curve": [ 0.732, 0, 0.769, 0.99 ] - }, - { "time": 1.6666, "angle": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { - "time": 0, - "angle": -6.84, - "curve": [ 0.492, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -14.63, - "curve": [ 0.324, 0.11, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -6.84 } - ], - "scale": [ - { - "time": 0, - "x": 1, - "y": 1, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "x": 0.689, - "y": 1.1, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - } - } - }, - "jump": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_open" }, - { "time": 0.2, "name": "front_fist_closed" }, - { "time": 0.6666, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_grind" } - ] - }, - "torso": { - "attachment": [ - { "time": 0, "name": "torso" } - ] - } - }, - "bones": { - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 91.53, - "curve": [ 0.278, 0.46, 0.763, 1 ] - }, - { - "time": 0.2, - "angle": -35.83, - "curve": [ 0.761, 0, 0.75, 1 ] - }, - { "time": 0.4333, "angle": 127.74 }, - { - "time": 0.7333, - "angle": 48.18, - "curve": [ 0.227, 0.26, 0.432, 1 ] - }, - { "time": 0.8333, "angle": 25.35 }, - { "time": 0.9333, "angle": 45.37 }, - { "time": 1.0333, "angle": 38.12 }, - { "time": 1.1333, "angle": 25.35 }, - { "time": 1.3333, "angle": 91.53 } - ], - "translate": [ - { "time": 0, "x": -2.56, "y": 5.77 }, - { "time": 0.4333, "x": 8.3, "y": 7.98 }, - { "time": 0.7333, "x": 7.21, "y": -4 }, - { "time": 1.3333, "x": -2.56, "y": 5.77 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -42.63 }, - { "time": 0.2, "angle": -5.74 }, - { "time": 0.4333, "angle": -50.76 }, - { "time": 0.7333, "angle": 1.89 }, - { "time": 0.8333, "angle": 11.58 }, - { "time": 0.9666, "angle": -1.89 }, - { "time": 1.1333, "angle": 11.58 }, - { "time": 1.3333, "angle": -42.63 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": -26.32 }, - { "time": 0.2, "angle": 121.44 }, - { "time": 0.4333, "angle": 70.54 }, - { - "time": 0.7333, - "angle": 79.89, - "curve": [ 0.295, 0.3, 0.59, 0.99 ] - }, - { "time": 0.8333, "angle": 99.12 }, - { "time": 0.9333, "angle": 74.05 }, - { "time": 1.0333, "angle": 98.04 }, - { "time": 1.1333, "angle": 99.12 }, - { "time": 1.3333, "angle": -26.32 } - ], - "translate": [ - { "time": 0, "x": -0.56, "y": -0.32 }, - { "time": 0.4333, "x": -8.5, "y": 10.58 }, - { "time": 0.7333, "x": -1.96, "y": -0.32 }, - { "time": 1.3333, "x": -0.56, "y": -0.32 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": -78.69 }, - { "time": 0.4333, "angle": -55.56 }, - { "time": 0.7333, "angle": -62.84 }, - { "time": 0.8333, "angle": -80.74 }, - { "time": 0.9333, "angle": -41.12 }, - { "time": 1.0333, "angle": -77.4 }, - { "time": 1.1333, "angle": -80.74 }, - { "time": 1.3333, "angle": -78.69 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.7333, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -22.61 }, - { "time": 0.2, "angle": -246.68 }, - { - "time": 0.6, - "angle": 11.28, - "curve": [ 0.246, 0, 0.633, 0.53 ] - }, - { - "time": 0.7333, - "angle": -57.45, - "curve": [ 0.38, 0.53, 0.744, 1 ] - }, - { "time": 0.8666, "angle": -112.59 }, - { "time": 0.9333, "angle": -102.17 }, - { "time": 1.0333, "angle": -108.61 }, - { "time": 1.1333, "angle": -112.59 }, - { "time": 1.3333, "angle": -22.61 } - ], - "translate": [ - { "time": 0, "x": 6.08, "y": 7.15 }, - { "time": 0.2, "x": 7.23, "y": -13.13, "curve": "stepped" }, - { "time": 0.7333, "x": 7.23, "y": -13.13 }, - { "time": 1.3333, "x": 6.08, "y": 7.15 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 66.46 }, - { "time": 0.2, "angle": 42.39 }, - { "time": 0.4333, "angle": 26.06 }, - { "time": 0.7333, "angle": 13.28 }, - { "time": 0.8666, "angle": -28.64 }, - { "time": 0.9333, "angle": -22.31 }, - { "time": 1.0333, "angle": -35.39 }, - { "time": 1.1333, "angle": -28.64 }, - { "time": 1.3333, "angle": 66.46 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -28.43 }, - { "time": 0.4333, "angle": -45.6 }, - { "time": 0.7333, "angle": -53.66 }, - { "time": 0.8666, "angle": 7.55 }, - { "time": 0.9333, "angle": 31.15 }, - { "time": 1.0333, "angle": -32.58 }, - { "time": 1.1333, "angle": 7.55 }, - { "time": 1.3333, "angle": -28.43 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 39.68 }, - { "time": 0.2, "angle": 276.57 }, - { "time": 0.3, "angle": 17.73 }, - { "time": 0.4333, "angle": 83.38 }, - { - "time": 0.6, - "angle": -4.71, - "curve": [ 0.246, 0, 0.633, 0.53 ] - }, - { - "time": 0.7333, - "angle": -69.63, - "curve": [ 0.342, 0.36, 0.68, 0.71 ] - }, - { - "time": 0.7666, - "angle": 321.47, - "curve": [ 0.333, 0.33, 0.667, 0.66 ] - }, - { - "time": 0.8, - "angle": 33.7, - "curve": [ 0.358, 0.64, 0.693, 1 ] - }, - { "time": 0.8666, "angle": 34.56 }, - { "time": 1.0333, "angle": 71.96 }, - { "time": 1.1333, "angle": 34.56 }, - { "time": 1.3333, "angle": 39.68 } - ], - "translate": [ - { "time": 0, "x": -3.1, "y": -4.86 }, - { "time": 0.2, "x": 23.33, "y": 49.07 }, - { "time": 0.4333, "x": 20.78, "y": 40.21 }, - { "time": 1.3333, "x": -3.1, "y": -4.86 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 29.66 }, - { "time": 0.2, "angle": 45.06 }, - { "time": 0.4333, "angle": -4.34 }, - { "time": 0.7666, "angle": 61.68 }, - { "time": 0.8, "angle": 82.59 }, - { "time": 0.8666, "angle": 80.06 }, - { "time": 1.0333, "angle": 57.56 }, - { "time": 1.1333, "angle": 80.06 }, - { "time": 1.3333, "angle": 29.66 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 24.9 }, - { "time": 0.2, "angle": 16.31 }, - { "time": 0.4333, "angle": 7.44 }, - { "time": 0.7333, "angle": -20.35 }, - { "time": 0.8333, "angle": -0.69, "curve": "stepped" }, - { "time": 1.1333, "angle": -0.69 }, - { "time": 1.3333, "angle": 24.9 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 24.92 }, - { "time": 0.2, "angle": 10.36 }, - { "time": 0.4333, "angle": 28.65 }, - { "time": 0.7333, "angle": -2.65 }, - { "time": 0.8333, "angle": -28.94, "curve": "stepped" }, - { "time": 1.1333, "angle": -28.94 }, - { "time": 1.3333, "angle": 24.92 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0 } - ], - "translate": [ - { - "time": 0, - "x": -34.51, - "y": -78.62, - "curve": [ 0.232, 1, 0.75, 1 ] - }, - { - "time": 0.2, - "x": -34.51, - "y": 182.5, - "curve": [ 0.232, 0.48, 0.598, 0.79 ] - }, - { - "time": 0.7666, - "x": -34.51, - "y": 596.22, - "curve": [ 0.329, 0.17, 0.66, 0.21 ] - }, - { "time": 1.1333, "x": -34.51, "y": 2.49 }, - { "time": 1.3333, "x": -34.51, "y": -78.62 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { - "time": 0, - "angle": -90.62, - "curve": [ 0.416, 0.54, 0.743, 1 ] - }, - { - "time": 0.2, - "angle": -10.52, - "curve": [ 0.644, 0, 0.75, 1 ] - }, - { "time": 0.4333, "angle": -127.72 }, - { "time": 0.7333, "angle": -19.91 }, - { "time": 0.8333, "angle": -5.16 }, - { "time": 0.9333, "angle": -35.06 }, - { "time": 1.0333, "angle": -43.97 }, - { "time": 1.1333, "angle": -5.16 }, - { "time": 1.3333, "angle": -90.62 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": -0.79 }, - { "time": 0.0333, "angle": 16.27 }, - { "time": 0.0666, "angle": 23.52 }, - { "time": 0.1, "angle": 21.02 }, - { "time": 0.1333, "angle": 10.92 }, - { "time": 0.2, "angle": -38.45 }, - { "time": 0.4333, "angle": 6.62 }, - { "time": 0.7333, "angle": -11.51 }, - { "time": 1.0333, "angle": -22.91 }, - { "time": 1.3333, "angle": -0.79 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": -12.77 }, - { "time": 0.2, "angle": 17.05 }, - { "time": 0.4333, "angle": 19.45 }, - { "time": 0.7333, "angle": 2.67 }, - { "time": 1.0333, "angle": -28.49 }, - { "time": 1.3333, "angle": -12.77 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 6.18 }, - { "time": 0.2, "angle": 30.81 }, - { "time": 0.4333, "angle": 13.25 }, - { "time": 0.7333, "angle": 14.98 }, - { "time": 0.7666, "angle": 25.64 }, - { "time": 0.8, "angle": 20.62 }, - { "time": 0.8666, "angle": 64.52 }, - { "time": 1.0333, "angle": 8.59 }, - { "time": 1.1333, "angle": 64.52 }, - { "time": 1.3333, "angle": 6.18 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - } - } - }, - "run": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_closed" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_grind" } - ] - }, - "torso": { - "attachment": [ - { "time": 0, "name": "torso" } - ] - } - }, - "bones": { - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 42.05, - "curve": [ 0.195, 0.86, 0.75, 1 ] - }, - { "time": 0.0666, "angle": 46.07 }, - { "time": 0.1333, "angle": -20.28 }, - { "time": 0.2, "angle": -27.23 }, - { "time": 0.2666, "angle": -47.16 }, - { "time": 0.3333, "angle": -39.79 }, - { "time": 0.4, "angle": -25.86 }, - { "time": 0.4666, "angle": 14.35 }, - { "time": 0.5333, "angle": 55.62 }, - { "time": 0.6, "angle": 69.65 }, - { "time": 0.6666, "angle": 86.4 }, - { "time": 0.7333, "angle": 65.87 }, - { "time": 0.8, "angle": 42.05 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.0333, "x": -5.79, "y": 11.15 }, - { "time": 0.0666, "x": -5.13, "y": 11.55 }, - { "time": 0.1333, "x": -7.7, "y": 8.98 }, - { "time": 0.5333, "x": -1.26, "y": 3.83 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -39.7 }, - { "time": 0.2, "angle": -57.29 }, - { "time": 0.4, "angle": -39.7 }, - { "time": 0.6, "angle": -57.29 }, - { "time": 0.8, "angle": -39.7 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": -56.59 }, - { "time": 0.0666, "angle": -21.57 }, - { "time": 0.1333, "angle": 27.95 }, - { "time": 0.2, "angle": 42.42 }, - { "time": 0.2666, "angle": 62.37 }, - { "time": 0.3333, "angle": 45.42 }, - { "time": 0.4, "angle": 15.67 }, - { "time": 0.4666, "angle": 28.22 }, - { "time": 0.5333, "angle": -38.62 }, - { "time": 0.6, "angle": -53.26 }, - { "time": 0.6666, "angle": -79.31 }, - { "time": 0.7333, "angle": -86.47 }, - { "time": 0.8, "angle": -56.59 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.4, "x": -6.76, "y": -3.86 }, - { "time": 0.4333, "x": -15.85, "y": 7.28 }, - { "time": 0.4666, "x": -13.04, "y": 4.04 }, - { "time": 0.5, "x": -10.24, "y": 7.11 }, - { "time": 0.5333, "x": -9.01, "y": -5.15 }, - { "time": 0.6666, "x": -23.18, "y": -2.57 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": -74 }, - { "time": 0.0666, "angle": -83.38 }, - { "time": 0.1333, "angle": -106.69 }, - { "time": 0.2, "angle": -66.01 }, - { "time": 0.2666, "angle": -55.22 }, - { "time": 0.3333, "angle": -24.8 }, - { - "time": 0.4, - "angle": 18.44, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.4666, "angle": -56.65 }, - { - "time": 0.5333, - "angle": -11.94, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.6666, "angle": -41.26 }, - { "time": 0.7333, "angle": -43.6 }, - { "time": 0.8, "angle": -74 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -89.36 }, - { "time": 0.0666, "angle": -95.67 }, - { "time": 0.1333, "angle": -22 }, - { "time": 0.2, "angle": -316.04 }, - { "time": 0.2666, "angle": -274.94 }, - { "time": 0.3333, "angle": -273.74 }, - { "time": 0.4, "angle": -272.09 }, - { "time": 0.4666, "angle": -264.89 }, - { "time": 0.5333, "angle": -320.09 }, - { "time": 0.6, "angle": -50.83 }, - { "time": 0.6666, "angle": -81.72 }, - { "time": 0.7333, "angle": -83.92 }, - { "time": 0.8, "angle": -89.36 } - ], - "translate": [ - { "time": 0, "x": 6.24, "y": 10.05 }, - { "time": 0.2666, "x": 4.95, "y": -13.13 }, - { "time": 0.6, "x": -2.43, "y": 1.94 }, - { "time": 0.8, "x": 6.24, "y": 10.05 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 33.43 }, - { "time": 0.0666, "angle": 20.53 }, - { "time": 0.1333, "angle": 15.26 }, - { "time": 0.2, "angle": 19.28 }, - { "time": 0.2666, "angle": 22.62 }, - { "time": 0.3333, "angle": 37.29 }, - { "time": 0.4, "angle": 41.53 }, - { "time": 0.4666, "angle": 31.73 }, - { "time": 0.5333, "angle": 67.45 }, - { "time": 0.6666, "angle": 39.77 }, - { "time": 0.7333, "angle": 30.95 }, - { "time": 0.8, "angle": 33.43 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -19.75 }, - { "time": 0.0666, "angle": -37.11 }, - { "time": 0.1333, "angle": -50.79 }, - { "time": 0.2666, "angle": -12.69 }, - { "time": 0.3333, "angle": 3.01 }, - { "time": 0.4333, "angle": 12.05 }, - { "time": 0.5333, "angle": 13.25 }, - { "time": 0.8, "angle": -19.75 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 68.68 }, - { "time": 0.0666, "angle": 73.89 }, - { "time": 0.1333, "angle": -9.64 }, - { "time": 0.2, "angle": 284.27 }, - { "time": 0.2666, "angle": 283.29 }, - { "time": 0.3333, "angle": 278.28 }, - { "time": 0.4, "angle": 271.02 }, - { "time": 0.4666, "angle": 263.2 }, - { "time": 0.5333, "angle": 314.25 }, - { "time": 0.6, "angle": 16.83 }, - { "time": 0.6666, "angle": 70.35 }, - { "time": 0.7333, "angle": 73.53 }, - { "time": 0.8, "angle": 68.68 } - ], - "translate": [ - { "time": 0, "x": -2.57, "y": -8.89 }, - { "time": 0.1333, "x": -4.68, "y": 7.2 }, - { "time": 0.2, "x": 21.73, "y": 51.17 }, - { "time": 0.6, "x": 4.33, "y": 2.05 }, - { "time": 0.8, "x": -2.57, "y": -8.89 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 31.04 }, - { "time": 0.0666, "angle": 28.28 }, - { "time": 0.1333, "angle": 49.36 }, - { "time": 0.2, "angle": 59.37 }, - { "time": 0.2666, "angle": 8.56 }, - { "time": 0.3333, "angle": 9.38 }, - { "time": 0.4, "angle": 11.51 }, - { "time": 0.4666, "angle": 7.22 }, - { "time": 0.5333, "angle": -18.44 }, - { "time": 0.6, "angle": 11.44 }, - { "time": 0.6666, "angle": 9.99 }, - { "time": 0.7333, "angle": 8.28 }, - { "time": 0.8, "angle": 31.04 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 11.03 }, - { "time": 0.2, "angle": 13.58 }, - { "time": 0.4, "angle": 11.03 }, - { "time": 0.6, "angle": 13.58 }, - { "time": 0.8, "angle": 11.03 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 11.03 }, - { "time": 0.1, "angle": 12.34 }, - { "time": 0.2, "angle": 25.55 }, - { "time": 0.4, "angle": 11.03 }, - { "time": 0.5, "angle": 12.34 }, - { "time": 0.6, "angle": 25.55 }, - { "time": 0.8, "angle": 11.03 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": -62.47, "y": -23.1 }, - { - "time": 0.0666, - "x": -62.47, - "y": -38.51, - "curve": [ 0.244, 0.04, 0.75, 1 ] - }, - { - "time": 0.2666, - "x": -62.47, - "y": 22.28, - "curve": [ 0.17, 0.52, 0.75, 1 ] - }, - { "time": 0.4, "x": -62.47, "y": -23.1 }, - { "time": 0.4333, "x": -62.47, "y": -24.59 }, - { - "time": 0.4666, - "x": -62.47, - "y": -43.29, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.6666, "x": -62.47, "y": 22.28 }, - { "time": 0.8, "x": -62.47, "y": -23.1 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { - "time": 0, - "angle": 0, - "curve": [ 0.481, 0.01, 0.75, 1 ] - }, - { "time": 0.0666, "angle": -64.42 }, - { - "time": 0.1333, - "angle": -20.59, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.2666, "angle": -62.51 }, - { "time": 0.3333, "angle": -79.74 }, - { "time": 0.4, "angle": -78.28 }, - { - "time": 0.4666, - "angle": -118.96, - "curve": [ 0.93, 0, 0.952, 0.95 ] - }, - { "time": 0.6, "angle": -88.95 }, - { "time": 0.6666, "angle": -79.09 }, - { "time": 0.7333, "angle": -47.77 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { - "time": 0.0333, - "angle": -21.13, - "curve": [ 0.121, 0.23, 0.75, 1 ] - }, - { "time": 0.0666, "angle": 17.64 }, - { "time": 0.1, "angle": 29.92 }, - { "time": 0.1333, "angle": 16.44 }, - { "time": 0.2, "angle": -29.22 }, - { "time": 0.2666, "angle": -1.61 }, - { "time": 0.3333, "angle": -10.22 }, - { "time": 0.4666, "angle": -15.99 }, - { "time": 0.6, "angle": 9.03 }, - { "time": 0.7333, "angle": 17.32 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.0666, "angle": -12.04 }, - { "time": 0.1333, "angle": -0.87 }, - { "time": 0.2, "angle": 25.81 }, - { "time": 0.2666, "angle": 4.71 }, - { - "time": 0.4, - "angle": 18.09, - "curve": [ 0.281, 0.73, 0.75, 1 ] - }, - { "time": 0.4333, "angle": -1.7 }, - { "time": 0.4666, "angle": 27.12 }, - { "time": 0.5, "angle": 38.83 }, - { "time": 0.5333, "angle": 30.76 }, - { "time": 0.5666, "angle": -20.49 }, - { "time": 0.6, "angle": -30.8 }, - { "time": 0.6666, "angle": -1.31 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 24.72 }, - { "time": 0.5, "angle": -11.87 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - } - }, - "events": [ - { "time": 0, "name": "footstep" }, - { "time": 0.4, "name": "footstep", "int": 1 } - ] - }, - "shoot": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0.1333, "name": "front_fist_closed" }, - { "time": 0.4, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0.1333, "name": "mouth_grind" } - ] - }, - "muzzle": { - "attachment": [ - { "time": 0.1333, "name": "muzzle" }, - { "time": 0.2666, "name": null } - ], - "color": [ - { - "time": 0.1333, - "color": "ffffff00", - "curve": [ 0.118, 0.99, 0.75, 1 ] - }, - { - "time": 0.1666, - "color": "ffffffff", - "curve": [ 0.821, 0, 0.909, 0.89 ] - }, - { "time": 0.2666, "color": "ffffff00" } - ] - } - }, - "bones": { - "front_fist": { - "scale": [ - { "time": 0.1333, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.4, "x": 1, "y": 1 } - ] - }, - "gunTip": { - "translate": [ - { "time": 0.1333, "x": 0, "y": 0 }, - { "time": 0.2, "x": 20.93, "y": 1.57 } - ], - "scale": [ - { "time": 0.1333, "x": 1, "y": 1 }, - { "time": 0.2, "x": 1.247, "y": 1.516 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 1.9 } - ], - "translate": [ - { - "time": 0, - "x": 7.95, - "y": 5.84, - "curve": [ 0, 0.3, 0.678, 1 ] - }, - { "time": 0.3, "x": -9.3, "y": -1.41 }, - { "time": 0.4, "x": 0, "y": 0 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": -30.47 } - ], - "translate": [ - { - "time": 0, - "x": 0, - "y": 0, - "curve": [ 0, 0.3, 0.678, 1 ] - }, - { "time": 0.3, "x": -5.99, "y": -3.71 }, - { "time": 0.4, "x": 0, "y": 0 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 62.3 } - ], - "translate": [ - { - "time": 0, - "x": 0, - "y": 0, - "curve": [ 0, 0.3, 0.678, 1 ] - }, - { "time": 0.3, "x": 2.81, "y": 11.41 }, - { "time": 0.4, "x": 0, "y": 0 } - ] - } - } - }, - "test": { - "slots": { - "front_foot": { - "color": [ - { "time": 0.6666, "color": "ffffffff" }, - { "time": 1.3333, "color": "ff0700ff" } - ] - }, - "gun": { - "color": [ - { "time": 0, "color": "ffffffff", "curve": "stepped" }, - { "time": 0.6666, "color": "ffffffff" }, - { "time": 1.3333, "color": "32ff00ff" } - ] - }, - "rear_foot": { - "color": [ - { "time": 0.6666, "color": "ffffffff" }, - { "time": 1.3333, "color": "ff0700ff" } - ] - } - }, - "bones": { - "head": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.3333, "angle": -20.72 }, - { "time": 0.6666, "angle": -32.41 }, - { "time": 1, "angle": -5.3 }, - { "time": 1.3333, "angle": 24.96 }, - { "time": 1.6666, "angle": 15.61 }, - { "time": 2, "angle": 0 } - ], - "translate": [ - { - "time": 0, - "x": 0, - "y": 0, - "curve": [ 0.172, 0.37, 0.574, 0.73 ] - }, - { - "time": 0.1666, - "x": 144.19, - "y": -77.59, - "curve": [ 0.372, 0.61, 0.765, 1 ] - }, - { - "time": 0.3333, - "x": 217.61, - "y": -192.63, - "curve": [ 0.282, 0, 0.624, 0.31 ] - }, - { - "time": 0.5, - "x": 181.21, - "y": -365.66, - "curve": [ 0.313, 0.21, 0.654, 0.54 ] - }, - { - "time": 0.6666, - "x": 20.09, - "y": -500.4, - "curve": [ 0.147, 0.27, 0.75, 1 ] - }, - { "time": 0.8333, "x": -194.24, "y": -341.84 }, - { "time": 1, "x": -307.93, "y": -114 }, - { - "time": 1.1666, - "x": -330.38, - "y": 121.42, - "curve": [ 0.25, 0, 0.764, 0.48 ] - }, - { - "time": 1.3333, - "x": -240.42, - "y": 335.66, - "curve": [ 0.229, 0.37, 0.58, 0.73 ] - }, - { - "time": 1.5, - "x": -56.12, - "y": 288.06, - "curve": [ 0.296, 0.6, 0.641, 1 ] - }, - { - "time": 1.6666, - "x": 87.63, - "y": 191.33, - "curve": [ 0.238, 0, 0.626, 0.39 ] - }, - { - "time": 1.8333, - "x": 60.62, - "y": 95.14, - "curve": [ 0.41, 0.26, 0.803, 0.62 ] - }, - { "time": 2, "x": 0, "y": 0 } - ] - } - }, - "draworder": [ - { - "time": 0.6666, - "offsets": [ - { "slot": "head", "offset": -9 }, - { "slot": "eye", "offset": -9 }, - { "slot": "mouth", "offset": -12 }, - { "slot": "goggles", "offset": -12 } - ] - }, - { "time": 1.3333 } - ], - "events": [ - { "time": 0, "name": "headPop", "int": 0, "float": 0, "string": "pop.wav" }, - { "time": 1, "name": "headBehind", "int": 7, "float": 8, "string": "animate" }, - { "time": 2, "name": "headAttach", "int": 0, "float": 0, "string": "attach.wav" } - ] - }, - "walk": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_closed" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_smile" } - ] - }, - "torso": { - "attachment": [ - { "time": 0, "name": "torso" } - ] - } - }, - "bones": { - "front_thigh": { - "rotate": [ - { "time": 0, "angle": 15.79 }, - { "time": 0.1, "angle": 27.39 }, - { "time": 0.2, "angle": -7.94 }, - { "time": 0.3, "angle": -16.94 }, - { "time": 0.4, "angle": -28.62 }, - { "time": 0.5, "angle": -19.3 }, - { "time": 0.6, "angle": -3.08 }, - { "time": 0.7, "angle": 29.51 }, - { "time": 0.8, "angle": 15.79 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.4, "x": -1.18, "y": 0.54 }, - { "time": 0.5, "x": 0.11, "y": 0.41 }, - { "time": 0.6, "x": 9.48, "y": 0.27 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.4, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": 5.12 }, - { "time": 0.1, "angle": -20.87 }, - { "time": 0.2, "angle": 13.37 }, - { "time": 0.3, "angle": 15.98 }, - { "time": 0.4, "angle": 5.94 }, - { "time": 0.5, "angle": -26.76 }, - { "time": 0.7, "angle": -55.44 }, - { "time": 0.8, "angle": 5.12 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": -34.38 }, - { "time": 0.1, "angle": -30.32 }, - { "time": 0.2, "angle": -37.22 }, - { "time": 0.3, "angle": 20.73 }, - { "time": 0.4, "angle": 8.69 }, - { "time": 0.5, "angle": 12.16 }, - { "time": 0.6, "angle": -24.62 }, - { "time": 0.7, "angle": -27.26 }, - { "time": 0.8, "angle": -34.38 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.4, "x": 4.08, "y": -9.53 }, - { "time": 0.5, "x": 0, "y": 0 }, - { "time": 0.7, "x": -21.14, "y": -9.6 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": 14.26 }, - { "time": 0.1, "angle": -17.3 }, - { "time": 0.2, "angle": -12.67 }, - { "time": 0.3, "angle": -58.89 }, - { "time": 0.4, "angle": 15.95 }, - { "time": 0.5, "angle": -9 }, - { "time": 0.6, "angle": 26.06 }, - { "time": 0.7, "angle": 21.85 }, - { "time": 0.8, "angle": 14.26 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 }, - { "time": 0.1, "x": 0.951, "y": 1 }, - { "time": 0.5, "x": 0.975, "y": 1 }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 10.13 }, - { "time": 0.1, "angle": 12.27 }, - { "time": 0.2, "angle": -2.94 }, - { "time": 0.3, "angle": 6.29 }, - { "time": 0.4, "angle": 13.45 }, - { "time": 0.5, "angle": -3.57 }, - { "time": 0.6, "angle": -0.97 }, - { "time": 0.7, "angle": 2.97 }, - { "time": 0.8, "angle": 10.13 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -23.74 }, - { "time": 0.4, "angle": -320.57 }, - { "time": 0.8, "angle": -23.74 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 11.62 }, - { "time": 0.1, "angle": 19.36 }, - { "time": 0.4, "angle": 345.26 }, - { "time": 0.5, "angle": 343.44 }, - { "time": 0.8, "angle": 11.62 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -12.11 }, - { "time": 0.1666, "angle": -17.16 }, - { "time": 0.4, "angle": -12.11 }, - { "time": 0.5666, "angle": -15.81 }, - { "time": 0.8, "angle": -12.11 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 1.41 }, - { "time": 0.2333, "angle": -3.04 }, - { "time": 0.4, "angle": 1.41 }, - { "time": 0.6333, "angle": -3.04 }, - { "time": 0.8, "angle": 1.41 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 6.97 }, - { "time": 0.1666, "angle": 8.02 }, - { "time": 0.2666, "angle": 12.65 }, - { "time": 0.4, "angle": 6.97 }, - { "time": 0.5666, "angle": 8.02 }, - { "time": 0.6666, "angle": 12.65 }, - { "time": 0.8, "angle": 6.97 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { - "time": 0, - "x": -23.93, - "y": 3.22, - "curve": [ 0.518, 0.03, 0.807, 0.61 ] - }, - { - "time": 0.1, - "x": -23.93, - "y": -9.24, - "curve": [ 0.135, 0.33, 0.601, 0.99 ] - }, - { - "time": 0.2, - "x": -23.93, - "y": 4.35, - "curve": [ 0.204, 0.68, 0.75, 1 ] - }, - { - "time": 0.3, - "x": -23.93, - "y": 2.38, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.4, - "x": -23.93, - "y": -2.5, - "curve": [ 0.692, 0.01, 0.75, 1 ] - }, - { - "time": 0.5, - "x": -23.93, - "y": -10.32, - "curve": [ 0.235, 0.77, 0.75, 1 ] - }, - { - "time": 0.6, - "x": -23.93, - "y": 4.35, - "curve": [ 0.287, 0.37, 0.718, 0.76 ] - }, - { - "time": 0.7, - "x": -23.93, - "y": 10.34, - "curve": [ 0.615, 0, 0.75, 1 ] - }, - { "time": 0.8, "x": -23.93, "y": 3.22 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.4, "angle": 20.59 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 12.49 }, - { "time": 0.1, "angle": -8.34 }, - { "time": 0.2, "angle": -6.17 }, - { "time": 0.3, "angle": -0.75 }, - { "time": 0.3333, "angle": 3.89 }, - { "time": 0.4, "angle": 10.22 }, - { "time": 0.5, "angle": 11.44 }, - { "time": 0.6, "angle": -0.33 }, - { "time": 0.7, "angle": 0.15 }, - { "time": 0.8, "angle": 12.49 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 3.58 }, - { "time": 0.1, "angle": 5.51 }, - { "time": 0.4, "angle": -22.77 }, - { "time": 0.5, "angle": -9.65 }, - { "time": 0.8, "angle": 3.58 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -15.22 }, - { "time": 0.1, "angle": -51.4 }, - { "time": 0.4, "angle": -39.4 }, - { "time": 0.5, "angle": 19.26 }, - { "time": 0.8, "angle": -15.22 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { - "time": 0, - "angle": -24.06, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.1, - "angle": -10.94, - "curve": [ 0.381, 0.54, 0.742, 1 ] - }, - { - "time": 0.4, - "angle": 25.34, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -27.47, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.8, "angle": -24.06 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - } - } - } -} -} \ No newline at end of file diff --git a/spine-c/data/spineboy.png b/spine-c/data/spineboy.png deleted file mode 100644 index b43262310..000000000 Binary files a/spine-c/data/spineboy.png and /dev/null differ diff --git a/spine-c/include/spine/Animation.h b/spine-c/include/spine/Animation.h index d596b0013..d70d8f423 100644 --- a/spine-c/include/spine/Animation.h +++ b/spine-c/include/spine/Animation.h @@ -89,12 +89,14 @@ typedef enum { SP_TIMELINE_SCALE, SP_TIMELINE_ROTATE, SP_TIMELINE_TRANSLATE, + SP_TIMELINE_SHEAR, SP_TIMELINE_COLOR, SP_TIMELINE_ATTACHMENT, SP_TIMELINE_EVENT, SP_TIMELINE_DRAWORDER, SP_TIMELINE_FFD, - SP_TIMELINE_IKCONSTRAINT + SP_TIMELINE_IKCONSTRAINT, + SP_TIMELINE_TRANSFORMCONSTRAINT } spTimelineType; struct spTimeline { @@ -219,6 +221,20 @@ typedef spScaleTimeline ScaleTimeline; /**/ +typedef struct spBaseTimeline spShearTimeline; + +spShearTimeline* spShearTimeline_create (int framesCount); + +void spShearTimeline_setFrame (spShearTimeline* self, int frameIndex, float time, float x, float y); + +#ifdef SPINE_SHORT_NAMES +typedef spShearTimeline ShearTimeline; +#define ShearTimeline_create(...) spShearTimeline_create(__VA_ARGS__) +#define ShearTimeline_setFrame(...) spShearTimeline_setFrame(__VA_ARGS__) +#endif + +/**/ + typedef struct spColorTimeline { spCurveTimeline super; int const framesCount; @@ -387,7 +403,6 @@ typedef struct spIkConstraintTimeline { spIkConstraintTimeline* spIkConstraintTimeline_create (int framesCount); -/* @param attachmentName May be 0. */ void spIkConstraintTimeline_setFrame (spIkConstraintTimeline* self, int frameIndex, float time, float mix, int bendDirection); #ifdef SPINE_SHORT_NAMES @@ -398,6 +413,34 @@ typedef spIkConstraintTimeline IkConstraintTimeline; /**/ +typedef struct spTransformConstraintTimeline { + spCurveTimeline super; + int const framesCount; + float* const frames; /* time, mix, bendDirection, ... */ + int transformConstraintIndex; + +#ifdef __cplusplus + spTransformConstraintTimeline() : + super(), + framesCount(0), + frames(0), + transformConstraintIndex(0) { + } +#endif +} spTransformConstraintTimeline; + +spTransformConstraintTimeline* spTransformConstraintTimeline_create (int framesCount); + +void spTransformConstraintTimeline_setFrame (spTransformConstraintTimeline* self, int frameIndex, float time, float rotateMix, float translateMix, float scaleMix, float shearMix); + +#ifdef SPINE_SHORT_NAMES +typedef spTransformConstraintTimeline TransformConstraintTimeline; +#define TransformConstraintTimeline_create(...) spTransformConstraintTimeline_create(__VA_ARGS__) +#define TransformConstraintTimeline_setFrame(...) spTransformConstraintTimeline_setFrame(__VA_ARGS__) +#endif + +/**/ + #ifdef __cplusplus } #endif diff --git a/spine-c/include/spine/Bone.h b/spine-c/include/spine/Bone.h index 160d9a642..1dbc9df0a 100644 --- a/spine-c/include/spine/Bone.h +++ b/spine-c/include/spine/Bone.h @@ -45,7 +45,7 @@ struct spBone { spBoneData* const data; struct spSkeleton* const skeleton; spBone* const parent; - float x, y, rotation, scaleX, scaleY; + float x, y, rotation, scaleX, scaleY, shearX, shearY; float appliedRotation, appliedScaleX, appliedScaleY; float const a, b, worldX; @@ -77,7 +77,7 @@ void spBone_dispose (spBone* self); void spBone_setToSetupPose (spBone* self); void spBone_updateWorldTransform (spBone* self); -void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rotation, float scaleX, float scaleY); +void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rotation, float scaleX, float scaleY, float shearX, float shearY); float spBone_getWorldRotationX (spBone* self); float spBone_getWorldRotationY (spBone* self); diff --git a/spine-c/include/spine/BoneData.h b/spine-c/include/spine/BoneData.h index e0591380c..ddf0d157a 100644 --- a/spine-c/include/spine/BoneData.h +++ b/spine-c/include/spine/BoneData.h @@ -41,9 +41,7 @@ struct spBoneData { const char* const name; spBoneData* const parent; float length; - float x, y; - float rotation; - float scaleX, scaleY; + float x, y, rotation, scaleX, scaleY, shearX, shearY; int/*bool*/inheritScale, inheritRotation; #ifdef __cplusplus diff --git a/spine-c/include/spine/TransformConstraint.h b/spine-c/include/spine/TransformConstraint.h index c670a7823..c4be652b0 100644 --- a/spine-c/include/spine/TransformConstraint.h +++ b/spine-c/include/spine/TransformConstraint.h @@ -45,17 +45,24 @@ typedef struct spTransformConstraint { spTransformConstraintData* const data; spBone* bone; spBone* target; - float translateMix; - float x, y; + float rotateMix, translateMix, scaleMix, shearMix; + float offsetRotation, offsetX, offsetY, offsetScaleX, offsetScaleY, offsetShearY; #ifdef __cplusplus spTransformConstraint() : data(0), bone(0), target(0), + rotateMix(0), translateMix(0), - x(0), - y(0) { + scaleMix(0), + shearMix(0), + offsetRotation(0), + offsetX(0), + offsetY(0), + offsetScaleX(0), + offsetScaleY(0), + offsetShearY(0) { } #endif } spTransformConstraint; diff --git a/spine-c/include/spine/TransformConstraintData.h b/spine-c/include/spine/TransformConstraintData.h index 3fc02a045..bffb4fe80 100644 --- a/spine-c/include/spine/TransformConstraintData.h +++ b/spine-c/include/spine/TransformConstraintData.h @@ -43,17 +43,24 @@ typedef struct spTransformConstraintData { spBoneData* bone; spBoneData* target; - float translateMix; - float x, y; + float rotateMix, translateMix, scaleMix, shearMix; + float offsetRotation, offsetX, offsetY, offsetScaleX, offsetScaleY, offsetShearY; #ifdef __cplusplus spTransformConstraintData() : name(0), bone(0), target(0), + rotateMix(0), translateMix(0), - x(0), - y(0) { + scaleMix(0), + shearMix(0), + offsetRotation(0), + offsetX(0), + offsetY(0), + offsetScaleX(0), + offsetScaleY(0), + offsetShearY(0) { } #endif } spTransformConstraintData; diff --git a/spine-c/include/spine/extension.h b/spine-c/include/spine/extension.h index af621f64d..63b416f02 100644 --- a/spine-c/include/spine/extension.h +++ b/spine-c/include/spine/extension.h @@ -58,9 +58,14 @@ #define MALLOC_STR(TO,FROM) strcpy(CONST_CAST(char*, TO) = (char*)MALLOC(char, strlen(FROM) + 1), FROM) #define PI 3.1415926535897932385f +#define PI2 (PI * 2) #define DEG_RAD (PI / 180) #define RAD_DEG (180 / PI) +#define SIN_DEG(A) sinf((A) * DEG_RAD) +#define COS_DEG(A) cosf((A) * DEG_RAD) +#define ABS(A) ((A) < 0? -(A): (A)) + #ifdef __STDC_VERSION__ #define FMOD(A,B) fmodf(A, B) #define ATAN2(A,B) atan2f(A, B) diff --git a/spine-c/spine-c.sln b/spine-c/spine-c.sln deleted file mode 100644 index 346a6ba9c..000000000 --- a/spine-c/spine-c.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual C++ Express 2010 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spine-c", "spine-c.vcxproj", "{5D74934A-7512-45EE-8402-7B95D3642E85}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Win32.ActiveCfg = Debug|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Win32.Build.0 = Debug|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Win32.ActiveCfg = Release|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/spine-c/spine-c.vcxproj b/spine-c/spine-c.vcxproj deleted file mode 100644 index 0ac111cba..000000000 --- a/spine-c/spine-c.vcxproj +++ /dev/null @@ -1,140 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {5D74934A-7512-45EE-8402-7B95D3642E85} - Win32Proj - SpineC - - - - StaticLibrary - true - Unicode - v110 - - - StaticLibrary - false - true - Unicode - v110 - - - - - - - - - - - - - - - - - Level3 - Disabled - _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) - .\include;%(AdditionalIncludeDirectories) - - - Windows - true - - - - - Level3 - - - MaxSpeed - true - true - _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) - .\include - - - Windows - true - true - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spine-c/spine-c.vcxproj.filters b/spine-c/spine-c.vcxproj.filters deleted file mode 100644 index c62c2f897..000000000 --- a/spine-c/spine-c.vcxproj.filters +++ /dev/null @@ -1,195 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/spine-c/src/spine/Animation.c b/spine-c/src/spine/Animation.c index 5bbef426f..eb3add590 100644 --- a/spine-c/src/spine/Animation.c +++ b/spine-c/src/spine/Animation.c @@ -251,13 +251,13 @@ struct spBaseTimeline* _spBaseTimeline_create (int framesCount, spTimelineType t /**/ -static const int ROTATE_PREV_FRAME_TIME = -2; -static const int ROTATE_FRAME_VALUE = 1; +static const int ROTATE_PREV_TIME = -2; +static const int ROTATE_FRAME = 1; void _spRotateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { spBone *bone; - int frameIndex; + int frame; float prevFrameValue, frameTime, percent, amount; spRotateTimeline* self = SUB_CAST(spRotateTimeline, timeline); @@ -267,7 +267,7 @@ void _spRotateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, bone = skeleton->bones[self->boneIndex]; if (time >= self->frames[self->framesCount - 2]) { /* Time is after last frame. */ - float amount = bone->data->rotation + self->frames[self->framesCount - 1] - bone->rotation; + amount = bone->data->rotation + self->frames[self->framesCount - 1] - bone->rotation; while (amount > 180) amount -= 360; while (amount < -180) @@ -277,13 +277,13 @@ void _spRotateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, } /* Interpolate between the previous frame and the current frame. */ - frameIndex = binarySearch(self->frames, self->framesCount, time, 2); - prevFrameValue = self->frames[frameIndex - 1]; - frameTime = self->frames[frameIndex]; - percent = 1 - (time - frameTime) / (self->frames[frameIndex + ROTATE_PREV_FRAME_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), (frameIndex >> 1) - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + frame = binarySearch(self->frames, self->framesCount, time, 2); + prevFrameValue = self->frames[frame - 1]; + frameTime = self->frames[frame]; + percent = 1 - (time - frameTime) / (self->frames[frame + ROTATE_PREV_TIME] - frameTime); + percent = spCurveTimeline_getCurvePercent(SUPER(self), (frame >> 1) - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - amount = self->frames[frameIndex + ROTATE_FRAME_VALUE] - prevFrameValue; + amount = self->frames[frame + ROTATE_FRAME] - prevFrameValue; while (amount > 180) amount -= 360; while (amount < -180) @@ -312,14 +312,14 @@ void spRotateTimeline_setFrame (spRotateTimeline* self, int frameIndex, float ti /**/ -static const int TRANSLATE_PREV_FRAME_TIME = -3; -static const int TRANSLATE_FRAME_X = 1; -static const int TRANSLATE_FRAME_Y = 2; +static const int TRANSLATE_PREV_TIME = -3; +static const int TRANSLATE_X = 1; +static const int TRANSLATE_Y = 2; void _spTranslateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { spBone *bone; - int frameIndex; + int frame; float prevFrameX, prevFrameY, frameTime, percent; spTranslateTimeline* self = SUB_CAST(spTranslateTimeline, timeline); @@ -335,16 +335,16 @@ void _spTranslateTimeline_apply (const spTimeline* timeline, spSkeleton* skeleto } /* Interpolate between the previous frame and the current frame. */ - frameIndex = binarySearch(self->frames, self->framesCount, time, 3); - prevFrameX = self->frames[frameIndex - 2]; - prevFrameY = self->frames[frameIndex - 1]; - frameTime = self->frames[frameIndex]; - percent = 1 - (time - frameTime) / (self->frames[frameIndex + TRANSLATE_PREV_FRAME_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + frame = binarySearch(self->frames, self->framesCount, time, 3); + prevFrameX = self->frames[frame - 2]; + prevFrameY = self->frames[frame - 1]; + frameTime = self->frames[frame]; + percent = 1 - (time - frameTime) / (self->frames[frame + TRANSLATE_PREV_TIME] - frameTime); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - bone->x += (bone->data->x + prevFrameX + (self->frames[frameIndex + TRANSLATE_FRAME_X] - prevFrameX) * percent - bone->x) + bone->x += (bone->data->x + prevFrameX + (self->frames[frame + TRANSLATE_X] - prevFrameX) * percent - bone->x) * alpha; - bone->y += (bone->data->y + prevFrameY + (self->frames[frameIndex + TRANSLATE_FRAME_Y] - prevFrameY) * percent - bone->y) + bone->y += (bone->data->y + prevFrameY + (self->frames[frame + TRANSLATE_Y] - prevFrameY) * percent - bone->y) * alpha; UNUSED(lastTime); @@ -368,7 +368,7 @@ void spTranslateTimeline_setFrame (spTranslateTimeline* self, int frameIndex, fl void _spScaleTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { spBone *bone; - int frameIndex; + int frame; float prevFrameX, prevFrameY, frameTime, percent; spScaleTimeline* self = SUB_CAST(spScaleTimeline, timeline); @@ -383,16 +383,16 @@ void _spScaleTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f } /* Interpolate between the previous frame and the current frame. */ - frameIndex = binarySearch(self->frames, self->framesCount, time, 3); - prevFrameX = self->frames[frameIndex - 2]; - prevFrameY = self->frames[frameIndex - 1]; - frameTime = self->frames[frameIndex]; - percent = 1 - (time - frameTime) / (self->frames[frameIndex + TRANSLATE_PREV_FRAME_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + frame = binarySearch(self->frames, self->framesCount, time, 3); + prevFrameX = self->frames[frame - 2]; + prevFrameY = self->frames[frame - 1]; + frameTime = self->frames[frame]; + percent = 1 - (time - frameTime) / (self->frames[frame + TRANSLATE_PREV_TIME] - frameTime); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - bone->scaleX += (bone->data->scaleX * (prevFrameX + (self->frames[frameIndex + TRANSLATE_FRAME_X] - prevFrameX) * percent) + bone->scaleX += (bone->data->scaleX * (prevFrameX + (self->frames[frame + TRANSLATE_X] - prevFrameX) * percent) - bone->scaleX) * alpha; - bone->scaleY += (bone->data->scaleY * (prevFrameY + (self->frames[frameIndex + TRANSLATE_FRAME_Y] - prevFrameY) * percent) + bone->scaleY += (bone->data->scaleY * (prevFrameY + (self->frames[frame + TRANSLATE_Y] - prevFrameY) * percent) - bone->scaleY) * alpha; UNUSED(lastTime); @@ -410,24 +410,68 @@ void spScaleTimeline_setFrame (spScaleTimeline* self, int frameIndex, float time /**/ -static const int COLOR_PREV_FRAME_TIME = -5; -static const int COLOR_FRAME_R = 1; -static const int COLOR_FRAME_G = 2; -static const int COLOR_FRAME_B = 3; -static const int COLOR_FRAME_A = 4; +void _spShearTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, + int* eventsCount, float alpha) { + spBone *bone; + int frame; + float prevFrameX, prevFrameY, frameTime, percent; + + spShearTimeline* self = SUB_CAST(spShearTimeline, timeline); + + if (time < self->frames[0]) return; /* Time is before first frame. */ + + bone = skeleton->bones[self->boneIndex]; + if (time >= self->frames[self->framesCount - 3]) { /* Time is after last frame. */ + bone->shearX += (bone->data->shearX * self->frames[self->framesCount - 2] - bone->shearX) * alpha; + bone->shearY += (bone->data->shearY * self->frames[self->framesCount - 1] - bone->shearY) * alpha; + return; + } + + /* Interpolate between the previous frame and the current frame. */ + frame = binarySearch(self->frames, self->framesCount, time, 3); + prevFrameX = self->frames[frame - 2]; + prevFrameY = self->frames[frame - 1]; + frameTime = self->frames[frame]; + percent = 1 - (time - frameTime) / (self->frames[frame + TRANSLATE_PREV_TIME] - frameTime); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + + bone->shearX += (bone->data->shearX + (prevFrameX + (self->frames[frame + TRANSLATE_X] - prevFrameX) * percent) + - bone->shearX) * alpha; + bone->shearY += (bone->data->shearY + (prevFrameY + (self->frames[frame + TRANSLATE_Y] - prevFrameY) * percent) + - bone->shearY) * alpha; + + UNUSED(lastTime); + UNUSED(firedEvents); + UNUSED(eventsCount); +} + +spShearTimeline* spShearTimeline_create (int framesCount) { + return (spShearTimeline*)_spBaseTimeline_create(framesCount, SP_TIMELINE_SHEAR, 3, _spShearTimeline_apply); +} + +void spShearTimeline_setFrame (spShearTimeline* self, int frameIndex, float time, float x, float y) { + spTranslateTimeline_setFrame(self, frameIndex, time, x, y); +} + +/**/ + +static const int COLOR_PREV_TIME = -5; +static const int COLOR_R = 1; +static const int COLOR_G = 2; +static const int COLOR_B = 3; +static const int COLOR_A = 4; void _spColorTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { spSlot *slot; - int frameIndex; - float prevFrameR, prevFrameG, prevFrameB, prevFrameA, percent, frameTime; + int frame; + float percent, frameTime; float r, g, b, a; spColorTimeline* self = (spColorTimeline*)timeline; if (time < self->frames[0]) return; /* Time is before first frame. */ - if (time >= self->frames[self->framesCount - 5]) { - /* Time is after last frame. */ + if (time >= self->frames[self->framesCount - 5]) { /* Time is after last frame */ int i = self->framesCount - 1; r = self->frames[i - 3]; g = self->frames[i - 2]; @@ -435,19 +479,20 @@ void _spColorTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f a = self->frames[i]; } else { /* Interpolate between the previous frame and the current frame. */ - frameIndex = binarySearch(self->frames, self->framesCount, time, 5); - prevFrameR = self->frames[frameIndex - 4]; - prevFrameG = self->frames[frameIndex - 3]; - prevFrameB = self->frames[frameIndex - 2]; - prevFrameA = self->frames[frameIndex - 1]; - frameTime = self->frames[frameIndex]; - percent = 1 - (time - frameTime) / (self->frames[frameIndex + COLOR_PREV_FRAME_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frameIndex / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + frame = binarySearch(self->frames, self->framesCount, time, 5); + frameTime = self->frames[frame]; + percent = 1 - (time - frameTime) / (self->frames[frame + COLOR_PREV_TIME] - frameTime); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - r = prevFrameR + (self->frames[frameIndex + COLOR_FRAME_R] - prevFrameR) * percent; - g = prevFrameG + (self->frames[frameIndex + COLOR_FRAME_G] - prevFrameG) * percent; - b = prevFrameB + (self->frames[frameIndex + COLOR_FRAME_B] - prevFrameB) * percent; - a = prevFrameA + (self->frames[frameIndex + COLOR_FRAME_A] - prevFrameA) * percent; + r = self->frames[frame - 4]; + g = self->frames[frame - 3]; + b = self->frames[frame - 2]; + a = self->frames[frame - 1]; + + r += (self->frames[frame + COLOR_R] - r) * percent; + g += (self->frames[frame + COLOR_G] - g) * percent; + b += (self->frames[frame + COLOR_B] - b) * percent; + a += (self->frames[frame + COLOR_A] - a) * percent; } slot = skeleton->slots[self->slotIndex]; if (alpha < 1) { @@ -484,7 +529,7 @@ void spColorTimeline_setFrame (spColorTimeline* self, int frameIndex, float time void _spAttachmentTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { - int frameIndex; + int frame; const char* attachmentName; spAttachmentTimeline* self = (spAttachmentTimeline*)timeline; @@ -494,11 +539,11 @@ void _spAttachmentTimeline_apply (const spTimeline* timeline, spSkeleton* skelet } else if (lastTime > time) /**/ lastTime = -1; - frameIndex = time >= self->frames[self->framesCount - 1] ? + frame = time >= self->frames[self->framesCount - 1] ? self->framesCount - 1 : binarySearch1(self->frames, self->framesCount, time) - 1; - if (self->frames[frameIndex] < lastTime) return; + if (self->frames[frame] < lastTime) return; - attachmentName = self->attachmentNames[frameIndex]; + attachmentName = self->attachmentNames[frame]; spSlot_setAttachment(skeleton->slots[self->slotIndex], attachmentName ? spSkeleton_getAttachmentForSlotIndex(skeleton, self->slotIndex, attachmentName) : 0); @@ -547,7 +592,7 @@ void spAttachmentTimeline_setFrame (spAttachmentTimeline* self, int frameIndex, void _spEventTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { spEventTimeline* self = (spEventTimeline*)timeline; - int frameIndex; + int frame; if (!firedEvents) return; if (lastTime > time) { /* Fire events after last time for looped animations. */ @@ -558,18 +603,18 @@ void _spEventTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, f if (time < self->frames[0]) return; /* Time is before first frame. */ if (lastTime < self->frames[0]) - frameIndex = 0; + frame = 0; else { - float frame; - frameIndex = binarySearch1(self->frames, self->framesCount, lastTime); - frame = self->frames[frameIndex]; - while (frameIndex > 0) { /* Fire multiple events with the same frame. */ - if (self->frames[frameIndex - 1] != frame) break; - frameIndex--; + float frameTime; + frame = binarySearch1(self->frames, self->framesCount, lastTime); + frameTime = self->frames[frame]; + while (frame > 0) { /* Fire multiple events with the same frame. */ + if (self->frames[frame - 1] != frameTime) break; + frame--; } } - for (; frameIndex < self->framesCount && time >= self->frames[frameIndex]; ++frameIndex) { - firedEvents[*eventsCount] = self->events[frameIndex]; + for (; frame < self->framesCount && time >= self->frames[frame]; ++frame) { + firedEvents[*eventsCount] = self->events[frame]; (*eventsCount)++; } } @@ -610,18 +655,18 @@ void spEventTimeline_setFrame (spEventTimeline* self, int frameIndex, spEvent* e void _spDrawOrderTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { int i; - int frameIndex; + int frame; const int* drawOrderToSetupIndex; spDrawOrderTimeline* self = (spDrawOrderTimeline*)timeline; if (time < self->frames[0]) return; /* Time is before first frame. */ if (time >= self->frames[self->framesCount - 1]) /* Time is after last frame. */ - frameIndex = self->framesCount - 1; + frame = self->framesCount - 1; else - frameIndex = binarySearch1(self->frames, self->framesCount, time) - 1; + frame = binarySearch1(self->frames, self->framesCount, time) - 1; - drawOrderToSetupIndex = self->drawOrders[frameIndex]; + drawOrderToSetupIndex = self->drawOrders[frame]; if (!drawOrderToSetupIndex) memcpy(skeleton->drawOrder, skeleton->slots, self->slotsCount * sizeof(spSlot*)); else { @@ -676,7 +721,7 @@ void spDrawOrderTimeline_setFrame (spDrawOrderTimeline* self, int frameIndex, fl void _spFFDTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { - int frameIndex, i, vertexCount; + int frame, i, vertexCount; float percent, frameTime; const float* prevVertices; const float* nextVertices; @@ -727,13 +772,13 @@ void _spFFDTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, flo } /* Interpolate between the previous frame and the current frame. */ - frameIndex = binarySearch1(self->frames, self->framesCount, time); - frameTime = self->frames[frameIndex]; - percent = 1 - (time - frameTime) / (self->frames[frameIndex - 1] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frameIndex - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + frame = binarySearch1(self->frames, self->framesCount, time); + frameTime = self->frames[frame]; + percent = 1 - (time - frameTime) / (self->frames[frame - 1] - frameTime); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - prevVertices = self->frameVertices[frameIndex - 1]; - nextVertices = self->frameVertices[frameIndex]; + prevVertices = self->frameVertices[frame - 1]; + nextVertices = self->frameVertices[frame]; if (alpha < 1) { for (i = 0; i < vertexCount; ++i) { @@ -790,38 +835,37 @@ void spFFDTimeline_setFrame (spFFDTimeline* self, int frameIndex, float time, fl /**/ -static const int IKCONSTRAINT_PREV_FRAME_TIME = -3; -static const int IKCONSTRAINT_PREV_FRAME_MIX = -2; -static const int IKCONSTRAINT_PREV_FRAME_BEND_DIRECTION = -1; -static const int IKCONSTRAINT_FRAME_MIX = 1; +static const int IKCONSTRAINT_PREV_TIME = -3; +static const int IKCONSTRAINT_PREV_MIX = -2; +static const int IKCONSTRAINT_PREV_BEND_DIRECTION = -1; +static const int IKCONSTRAINT_MIX = 1; void _spIkConstraintTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, spEvent** firedEvents, int* eventsCount, float alpha) { - int frameIndex; - float prevFrameMix, frameTime, percent, mix; - spIkConstraint* ikConstraint; + int frame; + float frameTime, percent, mix; + spIkConstraint* constraint; spIkConstraintTimeline* self = (spIkConstraintTimeline*)timeline; if (time < self->frames[0]) return; /* Time is before first frame. */ - ikConstraint = skeleton->ikConstraints[self->ikConstraintIndex]; + constraint = skeleton->ikConstraints[self->ikConstraintIndex]; if (time >= self->frames[self->framesCount - 3]) { /* Time is after last frame. */ - ikConstraint->mix += (self->frames[self->framesCount - 2] - ikConstraint->mix) * alpha; - ikConstraint->bendDirection = (int)self->frames[self->framesCount - 1]; + constraint->mix += (self->frames[self->framesCount + IKCONSTRAINT_PREV_MIX] - constraint->mix) * alpha; + constraint->bendDirection = (int)self->frames[self->framesCount + IKCONSTRAINT_PREV_BEND_DIRECTION]; return; } /* Interpolate between the previous frame and the current frame. */ - frameIndex = binarySearch(self->frames, self->framesCount, time, 3); - prevFrameMix = self->frames[frameIndex + IKCONSTRAINT_PREV_FRAME_MIX]; - frameTime = self->frames[frameIndex]; - percent = 1 - (time - frameTime) / (self->frames[frameIndex + IKCONSTRAINT_PREV_FRAME_TIME] - frameTime); - percent = spCurveTimeline_getCurvePercent(SUPER(self), frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + frame = binarySearch(self->frames, self->framesCount, time, 3); + frameTime = self->frames[frame]; + percent = 1 - (time - frameTime) / (self->frames[frame + IKCONSTRAINT_PREV_TIME] - frameTime); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - mix = prevFrameMix + (self->frames[frameIndex + IKCONSTRAINT_FRAME_MIX] - prevFrameMix) * percent; - ikConstraint->mix += (mix - ikConstraint->mix) * alpha; - ikConstraint->bendDirection = (int)self->frames[frameIndex + IKCONSTRAINT_PREV_FRAME_BEND_DIRECTION]; + mix = self->frames[frame + IKCONSTRAINT_PREV_MIX]; + constraint->mix += (mix + (self->frames[frame + IKCONSTRAINT_MIX] - mix) * percent - constraint->mix) * alpha; + constraint->bendDirection = (int)self->frames[frame + IKCONSTRAINT_PREV_BEND_DIRECTION]; UNUSED(lastTime); UNUSED(firedEvents); @@ -840,3 +884,66 @@ void spIkConstraintTimeline_setFrame (spIkConstraintTimeline* self, int frameInd } /**/ +static const int TRANSFORMCONSTRAINT_PREV_TIME = -5; +static const int TRANSFORMCONSTRAINT_PREV_ROTATE_MIX = -4; +static const int TRANSFORMCONSTRAINT_PREV_TRANSLATE_MIX = -3; +static const int TRANSFORMCONSTRAINT_PREV_SCALE_MIX = -2; +static const int TRANSFORMCONSTRAINT_PREV_SHEAR_MIX = -1; +static const int TRANSFORMCONSTRAINT_ROTATE_MIX = 1; +static const int TRANSFORMCONSTRAINT_TRANSLATE_MIX = 2; +static const int TRANSFORMCONSTRAINT_SCALE_MIX = 3; +static const int TRANSFORMCONSTRAINT_SHEAR_MIX = 4; + +void _spTransformConstraintTimeline_apply (const spTimeline* timeline, spSkeleton* skeleton, float lastTime, float time, + spEvent** firedEvents, int* eventsCount, float alpha) { + int frame; + float frameTime, percent, rotate, translate, scale, shear; + spTransformConstraint* constraint; + spTransformConstraintTimeline* self = (spTransformConstraintTimeline*)timeline; + + if (time < self->frames[0]) return; /* Time is before first frame. */ + + constraint = skeleton->transformConstraints[self->transformConstraintIndex]; + + if (time >= self->frames[self->framesCount - 5]) { /* Time is after last frame. */ + int len = self->framesCount; + constraint->rotateMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_ROTATE_MIX] - constraint->rotateMix) * alpha; + constraint->translateMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_TRANSLATE_MIX] - constraint->translateMix) * alpha; + constraint->scaleMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_SCALE_MIX] - constraint->scaleMix) * alpha; + constraint->shearMix += (self->frames[len + TRANSFORMCONSTRAINT_PREV_SHEAR_MIX] - constraint->shearMix) * alpha; + return; + } + + /* Interpolate between the previous frame and the current frame. */ + frame = binarySearch(self->frames, self->framesCount, time, 5); + frameTime = self->frames[frame]; + percent = 1 - (time - frameTime) / (self->frames[frame + TRANSFORMCONSTRAINT_PREV_TIME] - frameTime); + percent = spCurveTimeline_getCurvePercent(SUPER(self), frame / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + + rotate = self->frames[frame + TRANSFORMCONSTRAINT_PREV_ROTATE_MIX]; + translate = self->frames[frame + TRANSFORMCONSTRAINT_PREV_TRANSLATE_MIX]; + scale = self->frames[frame + TRANSFORMCONSTRAINT_PREV_SCALE_MIX]; + shear = self->frames[frame + TRANSFORMCONSTRAINT_PREV_SHEAR_MIX]; + constraint->rotateMix += (rotate + (self->frames[frame + TRANSFORMCONSTRAINT_ROTATE_MIX] - rotate) * percent - constraint->rotateMix) * alpha; + constraint->translateMix += (translate + (self->frames[frame + TRANSFORMCONSTRAINT_TRANSLATE_MIX] - translate) * percent - constraint->translateMix) + * alpha; + constraint->scaleMix += (scale + (self->frames[frame + TRANSFORMCONSTRAINT_SCALE_MIX] - scale) * percent - constraint->scaleMix) * alpha; + constraint->shearMix += (shear + (self->frames[frame + TRANSFORMCONSTRAINT_SHEAR_MIX] - shear) * percent - constraint->shearMix) * alpha; + + UNUSED(lastTime); + UNUSED(firedEvents); + UNUSED(eventsCount); +} + +spTransformConstraintTimeline* spTransformConstraintTimeline_create (int framesCount) { + return (spTransformConstraintTimeline*)_spBaseTimeline_create(framesCount, SP_TIMELINE_TRANSFORMCONSTRAINT, 5, _spTransformConstraintTimeline_apply); +} + +void spTransformConstraintTimeline_setFrame (spTransformConstraintTimeline* self, int frameIndex, float time, float rotateMix, float translateMix, float scaleMix, float shearMix) { + frameIndex *= 5; + self->frames[frameIndex] = time; + self->frames[frameIndex + 1] = rotateMix; + self->frames[frameIndex + 2] = translateMix; + self->frames[frameIndex + 3] = scaleMix; + self->frames[frameIndex + 4] = shearMix; +} diff --git a/spine-c/src/spine/Bone.c b/spine-c/src/spine/Bone.c index 2432a20e2..d37a9ad35 100644 --- a/spine-c/src/spine/Bone.c +++ b/spine-c/src/spine/Bone.c @@ -31,7 +31,7 @@ #include #include - +#include static int yDown; void spBone_setYDown (int value) { @@ -56,14 +56,14 @@ void spBone_dispose (spBone* self) { } void spBone_updateWorldTransform (spBone* self) { - spBone_updateWorldTransformWith(self, self->x, self->y, self->rotation, self->scaleX, self->scaleY); + spBone_updateWorldTransformWith(self, self->x, self->y, self->rotation, self->scaleX, self->scaleY, self->shearX, self->shearY); } -void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rotation, float scaleX, float scaleY) { - float radians = rotation * DEG_RAD; - float cosine = COS(radians); - float sine = SIN(radians); - float la = cosine * scaleX, lb = -sine * scaleY, lc = sine * scaleX, ld = cosine * scaleY; +void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rotation, float scaleX, float scaleY, float shearX, float shearY) { + float cosine, sine; + float rotationY = rotation + 90 + shearY; + float la = COS_DEG(rotation + shearX) * scaleX, lb = COS_DEG(rotationY) * scaleY; + float lc = SIN_DEG(rotation + shearX) * scaleX, ld = SIN_DEG(rotationY) * scaleY; float pa, pb, pc, pd, temp; spBone* parent = self->parent; @@ -115,8 +115,7 @@ void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rota pc = 0; pd = 1; do { - cosine = COS(parent->appliedRotation * DEG_RAD); - sine = SIN(parent->appliedRotation * DEG_RAD); + cosine = COS_DEG(parent->appliedRotation); sine = SIN_DEG(parent->appliedRotation); temp = pa * cosine + pb * sine; pb = pa * -sine + pb * cosine; pa = temp; @@ -138,14 +137,10 @@ void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rota pd = 1; do { float za, zb, zc, zd; - float r = parent->rotation; - float psx = parent->appliedScaleX, psy = parent->appliedScaleY; - cosine = COS(r * DEG_RAD); - sine = SIN(r * DEG_RAD); - za = cosine * psx; - zb = -sine * psy; - zc = sine * psx; - zd = cosine * psy; + float r = parent->appliedRotation; + float psx = parent->appliedScaleX; float psy = parent->appliedScaleY; + cosine = COS_DEG(r); sine = SIN_DEG(r); + za = cosine * psx; zb = -sine * psy; zc = sine * psx; zd = cosine * psy; temp = pa * za + pb * zc; pb = pa * zb + pb * zd; pa = temp; @@ -154,8 +149,8 @@ void spBone_updateWorldTransformWith (spBone* self, float x, float y, float rota pc = temp; if (psx < 0) r = -r; - cosine = COS(-r * DEG_RAD); - sine = SIN(-r * DEG_RAD); + cosine = COS_DEG(-r); + sine = SIN_DEG(-r); temp = pa * cosine + pb * sine; pb = pa * -sine + pb * cosine; pa = temp; @@ -193,6 +188,8 @@ void spBone_setToSetupPose (spBone* self) { self->rotation = self->data->rotation; self->scaleX = self->data->scaleX; self->scaleY = self->data->scaleY; + self->shearX = self->data->shearX; + self->shearY = self->data->shearY; } float spBone_getWorldRotationX (spBone* self) { diff --git a/spine-c/src/spine/IkConstraint.c b/spine-c/src/spine/IkConstraint.c index e4c61b1b8..5c533c9a0 100644 --- a/spine-c/src/spine/IkConstraint.c +++ b/spine-c/src/spine/IkConstraint.c @@ -34,181 +34,187 @@ #include #include -spIkConstraint* spIkConstraint_create (spIkConstraintData* data, const spSkeleton* skeleton) { - int i; +spIkConstraint *spIkConstraint_create(spIkConstraintData *data, const spSkeleton *skeleton) { + int i; - spIkConstraint* self = NEW(spIkConstraint); - CONST_CAST(spIkConstraintData*, self->data) = data; - self->bendDirection = data->bendDirection; - self->mix = data->mix; + spIkConstraint *self = NEW(spIkConstraint); + CONST_CAST(spIkConstraintData*, self->data) = data; + self->bendDirection = data->bendDirection; + self->mix = data->mix; - self->bonesCount = self->data->bonesCount; - self->bones = MALLOC(spBone*, self->bonesCount); - for (i = 0; i < self->bonesCount; ++i) - self->bones[i] = spSkeleton_findBone(skeleton, self->data->bones[i]->name); - self->target = spSkeleton_findBone(skeleton, self->data->target->name); + self->bonesCount = self->data->bonesCount; + self->bones = MALLOC(spBone*, self->bonesCount); + for (i = 0; i < self->bonesCount; ++i) + self->bones[i] = spSkeleton_findBone(skeleton, self->data->bones[i]->name); + self->target = spSkeleton_findBone(skeleton, self->data->target->name); - return self; + return self; } -void spIkConstraint_dispose (spIkConstraint* self) { - FREE(self->bones); - FREE(self); +void spIkConstraint_dispose(spIkConstraint *self) { + FREE(self->bones); + FREE(self); } -void spIkConstraint_apply (spIkConstraint* self) { - switch (self->bonesCount) { - case 1: - spIkConstraint_apply1(self->bones[0], self->target->worldX, self->target->worldY, self->mix); - break; - case 2: - spIkConstraint_apply2(self->bones[0], self->bones[1], self->target->worldX, self->target->worldY, self->bendDirection, - self->mix); - break; - } +void spIkConstraint_apply(spIkConstraint *self) { + switch (self->bonesCount) { + case 1: + spIkConstraint_apply1(self->bones[0], self->target->worldX, self->target->worldY, self->mix); + break; + case 2: + spIkConstraint_apply2(self->bones[0], self->bones[1], self->target->worldX, self->target->worldY, + self->bendDirection, + self->mix); + break; + } } -void spIkConstraint_apply1 (spBone* bone, float targetX, float targetY, float alpha) { - float parentRotation = !bone->parent ? 0 : spBone_getWorldRotationX(bone->parent); - float rotation = bone->rotation; - float rotationIK = ATAN2(targetY - bone->worldY, targetX - bone->worldX) * RAD_DEG - parentRotation; - if ((bone->worldSignX != bone->worldSignY) != (bone->skeleton->flipX != (bone->skeleton->flipY != spBone_isYDown()))) - rotationIK = 360 - rotationIK; - if (rotationIK > 180) rotationIK -= 360; - else if (rotationIK < -180) rotationIK += 360; - spBone_updateWorldTransformWith(bone, bone->x, bone->y, rotation + (rotationIK - rotation) * alpha, bone->appliedScaleX, - bone->appliedScaleY); +void spIkConstraint_apply1(spBone *bone, float targetX, float targetY, float alpha) { + spBone *pp = bone->parent; + float id = 1 / (pp->a * pp->d - pp->b * pp->c); + float x = targetX - pp->worldX, y = targetY - pp->worldY; + float tx = (x * pp->d - y * pp->b) * id - bone->x, ty = (y * pp->a - x * pp->c) * id - bone->y; + float rotationIK = ATAN2(ty, tx) * RAD_DEG - bone->shearX; + if (bone->scaleX < 0) rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; + else if (rotationIK < -180) rotationIK += 360; + spBone_updateWorldTransformWith(bone, bone->x, bone->y, bone->rotation + (rotationIK - bone->rotation) * alpha, + bone->appliedScaleX, + bone->appliedScaleY, bone->shearX, bone->shearY); } -void spIkConstraint_apply2 (spBone* parent, spBone* child, float targetX, float targetY, int bendDir, float alpha) { - float px = parent->x, py = parent->y, psx = parent->appliedScaleX, psy = parent->appliedScaleY; - float cx = child->x, cy = child->y, csx = child->appliedScaleX, cwx = child->worldX, cwy = child->worldY; - int o1, o2, s2, u; - spBone* pp = parent->parent; - float tx, ty, dx, dy, l1, l2, a1, a2, r; - if (alpha == 0) return; - if (psx < 0) { - psx = -psx; - o1 = 180; - s2 = -1; - } else { - o1 = 0; - s2 = 1; - } - if (psy < 0) { - psy = -psy; - s2 = -s2; - } - r = psx - psy; - u = (r < 0 ? -r : r) <= 0.0001f; - if (!u && cy != 0) { - cwx = parent->a * cx + parent->worldX; - cwy = parent->c * cx + parent->worldY; - cy = 0; - } - if (csx < 0) { - csx = -csx; - o2 = 180; - } else - o2 = 0; - if (!pp) { - tx = targetX - px; - ty = targetY - py; - dx = cwx - px; - dy = cwy - py; - } else { - float a = pp->a, b = pp->b, c = pp->c, d = pp->d, invDet = 1 / (a * d - b * c); - float wx = pp->worldX, wy = pp->worldY, x = targetX - wx, y = targetY - wy; - tx = (x * d - y * b) * invDet - px; - ty = (y * a - x * c) * invDet - py; - x = cwx - wx; - y = cwy - wy; - dx = (x * d - y * b) * invDet - px; - dy = (y * a - x * c) * invDet - py; - } - l1 = SQRT(dx * dx + dy * dy); - l2 = child->data->length * csx; - if (u) { - float cos, a, o; - l2 *= psx; - cos = (tx * tx + ty * ty - l1 * l1 - l2 * l2) / (2 * l1 * l2); - if (cos < -1) cos = -1; - else if (cos > 1) cos = 1; - a2 = ACOS(cos) * bendDir; - a = l1 + l2 * cos; - o = l2 * SIN(a2); - a1 = ATAN2(ty * a - tx * o, tx * a + ty * o); - } else { - float a = psx * l2, b = psy * l2, ta = ATAN2(ty, tx); - float aa = a * a, bb = b * b, ll = l1 * l1, dd = tx * tx + ty * ty; - float c0 = bb * ll + aa * dd - aa * bb, c1 = -2 * bb * l1, c2 = bb - aa; - float d = c1 * c1 - 4 * c2 * c0; - float minAngle = 0, minDist = FLT_MAX, minX = 0, minY = 0; - float maxAngle = 0, maxDist = 0, maxX = 0, maxY = 0; - float x = l1 + a, dist = x * x, angle, y; - if (d >= 0) { - float q = SQRT(d), r0, r1, ar0, ar1;; - if (c1 < 0) q = -q; - q = -(c1 + q) / 2; - r0 = q / c2; - r1 = c0 / q; - ar0 = r0 < 0 ? -r0 : r0; - ar1 = r1 < 0 ? -r1 : r1; - r = ar0 < ar1 ? r0 : r1; - if (r * r <= dd) { - float y1 = SQRT(dd - r * r) * bendDir; - a1 = ta - ATAN2(y1, r); - a2 = ATAN2(y1 / psy, (r - l1) / psx); - goto outer; - } - } - if (dist > maxDist) { - maxAngle = 0; - maxDist = dist; - maxX = x; - } - x = l1 - a; - dist = x * x; - if (dist < minDist) { - minAngle = PI; - minDist = dist; - minX = x; - } - angle = ACOS(-a * l1 / (aa - bb)); - x = a * COS(angle) + l1; - y = b * SIN(angle); - dist = x * x + y * y; - if (dist < minDist) { - minAngle = angle; - minDist = dist; - minX = x; - minY = y; - } - if (dist > maxDist) { - maxAngle = angle; - maxDist = dist; - maxX = x; - maxY = y; - } - if (dd <= (minDist + maxDist) / 2) { - a1 = ta - ATAN2(minY * bendDir, minX); - a2 = minAngle * bendDir; - } else { - a1 = ta - ATAN2(maxY * bendDir, maxX); - a2 = maxAngle * bendDir; - } - } - outer: { - float os = ATAN2(cy, cx) * s2; - a1 = (a1 - os) * RAD_DEG + o1; - a2 = (a2 + os) * RAD_DEG * s2 + o2; - if (a1 > 180) a1 -= 360; - else if (a1 < -180) a1 += 360; - if (a2 > 180) a2 -= 360; - else if (a2 < -180) a2 += 360; - r = parent->rotation; - spBone_updateWorldTransformWith(parent, px, py, r + (a1 - r) * alpha, parent->appliedScaleX, parent->appliedScaleY); - r = child->rotation; - spBone_updateWorldTransformWith(child, cx, cy, r + (a2 - r) * alpha, child->appliedScaleX, child->appliedScaleY); - } +void spIkConstraint_apply2(spBone *parent, spBone *child, float targetX, float targetY, int bendDir, float alpha) { + float px = parent->x, py = parent->y, psx = parent->appliedScaleX, psy = parent->appliedScaleY; + int os1, os2, s2; + float cx, cy, csx; + int u; + spBone *pp; + float ppa, ppb, ppc, ppd, id; + float x, y; + float tx, ty; + float dx, dy; + float l1, l2, a1, a2; + float os; + float rotation; + + if (alpha == 0) return; + if (psx < 0) { + psx = -psx; + os1 = 180; + s2 = -1; + } else { + os1 = 0; + s2 = 1; + } + if (psy < 0) { + psy = -psy; + s2 = -s2; + } + cx = child->x; cy = child->y; csx = child->appliedScaleX; + u = ABS(psx - psy) <= 0.0001f; + if (!u && cy != 0) { + CONST_CAST(float, child->worldX) = parent->a * cx + parent->worldX; + CONST_CAST(float, child->worldY) = parent->c * cx + parent->worldY; + cy = 0; + } + if (csx < 0) { + csx = -csx; + os2 = 180; + } else + os2 = 0; + pp = parent->parent; + ppa = pp->a; ppb = pp->b; ppc = pp->c; ppd = pp->d; id = 1 / (ppa * ppd - ppb * ppc); + x = targetX - pp->worldX; y = targetY - pp->worldY; + tx = (x * ppd - y * ppb) * id - px; ty = (y * ppa - x * ppc) * id - py; + x = child->worldX - pp->worldX; + y = child->worldY - pp->worldY; + dx = (x * ppd - y * ppb) * id - px; dy = (y * ppa - x * ppc) * id - py; + l1 = SQRT(dx * dx + dy * dy); l2 = child->data->length * csx; + outer: + if (u) { + float cosine, a, o; + l2 *= psx; + cosine = (tx * tx + ty * ty - l1 * l1 - l2 * l2) / (2 * l1 * l2); + if (cosine < -1) + cosine = -1; + else if (cosine > 1) cosine = 1; + a2 = ACOS(cosine) * bendDir; + a = l1 + l2 * cosine, o = l2 * SIN(a2); + a1 = ATAN2(ty * a - tx * o, tx * a + ty * o); + } else { + float minAngle, minDist, minX, minY, maxAngle, maxDist, maxX, maxY, angle; + float a = psx * l2, b = psy * l2, ta = ATAN2(ty, tx); + float aa = a * a, bb = b * b, ll = l1 * l1, dd = tx * tx + ty * ty; + float c0 = bb * ll + aa * dd - aa * bb, c1 = -2 * bb * l1, c2 = bb - aa; + float d = c1 * c1 - 4 * c2 * c0; + if (d >= 0) { + float q = SQRT(d), r0, r, r1; + if (c1 < 0) q = -q; + q = -(c1 + q) / 2; + r0 = q / c2; r1 = c0 / q; + r = ABS(r0) < ABS(r1) ? r0 : r1; + if (r * r <= dd) { + y = SQRT(dd - r * r) * bendDir; + a1 = ta - ATAN2(y, r); + a2 = ATAN2(y / psy, (r - l1) / psx); + goto outer; + } + } + minAngle = 0; minDist = FLT_MAX; minX = 0; minY = 0; + maxAngle = 0; maxDist = 0; maxX = 0; maxY = 0; + x = l1 + a; + d = x * x; + if (d > maxDist) { + maxAngle = 0; + maxDist = d; + maxX = x; + } + x = l1 - a; + d = x * x; + if (d < minDist) { + minAngle = PI; + minDist = d; + minX = x; + } + angle = ACOS(-a * l1 / (aa - bb)); + x = a * COS(angle) + l1; + y = b * SIN(angle); + d = x * x + y * y; + if (d < minDist) { + minAngle = angle; + minDist = d; + minX = x; + minY = y; + } + if (d > maxDist) { + maxAngle = angle; + maxDist = d; + maxX = x; + maxY = y; + } + if (dd <= (minDist + maxDist) / 2) { + a1 = ta - ATAN2(minY * bendDir, minX); + a2 = minAngle * bendDir; + } else { + a1 = ta - ATAN2(maxY * bendDir, maxX); + a2 = maxAngle * bendDir; + } + } + os = ATAN2(cy, cx) * s2; + a1 = (a1 - os) * RAD_DEG + os1; + a2 = ((a2 + os) * RAD_DEG - child->shearX) * s2 + os2; + if (a1 > 180) + a1 -= 360; + else if (a1 < -180) a1 += 360; + if (a2 > 180) + a2 -= 360; + else if (a2 < -180) a2 += 360; + + rotation = parent->rotation; + spBone_updateWorldTransformWith(parent, px, py, rotation + (a1 - rotation) * alpha, parent->appliedScaleX, + parent->appliedScaleY, 0, 0); + rotation = child->rotation; + spBone_updateWorldTransformWith(child, cx, cy, rotation + (a2 - rotation) * alpha, child->appliedScaleX, + child->appliedScaleY, child->shearX, child->shearY); } diff --git a/spine-c/src/spine/Skeleton.c b/spine-c/src/spine/Skeleton.c index 010e81dd5..2c6807eb0 100644 --- a/spine-c/src/spine/Skeleton.c +++ b/spine-c/src/spine/Skeleton.c @@ -169,8 +169,7 @@ void spSkeleton_updateCache (const spSkeleton* self) { for (i = 0; i < self->transformConstraintsCount; ++i) { spTransformConstraint* transformConstraint = self->transformConstraints[i]; for (ii = internal->updateCacheCount - 1; ii >= 0; --ii) { - void* object = internal->updateCache[ii].object; - if (object == transformConstraint->bone || object == transformConstraint->target) { + if (internal->updateCache[ii].object == transformConstraint->bone) { int insertIndex = ii + 1; update = internal->updateCache + insertIndex; memmove(update + 1, update, (internal->updateCacheCount - insertIndex) * sizeof(_spUpdate)); @@ -220,10 +219,12 @@ void spSkeleton_setBonesToSetupPose (const spSkeleton* self) { } for (i = 0; i < self->transformConstraintsCount; ++i) { - spTransformConstraint* transformConstraint = self->transformConstraints[i]; - transformConstraint->translateMix = transformConstraint->data->translateMix; - transformConstraint->x = transformConstraint->data->x; - transformConstraint->y = transformConstraint->data->y; + spTransformConstraint* constraint = self->transformConstraints[i]; + spTransformConstraintData* data = constraint->data; + constraint->rotateMix = data->rotateMix; + constraint->translateMix = data->translateMix; + constraint->scaleMix = data->scaleMix; + constraint->shearMix = data->shearMix; } } diff --git a/spine-c/src/spine/SkeletonJson.c b/spine-c/src/spine/SkeletonJson.c index d8a5d10e2..2537c66c6 100644 --- a/spine-c/src/spine/SkeletonJson.c +++ b/spine-c/src/spine/SkeletonJson.c @@ -148,10 +148,11 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r Json* bones = Json_getItem(root, "bones"); Json* slots = Json_getItem(root, "slots"); Json* ik = Json_getItem(root, "ik"); + Json* transform = Json_getItem(root, "transform"); Json* ffd = Json_getItem(root, "ffd"); Json* drawOrder = Json_getItem(root, "drawOrder"); Json* events = Json_getItem(root, "events"); - Json *boneMap, *slotMap, *ikMap, *ffdMap; + Json *boneMap, *slotMap, *constraintMap, *ffdMap; if (!drawOrder) drawOrder = Json_getItem(root, "draworder"); for (boneMap = bones ? bones->child : 0; boneMap; boneMap = boneMap->next) @@ -238,10 +239,15 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r } else { int isScale = strcmp(timelineArray->name, "scale") == 0; - if (isScale || strcmp(timelineArray->name, "translate") == 0) { - float scale = isScale ? 1 : self->scale; - spTranslateTimeline *timeline = - isScale ? spScaleTimeline_create(timelineArray->size) : spTranslateTimeline_create(timelineArray->size); + int isTranslate = strcmp(timelineArray->name, "translate") == 0; + int isShear = strcmp(timelineArray->name, "shear") == 0; + if (isScale || isTranslate || isShear) { + float scale = isTranslate ? self->scale: 1; + spTranslateTimeline *timeline = 0; + if (isScale) timeline = spScaleTimeline_create(timelineArray->size); + else if (isTranslate) timeline = spTranslateTimeline_create(timelineArray->size); + else if (isShear) timeline = spShearTimeline_create(timelineArray->size); + timeline->boneIndex = boneIndex; for (frame = timelineArray->child, i = 0; frame; frame = frame->next, ++i) { spTranslateTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), Json_getFloat(frame, "x", 0) * scale, @@ -261,23 +267,43 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r } } - /* IK timelines. */ - for (ikMap = ik ? ik->child : 0; ikMap; ikMap = ikMap->next) { - spIkConstraintData* ikConstraint = spSkeletonData_findIkConstraint(skeletonData, ikMap->name); - spIkConstraintTimeline* timeline = spIkConstraintTimeline_create(ikMap->size); + /* IK constraint timelines. */ + for (constraintMap = ik ? ik->child : 0; constraintMap; constraintMap = constraintMap->next) { + spIkConstraintData* constraint = spSkeletonData_findIkConstraint(skeletonData, constraintMap->name); + spIkConstraintTimeline* timeline = spIkConstraintTimeline_create(constraintMap->size); for (i = 0; i < skeletonData->ikConstraintsCount; ++i) { - if (ikConstraint == skeletonData->ikConstraints[i]) { + if (constraint == skeletonData->ikConstraints[i]) { timeline->ikConstraintIndex = i; break; } } - for (frame = ikMap->child, i = 0; frame; frame = frame->next, ++i) { - spIkConstraintTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), Json_getFloat(frame, "mix", 0), + for (frame = constraintMap->child, i = 0; frame; frame = frame->next, ++i) { + spIkConstraintTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), Json_getFloat(frame, "mix", 1), Json_getInt(frame, "bendPositive", 1) ? 1 : -1); readCurve(SUPER(timeline), i, frame); } animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); - duration = timeline->frames[ikMap->size * 3 - 3]; + duration = timeline->frames[constraintMap->size * 3 - 3]; + if (duration > animation->duration) animation->duration = duration; + } + + /* Transform constraint timelines. */ + for (constraintMap = transform ? transform->child : 0; constraintMap; constraintMap = constraintMap->next) { + spTransformConstraintData* constraint = spSkeletonData_findTransformConstraint(skeletonData, constraintMap->name); + spTransformConstraintTimeline* timeline = spTransformConstraintTimeline_create(constraintMap->size); + for (i = 0; i < skeletonData->transformConstraintsCount; ++i) { + if (constraint == skeletonData->transformConstraints[i]) { + timeline->transformConstraintIndex = i; + break; + } + } + for (frame = constraintMap->child, i = 0; frame; frame = frame->next, ++i) { + spTransformConstraintTimeline_setFrame(timeline, i, Json_getFloat(frame, "time", 0), Json_getFloat(frame, "rotateMix", 1), + Json_getFloat(frame, "translateMix", 1), Json_getFloat(frame, "scaleMix", 1), Json_getFloat(frame, "shearMix", 1)); + readCurve(SUPER(timeline), i, frame); + } + animation->timelines[animation->timelinesCount++] = SUPER_CAST(spTimeline, timeline); + duration = timeline->frames[constraintMap->size * 5 - 5]; if (duration > animation->duration) animation->duration = duration; } @@ -491,6 +517,8 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha boneData->rotation = Json_getFloat(boneMap, "rotation", 0); boneData->scaleX = Json_getFloat(boneMap, "scaleX", 1); boneData->scaleY = Json_getFloat(boneMap, "scaleY", 1); + boneData->shearX = Json_getFloat(boneMap, "shearX", 0); + boneData->shearY = Json_getFloat(boneMap, "shearY", 0); boneData->inheritScale = Json_getInt(boneMap, "inheritScale", 1); boneData->inheritRotation = Json_getInt(boneMap, "inheritRotation", 1); @@ -562,9 +590,16 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha return 0; } + transformConstraintData->offsetRotation = Json_getFloat(transformMap, "rotation", 0); + transformConstraintData->offsetX = Json_getFloat(transformMap, "x", 0) * self->scale; + transformConstraintData->offsetY = Json_getFloat(transformMap, "y", 0) * self->scale; + transformConstraintData->offsetScaleX = Json_getFloat(transformMap, "scaleX", 0) * self->scale; + transformConstraintData->offsetScaleY = Json_getFloat(transformMap, "scaleY", 0) * self->scale; + transformConstraintData->offsetShearY = Json_getFloat(transformMap, "shearY", 0) * self->scale; + transformConstraintData->rotateMix = Json_getFloat(transformMap, "rotateMix", 1); transformConstraintData->translateMix = Json_getFloat(transformMap, "translateMix", 1); - transformConstraintData->x = Json_getFloat(transformMap, "x", 0) * self->scale; - transformConstraintData->y = Json_getFloat(transformMap, "y", 0) * self->scale; + transformConstraintData->scaleMix = Json_getFloat(transformMap, "scaleMix", 1); + transformConstraintData->shearMix = Json_getFloat(transformMap, "shearMix", 1); skeletonData->transformConstraints[i] = transformConstraintData; } diff --git a/spine-c/src/spine/TransformConstraint.c b/spine-c/src/spine/TransformConstraint.c index 15da3e6b2..9cf88271d 100644 --- a/spine-c/src/spine/TransformConstraint.c +++ b/spine-c/src/spine/TransformConstraint.c @@ -37,8 +37,11 @@ spTransformConstraint* spTransformConstraint_create (spTransformConstraintData* spTransformConstraint* self = NEW(spTransformConstraint); CONST_CAST(spTransformConstraintData*, self->data) = data; self->translateMix = data->translateMix; - self->x = data->x; - self->y = data->y; + self->rotateMix = data->rotateMix; + self->scaleMix = data->scaleMix; + self->shearMix = data->shearMix; + self->offsetX = data->offsetX; + self->offsetY = data->offsetY; self->bone = spSkeleton_findBone(skeleton, self->data->bone->name); self->target = spSkeleton_findBone(skeleton, self->data->target->name); return self; @@ -49,10 +52,55 @@ void spTransformConstraint_dispose (spTransformConstraint* self) { } void spTransformConstraint_apply (spTransformConstraint* self) { + spBone* bone = self->bone; + spBone* target = self->target; + + if (self->rotateMix > 0) { + float cosine, sine; + float a = bone->a, b = bone->b, c = bone->c, d = bone->d; + float r = atan2(target->c, target->a) - atan2(c, a) + self->offsetRotation * DEG_RAD; + if (r > PI) + r -= PI2; + else if (r < -PI) r += PI2; + r *= self->rotateMix; + cosine = COS(r); sine = SIN(r); + CONST_CAST(float, bone->a) = cosine * a - sine * c; + CONST_CAST(float, bone->b) = cosine * b - sine * d; + CONST_CAST(float, bone->c) = sine * a + cosine * c; + CONST_CAST(float, bone->d) = sine * b + cosine * d; + } + + if (self->scaleMix > 0) { + float bs = (float)SQRT(bone->a * bone->a + bone->c * bone->c); + float ts = (float)SQRT(target->a * target->a + target->c * target->c); + float s = bs > 0.00001f ? (bs + (ts - bs + self->offsetScaleX) * self->scaleMix) / bs : 0; + CONST_CAST(float, bone->a) *= s; + CONST_CAST(float, bone->c) *= s; + bs = (float)SQRT(bone->b * bone->b + bone->d * bone->d); + ts = (float)SQRT(target->b * target->b + target->d * target->d); + s = bs > 0.00001f ? (bs + (ts - bs + self->offsetScaleY) * self->scaleMix) / bs : 0; + CONST_CAST(float, bone->b) *= s; + CONST_CAST(float, bone->d) *= s; + } + + if (self->shearMix > 0) { + float b = bone->b, d = bone->d; + float by = atan2(d, b); + float r = atan2(target->d, target->b) - atan2(target->c, target->a) - (by - atan2(bone->c, bone->a)); + float s; + if (r > PI) + r -= PI2; + else if (r < -PI) r += PI2; + r = by + (r + self->offsetShearY * DEG_RAD) * self->shearMix; + s = (float)SQRT(b * b + d * d); + CONST_CAST(float, bone->b) = COS(r) * s; + CONST_CAST(float, bone->d) = SIN(r) * s; + } + if (self->translateMix > 0) { float tx, ty; - spBone_localToWorld(self->target, self->x, self->y, &tx, &ty); - CONST_CAST(float, self->bone->worldX) = self->bone->worldX + (tx - self->bone->worldX) * self->translateMix; - CONST_CAST(float, self->bone->worldY) = self->bone->worldY + (ty - self->bone->worldY) * self->translateMix; + spBone_localToWorld(self->target, self->offsetX, self->offsetY, &tx, &ty); + CONST_CAST(float, self->bone->worldX) += (tx - self->bone->worldX) * self->translateMix; + CONST_CAST(float, self->bone->worldY) += (ty - self->bone->worldY) * self->translateMix; } } diff --git a/spine-cocos2d-iphone/2/README.md b/spine-cocos2d-iphone/2/README.md deleted file mode 100644 index 22de93123..000000000 --- a/spine-cocos2d-iphone/2/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# spine-cocos2d-iphone v2 - -The spine-cocos2d-iphone runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [cocos2d-iphone](http://www.cocos2d-iphone.org/). spine-cocos2d-iphone is based on [spine-c](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-c). - -## Licensing - -This Spine Runtime may only be used for personal or internal use, typically to evaluate Spine before purchasing. If you would like to incorporate a Spine Runtime into your applications, distribute software containing a Spine Runtime, or modify a Spine Runtime, then you will need a valid [Spine license](https://esotericsoftware.com/spine-purchase). Please see the [Spine Runtimes Software License](https://github.com/EsotericSoftware/spine-runtimes/blob/master/LICENSE) for detailed information. - -The Spine Runtimes are developed with the intent to be used with data exported from Spine. By purchasing Spine, `Section 2` of the [Spine Software License](https://esotericsoftware.com/files/license.txt) grants the right to create and distribute derivative works of the Spine Runtimes. - -## Spine version - -spine-cocos2d-iphone v2 works with data exported from Spine 3.1.08. Updating spine-cocos2d-iphone v2 to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. - -spine-cocos2d-iphone v2 supports all Spine features. - -spine-cocos2d-iphone v2 does not yet support loading the binary format. - -## Setup - -1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip). -1. Place the contents of a cocos2d version 2.1.0 distribution into the `spine-cocos2d-iphone/2/cocos2d` directory. -1. Open the XCode project file for iOS or Mac from the `spine-cocos2d-iphone/2` directory. - -Alternatively, the contents of the `spine-c/src`, `spine-c/include` and `spine-cocos2d-iphone/2/src` directories can be copied into your project. Be sure your header search path will find the contents of the `spine-c/include` and `spine-cocos2d-iphone/2/src` directories. Note that the includes use `spine/Xxx.h`, so the `spine` directory cannot be omitted when copying the files. - -## Examples - -[Spineboy](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2d-iphone/2/example/SpineboyExample.m) -[Golbins](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2d-iphone/2/example/GoblinsExample.m) - -## Links - -[podspec](https://github.com/ldomaradzki/spine-runtimes/blob/master/Spine-Cocos2d-iPhone.podspec) (maintained externally) diff --git a/spine-cocos2d-iphone/2/Resources-ios/AppDelegate.h b/spine-cocos2d-iphone/2/Resources-ios/AppDelegate.h deleted file mode 100644 index 3a65b197a..000000000 --- a/spine-cocos2d-iphone/2/Resources-ios/AppDelegate.h +++ /dev/null @@ -1,20 +0,0 @@ - -#import -#import "cocos2d.h" - -// Added only for iOS 6 support -@interface MyNavigationController : UINavigationController -@end - -@interface AppController : NSObject { - UIWindow *window_; - MyNavigationController *navController_; - - CCDirectorIOS *director_; // weak ref -} - -@property (nonatomic, retain) UIWindow *window; -@property (readonly) MyNavigationController *navController; -@property (readonly) CCDirectorIOS *director; - -@end diff --git a/spine-cocos2d-iphone/2/Resources-ios/AppDelegate.m b/spine-cocos2d-iphone/2/Resources-ios/AppDelegate.m deleted file mode 100644 index 1240f840b..000000000 --- a/spine-cocos2d-iphone/2/Resources-ios/AppDelegate.m +++ /dev/null @@ -1,162 +0,0 @@ - -#import "cocos2d.h" -#import "AppDelegate.h" -#import "SpineboyExample.h" - -@implementation MyNavigationController - -// The available orientations should be defined in the Info.plist file. -// And in iOS 6+ only, you can override it in the Root View controller in the "supportedInterfaceOrientations" method. -// Only valid for iOS 6+. NOT VALID for iOS 4 / 5. --(NSUInteger)supportedInterfaceOrientations { - // iPhone only - if( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone ) - return UIInterfaceOrientationMaskLandscape; - - // iPad only - return UIInterfaceOrientationMaskLandscape; -} - -// Supported orientations. Customize it for your own needs -// Only valid on iOS 4 / 5. NOT VALID for iOS 6. -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { - // iPhone only - if( [[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone ) - return UIInterfaceOrientationIsLandscape(interfaceOrientation); - - // iPad only - // iPhone only - return UIInterfaceOrientationIsLandscape(interfaceOrientation); -} - -// This is needed for iOS4 and iOS5 in order to ensure -// that the 1st scene has the correct dimensions -// This is not needed on iOS6 and could be added to the application:didFinish... --(void) directorDidReshapeProjection:(CCDirector*)director { - if(director.runningScene == nil) { - // Add the first scene to the stack. The director will draw it immediately into the framebuffer. (Animation is started automatically when the view is displayed.) - // and add the scene to the stack. The director will run it when it automatically when the view is displayed. - [director runWithScene: [SpineboyExample scene]]; - } -} -@end - - -@implementation AppController - -@synthesize window=window_, navController=navController_, director=director_; - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // Create the main window - window_ = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - - // Create an CCGLView with a RGB565 color buffer, and a depth buffer of 0-bits - CCGLView *glView = [CCGLView viewWithFrame:[window_ bounds] - pixelFormat:kEAGLColorFormatRGB565 //kEAGLColorFormatRGBA8 - depthFormat:0 //GL_DEPTH_COMPONENT24_OES - preserveBackbuffer:NO - sharegroup:nil - multiSampling:NO - numberOfSamples:0]; - - director_ = (CCDirectorIOS*) [CCDirector sharedDirector]; - - director_.wantsFullScreenLayout = YES; - - // Display FSP and SPF - [director_ setDisplayStats:YES]; - - // set FPS at 60 - [director_ setAnimationInterval:1.0/60]; - - // attach the openglView to the director - [director_ setView:glView]; - - // 2D projection - [director_ setProjection:kCCDirectorProjection2D]; - // [director setProjection:kCCDirectorProjection3D]; - - // Enables High Res mode (Retina Display) on iPhone 4 and maintains low res on all other devices - if( ! [director_ enableRetinaDisplay:YES] ) - CCLOG(@"Retina Display Not supported"); - - // Default texture format for PNG/BMP/TIFF/JPEG/GIF images - // It can be RGBA8888, RGBA4444, RGB5_A1, RGB565 - // You can change this setting at any time. - [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA8888]; - - // If the 1st suffix is not found and if fallback is enabled then fallback suffixes are going to searched. If none is found, it will try with the name without suffix. - // On iPad HD : "-ipadhd", "-ipad", "-hd" - // On iPad : "-ipad", "-hd" - // On iPhone HD: "-hd" - CCFileUtils *sharedFileUtils = [CCFileUtils sharedFileUtils]; - [sharedFileUtils setEnableFallbackSuffixes:NO]; // Default: NO. No fallback suffixes are going to be used - [sharedFileUtils setiPhoneRetinaDisplaySuffix:@"-hd"]; // Default on iPhone RetinaDisplay is "-hd" - [sharedFileUtils setiPadSuffix:@"-ipad"]; // Default on iPad is "ipad" - [sharedFileUtils setiPadRetinaDisplaySuffix:@"-ipadhd"]; // Default on iPad RetinaDisplay is "-ipadhd" - - // Assume that PVR images have premultiplied alpha - [CCTexture2D PVRImagesHavePremultipliedAlpha:YES]; - - // Create a Navigation Controller with the Director - navController_ = [[MyNavigationController alloc] initWithRootViewController:director_]; - navController_.navigationBarHidden = YES; - - // for rotation and other messages - [director_ setDelegate:navController_]; - - // set the Navigation Controller as the root view controller - [window_ setRootViewController:navController_]; - - // make main window visible - [window_ makeKeyAndVisible]; - - return YES; -} - -// getting a call, pause the game --(void) applicationWillResignActive:(UIApplication *)application { - if( [navController_ visibleViewController] == director_ ) - [director_ pause]; -} - -// call got rejected --(void) applicationDidBecomeActive:(UIApplication *)application { - [[CCDirector sharedDirector] setNextDeltaTimeZero:YES]; - if( [navController_ visibleViewController] == director_ ) - [director_ resume]; -} - --(void) applicationDidEnterBackground:(UIApplication*)application { - if( [navController_ visibleViewController] == director_ ) - [director_ stopAnimation]; -} - --(void) applicationWillEnterForeground:(UIApplication*)application { - if( [navController_ visibleViewController] == director_ ) - [director_ startAnimation]; -} - -// application will be killed -- (void)applicationWillTerminate:(UIApplication *)application { - CC_DIRECTOR_END(); -} - -// purge memory -- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application -{ - [[CCDirector sharedDirector] purgeCachedData]; -} - -// next delta time will be zero --(void) applicationSignificantTimeChange:(UIApplication *)application { - [[CCDirector sharedDirector] setNextDeltaTimeZero:YES]; -} - -- (void) dealloc { - [window_ release]; - [navController_ release]; - - [super dealloc]; -} -@end diff --git a/spine-cocos2d-iphone/2/Resources-ios/main.m b/spine-cocos2d-iphone/2/Resources-ios/main.m deleted file mode 100644 index e4c2d8ba5..000000000 --- a/spine-cocos2d-iphone/2/Resources-ios/main.m +++ /dev/null @@ -1,9 +0,0 @@ - -#import - -int main(int argc, char *argv[]) { - NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; - int retVal = UIApplicationMain(argc, argv, nil, @"AppController"); - [pool release]; - return retVal; -} diff --git a/spine-cocos2d-iphone/2/Resources-mac/AppDelegate.h b/spine-cocos2d-iphone/2/Resources-mac/AppDelegate.h deleted file mode 100644 index 38e4cf97a..000000000 --- a/spine-cocos2d-iphone/2/Resources-mac/AppDelegate.h +++ /dev/null @@ -1,14 +0,0 @@ - -#import "cocos2d.h" - -@interface spine_cocos2d_iphoneAppDelegate : NSObject { - NSWindow *window_; - CCGLView *glView_; -} - -@property (assign) IBOutlet NSWindow *window; -@property (assign) IBOutlet CCGLView *glView; - -- (IBAction)toggleFullScreen:(id)sender; - -@end diff --git a/spine-cocos2d-iphone/2/Resources-mac/AppDelegate.m b/spine-cocos2d-iphone/2/Resources-mac/AppDelegate.m deleted file mode 100644 index 70f963e66..000000000 --- a/spine-cocos2d-iphone/2/Resources-mac/AppDelegate.m +++ /dev/null @@ -1,38 +0,0 @@ - -#import "AppDelegate.h" -#import "SpineboyExample.h" - -@implementation spine_cocos2d_iphoneAppDelegate -@synthesize window=window_, glView=glView_; - -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - CCDirectorMac *director = (CCDirectorMac*)[CCDirector sharedDirector]; - - [director setDisplayStats:YES]; - [director setView:glView_]; - [director setResizeMode:kCCDirectorResize_AutoScale]; - - [window_ setAcceptsMouseMovedEvents:NO]; - [window_ center]; - - [director runWithScene:[SpineboyExample scene]]; -} - -- (BOOL) applicationShouldTerminateAfterLastWindowClosed: (NSApplication *) theApplication { - return YES; -} - -- (void)dealloc { - [[CCDirector sharedDirector] end]; - [window_ release]; - [super dealloc]; -} - -#pragma mark AppDelegate - IBActions - -- (IBAction)toggleFullScreen: (id)sender { - CCDirectorMac *director = (CCDirectorMac*) [CCDirector sharedDirector]; - [director setFullScreen:![director isFullScreen]]; -} - -@end diff --git a/spine-cocos2d-iphone/2/cocos2d/Place cocos2d here.txt b/spine-cocos2d-iphone/2/cocos2d/Place cocos2d here.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/spine-cocos2d-iphone/2/example/GoblinsExample.h b/spine-cocos2d-iphone/2/example/GoblinsExample.h deleted file mode 100644 index a84084722..000000000 --- a/spine-cocos2d-iphone/2/example/GoblinsExample.h +++ /dev/null @@ -1,41 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import "cocos2d.h" -#import - -@interface GoblinsExample : CCLayerColor { - SkeletonAnimation* skeletonNode; -} - -+ (CCScene*) scene; - -@end diff --git a/spine-cocos2d-iphone/2/example/GoblinsExample.m b/spine-cocos2d-iphone/2/example/GoblinsExample.m deleted file mode 100644 index eff7ab266..000000000 --- a/spine-cocos2d-iphone/2/example/GoblinsExample.m +++ /dev/null @@ -1,80 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import "GoblinsExample.h" -#import "SpineboyExample.h" - -@implementation GoblinsExample - -+ (CCScene*) scene { - CCScene *scene = [CCScene node]; - [scene addChild:[GoblinsExample node]]; - return scene; -} - --(id) init { - self = [super initWithColor:ccc4(128, 128, 128, 255)]; - if (!self) return nil; - - skeletonNode = [SkeletonAnimation skeletonWithFile:@"goblins-mesh.json" atlasFile:@"goblins-mesh.atlas" scale:1]; - [skeletonNode setSkin:@"goblin"]; - [skeletonNode setAnimationForTrack:0 name:@"walk" loop:YES]; - - CGSize windowSize = [[CCDirector sharedDirector] winSize]; - [skeletonNode setPosition:ccp(windowSize.width / 2, 20)]; - [self addChild:skeletonNode]; - -#if __CC_PLATFORM_MAC - [self setMouseEnabled:YES]; -#else - [self setTouchEnabled:YES]; -#endif - - return self; -} - -#if __CC_PLATFORM_MAC -- (BOOL) ccMouseDown:(NSEvent*)event { -#else -- (void) ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { -#endif - if (!skeletonNode.debugBones) - skeletonNode.debugBones = true; - else if (skeletonNode.timeScale == 1) - skeletonNode.timeScale = 0.3f; - else - [[CCDirector sharedDirector] replaceScene:[SpineboyExample scene]]; -#if __CC_PLATFORM_MAC - return YES; -#endif -} - -@end diff --git a/spine-cocos2d-iphone/2/example/SpineboyExample.h b/spine-cocos2d-iphone/2/example/SpineboyExample.h deleted file mode 100644 index e0d9aeb08..000000000 --- a/spine-cocos2d-iphone/2/example/SpineboyExample.h +++ /dev/null @@ -1,41 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import "cocos2d.h" -#import - -@interface SpineboyExample : CCLayerColor { - SkeletonAnimation* skeletonNode; -} - -+ (CCScene*) scene; - -@end diff --git a/spine-cocos2d-iphone/2/example/SpineboyExample.m b/spine-cocos2d-iphone/2/example/SpineboyExample.m deleted file mode 100644 index cb395d1ca..000000000 --- a/spine-cocos2d-iphone/2/example/SpineboyExample.m +++ /dev/null @@ -1,105 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import "SpineboyExample.h" -#import "GoblinsExample.h" - -@implementation SpineboyExample - -+ (CCScene*) scene { - CCScene *scene = [CCScene node]; - [scene addChild:[SpineboyExample node]]; - return scene; -} - --(id) init { - self = [super initWithColor:ccc4(128, 128, 128, 255)]; - if (!self) return nil; - - skeletonNode = [SkeletonAnimation skeletonWithFile:@"spineboy.json" atlasFile:@"spineboy.atlas" scale:0.6]; - [skeletonNode setMixFrom:@"walk" to:@"jump" duration:0.2f]; - [skeletonNode setMixFrom:@"jump" to:@"run" duration:0.2f]; - - skeletonNode.startListener = ^(int trackIndex) { - spTrackEntry* entry = spAnimationState_getCurrent(skeletonNode.state, trackIndex); - const char* animationName = (entry && entry->animation) ? entry->animation->name : 0; - CCLOG(@"%d start: %s", trackIndex, animationName); - }; - skeletonNode.endListener = ^(int trackIndex) { - CCLOG(@"%d end", trackIndex); - }; - skeletonNode.completeListener = ^(int trackIndex, int loopCount) { - CCLOG(@"%d complete: %d", trackIndex, loopCount); - }; - skeletonNode.eventListener = ^(int trackIndex, spEvent* event) { - CCLOG(@"%d event: %s, %d, %f, %s", trackIndex, event->data->name, event->intValue, event->floatValue, event->stringValue); - }; - - [skeletonNode setAnimationForTrack:0 name:@"walk" loop:YES]; - spTrackEntry* jumpEntry = [skeletonNode addAnimationForTrack:0 name:@"jump" loop:NO afterDelay:3]; - [skeletonNode addAnimationForTrack:0 name:@"run" loop:YES afterDelay:0]; - - [skeletonNode setListenerForEntry:jumpEntry onStart:^(int trackIndex) { - CCLOG(@"jumped!"); - }]; - - // [skeletonNode setAnimationForTrack:1 name:@"test" loop:YES]; - - CGSize windowSize = [[CCDirector sharedDirector] winSize]; - [skeletonNode setPosition:ccp(windowSize.width / 2, 20)]; - [self addChild:skeletonNode]; - -#if __CC_PLATFORM_MAC - [self setMouseEnabled:YES]; -#else - [self setTouchEnabled:YES]; -#endif - - return self; -} - -#if __CC_PLATFORM_MAC -- (BOOL) ccMouseDown:(NSEvent*)event { -#else -- (void) ccTouchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { -#endif - if (!skeletonNode.debugBones) - skeletonNode.debugBones = true; - else if (skeletonNode.timeScale == 1) - skeletonNode.timeScale = 0.3f; - else - [[CCDirector sharedDirector] replaceScene:[GoblinsExample scene]]; -#if __CC_PLATFORM_MAC - return YES; -#endif -} - -@end diff --git a/spine-cocos2d-iphone/2/spine-cocos2d-iphone-ios.xcodeproj/project.pbxproj b/spine-cocos2d-iphone/2/spine-cocos2d-iphone-ios.xcodeproj/project.pbxproj deleted file mode 100644 index db0cefe62..000000000 --- a/spine-cocos2d-iphone/2/spine-cocos2d-iphone-ios.xcodeproj/project.pbxproj +++ /dev/null @@ -1,831 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 4327E30419E9879C007E7FB7 /* IkConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 4327E30219E9879C007E7FB7 /* IkConstraint.c */; }; - 4327E30519E9879C007E7FB7 /* IkConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 4327E30319E9879C007E7FB7 /* IkConstraintData.c */; }; - 4327E30619E98913007E7FB7 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 652107951895250000B1FF07 /* CoreText.framework */; }; - 4327E30919E98977007E7FB7 /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4327E30819E98977007E7FB7 /* GLKit.framework */; }; - 4327E30A19E989A3007E7FB7 /* libcocos2d_chipmunk.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 434D47E6192A246B003127B5 /* libcocos2d_chipmunk.a */; }; - 4327E30B19E98A32007E7FB7 /* libChipmunk.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 434D47E0192A246B003127B5 /* libChipmunk.a */; }; - 43C3282F170B0C19004A9460 /* spine-cocos2d-iphone.m in Sources */ = {isa = PBXBuildFile; fileRef = 43C3282D170B0C19004A9460 /* spine-cocos2d-iphone.m */; }; - 43C3286C170B0DA6004A9460 /* spineboy.json in Resources */ = {isa = PBXBuildFile; fileRef = 43C32868170B0DA6004A9460 /* spineboy.json */; }; - 43C3286E170B0DA6004A9460 /* spineboy.atlas in Resources */ = {isa = PBXBuildFile; fileRef = 43C3286A170B0DA6004A9460 /* spineboy.atlas */; }; - 43C3286F170B0DA6004A9460 /* spineboy.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C3286B170B0DA6004A9460 /* spineboy.png */; }; - 43C3287D170B0DBE004A9460 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C32871170B0DBE004A9460 /* Default-568h@2x.png */; }; - 43C3287E170B0DBE004A9460 /* Default-Landscape~ipad.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C32872170B0DBE004A9460 /* Default-Landscape~ipad.png */; }; - 43C3287F170B0DBE004A9460 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C32873170B0DBE004A9460 /* Default.png */; }; - 43C32880170B0DBE004A9460 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C32874170B0DBE004A9460 /* Default@2x.png */; }; - 43C32881170B0DBE004A9460 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C32875170B0DBE004A9460 /* Icon-72.png */; }; - 43C32882170B0DBE004A9460 /* Icon-Small-50.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C32876170B0DBE004A9460 /* Icon-Small-50.png */; }; - 43C32883170B0DBE004A9460 /* Icon-Small.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C32877170B0DBE004A9460 /* Icon-Small.png */; }; - 43C32884170B0DBE004A9460 /* Icon-Small@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C32878170B0DBE004A9460 /* Icon-Small@2x.png */; }; - 43C32885170B0DBE004A9460 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C32879170B0DBE004A9460 /* Icon.png */; }; - 43C32886170B0DBE004A9460 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C3287A170B0DBE004A9460 /* Icon@2x.png */; }; - 43C32888170B0DBE004A9460 /* iTunesArtwork in Resources */ = {isa = PBXBuildFile; fileRef = 43C3287C170B0DBE004A9460 /* iTunesArtwork */; }; - 43C32A06170B0F93004A9460 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 43C32A05170B0F93004A9460 /* main.m */; }; - 43C32A09170B10FF004A9460 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 43C32A08170B10FF004A9460 /* AppDelegate.m */; }; - 43D73BD61C7352D100F73E38 /* TransformConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 43D73BD31C7352D100F73E38 /* TransformConstraint.c */; }; - 43D73BD71C7352D100F73E38 /* TransformConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43D73BD41C7352D100F73E38 /* TransformConstraintData.c */; }; - 43D73BD81C7352D100F73E38 /* WeightedMeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43D73BD51C7352D100F73E38 /* WeightedMeshAttachment.c */; }; - 43F7010F1927FBC700CA4038 /* goblins-mesh.atlas in Resources */ = {isa = PBXBuildFile; fileRef = 43F7010C1927FBC700CA4038 /* goblins-mesh.atlas */; }; - 43F701101927FBC700CA4038 /* goblins-mesh.json in Resources */ = {isa = PBXBuildFile; fileRef = 43F7010D1927FBC700CA4038 /* goblins-mesh.json */; }; - 43F701111927FBC700CA4038 /* goblins-mesh.png in Resources */ = {isa = PBXBuildFile; fileRef = 43F7010E1927FBC700CA4038 /* goblins-mesh.png */; }; - 43F7FF511927F91900CA4038 /* Animation.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF381927F91900CA4038 /* Animation.c */; }; - 43F7FF521927F91900CA4038 /* AnimationState.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF391927F91900CA4038 /* AnimationState.c */; }; - 43F7FF531927F91900CA4038 /* AnimationStateData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3A1927F91900CA4038 /* AnimationStateData.c */; }; - 43F7FF541927F91900CA4038 /* Atlas.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3B1927F91900CA4038 /* Atlas.c */; }; - 43F7FF551927F91900CA4038 /* AtlasAttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3C1927F91900CA4038 /* AtlasAttachmentLoader.c */; }; - 43F7FF561927F91900CA4038 /* Attachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3D1927F91900CA4038 /* Attachment.c */; }; - 43F7FF571927F91900CA4038 /* AttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3E1927F91900CA4038 /* AttachmentLoader.c */; }; - 43F7FF581927F91900CA4038 /* Bone.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF3F1927F91900CA4038 /* Bone.c */; }; - 43F7FF591927F91900CA4038 /* BoneData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF401927F91900CA4038 /* BoneData.c */; }; - 43F7FF5A1927F91900CA4038 /* BoundingBoxAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF411927F91900CA4038 /* BoundingBoxAttachment.c */; }; - 43F7FF5B1927F91900CA4038 /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF421927F91900CA4038 /* Event.c */; }; - 43F7FF5C1927F91900CA4038 /* EventData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF431927F91900CA4038 /* EventData.c */; }; - 43F7FF5D1927F91900CA4038 /* extension.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF441927F91900CA4038 /* extension.c */; }; - 43F7FF5E1927F91900CA4038 /* Json.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF451927F91900CA4038 /* Json.c */; }; - 43F7FF5F1927F91900CA4038 /* MeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF471927F91900CA4038 /* MeshAttachment.c */; }; - 43F7FF601927F91900CA4038 /* RegionAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF481927F91900CA4038 /* RegionAttachment.c */; }; - 43F7FF611927F91900CA4038 /* Skeleton.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF491927F91900CA4038 /* Skeleton.c */; }; - 43F7FF621927F91900CA4038 /* SkeletonBounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4A1927F91900CA4038 /* SkeletonBounds.c */; }; - 43F7FF631927F91900CA4038 /* SkeletonData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4B1927F91900CA4038 /* SkeletonData.c */; }; - 43F7FF641927F91900CA4038 /* SkeletonJson.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4C1927F91900CA4038 /* SkeletonJson.c */; }; - 43F7FF651927F91900CA4038 /* Skin.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4D1927F91900CA4038 /* Skin.c */; }; - 43F7FF671927F91900CA4038 /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF4F1927F91900CA4038 /* Slot.c */; }; - 43F7FF681927F91900CA4038 /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF501927F91900CA4038 /* SlotData.c */; }; - 43F7FF871927F94800CA4038 /* PolygonBatch.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF821927F94800CA4038 /* PolygonBatch.m */; }; - 43F7FF881927F94800CA4038 /* SkeletonAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF841927F94800CA4038 /* SkeletonAnimation.m */; }; - 43F7FF891927F94800CA4038 /* SkeletonRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF861927F94800CA4038 /* SkeletonRenderer.m */; }; - 43F7FF8E1927F96700CA4038 /* GoblinsExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF8B1927F96700CA4038 /* GoblinsExample.m */; }; - 43F7FF8F1927F96700CA4038 /* SpineboyExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FF8D1927F96700CA4038 /* SpineboyExample.m */; }; - 9A5D2499170A94DA0030D4DD /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D2498170A94DA0030D4DD /* QuartzCore.framework */; }; - 9A5D249B170A94DA0030D4DD /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D249A170A94DA0030D4DD /* OpenGLES.framework */; }; - 9A5D249D170A94DA0030D4DD /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D249C170A94DA0030D4DD /* OpenAL.framework */; }; - 9A5D249F170A94DA0030D4DD /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D249E170A94DA0030D4DD /* AudioToolbox.framework */; }; - 9A5D24A1170A94DA0030D4DD /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D24A0170A94DA0030D4DD /* AVFoundation.framework */; }; - 9A5D24A3170A94DA0030D4DD /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D24A2170A94DA0030D4DD /* UIKit.framework */; }; - 9A5D24A5170A94DA0030D4DD /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D24A4170A94DA0030D4DD /* Foundation.framework */; }; - 9A5D24A7170A94DA0030D4DD /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D24A6170A94DA0030D4DD /* CoreGraphics.framework */; }; - 9A5D24A9170A94DA0030D4DD /* GameKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A5D24A8170A94DA0030D4DD /* GameKit.framework */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 434D47DB192A246B003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 509807081175041800EA7266; - remoteInfo = "build all libs"; - }; - 434D47DD192A246B003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 504225700FC0B39C00B992F7; - remoteInfo = box2d; - }; - 434D47DF192A246B003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 50B2C4D10E100AEA00AE9530; - remoteInfo = Chipmunk; - }; - 434D47E1192A246B003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 5018F24D0DFDEAC400C013A5; - remoteInfo = cocos2d; - }; - 434D47E3192A246B003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A0EFA7AC169CDF9C006D1B22; - remoteInfo = cocos2d_box2d; - }; - 434D47E5192A246B003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A0EFA886169CDFA4006D1B22; - remoteInfo = cocos2d_chipmunk; - }; - 434D47E7192A246B003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 502C65EE0DFEF3DD00E4107D; - remoteInfo = "cocos2d-documentation"; - }; - 434D47E9192A246B003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 50CB2FCA1004C8B100B7A750; - remoteInfo = CocosDenshion; - }; - 434D47EB192A246B003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A02900ED15B5FA9E00D64F82; - remoteInfo = CocosBuilderReader; - }; - 434D47ED192A246B003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A031B73915D9BD0800E1986C; - remoteInfo = jsbindings; - }; - 434D47EF192A246B003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A04A1FEB13B826B300ABAFB7; - remoteInfo = kazmath; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 4327E30019E9879C007E7FB7 /* IkConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraint.h; path = "../../spine-c/include/spine/IkConstraint.h"; sourceTree = ""; }; - 4327E30119E9879C007E7FB7 /* IkConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraintData.h; path = "../../spine-c/include/spine/IkConstraintData.h"; sourceTree = ""; }; - 4327E30219E9879C007E7FB7 /* IkConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraint.c; path = "../../spine-c/src/spine/IkConstraint.c"; sourceTree = ""; }; - 4327E30319E9879C007E7FB7 /* IkConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraintData.c; path = "../../spine-c/src/spine/IkConstraintData.c"; sourceTree = ""; }; - 4327E30819E98977007E7FB7 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; - 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "cocos2d-ios.xcodeproj"; path = "cocos2d/cocos2d-ios.xcodeproj"; sourceTree = SOURCE_ROOT; }; - 43C3282D170B0C19004A9460 /* spine-cocos2d-iphone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "spine-cocos2d-iphone.m"; path = "src/spine/spine-cocos2d-iphone.m"; sourceTree = ""; }; - 43C3282E170B0C19004A9460 /* spine-cocos2d-iphone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "spine-cocos2d-iphone.h"; path = "src/spine/spine-cocos2d-iphone.h"; sourceTree = ""; }; - 43C32868170B0DA6004A9460 /* spineboy.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = spineboy.json; path = Resources/spineboy.json; sourceTree = ""; }; - 43C3286A170B0DA6004A9460 /* spineboy.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = spineboy.atlas; path = Resources/spineboy.atlas; sourceTree = ""; }; - 43C3286B170B0DA6004A9460 /* spineboy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = spineboy.png; path = Resources/spineboy.png; sourceTree = ""; }; - 43C32871170B0DBE004A9460 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-568h@2x.png"; path = "Resources-ios/Default-568h@2x.png"; sourceTree = ""; }; - 43C32872170B0DBE004A9460 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape~ipad.png"; path = "Resources-ios/Default-Landscape~ipad.png"; sourceTree = ""; }; - 43C32873170B0DBE004A9460 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = "Resources-ios/Default.png"; sourceTree = ""; }; - 43C32874170B0DBE004A9460 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "Resources-ios/Default@2x.png"; sourceTree = ""; }; - 43C32875170B0DBE004A9460 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72.png"; path = "Resources-ios/Icon-72.png"; sourceTree = ""; }; - 43C32876170B0DBE004A9460 /* Icon-Small-50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small-50.png"; path = "Resources-ios/Icon-Small-50.png"; sourceTree = ""; }; - 43C32877170B0DBE004A9460 /* Icon-Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small.png"; path = "Resources-ios/Icon-Small.png"; sourceTree = ""; }; - 43C32878170B0DBE004A9460 /* Icon-Small@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small@2x.png"; path = "Resources-ios/Icon-Small@2x.png"; sourceTree = ""; }; - 43C32879170B0DBE004A9460 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = "Resources-ios/Icon.png"; sourceTree = ""; }; - 43C3287A170B0DBE004A9460 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "Resources-ios/Icon@2x.png"; sourceTree = ""; }; - 43C3287B170B0DBE004A9460 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Resources-ios/Info.plist"; sourceTree = ""; }; - 43C3287C170B0DBE004A9460 /* iTunesArtwork */ = {isa = PBXFileReference; lastKnownFileType = file; name = iTunesArtwork; path = "Resources-ios/iTunesArtwork"; sourceTree = ""; }; - 43C32889170B0E9F004A9460 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Prefix.pch; path = "Resources-ios/Prefix.pch"; sourceTree = ""; }; - 43C32A05170B0F93004A9460 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "Resources-ios/main.m"; sourceTree = ""; }; - 43C32A07170B10FF004A9460 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = "Resources-ios/AppDelegate.h"; sourceTree = ""; }; - 43C32A08170B10FF004A9460 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = "Resources-ios/AppDelegate.m"; sourceTree = ""; }; - 43D73BD31C7352D100F73E38 /* TransformConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraint.c; path = "../../spine-c/src/spine/TransformConstraint.c"; sourceTree = ""; }; - 43D73BD41C7352D100F73E38 /* TransformConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraintData.c; path = "../../spine-c/src/spine/TransformConstraintData.c"; sourceTree = ""; }; - 43D73BD51C7352D100F73E38 /* WeightedMeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = WeightedMeshAttachment.c; path = "../../spine-c/src/spine/WeightedMeshAttachment.c"; sourceTree = ""; }; - 43D73BD91C7352E200F73E38 /* TransformConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraint.h; path = "../../spine-c/include/spine/TransformConstraint.h"; sourceTree = ""; }; - 43D73BDA1C7352E200F73E38 /* TransformConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraintData.h; path = "../../spine-c/include/spine/TransformConstraintData.h"; sourceTree = ""; }; - 43D73BDB1C7352E200F73E38 /* WeightedMeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightedMeshAttachment.h; path = "../../spine-c/include/spine/WeightedMeshAttachment.h"; sourceTree = ""; }; - 43F7010C1927FBC700CA4038 /* goblins-mesh.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "goblins-mesh.atlas"; path = "Resources/goblins-mesh.atlas"; sourceTree = ""; }; - 43F7010D1927FBC700CA4038 /* goblins-mesh.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "goblins-mesh.json"; path = "Resources/goblins-mesh.json"; sourceTree = ""; }; - 43F7010E1927FBC700CA4038 /* goblins-mesh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "goblins-mesh.png"; path = "Resources/goblins-mesh.png"; sourceTree = ""; }; - 43F7FF381927F91900CA4038 /* Animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animation.c; path = "../../spine-c/src/spine/Animation.c"; sourceTree = ""; }; - 43F7FF391927F91900CA4038 /* AnimationState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationState.c; path = "../../spine-c/src/spine/AnimationState.c"; sourceTree = ""; }; - 43F7FF3A1927F91900CA4038 /* AnimationStateData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationStateData.c; path = "../../spine-c/src/spine/AnimationStateData.c"; sourceTree = ""; }; - 43F7FF3B1927F91900CA4038 /* Atlas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Atlas.c; path = "../../spine-c/src/spine/Atlas.c"; sourceTree = ""; }; - 43F7FF3C1927F91900CA4038 /* AtlasAttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AtlasAttachmentLoader.c; path = "../../spine-c/src/spine/AtlasAttachmentLoader.c"; sourceTree = ""; }; - 43F7FF3D1927F91900CA4038 /* Attachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Attachment.c; path = "../../spine-c/src/spine/Attachment.c"; sourceTree = ""; }; - 43F7FF3E1927F91900CA4038 /* AttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AttachmentLoader.c; path = "../../spine-c/src/spine/AttachmentLoader.c"; sourceTree = ""; }; - 43F7FF3F1927F91900CA4038 /* Bone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bone.c; path = "../../spine-c/src/spine/Bone.c"; sourceTree = ""; }; - 43F7FF401927F91900CA4038 /* BoneData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoneData.c; path = "../../spine-c/src/spine/BoneData.c"; sourceTree = ""; }; - 43F7FF411927F91900CA4038 /* BoundingBoxAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoundingBoxAttachment.c; path = "../../spine-c/src/spine/BoundingBoxAttachment.c"; sourceTree = ""; }; - 43F7FF421927F91900CA4038 /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../../spine-c/src/spine/Event.c"; sourceTree = ""; }; - 43F7FF431927F91900CA4038 /* EventData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EventData.c; path = "../../spine-c/src/spine/EventData.c"; sourceTree = ""; }; - 43F7FF441927F91900CA4038 /* extension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extension.c; path = "../../spine-c/src/spine/extension.c"; sourceTree = ""; }; - 43F7FF451927F91900CA4038 /* Json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Json.c; path = "../../spine-c/src/spine/Json.c"; sourceTree = ""; }; - 43F7FF461927F91900CA4038 /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Json.h; path = "../../spine-c/src/spine/Json.h"; sourceTree = ""; }; - 43F7FF471927F91900CA4038 /* MeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MeshAttachment.c; path = "../../spine-c/src/spine/MeshAttachment.c"; sourceTree = ""; }; - 43F7FF481927F91900CA4038 /* RegionAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = RegionAttachment.c; path = "../../spine-c/src/spine/RegionAttachment.c"; sourceTree = ""; }; - 43F7FF491927F91900CA4038 /* Skeleton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skeleton.c; path = "../../spine-c/src/spine/Skeleton.c"; sourceTree = ""; }; - 43F7FF4A1927F91900CA4038 /* SkeletonBounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonBounds.c; path = "../../spine-c/src/spine/SkeletonBounds.c"; sourceTree = ""; }; - 43F7FF4B1927F91900CA4038 /* SkeletonData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonData.c; path = "../../spine-c/src/spine/SkeletonData.c"; sourceTree = ""; }; - 43F7FF4C1927F91900CA4038 /* SkeletonJson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonJson.c; path = "../../spine-c/src/spine/SkeletonJson.c"; sourceTree = ""; }; - 43F7FF4D1927F91900CA4038 /* Skin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skin.c; path = "../../spine-c/src/spine/Skin.c"; sourceTree = ""; }; - 43F7FF4F1927F91900CA4038 /* Slot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Slot.c; path = "../../spine-c/src/spine/Slot.c"; sourceTree = ""; }; - 43F7FF501927F91900CA4038 /* SlotData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SlotData.c; path = "../../spine-c/src/spine/SlotData.c"; sourceTree = ""; }; - 43F7FF691927F92500CA4038 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = "../../spine-c/include/spine/Animation.h"; sourceTree = ""; }; - 43F7FF6A1927F92500CA4038 /* AnimationState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationState.h; path = "../../spine-c/include/spine/AnimationState.h"; sourceTree = ""; }; - 43F7FF6B1927F92500CA4038 /* AnimationStateData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationStateData.h; path = "../../spine-c/include/spine/AnimationStateData.h"; sourceTree = ""; }; - 43F7FF6C1927F92500CA4038 /* Atlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Atlas.h; path = "../../spine-c/include/spine/Atlas.h"; sourceTree = ""; }; - 43F7FF6D1927F92500CA4038 /* AtlasAttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AtlasAttachmentLoader.h; path = "../../spine-c/include/spine/AtlasAttachmentLoader.h"; sourceTree = ""; }; - 43F7FF6E1927F92500CA4038 /* Attachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Attachment.h; path = "../../spine-c/include/spine/Attachment.h"; sourceTree = ""; }; - 43F7FF6F1927F92500CA4038 /* AttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AttachmentLoader.h; path = "../../spine-c/include/spine/AttachmentLoader.h"; sourceTree = ""; }; - 43F7FF701927F92500CA4038 /* Bone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bone.h; path = "../../spine-c/include/spine/Bone.h"; sourceTree = ""; }; - 43F7FF711927F92500CA4038 /* BoneData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoneData.h; path = "../../spine-c/include/spine/BoneData.h"; sourceTree = ""; }; - 43F7FF721927F92500CA4038 /* BoundingBoxAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoundingBoxAttachment.h; path = "../../spine-c/include/spine/BoundingBoxAttachment.h"; sourceTree = ""; }; - 43F7FF731927F92500CA4038 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Event.h; path = "../../spine-c/include/spine/Event.h"; sourceTree = ""; }; - 43F7FF741927F92500CA4038 /* EventData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EventData.h; path = "../../spine-c/include/spine/EventData.h"; sourceTree = ""; }; - 43F7FF751927F92500CA4038 /* extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = extension.h; path = "../../spine-c/include/spine/extension.h"; sourceTree = ""; }; - 43F7FF761927F92500CA4038 /* MeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshAttachment.h; path = "../../spine-c/include/spine/MeshAttachment.h"; sourceTree = ""; }; - 43F7FF771927F92500CA4038 /* RegionAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegionAttachment.h; path = "../../spine-c/include/spine/RegionAttachment.h"; sourceTree = ""; }; - 43F7FF781927F92500CA4038 /* Skeleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skeleton.h; path = "../../spine-c/include/spine/Skeleton.h"; sourceTree = ""; }; - 43F7FF791927F92500CA4038 /* SkeletonBounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonBounds.h; path = "../../spine-c/include/spine/SkeletonBounds.h"; sourceTree = ""; }; - 43F7FF7A1927F92500CA4038 /* SkeletonData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonData.h; path = "../../spine-c/include/spine/SkeletonData.h"; sourceTree = ""; }; - 43F7FF7B1927F92500CA4038 /* SkeletonJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonJson.h; path = "../../spine-c/include/spine/SkeletonJson.h"; sourceTree = ""; }; - 43F7FF7C1927F92500CA4038 /* Skin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skin.h; path = "../../spine-c/include/spine/Skin.h"; sourceTree = ""; }; - 43F7FF7E1927F92500CA4038 /* Slot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Slot.h; path = "../../spine-c/include/spine/Slot.h"; sourceTree = ""; }; - 43F7FF7F1927F92500CA4038 /* SlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SlotData.h; path = "../../spine-c/include/spine/SlotData.h"; sourceTree = ""; }; - 43F7FF801927F92500CA4038 /* spine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spine.h; path = "../../spine-c/include/spine/spine.h"; sourceTree = ""; }; - 43F7FF811927F94800CA4038 /* PolygonBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PolygonBatch.h; path = src/spine/PolygonBatch.h; sourceTree = ""; }; - 43F7FF821927F94800CA4038 /* PolygonBatch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PolygonBatch.m; path = src/spine/PolygonBatch.m; sourceTree = ""; }; - 43F7FF831927F94800CA4038 /* SkeletonAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonAnimation.h; path = src/spine/SkeletonAnimation.h; sourceTree = ""; }; - 43F7FF841927F94800CA4038 /* SkeletonAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonAnimation.m; path = src/spine/SkeletonAnimation.m; sourceTree = ""; }; - 43F7FF851927F94800CA4038 /* SkeletonRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonRenderer.h; path = src/spine/SkeletonRenderer.h; sourceTree = ""; }; - 43F7FF861927F94800CA4038 /* SkeletonRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonRenderer.m; path = src/spine/SkeletonRenderer.m; sourceTree = ""; }; - 43F7FF8A1927F96700CA4038 /* GoblinsExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GoblinsExample.h; path = example/GoblinsExample.h; sourceTree = ""; }; - 43F7FF8B1927F96700CA4038 /* GoblinsExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GoblinsExample.m; path = example/GoblinsExample.m; sourceTree = ""; }; - 43F7FF8C1927F96700CA4038 /* SpineboyExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpineboyExample.h; path = example/SpineboyExample.h; sourceTree = ""; }; - 43F7FF8D1927F96700CA4038 /* SpineboyExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpineboyExample.m; path = example/SpineboyExample.m; sourceTree = ""; }; - 652107951895250000B1FF07 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; - 9A5D2495170A94DA0030D4DD /* SpineExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SpineExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 9A5D2498170A94DA0030D4DD /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 9A5D249A170A94DA0030D4DD /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; - 9A5D249C170A94DA0030D4DD /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; }; - 9A5D249E170A94DA0030D4DD /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - 9A5D24A0170A94DA0030D4DD /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - 9A5D24A2170A94DA0030D4DD /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 9A5D24A4170A94DA0030D4DD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 9A5D24A6170A94DA0030D4DD /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 9A5D24A8170A94DA0030D4DD /* GameKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameKit.framework; path = System/Library/Frameworks/GameKit.framework; sourceTree = SDKROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 9A5D2492170A94DA0030D4DD /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 4327E30A19E989A3007E7FB7 /* libcocos2d_chipmunk.a in Frameworks */, - 4327E30B19E98A32007E7FB7 /* libChipmunk.a in Frameworks */, - 4327E30919E98977007E7FB7 /* GLKit.framework in Frameworks */, - 4327E30619E98913007E7FB7 /* CoreText.framework in Frameworks */, - 9A5D2499170A94DA0030D4DD /* QuartzCore.framework in Frameworks */, - 9A5D249B170A94DA0030D4DD /* OpenGLES.framework in Frameworks */, - 9A5D249D170A94DA0030D4DD /* OpenAL.framework in Frameworks */, - 9A5D249F170A94DA0030D4DD /* AudioToolbox.framework in Frameworks */, - 9A5D24A1170A94DA0030D4DD /* AVFoundation.framework in Frameworks */, - 9A5D24A3170A94DA0030D4DD /* UIKit.framework in Frameworks */, - 9A5D24A5170A94DA0030D4DD /* Foundation.framework in Frameworks */, - 9A5D24A7170A94DA0030D4DD /* CoreGraphics.framework in Frameworks */, - 9A5D24A9170A94DA0030D4DD /* GameKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 434D47CB192A246A003127B5 /* Products */ = { - isa = PBXGroup; - children = ( - 434D47DC192A246B003127B5 /* libbuild all libs.a */, - 434D47DE192A246B003127B5 /* libbox2d.a */, - 434D47E0192A246B003127B5 /* libChipmunk.a */, - 434D47E2192A246B003127B5 /* libcocos2d.a */, - 434D47E4192A246B003127B5 /* libcocos2d_box2d.a */, - 434D47E6192A246B003127B5 /* libcocos2d_chipmunk.a */, - 434D47E8192A246B003127B5 /* libcocos2d-documentation.a */, - 434D47EA192A246B003127B5 /* libCocosDenshion.a */, - 434D47EC192A246B003127B5 /* libCocosBuilderReader.a */, - 434D47EE192A246B003127B5 /* libjsbindings.a */, - 434D47F0192A246B003127B5 /* libkazmath.a */, - ); - name = Products; - sourceTree = ""; - }; - 43C32821170B0BBC004A9460 /* Classes */ = { - isa = PBXGroup; - children = ( - 43C32822170B0BC2004A9460 /* spine-c */, - 43C32823170B0BC7004A9460 /* spine-cocos2d-iphone */, - 43F7FF8C1927F96700CA4038 /* SpineboyExample.h */, - 43F7FF8D1927F96700CA4038 /* SpineboyExample.m */, - 43F7FF8A1927F96700CA4038 /* GoblinsExample.h */, - 43F7FF8B1927F96700CA4038 /* GoblinsExample.m */, - 43C32A07170B10FF004A9460 /* AppDelegate.h */, - 43C32A08170B10FF004A9460 /* AppDelegate.m */, - 43C32A05170B0F93004A9460 /* main.m */, - 43C32889170B0E9F004A9460 /* Prefix.pch */, - ); - name = Classes; - sourceTree = ""; - }; - 43C32822170B0BC2004A9460 /* spine-c */ = { - isa = PBXGroup; - children = ( - 43F7FF381927F91900CA4038 /* Animation.c */, - 43F7FF691927F92500CA4038 /* Animation.h */, - 43F7FF391927F91900CA4038 /* AnimationState.c */, - 43F7FF6A1927F92500CA4038 /* AnimationState.h */, - 43F7FF3A1927F91900CA4038 /* AnimationStateData.c */, - 43F7FF6B1927F92500CA4038 /* AnimationStateData.h */, - 43F7FF3B1927F91900CA4038 /* Atlas.c */, - 43F7FF6C1927F92500CA4038 /* Atlas.h */, - 43F7FF3C1927F91900CA4038 /* AtlasAttachmentLoader.c */, - 43F7FF6D1927F92500CA4038 /* AtlasAttachmentLoader.h */, - 43F7FF3D1927F91900CA4038 /* Attachment.c */, - 43F7FF6E1927F92500CA4038 /* Attachment.h */, - 43F7FF3E1927F91900CA4038 /* AttachmentLoader.c */, - 43F7FF6F1927F92500CA4038 /* AttachmentLoader.h */, - 43F7FF3F1927F91900CA4038 /* Bone.c */, - 43F7FF701927F92500CA4038 /* Bone.h */, - 43F7FF401927F91900CA4038 /* BoneData.c */, - 43F7FF711927F92500CA4038 /* BoneData.h */, - 43F7FF411927F91900CA4038 /* BoundingBoxAttachment.c */, - 43F7FF721927F92500CA4038 /* BoundingBoxAttachment.h */, - 43F7FF421927F91900CA4038 /* Event.c */, - 43F7FF731927F92500CA4038 /* Event.h */, - 43F7FF431927F91900CA4038 /* EventData.c */, - 43F7FF741927F92500CA4038 /* EventData.h */, - 43F7FF441927F91900CA4038 /* extension.c */, - 43F7FF751927F92500CA4038 /* extension.h */, - 4327E30219E9879C007E7FB7 /* IkConstraint.c */, - 4327E30019E9879C007E7FB7 /* IkConstraint.h */, - 4327E30319E9879C007E7FB7 /* IkConstraintData.c */, - 4327E30119E9879C007E7FB7 /* IkConstraintData.h */, - 43F7FF451927F91900CA4038 /* Json.c */, - 43F7FF461927F91900CA4038 /* Json.h */, - 43F7FF471927F91900CA4038 /* MeshAttachment.c */, - 43F7FF761927F92500CA4038 /* MeshAttachment.h */, - 43F7FF481927F91900CA4038 /* RegionAttachment.c */, - 43F7FF771927F92500CA4038 /* RegionAttachment.h */, - 43F7FF491927F91900CA4038 /* Skeleton.c */, - 43F7FF781927F92500CA4038 /* Skeleton.h */, - 43F7FF4A1927F91900CA4038 /* SkeletonBounds.c */, - 43F7FF791927F92500CA4038 /* SkeletonBounds.h */, - 43F7FF4B1927F91900CA4038 /* SkeletonData.c */, - 43F7FF7A1927F92500CA4038 /* SkeletonData.h */, - 43F7FF4C1927F91900CA4038 /* SkeletonJson.c */, - 43F7FF7B1927F92500CA4038 /* SkeletonJson.h */, - 43F7FF4D1927F91900CA4038 /* Skin.c */, - 43F7FF7C1927F92500CA4038 /* Skin.h */, - 43F7FF4F1927F91900CA4038 /* Slot.c */, - 43F7FF7E1927F92500CA4038 /* Slot.h */, - 43F7FF501927F91900CA4038 /* SlotData.c */, - 43F7FF7F1927F92500CA4038 /* SlotData.h */, - 43F7FF801927F92500CA4038 /* spine.h */, - 43D73BD31C7352D100F73E38 /* TransformConstraint.c */, - 43D73BD91C7352E200F73E38 /* TransformConstraint.h */, - 43D73BD41C7352D100F73E38 /* TransformConstraintData.c */, - 43D73BDA1C7352E200F73E38 /* TransformConstraintData.h */, - 43D73BD51C7352D100F73E38 /* WeightedMeshAttachment.c */, - 43D73BDB1C7352E200F73E38 /* WeightedMeshAttachment.h */, - ); - name = "spine-c"; - sourceTree = ""; - }; - 43C32823170B0BC7004A9460 /* spine-cocos2d-iphone */ = { - isa = PBXGroup; - children = ( - 43F7FF811927F94800CA4038 /* PolygonBatch.h */, - 43F7FF821927F94800CA4038 /* PolygonBatch.m */, - 43F7FF831927F94800CA4038 /* SkeletonAnimation.h */, - 43F7FF841927F94800CA4038 /* SkeletonAnimation.m */, - 43F7FF851927F94800CA4038 /* SkeletonRenderer.h */, - 43F7FF861927F94800CA4038 /* SkeletonRenderer.m */, - 43C3282E170B0C19004A9460 /* spine-cocos2d-iphone.h */, - 43C3282D170B0C19004A9460 /* spine-cocos2d-iphone.m */, - ); - name = "spine-cocos2d-iphone"; - sourceTree = ""; - }; - 43C32867170B0C7F004A9460 /* Resources */ = { - isa = PBXGroup; - children = ( - 43F7010C1927FBC700CA4038 /* goblins-mesh.atlas */, - 43F7010D1927FBC700CA4038 /* goblins-mesh.json */, - 43F7010E1927FBC700CA4038 /* goblins-mesh.png */, - 43C32868170B0DA6004A9460 /* spineboy.json */, - 43C3286A170B0DA6004A9460 /* spineboy.atlas */, - 43C3286B170B0DA6004A9460 /* spineboy.png */, - ); - name = Resources; - sourceTree = ""; - }; - 43C32870170B0DAD004A9460 /* Resources-ios */ = { - isa = PBXGroup; - children = ( - 43C32871170B0DBE004A9460 /* Default-568h@2x.png */, - 43C32872170B0DBE004A9460 /* Default-Landscape~ipad.png */, - 43C32873170B0DBE004A9460 /* Default.png */, - 43C32874170B0DBE004A9460 /* Default@2x.png */, - 43C32875170B0DBE004A9460 /* Icon-72.png */, - 43C32876170B0DBE004A9460 /* Icon-Small-50.png */, - 43C32877170B0DBE004A9460 /* Icon-Small.png */, - 43C32878170B0DBE004A9460 /* Icon-Small@2x.png */, - 43C32879170B0DBE004A9460 /* Icon.png */, - 43C3287A170B0DBE004A9460 /* Icon@2x.png */, - 43C3287B170B0DBE004A9460 /* Info.plist */, - 43C3287C170B0DBE004A9460 /* iTunesArtwork */, - ); - name = "Resources-ios"; - sourceTree = ""; - }; - 9A5D248C170A94DA0030D4DD = { - isa = PBXGroup; - children = ( - 43C32821170B0BBC004A9460 /* Classes */, - 43C32867170B0C7F004A9460 /* Resources */, - 43C32870170B0DAD004A9460 /* Resources-ios */, - 9A5D24C3170A94DA0030D4DD /* cocos2d */, - 9A5D2497170A94DA0030D4DD /* Frameworks */, - 9A5D2496170A94DA0030D4DD /* Products */, - ); - sourceTree = ""; - }; - 9A5D2496170A94DA0030D4DD /* Products */ = { - isa = PBXGroup; - children = ( - 9A5D2495170A94DA0030D4DD /* SpineExample.app */, - ); - name = Products; - sourceTree = ""; - }; - 9A5D2497170A94DA0030D4DD /* Frameworks */ = { - isa = PBXGroup; - children = ( - 4327E30819E98977007E7FB7 /* GLKit.framework */, - 652107951895250000B1FF07 /* CoreText.framework */, - 9A5D2498170A94DA0030D4DD /* QuartzCore.framework */, - 9A5D249A170A94DA0030D4DD /* OpenGLES.framework */, - 9A5D249C170A94DA0030D4DD /* OpenAL.framework */, - 9A5D249E170A94DA0030D4DD /* AudioToolbox.framework */, - 9A5D24A0170A94DA0030D4DD /* AVFoundation.framework */, - 9A5D24A2170A94DA0030D4DD /* UIKit.framework */, - 9A5D24A4170A94DA0030D4DD /* Foundation.framework */, - 9A5D24A6170A94DA0030D4DD /* CoreGraphics.framework */, - 9A5D24A8170A94DA0030D4DD /* GameKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 9A5D24C3170A94DA0030D4DD /* cocos2d */ = { - isa = PBXGroup; - children = ( - 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */, - ); - name = cocos2d; - path = Spine; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 9A5D2494170A94DA0030D4DD /* SpineExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 9A5D2643170A94DC0030D4DD /* Build configuration list for PBXNativeTarget "SpineExample" */; - buildPhases = ( - 9A5D2491170A94DA0030D4DD /* Sources */, - 9A5D2492170A94DA0030D4DD /* Frameworks */, - 9A5D2493170A94DA0030D4DD /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SpineExample; - productName = "spine-cocos2d-iphone-ios"; - productReference = 9A5D2495170A94DA0030D4DD /* SpineExample.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 9A5D248D170A94DA0030D4DD /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0510; - ORGANIZATIONNAME = "Craig Hinrichs"; - }; - buildConfigurationList = 9A5D2490170A94DA0030D4DD /* Build configuration list for PBXProject "spine-cocos2d-iphone-ios" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 9A5D248C170A94DA0030D4DD; - productRefGroup = 9A5D2496170A94DA0030D4DD /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 434D47CB192A246A003127B5 /* Products */; - ProjectRef = 434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 9A5D2494170A94DA0030D4DD /* SpineExample */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 434D47DC192A246B003127B5 /* libbuild all libs.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libbuild all libs.a"; - remoteRef = 434D47DB192A246B003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D47DE192A246B003127B5 /* libbox2d.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libbox2d.a; - remoteRef = 434D47DD192A246B003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D47E0192A246B003127B5 /* libChipmunk.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libChipmunk.a; - remoteRef = 434D47DF192A246B003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D47E2192A246B003127B5 /* libcocos2d.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libcocos2d.a; - remoteRef = 434D47E1192A246B003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D47E4192A246B003127B5 /* libcocos2d_box2d.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libcocos2d_box2d.a; - remoteRef = 434D47E3192A246B003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D47E6192A246B003127B5 /* libcocos2d_chipmunk.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libcocos2d_chipmunk.a; - remoteRef = 434D47E5192A246B003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D47E8192A246B003127B5 /* libcocos2d-documentation.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = "libcocos2d-documentation.a"; - remoteRef = 434D47E7192A246B003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D47EA192A246B003127B5 /* libCocosDenshion.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libCocosDenshion.a; - remoteRef = 434D47E9192A246B003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D47EC192A246B003127B5 /* libCocosBuilderReader.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libCocosBuilderReader.a; - remoteRef = 434D47EB192A246B003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D47EE192A246B003127B5 /* libjsbindings.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libjsbindings.a; - remoteRef = 434D47ED192A246B003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D47F0192A246B003127B5 /* libkazmath.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libkazmath.a; - remoteRef = 434D47EF192A246B003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 9A5D2493170A94DA0030D4DD /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 43C3286C170B0DA6004A9460 /* spineboy.json in Resources */, - 43C3286E170B0DA6004A9460 /* spineboy.atlas in Resources */, - 43C3286F170B0DA6004A9460 /* spineboy.png in Resources */, - 43C3287D170B0DBE004A9460 /* Default-568h@2x.png in Resources */, - 43C3287E170B0DBE004A9460 /* Default-Landscape~ipad.png in Resources */, - 43C3287F170B0DBE004A9460 /* Default.png in Resources */, - 43C32880170B0DBE004A9460 /* Default@2x.png in Resources */, - 43C32881170B0DBE004A9460 /* Icon-72.png in Resources */, - 43C32882170B0DBE004A9460 /* Icon-Small-50.png in Resources */, - 43C32883170B0DBE004A9460 /* Icon-Small.png in Resources */, - 43C32884170B0DBE004A9460 /* Icon-Small@2x.png in Resources */, - 43C32885170B0DBE004A9460 /* Icon.png in Resources */, - 43C32886170B0DBE004A9460 /* Icon@2x.png in Resources */, - 43C32888170B0DBE004A9460 /* iTunesArtwork in Resources */, - 43F7010F1927FBC700CA4038 /* goblins-mesh.atlas in Resources */, - 43F701101927FBC700CA4038 /* goblins-mesh.json in Resources */, - 43F701111927FBC700CA4038 /* goblins-mesh.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 9A5D2491170A94DA0030D4DD /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 43C3282F170B0C19004A9460 /* spine-cocos2d-iphone.m in Sources */, - 43C32A06170B0F93004A9460 /* main.m in Sources */, - 43C32A09170B10FF004A9460 /* AppDelegate.m in Sources */, - 43F7FF511927F91900CA4038 /* Animation.c in Sources */, - 43F7FF521927F91900CA4038 /* AnimationState.c in Sources */, - 43F7FF531927F91900CA4038 /* AnimationStateData.c in Sources */, - 43F7FF541927F91900CA4038 /* Atlas.c in Sources */, - 43D73BD61C7352D100F73E38 /* TransformConstraint.c in Sources */, - 43F7FF551927F91900CA4038 /* AtlasAttachmentLoader.c in Sources */, - 43F7FF561927F91900CA4038 /* Attachment.c in Sources */, - 43F7FF571927F91900CA4038 /* AttachmentLoader.c in Sources */, - 43F7FF581927F91900CA4038 /* Bone.c in Sources */, - 43D73BD71C7352D100F73E38 /* TransformConstraintData.c in Sources */, - 43F7FF591927F91900CA4038 /* BoneData.c in Sources */, - 43F7FF5A1927F91900CA4038 /* BoundingBoxAttachment.c in Sources */, - 43F7FF5B1927F91900CA4038 /* Event.c in Sources */, - 43F7FF5C1927F91900CA4038 /* EventData.c in Sources */, - 43F7FF5D1927F91900CA4038 /* extension.c in Sources */, - 4327E30419E9879C007E7FB7 /* IkConstraint.c in Sources */, - 43F7FF5E1927F91900CA4038 /* Json.c in Sources */, - 43F7FF5F1927F91900CA4038 /* MeshAttachment.c in Sources */, - 43F7FF601927F91900CA4038 /* RegionAttachment.c in Sources */, - 4327E30519E9879C007E7FB7 /* IkConstraintData.c in Sources */, - 43F7FF611927F91900CA4038 /* Skeleton.c in Sources */, - 43D73BD81C7352D100F73E38 /* WeightedMeshAttachment.c in Sources */, - 43F7FF621927F91900CA4038 /* SkeletonBounds.c in Sources */, - 43F7FF631927F91900CA4038 /* SkeletonData.c in Sources */, - 43F7FF641927F91900CA4038 /* SkeletonJson.c in Sources */, - 43F7FF651927F91900CA4038 /* Skin.c in Sources */, - 43F7FF671927F91900CA4038 /* Slot.c in Sources */, - 43F7FF681927F91900CA4038 /* SlotData.c in Sources */, - 43F7FF871927F94800CA4038 /* PolygonBatch.m in Sources */, - 43F7FF881927F94800CA4038 /* SkeletonAnimation.m in Sources */, - 43F7FF891927F94800CA4038 /* SkeletonRenderer.m in Sources */, - 43F7FF8E1927F96700CA4038 /* GoblinsExample.m in Sources */, - 43F7FF8F1927F96700CA4038 /* SpineboyExample.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 9A5D2641170A94DC0030D4DD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - DEBUG, - "COCOS2D_DEBUG=1", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.0; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - }; - name = Debug; - }; - 9A5D2642170A94DC0030D4DD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_PREPROCESSOR_DEFINITIONS = ( - NDEBUG, - "NS_BLOCK_ASSERTIONS=1", - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 4.0; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - }; - name = Release; - }; - 9A5D2644170A94DC0030D4DD /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Resources-ios/Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "\"cocos2d/external/kazmath/include\"", - "\"src\"", - "\"../../spine-c/include\"", - "\"cocos2d/cocos2d\"/**", - ); - INFOPLIST_FILE = "Resources-ios/Info.plist"; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ( - "-lz", - "-lsqlite3", - "-ObjC", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - VALID_ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - 9A5D2645170A94DC0030D4DD /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = YES; - ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - COPY_PHASE_STRIP = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Resources-ios/Prefix.pch"; - HEADER_SEARCH_PATHS = ( - "\"cocos2d/external/kazmath/include\"", - "\"src\"", - "\"../../spine-c/include\"", - "\"cocos2d/cocos2d\"/**", - ); - INFOPLIST_FILE = "Resources-ios/Info.plist"; - ONLY_ACTIVE_ARCH = YES; - OTHER_LDFLAGS = ( - "-lz", - "-lsqlite3", - "-ObjC", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - VALIDATE_PRODUCT = YES; - VALID_ARCHS = "$(ARCHS_STANDARD_32_BIT)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 9A5D2490170A94DA0030D4DD /* Build configuration list for PBXProject "spine-cocos2d-iphone-ios" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9A5D2641170A94DC0030D4DD /* Debug */, - 9A5D2642170A94DC0030D4DD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 9A5D2643170A94DC0030D4DD /* Build configuration list for PBXNativeTarget "SpineExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9A5D2644170A94DC0030D4DD /* Debug */, - 9A5D2645170A94DC0030D4DD /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 9A5D248D170A94DA0030D4DD /* Project object */; -} diff --git a/spine-cocos2d-iphone/2/spine-cocos2d-iphone-mac.xcodeproj/project.pbxproj b/spine-cocos2d-iphone/2/spine-cocos2d-iphone-mac.xcodeproj/project.pbxproj deleted file mode 100644 index 7f2a978a2..000000000 --- a/spine-cocos2d-iphone/2/spine-cocos2d-iphone-mac.xcodeproj/project.pbxproj +++ /dev/null @@ -1,759 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 4319B51816FF9B2600C1D7A9 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4319B51716FF9B2600C1D7A9 /* QuartzCore.framework */; }; - 4319B51A16FF9B2600C1D7A9 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4319B51916FF9B2600C1D7A9 /* OpenGL.framework */; }; - 4319B51C16FF9B2600C1D7A9 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4319B51B16FF9B2600C1D7A9 /* OpenAL.framework */; }; - 4319B51E16FF9B2600C1D7A9 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4319B51D16FF9B2600C1D7A9 /* AudioToolbox.framework */; }; - 4319B52016FF9B2600C1D7A9 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4319B51F16FF9B2600C1D7A9 /* AppKit.framework */; }; - 4319B52216FF9B2600C1D7A9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4319B52116FF9B2600C1D7A9 /* Foundation.framework */; }; - 431FF7CA1C735CA100D52DF2 /* IkConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 431FF7C91C735CA100D52DF2 /* IkConstraint.c */; }; - 431FF7DA1C735CFE00D52DF2 /* IkConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 431FF7D61C735CFE00D52DF2 /* IkConstraintData.c */; }; - 431FF7DB1C735CFE00D52DF2 /* TransformConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 431FF7D71C735CFE00D52DF2 /* TransformConstraint.c */; }; - 431FF7DC1C735CFE00D52DF2 /* TransformConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 431FF7D81C735CFE00D52DF2 /* TransformConstraintData.c */; }; - 431FF7DD1C735CFE00D52DF2 /* WeightedMeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 431FF7D91C735CFE00D52DF2 /* WeightedMeshAttachment.c */; }; - 431FF7E51C735D4300D52DF2 /* goblins-mesh.atlas in Resources */ = {isa = PBXBuildFile; fileRef = 431FF7E21C735D4300D52DF2 /* goblins-mesh.atlas */; }; - 431FF7E61C735D4300D52DF2 /* goblins-mesh.json in Resources */ = {isa = PBXBuildFile; fileRef = 431FF7E31C735D4300D52DF2 /* goblins-mesh.json */; }; - 431FF7E71C735D4300D52DF2 /* goblins-mesh.png in Resources */ = {isa = PBXBuildFile; fileRef = 431FF7E41C735D4300D52DF2 /* goblins-mesh.png */; }; - 434D4819192A2B49003127B5 /* libcocos2d.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 434D4808192A2B35003127B5 /* libcocos2d.a */; }; - 43BFBE0F170A778A00ECBACB /* spine-cocos2d-iphone.m in Sources */ = {isa = PBXBuildFile; fileRef = 43BFBE0D170A778A00ECBACB /* spine-cocos2d-iphone.m */; }; - 43C32A1B170B1295004A9460 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 43C32A11170B1295004A9460 /* AppDelegate.m */; }; - 43C32A1C170B1295004A9460 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 43C32A13170B1295004A9460 /* InfoPlist.strings */; }; - 43C32A1D170B1295004A9460 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 43C32A15170B1295004A9460 /* MainMenu.xib */; }; - 43C32A1E170B1295004A9460 /* icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 43C32A17170B1295004A9460 /* icon.icns */; }; - 43C32A20170B1295004A9460 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 43C32A19170B1295004A9460 /* main.m */; }; - 43C32A36170D0A4D004A9460 /* spineboy.atlas in Resources */ = {isa = PBXBuildFile; fileRef = 43C32A30170D0A4D004A9460 /* spineboy.atlas */; }; - 43C32A37170D0A4D004A9460 /* spineboy.json in Resources */ = {isa = PBXBuildFile; fileRef = 43C32A31170D0A4D004A9460 /* spineboy.json */; }; - 43C32A38170D0A4D004A9460 /* spineboy.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C32A32170D0A4D004A9460 /* spineboy.png */; }; - 43F7FD711927C31700CA4038 /* Animation.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD581927C31700CA4038 /* Animation.c */; }; - 43F7FD721927C31700CA4038 /* AnimationState.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD591927C31700CA4038 /* AnimationState.c */; }; - 43F7FD731927C31700CA4038 /* AnimationStateData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD5A1927C31700CA4038 /* AnimationStateData.c */; }; - 43F7FD741927C31700CA4038 /* Atlas.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD5B1927C31700CA4038 /* Atlas.c */; }; - 43F7FD751927C31700CA4038 /* AtlasAttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD5C1927C31700CA4038 /* AtlasAttachmentLoader.c */; }; - 43F7FD761927C31700CA4038 /* Attachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD5D1927C31700CA4038 /* Attachment.c */; }; - 43F7FD771927C31700CA4038 /* AttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD5E1927C31700CA4038 /* AttachmentLoader.c */; }; - 43F7FD781927C31700CA4038 /* Bone.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD5F1927C31700CA4038 /* Bone.c */; }; - 43F7FD791927C31700CA4038 /* BoneData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD601927C31700CA4038 /* BoneData.c */; }; - 43F7FD7A1927C31700CA4038 /* BoundingBoxAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD611927C31700CA4038 /* BoundingBoxAttachment.c */; }; - 43F7FD7B1927C31700CA4038 /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD621927C31700CA4038 /* Event.c */; }; - 43F7FD7C1927C31700CA4038 /* EventData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD631927C31700CA4038 /* EventData.c */; }; - 43F7FD7D1927C31700CA4038 /* extension.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD641927C31700CA4038 /* extension.c */; }; - 43F7FD7E1927C31700CA4038 /* Json.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD651927C31700CA4038 /* Json.c */; }; - 43F7FD7F1927C31700CA4038 /* MeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD671927C31700CA4038 /* MeshAttachment.c */; }; - 43F7FD801927C31700CA4038 /* RegionAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD681927C31700CA4038 /* RegionAttachment.c */; }; - 43F7FD811927C31700CA4038 /* Skeleton.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD691927C31700CA4038 /* Skeleton.c */; }; - 43F7FD821927C31700CA4038 /* SkeletonBounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD6A1927C31700CA4038 /* SkeletonBounds.c */; }; - 43F7FD831927C31700CA4038 /* SkeletonData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD6B1927C31700CA4038 /* SkeletonData.c */; }; - 43F7FD841927C31700CA4038 /* SkeletonJson.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD6C1927C31700CA4038 /* SkeletonJson.c */; }; - 43F7FD851927C31700CA4038 /* Skin.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD6D1927C31700CA4038 /* Skin.c */; }; - 43F7FD871927C31700CA4038 /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD6F1927C31700CA4038 /* Slot.c */; }; - 43F7FD881927C31700CA4038 /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FD701927C31700CA4038 /* SlotData.c */; }; - 43F7FDA71927C33C00CA4038 /* PolygonBatch.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FDA21927C33C00CA4038 /* PolygonBatch.m */; }; - 43F7FDA81927C33C00CA4038 /* SkeletonAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FDA41927C33C00CA4038 /* SkeletonAnimation.m */; }; - 43F7FDA91927C33C00CA4038 /* SkeletonRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FDA61927C33C00CA4038 /* SkeletonRenderer.m */; }; - 43F7FDAC1927C34600CA4038 /* SpineboyExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FDAB1927C34600CA4038 /* SpineboyExample.m */; }; - 43F7FDB51927D04200CA4038 /* GoblinsExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F7FDB41927D04200CA4038 /* GoblinsExample.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 434D4807192A2B35003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = E01E663D121CA00A001A484F; - remoteInfo = cocos2d; - }; - 434D4809192A2B35003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A0EFA65C169CDAC8006D1B22; - remoteInfo = cocos2d_box2d; - }; - 434D480B192A2B35003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A0EFA585169CDABA006D1B22; - remoteInfo = cocos2d_chipmunk; - }; - 434D480D192A2B35003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 4AD3B8A7159A5415002E68D1; - remoteInfo = CocosDenshion; - }; - 434D480F192A2B35003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A0644A5215B609D3004AB807; - remoteInfo = CocosBuilderReader; - }; - 434D4811192A2B35003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A0FBA8AF14A5138F002DF395; - remoteInfo = box2d; - }; - 434D4813192A2B35003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A0FBA8A614A51386002DF395; - remoteInfo = chipmunk; - }; - 434D4815192A2B35003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A0191CB1167FD65B0099349A; - remoteInfo = jsbindings; - }; - 434D4817192A2B35003127B5 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = A06430E713C1414300CC5554; - remoteInfo = kazmath; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 4319B51316FF9B2600C1D7A9 /* SpineExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SpineExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 4319B51716FF9B2600C1D7A9 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - 4319B51916FF9B2600C1D7A9 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; - 4319B51B16FF9B2600C1D7A9 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; }; - 4319B51D16FF9B2600C1D7A9 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - 4319B51F16FF9B2600C1D7A9 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; - 4319B52116FF9B2600C1D7A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 431FF7C91C735CA100D52DF2 /* IkConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraint.c; path = "../../spine-c/src/spine/IkConstraint.c"; sourceTree = ""; }; - 431FF7D51C735CAE00D52DF2 /* IkConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraint.h; path = "../../spine-c/include/spine/IkConstraint.h"; sourceTree = ""; }; - 431FF7D61C735CFE00D52DF2 /* IkConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraintData.c; path = "../../spine-c/src/spine/IkConstraintData.c"; sourceTree = ""; }; - 431FF7D71C735CFE00D52DF2 /* TransformConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraint.c; path = "../../spine-c/src/spine/TransformConstraint.c"; sourceTree = ""; }; - 431FF7D81C735CFE00D52DF2 /* TransformConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraintData.c; path = "../../spine-c/src/spine/TransformConstraintData.c"; sourceTree = ""; }; - 431FF7D91C735CFE00D52DF2 /* WeightedMeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = WeightedMeshAttachment.c; path = "../../spine-c/src/spine/WeightedMeshAttachment.c"; sourceTree = ""; }; - 431FF7DE1C735D1500D52DF2 /* IkConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraintData.h; path = "../../spine-c/include/spine/IkConstraintData.h"; sourceTree = ""; }; - 431FF7DF1C735D1500D52DF2 /* TransformConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraint.h; path = "../../spine-c/include/spine/TransformConstraint.h"; sourceTree = ""; }; - 431FF7E01C735D1500D52DF2 /* TransformConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraintData.h; path = "../../spine-c/include/spine/TransformConstraintData.h"; sourceTree = ""; }; - 431FF7E11C735D1500D52DF2 /* WeightedMeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightedMeshAttachment.h; path = "../../spine-c/include/spine/WeightedMeshAttachment.h"; sourceTree = ""; }; - 431FF7E21C735D4300D52DF2 /* goblins-mesh.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "goblins-mesh.atlas"; sourceTree = ""; }; - 431FF7E31C735D4300D52DF2 /* goblins-mesh.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "goblins-mesh.json"; sourceTree = ""; }; - 431FF7E41C735D4300D52DF2 /* goblins-mesh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "goblins-mesh.png"; sourceTree = ""; }; - 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = "cocos2d-osx.xcodeproj"; path = "cocos2d/cocos2d-osx.xcodeproj"; sourceTree = SOURCE_ROOT; }; - 43BFBE0D170A778A00ECBACB /* spine-cocos2d-iphone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "spine-cocos2d-iphone.m"; path = "src/spine/spine-cocos2d-iphone.m"; sourceTree = ""; }; - 43BFBE0E170A778A00ECBACB /* spine-cocos2d-iphone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "spine-cocos2d-iphone.h"; path = "src/spine/spine-cocos2d-iphone.h"; sourceTree = ""; }; - 43C32A10170B1295004A9460 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = "../Resources-mac/AppDelegate.h"; sourceTree = ""; }; - 43C32A11170B1295004A9460 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = "../Resources-mac/AppDelegate.m"; sourceTree = ""; }; - 43C32A14170B1295004A9460 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = English; path = InfoPlist.strings; sourceTree = ""; }; - 43C32A16170B1295004A9460 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = MainMenu.xib; sourceTree = ""; }; - 43C32A17170B1295004A9460 /* icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = icon.icns; path = "Resources-mac/icon.icns"; sourceTree = ""; }; - 43C32A18170B1295004A9460 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Resources-mac/Info.plist"; sourceTree = ""; }; - 43C32A19170B1295004A9460 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "../Resources-mac/main.m"; sourceTree = ""; }; - 43C32A1A170B1295004A9460 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Prefix.pch; path = "../Resources-mac/Prefix.pch"; sourceTree = ""; }; - 43C32A30170D0A4D004A9460 /* spineboy.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = spineboy.atlas; sourceTree = ""; }; - 43C32A31170D0A4D004A9460 /* spineboy.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = spineboy.json; sourceTree = ""; }; - 43C32A32170D0A4D004A9460 /* spineboy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = spineboy.png; sourceTree = ""; }; - 43F7FD581927C31700CA4038 /* Animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animation.c; path = "../../spine-c/src/spine/Animation.c"; sourceTree = ""; }; - 43F7FD591927C31700CA4038 /* AnimationState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationState.c; path = "../../spine-c/src/spine/AnimationState.c"; sourceTree = ""; }; - 43F7FD5A1927C31700CA4038 /* AnimationStateData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationStateData.c; path = "../../spine-c/src/spine/AnimationStateData.c"; sourceTree = ""; }; - 43F7FD5B1927C31700CA4038 /* Atlas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Atlas.c; path = "../../spine-c/src/spine/Atlas.c"; sourceTree = ""; }; - 43F7FD5C1927C31700CA4038 /* AtlasAttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AtlasAttachmentLoader.c; path = "../../spine-c/src/spine/AtlasAttachmentLoader.c"; sourceTree = ""; }; - 43F7FD5D1927C31700CA4038 /* Attachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Attachment.c; path = "../../spine-c/src/spine/Attachment.c"; sourceTree = ""; }; - 43F7FD5E1927C31700CA4038 /* AttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AttachmentLoader.c; path = "../../spine-c/src/spine/AttachmentLoader.c"; sourceTree = ""; }; - 43F7FD5F1927C31700CA4038 /* Bone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bone.c; path = "../../spine-c/src/spine/Bone.c"; sourceTree = ""; }; - 43F7FD601927C31700CA4038 /* BoneData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoneData.c; path = "../../spine-c/src/spine/BoneData.c"; sourceTree = ""; }; - 43F7FD611927C31700CA4038 /* BoundingBoxAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoundingBoxAttachment.c; path = "../../spine-c/src/spine/BoundingBoxAttachment.c"; sourceTree = ""; }; - 43F7FD621927C31700CA4038 /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../../spine-c/src/spine/Event.c"; sourceTree = ""; }; - 43F7FD631927C31700CA4038 /* EventData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EventData.c; path = "../../spine-c/src/spine/EventData.c"; sourceTree = ""; }; - 43F7FD641927C31700CA4038 /* extension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extension.c; path = "../../spine-c/src/spine/extension.c"; sourceTree = ""; }; - 43F7FD651927C31700CA4038 /* Json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Json.c; path = "../../spine-c/src/spine/Json.c"; sourceTree = ""; }; - 43F7FD661927C31700CA4038 /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Json.h; path = "../../spine-c/src/spine/Json.h"; sourceTree = ""; }; - 43F7FD671927C31700CA4038 /* MeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MeshAttachment.c; path = "../../spine-c/src/spine/MeshAttachment.c"; sourceTree = ""; }; - 43F7FD681927C31700CA4038 /* RegionAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = RegionAttachment.c; path = "../../spine-c/src/spine/RegionAttachment.c"; sourceTree = ""; }; - 43F7FD691927C31700CA4038 /* Skeleton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skeleton.c; path = "../../spine-c/src/spine/Skeleton.c"; sourceTree = ""; }; - 43F7FD6A1927C31700CA4038 /* SkeletonBounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonBounds.c; path = "../../spine-c/src/spine/SkeletonBounds.c"; sourceTree = ""; }; - 43F7FD6B1927C31700CA4038 /* SkeletonData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonData.c; path = "../../spine-c/src/spine/SkeletonData.c"; sourceTree = ""; }; - 43F7FD6C1927C31700CA4038 /* SkeletonJson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonJson.c; path = "../../spine-c/src/spine/SkeletonJson.c"; sourceTree = ""; }; - 43F7FD6D1927C31700CA4038 /* Skin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skin.c; path = "../../spine-c/src/spine/Skin.c"; sourceTree = ""; }; - 43F7FD6F1927C31700CA4038 /* Slot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Slot.c; path = "../../spine-c/src/spine/Slot.c"; sourceTree = ""; }; - 43F7FD701927C31700CA4038 /* SlotData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SlotData.c; path = "../../spine-c/src/spine/SlotData.c"; sourceTree = ""; }; - 43F7FD891927C32800CA4038 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = "../../spine-c/include/spine/Animation.h"; sourceTree = ""; }; - 43F7FD8A1927C32800CA4038 /* AnimationState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationState.h; path = "../../spine-c/include/spine/AnimationState.h"; sourceTree = ""; }; - 43F7FD8B1927C32800CA4038 /* AnimationStateData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationStateData.h; path = "../../spine-c/include/spine/AnimationStateData.h"; sourceTree = ""; }; - 43F7FD8C1927C32800CA4038 /* Atlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Atlas.h; path = "../../spine-c/include/spine/Atlas.h"; sourceTree = ""; }; - 43F7FD8D1927C32800CA4038 /* AtlasAttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AtlasAttachmentLoader.h; path = "../../spine-c/include/spine/AtlasAttachmentLoader.h"; sourceTree = ""; }; - 43F7FD8E1927C32800CA4038 /* Attachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Attachment.h; path = "../../spine-c/include/spine/Attachment.h"; sourceTree = ""; }; - 43F7FD8F1927C32800CA4038 /* AttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AttachmentLoader.h; path = "../../spine-c/include/spine/AttachmentLoader.h"; sourceTree = ""; }; - 43F7FD901927C32800CA4038 /* Bone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bone.h; path = "../../spine-c/include/spine/Bone.h"; sourceTree = ""; }; - 43F7FD911927C32800CA4038 /* BoneData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoneData.h; path = "../../spine-c/include/spine/BoneData.h"; sourceTree = ""; }; - 43F7FD921927C32800CA4038 /* BoundingBoxAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoundingBoxAttachment.h; path = "../../spine-c/include/spine/BoundingBoxAttachment.h"; sourceTree = ""; }; - 43F7FD931927C32800CA4038 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Event.h; path = "../../spine-c/include/spine/Event.h"; sourceTree = ""; }; - 43F7FD941927C32800CA4038 /* EventData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EventData.h; path = "../../spine-c/include/spine/EventData.h"; sourceTree = ""; }; - 43F7FD951927C32800CA4038 /* extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = extension.h; path = "../../spine-c/include/spine/extension.h"; sourceTree = ""; }; - 43F7FD961927C32800CA4038 /* MeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshAttachment.h; path = "../../spine-c/include/spine/MeshAttachment.h"; sourceTree = ""; }; - 43F7FD971927C32800CA4038 /* RegionAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegionAttachment.h; path = "../../spine-c/include/spine/RegionAttachment.h"; sourceTree = ""; }; - 43F7FD981927C32800CA4038 /* Skeleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skeleton.h; path = "../../spine-c/include/spine/Skeleton.h"; sourceTree = ""; }; - 43F7FD991927C32800CA4038 /* SkeletonBounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonBounds.h; path = "../../spine-c/include/spine/SkeletonBounds.h"; sourceTree = ""; }; - 43F7FD9A1927C32800CA4038 /* SkeletonData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonData.h; path = "../../spine-c/include/spine/SkeletonData.h"; sourceTree = ""; }; - 43F7FD9B1927C32800CA4038 /* SkeletonJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonJson.h; path = "../../spine-c/include/spine/SkeletonJson.h"; sourceTree = ""; }; - 43F7FD9C1927C32800CA4038 /* Skin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skin.h; path = "../../spine-c/include/spine/Skin.h"; sourceTree = ""; }; - 43F7FD9E1927C32800CA4038 /* Slot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Slot.h; path = "../../spine-c/include/spine/Slot.h"; sourceTree = ""; }; - 43F7FD9F1927C32800CA4038 /* SlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SlotData.h; path = "../../spine-c/include/spine/SlotData.h"; sourceTree = ""; }; - 43F7FDA01927C32800CA4038 /* spine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spine.h; path = "../../spine-c/include/spine/spine.h"; sourceTree = ""; }; - 43F7FDA11927C33C00CA4038 /* PolygonBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PolygonBatch.h; path = src/spine/PolygonBatch.h; sourceTree = ""; }; - 43F7FDA21927C33C00CA4038 /* PolygonBatch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PolygonBatch.m; path = src/spine/PolygonBatch.m; sourceTree = ""; }; - 43F7FDA31927C33C00CA4038 /* SkeletonAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonAnimation.h; path = src/spine/SkeletonAnimation.h; sourceTree = ""; }; - 43F7FDA41927C33C00CA4038 /* SkeletonAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonAnimation.m; path = src/spine/SkeletonAnimation.m; sourceTree = ""; }; - 43F7FDA51927C33C00CA4038 /* SkeletonRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonRenderer.h; path = src/spine/SkeletonRenderer.h; sourceTree = ""; }; - 43F7FDA61927C33C00CA4038 /* SkeletonRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonRenderer.m; path = src/spine/SkeletonRenderer.m; sourceTree = ""; }; - 43F7FDAA1927C34600CA4038 /* SpineboyExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpineboyExample.h; sourceTree = ""; }; - 43F7FDAB1927C34600CA4038 /* SpineboyExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpineboyExample.m; sourceTree = ""; }; - 43F7FDB31927D04200CA4038 /* GoblinsExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoblinsExample.h; sourceTree = ""; }; - 43F7FDB41927D04200CA4038 /* GoblinsExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GoblinsExample.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 4319B51016FF9B2600C1D7A9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 434D4819192A2B49003127B5 /* libcocos2d.a in Frameworks */, - 4319B51816FF9B2600C1D7A9 /* QuartzCore.framework in Frameworks */, - 4319B51A16FF9B2600C1D7A9 /* OpenGL.framework in Frameworks */, - 4319B51C16FF9B2600C1D7A9 /* OpenAL.framework in Frameworks */, - 4319B51E16FF9B2600C1D7A9 /* AudioToolbox.framework in Frameworks */, - 4319B52016FF9B2600C1D7A9 /* AppKit.framework in Frameworks */, - 4319B52216FF9B2600C1D7A9 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 4319B50816FF9B2600C1D7A9 = { - isa = PBXGroup; - children = ( - 4319B6BC16FF9D1700C1D7A9 /* Classes */, - 4319B7CB16FF9D3900C1D7A9 /* Resources */, - 43C32A0F170B1282004A9460 /* Resources-mac */, - 4319B6C616FF9D3900C1D7A9 /* cocos2d */, - 4319B51616FF9B2600C1D7A9 /* Frameworks */, - 4319B51416FF9B2600C1D7A9 /* Products */, - ); - sourceTree = ""; - }; - 4319B51416FF9B2600C1D7A9 /* Products */ = { - isa = PBXGroup; - children = ( - 4319B51316FF9B2600C1D7A9 /* SpineExample.app */, - ); - name = Products; - sourceTree = ""; - }; - 4319B51616FF9B2600C1D7A9 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 4319B51716FF9B2600C1D7A9 /* QuartzCore.framework */, - 4319B51916FF9B2600C1D7A9 /* OpenGL.framework */, - 4319B51B16FF9B2600C1D7A9 /* OpenAL.framework */, - 4319B51D16FF9B2600C1D7A9 /* AudioToolbox.framework */, - 4319B51F16FF9B2600C1D7A9 /* AppKit.framework */, - 4319B52116FF9B2600C1D7A9 /* Foundation.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 4319B6BC16FF9D1700C1D7A9 /* Classes */ = { - isa = PBXGroup; - children = ( - 4319B8921701168A00C1D7A9 /* spine-c */, - 4319B8931701168F00C1D7A9 /* spine-cocos2d-iphone */, - 43F7FDAA1927C34600CA4038 /* SpineboyExample.h */, - 43F7FDAB1927C34600CA4038 /* SpineboyExample.m */, - 43F7FDB31927D04200CA4038 /* GoblinsExample.h */, - 43F7FDB41927D04200CA4038 /* GoblinsExample.m */, - 43C32A10170B1295004A9460 /* AppDelegate.h */, - 43C32A11170B1295004A9460 /* AppDelegate.m */, - 43C32A19170B1295004A9460 /* main.m */, - 43C32A1A170B1295004A9460 /* Prefix.pch */, - ); - name = Classes; - path = example; - sourceTree = SOURCE_ROOT; - }; - 4319B6C616FF9D3900C1D7A9 /* cocos2d */ = { - isa = PBXGroup; - children = ( - 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */, - ); - name = cocos2d; - path = libs; - sourceTree = SOURCE_ROOT; - }; - 4319B7CB16FF9D3900C1D7A9 /* Resources */ = { - isa = PBXGroup; - children = ( - 431FF7E21C735D4300D52DF2 /* goblins-mesh.atlas */, - 431FF7E31C735D4300D52DF2 /* goblins-mesh.json */, - 431FF7E41C735D4300D52DF2 /* goblins-mesh.png */, - 43C32A30170D0A4D004A9460 /* spineboy.atlas */, - 43C32A31170D0A4D004A9460 /* spineboy.json */, - 43C32A32170D0A4D004A9460 /* spineboy.png */, - ); - path = Resources; - sourceTree = SOURCE_ROOT; - }; - 4319B8921701168A00C1D7A9 /* spine-c */ = { - isa = PBXGroup; - children = ( - 43F7FD581927C31700CA4038 /* Animation.c */, - 43F7FD891927C32800CA4038 /* Animation.h */, - 43F7FD591927C31700CA4038 /* AnimationState.c */, - 43F7FD8A1927C32800CA4038 /* AnimationState.h */, - 43F7FD5A1927C31700CA4038 /* AnimationStateData.c */, - 43F7FD8B1927C32800CA4038 /* AnimationStateData.h */, - 43F7FD5B1927C31700CA4038 /* Atlas.c */, - 43F7FD8C1927C32800CA4038 /* Atlas.h */, - 43F7FD5C1927C31700CA4038 /* AtlasAttachmentLoader.c */, - 43F7FD8D1927C32800CA4038 /* AtlasAttachmentLoader.h */, - 43F7FD5D1927C31700CA4038 /* Attachment.c */, - 43F7FD8E1927C32800CA4038 /* Attachment.h */, - 43F7FD5E1927C31700CA4038 /* AttachmentLoader.c */, - 43F7FD8F1927C32800CA4038 /* AttachmentLoader.h */, - 43F7FD5F1927C31700CA4038 /* Bone.c */, - 43F7FD901927C32800CA4038 /* Bone.h */, - 43F7FD601927C31700CA4038 /* BoneData.c */, - 43F7FD911927C32800CA4038 /* BoneData.h */, - 43F7FD611927C31700CA4038 /* BoundingBoxAttachment.c */, - 43F7FD921927C32800CA4038 /* BoundingBoxAttachment.h */, - 43F7FD621927C31700CA4038 /* Event.c */, - 43F7FD931927C32800CA4038 /* Event.h */, - 43F7FD631927C31700CA4038 /* EventData.c */, - 43F7FD941927C32800CA4038 /* EventData.h */, - 43F7FD641927C31700CA4038 /* extension.c */, - 43F7FD951927C32800CA4038 /* extension.h */, - 431FF7C91C735CA100D52DF2 /* IkConstraint.c */, - 431FF7D51C735CAE00D52DF2 /* IkConstraint.h */, - 431FF7D61C735CFE00D52DF2 /* IkConstraintData.c */, - 431FF7DE1C735D1500D52DF2 /* IkConstraintData.h */, - 43F7FD651927C31700CA4038 /* Json.c */, - 43F7FD661927C31700CA4038 /* Json.h */, - 43F7FD671927C31700CA4038 /* MeshAttachment.c */, - 43F7FD961927C32800CA4038 /* MeshAttachment.h */, - 43F7FD681927C31700CA4038 /* RegionAttachment.c */, - 43F7FD971927C32800CA4038 /* RegionAttachment.h */, - 43F7FD691927C31700CA4038 /* Skeleton.c */, - 43F7FD981927C32800CA4038 /* Skeleton.h */, - 43F7FD6A1927C31700CA4038 /* SkeletonBounds.c */, - 43F7FD991927C32800CA4038 /* SkeletonBounds.h */, - 43F7FD6B1927C31700CA4038 /* SkeletonData.c */, - 43F7FD9A1927C32800CA4038 /* SkeletonData.h */, - 43F7FD6C1927C31700CA4038 /* SkeletonJson.c */, - 43F7FD9B1927C32800CA4038 /* SkeletonJson.h */, - 43F7FD6D1927C31700CA4038 /* Skin.c */, - 43F7FD9C1927C32800CA4038 /* Skin.h */, - 43F7FD6F1927C31700CA4038 /* Slot.c */, - 43F7FD9E1927C32800CA4038 /* Slot.h */, - 43F7FD701927C31700CA4038 /* SlotData.c */, - 43F7FD9F1927C32800CA4038 /* SlotData.h */, - 43F7FDA01927C32800CA4038 /* spine.h */, - 431FF7D71C735CFE00D52DF2 /* TransformConstraint.c */, - 431FF7DF1C735D1500D52DF2 /* TransformConstraint.h */, - 431FF7D81C735CFE00D52DF2 /* TransformConstraintData.c */, - 431FF7E01C735D1500D52DF2 /* TransformConstraintData.h */, - 431FF7D91C735CFE00D52DF2 /* WeightedMeshAttachment.c */, - 431FF7E11C735D1500D52DF2 /* WeightedMeshAttachment.h */, - ); - name = "spine-c"; - path = ..; - sourceTree = ""; - }; - 4319B8931701168F00C1D7A9 /* spine-cocos2d-iphone */ = { - isa = PBXGroup; - children = ( - 43F7FDA11927C33C00CA4038 /* PolygonBatch.h */, - 43F7FDA21927C33C00CA4038 /* PolygonBatch.m */, - 43F7FDA31927C33C00CA4038 /* SkeletonAnimation.h */, - 43F7FDA41927C33C00CA4038 /* SkeletonAnimation.m */, - 43F7FDA51927C33C00CA4038 /* SkeletonRenderer.h */, - 43F7FDA61927C33C00CA4038 /* SkeletonRenderer.m */, - 43BFBE0D170A778A00ECBACB /* spine-cocos2d-iphone.m */, - 43BFBE0E170A778A00ECBACB /* spine-cocos2d-iphone.h */, - ); - name = "spine-cocos2d-iphone"; - path = ..; - sourceTree = ""; - }; - 434D47F8192A2B35003127B5 /* Products */ = { - isa = PBXGroup; - children = ( - 434D4808192A2B35003127B5 /* libcocos2d.a */, - 434D480A192A2B35003127B5 /* libcocos2d_box2d.a */, - 434D480C192A2B35003127B5 /* libcocos2d_chipmunk.a */, - 434D480E192A2B35003127B5 /* libCocosDenshion.a */, - 434D4810192A2B35003127B5 /* libCocosBuilderReader.a */, - 434D4812192A2B35003127B5 /* libbox2d.a */, - 434D4814192A2B35003127B5 /* libchipmunk.a */, - 434D4816192A2B35003127B5 /* libjsbindings.a */, - 434D4818192A2B35003127B5 /* libkazmath.a */, - ); - name = Products; - sourceTree = ""; - }; - 43C32A0F170B1282004A9460 /* Resources-mac */ = { - isa = PBXGroup; - children = ( - 43C32A12170B1295004A9460 /* English.lproj */, - 43C32A17170B1295004A9460 /* icon.icns */, - 43C32A18170B1295004A9460 /* Info.plist */, - ); - name = "Resources-mac"; - sourceTree = ""; - }; - 43C32A12170B1295004A9460 /* English.lproj */ = { - isa = PBXGroup; - children = ( - 43C32A13170B1295004A9460 /* InfoPlist.strings */, - 43C32A15170B1295004A9460 /* MainMenu.xib */, - ); - name = English.lproj; - path = "Resources-mac/English.lproj"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 4319B51216FF9B2600C1D7A9 /* SpineExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4319B6AC16FF9B2B00C1D7A9 /* Build configuration list for PBXNativeTarget "SpineExample" */; - buildPhases = ( - 4319B50F16FF9B2600C1D7A9 /* Sources */, - 4319B51016FF9B2600C1D7A9 /* Frameworks */, - 4319B51116FF9B2600C1D7A9 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SpineExample; - productName = "spine-cocos2d-iphone-mac"; - productReference = 4319B51316FF9B2600C1D7A9 /* SpineExample.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 4319B50A16FF9B2600C1D7A9 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0450; - ORGANIZATIONNAME = "Esoteric Software"; - }; - buildConfigurationList = 4319B50D16FF9B2600C1D7A9 /* Build configuration list for PBXProject "spine-cocos2d-iphone-mac" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - English, - ); - mainGroup = 4319B50816FF9B2600C1D7A9; - productRefGroup = 4319B51416FF9B2600C1D7A9 /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 434D47F8192A2B35003127B5 /* Products */; - ProjectRef = 434D47F7192A2B35003127B5 /* cocos2d-osx.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - 4319B51216FF9B2600C1D7A9 /* SpineExample */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 434D4808192A2B35003127B5 /* libcocos2d.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libcocos2d.a; - remoteRef = 434D4807192A2B35003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D480A192A2B35003127B5 /* libcocos2d_box2d.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libcocos2d_box2d.a; - remoteRef = 434D4809192A2B35003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D480C192A2B35003127B5 /* libcocos2d_chipmunk.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libcocos2d_chipmunk.a; - remoteRef = 434D480B192A2B35003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D480E192A2B35003127B5 /* libCocosDenshion.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libCocosDenshion.a; - remoteRef = 434D480D192A2B35003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D4810192A2B35003127B5 /* libCocosBuilderReader.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libCocosBuilderReader.a; - remoteRef = 434D480F192A2B35003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D4812192A2B35003127B5 /* libbox2d.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libbox2d.a; - remoteRef = 434D4811192A2B35003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D4814192A2B35003127B5 /* libchipmunk.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libchipmunk.a; - remoteRef = 434D4813192A2B35003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D4816192A2B35003127B5 /* libjsbindings.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libjsbindings.a; - remoteRef = 434D4815192A2B35003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - 434D4818192A2B35003127B5 /* libkazmath.a */ = { - isa = PBXReferenceProxy; - fileType = archive.ar; - path = libkazmath.a; - remoteRef = 434D4817192A2B35003127B5 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - 4319B51116FF9B2600C1D7A9 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 43C32A1C170B1295004A9460 /* InfoPlist.strings in Resources */, - 431FF7E61C735D4300D52DF2 /* goblins-mesh.json in Resources */, - 431FF7E71C735D4300D52DF2 /* goblins-mesh.png in Resources */, - 431FF7E51C735D4300D52DF2 /* goblins-mesh.atlas in Resources */, - 43C32A1D170B1295004A9460 /* MainMenu.xib in Resources */, - 43C32A1E170B1295004A9460 /* icon.icns in Resources */, - 43C32A36170D0A4D004A9460 /* spineboy.atlas in Resources */, - 43C32A37170D0A4D004A9460 /* spineboy.json in Resources */, - 43C32A38170D0A4D004A9460 /* spineboy.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 4319B50F16FF9B2600C1D7A9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 43BFBE0F170A778A00ECBACB /* spine-cocos2d-iphone.m in Sources */, - 43C32A1B170B1295004A9460 /* AppDelegate.m in Sources */, - 43C32A20170B1295004A9460 /* main.m in Sources */, - 43F7FD711927C31700CA4038 /* Animation.c in Sources */, - 43F7FD721927C31700CA4038 /* AnimationState.c in Sources */, - 43F7FD731927C31700CA4038 /* AnimationStateData.c in Sources */, - 43F7FD741927C31700CA4038 /* Atlas.c in Sources */, - 431FF7DB1C735CFE00D52DF2 /* TransformConstraint.c in Sources */, - 43F7FD751927C31700CA4038 /* AtlasAttachmentLoader.c in Sources */, - 43F7FD761927C31700CA4038 /* Attachment.c in Sources */, - 43F7FD771927C31700CA4038 /* AttachmentLoader.c in Sources */, - 43F7FD781927C31700CA4038 /* Bone.c in Sources */, - 431FF7DC1C735CFE00D52DF2 /* TransformConstraintData.c in Sources */, - 43F7FD791927C31700CA4038 /* BoneData.c in Sources */, - 43F7FD7A1927C31700CA4038 /* BoundingBoxAttachment.c in Sources */, - 43F7FD7B1927C31700CA4038 /* Event.c in Sources */, - 43F7FD7C1927C31700CA4038 /* EventData.c in Sources */, - 431FF7DA1C735CFE00D52DF2 /* IkConstraintData.c in Sources */, - 43F7FD7D1927C31700CA4038 /* extension.c in Sources */, - 431FF7CA1C735CA100D52DF2 /* IkConstraint.c in Sources */, - 43F7FD7E1927C31700CA4038 /* Json.c in Sources */, - 43F7FD7F1927C31700CA4038 /* MeshAttachment.c in Sources */, - 43F7FD801927C31700CA4038 /* RegionAttachment.c in Sources */, - 43F7FD811927C31700CA4038 /* Skeleton.c in Sources */, - 431FF7DD1C735CFE00D52DF2 /* WeightedMeshAttachment.c in Sources */, - 43F7FD821927C31700CA4038 /* SkeletonBounds.c in Sources */, - 43F7FD831927C31700CA4038 /* SkeletonData.c in Sources */, - 43F7FD841927C31700CA4038 /* SkeletonJson.c in Sources */, - 43F7FD851927C31700CA4038 /* Skin.c in Sources */, - 43F7FD871927C31700CA4038 /* Slot.c in Sources */, - 43F7FD881927C31700CA4038 /* SlotData.c in Sources */, - 43F7FDA71927C33C00CA4038 /* PolygonBatch.m in Sources */, - 43F7FDA81927C33C00CA4038 /* SkeletonAnimation.m in Sources */, - 43F7FDA91927C33C00CA4038 /* SkeletonRenderer.m in Sources */, - 43F7FDAC1927C34600CA4038 /* SpineboyExample.m in Sources */, - 43F7FDB51927D04200CA4038 /* GoblinsExample.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXVariantGroup section */ - 43C32A13170B1295004A9460 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 43C32A14170B1295004A9460 /* English */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - 43C32A15170B1295004A9460 /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - 43C32A16170B1295004A9460 /* English */, - ); - name = MainMenu.xib; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 4319B6AA16FF9B2B00C1D7A9 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - DEBUG, - "COCOS2D_DEBUG=1", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.7; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - 4319B6AB16FF9B2B00C1D7A9 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_ENABLE_OBJC_EXCEPTIONS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - NDEBUG, - "NS_BLOCK_ASSERTIONS=1", - ); - GCC_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.7; - SDKROOT = macosx; - }; - name = Release; - }; - 4319B6AD16FF9B2B00C1D7A9 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ENABLE_OBJC_ARC = NO; - COPY_PHASE_STRIP = NO; - GCC_DYNAMIC_NO_PIC = NO; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Resources-mac/Prefix.pch"; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - HEADER_SEARCH_PATHS = ( - "\"cocos2d/external/kazmath/include\"", - "\"src\"", - "\"../../spine-c/include\"", - "\"cocos2d/cocos2d\"/**", - ); - INFOPLIST_FILE = "Resources-mac/Info.plist"; - OTHER_CFLAGS = ""; - OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; - OTHER_LDFLAGS = ( - "-lz", - "-lsqlite3", - "-ObjC", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - 4319B6AE16FF9B2B00C1D7A9 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ENABLE_OBJC_ARC = NO; - COPY_PHASE_STRIP = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "Resources-mac/Prefix.pch"; - GCC_WARN_64_TO_32_BIT_CONVERSION = NO; - HEADER_SEARCH_PATHS = ( - "\"cocos2d/external/kazmath/include\"", - "\"src\"", - "\"../../spine-c/include\"", - "\"cocos2d/cocos2d\"/**", - ); - INFOPLIST_FILE = "Resources-mac/Info.plist"; - OTHER_CFLAGS = ""; - OTHER_CPLUSPLUSFLAGS = "$(OTHER_CFLAGS)"; - OTHER_LDFLAGS = ( - "-lz", - "-lsqlite3", - "-ObjC", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 4319B50D16FF9B2600C1D7A9 /* Build configuration list for PBXProject "spine-cocos2d-iphone-mac" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4319B6AA16FF9B2B00C1D7A9 /* Debug */, - 4319B6AB16FF9B2B00C1D7A9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4319B6AC16FF9B2B00C1D7A9 /* Build configuration list for PBXNativeTarget "SpineExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 4319B6AD16FF9B2B00C1D7A9 /* Debug */, - 4319B6AE16FF9B2B00C1D7A9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 4319B50A16FF9B2600C1D7A9 /* Project object */; -} diff --git a/spine-cocos2d-iphone/2/src/spine/PolygonBatch.h b/spine-cocos2d-iphone/2/src/spine/PolygonBatch.h deleted file mode 100644 index d85419d04..000000000 --- a/spine-cocos2d-iphone/2/src/spine/PolygonBatch.h +++ /dev/null @@ -1,52 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import - -@interface spPolygonBatch : NSObject { - int _capacity; - ccV2F_C4B_T2F* _vertices; - int _verticesCount; - GLushort* _triangles; - int _trianglesCount; - CCTexture2D* _texture; -} - -+ (id) createWithCapacity:(int)capacity; - -- (id) initWithCapacity:(int)capacity; - -- (void) add:(CCTexture2D*)texture vertices:(const float*)vertices uvs:(const float*)uvs - verticesCount:(int)verticesCount triangles:(const int*)triangles trianglesCount:(int)trianglesCount - color:(ccColor4B*)color; -- (void) flush; - -@end diff --git a/spine-cocos2d-iphone/2/src/spine/PolygonBatch.m b/spine-cocos2d-iphone/2/src/spine/PolygonBatch.m deleted file mode 100644 index 28d36e29e..000000000 --- a/spine-cocos2d-iphone/2/src/spine/PolygonBatch.m +++ /dev/null @@ -1,107 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import -#import -#import - -@implementation spPolygonBatch - -+ (id) createWithCapacity:(int)capacity { - return [[(spPolygonBatch*)[self alloc] initWithCapacity:capacity] autorelease]; -} - -- (id) initWithCapacity:(int)capacity { - // 32767 is max index, so 32767 / 3 - (32767 / 3 % 3) = 10920. - NSAssert(capacity <= 10920, @"capacity cannot be > 10920"); - NSAssert(capacity >= 0, @"capacity cannot be < 0"); - - self = [super init]; - if (!self) return nil; - - _capacity = capacity; - _vertices = MALLOC(ccV2F_C4B_T2F, capacity); - _triangles = MALLOC(GLushort, capacity * 3); - - return self; -} - -- (void) dealloc { - FREE(_vertices); - FREE(_triangles); - [super dealloc]; -} - -- (void) add:(CCTexture2D*)addTexture vertices:(const float*)addVertices uvs:(const float*)uvs - verticesCount:(int)addVerticesCount triangles:(const int*)addTriangles trianglesCount:(int)addTrianglesCount - color:(ccColor4B*)color { - - if ( - addTexture != _texture - || _verticesCount + (addVerticesCount >> 1) > _capacity - || _trianglesCount + addTrianglesCount > _capacity * 3) { - [self flush]; - _texture = addTexture; - } - - for (int i = 0; i < addTrianglesCount; ++i, ++_trianglesCount) - _triangles[_trianglesCount] = addTriangles[i] + _verticesCount; - - for (int i = 0; i < addVerticesCount; i += 2, ++_verticesCount) { - ccV2F_C4B_T2F* vertex = _vertices + _verticesCount; - vertex->vertices.x = addVertices[i]; - vertex->vertices.y = addVertices[i + 1]; - vertex->colors = *color; - vertex->texCoords.u = uvs[i]; - vertex->texCoords.v = uvs[i + 1]; - } -} - -- (void) flush { - if (!_verticesCount) return; - - ccGLBindTexture2D(_texture.name); - glEnableVertexAttribArray(kCCVertexAttrib_Position); - glEnableVertexAttribArray(kCCVertexAttrib_Color); - glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); - glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, sizeof(ccV2F_C4B_T2F), &_vertices[0].vertices); - glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV2F_C4B_T2F), &_vertices[0].colors); - glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV2F_C4B_T2F), &_vertices[0].texCoords); - - glDrawElements(GL_TRIANGLES, _trianglesCount, GL_UNSIGNED_SHORT, _triangles); - - _verticesCount = 0; - _trianglesCount = 0; - - CHECK_GL_ERROR_DEBUG(); -} - -@end diff --git a/spine-cocos2d-iphone/2/src/spine/SkeletonAnimation.m b/spine-cocos2d-iphone/2/src/spine/SkeletonAnimation.m deleted file mode 100644 index aa61ed952..000000000 --- a/spine-cocos2d-iphone/2/src/spine/SkeletonAnimation.m +++ /dev/null @@ -1,256 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import -#import -#import - -static void animationCallback (spAnimationState* state, int trackIndex, spEventType type, spEvent* event, int loopCount) { - [(SkeletonAnimation*)state->rendererObject onAnimationStateEvent:trackIndex type:type event:event loopCount:loopCount]; -} - -void trackEntryCallback (spAnimationState* state, int trackIndex, spEventType type, spEvent* event, int loopCount) { - [(SkeletonAnimation*)state->rendererObject onTrackEntryEvent:trackIndex type:type event:event loopCount:loopCount]; -} - -typedef struct _TrackEntryListeners { - spStartListener startListener; - spEndListener endListener; - spCompleteListener completeListener; - spEventListener eventListener; -} _TrackEntryListeners; - -static _TrackEntryListeners* getListeners (spTrackEntry* entry) { - if (!entry->rendererObject) { - entry->rendererObject = NEW(_TrackEntryListeners); - entry->listener = trackEntryCallback; - } - return (_TrackEntryListeners*)entry->rendererObject; -} - -void disposeTrackEntry (spTrackEntry* entry) { - if (entry->rendererObject) { - _TrackEntryListeners* listeners = (_TrackEntryListeners*)entry->rendererObject; - [listeners->startListener release]; - [listeners->endListener release]; - [listeners->completeListener release]; - [listeners->eventListener release]; - FREE(listeners); - } - _spTrackEntry_dispose(entry); -} - -// - -@interface SkeletonAnimation (Private) -- (void) initialize; -@end - -@implementation SkeletonAnimation - -@synthesize state = _state; -@synthesize timeScale = _timeScale; -@synthesize startListener = _startListener; -@synthesize endListener = _endListener; -@synthesize completeListener = _completeListener; -@synthesize eventListener = _eventListener; - -+ (id) skeletonWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData { - return [[[self alloc] initWithData:skeletonData ownsSkeletonData:ownsSkeletonData] autorelease]; -} - -+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(spAtlas*)atlas scale:(float)scale { - return [[[self alloc] initWithFile:skeletonDataFile atlas:atlas scale:scale] autorelease]; -} - -+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale { - return [[[self alloc] initWithFile:skeletonDataFile atlasFile:atlasFile scale:scale] autorelease]; -} - -- (void) initialize { - _ownsAnimationStateData = true; - _timeScale = 1; - - _state = spAnimationState_create(spAnimationStateData_create(_skeleton->data)); - _state->rendererObject = self; - _state->listener = animationCallback; - - _spAnimationState* stateInternal = (_spAnimationState*)_state; - stateInternal->disposeTrackEntry = disposeTrackEntry; -} - -- (id) initWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData { - self = [super initWithData:skeletonData ownsSkeletonData:ownsSkeletonData]; - if (!self) return nil; - - [self initialize]; - - return self; -} - -- (id) initWithFile:(NSString*)skeletonDataFile atlas:(spAtlas*)atlas scale:(float)scale { - self = [super initWithFile:skeletonDataFile atlas:atlas scale:scale]; - if (!self) return nil; - - [self initialize]; - - return self; -} - -- (id) initWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale { - self = [super initWithFile:skeletonDataFile atlasFile:atlasFile scale:scale]; - if (!self) return nil; - - [self initialize]; - - return self; -} - -- (void) dealloc { - if (_ownsAnimationStateData) spAnimationStateData_dispose(_state->data); - spAnimationState_dispose(_state); - - [_startListener release]; - [_endListener release]; - [_completeListener release]; - [_eventListener release]; - - [super dealloc]; -} - -- (void) update:(ccTime)deltaTime { - deltaTime *= _timeScale; - spSkeleton_update(_skeleton, deltaTime); - spAnimationState_update(_state, deltaTime); - spAnimationState_apply(_state, _skeleton); - spSkeleton_updateWorldTransform(_skeleton); -} - -- (void) setAnimationStateData:(spAnimationStateData*)stateData { - NSAssert(stateData, @"stateData cannot be null."); - - if (_ownsAnimationStateData) spAnimationStateData_dispose(_state->data); - spAnimationState_dispose(_state); - - _ownsAnimationStateData = false; - _state = spAnimationState_create(stateData); - _state->rendererObject = self; - _state->listener = animationCallback; -} - -- (void) setMixFrom:(NSString*)fromAnimation to:(NSString*)toAnimation duration:(float)duration { - spAnimationStateData_setMixByName(_state->data, [fromAnimation UTF8String], [toAnimation UTF8String], duration); -} - -- (spTrackEntry*) setAnimationForTrack:(int)trackIndex name:(NSString*)name loop:(bool)loop { - spAnimation* animation = spSkeletonData_findAnimation(_skeleton->data, [name UTF8String]); - if (!animation) { - CCLOG(@"Spine: Animation not found: %@", name); - return 0; - } - return spAnimationState_setAnimation(_state, trackIndex, animation, loop); -} - -- (spTrackEntry*) addAnimationForTrack:(int)trackIndex name:(NSString*)name loop:(bool)loop afterDelay:(int)delay { - spAnimation* animation = spSkeletonData_findAnimation(_skeleton->data, [name UTF8String]); - if (!animation) { - CCLOG(@"Spine: Animation not found: %@", name); - return 0; - } - return spAnimationState_addAnimation(_state, trackIndex, animation, loop, delay); -} - -- (spTrackEntry*) getCurrentForTrack:(int)trackIndex { - return spAnimationState_getCurrent(_state, trackIndex); -} - -- (void) clearTracks { - spAnimationState_clearTracks(_state); -} - -- (void) clearTrack:(int)trackIndex { - spAnimationState_clearTrack(_state, trackIndex); -} - -- (void) onAnimationStateEvent:(int)trackIndex type:(spEventType)type event:(spEvent*)event loopCount:(int)loopCount { - switch (type) { - case SP_ANIMATION_START: - if (_startListener) _startListener(trackIndex); - break; - case SP_ANIMATION_END: - if (_endListener) _endListener(trackIndex); - break; - case SP_ANIMATION_COMPLETE: - if (_completeListener) _completeListener(trackIndex, loopCount); - break; - case SP_ANIMATION_EVENT: - if (_eventListener) _eventListener(trackIndex, event); - break; - } -} - -- (void) onTrackEntryEvent:(int)trackIndex type:(spEventType)type event:(spEvent*)event loopCount:(int)loopCount { - spTrackEntry* entry = spAnimationState_getCurrent(_state, trackIndex); - if (!entry->rendererObject) return; - _TrackEntryListeners* listeners = (_TrackEntryListeners*)entry->rendererObject; - switch (type) { - case SP_ANIMATION_START: - if (listeners->startListener) listeners->startListener(trackIndex); - break; - case SP_ANIMATION_END: - if (listeners->endListener) listeners->endListener(trackIndex); - break; - case SP_ANIMATION_COMPLETE: - if (listeners->completeListener) listeners->completeListener(trackIndex, loopCount); - break; - case SP_ANIMATION_EVENT: - if (listeners->eventListener) listeners->eventListener(trackIndex, event); - break; - } -} - -- (void) setListenerForEntry:(spTrackEntry*)entry onStart:(spStartListener)listener { - getListeners(entry)->startListener = [listener copy]; -} - -- (void) setListenerForEntry:(spTrackEntry*)entry onEnd:(spEndListener)listener { - getListeners(entry)->endListener = [listener copy]; -} - -- (void) setListenerForEntry:(spTrackEntry*)entry onComplete:(spCompleteListener)listener { - getListeners(entry)->completeListener = [listener copy]; -} - -- (void) setListenerForEntry:(spTrackEntry*)entry onEvent:(spEventListener)listener { - getListeners(entry)->eventListener = [listener copy]; -} - -@end diff --git a/spine-cocos2d-iphone/2/src/spine/SkeletonRenderer.h b/spine-cocos2d-iphone/2/src/spine/SkeletonRenderer.h deleted file mode 100644 index eaa67ddc5..000000000 --- a/spine-cocos2d-iphone/2/src/spine/SkeletonRenderer.h +++ /dev/null @@ -1,93 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import -#import "cocos2d.h" - -@class spPolygonBatch; - -/** Draws a skeleton. */ -@interface SkeletonRenderer : CCNodeRGBA { - spSkeleton* _skeleton; - spBone* _rootBone; - bool _debugSlots; - bool _debugBones; - bool _premultipliedAlpha; - ccBlendFunc _blendFunc; - - bool _ownsSkeletonData; - spAtlas* _atlas; - spPolygonBatch* batch; - float* worldVertices; -} - -+ (id) skeletonWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData; -+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(spAtlas*)atlas scale:(float)scale; -+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale; - -- (id) initWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData; -- (id) initWithFile:(NSString*)skeletonDataFile atlas:(spAtlas*)atlas scale:(float)scale; -- (id) initWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale; - -- (CCTexture2D*) getTextureForRegion:(spRegionAttachment*)attachment; -- (CCTexture2D*) getTextureForMesh:(spMeshAttachment*)attachment; -- (CCTexture2D*) getTextureForWeightedMesh:(spWeightedMeshAttachment*)attachment; - -// --- Convenience methods for common Skeleton_* functions. -- (void) updateWorldTransform; - -- (void) setToSetupPose; -- (void) setBonesToSetupPose; -- (void) setSlotsToSetupPose; - -/* Returns 0 if the bone was not found. */ -- (spBone*) findBone:(NSString*)boneName; - -/* Returns 0 if the slot was not found. */ -- (spSlot*) findSlot:(NSString*)slotName; - -/* Sets the skin used to look up attachments not found in the SkeletonData defaultSkin. Attachments from the new skin are - * attached if the corresponding attachment from the old skin was attached. If there was no old skin, each slot's setup mode - * attachment is attached from the new skin. Returns false if the skin was not found. - * @param skin May be 0.*/ -- (bool) setSkin:(NSString*)skinName; - -/* Returns 0 if the slot or attachment was not found. */ -- (spAttachment*) getAttachment:(NSString*)slotName attachmentName:(NSString*)attachmentName; -/* Returns false if the slot or attachment was not found. */ -- (bool) setAttachment:(NSString*)slotName attachmentName:(NSString*)attachmentName; - -@property (nonatomic, readonly) spSkeleton* skeleton; -@property (nonatomic) bool debugSlots; -@property (nonatomic) bool debugBones; -@property (nonatomic) spBone* rootBone; - -@end diff --git a/spine-cocos2d-iphone/2/src/spine/SkeletonRenderer.m b/spine-cocos2d-iphone/2/src/spine/SkeletonRenderer.m deleted file mode 100644 index 71a6aed03..000000000 --- a/spine-cocos2d-iphone/2/src/spine/SkeletonRenderer.m +++ /dev/null @@ -1,370 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import -#import -#import -#import - -static const int quadTriangles[6] = {0, 1, 2, 2, 3, 0}; - -@interface SkeletonRenderer (Private) -- (void) initialize:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData; -@end - -@implementation SkeletonRenderer - -@synthesize skeleton = _skeleton; -@synthesize rootBone = _rootBone; -@synthesize debugSlots = _debugSlots; -@synthesize debugBones = _debugBones; - -+ (id) skeletonWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData { - return [[[self alloc] initWithData:skeletonData ownsSkeletonData:ownsSkeletonData] autorelease]; -} - -+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(spAtlas*)atlas scale:(float)scale { - return [[[self alloc] initWithFile:skeletonDataFile atlas:atlas scale:scale] autorelease]; -} - -+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale { - return [[[self alloc] initWithFile:skeletonDataFile atlasFile:atlasFile scale:scale] autorelease]; -} - -- (void) initialize:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData { - _ownsSkeletonData = ownsSkeletonData; - - worldVertices = MALLOC(float, 1000); // Max number of vertices per mesh. - - batch = [[spPolygonBatch createWithCapacity:2000] retain]; // Max number of vertices and triangles per batch. - - _skeleton = spSkeleton_create(skeletonData); - _rootBone = _skeleton->bones[0]; - - _blendFunc.src = GL_ONE; - _blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA; - [self setOpacityModifyRGB:YES]; - - [self setShaderProgram:[[CCShaderCache sharedShaderCache] programForKey:kCCShader_PositionTextureColor]]; - [self scheduleUpdate]; -} - -- (id) initWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData { - NSAssert(skeletonData, @"skeletonData cannot be null."); - - self = [super init]; - if (!self) return nil; - - [self initialize:skeletonData ownsSkeletonData:ownsSkeletonData]; - - return self; -} - -- (id) initWithFile:(NSString*)skeletonDataFile atlas:(spAtlas*)atlas scale:(float)scale { - self = [super init]; - if (!self) return nil; - - spSkeletonJson* json = spSkeletonJson_create(atlas); - json->scale = scale; - spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, [skeletonDataFile UTF8String]); - NSAssert(skeletonData, ([NSString stringWithFormat:@"Error reading skeleton data file: %@\nError: %s", skeletonDataFile, json->error])); - spSkeletonJson_dispose(json); - if (!skeletonData) return 0; - - [self initialize:skeletonData ownsSkeletonData:YES]; - - return self; -} - -- (id) initWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale { - self = [super init]; - if (!self) return nil; - - _atlas = spAtlas_createFromFile([atlasFile UTF8String], 0); - NSAssert(_atlas, ([NSString stringWithFormat:@"Error reading atlas file: %@", atlasFile])); - if (!_atlas) return 0; - - spSkeletonJson* json = spSkeletonJson_create(_atlas); - json->scale = scale; - spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, [skeletonDataFile UTF8String]); - NSAssert(skeletonData, ([NSString stringWithFormat:@"Error reading skeleton data file: %@\nError: %s", skeletonDataFile, json->error])); - spSkeletonJson_dispose(json); - if (!skeletonData) return 0; - - [self initialize:skeletonData ownsSkeletonData:YES]; - - return self; -} - -- (void) dealloc { - if (_ownsSkeletonData) spSkeletonData_dispose(_skeleton->data); - if (_atlas) spAtlas_dispose(_atlas); - spSkeleton_dispose(_skeleton); - [batch release]; - FREE(worldVertices); - [super dealloc]; -} - -- (void) draw { - CC_NODE_DRAW_SETUP(); - ccGLBindVAO(0); - - ccColor3B nodeColor = self.color; - _skeleton->r = nodeColor.r / (float)255; - _skeleton->g = nodeColor.g / (float)255; - _skeleton->b = nodeColor.b / (float)255; - _skeleton->a = self.opacity / (float)255; - - int blendMode = -1; - ccColor4B color; - const float* uvs = 0; - int verticesCount = 0; - const int* triangles = 0; - int trianglesCount = 0; - float r = 0, g = 0, b = 0, a = 0; - for (int i = 0, n = _skeleton->slotsCount; i < n; i++) { - spSlot* slot = _skeleton->drawOrder[i]; - if (!slot->attachment) continue; - CCTexture2D *texture = 0; - switch (slot->attachment->type) { - case SP_ATTACHMENT_REGION: { - spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; - spRegionAttachment_computeWorldVertices(attachment, slot->bone, worldVertices); - texture = [self getTextureForRegion:attachment]; - uvs = attachment->uvs; - verticesCount = 8; - triangles = quadTriangles; - trianglesCount = 6; - r = attachment->r; - g = attachment->g; - b = attachment->b; - a = attachment->a; - break; - } - case SP_ATTACHMENT_MESH: { - spMeshAttachment* attachment = (spMeshAttachment*)slot->attachment; - spMeshAttachment_computeWorldVertices(attachment, slot, worldVertices); - texture = [self getTextureForMesh:attachment]; - uvs = attachment->uvs; - verticesCount = attachment->verticesCount; - triangles = attachment->triangles; - trianglesCount = attachment->trianglesCount; - r = attachment->r; - g = attachment->g; - b = attachment->b; - a = attachment->a; - break; - } - case SP_ATTACHMENT_WEIGHTED_MESH: { - spWeightedMeshAttachment* attachment = (spWeightedMeshAttachment*)slot->attachment; - spWeightedMeshAttachment_computeWorldVertices(attachment, slot, worldVertices); - texture = [self getTextureForWeightedMesh:attachment]; - uvs = attachment->uvs; - verticesCount = attachment->uvsCount; - triangles = attachment->triangles; - trianglesCount = attachment->trianglesCount; - r = attachment->r; - g = attachment->g; - b = attachment->b; - a = attachment->a; - break; - } - default: ; - } - if (texture) { - if (slot->data->blendMode != blendMode) { - [batch flush]; - blendMode = slot->data->blendMode; - switch (slot->data->blendMode) { - case SP_BLEND_MODE_ADDITIVE: - ccGLBlendFunc(_premultipliedAlpha ? GL_ONE : GL_SRC_ALPHA, GL_ONE); - break; - case SP_BLEND_MODE_MULTIPLY: - ccGLBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA); - break; - case SP_BLEND_MODE_SCREEN: - ccGLBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); - break; - default: - ccGLBlendFunc(_premultipliedAlpha ? GL_ONE : GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - } - } - color.a = _skeleton->a * slot->a * a * 255; - float multiplier = _premultipliedAlpha ? color.a : 255; - color.r = _skeleton->r * slot->r * r * multiplier; - color.g = _skeleton->g * slot->g * g * multiplier; - color.b = _skeleton->b * slot->b * b * multiplier; - [batch add:texture vertices:worldVertices uvs:uvs verticesCount:verticesCount - triangles:triangles trianglesCount:trianglesCount color:&color]; - } - } - [batch flush]; - - if (_debugSlots) { - // Slots. - ccDrawColor4B(0, 0, 255, 255); - glLineWidth(1); - CGPoint points[4]; - for (int i = 0, n = _skeleton->slotsCount; i < n; i++) { - spSlot* slot = _skeleton->drawOrder[i]; - if (!slot->attachment || slot->attachment->type != SP_ATTACHMENT_REGION) continue; - spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; - spRegionAttachment_computeWorldVertices(attachment, slot->bone, worldVertices); - points[0] = ccp(worldVertices[0], worldVertices[1]); - points[1] = ccp(worldVertices[2], worldVertices[3]); - points[2] = ccp(worldVertices[4], worldVertices[5]); - points[3] = ccp(worldVertices[6], worldVertices[7]); - ccDrawPoly(points, 4, true); - } - } - if (_debugBones) { - // Bone lengths. - glLineWidth(2); - ccDrawColor4B(255, 0, 0, 255); - for (int i = 0, n = _skeleton->bonesCount; i < n; i++) { - spBone *bone = _skeleton->bones[i]; - float x = bone->data->length * bone->a + bone->worldX; - float y = bone->data->length * bone->c + bone->worldY; - ccDrawLine(ccp(bone->worldX, bone->worldY), ccp(x, y)); - } - // Bone origins. - ccPointSize(4); - ccDrawColor4B(0, 0, 255, 255); // Root bone is blue. - for (int i = 0, n = _skeleton->bonesCount; i < n; i++) { - spBone *bone = _skeleton->bones[i]; - ccDrawPoint(ccp(bone->worldX, bone->worldY)); - if (i == 0) ccDrawColor4B(0, 255, 0, 255); - } - } -} - -- (CCTexture2D*) getTextureForRegion:(spRegionAttachment*)attachment { - return (CCTexture2D*)((spAtlasRegion*)attachment->rendererObject)->page->rendererObject; -} - -- (CCTexture2D*) getTextureForMesh:(spMeshAttachment*)attachment { - return (CCTexture2D*)((spAtlasRegion*)attachment->rendererObject)->page->rendererObject; -} - -- (CCTexture2D*) getTextureForWeightedMesh:(spWeightedMeshAttachment*)attachment { - return (CCTexture2D*)((spAtlasRegion*)attachment->rendererObject)->page->rendererObject; -} - -- (CGRect) boundingBox { - float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN; - float scaleX = self.scaleX, scaleY = self.scaleY; - for (int i = 0; i < _skeleton->slotsCount; ++i) { - spSlot* slot = _skeleton->slots[i]; - if (!slot->attachment) continue; - int verticesCount; - if (slot->attachment->type == SP_ATTACHMENT_REGION) { - spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; - spRegionAttachment_computeWorldVertices(attachment, slot->bone, worldVertices); - verticesCount = 8; - } else if (slot->attachment->type == SP_ATTACHMENT_MESH) { - spMeshAttachment* mesh = (spMeshAttachment*)slot->attachment; - spMeshAttachment_computeWorldVertices(mesh, slot, worldVertices); - verticesCount = mesh->verticesCount; - } else if (slot->attachment->type == SP_ATTACHMENT_WEIGHTED_MESH) { - spWeightedMeshAttachment* mesh = (spWeightedMeshAttachment*)slot->attachment; - spWeightedMeshAttachment_computeWorldVertices(mesh, slot, worldVertices); - verticesCount = mesh->uvsCount; - } else - continue; - for (int ii = 0; ii < verticesCount; ii += 2) { - float x = worldVertices[ii] * scaleX, y = worldVertices[ii + 1] * scaleY; - minX = min(minX, x); - minY = min(minY, y); - maxX = max(maxX, x); - maxY = max(maxY, y); - } - } - minX = self.position.x + minX; - minY = self.position.y + minY; - maxX = self.position.x + maxX; - maxY = self.position.y + maxY; - return CGRectMake(minX, minY, maxX - minX, maxY - minY); -} - -// --- Convenience methods for Skeleton_* functions. - -- (void) updateWorldTransform { - spSkeleton_updateWorldTransform(_skeleton); -} - -- (void) setToSetupPose { - spSkeleton_setToSetupPose(_skeleton); -} -- (void) setBonesToSetupPose { - spSkeleton_setBonesToSetupPose(_skeleton); -} -- (void) setSlotsToSetupPose { - spSkeleton_setSlotsToSetupPose(_skeleton); -} - -- (spBone*) findBone:(NSString*)boneName { - return spSkeleton_findBone(_skeleton, [boneName UTF8String]); -} - -- (spSlot*) findSlot:(NSString*)slotName { - return spSkeleton_findSlot(_skeleton, [slotName UTF8String]); -} - -- (bool) setSkin:(NSString*)skinName { - return (bool)spSkeleton_setSkinByName(_skeleton, skinName ? [skinName UTF8String] : 0); -} - -- (spAttachment*) getAttachment:(NSString*)slotName attachmentName:(NSString*)attachmentName { - return spSkeleton_getAttachmentForSlotName(_skeleton, [slotName UTF8String], [attachmentName UTF8String]); -} -- (bool) setAttachment:(NSString*)slotName attachmentName:(NSString*)attachmentName { - return (bool)spSkeleton_setAttachment(_skeleton, [slotName UTF8String], [attachmentName UTF8String]); -} - -// --- CCBlendProtocol - -- (void) setBlendFunc:(ccBlendFunc)func { - self.blendFunc = func; -} - -- (ccBlendFunc) blendFunc { - return _blendFunc; -} - -- (void) setOpacityModifyRGB:(BOOL)value { - _premultipliedAlpha = value; -} - -- (BOOL) doesOpacityModifyRGB { - return _premultipliedAlpha; -} - -@end diff --git a/spine-cocos2d-iphone/2/src/spine/spine-cocos2d-iphone.m b/spine-cocos2d-iphone/2/src/spine/spine-cocos2d-iphone.m deleted file mode 100644 index 45e53f5d7..000000000 --- a/spine-cocos2d-iphone/2/src/spine/spine-cocos2d-iphone.m +++ /dev/null @@ -1,49 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import -#import - -void _spAtlasPage_createTexture (spAtlasPage* self, const char* path) { - CCTexture2D* texture = [[[CCTextureCache sharedTextureCache] addImage:@(path)] retain]; - self->rendererObject = texture; - CGSize size = texture.contentSizeInPixels; - self->width = size.width; - self->height = size.height; -} - -void _spAtlasPage_disposeTexture (spAtlasPage* self) { - [(CCTexture2D*)self->rendererObject release]; -} - -char* _spUtil_readFile (const char* path, int* length) { - return _readFile([[[CCFileUtils sharedFileUtils] fullPathForFilename:@(path)] UTF8String], length); -} diff --git a/spine-cocos2d-iphone/3/README.md b/spine-cocos2d-iphone/3/README.md deleted file mode 100644 index 6e759d221..000000000 --- a/spine-cocos2d-iphone/3/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# spine-cocos2d-iphone v3.0 - -The spine-cocos2d-iphone runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [cocos2d-iphone](http://www.cocos2d-iphone.org/). spine-cocos2d-iphone is based on [spine-c](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-c). - -## Licensing - -This Spine Runtime may only be used for personal or internal use, typically to evaluate Spine before purchasing. If you would like to incorporate a Spine Runtime into your applications, distribute software containing a Spine Runtime, or modify a Spine Runtime, then you will need a valid [Spine license](https://esotericsoftware.com/spine-purchase). Please see the [Spine Runtimes Software License](https://github.com/EsotericSoftware/spine-runtimes/blob/master/LICENSE) for detailed information. - -The Spine Runtimes are developed with the intent to be used with data exported from Spine. By purchasing Spine, `Section 2` of the [Spine Software License](https://esotericsoftware.com/files/license.txt) grants the right to create and distribute derivative works of the Spine Runtimes. - -## Spine version - -spine-cocos2d-iphone v3 works with data exported from Spine 3.1.08. Updating spine-cocos2d-iphone v3 to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. - -spine-cocos2d-iphone v3 supports all Spine features. - -spine-cocos2d-iphone v3 does not yet support loading the binary format. - -## Setup - -1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip). -1. Place the contents of a cocos2d version 3.1 (or higher) distribution into the `spine-cocos2d-iphone/3/cocos2d` directory. -1. Open the Xcode project file for iOS or Mac from the `spine-cocos2d-iphone/3` directory. - -Alternatively, the contents of the `spine-c/src`, `spine-c/include` and `spine-cocos2d-iphone/3/src` directories can be copied into your project. Be sure your header search path will find the contents of the `spine-c/include` and `spine-cocos2d-iphone/3/src` directories. Note that the includes use `spine/Xxx.h`, so the `spine` directory cannot be omitted when copying the files. - -## Examples - -[Spineboy](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2d-iphone/3/example/SpineboyExample.m) -[Golbins](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2d-iphone/3/example/GoblinsExample.m) - -## Links - -[podspec](https://github.com/ldomaradzki/spine-runtimes/blob/master/Spine-Cocos2d-iPhone.podspec) (maintained externally) diff --git a/spine-cocos2d-iphone/3/Resources-ios/Default-568h@2x.png b/spine-cocos2d-iphone/3/Resources-ios/Default-568h@2x.png deleted file mode 100644 index 24728b3a5..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-ios/Default-568h@2x.png and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-ios/Default-Landscape~ipad.png b/spine-cocos2d-iphone/3/Resources-ios/Default-Landscape~ipad.png deleted file mode 100644 index 82aa50e93..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-ios/Default-Landscape~ipad.png and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-ios/Default.png b/spine-cocos2d-iphone/3/Resources-ios/Default.png deleted file mode 100644 index b3de96822..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-ios/Default.png and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-ios/Default@2x.png b/spine-cocos2d-iphone/3/Resources-ios/Default@2x.png deleted file mode 100644 index 075ae87f0..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-ios/Default@2x.png and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-ios/Icon-72.png b/spine-cocos2d-iphone/3/Resources-ios/Icon-72.png deleted file mode 100644 index 5b1ce47ad..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-ios/Icon-72.png and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-ios/Icon-Small-50.png b/spine-cocos2d-iphone/3/Resources-ios/Icon-Small-50.png deleted file mode 100644 index bf1f0c52f..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-ios/Icon-Small-50.png and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-ios/Icon-Small.png b/spine-cocos2d-iphone/3/Resources-ios/Icon-Small.png deleted file mode 100644 index 1f1166959..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-ios/Icon-Small.png and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-ios/Icon-Small@2x.png b/spine-cocos2d-iphone/3/Resources-ios/Icon-Small@2x.png deleted file mode 100644 index 8d8ece43e..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-ios/Icon-Small@2x.png and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-ios/Icon.png b/spine-cocos2d-iphone/3/Resources-ios/Icon.png deleted file mode 100644 index def898328..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-ios/Icon.png and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-ios/Icon@2x.png b/spine-cocos2d-iphone/3/Resources-ios/Icon@2x.png deleted file mode 100644 index 05be6c602..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-ios/Icon@2x.png and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-ios/Prefix.pch b/spine-cocos2d-iphone/3/Resources-ios/Prefix.pch deleted file mode 100644 index f69095daf..000000000 --- a/spine-cocos2d-iphone/3/Resources-ios/Prefix.pch +++ /dev/null @@ -1,11 +0,0 @@ - -#import - -#ifndef __IPHONE_3_0 -#warning "This project uses features only available in iPhone SDK 3.0 and later." -#endif - -#ifdef __OBJC__ -#import -#import -#endif diff --git a/spine-cocos2d-iphone/3/Resources-ios/iTunesArtwork b/spine-cocos2d-iphone/3/Resources-ios/iTunesArtwork deleted file mode 100644 index b1cc056ba..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-ios/iTunesArtwork and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-mac/English.lproj/InfoPlist.strings b/spine-cocos2d-iphone/3/Resources-mac/English.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff8..000000000 --- a/spine-cocos2d-iphone/3/Resources-mac/English.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/spine-cocos2d-iphone/3/Resources-mac/English.lproj/MainMenu.xib b/spine-cocos2d-iphone/3/Resources-mac/English.lproj/MainMenu.xib deleted file mode 100644 index cbff754f9..000000000 --- a/spine-cocos2d-iphone/3/Resources-mac/English.lproj/MainMenu.xib +++ /dev/null @@ -1,896 +0,0 @@ - - - - 1060 - 10K549 - 1938 - 1038.36 - 461.00 - - com.apple.InterfaceBuilder.CocoaPlugin - 1938 - - - YES - NSOpenGLView - NSWindowTemplate - NSView - NSMenu - NSMenuItem - NSCustomObject - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - YES - - NSApplication - - - FirstResponder - - - NSApplication - - - AMainMenu - - YES - - - spine-cocos2d-iphone - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - submenuAction: - - spine-cocos2d-iphone - - YES - - - About spine-cocos2d-iphone - - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Preferences… - , - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Services - - 1048576 - 2147483647 - - - submenuAction: - - Services - - YES - - _NSServicesMenu - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Hide spine-cocos2d-iphone - h - 1048576 - 2147483647 - - - - - - Hide Others - h - 1572864 - 2147483647 - - - - - - Show All - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Quit spine-cocos2d-iphone - q - 1048576 - 2147483647 - - - - - _NSAppleMenu - - - - - View - - 1048576 - 2147483647 - - - submenuAction: - - View - - YES - - - Toggle Full Screen - f - 1048576 - 2147483647 - - - - - - - - - Window - - 1048576 - 2147483647 - - - submenuAction: - - Window - - YES - - - Minimize - m - 1048576 - 2147483647 - - - - - - Zoom - - 1048576 - 2147483647 - - - - - - YES - YES - - - 1048576 - 2147483647 - - - - - - Bring All to Front - - 1048576 - 2147483647 - - - - - _NSWindowsMenu - - - - - Help - - 2147483647 - - - submenuAction: - - Help - - YES - - - spine-cocos2d-iphone Help - ? - 1048576 - 2147483647 - - - - - _NSHelpMenu - - - - _NSMainMenu - - - 15 - 2 - {{335, 435}, {580, 416}} - 1685585920 - spine-cocos2d-iphone - NSWindow - - - - 256 - - YES - - - 1298 - - {{0, 20}, {580, 396}} - - - - 2 - - - AAAABQAAAGAAAAAIAAAADwAAAAsAAAAIAAAAAA - - - - - {580, 416} - - - - - {{0, 0}, {1680, 1028}} - {1e+13, 1e+13} - - - spine_cocos2d_iphoneAppDelegate - - - NSFontManager - - - Item - - 2147483647 - - - - - - - YES - - - terminate: - - - - 449 - - - - orderFrontStandardAboutPanel: - - - - 142 - - - - delegate - - - - 495 - - - - performMiniaturize: - - - - 37 - - - - arrangeInFront: - - - - 39 - - - - performZoom: - - - - 240 - - - - hide: - - - - 367 - - - - hideOtherApplications: - - - - 368 - - - - unhideAllApplications: - - - - 370 - - - - showHelp: - - - - 493 - - - - window - - - - 536 - - - - glView - - - - 537 - - - - toggleFullScreen: - - - - 541 - - - - - YES - - 0 - - YES - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 29 - - - YES - - - - - - - - - 19 - - - YES - - - - - - 56 - - - YES - - - - - - 57 - - - YES - - - - - - - - - - - - - - - - 58 - - - - - 134 - - - - - 150 - - - - - 136 - - - - - 144 - - - - - 129 - - - - - 143 - - - - - 236 - - - - - 131 - - - YES - - - - - - 149 - - - - - 145 - - - - - 130 - - - - - 24 - - - YES - - - - - - - - - 92 - - - - - 5 - - - - - 239 - - - - - 23 - - - - - 295 - - - YES - - - - - - 296 - - - YES - - - - - - 371 - - - YES - - - - - - 372 - - - YES - - - - - - 420 - - - - - 490 - - - YES - - - - - - 491 - - - YES - - - - - - 492 - - - - - 494 - - - - - 533 - - - - - 538 - - - - - 540 - - - - - - - YES - - YES - -1.IBPluginDependency - -2.IBPluginDependency - -3.IBPluginDependency - 129.IBPluginDependency - 130.IBPluginDependency - 131.IBPluginDependency - 134.IBPluginDependency - 136.IBPluginDependency - 143.IBPluginDependency - 144.IBPluginDependency - 145.IBPluginDependency - 149.IBPluginDependency - 150.IBPluginDependency - 19.IBPluginDependency - 23.IBPluginDependency - 236.IBPluginDependency - 239.IBPluginDependency - 24.IBPluginDependency - 29.IBPluginDependency - 295.IBPluginDependency - 296.IBPluginDependency - 371.IBPluginDependency - 371.IBWindowTemplateEditedContentRect - 371.NSWindowTemplate.visibleAtLaunch - 372.IBPluginDependency - 420.IBPluginDependency - 490.IBPluginDependency - 491.IBPluginDependency - 492.IBPluginDependency - 494.IBPluginDependency - 5.IBPluginDependency - 533.CustomClassName - 533.IBPluginDependency - 538.IBPluginDependency - 540.IBPluginDependency - 56.IBPluginDependency - 57.IBPluginDependency - 58.IBPluginDependency - 92.IBPluginDependency - - - YES - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{395, 107}, {580, 416}} - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - CCGLView - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - YES - - - - - - YES - - - - - 541 - - - - YES - - MacGLView - NSOpenGLView - - IBProjectSource - ./Classes/MacGLView.h - - - - spine_cocos2d_iphoneAppDelegate - NSObject - - toggleFullScreen: - id - - - toggleFullScreen: - - toggleFullScreen: - id - - - - YES - - YES - glView - window - - - YES - MacGLView - NSWindow - - - - YES - - YES - glView - window - - - YES - - glView - MacGLView - - - window - NSWindow - - - - - IBProjectSource - ./Classes/spine_cocos2d_iphoneAppDelegate.h - - - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - 3 - - YES - - YES - NSMenuCheckmark - NSMenuMixedState - - - YES - {9, 8} - {7, 2} - - - - diff --git a/spine-cocos2d-iphone/3/Resources-mac/Prefix.pch b/spine-cocos2d-iphone/3/Resources-mac/Prefix.pch deleted file mode 100644 index 8c4f6562b..000000000 --- a/spine-cocos2d-iphone/3/Resources-mac/Prefix.pch +++ /dev/null @@ -1,4 +0,0 @@ - -#ifdef __OBJC__ - #import -#endif diff --git a/spine-cocos2d-iphone/3/Resources-mac/icon.icns b/spine-cocos2d-iphone/3/Resources-mac/icon.icns deleted file mode 100644 index 70ba1e4d8..000000000 Binary files a/spine-cocos2d-iphone/3/Resources-mac/icon.icns and /dev/null differ diff --git a/spine-cocos2d-iphone/3/Resources-mac/main.m b/spine-cocos2d-iphone/3/Resources-mac/main.m deleted file mode 100644 index 3fa78a5d9..000000000 --- a/spine-cocos2d-iphone/3/Resources-mac/main.m +++ /dev/null @@ -1,8 +0,0 @@ - -#import -#import "cocos2d.h" - -int main(int argc, char *argv[]) { - [CCGLView load_]; - return NSApplicationMain(argc, (const char **) argv); -} diff --git a/spine-cocos2d-iphone/3/spine-cocos2d-iphone-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/spine-cocos2d-iphone/3/spine-cocos2d-iphone-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 3d1aaa193..000000000 --- a/spine-cocos2d-iphone/3/spine-cocos2d-iphone-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/spine-cocos2d-iphone/3/src/spine/SkeletonAnimation.h b/spine-cocos2d-iphone/3/src/spine/SkeletonAnimation.h deleted file mode 100644 index 22ee4f1da..000000000 --- a/spine-cocos2d-iphone/3/src/spine/SkeletonAnimation.h +++ /dev/null @@ -1,88 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import -#import -#import "cocos2d.h" - -@class SkeletonAnimation; - -typedef void(^spStartListener)(int trackIndex); -typedef void(^spEndListener)(int trackIndex); -typedef void(^spCompleteListener)(int trackIndex, int loopCount); -typedef void(^spEventListener)(int trackIndex, spEvent* event); - -/** Draws an animated skeleton, providing an AnimationState for applying one or more animations and queuing animations to be - * played later. */ -@interface SkeletonAnimation : SkeletonRenderer { - spAnimationState* _state; - bool _ownsAnimationStateData; - float _timeScale; - - spStartListener _startListener; - spEndListener _endListener; - spCompleteListener _completeListener; - spEventListener _eventListener; -} - -+ (id) skeletonWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData; -+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(spAtlas*)atlas scale:(float)scale; -+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale; - -- (id) initWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData; -- (id) initWithFile:(NSString*)skeletonDataFile atlas:(spAtlas*)atlas scale:(float)scale; -- (id) initWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale; - -- (void) setAnimationStateData:(spAnimationStateData*)stateData; -- (void) setMixFrom:(NSString*)fromAnimation to:(NSString*)toAnimation duration:(float)duration; - -- (spTrackEntry*) setAnimationForTrack:(int)trackIndex name:(NSString*)name loop:(bool)loop; -- (spTrackEntry*) addAnimationForTrack:(int)trackIndex name:(NSString*)name loop:(bool)loop afterDelay:(int)delay; -- (spTrackEntry*) getCurrentForTrack:(int)trackIndex; -- (void) clearTracks; -- (void) clearTrack:(int)trackIndex; - -- (void) setListenerForEntry:(spTrackEntry*)entry onStart:(spStartListener)listener; -- (void) setListenerForEntry:(spTrackEntry*)entry onEnd:(spEndListener)listener; -- (void) setListenerForEntry:(spTrackEntry*)entry onComplete:(spCompleteListener)listener; -- (void) setListenerForEntry:(spTrackEntry*)entry onEvent:(spEventListener)listener; - -- (void) onAnimationStateEvent:(int)trackIndex type:(spEventType)type event:(spEvent*)event loopCount:(int)loopCount; -- (void) onTrackEntryEvent:(int)trackIndex type:(spEventType)type event:(spEvent*)event loopCount:(int)loopCount; - -@property (nonatomic, readonly) spAnimationState* state; -@property (nonatomic) float timeScale; -@property (nonatomic, copy) spStartListener startListener; -@property (nonatomic, copy) spEndListener endListener; -@property (nonatomic, copy) spCompleteListener completeListener; -@property (nonatomic, copy) spEventListener eventListener; - -@end diff --git a/spine-cocos2d-iphone/3/src/spine/spine-cocos2d-iphone.h b/spine-cocos2d-iphone/3/src/spine/spine-cocos2d-iphone.h deleted file mode 100644 index 848a4043b..000000000 --- a/spine-cocos2d-iphone/3/src/spine/spine-cocos2d-iphone.h +++ /dev/null @@ -1,35 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#import -#import "cocos2d.h" -#import -#import diff --git a/spine-cocos2d-objc/CMakeLists.txt b/spine-cocos2d-objc/CMakeLists.txt new file mode 100644 index 000000000..57c3dee80 --- /dev/null +++ b/spine-cocos2d-objc/CMakeLists.txt @@ -0,0 +1,5 @@ +set(COCOS2D_DIR "${CMAKE_CURRENT_LIST_DIR}") +if (NOT EXISTS ${COCOS2D_DIR}/cocos2d) + execute_process(COMMAND git clone --recursive https://github.com/cocos2d/cocos2d-objc cocos2d + WORKING_DIRECTORY ${COCOS2D_DIR}) +endif() \ No newline at end of file diff --git a/spine-cocos2d-iphone/2/LICENSE b/spine-cocos2d-objc/LICENSE similarity index 100% rename from spine-cocos2d-iphone/2/LICENSE rename to spine-cocos2d-objc/LICENSE diff --git a/spine-cocos2d-objc/README.md b/spine-cocos2d-objc/README.md new file mode 100644 index 000000000..167a2d66a --- /dev/null +++ b/spine-cocos2d-objc/README.md @@ -0,0 +1,44 @@ +# spine-cocos2d-objc + +The spine-cocos2d-objc runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using the latest [cocos2d-objc](http://cocos2d-objc.org/). spine-cocos2d-objc is based on [spine-c](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-c). + +## Licensing + +This Spine Runtime may only be used for personal or internal use, typically to evaluate Spine before purchasing. If you would like to incorporate a Spine Runtime into your applications, distribute software containing a Spine Runtime, or modify a Spine Runtime, then you will need a valid [Spine license](https://esotericsoftware.com/spine-purchase). Please see the [Spine Runtimes Software License](https://github.com/EsotericSoftware/spine-runtimes/blob/master/LICENSE) for detailed information. + +The Spine Runtimes are developed with the intent to be used with data exported from Spine. By purchasing Spine, `Section 2` of the [Spine Software License](https://esotericsoftware.com/files/license.txt) grants the right to create and distribute derivative works of the Spine Runtimes. + +## Spine version + +spine-cocos2d-objc works with data exported from Spine version 3.2.01. + +spine-cocos2d-objc supports all Spine features. + +spine-cocos2d-objc does not yet support loading the binary format. + +## Usage + +1. Create a new cocos2d-obj project. See the [cocos2d-objc documentation](http://cocos2d-objc.org/started/) or have a look at the example in this repository. +2. Download the Spine Runtimes source using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip) +3. Add the sources from `spine-c/src/spine` and `spine-cocos2d-objc/src/spine` to your project +4. Add the folders `spine-c/include` and `spine-cocos2d-objc/src` to your header search path. Note that includes are specified as `#inclue `, so the `spine` directory cannot be omitted when copying the source files. + +See the [Spine Runtimes documentation](http://esotericsoftware.com/spine-documentation#runtimesTitle) on how to use the APIs or check out the Spine cocos2d-objc example. + +## Examples + +The Spine cocos2d-objc example works on iOS simulators and devices. + +### iOS +1. Install [Xcode](https://developer.apple.com/xcode/) +2. Install [Homebrew](http://brew.sh/) +3. Open a terminal and install CMake via `brew install cmake` +3. Download the Spine Runtimes repository using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip) +4. Open a terminal, and `cd` into the `spine-runtimes/spine-cocos2d-objc` folder +5. Type `mkdir build && cd build && cmake ../..`, this will download the cocos2d-objc dependency +6. Open the Xcode project in `spine-runtimes/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/` +7. In Xcode, click the `Run` button or type `CMD+R` to run the example on the simulator + +## Links + +[podspec](https://github.com/ldomaradzki/spine-runtimes/blob/master/Spine-Cocos2d-iPhone.podspec) (maintained externally) diff --git a/spine-cocos2d-iphone/3/Resources-ios/AppDelegate.h b/spine-cocos2d-objc/Resources-ios/AppDelegate.h similarity index 100% rename from spine-cocos2d-iphone/3/Resources-ios/AppDelegate.h rename to spine-cocos2d-objc/Resources-ios/AppDelegate.h diff --git a/spine-cocos2d-iphone/3/Resources-ios/AppDelegate.m b/spine-cocos2d-objc/Resources-ios/AppDelegate.m similarity index 100% rename from spine-cocos2d-iphone/3/Resources-ios/AppDelegate.m rename to spine-cocos2d-objc/Resources-ios/AppDelegate.m diff --git a/spine-cocos2d-iphone/2/Resources-ios/Default-568h@2x.png b/spine-cocos2d-objc/Resources-ios/Default-568h@2x.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Default-568h@2x.png rename to spine-cocos2d-objc/Resources-ios/Default-568h@2x.png diff --git a/spine-cocos2d-iphone/2/Resources-ios/Default-Landscape~ipad.png b/spine-cocos2d-objc/Resources-ios/Default-Landscape~ipad.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Default-Landscape~ipad.png rename to spine-cocos2d-objc/Resources-ios/Default-Landscape~ipad.png diff --git a/spine-cocos2d-iphone/2/Resources-ios/Default.png b/spine-cocos2d-objc/Resources-ios/Default.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Default.png rename to spine-cocos2d-objc/Resources-ios/Default.png diff --git a/spine-cocos2d-iphone/2/Resources-ios/Default@2x.png b/spine-cocos2d-objc/Resources-ios/Default@2x.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Default@2x.png rename to spine-cocos2d-objc/Resources-ios/Default@2x.png diff --git a/spine-cocos2d-iphone/2/Resources-ios/Icon-72.png b/spine-cocos2d-objc/Resources-ios/Icon-72.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Icon-72.png rename to spine-cocos2d-objc/Resources-ios/Icon-72.png diff --git a/spine-cocos2d-iphone/2/Resources-ios/Icon-Small-50.png b/spine-cocos2d-objc/Resources-ios/Icon-Small-50.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Icon-Small-50.png rename to spine-cocos2d-objc/Resources-ios/Icon-Small-50.png diff --git a/spine-cocos2d-iphone/2/Resources-ios/Icon-Small.png b/spine-cocos2d-objc/Resources-ios/Icon-Small.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Icon-Small.png rename to spine-cocos2d-objc/Resources-ios/Icon-Small.png diff --git a/spine-cocos2d-iphone/2/Resources-ios/Icon-Small@2x.png b/spine-cocos2d-objc/Resources-ios/Icon-Small@2x.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Icon-Small@2x.png rename to spine-cocos2d-objc/Resources-ios/Icon-Small@2x.png diff --git a/spine-cocos2d-iphone/2/Resources-ios/Icon.png b/spine-cocos2d-objc/Resources-ios/Icon.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Icon.png rename to spine-cocos2d-objc/Resources-ios/Icon.png diff --git a/spine-cocos2d-iphone/2/Resources-ios/Icon@2x.png b/spine-cocos2d-objc/Resources-ios/Icon@2x.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Icon@2x.png rename to spine-cocos2d-objc/Resources-ios/Icon@2x.png diff --git a/spine-cocos2d-iphone/2/Resources-ios/Info.plist b/spine-cocos2d-objc/Resources-ios/Info.plist similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Info.plist rename to spine-cocos2d-objc/Resources-ios/Info.plist diff --git a/spine-cocos2d-iphone/2/Resources-ios/Prefix.pch b/spine-cocos2d-objc/Resources-ios/Prefix.pch similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/Prefix.pch rename to spine-cocos2d-objc/Resources-ios/Prefix.pch diff --git a/spine-cocos2d-iphone/2/Resources-ios/iTunesArtwork b/spine-cocos2d-objc/Resources-ios/iTunesArtwork similarity index 100% rename from spine-cocos2d-iphone/2/Resources-ios/iTunesArtwork rename to spine-cocos2d-objc/Resources-ios/iTunesArtwork diff --git a/spine-cocos2d-iphone/3/Resources-ios/main.m b/spine-cocos2d-objc/Resources-ios/main.m similarity index 100% rename from spine-cocos2d-iphone/3/Resources-ios/main.m rename to spine-cocos2d-objc/Resources-ios/main.m diff --git a/spine-cocos2d-iphone/3/Resources-mac/AppDelegate.h b/spine-cocos2d-objc/Resources-mac/AppDelegate.h similarity index 100% rename from spine-cocos2d-iphone/3/Resources-mac/AppDelegate.h rename to spine-cocos2d-objc/Resources-mac/AppDelegate.h diff --git a/spine-cocos2d-iphone/3/Resources-mac/AppDelegate.m b/spine-cocos2d-objc/Resources-mac/AppDelegate.m similarity index 100% rename from spine-cocos2d-iphone/3/Resources-mac/AppDelegate.m rename to spine-cocos2d-objc/Resources-mac/AppDelegate.m diff --git a/spine-cocos2d-iphone/2/Resources-mac/English.lproj/InfoPlist.strings b/spine-cocos2d-objc/Resources-mac/English.lproj/InfoPlist.strings similarity index 100% rename from spine-cocos2d-iphone/2/Resources-mac/English.lproj/InfoPlist.strings rename to spine-cocos2d-objc/Resources-mac/English.lproj/InfoPlist.strings diff --git a/spine-cocos2d-iphone/2/Resources-mac/English.lproj/MainMenu.xib b/spine-cocos2d-objc/Resources-mac/English.lproj/MainMenu.xib similarity index 100% rename from spine-cocos2d-iphone/2/Resources-mac/English.lproj/MainMenu.xib rename to spine-cocos2d-objc/Resources-mac/English.lproj/MainMenu.xib diff --git a/spine-cocos2d-iphone/2/Resources-mac/Info.plist b/spine-cocos2d-objc/Resources-mac/Info.plist similarity index 100% rename from spine-cocos2d-iphone/2/Resources-mac/Info.plist rename to spine-cocos2d-objc/Resources-mac/Info.plist diff --git a/spine-cocos2d-iphone/2/Resources-mac/Prefix.pch b/spine-cocos2d-objc/Resources-mac/Prefix.pch similarity index 100% rename from spine-cocos2d-iphone/2/Resources-mac/Prefix.pch rename to spine-cocos2d-objc/Resources-mac/Prefix.pch diff --git a/spine-cocos2d-iphone/2/Resources-mac/icon.icns b/spine-cocos2d-objc/Resources-mac/icon.icns similarity index 100% rename from spine-cocos2d-iphone/2/Resources-mac/icon.icns rename to spine-cocos2d-objc/Resources-mac/icon.icns diff --git a/spine-cocos2d-iphone/2/Resources-mac/main.m b/spine-cocos2d-objc/Resources-mac/main.m similarity index 100% rename from spine-cocos2d-iphone/2/Resources-mac/main.m rename to spine-cocos2d-objc/Resources-mac/main.m diff --git a/spine-cocos2d-iphone/2/Resources/goblins-mesh.atlas b/spine-cocos2d-objc/Resources/goblins-mesh.atlas similarity index 100% rename from spine-cocos2d-iphone/2/Resources/goblins-mesh.atlas rename to spine-cocos2d-objc/Resources/goblins-mesh.atlas diff --git a/spine-cocos2d-iphone/2/Resources/goblins-mesh.json b/spine-cocos2d-objc/Resources/goblins-mesh.json similarity index 100% rename from spine-cocos2d-iphone/2/Resources/goblins-mesh.json rename to spine-cocos2d-objc/Resources/goblins-mesh.json diff --git a/spine-cocos2d-iphone/2/Resources/goblins-mesh.png b/spine-cocos2d-objc/Resources/goblins-mesh.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources/goblins-mesh.png rename to spine-cocos2d-objc/Resources/goblins-mesh.png diff --git a/spine-c/data/spineboy.atlas b/spine-cocos2d-objc/Resources/spineboy.atlas similarity index 100% rename from spine-c/data/spineboy.atlas rename to spine-cocos2d-objc/Resources/spineboy.atlas diff --git a/spine-cocos2d-iphone/2/Resources/spineboy.json b/spine-cocos2d-objc/Resources/spineboy.json similarity index 100% rename from spine-cocos2d-iphone/2/Resources/spineboy.json rename to spine-cocos2d-objc/Resources/spineboy.json diff --git a/spine-cocos2d-iphone/2/Resources/spineboy.png b/spine-cocos2d-objc/Resources/spineboy.png similarity index 100% rename from spine-cocos2d-iphone/2/Resources/spineboy.png rename to spine-cocos2d-objc/Resources/spineboy.png diff --git a/spine-cocos2d-iphone/3/example/GoblinsExample.h b/spine-cocos2d-objc/example/GoblinsExample.h similarity index 98% rename from spine-cocos2d-iphone/3/example/GoblinsExample.h rename to spine-cocos2d-objc/example/GoblinsExample.h index 86d34a6b7..3b8bea4ae 100644 --- a/spine-cocos2d-iphone/3/example/GoblinsExample.h +++ b/spine-cocos2d-objc/example/GoblinsExample.h @@ -30,7 +30,7 @@ *****************************************************************************/ #import "cocos2d.h" -#import +#import @interface GoblinsExample : CCNode { SkeletonAnimation* skeletonNode; diff --git a/spine-cocos2d-iphone/3/example/GoblinsExample.m b/spine-cocos2d-objc/example/GoblinsExample.m similarity index 100% rename from spine-cocos2d-iphone/3/example/GoblinsExample.m rename to spine-cocos2d-objc/example/GoblinsExample.m diff --git a/spine-cocos2d-iphone/3/example/SpineboyExample.h b/spine-cocos2d-objc/example/SpineboyExample.h similarity index 98% rename from spine-cocos2d-iphone/3/example/SpineboyExample.h rename to spine-cocos2d-objc/example/SpineboyExample.h index 5fa7697dd..32810a67c 100644 --- a/spine-cocos2d-iphone/3/example/SpineboyExample.h +++ b/spine-cocos2d-objc/example/SpineboyExample.h @@ -30,7 +30,7 @@ *****************************************************************************/ #import "cocos2d.h" -#import +#import @interface SpineboyExample : CCNode { SkeletonAnimation* skeletonNode; diff --git a/spine-cocos2d-iphone/3/example/SpineboyExample.m b/spine-cocos2d-objc/example/SpineboyExample.m similarity index 100% rename from spine-cocos2d-iphone/3/example/SpineboyExample.m rename to spine-cocos2d-objc/example/SpineboyExample.m diff --git a/spine-cocos2d-iphone/3/spine-cocos2d-iphone-ios.xcodeproj/project.pbxproj b/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.pbxproj similarity index 87% rename from spine-cocos2d-iphone/3/spine-cocos2d-iphone-ios.xcodeproj/project.pbxproj rename to spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.pbxproj index d16b1511e..f7615215e 100644 --- a/spine-cocos2d-iphone/3/spine-cocos2d-iphone-ios.xcodeproj/project.pbxproj +++ b/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.pbxproj @@ -12,7 +12,7 @@ 431FF7F51C735D8D00D52DF2 /* WeightedMeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 431FF7F21C735D8D00D52DF2 /* WeightedMeshAttachment.c */; }; 43B7CC0919DC4ACD0031321C /* IkConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 43B7CC0719DC4ACD0031321C /* IkConstraint.c */; }; 43B7CC0A19DC4ACD0031321C /* IkConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 43B7CC0819DC4ACD0031321C /* IkConstraintData.c */; }; - 43C3282F170B0C19004A9460 /* spine-cocos2d-iphone.m in Sources */ = {isa = PBXBuildFile; fileRef = 43C3282D170B0C19004A9460 /* spine-cocos2d-iphone.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 43C3282F170B0C19004A9460 /* spine-cocos2d-objc.m in Sources */ = {isa = PBXBuildFile; fileRef = 43C3282D170B0C19004A9460 /* spine-cocos2d-objc.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; 43C3286C170B0DA6004A9460 /* spineboy.json in Resources */ = {isa = PBXBuildFile; fileRef = 43C32868170B0DA6004A9460 /* spineboy.json */; }; 43C3286E170B0DA6004A9460 /* spineboy.atlas in Resources */ = {isa = PBXBuildFile; fileRef = 43C3286A170B0DA6004A9460 /* spineboy.atlas */; }; 43C3286F170B0DA6004A9460 /* spineboy.png in Resources */ = {isa = PBXBuildFile; fileRef = 43C3286B170B0DA6004A9460 /* spineboy.png */; }; @@ -112,18 +112,18 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 431FF7ED1C735D7A00D52DF2 /* TransformConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraint.h; path = "../../spine-c/include/spine/TransformConstraint.h"; sourceTree = ""; }; - 431FF7EE1C735D7A00D52DF2 /* TransformConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraintData.h; path = "../../spine-c/include/spine/TransformConstraintData.h"; sourceTree = ""; }; - 431FF7EF1C735D7A00D52DF2 /* WeightedMeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightedMeshAttachment.h; path = "../../spine-c/include/spine/WeightedMeshAttachment.h"; sourceTree = ""; }; - 431FF7F01C735D8D00D52DF2 /* TransformConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraint.c; path = "../../spine-c/src/spine/TransformConstraint.c"; sourceTree = ""; }; - 431FF7F11C735D8D00D52DF2 /* TransformConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraintData.c; path = "../../spine-c/src/spine/TransformConstraintData.c"; sourceTree = ""; }; - 431FF7F21C735D8D00D52DF2 /* WeightedMeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = WeightedMeshAttachment.c; path = "../../spine-c/src/spine/WeightedMeshAttachment.c"; sourceTree = ""; }; - 43B7CC0719DC4ACD0031321C /* IkConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraint.c; path = "../../spine-c/src/spine/IkConstraint.c"; sourceTree = ""; }; - 43B7CC0819DC4ACD0031321C /* IkConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraintData.c; path = "../../spine-c/src/spine/IkConstraintData.c"; sourceTree = ""; }; - 43B7CC0D19DC4AE30031321C /* IkConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraint.h; path = "../../spine-c/include/spine/IkConstraint.h"; sourceTree = ""; }; - 43B7CC0E19DC4AE30031321C /* IkConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraintData.h; path = "../../spine-c/include/spine/IkConstraintData.h"; sourceTree = ""; }; - 43C3282D170B0C19004A9460 /* spine-cocos2d-iphone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "spine-cocos2d-iphone.m"; path = "src/spine/spine-cocos2d-iphone.m"; sourceTree = ""; }; - 43C3282E170B0C19004A9460 /* spine-cocos2d-iphone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "spine-cocos2d-iphone.h"; path = "src/spine/spine-cocos2d-iphone.h"; sourceTree = ""; }; + 431FF7ED1C735D7A00D52DF2 /* TransformConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraint.h; path = "../spine-c/include/spine/TransformConstraint.h"; sourceTree = ""; }; + 431FF7EE1C735D7A00D52DF2 /* TransformConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraintData.h; path = "../spine-c/include/spine/TransformConstraintData.h"; sourceTree = ""; }; + 431FF7EF1C735D7A00D52DF2 /* WeightedMeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightedMeshAttachment.h; path = "../spine-c/include/spine/WeightedMeshAttachment.h"; sourceTree = ""; }; + 431FF7F01C735D8D00D52DF2 /* TransformConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraint.c; path = "../spine-c/src/spine/TransformConstraint.c"; sourceTree = ""; }; + 431FF7F11C735D8D00D52DF2 /* TransformConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraintData.c; path = "../spine-c/src/spine/TransformConstraintData.c"; sourceTree = ""; }; + 431FF7F21C735D8D00D52DF2 /* WeightedMeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = WeightedMeshAttachment.c; path = "../spine-c/src/spine/WeightedMeshAttachment.c"; sourceTree = ""; }; + 43B7CC0719DC4ACD0031321C /* IkConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraint.c; path = "../spine-c/src/spine/IkConstraint.c"; sourceTree = ""; }; + 43B7CC0819DC4ACD0031321C /* IkConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraintData.c; path = "../spine-c/src/spine/IkConstraintData.c"; sourceTree = ""; }; + 43B7CC0D19DC4AE30031321C /* IkConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraint.h; path = "../spine-c/include/spine/IkConstraint.h"; sourceTree = ""; }; + 43B7CC0E19DC4AE30031321C /* IkConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraintData.h; path = "../spine-c/include/spine/IkConstraintData.h"; sourceTree = ""; }; + 43C3282D170B0C19004A9460 /* spine-cocos2d-objc.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "spine-cocos2d-objc.m"; path = "src/spine/spine-cocos2d-objc.m"; sourceTree = ""; }; + 43C3282E170B0C19004A9460 /* spine-cocos2d-objc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "spine-cocos2d-objc.h"; path = "src/spine/spine-cocos2d-objc.h"; sourceTree = ""; }; 43C32868170B0DA6004A9460 /* spineboy.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = spineboy.json; path = Resources/spineboy.json; sourceTree = ""; }; 43C3286A170B0DA6004A9460 /* spineboy.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = spineboy.atlas; path = Resources/spineboy.atlas; sourceTree = ""; }; 43C3286B170B0DA6004A9460 /* spineboy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = spineboy.png; path = Resources/spineboy.png; sourceTree = ""; }; @@ -146,53 +146,53 @@ 43F7010C1927FBC700CA4038 /* goblins-mesh.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "goblins-mesh.atlas"; path = "Resources/goblins-mesh.atlas"; sourceTree = ""; }; 43F7010D1927FBC700CA4038 /* goblins-mesh.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "goblins-mesh.json"; path = "Resources/goblins-mesh.json"; sourceTree = ""; }; 43F7010E1927FBC700CA4038 /* goblins-mesh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "goblins-mesh.png"; path = "Resources/goblins-mesh.png"; sourceTree = ""; }; - 43F7FF381927F91900CA4038 /* Animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animation.c; path = "../../spine-c/src/spine/Animation.c"; sourceTree = ""; }; - 43F7FF391927F91900CA4038 /* AnimationState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationState.c; path = "../../spine-c/src/spine/AnimationState.c"; sourceTree = ""; }; - 43F7FF3A1927F91900CA4038 /* AnimationStateData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationStateData.c; path = "../../spine-c/src/spine/AnimationStateData.c"; sourceTree = ""; }; - 43F7FF3B1927F91900CA4038 /* Atlas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Atlas.c; path = "../../spine-c/src/spine/Atlas.c"; sourceTree = ""; }; - 43F7FF3C1927F91900CA4038 /* AtlasAttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AtlasAttachmentLoader.c; path = "../../spine-c/src/spine/AtlasAttachmentLoader.c"; sourceTree = ""; }; - 43F7FF3D1927F91900CA4038 /* Attachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Attachment.c; path = "../../spine-c/src/spine/Attachment.c"; sourceTree = ""; }; - 43F7FF3E1927F91900CA4038 /* AttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AttachmentLoader.c; path = "../../spine-c/src/spine/AttachmentLoader.c"; sourceTree = ""; }; - 43F7FF3F1927F91900CA4038 /* Bone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bone.c; path = "../../spine-c/src/spine/Bone.c"; sourceTree = ""; }; - 43F7FF401927F91900CA4038 /* BoneData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoneData.c; path = "../../spine-c/src/spine/BoneData.c"; sourceTree = ""; }; - 43F7FF411927F91900CA4038 /* BoundingBoxAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoundingBoxAttachment.c; path = "../../spine-c/src/spine/BoundingBoxAttachment.c"; sourceTree = ""; }; - 43F7FF421927F91900CA4038 /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../../spine-c/src/spine/Event.c"; sourceTree = ""; }; - 43F7FF431927F91900CA4038 /* EventData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EventData.c; path = "../../spine-c/src/spine/EventData.c"; sourceTree = ""; }; - 43F7FF441927F91900CA4038 /* extension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extension.c; path = "../../spine-c/src/spine/extension.c"; sourceTree = ""; }; - 43F7FF451927F91900CA4038 /* Json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Json.c; path = "../../spine-c/src/spine/Json.c"; sourceTree = ""; }; - 43F7FF461927F91900CA4038 /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Json.h; path = "../../spine-c/src/spine/Json.h"; sourceTree = ""; }; - 43F7FF471927F91900CA4038 /* MeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MeshAttachment.c; path = "../../spine-c/src/spine/MeshAttachment.c"; sourceTree = ""; }; - 43F7FF481927F91900CA4038 /* RegionAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = RegionAttachment.c; path = "../../spine-c/src/spine/RegionAttachment.c"; sourceTree = ""; }; - 43F7FF491927F91900CA4038 /* Skeleton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skeleton.c; path = "../../spine-c/src/spine/Skeleton.c"; sourceTree = ""; }; - 43F7FF4A1927F91900CA4038 /* SkeletonBounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonBounds.c; path = "../../spine-c/src/spine/SkeletonBounds.c"; sourceTree = ""; }; - 43F7FF4B1927F91900CA4038 /* SkeletonData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonData.c; path = "../../spine-c/src/spine/SkeletonData.c"; sourceTree = ""; }; - 43F7FF4C1927F91900CA4038 /* SkeletonJson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonJson.c; path = "../../spine-c/src/spine/SkeletonJson.c"; sourceTree = ""; }; - 43F7FF4D1927F91900CA4038 /* Skin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skin.c; path = "../../spine-c/src/spine/Skin.c"; sourceTree = ""; }; - 43F7FF4F1927F91900CA4038 /* Slot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Slot.c; path = "../../spine-c/src/spine/Slot.c"; sourceTree = ""; }; - 43F7FF501927F91900CA4038 /* SlotData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SlotData.c; path = "../../spine-c/src/spine/SlotData.c"; sourceTree = ""; }; - 43F7FF691927F92500CA4038 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = "../../spine-c/include/spine/Animation.h"; sourceTree = ""; }; - 43F7FF6A1927F92500CA4038 /* AnimationState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationState.h; path = "../../spine-c/include/spine/AnimationState.h"; sourceTree = ""; }; - 43F7FF6B1927F92500CA4038 /* AnimationStateData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationStateData.h; path = "../../spine-c/include/spine/AnimationStateData.h"; sourceTree = ""; }; - 43F7FF6C1927F92500CA4038 /* Atlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Atlas.h; path = "../../spine-c/include/spine/Atlas.h"; sourceTree = ""; }; - 43F7FF6D1927F92500CA4038 /* AtlasAttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AtlasAttachmentLoader.h; path = "../../spine-c/include/spine/AtlasAttachmentLoader.h"; sourceTree = ""; }; - 43F7FF6E1927F92500CA4038 /* Attachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Attachment.h; path = "../../spine-c/include/spine/Attachment.h"; sourceTree = ""; }; - 43F7FF6F1927F92500CA4038 /* AttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AttachmentLoader.h; path = "../../spine-c/include/spine/AttachmentLoader.h"; sourceTree = ""; }; - 43F7FF701927F92500CA4038 /* Bone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bone.h; path = "../../spine-c/include/spine/Bone.h"; sourceTree = ""; }; - 43F7FF711927F92500CA4038 /* BoneData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoneData.h; path = "../../spine-c/include/spine/BoneData.h"; sourceTree = ""; }; - 43F7FF721927F92500CA4038 /* BoundingBoxAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoundingBoxAttachment.h; path = "../../spine-c/include/spine/BoundingBoxAttachment.h"; sourceTree = ""; }; - 43F7FF731927F92500CA4038 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Event.h; path = "../../spine-c/include/spine/Event.h"; sourceTree = ""; }; - 43F7FF741927F92500CA4038 /* EventData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EventData.h; path = "../../spine-c/include/spine/EventData.h"; sourceTree = ""; }; - 43F7FF751927F92500CA4038 /* extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = extension.h; path = "../../spine-c/include/spine/extension.h"; sourceTree = ""; }; - 43F7FF761927F92500CA4038 /* MeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshAttachment.h; path = "../../spine-c/include/spine/MeshAttachment.h"; sourceTree = ""; }; - 43F7FF771927F92500CA4038 /* RegionAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegionAttachment.h; path = "../../spine-c/include/spine/RegionAttachment.h"; sourceTree = ""; }; - 43F7FF781927F92500CA4038 /* Skeleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skeleton.h; path = "../../spine-c/include/spine/Skeleton.h"; sourceTree = ""; }; - 43F7FF791927F92500CA4038 /* SkeletonBounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonBounds.h; path = "../../spine-c/include/spine/SkeletonBounds.h"; sourceTree = ""; }; - 43F7FF7A1927F92500CA4038 /* SkeletonData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonData.h; path = "../../spine-c/include/spine/SkeletonData.h"; sourceTree = ""; }; - 43F7FF7B1927F92500CA4038 /* SkeletonJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonJson.h; path = "../../spine-c/include/spine/SkeletonJson.h"; sourceTree = ""; }; - 43F7FF7C1927F92500CA4038 /* Skin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skin.h; path = "../../spine-c/include/spine/Skin.h"; sourceTree = ""; }; - 43F7FF7E1927F92500CA4038 /* Slot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Slot.h; path = "../../spine-c/include/spine/Slot.h"; sourceTree = ""; }; - 43F7FF7F1927F92500CA4038 /* SlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SlotData.h; path = "../../spine-c/include/spine/SlotData.h"; sourceTree = ""; }; - 43F7FF801927F92500CA4038 /* spine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spine.h; path = "../../spine-c/include/spine/spine.h"; sourceTree = ""; }; + 43F7FF381927F91900CA4038 /* Animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animation.c; path = "../spine-c/src/spine/Animation.c"; sourceTree = ""; }; + 43F7FF391927F91900CA4038 /* AnimationState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationState.c; path = "../spine-c/src/spine/AnimationState.c"; sourceTree = ""; }; + 43F7FF3A1927F91900CA4038 /* AnimationStateData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationStateData.c; path = "../spine-c/src/spine/AnimationStateData.c"; sourceTree = ""; }; + 43F7FF3B1927F91900CA4038 /* Atlas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Atlas.c; path = "../spine-c/src/spine/Atlas.c"; sourceTree = ""; }; + 43F7FF3C1927F91900CA4038 /* AtlasAttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AtlasAttachmentLoader.c; path = "../spine-c/src/spine/AtlasAttachmentLoader.c"; sourceTree = ""; }; + 43F7FF3D1927F91900CA4038 /* Attachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Attachment.c; path = "../spine-c/src/spine/Attachment.c"; sourceTree = ""; }; + 43F7FF3E1927F91900CA4038 /* AttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AttachmentLoader.c; path = "../spine-c/src/spine/AttachmentLoader.c"; sourceTree = ""; }; + 43F7FF3F1927F91900CA4038 /* Bone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bone.c; path = "../spine-c/src/spine/Bone.c"; sourceTree = ""; }; + 43F7FF401927F91900CA4038 /* BoneData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoneData.c; path = "../spine-c/src/spine/BoneData.c"; sourceTree = ""; }; + 43F7FF411927F91900CA4038 /* BoundingBoxAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoundingBoxAttachment.c; path = "../spine-c/src/spine/BoundingBoxAttachment.c"; sourceTree = ""; }; + 43F7FF421927F91900CA4038 /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../spine-c/src/spine/Event.c"; sourceTree = ""; }; + 43F7FF431927F91900CA4038 /* EventData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EventData.c; path = "../spine-c/src/spine/EventData.c"; sourceTree = ""; }; + 43F7FF441927F91900CA4038 /* extension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extension.c; path = "../spine-c/src/spine/extension.c"; sourceTree = ""; }; + 43F7FF451927F91900CA4038 /* Json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Json.c; path = "../spine-c/src/spine/Json.c"; sourceTree = ""; }; + 43F7FF461927F91900CA4038 /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Json.h; path = "../spine-c/src/spine/Json.h"; sourceTree = ""; }; + 43F7FF471927F91900CA4038 /* MeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MeshAttachment.c; path = "../spine-c/src/spine/MeshAttachment.c"; sourceTree = ""; }; + 43F7FF481927F91900CA4038 /* RegionAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = RegionAttachment.c; path = "../spine-c/src/spine/RegionAttachment.c"; sourceTree = ""; }; + 43F7FF491927F91900CA4038 /* Skeleton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skeleton.c; path = "../spine-c/src/spine/Skeleton.c"; sourceTree = ""; }; + 43F7FF4A1927F91900CA4038 /* SkeletonBounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonBounds.c; path = "../spine-c/src/spine/SkeletonBounds.c"; sourceTree = ""; }; + 43F7FF4B1927F91900CA4038 /* SkeletonData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonData.c; path = "../spine-c/src/spine/SkeletonData.c"; sourceTree = ""; }; + 43F7FF4C1927F91900CA4038 /* SkeletonJson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonJson.c; path = "../spine-c/src/spine/SkeletonJson.c"; sourceTree = ""; }; + 43F7FF4D1927F91900CA4038 /* Skin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skin.c; path = "../spine-c/src/spine/Skin.c"; sourceTree = ""; }; + 43F7FF4F1927F91900CA4038 /* Slot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Slot.c; path = "../spine-c/src/spine/Slot.c"; sourceTree = ""; }; + 43F7FF501927F91900CA4038 /* SlotData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SlotData.c; path = "../spine-c/src/spine/SlotData.c"; sourceTree = ""; }; + 43F7FF691927F92500CA4038 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = "../spine-c/include/spine/Animation.h"; sourceTree = ""; }; + 43F7FF6A1927F92500CA4038 /* AnimationState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationState.h; path = "../spine-c/include/spine/AnimationState.h"; sourceTree = ""; }; + 43F7FF6B1927F92500CA4038 /* AnimationStateData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationStateData.h; path = "../spine-c/include/spine/AnimationStateData.h"; sourceTree = ""; }; + 43F7FF6C1927F92500CA4038 /* Atlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Atlas.h; path = "../spine-c/include/spine/Atlas.h"; sourceTree = ""; }; + 43F7FF6D1927F92500CA4038 /* AtlasAttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AtlasAttachmentLoader.h; path = "../spine-c/include/spine/AtlasAttachmentLoader.h"; sourceTree = ""; }; + 43F7FF6E1927F92500CA4038 /* Attachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Attachment.h; path = "../spine-c/include/spine/Attachment.h"; sourceTree = ""; }; + 43F7FF6F1927F92500CA4038 /* AttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AttachmentLoader.h; path = "../spine-c/include/spine/AttachmentLoader.h"; sourceTree = ""; }; + 43F7FF701927F92500CA4038 /* Bone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bone.h; path = "../spine-c/include/spine/Bone.h"; sourceTree = ""; }; + 43F7FF711927F92500CA4038 /* BoneData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoneData.h; path = "../spine-c/include/spine/BoneData.h"; sourceTree = ""; }; + 43F7FF721927F92500CA4038 /* BoundingBoxAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoundingBoxAttachment.h; path = "../spine-c/include/spine/BoundingBoxAttachment.h"; sourceTree = ""; }; + 43F7FF731927F92500CA4038 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Event.h; path = "../spine-c/include/spine/Event.h"; sourceTree = ""; }; + 43F7FF741927F92500CA4038 /* EventData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EventData.h; path = "../spine-c/include/spine/EventData.h"; sourceTree = ""; }; + 43F7FF751927F92500CA4038 /* extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = extension.h; path = "../spine-c/include/spine/extension.h"; sourceTree = ""; }; + 43F7FF761927F92500CA4038 /* MeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshAttachment.h; path = "../spine-c/include/spine/MeshAttachment.h"; sourceTree = ""; }; + 43F7FF771927F92500CA4038 /* RegionAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegionAttachment.h; path = "../spine-c/include/spine/RegionAttachment.h"; sourceTree = ""; }; + 43F7FF781927F92500CA4038 /* Skeleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skeleton.h; path = "../spine-c/include/spine/Skeleton.h"; sourceTree = ""; }; + 43F7FF791927F92500CA4038 /* SkeletonBounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonBounds.h; path = "../spine-c/include/spine/SkeletonBounds.h"; sourceTree = ""; }; + 43F7FF7A1927F92500CA4038 /* SkeletonData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonData.h; path = "../spine-c/include/spine/SkeletonData.h"; sourceTree = ""; }; + 43F7FF7B1927F92500CA4038 /* SkeletonJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonJson.h; path = "../spine-c/include/spine/SkeletonJson.h"; sourceTree = ""; }; + 43F7FF7C1927F92500CA4038 /* Skin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skin.h; path = "../spine-c/include/spine/Skin.h"; sourceTree = ""; }; + 43F7FF7E1927F92500CA4038 /* Slot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Slot.h; path = "../spine-c/include/spine/Slot.h"; sourceTree = ""; }; + 43F7FF7F1927F92500CA4038 /* SlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SlotData.h; path = "../spine-c/include/spine/SlotData.h"; sourceTree = ""; }; + 43F7FF801927F92500CA4038 /* spine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spine.h; path = "../spine-c/include/spine/spine.h"; sourceTree = ""; }; 43F7FF831927F94800CA4038 /* SkeletonAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonAnimation.h; path = src/spine/SkeletonAnimation.h; sourceTree = ""; }; 43F7FF841927F94800CA4038 /* SkeletonAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonAnimation.m; path = src/spine/SkeletonAnimation.m; sourceTree = ""; }; 43F7FF851927F94800CA4038 /* SkeletonRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonRenderer.h; path = src/spine/SkeletonRenderer.h; sourceTree = ""; }; @@ -254,7 +254,7 @@ isa = PBXGroup; children = ( 43C32822170B0BC2004A9460 /* spine-c */, - 43C32823170B0BC7004A9460 /* spine-cocos2d-iphone */, + 43C32823170B0BC7004A9460 /* spine-cocos2d-objc */, 43F7FF8C1927F96700CA4038 /* SpineboyExample.h */, 43F7FF8D1927F96700CA4038 /* SpineboyExample.m */, 43F7FF8A1927F96700CA4038 /* GoblinsExample.h */, @@ -331,17 +331,17 @@ name = "spine-c"; sourceTree = ""; }; - 43C32823170B0BC7004A9460 /* spine-cocos2d-iphone */ = { + 43C32823170B0BC7004A9460 /* spine-cocos2d-objc */ = { isa = PBXGroup; children = ( 43F7FF831927F94800CA4038 /* SkeletonAnimation.h */, 43F7FF841927F94800CA4038 /* SkeletonAnimation.m */, 43F7FF851927F94800CA4038 /* SkeletonRenderer.h */, 43F7FF861927F94800CA4038 /* SkeletonRenderer.m */, - 43C3282E170B0C19004A9460 /* spine-cocos2d-iphone.h */, - 43C3282D170B0C19004A9460 /* spine-cocos2d-iphone.m */, + 43C3282E170B0C19004A9460 /* spine-cocos2d-objc.h */, + 43C3282D170B0C19004A9460 /* spine-cocos2d-objc.m */, ); - name = "spine-cocos2d-iphone"; + name = "spine-cocos2d-objc"; sourceTree = ""; }; 43C32867170B0C7F004A9460 /* Resources */ = { @@ -440,7 +440,7 @@ 43CA503B1CAF6E78005ABFFC /* PBXTargetDependency */, ); name = SpineExample; - productName = "spine-cocos2d-iphone-ios"; + productName = "spine-cocos2d-objc"; productReference = 9A5D2495170A94DA0030D4DD /* SpineExample.app */; productType = "com.apple.product-type.application"; }; @@ -453,7 +453,7 @@ LastUpgradeCheck = 0510; ORGANIZATIONNAME = "Craig Hinrichs"; }; - buildConfigurationList = 9A5D2490170A94DA0030D4DD /* Build configuration list for PBXProject "spine-cocos2d-iphone-ios" */; + buildConfigurationList = 9A5D2490170A94DA0030D4DD /* Build configuration list for PBXProject "spine-cocos2d-objc" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; @@ -539,7 +539,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 43C3282F170B0C19004A9460 /* spine-cocos2d-iphone.m in Sources */, + 43C3282F170B0C19004A9460 /* spine-cocos2d-objc.m in Sources */, 43C32A06170B0F93004A9460 /* main.m in Sources */, 43C32A09170B10FF004A9460 /* AppDelegate.m in Sources */, 43F7FF511927F91900CA4038 /* Animation.c in Sources */, @@ -660,7 +660,7 @@ GCC_PREFIX_HEADER = "Resources-ios/Prefix.pch"; HEADER_SEARCH_PATHS = ( "\"src\"", - "\"../../spine-c/include\"", + "\"../spine-c/include\"", "\"cocos2d/cocos2d\"/**", "\"cocos2d/external/kazmath/include\"", "\"cocos2d/external/ObjectAL\"/**", @@ -687,7 +687,7 @@ GCC_PREFIX_HEADER = "Resources-ios/Prefix.pch"; HEADER_SEARCH_PATHS = ( "\"src\"", - "\"../../spine-c/include\"", + "\"../spine-c/include\"", "\"cocos2d/cocos2d\"/**", "\"cocos2d/external/kazmath/include\"", "\"cocos2d/external/ObjectAL\"/**", @@ -708,7 +708,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 9A5D2490170A94DA0030D4DD /* Build configuration list for PBXProject "spine-cocos2d-iphone-ios" */ = { + 9A5D2490170A94DA0030D4DD /* Build configuration list for PBXProject "spine-cocos2d-objc" */ = { isa = XCConfigurationList; buildConfigurations = ( 9A5D2641170A94DC0030D4DD /* Debug */, diff --git a/spine-cocos2d-iphone/2/spine-cocos2d-iphone-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 64% rename from spine-cocos2d-iphone/2/spine-cocos2d-iphone-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 3d1aaa193..1dda405b2 100644 --- a/spine-cocos2d-iphone/2/spine-cocos2d-iphone-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:spine-cocos2d-objc.xcodeproj"> diff --git a/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.xcworkspace/xcshareddata/spine-cocos2d-iphone-ios.xcscmblueprint b/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.xcworkspace/xcshareddata/spine-cocos2d-iphone-ios.xcscmblueprint new file mode 100644 index 000000000..574d92678 --- /dev/null +++ b/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.xcworkspace/xcshareddata/spine-cocos2d-iphone-ios.xcscmblueprint @@ -0,0 +1,30 @@ +{ + "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "2D892964804FC420554A2636A248A5D6BBA5CC59", + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { + + }, + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { + "5D7004AFA0F8477414D2D2070527EE503A955943" : 0, + "2D892964804FC420554A2636A248A5D6BBA5CC59" : 0 + }, + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "6AF501EA-FB25-4406-800C-FDCAC3FA6B92", + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { + "5D7004AFA0F8477414D2D2070527EE503A955943" : "spine-runtimes\/spine-cocos2d-objc\/cocos2d\/", + "2D892964804FC420554A2636A248A5D6BBA5CC59" : "spine-runtimes\/" + }, + "DVTSourceControlWorkspaceBlueprintNameKey" : "spine-cocos2d-objc", + "DVTSourceControlWorkspaceBlueprintVersion" : 204, + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "spine-cocos2d-objc\/spine-cocos2d-objc.xcodeproj", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/EsotericSoftware\/spine-runtimes\/", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "2D892964804FC420554A2636A248A5D6BBA5CC59" + }, + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/cocos2d\/cocos2d-objc", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "5D7004AFA0F8477414D2D2070527EE503A955943" + } + ] +} \ No newline at end of file diff --git a/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.xcworkspace/xcshareddata/spine-cocos2d-objc.xcscmblueprint b/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.xcworkspace/xcshareddata/spine-cocos2d-objc.xcscmblueprint new file mode 100644 index 000000000..12358464a --- /dev/null +++ b/spine-cocos2d-objc/spine-cocos2d-objc.xcodeproj/project.xcworkspace/xcshareddata/spine-cocos2d-objc.xcscmblueprint @@ -0,0 +1,30 @@ +{ + "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "2D892964804FC420554A2636A248A5D6BBA5CC59", + "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : { + + }, + "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : { + "5D7004AFA0F8477414D2D2070527EE503A955943" : 0, + "2D892964804FC420554A2636A248A5D6BBA5CC59" : 0 + }, + "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "AB3D4EBB-FFCB-4477-BA6B-7501B348FBB0", + "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : { + "5D7004AFA0F8477414D2D2070527EE503A955943" : "spine-runtimes\/spine-cocos2d-objc\/cocos2d\/", + "2D892964804FC420554A2636A248A5D6BBA5CC59" : "spine-runtimes\/" + }, + "DVTSourceControlWorkspaceBlueprintNameKey" : "spine-cocos2d-objc", + "DVTSourceControlWorkspaceBlueprintVersion" : 204, + "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "spine-cocos2d-objc\/spine-cocos2d-objc.xcodeproj", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [ + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/EsotericSoftware\/spine-runtimes\/", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "2D892964804FC420554A2636A248A5D6BBA5CC59" + }, + { + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/cocos2d\/cocos2d-objc", + "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git", + "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "5D7004AFA0F8477414D2D2070527EE503A955943" + } + ] +} \ No newline at end of file diff --git a/spine-cocos2d-iphone/2/src/spine/SkeletonAnimation.h b/spine-cocos2d-objc/src/spine/SkeletonAnimation.h similarity index 100% rename from spine-cocos2d-iphone/2/src/spine/SkeletonAnimation.h rename to spine-cocos2d-objc/src/spine/SkeletonAnimation.h diff --git a/spine-cocos2d-iphone/3/src/spine/SkeletonAnimation.m b/spine-cocos2d-objc/src/spine/SkeletonAnimation.m similarity index 99% rename from spine-cocos2d-iphone/3/src/spine/SkeletonAnimation.m rename to spine-cocos2d-objc/src/spine/SkeletonAnimation.m index 6942bed31..c34dcf073 100644 --- a/spine-cocos2d-iphone/3/src/spine/SkeletonAnimation.m +++ b/spine-cocos2d-objc/src/spine/SkeletonAnimation.m @@ -30,7 +30,7 @@ *****************************************************************************/ #import -#import +#import #import static void animationCallback (spAnimationState* state, int trackIndex, spEventType type, spEvent* event, int loopCount) { diff --git a/spine-cocos2d-iphone/3/src/spine/SkeletonRenderer.h b/spine-cocos2d-objc/src/spine/SkeletonRenderer.h similarity index 100% rename from spine-cocos2d-iphone/3/src/spine/SkeletonRenderer.h rename to spine-cocos2d-objc/src/spine/SkeletonRenderer.h diff --git a/spine-cocos2d-iphone/3/src/spine/SkeletonRenderer.m b/spine-cocos2d-objc/src/spine/SkeletonRenderer.m similarity index 99% rename from spine-cocos2d-iphone/3/src/spine/SkeletonRenderer.m rename to spine-cocos2d-objc/src/spine/SkeletonRenderer.m index 0f1985fea..9341af324 100644 --- a/spine-cocos2d-iphone/3/src/spine/SkeletonRenderer.m +++ b/spine-cocos2d-objc/src/spine/SkeletonRenderer.m @@ -30,7 +30,7 @@ *****************************************************************************/ #import -#import +#import #import #import "CCDrawNode.h" diff --git a/spine-cocos2d-iphone/2/src/spine/spine-cocos2d-iphone.h b/spine-cocos2d-objc/src/spine/spine-cocos2d-objc.h similarity index 100% rename from spine-cocos2d-iphone/2/src/spine/spine-cocos2d-iphone.h rename to spine-cocos2d-objc/src/spine/spine-cocos2d-objc.h diff --git a/spine-cocos2d-iphone/3/src/spine/spine-cocos2d-iphone.m b/spine-cocos2d-objc/src/spine/spine-cocos2d-objc.m similarity index 98% rename from spine-cocos2d-iphone/3/src/spine/spine-cocos2d-iphone.m rename to spine-cocos2d-objc/src/spine/spine-cocos2d-objc.m index c1b6db49e..9a4270502 100644 --- a/spine-cocos2d-iphone/3/src/spine/spine-cocos2d-iphone.m +++ b/spine-cocos2d-objc/src/spine/spine-cocos2d-objc.m @@ -29,7 +29,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ -#import +#import #import void _spAtlasPage_createTexture (spAtlasPage* self, const char* path) { diff --git a/spine-cocos2dx/2/LICENSE b/spine-cocos2dx/2/LICENSE deleted file mode 100644 index 815ec1ca1..000000000 --- a/spine-cocos2dx/2/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Spine Runtimes Software License -Version 2.3 - -Copyright (c) 2013-2015, Esoteric Software -All rights reserved. - -You are granted a perpetual, non-exclusive, non-sublicensable and -non-transferable license to use, install, execute and perform the Spine -Runtimes Software (the "Software") and derivative works solely for personal -or internal use. Without the written permission of Esoteric Software (see -Section 2 of the Spine Software License Agreement), you may not (a) modify, -translate, adapt or otherwise create derivative works, improvements of the -Software or develop new applications using the Software or (b) remove, -delete, alter or obscure any trademarks or any copyright, trademark, patent -or other intellectual property or proprietary rights notices on or in the -Software, including any copy thereof. Redistributions in binary or source -form must include this license and terms. - -THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/spine-cocos2dx/2/README.md b/spine-cocos2dx/2/README.md deleted file mode 100644 index b9fee7534..000000000 --- a/spine-cocos2dx/2/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# spine-cocos2dx v2 - -The spine-cocos2dx runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [cocos2d-x](http://www.cocos2d-x.org/). spine-cocos2dx is based on [spine-c](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-c). - -## Licensing - -This Spine Runtime may only be used for personal or internal use, typically to evaluate Spine before purchasing. If you would like to incorporate a Spine Runtime into your applications, distribute software containing a Spine Runtime, or modify a Spine Runtime, then you will need a valid [Spine license](https://esotericsoftware.com/spine-purchase). Please see the [Spine Runtimes Software License](https://github.com/EsotericSoftware/spine-runtimes/blob/master/LICENSE) for detailed information. - -The Spine Runtimes are developed with the intent to be used with data exported from Spine. By purchasing Spine, `Section 2` of the [Spine Software License](https://esotericsoftware.com/files/license.txt) grants the right to create and distribute derivative works of the Spine Runtimes. - -## Spine version - -spine-cocos2dx v2 works with data exported from Spine 3.1.08. Updating spine-cocos2dx v2 to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. - -spine-cocos2dx v2 supports all Spine features. - -spine-cocos2dx v2 does not yet support loading the binary format. - -## Setup - -1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip). -1. Place the contents of a cocos2d-x version 2.2.3 distribution into the `spine-cocos2dx/2/cocos2dx` directory. -1. Open the XCode (Mac) or Visual C++ 2012 Express (Windows) project file from the `spine-cocos2dx/2/example` directory. Build files are also provided for Android. - -Alternatively, the contents of the `spine-c/src`, `spine-c/include` and `spine-cocos2dx/2/src` directories can be copied into your project. Be sure your header search path will find the contents of the `spine-c/include` and `spine-cocos2dx/2/src` directories. Note that the includes use `spine/Xxx.h`, so the `spine` directory cannot be omitted when copying the files. - -## Notes - -- Images are premultiplied by cocos2d-x, so the Spine atlas images should *not* use premultiplied alpha. - -## Examples - -- [Spineboy](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/2/example/Classes/SpineboyExample.cpp) -- [Golbins](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/2/example/Classes/GoblinsExample.cpp) diff --git a/spine-cocos2dx/2/example/Classes/AppDelegate.cpp b/spine-cocos2dx/2/example/Classes/AppDelegate.cpp deleted file mode 100644 index b555586b4..000000000 --- a/spine-cocos2dx/2/example/Classes/AppDelegate.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include "AppDelegate.h" - -#include -#include - -#include "SpineboyExample.h" -#include "AppMacros.h" - -USING_NS_CC; -using namespace std; - -AppDelegate::AppDelegate () { -} - -AppDelegate::~AppDelegate () { -} - -bool AppDelegate::applicationDidFinishLaunching () { - // initialize director - CCDirector* director = CCDirector::sharedDirector(); - CCEGLView* view = CCEGLView::sharedOpenGLView(); - director->setOpenGLView(view); - view->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, kResolutionNoBorder); - - CCSize frameSize = view->getFrameSize(); - - vector searchPath; - - // In this demo, we select resource according to the frame's height. - // If the resource size is different from design resolution size, you need to set contentScaleFactor. - // We use the ratio of resource's height to the height of design resolution, - // this can make sure that the resource's height could fit for the height of design resolution. - if (frameSize.height > mediumResource.size.height) { - // if the frame's height is larger than the height of medium resource size, select large resource. - searchPath.push_back(largeResource.directory); - director->setContentScaleFactor(MIN(largeResource.size.height/designResolutionSize.height, largeResource.size.width/designResolutionSize.width)); - } else if (frameSize.height > smallResource.size.height) { - // if the frame's height is larger than the height of small resource size, select medium resource. - searchPath.push_back(mediumResource.directory); - director->setContentScaleFactor(MIN(mediumResource.size.height/designResolutionSize.height, mediumResource.size.width/designResolutionSize.width)); - } else { - // if the frame's height is smaller than the height of medium resource size, select small resource. - searchPath.push_back(smallResource.directory); - director->setContentScaleFactor(MIN(smallResource.size.height/designResolutionSize.height, smallResource.size.width/designResolutionSize.width)); - } - - searchPath.push_back("common"); - - // set searching path - CCFileUtils::sharedFileUtils()->setSearchPaths(searchPath); - - // turn on display FPS - director->setDisplayStats(true); - - // set FPS. the default value is 1.0/60 if you don't call this - director->setAnimationInterval(1.0 / 60); - - // create a scene. it's an autorelease object - auto scene = SpineboyExample::scene(); - - // run - director->runWithScene(scene); - - return true; -} - -// This function will be called when the app is inactive. When comes a phone call,it's be invoked too -void AppDelegate::applicationDidEnterBackground () { - CCDirector::sharedDirector()->stopAnimation(); - - // if you use SimpleAudioEngine, it must be paused - // SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic(); -} - -// this function will be called when the app is active again -void AppDelegate::applicationWillEnterForeground () { - CCDirector::sharedDirector()->startAnimation(); - - // if you use SimpleAudioEngine, it must resume here - // SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic(); -} diff --git a/spine-cocos2dx/2/example/Classes/AppDelegate.h b/spine-cocos2dx/2/example/Classes/AppDelegate.h deleted file mode 100644 index 8f5c3fe0c..000000000 --- a/spine-cocos2dx/2/example/Classes/AppDelegate.h +++ /dev/null @@ -1,47 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef _APPDELEGATE_H_ -#define _APPDELEGATE_H_ - -#include "cocos2d.h" - -class AppDelegate: private cocos2d::CCApplication { -public: - AppDelegate (); - virtual ~AppDelegate (); - - virtual bool applicationDidFinishLaunching (); - virtual void applicationDidEnterBackground (); - virtual void applicationWillEnterForeground (); -}; - -#endif // _APPDELEGATE_H_ diff --git a/spine-cocos2dx/2/example/Classes/AppMacros.h b/spine-cocos2dx/2/example/Classes/AppMacros.h deleted file mode 100644 index 7329fa520..000000000 --- a/spine-cocos2dx/2/example/Classes/AppMacros.h +++ /dev/null @@ -1,90 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef _APPMACROS_H_ -#define _APPMACROS_H_ - -#include "cocos2d.h" - -/* For demonstrating using one design resolution to match different resources, - or one resource to match different design resolutions. - - [Situation 1] Using one design resolution to match different resources. - Please look into Appdelegate::applicationDidFinishLaunching. - We check current device frame size to decide which resource need to be selected. - So if you want to test this situation which said in title '[Situation 1]', - you should change ios simulator to different device(e.g. iphone, iphone-retina3.5, iphone-retina4.0, ipad, ipad-retina), - or change the window size in "proj.XXX/main.cpp" by "CCEGLView::setFrameSize" if you are using win32 or linux plaform - and modify "proj.mac/AppController.mm" by changing the window rectangle. - - [Situation 2] Using one resource to match different design resolutions. - The coordinates in your codes is based on your current design resolution rather than resource size. - Therefore, your design resolution could be very large and your resource size could be small. - To test this, just define the marco 'TARGET_DESIGN_RESOLUTION_SIZE' to 'DESIGN_RESOLUTION_2048X1536' - and open iphone simulator or create a window of 480x320 size. - - [Note] Normally, developer just need to define one design resolution(e.g. 960x640) with one or more resources. - */ - -#define DESIGN_RESOLUTION_480X320 0 -#define DESIGN_RESOLUTION_960x640 1 -#define DESIGN_RESOLUTION_1024X768 2 -#define DESIGN_RESOLUTION_2048X1536 3 - -/* If you want to switch design resolution, change next line */ -#define TARGET_DESIGN_RESOLUTION_SIZE DESIGN_RESOLUTION_960x640 - -typedef struct tagResource { - cocos2d::CCSize size; - char directory[100]; -} Resource; - -static Resource smallResource = {cocos2d::CCSize(480, 320), "iphone"}; -static Resource mediumResource = {cocos2d::CCSize(960, 640), "iphone-retina"}; -static Resource largeResource = {cocos2d::CCSize(1024, 768), "ipad"}; -static Resource extralargeResource = {cocos2d::CCSize(2048, 1536), "ipad-retina"}; - -#if (TARGET_DESIGN_RESOLUTION_SIZE == DESIGN_RESOLUTION_480X320) -static cocos2d::CCSize designResolutionSize = cocos2d::Size(480, 320); -#elif (TARGET_DESIGN_RESOLUTION_SIZE == DESIGN_RESOLUTION_960x640) -static cocos2d::CCSize designResolutionSize = cocos2d::CCSize(960, 640); -#elif (TARGET_DESIGN_RESOLUTION_SIZE == DESIGN_RESOLUTION_1024X768) -static cocos2d::CCSize designResolutionSize = cocos2d::Size(1024, 768); -#elif (TARGET_DESIGN_RESOLUTION_SIZE == DESIGN_RESOLUTION_2048X1536) -static cocos2d::CCSize designResolutionSize = cocos2d::Size(2048, 1536); -#else -#error unknown target design resolution! -#endif - -// The font size 24 is designed for small resolution, so we should change it to fit for current design resolution -#define TITLE_FONT_SIZE (cocos2d::Director::getInstance()->getOpenGLView()->getDesignResolutionSize().width / smallResource.size.width * 24) - -#endif /* _APPMACROS_H_ */ diff --git a/spine-cocos2dx/2/example/Classes/GoblinsExample.cpp b/spine-cocos2dx/2/example/Classes/GoblinsExample.cpp deleted file mode 100644 index 720280fb1..000000000 --- a/spine-cocos2dx/2/example/Classes/GoblinsExample.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include "GoblinsExample.h" -#include "SpineboyExample.h" -#include -#include -#include - -USING_NS_CC; -using namespace spine; -using namespace std; - -CCScene* GoblinsExample::scene () { - CCScene *scene = CCScene::create(); - scene->addChild(GoblinsExample::create()); - return scene; -} - -bool GoblinsExample::init () { - if (!CCLayerColor::initWithColor(ccc4(128, 128, 128, 255))) return false; - - skeletonNode = SkeletonAnimation::createWithFile("goblins-mesh.json", "goblins-mesh.atlas", 1.5f); - skeletonNode->setAnimation(0, "walk", true); - skeletonNode->setSkin("goblin"); - - CCSize windowSize = CCDirector::sharedDirector()->getWinSize(); - skeletonNode->setPosition(ccp(windowSize.width / 2, 20)); - addChild(skeletonNode); - - scheduleUpdate(); - setTouchEnabled(true); - - return true; -} - -void GoblinsExample::ccTouchesBegan (CCSet* touches, CCEvent* event) { - if (!skeletonNode->debugBones) - skeletonNode->debugBones = true; - else if (skeletonNode->timeScale == 1) - skeletonNode->timeScale = 0.3f; - else - CCDirector::sharedDirector()->replaceScene(SpineboyExample::scene()); -} diff --git a/spine-cocos2dx/2/example/Classes/GoblinsExample.h b/spine-cocos2dx/2/example/Classes/GoblinsExample.h deleted file mode 100644 index 67b9fa4c1..000000000 --- a/spine-cocos2dx/2/example/Classes/GoblinsExample.h +++ /dev/null @@ -1,50 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef _GOBLINSEXAMPLE_H_ -#define _GOBLINSEXAMPLE_H_ - -#include "cocos2d.h" -#include - -class GoblinsExample : public cocos2d::CCLayerColor { -public: - static cocos2d::CCScene* scene (); - - virtual bool init (); - virtual void ccTouchesBegan (cocos2d::CCSet* touches, cocos2d::CCEvent* event); - - CREATE_FUNC (GoblinsExample); -private: - spine::SkeletonAnimation* skeletonNode; -}; - -#endif // _GOBLINSEXAMPLE_H_ diff --git a/spine-cocos2dx/2/example/Classes/SpineboyExample.cpp b/spine-cocos2dx/2/example/Classes/SpineboyExample.cpp deleted file mode 100644 index 94221287e..000000000 --- a/spine-cocos2dx/2/example/Classes/SpineboyExample.cpp +++ /dev/null @@ -1,103 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include "SpineboyExample.h" -#include "GoblinsExample.h" -#include -#include -#include - -USING_NS_CC; -using namespace spine; -using namespace std; - -CCScene* SpineboyExample::scene () { - CCScene *scene = CCScene::create(); - scene->addChild(SpineboyExample::create()); - return scene; -} - -bool SpineboyExample::init () { - if (!CCLayerColor::initWithColor(ccc4(128, 128, 128, 255))) return false; - - skeletonNode = SkeletonAnimation::createWithFile("spineboy.json", "spineboy.atlas", 0.6f); - - skeletonNode->startListener = [this] (int trackIndex) { - spTrackEntry* entry = spAnimationState_getCurrent(skeletonNode->state, trackIndex); - const char* animationName = (entry && entry->animation) ? entry->animation->name : 0; - CCLog("%d start: %s", trackIndex, animationName); - }; - skeletonNode->endListener = [] (int trackIndex) { - CCLog("%d end", trackIndex); - }; - skeletonNode->completeListener = [] (int trackIndex, int loopCount) { - CCLog("%d complete: %d", trackIndex, loopCount); - }; - skeletonNode->eventListener = [] (int trackIndex, spEvent* event) { - CCLog("%d event: %s, %d, %f, %s", trackIndex, event->data->name, event->intValue, event->floatValue, event->stringValue); - }; - - skeletonNode->setMix("walk", "jump", 0.2f); - skeletonNode->setMix("jump", "run", 0.2f); - skeletonNode->setAnimation(0, "walk", true); - spTrackEntry* jumpEntry = skeletonNode->addAnimation(0, "jump", false, 3); - skeletonNode->addAnimation(0, "run", true); - - skeletonNode->setStartListener(jumpEntry, [] (int trackIndex) { - CCLog("jumped!"); - }); - - // skeletonNode->addAnimation(1, "test", true); - // skeletonNode->runAction(RepeatForever::create(Sequence::create(FadeOut::create(1), FadeIn::create(1), DelayTime::create(5), NULL))); - - CCSize windowSize = CCDirector::sharedDirector()->getWinSize(); - skeletonNode->setPosition(ccp(windowSize.width / 2, 20)); - addChild(skeletonNode); - - scheduleUpdate(); - setTouchEnabled(true); - - return true; -} - -void SpineboyExample::ccTouchesBegan (CCSet* touches, CCEvent* event) { - if (!skeletonNode->debugBones) - skeletonNode->debugBones = true; - else if (skeletonNode->timeScale == 1) - skeletonNode->timeScale = 0.3f; - else - CCDirector::sharedDirector()->replaceScene(GoblinsExample::scene()); -} - -void SpineboyExample::update (float deltaTime) { - // Test releasing memory. - // CCDirector::sharedDirector()->replaceScene(SpineboyExample::scene()); -} diff --git a/spine-cocos2dx/2/example/Classes/SpineboyExample.h b/spine-cocos2dx/2/example/Classes/SpineboyExample.h deleted file mode 100644 index 914f282da..000000000 --- a/spine-cocos2dx/2/example/Classes/SpineboyExample.h +++ /dev/null @@ -1,51 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef _SPINEBOYEXAMPLE_H_ -#define _SPINEBOYEXAMPLE_H_ - -#include "cocos2d.h" -#include - -class SpineboyExample : public cocos2d::CCLayerColor { -public: - static cocos2d::CCScene* scene (); - - virtual bool init (); - virtual void ccTouchesBegan (cocos2d::CCSet* touches, cocos2d::CCEvent* event); - virtual void update (float deltaTime); - - CREATE_FUNC (SpineboyExample); -private: - spine::SkeletonAnimation* skeletonNode; -}; - -#endif // _SPINEBOYEXAMPLE_H_ diff --git a/spine-cocos2dx/2/example/Resources/common/goblins-mesh.json b/spine-cocos2dx/2/example/Resources/common/goblins-mesh.json deleted file mode 100644 index b35360ad1..000000000 --- a/spine-cocos2dx/2/example/Resources/common/goblins-mesh.json +++ /dev/null @@ -1,1081 +0,0 @@ -{ -"bones": [ - { "name": "root" }, - { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, - { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, - { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, - { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, - { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, - { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, - { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }, - { "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 }, - { "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 }, - { "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 } -], -"slots": [ - { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, - { "name": "left arm", "bone": "left arm", "attachment": "left arm" }, - { "name": "left hand item", "bone": "left hand", "attachment": "spear" }, - { "name": "left hand", "bone": "left hand", "attachment": "left hand" }, - { "name": "left foot", "bone": "left foot", "attachment": "left foot" }, - { "name": "left lower leg", "bone": "left lower leg", "attachment": "left lower leg" }, - { "name": "left upper leg", "bone": "left upper leg", "attachment": "left upper leg" }, - { "name": "neck", "bone": "neck", "attachment": "neck" }, - { "name": "torso", "bone": "torso", "attachment": "torso" }, - { "name": "pelvis", "bone": "pelvis", "attachment": "pelvis" }, - { "name": "right foot", "bone": "right foot", "attachment": "right foot" }, - { "name": "right lower leg", "bone": "right lower leg", "attachment": "right lower leg" }, - { "name": "undie straps", "bone": "pelvis", "attachment": "undie straps" }, - { "name": "undies", "bone": "pelvis", "attachment": "undies" }, - { "name": "right upper leg", "bone": "right upper leg", "attachment": "right upper leg" }, - { "name": "head", "bone": "head", "attachment": "head" }, - { "name": "eyes", "bone": "head" }, - { "name": "right shoulder", "bone": "right shoulder", "attachment": "right shoulder" }, - { "name": "right arm", "bone": "right arm", "attachment": "right arm" }, - { "name": "right hand thumb", "bone": "right hand", "attachment": "right hand thumb" }, - { "name": "right hand item", "bone": "right hand", "attachment": "dagger" }, - { "name": "right hand", "bone": "right hand", "attachment": "right hand" }, - { "name": "right hand item 2", "bone": "right hand", "attachment": "shield" } -], -"skins": { - "default": { - "left hand item": { - "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, - "spear": { - "type": "skinnedmesh", - "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ], - "triangles": [ 5, 6, 4, 6, 7, 4, 4, 7, 3, 2, 9, 1, 9, 10, 1, 10, 12, 1, 12, 13, 1, 1, 13, 0, 10, 11, 12, 3, 8, 2, 8, 9, 2, 7, 8, 3 ], - "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], - "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], - "hull": 14, - "width": 22, - "height": 368 - } - }, - "right hand item": { - "dagger": { - "type": "mesh", - "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ], - "triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ], - "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ], - "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], - "hull": 14, - "width": 26, - "height": 108 - } - }, - "right hand item 2": { - "shield": { "rotation": 93.49, "width": 70, "height": 72 } - } - }, - "goblin": { - "eyes": { - "eyes closed": { "name": "goblin/eyes-closed", "x": 29.19, "y": -24.89, "rotation": -88.92, "width": 34, "height": 12 } - }, - "head": { - "head": { - "name": "goblin/head", - "type": "mesh", - "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ], - "triangles": [ 26, 20, 19, 21, 20, 26, 15, 14, 13, 12, 15, 13, 11, 16, 15, 11, 15, 12, 26, 17, 25, 18, 26, 19, 17, 26, 18, 30, 25, 17, 30, 17, 16, 30, 16, 11, 1, 22, 21, 23, 22, 1, 2, 1, 21, 2, 21, 26, 29, 30, 11, 29, 11, 10, 28, 25, 30, 0, 23, 1, 9, 29, 10, 25, 3, 2, 25, 2, 26, 29, 27, 28, 29, 28, 30, 24, 3, 25, 24, 25, 28, 24, 28, 27, 8, 29, 9, 27, 29, 8, 4, 3, 24, 5, 24, 27, 4, 24, 5, 7, 6, 27, 7, 27, 8, 5, 27, 6 ], - "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], - "hull": 24, - "width": 103, - "height": 66 - } - }, - "left arm": { - "left arm": { - "name": "goblin/left-arm", - "type": "mesh", - "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ], - "triangles": [ 6, 7, 8, 5, 6, 8, 0, 5, 8, 0, 1, 2, 5, 0, 2, 4, 5, 2, 3, 4, 2 ], - "vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], - "hull": 9, - "width": 37, - "height": 35 - } - }, - "left foot": { - "left foot": { - "name": "goblin/left-foot", - "type": "mesh", - "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ], - "triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ], - "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], - "hull": 10, - "width": 65, - "height": 31 - } - }, - "left hand": { - "left hand": { - "name": "goblin/left-hand", - "type": "mesh", - "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ], - "triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ], - "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], - "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], - "hull": 9, - "width": 36, - "height": 41 - } - }, - "left lower leg": { - "left lower leg": { - "name": "goblin/left-lower-leg", - "type": "mesh", - "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ], - "triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ], - "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ], - "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], - "hull": 11, - "width": 33, - "height": 70 - } - }, - "left shoulder": { - "left shoulder": { - "name": "goblin/left-shoulder", - "type": "mesh", - "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ], - "triangles": [ 5, 6, 7, 4, 5, 7, 4, 7, 0, 3, 4, 0, 3, 0, 1, 3, 1, 2 ], - "vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ], - "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], - "hull": 8, - "width": 29, - "height": 44 - } - }, - "left upper leg": { - "left upper leg": { - "name": "goblin/left-upper-leg", - "type": "mesh", - "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ], - "triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ], - "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ], - "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], - "hull": 9, - "width": 33, - "height": 73 - } - }, - "neck": { - "neck": { - "name": "goblin/neck", - "type": "mesh", - "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ], - "triangles": [ 6, 8, 9, 6, 9, 0, 7, 8, 6, 10, 5, 6, 0, 10, 6, 10, 0, 1, 3, 4, 5, 2, 5, 10, 2, 10, 1, 3, 5, 2 ], - "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], - "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], - "hull": 10, - "width": 36, - "height": 41 - } - }, - "pelvis": { - "pelvis": { - "name": "goblin/pelvis", - "type": "mesh", - "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], - "triangles": [ 1, 2, 3, 1, 3, 0 ], - "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], - "hull": 4, - "width": 62, - "height": 43 - } - }, - "right arm": { - "right arm": { - "name": "goblin/right-arm", - "type": "mesh", - "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ], - "triangles": [ 6, 7, 0, 2, 3, 5, 4, 5, 3, 1, 6, 0, 6, 2, 5, 1, 2, 6 ], - "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ], - "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], - "hull": 8, - "width": 23, - "height": 50 - } - }, - "right foot": { - "right foot": { - "name": "goblin/right-foot", - "type": "mesh", - "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ], - "triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ], - "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ], - "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], - "hull": 14, - "width": 63, - "height": 33 - } - }, - "right hand": { - "right hand": { - "name": "goblin/right-hand", - "type": "mesh", - "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ], - "triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ], - "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], - "hull": 11, - "width": 36, - "height": 37 - } - }, - "right hand thumb": { - "right hand thumb": { - "name": "goblin/right-hand", - "type": "mesh", - "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ], - "triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ], - "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ], - "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], - "hull": 5, - "width": 36, - "height": 37 - } - }, - "right lower leg": { - "right lower leg": { - "name": "goblin/right-lower-leg", - "type": "mesh", - "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ], - "triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ], - "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], - "hull": 11, - "width": 36, - "height": 76 - } - }, - "right shoulder": { - "right shoulder": { - "name": "goblin/right-shoulder", - "type": "mesh", - "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ], - "triangles": [ 2, 3, 0, 2, 0, 1, 7, 0, 3, 4, 5, 6, 4, 7, 3, 4, 6, 7 ], - "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ], - "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], - "hull": 8, - "width": 39, - "height": 45 - } - }, - "right upper leg": { - "right upper leg": { - "name": "goblin/right-upper-leg", - "type": "mesh", - "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ], - "triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ], - "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], - "hull": 10, - "width": 34, - "height": 63 - } - }, - "torso": { - "torso": { - "name": "goblin/torso", - "type": "mesh", - "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ], - "triangles": [ 0, 15, 14, 20, 14, 13, 20, 13, 12, 1, 0, 14, 20, 12, 11, 20, 1, 14, 22, 20, 11, 22, 11, 10, 19, 1, 20, 19, 20, 22, 2, 1, 19, 18, 22, 10, 18, 10, 9, 19, 22, 18, 18, 9, 8, 21, 18, 8, 21, 8, 7, 17, 2, 19, 21, 17, 19, 21, 19, 18, 3, 2, 17, 16, 21, 7, 17, 21, 16, 4, 3, 17, 5, 17, 16, 4, 17, 5, 6, 16, 7, 5, 16, 6 ], - "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], - "hull": 16, - "width": 68, - "height": 96 - } - }, - "undie straps": { - "undie straps": { - "name": "goblin/undie-straps", - "type": "mesh", - "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ], - "triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ], - "vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], - "hull": 9, - "width": 55, - "height": 19 - } - }, - "undies": { - "undies": { - "name": "goblin/undies", - "type": "mesh", - "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ], - "triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ], - "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ], - "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], - "hull": 10, - "width": 36, - "height": 29 - } - } - }, - "goblingirl": { - "eyes": { - "eyes closed": { "name": "goblingirl/eyes-closed", "x": 28, "y": -25.54, "rotation": -87.04, "width": 37, "height": 21 } - }, - "head": { - "head": { "name": "goblingirl/head", "x": 27.71, "y": -4.32, "rotation": -85.58, "width": 103, "height": 81 } - }, - "left arm": { - "left arm": { "name": "goblingirl/left-arm", "x": 19.64, "y": -2.42, "rotation": 33.05, "width": 37, "height": 35 } - }, - "left foot": { - "left foot": { "name": "goblingirl/left-foot", "x": 25.17, "y": 7.92, "rotation": 3.32, "width": 65, "height": 31 } - }, - "left hand": { - "left hand": { - "name": "goblingirl/left-hand", - "x": 4.34, - "y": 2.39, - "scaleX": 0.896, - "scaleY": 0.896, - "rotation": 30.34, - "width": 35, - "height": 40 - } - }, - "left lower leg": { - "left lower leg": { "name": "goblingirl/left-lower-leg", "x": 25.02, "y": -0.6, "rotation": 105.75, "width": 33, "height": 70 } - }, - "left shoulder": { - "left shoulder": { "name": "goblingirl/left-shoulder", "x": 19.8, "y": -0.42, "rotation": 61.21, "width": 28, "height": 46 } - }, - "left upper leg": { - "left upper leg": { "name": "goblingirl/left-upper-leg", "x": 30.21, "y": -2.95, "rotation": 89.09, "width": 33, "height": 70 } - }, - "neck": { - "neck": { "name": "goblingirl/neck", "x": 6.16, "y": -3.14, "rotation": -98.86, "width": 35, "height": 41 } - }, - "pelvis": { - "pelvis": { "name": "goblingirl/pelvis", "x": -3.87, "y": 3.18, "width": 62, "height": 43 } - }, - "right arm": { - "right arm": { "name": "goblingirl/right-arm", "x": 16.85, "y": -0.66, "rotation": 93.52, "width": 28, "height": 50 } - }, - "right foot": { - "right foot": { "name": "goblingirl/right-foot", "x": 23.46, "y": 9.66, "rotation": 1.52, "width": 63, "height": 33 } - }, - "right hand": { - "right hand": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 } - }, - "right hand thumb": { - "right hand thumb": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 } - }, - "right lower leg": { - "right lower leg": { "name": "goblingirl/right-lower-leg", "x": 26.15, "y": -3.27, "rotation": 111.83, "width": 36, "height": 76 } - }, - "right shoulder": { - "right shoulder": { "name": "goblingirl/right-shoulder", "x": 14.46, "y": 0.45, "rotation": 129.85, "width": 39, "height": 45 } - }, - "right upper leg": { - "right upper leg": { "name": "goblingirl/right-upper-leg", "x": 19.69, "y": 2.13, "rotation": 97.49, "width": 34, "height": 63 } - }, - "torso": { - "torso": { "name": "goblingirl/torso", "x": 36.28, "y": -5.14, "rotation": -95.74, "width": 68, "height": 96 } - }, - "undie straps": { - "undie straps": { "name": "goblingirl/undie-straps", "x": -1.51, "y": 14.18, "width": 55, "height": 19 } - }, - "undies": { - "undies": { "name": "goblingirl/undies", "x": 5.4, "y": 1.7, "width": 36, "height": 29 } - } - } -}, -"animations": { - "walk": { - "slots": { - "eyes": { - "attachment": [ - { "time": 0.7, "name": "eyes closed" }, - { "time": 0.8, "name": null } - ] - } - }, - "bones": { - "left upper leg": { - "rotate": [ - { "time": 0, "angle": -26.55 }, - { "time": 0.1333, "angle": -8.78 }, - { "time": 0.2333, "angle": 9.51 }, - { "time": 0.3666, "angle": 30.74 }, - { "time": 0.5, "angle": 25.33 }, - { "time": 0.6333, "angle": 26.11 }, - { "time": 0.7333, "angle": 7.45 }, - { "time": 0.8666, "angle": -21.19 }, - { "time": 1, "angle": -26.55 } - ], - "translate": [ - { "time": 0, "x": -1.32, "y": 1.7 }, - { "time": 0.3666, "x": -0.06, "y": 2.42 }, - { "time": 1, "x": -1.32, "y": 1.7 } - ] - }, - "right upper leg": { - "rotate": [ - { "time": 0, "angle": 42.45 }, - { - "time": 0.1333, - "angle": 49.86, - "curve": [ 0.414, 0, 0.705, 0.99 ] - }, - { "time": 0.2333, "angle": 22.51 }, - { "time": 0.5, "angle": -16.93 }, - { "time": 0.6333, "angle": 1.89 }, - { - "time": 0.7333, - "angle": 34.86, - "curve": [ 0.462, 0.11, 1, 1 ] - }, - { - "time": 0.8666, - "angle": 58.68, - "curve": [ 0.5, 0.02, 1, 1 ] - }, - { "time": 1, "angle": 42.45 } - ], - "translate": [ - { "time": 0, "x": 6.23, "y": 0 }, - { "time": 0.2333, "x": 2.14, "y": 2.4 }, - { "time": 0.5, "x": 2.44, "y": 4.8 }, - { "time": 1, "x": 6.23, "y": 0 } - ] - }, - "left lower leg": { - "rotate": [ - { "time": 0, "angle": -18.05 }, - { "time": 0.1333, "angle": -63.5 }, - { "time": 0.2333, "angle": -83.01 }, - { "time": 0.5, "angle": 5.11 }, - { "time": 0.6333, "angle": -28.29 }, - { "time": 0.7333, "angle": -27.52 }, - { "time": 0.8666, "angle": 3.53 }, - { "time": 1, "angle": -18.05 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.2333, "x": 2.55, "y": -0.47 }, - { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 1, "x": 0, "y": 0 } - ] - }, - "left foot": { - "rotate": [ - { "time": 0, "angle": -14.56 }, - { "time": 0.1333, "angle": -10.42 }, - { "time": 0.2333, "angle": -5.01 }, - { "time": 0.3, "angle": 6.67 }, - { "time": 0.3666, "angle": 3.87 }, - { "time": 0.5, "angle": -3.87 }, - { "time": 0.6333, "angle": 2.78 }, - { "time": 0.7333, "angle": -11.99 }, - { "time": 0.8666, "angle": -12.45 }, - { "time": 1, "angle": -14.56 } - ] - }, - "right shoulder": { - "rotate": [ - { - "time": 0, - "angle": 5.29, - "curve": [ 0.264, 0, 0.75, 1 ] - }, - { "time": 0.6333, "angle": 6.65 }, - { "time": 1, "angle": 5.29 } - ] - }, - "right arm": { - "rotate": [ - { - "time": 0, - "angle": -4.02, - "curve": [ 0.267, 0, 0.804, 0.99 ] - }, - { - "time": 0.6333, - "angle": 19.78, - "curve": [ 0.307, 0, 0.787, 0.99 ] - }, - { "time": 1, "angle": -4.02 } - ] - }, - "right hand": { - "rotate": [ - { "time": 0, "angle": 8.98 }, - { "time": 0.6333, "angle": 0.51 }, - { "time": 1, "angle": 8.98 } - ] - }, - "left shoulder": { - "rotate": [ - { - "time": 0, - "angle": 6.25, - "curve": [ 0.339, 0, 0.683, 1 ] - }, - { - "time": 0.5, - "angle": -11.78, - "curve": [ 0.281, 0, 0.686, 0.99 ] - }, - { "time": 1, "angle": 6.25 } - ], - "translate": [ - { "time": 0, "x": 1.15, "y": 0.23 } - ] - }, - "left hand": { - "rotate": [ - { - "time": 0, - "angle": -21.23, - "curve": [ 0.295, 0, 0.755, 0.98 ] - }, - { - "time": 0.5, - "angle": -27.28, - "curve": [ 0.241, 0, 0.75, 0.97 ] - }, - { "time": 1, "angle": -21.23 } - ] - }, - "left arm": { - "rotate": [ - { - "time": 0, - "angle": 28.37, - "curve": [ 0.339, 0, 0.683, 1 ] - }, - { - "time": 0.5, - "angle": 60.09, - "curve": [ 0.281, 0, 0.686, 0.99 ] - }, - { "time": 1, "angle": 28.37 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -10.28 }, - { - "time": 0.1333, - "angle": -15.38, - "curve": [ 0.545, 0, 0.818, 1 ] - }, - { - "time": 0.3666, - "angle": -9.78, - "curve": [ 0.58, 0.17, 0.669, 0.99 ] - }, - { - "time": 0.6333, - "angle": -15.75, - "curve": [ 0.235, 0.01, 0.795, 1 ] - }, - { - "time": 0.8666, - "angle": -7.06, - "curve": [ 0.209, 0, 0.816, 0.98 ] - }, - { "time": 1, "angle": -10.28 } - ], - "translate": [ - { "time": 0, "x": -3.72, "y": -0.01 } - ] - }, - "right foot": { - "rotate": [ - { "time": 0, "angle": -5.25 }, - { "time": 0.2333, "angle": -17.76 }, - { "time": 0.3666, "angle": -20.09 }, - { "time": 0.5, "angle": -19.73 }, - { "time": 0.7333, "angle": -11.68 }, - { "time": 0.8, "angle": 4.46 }, - { "time": 0.8666, "angle": 0.46 }, - { "time": 1, "angle": -5.25 } - ] - }, - "right lower leg": { - "rotate": [ - { - "time": 0, - "angle": -3.39, - "curve": [ 0.316, 0.01, 0.741, 0.98 ] - }, - { - "time": 0.1333, - "angle": -43.21, - "curve": [ 0.414, 0, 0.705, 0.99 ] - }, - { "time": 0.2333, "angle": -25.98 }, - { "time": 0.5, "angle": -19.53 }, - { "time": 0.6333, "angle": -64.8 }, - { - "time": 0.7333, - "angle": -89.54, - "curve": [ 0.557, 0.18, 1, 1 ] - }, - { "time": 1, "angle": -3.39 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.5, "x": 0, "y": 0 }, - { "time": 0.6333, "x": 2.18, "y": 0.21 }, - { "time": 1, "x": 0, "y": 0 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 1, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": -8.4 }, - { - "time": 0.1333, - "x": 0, - "y": -9.35, - "curve": [ 0.326, 0.05, 0.674, 0.93 ] - }, - { - "time": 0.2333, - "x": 0, - "y": -0.59, - "curve": [ 0.325, 0.39, 0.643, 0.7 ] - }, - { "time": 0.3666, "x": 0, "y": -3.96 }, - { "time": 0.5, "x": 0, "y": -8.4 }, - { - "time": 0.6333, - "x": 0, - "y": -10, - "curve": [ 0.359, 0.47, 0.646, 0.74 ] - }, - { - "time": 0.7333, - "x": 0, - "y": -5.29, - "curve": [ 0.333, 0.36, 0.662, 0.69 ] - }, - { - "time": 0.8, - "x": 0, - "y": -2.49, - "curve": [ 0.322, 0.35, 0.651, 0.68 ] - }, - { "time": 0.8666, "x": 0, "y": -3.96 }, - { "time": 1, "x": 0, "y": -8.4 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 3.6 }, - { "time": 0.1333, "angle": 17.49 }, - { "time": 0.2333, "angle": 6.1 }, - { "time": 0.3666, "angle": 3.45 }, - { "time": 0.5, "angle": 5.17 }, - { "time": 0.6333, "angle": 18.36 }, - { "time": 0.7333, "angle": 6.09 }, - { "time": 0.8666, "angle": 2.28 }, - { "time": 1, "angle": 3.6 } - ] - }, - "head": { - "rotate": [ - { - "time": 0, - "angle": 3.6, - "curve": [ 0, 0, 0.704, 1.17 ] - }, - { "time": 0.1333, "angle": -0.2 }, - { "time": 0.2333, "angle": 6.1 }, - { "time": 0.3666, "angle": 3.45 }, - { - "time": 0.5, - "angle": 5.17, - "curve": [ 0, 0, 0.704, 1.61 ] - }, - { "time": 0.6666, "angle": 1.1 }, - { "time": 0.7333, "angle": 6.09 }, - { "time": 0.8666, "angle": 2.28 }, - { "time": 1, "angle": 3.6 } - ] - }, - "pelvis": { - "rotate": [ - { "time": 0, "angle": -1.33 } - ], - "translate": [ - { "time": 0, "x": 0.39, "y": -0.78 } - ] - }, - "spear1": { - "rotate": [ - { "time": 0, "angle": 1.84 }, - { "time": 0.2, "angle": -5.38 }, - { "time": 0.5, "angle": 2.95 }, - { "time": 0.7333, "angle": -3.67 }, - { "time": 1, "angle": 1.84 } - ] - }, - "spear2": { - "rotate": [ - { "time": 0, "angle": 1.84 }, - { "time": 0.2, "angle": -5.38 }, - { "time": 0.5, "angle": 2.95 }, - { "time": 0.7333, "angle": -3.67 }, - { "time": 1, "angle": 1.84 } - ] - }, - "spear3": { - "rotate": [ - { "time": 0, "angle": 3.64 }, - { "time": 0.2, "angle": -3.59 }, - { "time": 0.5, "angle": 4.74 }, - { "time": 0.7333, "angle": -1.87 }, - { "time": 1, "angle": 3.64 } - ] - } - }, - "ffd": { - "default": { - "left hand item": { - "spear": [ - { "time": 0 } - ] - }, - "right hand item": { - "dagger": [ - { - "time": 0, - "offset": 26, - "vertices": [ 2.34, 0.14 ], - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.5, - "offset": 8, - "vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ], - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 1, - "offset": 26, - "vertices": [ 2.34, 0.14 ] - } - ] - } - }, - "goblin": { - "head": { - "head": [ - { - "time": 0, - "curve": [ 0.632, 0, 0.75, 1 ] - }, - { - "time": 0.2, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ], - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.3666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ], - "curve": [ 0.621, 0, 0.75, 1 ] - }, - { - "time": 0.7, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ], - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.8666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ], - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1 } - ] - }, - "left foot": { - "left foot": [ - { - "time": 0, - "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] - }, - { "time": 0.1333 }, - { - "time": 0.2333, - "offset": 8, - "vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ] - }, - { - "time": 0.3666, - "offset": 8, - "vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ] - }, - { "time": 0.5, "curve": "stepped" }, - { "time": 0.6333 }, - { - "time": 0.7333, - "offset": 8, - "vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ] - }, - { - "time": 0.8333, - "offset": 6, - "vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ] - }, - { - "time": 1, - "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] - } - ] - }, - "pelvis": { - "pelvis": [ - { "time": 0 }, - { - "time": 0.1333, - "offset": 6, - "vertices": [ -0.68, -4.13 ] - }, - { - "time": 0.3333, - "offset": 6, - "vertices": [ -1.04, -3.1 ] - }, - { - "time": 0.7, - "offset": 6, - "vertices": [ -1.42, -6.3 ] - }, - { - "time": 0.8666, - "offset": 6, - "vertices": [ -1.13, -1.79 ] - }, - { "time": 1 } - ] - }, - "right foot": { - "right foot": [ - { "time": 0 }, - { - "time": 0.1333, - "offset": 2, - "vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ] - }, - { - "time": 0.2333, - "offset": 2, - "vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ] - }, - { - "time": 0.3, - "offset": 2, - "vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ] - }, - { - "time": 0.3666, - "offset": 2, - "vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ] - }, - { - "time": 0.5, - "offset": 2, - "vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ] - }, - { "time": 0.6333 }, - { - "time": 0.7333, - "offset": 4, - "vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ] - }, - { - "time": 0.8, - "offset": 4, - "vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ] - }, - { "time": 0.8666 } - ] - }, - "right hand": { - "right hand": [ - { - "time": 0, - "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] - }, - { "time": 0.5 }, - { - "time": 1, - "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] - } - ] - }, - "right lower leg": { - "right lower leg": [ - { "time": 0 }, - { - "time": 0.6, - "offset": 6, - "vertices": [ 1.8, -1.56 ] - }, - { "time": 1 } - ] - }, - "right upper leg": { - "right upper leg": [ - { - "time": 0, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] - }, - { "time": 0.3333 }, - { - "time": 0.8666, - "offset": 14, - "vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ] - }, - { - "time": 1, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] - } - ] - }, - "torso": { - "torso": [ - { - "time": 0, - "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] - }, - { - "time": 0.1333, - "offset": 14, - "vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] - }, - { - "time": 0.3, - "offset": 14, - "vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ] - }, - { - "time": 0.5, - "offset": 14, - "vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ] - }, - { - "time": 0.6333, - "offset": 14, - "vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] - }, - { - "time": 0.8666, - "offset": 14, - "vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ] - }, - { - "time": 1, - "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] - } - ] - }, - "undie straps": { - "undie straps": [ - { - "time": 0, - "offset": 2, - "vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ] - }, - { - "time": 0.1333, - "offset": 2, - "vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ] - }, - { - "time": 0.3333, - "offset": 2, - "vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ] - }, - { - "time": 0.7, - "offset": 2, - "vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ] - }, - { - "time": 0.8666, - "offset": 2, - "vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ] - }, - { - "time": 1, - "offset": 2, - "vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ] - } - ] - }, - "undies": { - "undies": [ - { - "time": 0, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] - }, - { - "time": 0.1333, - "vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ] - }, - { - "time": 0.3333, - "vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ] - }, - { - "time": 0.5333, - "vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ] - }, - { - "time": 0.7, - "vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ] - }, - { - "time": 0.8333, - "vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ] - }, - { - "time": 0.8666, - "vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ] - }, - { - "time": 1, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] - } - ] - } - } - } - } -} -} \ No newline at end of file diff --git a/spine-cocos2dx/2/example/Resources/common/spineboy.json b/spine-cocos2dx/2/example/Resources/common/spineboy.json deleted file mode 100644 index 1ffa7aad5..000000000 --- a/spine-cocos2dx/2/example/Resources/common/spineboy.json +++ /dev/null @@ -1,2412 +0,0 @@ -{ -"bones": [ - { "name": "hip", "y": 247.47 }, - { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, - { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, - { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, - { - "name": "front_shin", - "parent": "front_thigh", - "length": 128.76, - "x": 78.69, - "y": 1.6, - "rotation": -2.21, - "inheritScale": false, - "color": "00ff04ff" - }, - { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, - { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, - { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, - { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, - { - "name": "front_bracer", - "parent": "front_upper_arm", - "length": 40.57, - "x": 68.8, - "y": -0.68, - "rotation": 18.29, - "color": "00ff04ff" - }, - { "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" }, - { "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, - { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, - { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" }, - { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, - { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, - { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "color": "ff000dff" } -], -"slots": [ - { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, - { "name": "rear_bracer", "bone": "rear_bracer", "attachment": "rear_bracer" }, - { "name": "gun", "bone": "gun", "attachment": "gun" }, - { "name": "rear_foot", "bone": "rear_foot", "attachment": "rear_foot" }, - { "name": "rear_thigh", "bone": "rear_thigh", "attachment": "rear_thigh" }, - { "name": "rear_shin", "bone": "rear_shin", "attachment": "rear_shin" }, - { "name": "neck", "bone": "neck", "attachment": "neck" }, - { "name": "torso", "bone": "torso", "attachment": "torso" }, - { "name": "front_upper_arm", "bone": "front_upper_arm", "attachment": "front_upper_arm" }, - { "name": "head", "bone": "head", "attachment": "head" }, - { "name": "eye", "bone": "head", "attachment": "eye_indifferent" }, - { "name": "front_thigh", "bone": "front_thigh", "attachment": "front_thigh" }, - { "name": "front_foot", "bone": "front_foot", "attachment": "front_foot" }, - { "name": "front_shin", "bone": "front_shin", "attachment": "front_shin" }, - { "name": "mouth", "bone": "head", "attachment": "mouth_smile" }, - { "name": "goggles", "bone": "head", "attachment": "goggles" }, - { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, - { "name": "front_fist", "bone": "front_fist", "attachment": "front_fist_closed" }, - { "name": "muzzle", "bone": "gunTip", "additive": true } -], -"skins": { - "default": { - "eye": { - "eye_indifferent": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 }, - "eye_surprised": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 } - }, - "front_bracer": { - "front_bracer": { "x": 12.03, "y": -1.67, "rotation": 79.59, "width": 58, "height": 80 } - }, - "front_fist": { - "front_fist_closed": { "x": 35.49, "y": 6, "rotation": 67.16, "width": 75, "height": 82 }, - "front_fist_open": { "x": 39.56, "y": 7.76, "rotation": 67.16, "width": 86, "height": 87 } - }, - "front_foot": { - "front_foot": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 126, "height": 69 }, - "front_foot_bend1": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 128, "height": 70 }, - "front_foot_bend2": { "x": 16.07, "y": 13.83, "rotation": 18.68, "width": 108, "height": 93 } - }, - "front_shin": { - "front_shin": { "x": 55.11, "y": -3.54, "rotation": 96.59, "width": 82, "height": 184 } - }, - "front_thigh": { - "front_thigh": { "x": 42.47, "y": 4.44, "rotation": 84.86, "width": 48, "height": 112 } - }, - "front_upper_arm": { - "front_upper_arm": { "x": 28.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } - }, - "goggles": { - "goggles": { "x": 97.07, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 } - }, - "gun": { - "gun": { "x": 77.3, "y": 16.4, "rotation": 60.82, "width": 210, "height": 203 } - }, - "head": { - "head": { "x": 128.95, "y": 0.29, "rotation": -70.63, "width": 271, "height": 298 } - }, - "mouth": { - "mouth_grind": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, - "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, - "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 } - }, - "muzzle": { - "muzzle": { "x": 18.25, "y": 5.44, "rotation": 0.15, "width": 462, "height": 400 } - }, - "neck": { - "neck": { "x": 9.76, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 } - }, - "rear_bracer": { - "rear_bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 } - }, - "rear_foot": { - "rear_foot": { "x": 31.51, "y": 3.57, "rotation": 23.07, "width": 113, "height": 60 }, - "rear_foot_bend1": { "x": 34.39, "y": 4.8, "rotation": 23.07, "width": 117, "height": 66 }, - "rear_foot_bend2": { "x": 30.38, "y": 12.62, "rotation": 23.07, "width": 103, "height": 83 } - }, - "rear_shin": { - "rear_shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 } - }, - "rear_thigh": { - "rear_thigh": { "x": 33.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } - }, - "rear_upper_arm": { - "rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 } - }, - "torso": { - "torso": { "x": 63.61, "y": 7.12, "rotation": -94.53, "width": 98, "height": 180 } - } - } -}, -"events": { - "footstep": {}, - "headAttach": { "int": 3, "float": 4 }, - "headBehind": { "int": 5, "float": 6, "string": "setup" }, - "headPop": { "int": 1, "float": 2 } -}, -"animations": { - "death": { - "slots": { - "eye": { - "attachment": [ - { "time": 0, "name": "eye_surprised" }, - { "time": 0.4666, "name": "eye_indifferent" }, - { "time": 2.2333, "name": "eye_surprised" }, - { "time": 4.5333, "name": "eye_indifferent" } - ] - }, - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_oooo" }, - { "time": 2.2333, "name": "mouth_grind" }, - { "time": 4.5333, "name": "mouth_oooo" } - ] - } - }, - "bones": { - "head": { - "rotate": [ - { "time": 0, "angle": -2.82 }, - { "time": 0.1333, "angle": -28.74 }, - { "time": 0.2333, "angle": 11.42 }, - { "time": 0.3333, "angle": -50.24 }, - { "time": 0.4, "angle": -72.66, "curve": "stepped" }, - { "time": 0.4333, "angle": -72.66 }, - { "time": 0.5, "angle": -20.24 }, - { "time": 0.5666, "angle": -85.28, "curve": "stepped" }, - { "time": 0.9333, "angle": -85.28, "curve": "stepped" }, - { "time": 2.2333, "angle": -85.28 }, - { "time": 2.5, "angle": -51.96, "curve": "stepped" }, - { "time": 4.5333, "angle": -51.96 }, - { "time": 4.6666, "angle": -85.28 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": -2.82 }, - { "time": 0.1333, "angle": 12.35 }, - { "time": 0.2333, "angle": 29.89 }, - { "time": 0.3, "angle": 70.36 }, - { "time": 0.4, "angle": -10.22, "curve": "stepped" }, - { "time": 0.4333, "angle": -10.22 }, - { "time": 0.5, "angle": 2.92 }, - { "time": 0.5666, "angle": 47.94, "curve": "stepped" }, - { "time": 2.2333, "angle": 47.94 }, - { "time": 2.5, "angle": 18.5, "curve": "stepped" }, - { "time": 4.5333, "angle": 18.5 }, - { "time": 4.6666, "angle": 47.94 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -8.61 }, - { "time": 0.1333, "angle": 28.19 }, - { "time": 0.2666, "angle": -280.19 }, - { "time": 0.4, "angle": -237.22, "curve": "stepped" }, - { "time": 0.4333, "angle": -237.22 }, - { "time": 0.5, "angle": 76.03, "curve": "stepped" }, - { "time": 0.8, "angle": 76.03, "curve": "stepped" }, - { "time": 0.9333, "angle": 76.03, "curve": "stepped" }, - { "time": 2.2333, "angle": 76.03 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 2.2333, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -38.85 }, - { "time": 0.1333, "angle": -299.58 }, - { "time": 0.2666, "angle": -244.74 }, - { "time": 0.4, "angle": -292.35 }, - { "time": 0.4333, "angle": -315.84 }, - { "time": 0.5, "angle": -347.94 }, - { "time": 0.7, "angle": -347.33, "curve": "stepped" }, - { "time": 2.2333, "angle": -347.33 }, - { "time": 2.7, "angle": -290.68 }, - { "time": 2.7666, "angle": -285.1 }, - { "time": 4.6666, "angle": -290.68 }, - { "time": 4.8, "angle": 8.61 }, - { "time": 4.8666, "angle": 10.94 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": -44.69 }, - { "time": 0.1333, "angle": 112.26 }, - { "time": 0.2666, "angle": 129.07 }, - { "time": 0.4, "angle": 134.94, "curve": "stepped" }, - { "time": 0.4333, "angle": 134.94 }, - { "time": 0.5666, "angle": 172.6, "curve": "stepped" }, - { "time": 0.9333, "angle": 172.6, "curve": "stepped" }, - { "time": 2.2333, "angle": 172.6 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 21.88 }, - { "time": 0.1333, "angle": 11.48 }, - { "time": 0.2666, "angle": -18.81 }, - { "time": 0.4, "angle": -18.92 }, - { "time": 0.4333, "angle": -18.28 }, - { "time": 0.5, "angle": 60.61 }, - { "time": 0.7, "angle": -18.87, "curve": "stepped" }, - { "time": 2.2333, "angle": -18.87 }, - { "time": 2.7, "angle": -1.95, "curve": "stepped" }, - { "time": 4.6666, "angle": -1.95 }, - { "time": 4.8, "angle": 34.55 }, - { "time": 4.9333, "angle": -18.74 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -2.33 }, - { "time": 0.2666, "angle": 26.34 }, - { "time": 0.7, "angle": -6.07, "curve": "stepped" }, - { "time": 2.2333, "angle": -6.07 }, - { "time": 2.7, "angle": 5.72, "curve": "stepped" }, - { "time": 4.6666, "angle": 5.72 }, - { "time": 4.8666, "angle": -6.52 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 10.36 }, - { "time": 0.1333, "angle": -23.12 }, - { "time": 0.2666, "angle": -23.11 }, - { "time": 0.4, "angle": -23.16, "curve": "stepped" }, - { "time": 0.4333, "angle": -23.16 }, - { "time": 0.5666, "angle": -23.2, "curve": "stepped" }, - { "time": 0.9333, "angle": -23.2, "curve": "stepped" }, - { "time": 2.2333, "angle": -23.2 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": -2.78 }, - { "time": 0.1333, "angle": -24.58 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.9333, "angle": 0, "curve": "stepped" }, - { "time": 2.2333, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.2, "x": 50.34, "y": 151.73 }, - { "time": 0.4, "x": 5.16, "y": -119.64, "curve": "stepped" }, - { "time": 0.4333, "x": 5.16, "y": -119.64 }, - { "time": 0.5, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 0.8, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 0.9333, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 2.2333, "x": 50.34, "y": -205.18 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_thigh": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 8.47 }, - { "time": 0.2666, "angle": 115.95 }, - { "time": 0.4, "angle": 180.66, "curve": "stepped" }, - { "time": 0.4333, "angle": 180.66 }, - { "time": 0.5, "angle": 155.22 }, - { "time": 0.6, "angle": 97.73 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": -27.37 }, - { "time": 0.2666, "angle": -35.1 }, - { "time": 0.4, "angle": -37.72, "curve": "stepped" }, - { "time": 0.4333, "angle": -37.72 }, - { "time": 0.5, "angle": -40.06 }, - { "time": 0.6, "angle": 2.76 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 70.45 }, - { "time": 0.2666, "angle": 155.34 }, - { "time": 0.4, "angle": 214.31, "curve": "stepped" }, - { "time": 0.4333, "angle": 214.31 }, - { "time": 0.5, "angle": 169.67 }, - { "time": 0.8, "angle": 83.27 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 18.93 }, - { "time": 0.2666, "angle": -21.04 }, - { "time": 0.4, "angle": -29.93, "curve": "stepped" }, - { "time": 0.4333, "angle": -29.93 }, - { "time": 0.5, "angle": -16.79 }, - { "time": 0.8, "angle": 7.77 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": -11.62 }, - { "time": 0.4, "angle": -45.59, "curve": "stepped" }, - { "time": 0.4333, "angle": -45.59 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.4, "angle": -48.75, "curve": "stepped" }, - { "time": 0.4333, "angle": -48.75 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "gunTip": { - "rotate": [ - { "time": 0, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - } - } - }, - "hit": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0.1666, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_grind" }, - { "time": 0.3333, "name": "mouth_smile" } - ] - } - }, - "bones": { - "torso": { - "rotate": [ - { "time": 0, "angle": 56.42 }, - { "time": 0.3333, "angle": 8.89 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 35.38 }, - { "time": 0.2333, "angle": 24.94 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 10.21 }, - { "time": 0.3333, "angle": -41.3 } - ] - }, - "front_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": -310.92, - "curve": [ 0.38, 0.53, 0.744, 1 ] - }, - { "time": 0.3333, "angle": -112.59 } - ], - "translate": [ - { "time": 0, "x": 7.23, "y": -13.13 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 36.99 }, - { "time": 0.3333, "angle": -28.64 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": 13.59 }, - { "time": 0.3333, "angle": 7.55 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": 271.02, - "curve": [ 0.342, 0.36, 0.68, 0.71 ] - }, - { "time": 0.3333, "angle": -15.84 } - ], - "translate": [ - { "time": 0.3333, "x": -0.09, "y": -0.46 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.3333, "angle": 40.03 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 14.98 }, - { "time": 0.3333, "angle": 39.75 } - ] - }, - "hip": { - "translate": [ - { "time": 0, "x": -75.54, "y": -78.03 }, - { "time": 0.2333, "x": -36.48, "y": 12.42 }, - { "time": 0.3333, "x": -36.48, "y": -2.99 } - ] - }, - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 90.94, - "curve": [ 0.227, 0.26, 0.432, 1 ] - }, - { "time": 0.3333, "angle": 32.02 } - ], - "translate": [ - { "time": 0, "x": 7.21, "y": -4 } - ] - }, - "rear_thigh": { - "rotate": [ - { - "time": 0, - "angle": 40.51, - "curve": [ 0.295, 0.3, 0.59, 0.99 ] - }, - { "time": 0.3333, "angle": 90.76 } - ], - "translate": [ - { "time": 0, "x": -1.96, "y": -0.32 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": -96.62 }, - { "time": 0.3333, "angle": -15.13 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": 7.99 }, - { "time": 0.3333, "angle": -67.54 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 5.4 }, - { "time": 0.3333, "angle": -16.26 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 2.67 }, - { "time": 0.3333, "angle": -10.31 } - ] - } - } - }, - "idle": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_open" }, - { "time": 1.6666, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_smile" }, - { "time": 1.6666, "name": "mouth_smile" } - ] - } - }, - "bones": { - "torso": { - "rotate": [ - { - "time": 0, - "angle": -5.61, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.8333, - "angle": -9.65, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -5.61 } - ], - "translate": [ - { "time": 0, "x": -6.49, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": -59.85, - "curve": [ 0.492, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -54.31, - "curve": [ 0.324, 0.11, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -59.85 } - ], - "translate": [ - { "time": 0, "x": -7.12, "y": -8.23 }, - { "time": 0.6666, "x": -6.32, "y": -8.3 }, - { "time": 1.6666, "x": -7.12, "y": -8.23 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": 62.41, - "curve": [ 0.504, 0.02, 0.75, 1 ] - }, - { - "time": 0.7333, - "angle": 43.83, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": 62.41 } - ], - "translate": [ - { "time": 0, "x": -1.83, "y": -16.78 }, - { "time": 0.6666, "x": 0.34, "y": -15.23 }, - { "time": 1.6666, "x": -1.83, "y": -16.78 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.6666, "angle": 2.39 }, - { "time": 1.6666, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": -1.88, "y": -4.76, "curve": "stepped" }, - { "time": 1.6666, "x": -1.88, "y": -4.76 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 0.64, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": -4.34, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": 0.64 } - ], - "translate": [ - { "time": 0, "x": -13.39, "y": 6.69, "curve": "stepped" }, - { "time": 1.6666, "x": -13.39, "y": 6.69 } - ], - "scale": [ - { - "time": 0, - "x": 0.896, - "y": 1, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "x": 0.825, - "y": 1, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "x": 0.896, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": -19.28, "curve": "stepped" }, - { "time": 1.6666, "angle": -19.28 } - ], - "scale": [ - { - "time": 0, - "x": 1, - "y": 1, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "x": 0.994, - "y": 1, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { - "time": 0, - "angle": 30.5, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": 40.15, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": 30.5 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { - "time": 0, - "angle": -23.83, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": -43.77, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": -23.83 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { - "time": 0, - "angle": 5.13, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": 10.04, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": 5.13 } - ], - "scale": [ - { "time": 0, "x": 0.755, "y": 1.309, "curve": "stepped" }, - { "time": 1.6666, "x": 0.755, "y": 1.309 } - ] - }, - "hip": { - "translate": [ - { - "time": 0, - "x": -6.63, - "y": -23.01, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "x": 6.27, - "y": -35, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "x": -6.63, "y": -23.01 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { - "time": 0, - "angle": -7.34, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": 3.85, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": -7.34 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { - "time": 0, - "angle": -17.16, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": 12.52, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -17.16 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { - "time": 0, - "angle": -5.51, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -3.12, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -5.51 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { - "time": 0, - "angle": 45.46, - "curve": [ 0.492, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": 41.33, - "curve": [ 0.32, 0.1, 0.736, 0.91 ] - }, - { "time": 1.6666, "angle": 45.46 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { - "time": 0, - "angle": 0, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -15.59, - "curve": [ 0.732, 0, 0.769, 0.99 ] - }, - { "time": 1.6666, "angle": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { - "time": 0, - "angle": -6.84, - "curve": [ 0.492, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -14.63, - "curve": [ 0.324, 0.11, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -6.84 } - ], - "scale": [ - { - "time": 0, - "x": 1, - "y": 1, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "x": 0.689, - "y": 1.1, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - } - } - }, - "jump": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_open" }, - { "time": 0.2, "name": "front_fist_closed" }, - { "time": 0.6666, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_grind" } - ] - }, - "torso": { - "attachment": [ - { "time": 0, "name": "torso" } - ] - } - }, - "bones": { - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 91.53, - "curve": [ 0.278, 0.46, 0.763, 1 ] - }, - { - "time": 0.2, - "angle": -35.83, - "curve": [ 0.761, 0, 0.75, 1 ] - }, - { "time": 0.4333, "angle": 127.74 }, - { - "time": 0.7333, - "angle": 48.18, - "curve": [ 0.227, 0.26, 0.432, 1 ] - }, - { "time": 0.8333, "angle": 25.35 }, - { "time": 0.9333, "angle": 45.37 }, - { "time": 1.0333, "angle": 38.12 }, - { "time": 1.1333, "angle": 25.35 }, - { "time": 1.3333, "angle": 91.53 } - ], - "translate": [ - { "time": 0, "x": -2.56, "y": 5.77 }, - { "time": 0.4333, "x": 8.3, "y": 7.98 }, - { "time": 0.7333, "x": 7.21, "y": -4 }, - { "time": 1.3333, "x": -2.56, "y": 5.77 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -42.63 }, - { "time": 0.2, "angle": -5.74 }, - { "time": 0.4333, "angle": -50.76 }, - { "time": 0.7333, "angle": 1.89 }, - { "time": 0.8333, "angle": 11.58 }, - { "time": 0.9666, "angle": -1.89 }, - { "time": 1.1333, "angle": 11.58 }, - { "time": 1.3333, "angle": -42.63 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": -26.32 }, - { "time": 0.2, "angle": 121.44 }, - { "time": 0.4333, "angle": 70.54 }, - { - "time": 0.7333, - "angle": 79.89, - "curve": [ 0.295, 0.3, 0.59, 0.99 ] - }, - { "time": 0.8333, "angle": 99.12 }, - { "time": 0.9333, "angle": 74.05 }, - { "time": 1.0333, "angle": 98.04 }, - { "time": 1.1333, "angle": 99.12 }, - { "time": 1.3333, "angle": -26.32 } - ], - "translate": [ - { "time": 0, "x": -0.56, "y": -0.32 }, - { "time": 0.4333, "x": -8.5, "y": 10.58 }, - { "time": 0.7333, "x": -1.96, "y": -0.32 }, - { "time": 1.3333, "x": -0.56, "y": -0.32 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": -78.69 }, - { "time": 0.4333, "angle": -55.56 }, - { "time": 0.7333, "angle": -62.84 }, - { "time": 0.8333, "angle": -80.74 }, - { "time": 0.9333, "angle": -41.12 }, - { "time": 1.0333, "angle": -77.4 }, - { "time": 1.1333, "angle": -80.74 }, - { "time": 1.3333, "angle": -78.69 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.7333, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -22.61 }, - { "time": 0.2, "angle": -246.68 }, - { - "time": 0.6, - "angle": 11.28, - "curve": [ 0.246, 0, 0.633, 0.53 ] - }, - { - "time": 0.7333, - "angle": -57.45, - "curve": [ 0.38, 0.53, 0.744, 1 ] - }, - { "time": 0.8666, "angle": -112.59 }, - { "time": 0.9333, "angle": -102.17 }, - { "time": 1.0333, "angle": -108.61 }, - { "time": 1.1333, "angle": -112.59 }, - { "time": 1.3333, "angle": -22.61 } - ], - "translate": [ - { "time": 0, "x": 6.08, "y": 7.15 }, - { "time": 0.2, "x": 7.23, "y": -13.13, "curve": "stepped" }, - { "time": 0.7333, "x": 7.23, "y": -13.13 }, - { "time": 1.3333, "x": 6.08, "y": 7.15 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 66.46 }, - { "time": 0.2, "angle": 42.39 }, - { "time": 0.4333, "angle": 26.06 }, - { "time": 0.7333, "angle": 13.28 }, - { "time": 0.8666, "angle": -28.64 }, - { "time": 0.9333, "angle": -22.31 }, - { "time": 1.0333, "angle": -35.39 }, - { "time": 1.1333, "angle": -28.64 }, - { "time": 1.3333, "angle": 66.46 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -28.43 }, - { "time": 0.4333, "angle": -45.6 }, - { "time": 0.7333, "angle": -53.66 }, - { "time": 0.8666, "angle": 7.55 }, - { "time": 0.9333, "angle": 31.15 }, - { "time": 1.0333, "angle": -32.58 }, - { "time": 1.1333, "angle": 7.55 }, - { "time": 1.3333, "angle": -28.43 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 39.68 }, - { "time": 0.2, "angle": 276.57 }, - { "time": 0.3, "angle": 17.73 }, - { "time": 0.4333, "angle": 83.38 }, - { - "time": 0.6, - "angle": -4.71, - "curve": [ 0.246, 0, 0.633, 0.53 ] - }, - { - "time": 0.7333, - "angle": -69.63, - "curve": [ 0.342, 0.36, 0.68, 0.71 ] - }, - { - "time": 0.7666, - "angle": 321.47, - "curve": [ 0.333, 0.33, 0.667, 0.66 ] - }, - { - "time": 0.8, - "angle": 33.7, - "curve": [ 0.358, 0.64, 0.693, 1 ] - }, - { "time": 0.8666, "angle": 34.56 }, - { "time": 1.0333, "angle": 71.96 }, - { "time": 1.1333, "angle": 34.56 }, - { "time": 1.3333, "angle": 39.68 } - ], - "translate": [ - { "time": 0, "x": -3.1, "y": -4.86 }, - { "time": 0.2, "x": 23.33, "y": 49.07 }, - { "time": 0.4333, "x": 20.78, "y": 40.21 }, - { "time": 1.3333, "x": -3.1, "y": -4.86 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 29.66 }, - { "time": 0.2, "angle": 45.06 }, - { "time": 0.4333, "angle": -4.34 }, - { "time": 0.7666, "angle": 61.68 }, - { "time": 0.8, "angle": 82.59 }, - { "time": 0.8666, "angle": 80.06 }, - { "time": 1.0333, "angle": 57.56 }, - { "time": 1.1333, "angle": 80.06 }, - { "time": 1.3333, "angle": 29.66 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 24.9 }, - { "time": 0.2, "angle": 16.31 }, - { "time": 0.4333, "angle": 7.44 }, - { "time": 0.7333, "angle": -20.35 }, - { "time": 0.8333, "angle": -0.69, "curve": "stepped" }, - { "time": 1.1333, "angle": -0.69 }, - { "time": 1.3333, "angle": 24.9 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 24.92 }, - { "time": 0.2, "angle": 10.36 }, - { "time": 0.4333, "angle": 28.65 }, - { "time": 0.7333, "angle": -2.65 }, - { "time": 0.8333, "angle": -28.94, "curve": "stepped" }, - { "time": 1.1333, "angle": -28.94 }, - { "time": 1.3333, "angle": 24.92 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0 } - ], - "translate": [ - { - "time": 0, - "x": -34.51, - "y": -78.62, - "curve": [ 0.232, 1, 0.75, 1 ] - }, - { - "time": 0.2, - "x": -34.51, - "y": 182.5, - "curve": [ 0.232, 0.48, 0.598, 0.79 ] - }, - { - "time": 0.7666, - "x": -34.51, - "y": 596.22, - "curve": [ 0.329, 0.17, 0.66, 0.21 ] - }, - { "time": 1.1333, "x": -34.51, "y": 2.49 }, - { "time": 1.3333, "x": -34.51, "y": -78.62 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { - "time": 0, - "angle": -90.62, - "curve": [ 0.416, 0.54, 0.743, 1 ] - }, - { - "time": 0.2, - "angle": -10.52, - "curve": [ 0.644, 0, 0.75, 1 ] - }, - { "time": 0.4333, "angle": -127.72 }, - { "time": 0.7333, "angle": -19.91 }, - { "time": 0.8333, "angle": -5.16 }, - { "time": 0.9333, "angle": -35.06 }, - { "time": 1.0333, "angle": -43.97 }, - { "time": 1.1333, "angle": -5.16 }, - { "time": 1.3333, "angle": -90.62 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": -0.79 }, - { "time": 0.0333, "angle": 16.27 }, - { "time": 0.0666, "angle": 23.52 }, - { "time": 0.1, "angle": 21.02 }, - { "time": 0.1333, "angle": 10.92 }, - { "time": 0.2, "angle": -38.45 }, - { "time": 0.4333, "angle": 6.62 }, - { "time": 0.7333, "angle": -11.51 }, - { "time": 1.0333, "angle": -22.91 }, - { "time": 1.3333, "angle": -0.79 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": -12.77 }, - { "time": 0.2, "angle": 17.05 }, - { "time": 0.4333, "angle": 19.45 }, - { "time": 0.7333, "angle": 2.67 }, - { "time": 1.0333, "angle": -28.49 }, - { "time": 1.3333, "angle": -12.77 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 6.18 }, - { "time": 0.2, "angle": 30.81 }, - { "time": 0.4333, "angle": 13.25 }, - { "time": 0.7333, "angle": 14.98 }, - { "time": 0.7666, "angle": 25.64 }, - { "time": 0.8, "angle": 20.62 }, - { "time": 0.8666, "angle": 64.52 }, - { "time": 1.0333, "angle": 8.59 }, - { "time": 1.1333, "angle": 64.52 }, - { "time": 1.3333, "angle": 6.18 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - } - } - }, - "run": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_closed" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_grind" } - ] - }, - "torso": { - "attachment": [ - { "time": 0, "name": "torso" } - ] - } - }, - "bones": { - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 42.05, - "curve": [ 0.195, 0.86, 0.75, 1 ] - }, - { "time": 0.0666, "angle": 46.07 }, - { "time": 0.1333, "angle": -20.28 }, - { "time": 0.2, "angle": -27.23 }, - { "time": 0.2666, "angle": -47.16 }, - { "time": 0.3333, "angle": -39.79 }, - { "time": 0.4, "angle": -25.86 }, - { "time": 0.4666, "angle": 14.35 }, - { "time": 0.5333, "angle": 55.62 }, - { "time": 0.6, "angle": 69.65 }, - { "time": 0.6666, "angle": 86.4 }, - { "time": 0.7333, "angle": 65.87 }, - { "time": 0.8, "angle": 42.05 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.0333, "x": -5.79, "y": 11.15 }, - { "time": 0.0666, "x": -5.13, "y": 11.55 }, - { "time": 0.1333, "x": -7.7, "y": 8.98 }, - { "time": 0.5333, "x": -1.26, "y": 3.83 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -39.7 }, - { "time": 0.2, "angle": -57.29 }, - { "time": 0.4, "angle": -39.7 }, - { "time": 0.6, "angle": -57.29 }, - { "time": 0.8, "angle": -39.7 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": -56.59 }, - { "time": 0.0666, "angle": -21.57 }, - { "time": 0.1333, "angle": 27.95 }, - { "time": 0.2, "angle": 42.42 }, - { "time": 0.2666, "angle": 62.37 }, - { "time": 0.3333, "angle": 45.42 }, - { "time": 0.4, "angle": 15.67 }, - { "time": 0.4666, "angle": 28.22 }, - { "time": 0.5333, "angle": -38.62 }, - { "time": 0.6, "angle": -53.26 }, - { "time": 0.6666, "angle": -79.31 }, - { "time": 0.7333, "angle": -86.47 }, - { "time": 0.8, "angle": -56.59 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.4, "x": -6.76, "y": -3.86 }, - { "time": 0.4333, "x": -15.85, "y": 7.28 }, - { "time": 0.4666, "x": -13.04, "y": 4.04 }, - { "time": 0.5, "x": -10.24, "y": 7.11 }, - { "time": 0.5333, "x": -9.01, "y": -5.15 }, - { "time": 0.6666, "x": -23.18, "y": -2.57 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": -74 }, - { "time": 0.0666, "angle": -83.38 }, - { "time": 0.1333, "angle": -106.69 }, - { "time": 0.2, "angle": -66.01 }, - { "time": 0.2666, "angle": -55.22 }, - { "time": 0.3333, "angle": -24.8 }, - { - "time": 0.4, - "angle": 18.44, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.4666, "angle": -56.65 }, - { - "time": 0.5333, - "angle": -11.94, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.6666, "angle": -41.26 }, - { "time": 0.7333, "angle": -43.6 }, - { "time": 0.8, "angle": -74 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -89.36 }, - { "time": 0.0666, "angle": -95.67 }, - { "time": 0.1333, "angle": -22 }, - { "time": 0.2, "angle": -316.04 }, - { "time": 0.2666, "angle": -274.94 }, - { "time": 0.3333, "angle": -273.74 }, - { "time": 0.4, "angle": -272.09 }, - { "time": 0.4666, "angle": -264.89 }, - { "time": 0.5333, "angle": -320.09 }, - { "time": 0.6, "angle": -50.83 }, - { "time": 0.6666, "angle": -81.72 }, - { "time": 0.7333, "angle": -83.92 }, - { "time": 0.8, "angle": -89.36 } - ], - "translate": [ - { "time": 0, "x": 6.24, "y": 10.05 }, - { "time": 0.2666, "x": 4.95, "y": -13.13 }, - { "time": 0.6, "x": -2.43, "y": 1.94 }, - { "time": 0.8, "x": 6.24, "y": 10.05 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 33.43 }, - { "time": 0.0666, "angle": 20.53 }, - { "time": 0.1333, "angle": 15.26 }, - { "time": 0.2, "angle": 19.28 }, - { "time": 0.2666, "angle": 22.62 }, - { "time": 0.3333, "angle": 37.29 }, - { "time": 0.4, "angle": 41.53 }, - { "time": 0.4666, "angle": 31.73 }, - { "time": 0.5333, "angle": 67.45 }, - { "time": 0.6666, "angle": 39.77 }, - { "time": 0.7333, "angle": 30.95 }, - { "time": 0.8, "angle": 33.43 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -19.75 }, - { "time": 0.0666, "angle": -37.11 }, - { "time": 0.1333, "angle": -50.79 }, - { "time": 0.2666, "angle": -12.69 }, - { "time": 0.3333, "angle": 3.01 }, - { "time": 0.4333, "angle": 12.05 }, - { "time": 0.5333, "angle": 13.25 }, - { "time": 0.8, "angle": -19.75 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 68.68 }, - { "time": 0.0666, "angle": 73.89 }, - { "time": 0.1333, "angle": -9.64 }, - { "time": 0.2, "angle": 284.27 }, - { "time": 0.2666, "angle": 283.29 }, - { "time": 0.3333, "angle": 278.28 }, - { "time": 0.4, "angle": 271.02 }, - { "time": 0.4666, "angle": 263.2 }, - { "time": 0.5333, "angle": 314.25 }, - { "time": 0.6, "angle": 16.83 }, - { "time": 0.6666, "angle": 70.35 }, - { "time": 0.7333, "angle": 73.53 }, - { "time": 0.8, "angle": 68.68 } - ], - "translate": [ - { "time": 0, "x": -2.57, "y": -8.89 }, - { "time": 0.1333, "x": -4.68, "y": 7.2 }, - { "time": 0.2, "x": 21.73, "y": 51.17 }, - { "time": 0.6, "x": 4.33, "y": 2.05 }, - { "time": 0.8, "x": -2.57, "y": -8.89 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 31.04 }, - { "time": 0.0666, "angle": 28.28 }, - { "time": 0.1333, "angle": 49.36 }, - { "time": 0.2, "angle": 59.37 }, - { "time": 0.2666, "angle": 8.56 }, - { "time": 0.3333, "angle": 9.38 }, - { "time": 0.4, "angle": 11.51 }, - { "time": 0.4666, "angle": 7.22 }, - { "time": 0.5333, "angle": -18.44 }, - { "time": 0.6, "angle": 11.44 }, - { "time": 0.6666, "angle": 9.99 }, - { "time": 0.7333, "angle": 8.28 }, - { "time": 0.8, "angle": 31.04 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 11.03 }, - { "time": 0.2, "angle": 13.58 }, - { "time": 0.4, "angle": 11.03 }, - { "time": 0.6, "angle": 13.58 }, - { "time": 0.8, "angle": 11.03 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 11.03 }, - { "time": 0.1, "angle": 12.34 }, - { "time": 0.2, "angle": 25.55 }, - { "time": 0.4, "angle": 11.03 }, - { "time": 0.5, "angle": 12.34 }, - { "time": 0.6, "angle": 25.55 }, - { "time": 0.8, "angle": 11.03 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": -62.47, "y": -23.1 }, - { - "time": 0.0666, - "x": -62.47, - "y": -38.51, - "curve": [ 0.244, 0.04, 0.75, 1 ] - }, - { - "time": 0.2666, - "x": -62.47, - "y": 22.28, - "curve": [ 0.17, 0.52, 0.75, 1 ] - }, - { "time": 0.4, "x": -62.47, "y": -23.1 }, - { "time": 0.4333, "x": -62.47, "y": -24.59 }, - { - "time": 0.4666, - "x": -62.47, - "y": -43.29, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.6666, "x": -62.47, "y": 22.28 }, - { "time": 0.8, "x": -62.47, "y": -23.1 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { - "time": 0, - "angle": 0, - "curve": [ 0.481, 0.01, 0.75, 1 ] - }, - { "time": 0.0666, "angle": -64.42 }, - { - "time": 0.1333, - "angle": -20.59, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.2666, "angle": -62.51 }, - { "time": 0.3333, "angle": -79.74 }, - { "time": 0.4, "angle": -78.28 }, - { - "time": 0.4666, - "angle": -118.96, - "curve": [ 0.93, 0, 0.952, 0.95 ] - }, - { "time": 0.6, "angle": -88.95 }, - { "time": 0.6666, "angle": -79.09 }, - { "time": 0.7333, "angle": -47.77 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { - "time": 0.0333, - "angle": -21.13, - "curve": [ 0.121, 0.23, 0.75, 1 ] - }, - { "time": 0.0666, "angle": 17.64 }, - { "time": 0.1, "angle": 29.92 }, - { "time": 0.1333, "angle": 16.44 }, - { "time": 0.2, "angle": -29.22 }, - { "time": 0.2666, "angle": -1.61 }, - { "time": 0.3333, "angle": -10.22 }, - { "time": 0.4666, "angle": -15.99 }, - { "time": 0.6, "angle": 9.03 }, - { "time": 0.7333, "angle": 17.32 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.0666, "angle": -12.04 }, - { "time": 0.1333, "angle": -0.87 }, - { "time": 0.2, "angle": 25.81 }, - { "time": 0.2666, "angle": 4.71 }, - { - "time": 0.4, - "angle": 18.09, - "curve": [ 0.281, 0.73, 0.75, 1 ] - }, - { "time": 0.4333, "angle": -1.7 }, - { "time": 0.4666, "angle": 27.12 }, - { "time": 0.5, "angle": 38.83 }, - { "time": 0.5333, "angle": 30.76 }, - { "time": 0.5666, "angle": -20.49 }, - { "time": 0.6, "angle": -30.8 }, - { "time": 0.6666, "angle": -1.31 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 24.72 }, - { "time": 0.5, "angle": -11.87 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - } - }, - "events": [ - { "time": 0, "name": "footstep" }, - { "time": 0.4, "name": "footstep", "int": 1 } - ] - }, - "shoot": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0.1333, "name": "front_fist_closed" }, - { "time": 0.4, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0.1333, "name": "mouth_grind" } - ] - }, - "muzzle": { - "attachment": [ - { "time": 0.1333, "name": "muzzle" }, - { "time": 0.2666, "name": null } - ], - "color": [ - { - "time": 0.1333, - "color": "ffffff00", - "curve": [ 0.118, 0.99, 0.75, 1 ] - }, - { - "time": 0.1666, - "color": "ffffffff", - "curve": [ 0.821, 0, 0.909, 0.89 ] - }, - { "time": 0.2666, "color": "ffffff00" } - ] - } - }, - "bones": { - "front_fist": { - "scale": [ - { "time": 0.1333, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.4, "x": 1, "y": 1 } - ] - }, - "gunTip": { - "translate": [ - { "time": 0.1333, "x": 0, "y": 0 }, - { "time": 0.2, "x": 20.93, "y": 1.57 } - ], - "scale": [ - { "time": 0.1333, "x": 1, "y": 1 }, - { "time": 0.2, "x": 1.247, "y": 1.516 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 1.9 } - ], - "translate": [ - { - "time": 0, - "x": 7.95, - "y": 5.84, - "curve": [ 0, 0.3, 0.678, 1 ] - }, - { "time": 0.3, "x": -9.3, "y": -1.41 }, - { "time": 0.4, "x": 0, "y": 0 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": -30.47 } - ], - "translate": [ - { - "time": 0, - "x": 0, - "y": 0, - "curve": [ 0, 0.3, 0.678, 1 ] - }, - { "time": 0.3, "x": -5.99, "y": -3.71 }, - { "time": 0.4, "x": 0, "y": 0 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 62.3 } - ], - "translate": [ - { - "time": 0, - "x": 0, - "y": 0, - "curve": [ 0, 0.3, 0.678, 1 ] - }, - { "time": 0.3, "x": 2.81, "y": 11.41 }, - { "time": 0.4, "x": 0, "y": 0 } - ] - } - } - }, - "test": { - "slots": { - "front_foot": { - "color": [ - { "time": 0.6666, "color": "ffffffff" }, - { "time": 1.3333, "color": "ff0700ff" } - ] - }, - "gun": { - "color": [ - { "time": 0, "color": "ffffffff", "curve": "stepped" }, - { "time": 0.6666, "color": "ffffffff" }, - { "time": 1.3333, "color": "32ff00ff" } - ] - }, - "rear_foot": { - "color": [ - { "time": 0.6666, "color": "ffffffff" }, - { "time": 1.3333, "color": "ff0700ff" } - ] - } - }, - "bones": { - "head": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.3333, "angle": -20.72 }, - { "time": 0.6666, "angle": -32.41 }, - { "time": 1, "angle": -5.3 }, - { "time": 1.3333, "angle": 24.96 }, - { "time": 1.6666, "angle": 15.61 }, - { "time": 2, "angle": 0 } - ], - "translate": [ - { - "time": 0, - "x": 0, - "y": 0, - "curve": [ 0.172, 0.37, 0.574, 0.73 ] - }, - { - "time": 0.1666, - "x": 144.19, - "y": -77.59, - "curve": [ 0.372, 0.61, 0.765, 1 ] - }, - { - "time": 0.3333, - "x": 217.61, - "y": -192.63, - "curve": [ 0.282, 0, 0.624, 0.31 ] - }, - { - "time": 0.5, - "x": 181.21, - "y": -365.66, - "curve": [ 0.313, 0.21, 0.654, 0.54 ] - }, - { - "time": 0.6666, - "x": 20.09, - "y": -500.4, - "curve": [ 0.147, 0.27, 0.75, 1 ] - }, - { "time": 0.8333, "x": -194.24, "y": -341.84 }, - { "time": 1, "x": -307.93, "y": -114 }, - { - "time": 1.1666, - "x": -330.38, - "y": 121.42, - "curve": [ 0.25, 0, 0.764, 0.48 ] - }, - { - "time": 1.3333, - "x": -240.42, - "y": 335.66, - "curve": [ 0.229, 0.37, 0.58, 0.73 ] - }, - { - "time": 1.5, - "x": -56.12, - "y": 288.06, - "curve": [ 0.296, 0.6, 0.641, 1 ] - }, - { - "time": 1.6666, - "x": 87.63, - "y": 191.33, - "curve": [ 0.238, 0, 0.626, 0.39 ] - }, - { - "time": 1.8333, - "x": 60.62, - "y": 95.14, - "curve": [ 0.41, 0.26, 0.803, 0.62 ] - }, - { "time": 2, "x": 0, "y": 0 } - ] - } - }, - "draworder": [ - { - "time": 0.6666, - "offsets": [ - { "slot": "head", "offset": -9 }, - { "slot": "eye", "offset": -9 }, - { "slot": "mouth", "offset": -12 }, - { "slot": "goggles", "offset": -12 } - ] - }, - { "time": 1.3333 } - ], - "events": [ - { "time": 0, "name": "headPop", "int": 0, "float": 0, "string": "pop.wav" }, - { "time": 1, "name": "headBehind", "int": 7, "float": 8, "string": "animate" }, - { "time": 2, "name": "headAttach", "int": 0, "float": 0, "string": "attach.wav" } - ] - }, - "walk": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_closed" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_smile" } - ] - }, - "torso": { - "attachment": [ - { "time": 0, "name": "torso" } - ] - } - }, - "bones": { - "front_thigh": { - "rotate": [ - { "time": 0, "angle": 15.79 }, - { "time": 0.1, "angle": 27.39 }, - { "time": 0.2, "angle": -7.94 }, - { "time": 0.3, "angle": -16.94 }, - { "time": 0.4, "angle": -28.62 }, - { "time": 0.5, "angle": -19.3 }, - { "time": 0.6, "angle": -3.08 }, - { "time": 0.7, "angle": 29.51 }, - { "time": 0.8, "angle": 15.79 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.4, "x": -1.18, "y": 0.54 }, - { "time": 0.5, "x": 0.11, "y": 0.41 }, - { "time": 0.6, "x": 9.48, "y": 0.27 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.4, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": 5.12 }, - { "time": 0.1, "angle": -20.87 }, - { "time": 0.2, "angle": 13.37 }, - { "time": 0.3, "angle": 15.98 }, - { "time": 0.4, "angle": 5.94 }, - { "time": 0.5, "angle": -26.76 }, - { "time": 0.7, "angle": -55.44 }, - { "time": 0.8, "angle": 5.12 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": -34.38 }, - { "time": 0.1, "angle": -30.32 }, - { "time": 0.2, "angle": -37.22 }, - { "time": 0.3, "angle": 20.73 }, - { "time": 0.4, "angle": 8.69 }, - { "time": 0.5, "angle": 12.16 }, - { "time": 0.6, "angle": -24.62 }, - { "time": 0.7, "angle": -27.26 }, - { "time": 0.8, "angle": -34.38 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.4, "x": 4.08, "y": -9.53 }, - { "time": 0.5, "x": 0, "y": 0 }, - { "time": 0.7, "x": -21.14, "y": -9.6 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": 14.26 }, - { "time": 0.1, "angle": -17.3 }, - { "time": 0.2, "angle": -12.67 }, - { "time": 0.3, "angle": -58.89 }, - { "time": 0.4, "angle": 15.95 }, - { "time": 0.5, "angle": -9 }, - { "time": 0.6, "angle": 26.06 }, - { "time": 0.7, "angle": 21.85 }, - { "time": 0.8, "angle": 14.26 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 }, - { "time": 0.1, "x": 0.951, "y": 1 }, - { "time": 0.5, "x": 0.975, "y": 1 }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 10.13 }, - { "time": 0.1, "angle": 12.27 }, - { "time": 0.2, "angle": -2.94 }, - { "time": 0.3, "angle": 6.29 }, - { "time": 0.4, "angle": 13.45 }, - { "time": 0.5, "angle": -3.57 }, - { "time": 0.6, "angle": -0.97 }, - { "time": 0.7, "angle": 2.97 }, - { "time": 0.8, "angle": 10.13 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -23.74 }, - { "time": 0.4, "angle": -320.57 }, - { "time": 0.8, "angle": -23.74 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 11.62 }, - { "time": 0.1, "angle": 19.36 }, - { "time": 0.4, "angle": 345.26 }, - { "time": 0.5, "angle": 343.44 }, - { "time": 0.8, "angle": 11.62 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -12.11 }, - { "time": 0.1666, "angle": -17.16 }, - { "time": 0.4, "angle": -12.11 }, - { "time": 0.5666, "angle": -15.81 }, - { "time": 0.8, "angle": -12.11 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 1.41 }, - { "time": 0.2333, "angle": -3.04 }, - { "time": 0.4, "angle": 1.41 }, - { "time": 0.6333, "angle": -3.04 }, - { "time": 0.8, "angle": 1.41 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 6.97 }, - { "time": 0.1666, "angle": 8.02 }, - { "time": 0.2666, "angle": 12.65 }, - { "time": 0.4, "angle": 6.97 }, - { "time": 0.5666, "angle": 8.02 }, - { "time": 0.6666, "angle": 12.65 }, - { "time": 0.8, "angle": 6.97 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { - "time": 0, - "x": -23.93, - "y": 3.22, - "curve": [ 0.518, 0.03, 0.807, 0.61 ] - }, - { - "time": 0.1, - "x": -23.93, - "y": -9.24, - "curve": [ 0.135, 0.33, 0.601, 0.99 ] - }, - { - "time": 0.2, - "x": -23.93, - "y": 4.35, - "curve": [ 0.204, 0.68, 0.75, 1 ] - }, - { - "time": 0.3, - "x": -23.93, - "y": 2.38, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.4, - "x": -23.93, - "y": -2.5, - "curve": [ 0.692, 0.01, 0.75, 1 ] - }, - { - "time": 0.5, - "x": -23.93, - "y": -10.32, - "curve": [ 0.235, 0.77, 0.75, 1 ] - }, - { - "time": 0.6, - "x": -23.93, - "y": 4.35, - "curve": [ 0.287, 0.37, 0.718, 0.76 ] - }, - { - "time": 0.7, - "x": -23.93, - "y": 10.34, - "curve": [ 0.615, 0, 0.75, 1 ] - }, - { "time": 0.8, "x": -23.93, "y": 3.22 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.4, "angle": 20.59 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 12.49 }, - { "time": 0.1, "angle": -8.34 }, - { "time": 0.2, "angle": -6.17 }, - { "time": 0.3, "angle": -0.75 }, - { "time": 0.3333, "angle": 3.89 }, - { "time": 0.4, "angle": 10.22 }, - { "time": 0.5, "angle": 11.44 }, - { "time": 0.6, "angle": -0.33 }, - { "time": 0.7, "angle": 0.15 }, - { "time": 0.8, "angle": 12.49 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 3.58 }, - { "time": 0.1, "angle": 5.51 }, - { "time": 0.4, "angle": -22.77 }, - { "time": 0.5, "angle": -9.65 }, - { "time": 0.8, "angle": 3.58 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -15.22 }, - { "time": 0.1, "angle": -51.4 }, - { "time": 0.4, "angle": -39.4 }, - { "time": 0.5, "angle": 19.26 }, - { "time": 0.8, "angle": -15.22 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { - "time": 0, - "angle": -24.06, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.1, - "angle": -10.94, - "curve": [ 0.381, 0.54, 0.742, 1 ] - }, - { - "time": 0.4, - "angle": 25.34, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -27.47, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.8, "angle": -24.06 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - } - } - } -} -} \ No newline at end of file diff --git a/spine-cocos2dx/2/example/Resources/iphone-retina/spineboy.atlas b/spine-cocos2dx/2/example/Resources/iphone-retina/spineboy.atlas deleted file mode 100644 index 19c0934b1..000000000 --- a/spine-cocos2dx/2/example/Resources/iphone-retina/spineboy.atlas +++ /dev/null @@ -1,194 +0,0 @@ - -spineboy.png -format: RGBA8888 -filter: Linear,Linear -repeat: none -eye_indifferent - rotate: true - xy: 389, 5 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -eye_surprised - rotate: false - xy: 580, 34 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -front_bracer - rotate: false - xy: 732, 85 - size: 35, 48 - orig: 35, 48 - offset: 0, 0 - index: -1 -front_fist_closed - rotate: false - xy: 556, 91 - size: 45, 49 - orig: 45, 49 - offset: 0, 0 - index: -1 -front_fist_open - rotate: false - xy: 668, 32 - size: 52, 52 - orig: 52, 52 - offset: 0, 0 - index: -1 -front_foot - rotate: false - xy: 924, 201 - size: 76, 41 - orig: 76, 41 - offset: 0, 0 - index: -1 -front_foot_bend1 - rotate: false - xy: 845, 200 - size: 77, 42 - orig: 77, 42 - offset: 0, 0 - index: -1 -front_foot_bend2 - rotate: false - xy: 778, 186 - size: 65, 56 - orig: 65, 56 - offset: 0, 0 - index: -1 -front_shin - rotate: true - xy: 444, 91 - size: 49, 110 - orig: 49, 110 - offset: 0, 0 - index: -1 -front_thigh - rotate: true - xy: 603, 89 - size: 29, 67 - orig: 29, 67 - offset: 0, 0 - index: -1 -front_upper_arm - rotate: true - xy: 672, 86 - size: 32, 58 - orig: 32, 58 - offset: 0, 0 - index: -1 -goggles - rotate: false - xy: 444, 142 - size: 157, 100 - orig: 157, 100 - offset: 0, 0 - index: -1 -gun - rotate: false - xy: 603, 120 - size: 126, 122 - orig: 126, 122 - offset: 0, 0 - index: -1 -head - rotate: false - xy: 279, 63 - size: 163, 179 - orig: 163, 179 - offset: 0, 0 - index: -1 -mouth_grind - rotate: false - xy: 845, 163 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_oooo - rotate: false - xy: 842, 126 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_smile - rotate: false - xy: 769, 97 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -muzzle - rotate: false - xy: 2, 2 - size: 275, 240 - orig: 277, 240 - offset: 0, 0 - index: -1 -neck - rotate: false - xy: 903, 173 - size: 22, 25 - orig: 22, 25 - offset: 0, 0 - index: -1 -rear_bracer - rotate: false - xy: 722, 40 - size: 34, 43 - orig: 34, 43 - offset: 0, 0 - index: -1 -rear_foot - rotate: false - xy: 444, 11 - size: 68, 36 - orig: 68, 36 - offset: 0, 0 - index: -1 -rear_foot_bend1 - rotate: false - xy: 444, 49 - size: 70, 40 - orig: 70, 40 - offset: 0, 0 - index: -1 -rear_foot_bend2 - rotate: false - xy: 778, 134 - size: 62, 50 - orig: 62, 50 - offset: 0, 0 - index: -1 -rear_shin - rotate: false - xy: 731, 135 - size: 45, 107 - orig: 45, 107 - offset: 0, 0 - index: -1 -rear_thigh - rotate: true - xy: 516, 50 - size: 39, 62 - orig: 39, 62 - offset: 0, 0 - index: -1 -rear_upper_arm - rotate: false - xy: 638, 35 - size: 28, 52 - orig: 28, 52 - offset: 0, 0 - index: -1 -torso - rotate: true - xy: 279, 2 - size: 59, 108 - orig: 59, 108 - offset: 0, 0 - index: -1 diff --git a/spine-cocos2dx/2/example/Resources/iphone/goblins-mesh.atlas b/spine-cocos2dx/2/example/Resources/iphone/goblins-mesh.atlas deleted file mode 100644 index d0ddb80c6..000000000 --- a/spine-cocos2dx/2/example/Resources/iphone/goblins-mesh.atlas +++ /dev/null @@ -1,292 +0,0 @@ - -goblins-mesh.png -format: RGBA8888 -filter: Linear,Linear -repeat: none -dagger - rotate: true - xy: 372, 100 - size: 26, 108 - orig: 26, 108 - offset: 0, 0 - index: -1 -goblin/eyes-closed - rotate: false - xy: 2, 7 - size: 34, 12 - orig: 34, 12 - offset: 0, 0 - index: -1 -goblin/head - rotate: false - xy: 107, 36 - size: 103, 66 - orig: 103, 66 - offset: 0, 0 - index: -1 -goblin/left-arm - rotate: false - xy: 901, 56 - size: 37, 35 - orig: 37, 35 - offset: 0, 0 - index: -1 -goblin/left-foot - rotate: false - xy: 929, 95 - size: 65, 31 - orig: 65, 31 - offset: 0, 0 - index: -1 -goblin/left-hand - rotate: false - xy: 452, 2 - size: 36, 41 - orig: 36, 41 - offset: 0, 0 - index: -1 -goblin/left-lower-leg - rotate: true - xy: 713, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblin/left-shoulder - rotate: false - xy: 610, 44 - size: 29, 44 - orig: 29, 44 - offset: 0, 0 - index: -1 -goblin/left-upper-leg - rotate: true - xy: 638, 93 - size: 33, 73 - orig: 33, 73 - offset: 0, 0 - index: -1 -goblin/neck - rotate: false - xy: 490, 2 - size: 36, 41 - orig: 36, 41 - offset: 0, 0 - index: -1 -goblin/pelvis - rotate: false - xy: 482, 45 - size: 62, 43 - orig: 62, 43 - offset: 0, 0 - index: -1 -goblin/right-arm - rotate: true - xy: 690, 2 - size: 23, 50 - orig: 23, 50 - offset: 0, 0 - index: -1 -goblin/right-foot - rotate: false - xy: 771, 58 - size: 63, 33 - orig: 63, 33 - offset: 0, 0 - index: -1 -goblin/right-hand - rotate: false - xy: 940, 56 - size: 36, 37 - orig: 36, 37 - offset: 0, 0 - index: -1 -goblin/right-lower-leg - rotate: true - xy: 482, 90 - size: 36, 76 - orig: 36, 76 - offset: 0, 0 - index: -1 -goblin/right-shoulder - rotate: true - xy: 602, 3 - size: 39, 45 - orig: 39, 45 - offset: 0, 0 - index: -1 -goblin/right-upper-leg - rotate: true - xy: 641, 57 - size: 34, 63 - orig: 34, 63 - offset: 0, 0 - index: -1 -goblin/torso - rotate: true - xy: 212, 34 - size: 68, 96 - orig: 68, 96 - offset: 0, 0 - index: -1 -goblin/undie-straps - rotate: false - xy: 380, 5 - size: 55, 19 - orig: 55, 19 - offset: 0, 0 - index: -1 -goblin/undies - rotate: false - xy: 174, 5 - size: 36, 29 - orig: 36, 29 - offset: 0, 0 - index: -1 -goblingirl/eyes-closed - rotate: false - xy: 269, 11 - size: 37, 21 - orig: 37, 21 - offset: 0, 0 - index: -1 -goblingirl/head - rotate: false - xy: 2, 21 - size: 103, 81 - orig: 103, 81 - offset: 0, 0 - index: -1 -goblingirl/left-arm - rotate: true - xy: 978, 56 - size: 37, 35 - orig: 37, 35 - offset: 0, 0 - index: -1 -goblingirl/left-foot - rotate: false - xy: 107, 3 - size: 65, 31 - orig: 65, 31 - offset: 0, 0 - index: -1 -goblingirl/left-hand - rotate: false - xy: 565, 2 - size: 35, 40 - orig: 35, 40 - offset: 0, 0 - index: -1 -goblingirl/left-lower-leg - rotate: true - xy: 785, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblingirl/left-shoulder - rotate: true - xy: 690, 27 - size: 28, 46 - orig: 28, 46 - offset: 0, 0 - index: -1 -goblingirl/left-upper-leg - rotate: true - xy: 857, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblingirl/neck - rotate: false - xy: 528, 2 - size: 35, 41 - orig: 35, 41 - offset: 0, 0 - index: -1 -goblingirl/pelvis - rotate: false - xy: 546, 45 - size: 62, 43 - orig: 62, 43 - offset: 0, 0 - index: -1 -goblingirl/right-arm - rotate: false - xy: 452, 48 - size: 28, 50 - orig: 28, 50 - offset: 0, 0 - index: -1 -goblingirl/right-foot - rotate: false - xy: 836, 58 - size: 63, 33 - orig: 63, 33 - offset: 0, 0 - index: -1 -goblingirl/right-hand - rotate: true - xy: 771, 20 - size: 36, 37 - orig: 36, 37 - offset: 0, 0 - index: -1 -goblingirl/right-lower-leg - rotate: true - xy: 560, 90 - size: 36, 76 - orig: 36, 76 - offset: 0, 0 - index: -1 -goblingirl/right-shoulder - rotate: false - xy: 649, 10 - size: 39, 45 - orig: 39, 45 - offset: 0, 0 - index: -1 -goblingirl/right-upper-leg - rotate: true - xy: 706, 57 - size: 34, 63 - orig: 34, 63 - offset: 0, 0 - index: -1 -goblingirl/torso - rotate: false - xy: 310, 2 - size: 68, 96 - orig: 68, 96 - offset: 0, 0 - index: -1 -goblingirl/undie-straps - rotate: false - xy: 212, 13 - size: 55, 19 - orig: 55, 19 - offset: 0, 0 - index: -1 -goblingirl/undies - rotate: false - xy: 810, 27 - size: 36, 29 - orig: 36, 29 - offset: 0, 0 - index: -1 -shield - rotate: false - xy: 380, 26 - size: 70, 72 - orig: 70, 72 - offset: 0, 0 - index: -1 -spear - rotate: true - xy: 2, 104 - size: 22, 368 - orig: 22, 368 - offset: 0, 0 - index: -1 diff --git a/spine-cocos2dx/2/example/Resources/iphone/goblins-mesh.png b/spine-cocos2dx/2/example/Resources/iphone/goblins-mesh.png deleted file mode 100644 index a3daf0010..000000000 Binary files a/spine-cocos2dx/2/example/Resources/iphone/goblins-mesh.png and /dev/null differ diff --git a/spine-cocos2dx/2/example/Resources/iphone/spineboy.atlas b/spine-cocos2dx/2/example/Resources/iphone/spineboy.atlas deleted file mode 100644 index 19c0934b1..000000000 --- a/spine-cocos2dx/2/example/Resources/iphone/spineboy.atlas +++ /dev/null @@ -1,194 +0,0 @@ - -spineboy.png -format: RGBA8888 -filter: Linear,Linear -repeat: none -eye_indifferent - rotate: true - xy: 389, 5 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -eye_surprised - rotate: false - xy: 580, 34 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -front_bracer - rotate: false - xy: 732, 85 - size: 35, 48 - orig: 35, 48 - offset: 0, 0 - index: -1 -front_fist_closed - rotate: false - xy: 556, 91 - size: 45, 49 - orig: 45, 49 - offset: 0, 0 - index: -1 -front_fist_open - rotate: false - xy: 668, 32 - size: 52, 52 - orig: 52, 52 - offset: 0, 0 - index: -1 -front_foot - rotate: false - xy: 924, 201 - size: 76, 41 - orig: 76, 41 - offset: 0, 0 - index: -1 -front_foot_bend1 - rotate: false - xy: 845, 200 - size: 77, 42 - orig: 77, 42 - offset: 0, 0 - index: -1 -front_foot_bend2 - rotate: false - xy: 778, 186 - size: 65, 56 - orig: 65, 56 - offset: 0, 0 - index: -1 -front_shin - rotate: true - xy: 444, 91 - size: 49, 110 - orig: 49, 110 - offset: 0, 0 - index: -1 -front_thigh - rotate: true - xy: 603, 89 - size: 29, 67 - orig: 29, 67 - offset: 0, 0 - index: -1 -front_upper_arm - rotate: true - xy: 672, 86 - size: 32, 58 - orig: 32, 58 - offset: 0, 0 - index: -1 -goggles - rotate: false - xy: 444, 142 - size: 157, 100 - orig: 157, 100 - offset: 0, 0 - index: -1 -gun - rotate: false - xy: 603, 120 - size: 126, 122 - orig: 126, 122 - offset: 0, 0 - index: -1 -head - rotate: false - xy: 279, 63 - size: 163, 179 - orig: 163, 179 - offset: 0, 0 - index: -1 -mouth_grind - rotate: false - xy: 845, 163 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_oooo - rotate: false - xy: 842, 126 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_smile - rotate: false - xy: 769, 97 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -muzzle - rotate: false - xy: 2, 2 - size: 275, 240 - orig: 277, 240 - offset: 0, 0 - index: -1 -neck - rotate: false - xy: 903, 173 - size: 22, 25 - orig: 22, 25 - offset: 0, 0 - index: -1 -rear_bracer - rotate: false - xy: 722, 40 - size: 34, 43 - orig: 34, 43 - offset: 0, 0 - index: -1 -rear_foot - rotate: false - xy: 444, 11 - size: 68, 36 - orig: 68, 36 - offset: 0, 0 - index: -1 -rear_foot_bend1 - rotate: false - xy: 444, 49 - size: 70, 40 - orig: 70, 40 - offset: 0, 0 - index: -1 -rear_foot_bend2 - rotate: false - xy: 778, 134 - size: 62, 50 - orig: 62, 50 - offset: 0, 0 - index: -1 -rear_shin - rotate: false - xy: 731, 135 - size: 45, 107 - orig: 45, 107 - offset: 0, 0 - index: -1 -rear_thigh - rotate: true - xy: 516, 50 - size: 39, 62 - orig: 39, 62 - offset: 0, 0 - index: -1 -rear_upper_arm - rotate: false - xy: 638, 35 - size: 28, 52 - orig: 28, 52 - offset: 0, 0 - index: -1 -torso - rotate: true - xy: 279, 2 - size: 59, 108 - orig: 59, 108 - offset: 0, 0 - index: -1 diff --git a/spine-cocos2dx/2/example/Resources/iphone/spineboy.png b/spine-cocos2dx/2/example/Resources/iphone/spineboy.png deleted file mode 100644 index dce2fe3e2..000000000 Binary files a/spine-cocos2dx/2/example/Resources/iphone/spineboy.png and /dev/null differ diff --git a/spine-cocos2dx/2/example/proj.win32/main.cpp b/spine-cocos2dx/2/example/proj.win32/main.cpp deleted file mode 100644 index d999f3451..000000000 --- a/spine-cocos2dx/2/example/proj.win32/main.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "main.h" -#include "../Classes/AppDelegate.h" - -USING_NS_CC; - -int APIENTRY _tWinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPTSTR lpCmdLine, - int nCmdShow) -{ - UNREFERENCED_PARAMETER(hPrevInstance); - UNREFERENCED_PARAMETER(lpCmdLine); - - // create the application instance - AppDelegate app; - - CCEGLView* eglView = CCEGLView::sharedOpenGLView(); - eglView->setViewName("Spine Example"); - eglView->setFrameSize(960, 640); - return CCApplication::sharedApplication()->run(); -} diff --git a/spine-cocos2dx/2/example/proj.win32/main.h b/spine-cocos2dx/2/example/proj.win32/main.h deleted file mode 100644 index 1eec81188..000000000 --- a/spine-cocos2dx/2/example/proj.win32/main.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __MAIN_H__ -#define __MAIN_H__ - -#define WIN32_LEAN_AND_MEAN - -#include -#include - -#endif // __MAIN_H__ diff --git a/spine-cocos2dx/2/example/proj.win32/spine-cocos2dx.sln b/spine-cocos2dx/2/example/proj.win32/spine-cocos2dx.sln deleted file mode 100644 index c6b34543d..000000000 --- a/spine-cocos2dx/2/example/proj.win32/spine-cocos2dx.sln +++ /dev/null @@ -1,53 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2012 for Windows Desktop -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spine-cocos2dx", "spine-cocos2dx.vcxproj", "{DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}" - ProjectSection(ProjectDependencies) = postProject - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E} = {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcocos2d", "..\..\cocos2dx\cocos2dx\proj.win32\cocos2d.vcxproj", "{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libchipmunk", "..\..\cocos2dx\external\chipmunk\proj.win32\chipmunk.vcxproj", "{207BC7A9-CCF1-4F2F-A04D-45F72242AE25}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spine-c", "..\..\..\..\spine-c\spine-c.vcxproj", "{5D74934A-7512-45EE-8402-7B95D3642E85}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Debug|Win32.ActiveCfg = Debug|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Debug|Win32.Build.0 = Debug|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Release|Win32.ActiveCfg = Release|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Release|Win32.Build.0 = Release|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.ActiveCfg = Debug|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.Build.0 = Debug|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.ActiveCfg = Release|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.Build.0 = Release|Win32 - {207BC7A9-CCF1-4F2F-A04D-45F72242AE25}.Debug|Win32.ActiveCfg = Debug|Win32 - {207BC7A9-CCF1-4F2F-A04D-45F72242AE25}.Debug|Win32.Build.0 = Debug|Win32 - {207BC7A9-CCF1-4F2F-A04D-45F72242AE25}.Release|Win32.ActiveCfg = Release|Win32 - {207BC7A9-CCF1-4F2F-A04D-45F72242AE25}.Release|Win32.Build.0 = Release|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Win32.ActiveCfg = Debug|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Win32.Build.0 = Debug|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Win32.ActiveCfg = Release|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/spine-cocos2dx/2/example/proj.win32/spine-cocos2dx.vcxproj b/spine-cocos2dx/2/example/proj.win32/spine-cocos2dx.vcxproj deleted file mode 100644 index 74c9858c3..000000000 --- a/spine-cocos2dx/2/example/proj.win32/spine-cocos2dx.vcxproj +++ /dev/null @@ -1,162 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF} - spine - Win32Proj - spine-cocos2dx - - - - Application - Unicode - true - v100 - v110 - v110_xp - - - Application - Unicode - v100 - v110 - v110_xp - - - - - - - - - - - - - <_ProjectFileVersion>10.0.40219.1 - $(SolutionDir)$(Configuration).win32\ - $(Configuration).win32\ - true - $(SolutionDir)$(Configuration).win32\ - $(Configuration).win32\ - false - AllRules.ruleset - - - AllRules.ruleset - - - - - $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;$(LibraryPath) - - - $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;$(LibraryPath) - - - - Disabled - $(ProjectDir)..\Classes;$(ProjectDir)..\..\src;$(ProjectDir)..\..\..\..\spine-c\include;$(ProjectDir)..\..\cocos2dx\cocos2dx;$(ProjectDir)..\..\cocos2dx\cocos2dx\include;$(ProjectDir)..\..\cocos2dx\cocos2dx\platform\win32;$(ProjectDir)..\..\cocos2dx\cocos2dx\kazmath\include;$(ProjectDir)..\..\cocos2dx\cocos2dx\platform\third_party\win32\OGLES;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;COCOS2D_DEBUG=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - - - Level3 - EditAndContinue - 4267;4251;4244;%(DisableSpecificWarnings) - CompileAsCpp - - - opengl32.lib;glew32.lib;libcocos2d.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Windows - MachineX86 - - - false - libcmt.lib;msvcrt.lib;libcmtd.lib - - - - - - - - - MaxSpeed - true - $(ProjectDir)..\..\..\..\cocos2dx;$(ProjectDir)..\..\..\..\cocos2dx\include;$(ProjectDir)..\..\..\..\cocos2dx\kazmath\include;$(ProjectDir)..\..\..\..\cocos2dx\platform\win32;$(ProjectDir)..\..\..\..\cocos2dx\platform\third_party\win32\OGLES;..\Classes;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - 4267;4251;4244;%(DisableSpecificWarnings) - - - opengl32.lib;glew32.lib;libcocos2d.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Windows - true - true - MachineX86 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {5d74934a-7512-45ee-8402-7b95d3642e85} - - - {98a51ba8-fc3a-415b-ac8f-8c7bd464e93e} - - - {207bc7a9-ccf1-4f2f-a04d-45f72242ae25} - - - - - - \ No newline at end of file diff --git a/spine-cocos2dx/2/example/proj.win32/spine-cocos2dx.vcxproj.filters b/spine-cocos2dx/2/example/proj.win32/spine-cocos2dx.vcxproj.filters deleted file mode 100644 index ad5c9ffc3..000000000 --- a/spine-cocos2dx/2/example/proj.win32/spine-cocos2dx.vcxproj.filters +++ /dev/null @@ -1,69 +0,0 @@ - - - - - {ef769de4-53ac-449d-92e6-e67ec8d7414e} - - - {0dcd52ca-d521-4ba1-a1fa-c0d58a2df402} - - - {54b66b2b-0990-4335-a821-332c44b6f83e} - - - - - win32 - - - Classes - - - Classes - - - src - - - src - - - src - - - src - - - Classes - - - Classes - - - - - win32 - - - Classes - - - src - - - src - - - src - - - src - - - Classes - - - Classes - - - \ No newline at end of file diff --git a/spine-cocos2dx/2/src/spine/PolygonBatch.cpp b/spine-cocos2dx/2/src/spine/PolygonBatch.cpp deleted file mode 100644 index 2adf8aa22..000000000 --- a/spine-cocos2dx/2/src/spine/PolygonBatch.cpp +++ /dev/null @@ -1,113 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -USING_NS_CC; - -namespace spine { - -PolygonBatch* PolygonBatch::createWithCapacity (int capacity) { - PolygonBatch* batch = new PolygonBatch(); - batch->initWithCapacity(capacity); - batch->autorelease(); - return batch; -} - -PolygonBatch::PolygonBatch () : - capacity(0), - vertices(nullptr), verticesCount(0), - triangles(nullptr), trianglesCount(0), - texture(nullptr) -{} - -bool PolygonBatch::initWithCapacity (int capacity) { - // 32767 is max index, so 32767 / 3 - (32767 / 3 % 3) = 10920. - CCAssert(capacity <= 10920, "capacity cannot be > 10920"); - CCAssert(capacity >= 0, "capacity cannot be < 0"); - this->capacity = capacity; - vertices = MALLOC(ccV2F_C4B_T2F, capacity); - triangles = MALLOC(GLushort, capacity * 3); - return true; -} - -PolygonBatch::~PolygonBatch () { - FREE(vertices); - FREE(triangles); -} - -void PolygonBatch::add (CCTexture2D* addTexture, - const float* addVertices, const float* uvs, int addVerticesCount, - const unsigned short* addTriangles, int addTrianglesCount, - ccColor4B* color) { - - if ( - addTexture != texture - || verticesCount + (addVerticesCount >> 1) > capacity - || trianglesCount + addTrianglesCount > capacity * 3) { - this->flush(); - texture = addTexture; - } - - for (int i = 0; i < addTrianglesCount; ++i, ++trianglesCount) - triangles[trianglesCount] = addTriangles[i] + verticesCount; - - for (int i = 0; i < addVerticesCount; i += 2, ++verticesCount) { - ccV2F_C4B_T2F* vertex = vertices + verticesCount; - vertex->vertices.x = addVertices[i]; - vertex->vertices.y = addVertices[i + 1]; - vertex->colors = *color; - vertex->texCoords.u = uvs[i]; - vertex->texCoords.v = uvs[i + 1]; - } -} - -void PolygonBatch::flush () { - if (!verticesCount) return; - - ccGLBindTexture2D(texture->getName()); - glEnableVertexAttribArray(kCCVertexAttrib_Position); - glEnableVertexAttribArray(kCCVertexAttrib_Color); - glEnableVertexAttribArray(kCCVertexAttrib_TexCoords); - glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, sizeof(ccV2F_C4B_T2F), &vertices[0].vertices); - glVertexAttribPointer(kCCVertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(ccV2F_C4B_T2F), &vertices[0].colors); - glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(ccV2F_C4B_T2F), &vertices[0].texCoords); - - glDrawElements(GL_TRIANGLES, trianglesCount, GL_UNSIGNED_SHORT, triangles); - - verticesCount = 0; - trianglesCount = 0; - - CHECK_GL_ERROR_DEBUG(); -} - -} diff --git a/spine-cocos2dx/2/src/spine/PolygonBatch.h b/spine-cocos2dx/2/src/spine/PolygonBatch.h deleted file mode 100644 index 34c6368f0..000000000 --- a/spine-cocos2dx/2/src/spine/PolygonBatch.h +++ /dev/null @@ -1,68 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_POLYGONBATCH_H_ -#define SPINE_POLYGONBATCH_H_ - -#include "cocos2d.h" - -namespace spine { - -class PolygonBatch : public cocos2d::CCObject { -public: - static PolygonBatch* createWithCapacity (int capacity); - - /** @js ctor */ - PolygonBatch(); - - /** @js NA - * @lua NA */ - virtual ~PolygonBatch(); - - bool initWithCapacity (int capacity); - void add (cocos2d::CCTexture2D* texture, - const float* vertices, const float* uvs, int verticesCount, - const unsigned short* triangles, int trianglesCount, - cocos2d::ccColor4B* color); - void flush (); - -private: - int capacity; - cocos2d::ccV2F_C4B_T2F* vertices; - int verticesCount; - GLushort* triangles; - int trianglesCount; - cocos2d::CCTexture2D* texture; -}; - -} - -#endif // SPINE_POLYGONBATCH_H_ diff --git a/spine-cocos2dx/2/src/spine/SkeletonAnimation.cpp b/spine-cocos2dx/2/src/spine/SkeletonAnimation.cpp deleted file mode 100644 index c58fe6c56..000000000 --- a/spine-cocos2dx/2/src/spine/SkeletonAnimation.cpp +++ /dev/null @@ -1,230 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include -#include - -USING_NS_CC; -using std::min; -using std::max; -using std::vector; - -namespace spine { - -void animationCallback (spAnimationState* state, int trackIndex, spEventType type, spEvent* event, int loopCount) { - ((SkeletonAnimation*)state->rendererObject)->onAnimationStateEvent(trackIndex, type, event, loopCount); -} - -void trackEntryCallback (spAnimationState* state, int trackIndex, spEventType type, spEvent* event, int loopCount) { - ((SkeletonAnimation*)state->rendererObject)->onTrackEntryEvent(trackIndex, type, event, loopCount); -} - -typedef struct _TrackEntryListeners { - StartListener startListener; - EndListener endListener; - CompleteListener completeListener; - EventListener eventListener; -} _TrackEntryListeners; - -static _TrackEntryListeners* getListeners (spTrackEntry* entry) { - if (!entry->rendererObject) { - entry->rendererObject = NEW(spine::_TrackEntryListeners); - entry->listener = trackEntryCallback; - } - return (_TrackEntryListeners*)entry->rendererObject; -} - -void disposeTrackEntry (spTrackEntry* entry) { - if (entry->rendererObject) FREE(entry->rendererObject); - _spTrackEntry_dispose(entry); -} - -// - -SkeletonAnimation* SkeletonAnimation::createWithData (spSkeletonData* skeletonData) { - SkeletonAnimation* node = new SkeletonAnimation(skeletonData); - node->autorelease(); - return node; -} - -SkeletonAnimation* SkeletonAnimation::createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale) { - SkeletonAnimation* node = new SkeletonAnimation(skeletonDataFile, atlas, scale); - node->autorelease(); - return node; -} - -SkeletonAnimation* SkeletonAnimation::createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale) { - SkeletonAnimation* node = new SkeletonAnimation(skeletonDataFile, atlasFile, scale); - node->autorelease(); - return node; -} - -void SkeletonAnimation::initialize () { - ownsAnimationStateData = true; - state = spAnimationState_create(spAnimationStateData_create(skeleton->data)); - state->rendererObject = this; - state->listener = animationCallback; - - _spAnimationState* stateInternal = (_spAnimationState*)state; - stateInternal->disposeTrackEntry = disposeTrackEntry; -} - -SkeletonAnimation::SkeletonAnimation (spSkeletonData *skeletonData) - : SkeletonRenderer(skeletonData) { - initialize(); -} - -SkeletonAnimation::SkeletonAnimation (const char* skeletonDataFile, spAtlas* atlas, float scale) - : SkeletonRenderer(skeletonDataFile, atlas, scale) { - initialize(); -} - -SkeletonAnimation::SkeletonAnimation (const char* skeletonDataFile, const char* atlasFile, float scale) - : SkeletonRenderer(skeletonDataFile, atlasFile, scale) { - initialize(); -} - -SkeletonAnimation::~SkeletonAnimation () { - if (ownsAnimationStateData) spAnimationStateData_dispose(state->data); - spAnimationState_dispose(state); -} - -void SkeletonAnimation::update (float deltaTime) { - super::update(deltaTime); - - deltaTime *= timeScale; - spAnimationState_update(state, deltaTime); - spAnimationState_apply(state, skeleton); - spSkeleton_updateWorldTransform(skeleton); -} - -void SkeletonAnimation::setAnimationStateData (spAnimationStateData* stateData) { - CCAssert(stateData, "stateData cannot be null."); - - if (ownsAnimationStateData) spAnimationStateData_dispose(state->data); - spAnimationState_dispose(state); - - ownsAnimationStateData = false; - state = spAnimationState_create(stateData); - state->rendererObject = this; - state->listener = animationCallback; -} - -void SkeletonAnimation::setMix (const char* fromAnimation, const char* toAnimation, float duration) { - spAnimationStateData_setMixByName(state->data, fromAnimation, toAnimation, duration); -} - -spTrackEntry* SkeletonAnimation::setAnimation (int trackIndex, const char* name, bool loop) { - spAnimation* animation = spSkeletonData_findAnimation(skeleton->data, name); - if (!animation) { - CCLog("Spine: Animation not found: %s", name); - return 0; - } - return spAnimationState_setAnimation(state, trackIndex, animation, loop); -} - -spTrackEntry* SkeletonAnimation::addAnimation (int trackIndex, const char* name, bool loop, float delay) { - spAnimation* animation = spSkeletonData_findAnimation(skeleton->data, name); - if (!animation) { - CCLog("Spine: Animation not found: %s", name); - return 0; - } - return spAnimationState_addAnimation(state, trackIndex, animation, loop, delay); -} - -spTrackEntry* SkeletonAnimation::getCurrent (int trackIndex) { - return spAnimationState_getCurrent(state, trackIndex); -} - -void SkeletonAnimation::clearTracks () { - spAnimationState_clearTracks(state); -} - -void SkeletonAnimation::clearTrack (int trackIndex) { - spAnimationState_clearTrack(state, trackIndex); -} - -void SkeletonAnimation::onAnimationStateEvent (int trackIndex, spEventType type, spEvent* event, int loopCount) { - switch (type) { - case SP_ANIMATION_START: - if (startListener) startListener(trackIndex); - break; - case SP_ANIMATION_END: - if (endListener) endListener(trackIndex); - break; - case SP_ANIMATION_COMPLETE: - if (completeListener) completeListener(trackIndex, loopCount); - break; - case SP_ANIMATION_EVENT: - if (eventListener) eventListener(trackIndex, event); - break; - } -} - -void SkeletonAnimation::onTrackEntryEvent (int trackIndex, spEventType type, spEvent* event, int loopCount) { - spTrackEntry* entry = spAnimationState_getCurrent(state, trackIndex); - if (!entry->rendererObject) return; - _TrackEntryListeners* listeners = (_TrackEntryListeners*)entry->rendererObject; - switch (type) { - case SP_ANIMATION_START: - if (listeners->startListener) listeners->startListener(trackIndex); - break; - case SP_ANIMATION_END: - if (listeners->endListener) listeners->endListener(trackIndex); - break; - case SP_ANIMATION_COMPLETE: - if (listeners->completeListener) listeners->completeListener(trackIndex, loopCount); - break; - case SP_ANIMATION_EVENT: - if (listeners->eventListener) listeners->eventListener(trackIndex, event); - break; - } -} - -void SkeletonAnimation::setStartListener (spTrackEntry* entry, StartListener listener) { - getListeners(entry)->startListener = listener; -} - -void SkeletonAnimation::setEndListener (spTrackEntry* entry, EndListener listener) { - getListeners(entry)->endListener = listener; -} - -void SkeletonAnimation::setCompleteListener (spTrackEntry* entry, CompleteListener listener) { - getListeners(entry)->completeListener = listener; -} - -void SkeletonAnimation::setEventListener (spTrackEntry* entry, spine::EventListener listener) { - getListeners(entry)->eventListener = listener; -} - -} diff --git a/spine-cocos2dx/2/src/spine/SkeletonAnimation.h b/spine-cocos2dx/2/src/spine/SkeletonAnimation.h deleted file mode 100644 index b3cd05ba2..000000000 --- a/spine-cocos2dx/2/src/spine/SkeletonAnimation.h +++ /dev/null @@ -1,97 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SKELETONANIMATION_H_ -#define SPINE_SKELETONANIMATION_H_ - -#include -#include -#include "cocos2d.h" - -namespace spine { - -typedef std::function StartListener; -typedef std::function EndListener; -typedef std::function CompleteListener; -typedef std::function EventListener; - -/** Draws an animated skeleton, providing an AnimationState for applying one or more animations and queuing animations to be - * played later. */ -class SkeletonAnimation: public SkeletonRenderer { -public: - spAnimationState* state; - - static SkeletonAnimation* createWithData (spSkeletonData* skeletonData); - static SkeletonAnimation* createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale = 0); - static SkeletonAnimation* createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale = 0); - - SkeletonAnimation (spSkeletonData* skeletonData); - SkeletonAnimation (const char* skeletonDataFile, spAtlas* atlas, float scale = 0); - SkeletonAnimation (const char* skeletonDataFile, const char* atlasFile, float scale = 0); - - virtual ~SkeletonAnimation (); - - virtual void update (float deltaTime); - - void setAnimationStateData (spAnimationStateData* stateData); - void setMix (const char* fromAnimation, const char* toAnimation, float duration); - - spTrackEntry* setAnimation (int trackIndex, const char* name, bool loop); - spTrackEntry* addAnimation (int trackIndex, const char* name, bool loop, float delay = 0); - spTrackEntry* getCurrent (int trackIndex = 0); - void clearTracks (); - void clearTrack (int trackIndex = 0); - - StartListener startListener; - EndListener endListener; - CompleteListener completeListener; - EventListener eventListener; - void setStartListener (spTrackEntry* entry, StartListener listener); - void setEndListener (spTrackEntry* entry, EndListener listener); - void setCompleteListener (spTrackEntry* entry, CompleteListener listener); - void setEventListener (spTrackEntry* entry, EventListener listener); - - virtual void onAnimationStateEvent (int trackIndex, spEventType type, spEvent* event, int loopCount); - virtual void onTrackEntryEvent (int trackIndex, spEventType type, spEvent* event, int loopCount); - -protected: - SkeletonAnimation (); - -private: - typedef SkeletonRenderer super; - bool ownsAnimationStateData; - - void initialize (); -}; - -} - -#endif /* SPINE_SKELETONANIMATION_H_ */ diff --git a/spine-cocos2dx/2/src/spine/SkeletonRenderer.cpp b/spine-cocos2dx/2/src/spine/SkeletonRenderer.cpp deleted file mode 100644 index f7735f979..000000000 --- a/spine-cocos2dx/2/src/spine/SkeletonRenderer.cpp +++ /dev/null @@ -1,366 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include -#include -#include -#include - -USING_NS_CC; -using std::min; -using std::max; - -namespace spine { - -static const unsigned short quadTriangles[6] = {0, 1, 2, 2, 3, 0}; - -SkeletonRenderer* SkeletonRenderer::createWithData (spSkeletonData* skeletonData, bool ownsSkeletonData) { - SkeletonRenderer* node = new SkeletonRenderer(skeletonData, ownsSkeletonData); - node->autorelease(); - return node; -} - -SkeletonRenderer* SkeletonRenderer::createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale) { - SkeletonRenderer* node = new SkeletonRenderer(skeletonDataFile, atlas, scale); - node->autorelease(); - return node; -} - -SkeletonRenderer* SkeletonRenderer::createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale) { - SkeletonRenderer* node = new SkeletonRenderer(skeletonDataFile, atlasFile, scale); - node->autorelease(); - return node; -} - -void SkeletonRenderer::initialize () { - worldVertices = MALLOC(float, 1000); // Max number of vertices per mesh. - - batch = PolygonBatch::createWithCapacity(2000); // Max number of vertices and triangles per batch. - batch->retain(); - - blendFunc.src = GL_ONE; - blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA; - setOpacityModifyRGB(true); - - setShaderProgram(CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionTextureColor)); - scheduleUpdate(); -} - -void SkeletonRenderer::setSkeletonData (spSkeletonData *skeletonData, bool ownsSkeletonData) { - skeleton = spSkeleton_create(skeletonData); - rootBone = skeleton->bones[0]; - this->ownsSkeletonData = ownsSkeletonData; -} - -SkeletonRenderer::SkeletonRenderer () - : atlas(0), debugSlots(false), debugBones(false), timeScale(1) { - initialize(); -} - -SkeletonRenderer::SkeletonRenderer (spSkeletonData *skeletonData, bool ownsSkeletonData) - : atlas(0), debugSlots(false), debugBones(false), timeScale(1) { - initialize(); - - setSkeletonData(skeletonData, ownsSkeletonData); -} - -SkeletonRenderer::SkeletonRenderer (const char* skeletonDataFile, spAtlas* atlas, float scale) - : atlas(0), debugSlots(false), debugBones(false), timeScale(1) { - initialize(); - - spSkeletonJson* json = spSkeletonJson_create(atlas); - json->scale = scale; - spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, skeletonDataFile); - CCAssert(skeletonData, json->error ? json->error : "Error reading skeleton data."); - spSkeletonJson_dispose(json); - - setSkeletonData(skeletonData, true); -} - -SkeletonRenderer::SkeletonRenderer (const char* skeletonDataFile, const char* atlasFile, float scale) - : atlas(0), debugSlots(false), debugBones(false), timeScale(1) { - initialize(); - - atlas = spAtlas_createFromFile(atlasFile, 0); - CCAssert(atlas, "Error reading atlas file."); - - spSkeletonJson* json = spSkeletonJson_create(atlas); - json->scale = scale; - spSkeletonData* skeletonData = spSkeletonJson_readSkeletonDataFile(json, skeletonDataFile); - CCAssert(skeletonData, json->error ? json->error : "Error reading skeleton data file."); - spSkeletonJson_dispose(json); - - setSkeletonData(skeletonData, true); -} - -SkeletonRenderer::~SkeletonRenderer () { - if (ownsSkeletonData) spSkeletonData_dispose(skeleton->data); - if (atlas) spAtlas_dispose(atlas); - spSkeleton_dispose(skeleton); - FREE(worldVertices); - batch->release(); -} - -void SkeletonRenderer::update (float deltaTime) { - spSkeleton_update(skeleton, deltaTime * timeScale); -} - -void SkeletonRenderer::draw () { - CC_NODE_DRAW_SETUP(); - ccGLBindVAO(0); - - ccColor3B nodeColor = getColor(); - skeleton->r = nodeColor.r / (float)255; - skeleton->g = nodeColor.g / (float)255; - skeleton->b = nodeColor.b / (float)255; - skeleton->a = getDisplayedOpacity() / (float)255; - - int blendMode = -1; - ccColor4B color; - const float* uvs = nullptr; - int verticesCount = 0; - const unsigned short* triangles = nullptr; - int trianglesCount = 0; - float r = 0, g = 0, b = 0, a = 0; - for (int i = 0, n = skeleton->slotsCount; i < n; i++) { - spSlot* slot = skeleton->drawOrder[i]; - if (!slot->attachment) continue; - CCTexture2D *texture = nullptr; - switch (slot->attachment->type) { - case SP_ATTACHMENT_REGION: { - spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; - spRegionAttachment_computeWorldVertices(attachment, slot->bone, worldVertices); - texture = getTexture(attachment); - uvs = attachment->uvs; - verticesCount = 8; - triangles = quadTriangles; - trianglesCount = 6; - r = attachment->r; - g = attachment->g; - b = attachment->b; - a = attachment->a; - break; - } - case SP_ATTACHMENT_MESH: { - spMeshAttachment* attachment = (spMeshAttachment*)slot->attachment; - spMeshAttachment_computeWorldVertices(attachment, slot, worldVertices); - texture = getTexture(attachment); - uvs = attachment->uvs; - verticesCount = attachment->verticesCount; - triangles = attachment->triangles; - trianglesCount = attachment->trianglesCount; - r = attachment->r; - g = attachment->g; - b = attachment->b; - a = attachment->a; - break; - } - case SP_ATTACHMENT_WEIGHTED_MESH: { - spWeightedMeshAttachment* attachment = (spWeightedMeshAttachment*)slot->attachment; - spWeightedMeshAttachment_computeWorldVertices(attachment, slot, worldVertices); - texture = getTexture(attachment); - uvs = attachment->uvs; - verticesCount = attachment->uvsCount; - triangles = attachment->triangles; - trianglesCount = attachment->trianglesCount; - r = attachment->r; - g = attachment->g; - b = attachment->b; - a = attachment->a; - break; - } - } - if (texture) { - if (slot->data->blendMode != blendMode) { - batch->flush(); - blendMode = slot->data->blendMode; - switch (slot->data->blendMode) { - case SP_BLEND_MODE_ADDITIVE: - ccGLBlendFunc(premultipliedAlpha ? GL_ONE : GL_SRC_ALPHA, GL_ONE); - break; - case SP_BLEND_MODE_MULTIPLY: - ccGLBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA); - break; - case SP_BLEND_MODE_SCREEN: - ccGLBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR); - break; - default: - ccGLBlendFunc(blendFunc.src, blendFunc.dst); - } - } - color.a = skeleton->a * slot->a * a * 255; - float multiplier = premultipliedAlpha ? color.a : 255; - color.r = skeleton->r * slot->r * r * multiplier; - color.g = skeleton->g * slot->g * g * multiplier; - color.b = skeleton->b * slot->b * b * multiplier; - batch->add(texture, worldVertices, uvs, verticesCount, triangles, trianglesCount, &color); - } - } - batch->flush(); - - if (debugSlots) { - // Slots. - ccDrawColor4B(0, 0, 255, 255); - glLineWidth(1); - CCPoint points[4]; - for (int i = 0, n = skeleton->slotsCount; i < n; i++) { - spSlot* slot = skeleton->drawOrder[i]; - if (!slot->attachment || slot->attachment->type != SP_ATTACHMENT_REGION) continue; - spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; - spRegionAttachment_computeWorldVertices(attachment, slot->bone, worldVertices); - points[0] = ccp(worldVertices[0], worldVertices[1]); - points[1] = ccp(worldVertices[2], worldVertices[3]); - points[2] = ccp(worldVertices[4], worldVertices[5]); - points[3] = ccp(worldVertices[6], worldVertices[7]); - ccDrawPoly(points, 4, true); - } - } - if (debugBones) { - // Bone lengths. - glLineWidth(2); - ccDrawColor4B(255, 0, 0, 255); - for (int i = 0, n = skeleton->bonesCount; i < n; i++) { - spBone *bone = skeleton->bones[i]; - float x = bone->data->length * bone->a + bone->worldX; - float y = bone->data->length * bone->c + bone->worldY; - ccDrawLine(ccp(bone->worldX, bone->worldY), ccp(x, y)); - } - // Bone origins. - ccPointSize(4); - ccDrawColor4B(0, 0, 255, 255); // Root bone is blue. - for (int i = 0, n = skeleton->bonesCount; i < n; i++) { - spBone *bone = skeleton->bones[i]; - ccDrawPoint(ccp(bone->worldX, bone->worldY)); - if (i == 0) ccDrawColor4B(0, 255, 0, 255); - } - } -} - -CCTexture2D* SkeletonRenderer::getTexture (spRegionAttachment* attachment) const { - return (CCTexture2D*)((spAtlasRegion*)attachment->rendererObject)->page->rendererObject; -} - -CCTexture2D* SkeletonRenderer::getTexture (spMeshAttachment* attachment) const { - return (CCTexture2D*)((spAtlasRegion*)attachment->rendererObject)->page->rendererObject; -} - -CCTexture2D* SkeletonRenderer::getTexture (spWeightedMeshAttachment* attachment) const { - return (CCTexture2D*)((spAtlasRegion*)attachment->rendererObject)->page->rendererObject; -} - -CCRect SkeletonRenderer::boundingBox () { - float minX = FLT_MAX, minY = FLT_MAX, maxX = FLT_MIN, maxY = FLT_MIN; - float scaleX = getScaleX(), scaleY = getScaleY(); - for (int i = 0; i < skeleton->slotsCount; ++i) { - spSlot* slot = skeleton->slots[i]; - if (!slot->attachment) continue; - int verticesCount; - if (slot->attachment->type == SP_ATTACHMENT_REGION) { - spRegionAttachment* attachment = (spRegionAttachment*)slot->attachment; - spRegionAttachment_computeWorldVertices(attachment, slot->bone, worldVertices); - verticesCount = 8; - } else if (slot->attachment->type == SP_ATTACHMENT_MESH) { - spMeshAttachment* mesh = (spMeshAttachment*)slot->attachment; - spMeshAttachment_computeWorldVertices(mesh, slot, worldVertices); - verticesCount = mesh->verticesCount; - } else if (slot->attachment->type == SP_ATTACHMENT_WEIGHTED_MESH) { - spWeightedMeshAttachment* mesh = (spWeightedMeshAttachment*)slot->attachment; - spWeightedMeshAttachment_computeWorldVertices(mesh, slot, worldVertices); - verticesCount = mesh->uvsCount; - } else - continue; - for (int ii = 0; ii < verticesCount; ii += 2) { - float x = worldVertices[ii] * scaleX, y = worldVertices[ii + 1] * scaleY; - minX = min(minX, x); - minY = min(minY, y); - maxX = max(maxX, x); - maxY = max(maxY, y); - } - } - CCPoint position = getPosition(); - return CCRect(position.x + minX, position.y + minY, maxX - minX, maxY - minY); -} - -// --- Convenience methods for Skeleton_* functions. - -void SkeletonRenderer::updateWorldTransform () { - spSkeleton_updateWorldTransform(skeleton); -} - -void SkeletonRenderer::setToSetupPose () { - spSkeleton_setToSetupPose(skeleton); -} -void SkeletonRenderer::setBonesToSetupPose () { - spSkeleton_setBonesToSetupPose(skeleton); -} -void SkeletonRenderer::setSlotsToSetupPose () { - spSkeleton_setSlotsToSetupPose(skeleton); -} - -spBone* SkeletonRenderer::findBone (const char* boneName) const { - return spSkeleton_findBone(skeleton, boneName); -} - -spSlot* SkeletonRenderer::findSlot (const char* slotName) const { - return spSkeleton_findSlot(skeleton, slotName); -} - -bool SkeletonRenderer::setSkin (const char* skinName) { - return spSkeleton_setSkinByName(skeleton, skinName) ? true : false; -} - -spAttachment* SkeletonRenderer::getAttachment (const char* slotName, const char* attachmentName) const { - return spSkeleton_getAttachmentForSlotName(skeleton, slotName, attachmentName); -} -bool SkeletonRenderer::setAttachment (const char* slotName, const char* attachmentName) { - return spSkeleton_setAttachment(skeleton, slotName, attachmentName) ? true : false; -} - -// --- CCBlendProtocol - -ccBlendFunc SkeletonRenderer::getBlendFunc () { - return blendFunc; -} - -void SkeletonRenderer::setBlendFunc (ccBlendFunc blendFunc) { - this->blendFunc = blendFunc; -} - -void SkeletonRenderer::setOpacityModifyRGB (bool value) { - premultipliedAlpha = value; -} - -bool SkeletonRenderer::isOpacityModifyRGB () { - return premultipliedAlpha; -} - -} diff --git a/spine-cocos2dx/2/src/spine/SkeletonRenderer.h b/spine-cocos2dx/2/src/spine/SkeletonRenderer.h deleted file mode 100644 index ec685e0f8..000000000 --- a/spine-cocos2dx/2/src/spine/SkeletonRenderer.h +++ /dev/null @@ -1,112 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_SKELETONRENDERER_H_ -#define SPINE_SKELETONRENDERER_H_ - -#include -#include "cocos2d.h" - -namespace spine { - -class PolygonBatch; - -/** Draws a skeleton. */ -class SkeletonRenderer: public cocos2d::CCNodeRGBA, public cocos2d::CCBlendProtocol { -public: - spSkeleton* skeleton; - spBone* rootBone; - float timeScale; - bool debugSlots; - bool debugBones; - bool premultipliedAlpha; - - static SkeletonRenderer* createWithData (spSkeletonData* skeletonData, bool ownsSkeletonData = false); - static SkeletonRenderer* createWithFile (const char* skeletonDataFile, spAtlas* atlas, float scale = 0); - static SkeletonRenderer* createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale = 0); - - SkeletonRenderer (spSkeletonData* skeletonData, bool ownsSkeletonData = false); - SkeletonRenderer (const char* skeletonDataFile, spAtlas* atlas, float scale = 0); - SkeletonRenderer (const char* skeletonDataFile, const char* atlasFile, float scale = 0); - - virtual ~SkeletonRenderer (); - - virtual void update (float deltaTime); - virtual void draw (); - virtual cocos2d::CCRect boundingBox (); - - // --- Convenience methods for common Skeleton_* functions. - void updateWorldTransform (); - - void setToSetupPose (); - void setBonesToSetupPose (); - void setSlotsToSetupPose (); - - /* Returns 0 if the bone was not found. */ - spBone* findBone (const char* boneName) const; - /* Returns 0 if the slot was not found. */ - spSlot* findSlot (const char* slotName) const; - - /* Sets the skin used to look up attachments not found in the SkeletonData defaultSkin. Attachments from the new skin are - * attached if the corresponding attachment from the old skin was attached. If there was no old skin, each slot's setup mode - * attachment is attached from the new skin. Returns false if the skin was not found. - * @param skin May be 0.*/ - bool setSkin (const char* skinName); - - /* Returns 0 if the slot or attachment was not found. */ - spAttachment* getAttachment (const char* slotName, const char* attachmentName) const; - /* Returns false if the slot or attachment was not found. */ - bool setAttachment (const char* slotName, const char* attachmentName); - - // --- BlendProtocol - CC_PROPERTY(cocos2d::ccBlendFunc, blendFunc, BlendFunc); - virtual void setOpacityModifyRGB (bool value); - virtual bool isOpacityModifyRGB (); - -protected: - SkeletonRenderer (); - void setSkeletonData (spSkeletonData* skeletonData, bool ownsSkeletonData); - - virtual cocos2d::CCTexture2D* getTexture (spRegionAttachment* attachment) const; - virtual cocos2d::CCTexture2D* getTexture (spMeshAttachment* attachment) const; - virtual cocos2d::CCTexture2D* getTexture (spWeightedMeshAttachment* attachment) const; - -private: - bool ownsSkeletonData; - spAtlas* atlas; - PolygonBatch* batch; - float* worldVertices; - void initialize (); -}; - -} - -#endif /* SPINE_SKELETONRENDERER_H_ */ diff --git a/spine-cocos2dx/2/src/spine/spine-cocos2dx.cpp b/spine-cocos2dx/2/src/spine/spine-cocos2dx.cpp deleted file mode 100644 index 97535db5a..000000000 --- a/spine-cocos2dx/2/src/spine/spine-cocos2dx.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#include -#include - -USING_NS_CC; - -GLuint wrap (spAtlasWrap wrap) { - return wrap == SP_ATLAS_CLAMPTOEDGE ? GL_CLAMP_TO_EDGE : GL_REPEAT; -} - -GLuint filter (spAtlasFilter filter) { - switch (filter) { - case SP_ATLAS_NEAREST: - return GL_NEAREST; - case SP_ATLAS_LINEAR: - return GL_LINEAR; - case SP_ATLAS_MIPMAP: - return GL_LINEAR_MIPMAP_LINEAR; - case SP_ATLAS_MIPMAP_NEAREST_NEAREST: - return GL_NEAREST_MIPMAP_NEAREST; - case SP_ATLAS_MIPMAP_LINEAR_NEAREST: - return GL_LINEAR_MIPMAP_NEAREST; - case SP_ATLAS_MIPMAP_NEAREST_LINEAR: - return GL_NEAREST_MIPMAP_LINEAR; - case SP_ATLAS_MIPMAP_LINEAR_LINEAR: - return GL_LINEAR_MIPMAP_LINEAR; - } - return GL_LINEAR; -} - -void _spAtlasPage_createTexture (spAtlasPage* self, const char* path) { - CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage(path); - texture->retain(); - - ccTexParams textureParams = {filter(self->minFilter), filter(self->magFilter), wrap(self->uWrap), wrap(self->vWrap)}; - texture->setTexParameters(&textureParams); - - self->rendererObject = texture; - self->width = texture->getPixelsWide(); - self->height = texture->getPixelsHigh(); -} - -void _spAtlasPage_disposeTexture (spAtlasPage* self) { - ((CCTexture2D*)self->rendererObject)->release(); -} - -char* _spUtil_readFile (const char* path, int* length) { - unsigned long size; - char* data = reinterpret_cast(CCFileUtils::sharedFileUtils()->getFileData( - CCFileUtils::sharedFileUtils()->fullPathForFilename(path).c_str(), "r", &size)); - *length = size; - return data; -} diff --git a/spine-cocos2dx/2/src/spine/spine-cocos2dx.h b/spine-cocos2dx/2/src/spine/spine-cocos2dx.h deleted file mode 100644 index f96eba024..000000000 --- a/spine-cocos2dx/2/src/spine/spine-cocos2dx.h +++ /dev/null @@ -1,40 +0,0 @@ -/****************************************************************************** - * Spine Runtimes Software License - * Version 2.3 - * - * Copyright (c) 2013-2015, Esoteric Software - * All rights reserved. - * - * You are granted a perpetual, non-exclusive, non-sublicensable and - * non-transferable license to use, install, execute and perform the Spine - * Runtimes Software (the "Software") and derivative works solely for personal - * or internal use. Without the written permission of Esoteric Software (see - * Section 2 of the Spine Software License Agreement), you may not (a) modify, - * translate, adapt or otherwise create derivative works, improvements of the - * Software or develop new applications using the Software or (b) remove, - * delete, alter or obscure any trademarks or any copyright, trademark, patent - * or other intellectual property or proprietary rights notices on or in the - * Software, including any copy thereof. Redistributions in binary or source - * form must include this license and terms. - * - * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO - * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *****************************************************************************/ - -#ifndef SPINE_COCOS2DX_H_ -#define SPINE_COCOS2DX_H_ - -#include -#include "cocos2d.h" -#include -#include - -#endif /* SPINE_COCOS2DX_H_ */ diff --git a/spine-cocos2dx/3/LICENSE b/spine-cocos2dx/3/LICENSE deleted file mode 100644 index 815ec1ca1..000000000 --- a/spine-cocos2dx/3/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Spine Runtimes Software License -Version 2.3 - -Copyright (c) 2013-2015, Esoteric Software -All rights reserved. - -You are granted a perpetual, non-exclusive, non-sublicensable and -non-transferable license to use, install, execute and perform the Spine -Runtimes Software (the "Software") and derivative works solely for personal -or internal use. Without the written permission of Esoteric Software (see -Section 2 of the Spine Software License Agreement), you may not (a) modify, -translate, adapt or otherwise create derivative works, improvements of the -Software or develop new applications using the Software or (b) remove, -delete, alter or obscure any trademarks or any copyright, trademark, patent -or other intellectual property or proprietary rights notices on or in the -Software, including any copy thereof. Redistributions in binary or source -form must include this license and terms. - -THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/spine-cocos2dx/3/README.md b/spine-cocos2dx/3/README.md deleted file mode 100644 index 140087fcf..000000000 --- a/spine-cocos2dx/3/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# spine-cocos2dx v3.x - -The spine-cocos2dx runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [cocos2d-x](http://www.cocos2d-x.org/). spine-cocos2dx is based on [spine-c](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-c). - -## Licensing - -This Spine Runtime may only be used for personal or internal use, typically to evaluate Spine before purchasing. If you would like to incorporate a Spine Runtime into your applications, distribute software containing a Spine Runtime, or modify a Spine Runtime, then you will need a valid [Spine license](https://esotericsoftware.com/spine-purchase). Please see the [Spine Runtimes Software License](https://github.com/EsotericSoftware/spine-runtimes/blob/master/LICENSE) for detailed information. - -The Spine Runtimes are developed with the intent to be used with data exported from Spine. By purchasing Spine, `Section 2` of the [Spine Software License](https://esotericsoftware.com/files/license.txt) grants the right to create and distribute derivative works of the Spine Runtimes. - -## Spine version - -spine-cocos2dx v3 works with data exported from Spine 3.1.08. Updating spine-cocos2dx v3 to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. - -spine-cocos2dx v3 supports all Spine features. - -spine-cocos2dx v3 does not yet support loading the binary format. - -## Setup - -The setup for cocos2d-x differs from most other Spine Runtimes because the cocos2d-x distribution includes a copy of the Spine Runtime files. This is not ideal because these files may be old and fail to work with the latest Spine editor. Also it means if cocos2d-x is updated, you may get newer Spine Runtime files which can break your application if you are not using the latest Spine editor. For these reasons, we have requested cocos2d-x to cease distributing the Spine Runtime files, but they continue to do so. - -To replace the Spine Runtime files distributed with cocos2d-x, please follow these directions: - -1. Download a [cocos2d-x](http://www.cocos2d-x.org/download) version 3.x distribution or get the latest from [GitHub](https://github.com/cocos2d/cocos2d-x) or [as a zip](https://github.com/cocos2d/cocos2d-x/archive/v3.zip). -1. Run the `cocos2dx/download-deps.py` Python script to download dependencies required by cocos2d-x. -1. Delete the `.c`, `.cpp`, and `.h` files in `cocos2dx/cocos/editor-support/spine`. These are the Spine Runtime files that cocos2d-x distributes. -1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip). -1. Copy `spine-c/src/spine`, `spine-c/include/spine`, and `spine-cocos2dx/3/src/spine` to `spine-cocos2dx/3/cocos2dx/cocos/editor-support/spine`. If any files were added or removed, you may need to edit the appropriate cocos2d-x project files. - -Alternatively, you may delete the Spine Runtime files out of cocos2d-x and directly use the contents of the `spine-c/src`, `spine-c/include`, and `spine-cocos2dx/3/src` directories in your projects. Be sure your header search path will find the contents of these directories. Note that the includes use `spine/Xxx.h`, so the `spine` directory cannot be omitted when copying the files. - -To run the cocos2d-x Spine examples on Windows: - -1. Place cocos2d-x into `spine-cocos2dx/3/cocos2dx` and open `spine-cocos2dx/3/example/proj.win32/spine-cocos2dx.sln`. Alternatively, add `spine-cocos2dx/3/example/proj.win32/spine-cocos2dx.vcxproj` to your Visual Studio solution which contains cocos2d-x. -1. Copy the contents of `spine-cocos2dx/3/example/Resources` to `spine-cocos2dx/3/example/proj.win32/Debug.win32`. This step is required because cocos2d-x insists on looking for resources in the directory containing the executable. -1. Run the `spine-cocos2dx` project. Click to show debug bones, again for slow motion, and again to change scenes. - -## Notes - -- Images are premultiplied by cocos2d-x, so the Spine atlas images should *not* use premultiplied alpha. - -## Examples - -- [Raptor](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/3/example/Classes/RaptorExample.cpp) -- [Spineboy](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/3/example/Classes/SpineboyExample.cpp) -- [Golbins](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/3/example/Classes/GoblinsExample.cpp) diff --git a/spine-cocos2dx/3/cocos2dx/Place cocos2dx here.txt b/spine-cocos2dx/3/cocos2dx/Place cocos2dx here.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/spine-cocos2dx/3/example/Resources/common/goblins-mesh.json b/spine-cocos2dx/3/example/Resources/common/goblins-mesh.json deleted file mode 100644 index b35360ad1..000000000 --- a/spine-cocos2dx/3/example/Resources/common/goblins-mesh.json +++ /dev/null @@ -1,1081 +0,0 @@ -{ -"bones": [ - { "name": "root" }, - { "name": "hip", "parent": "root", "x": 0.64, "y": 114.41 }, - { "name": "left upper leg", "parent": "hip", "length": 50.39, "x": 14.45, "y": 2.81, "rotation": -89.09 }, - { "name": "pelvis", "parent": "hip", "x": 1.41, "y": -6.57 }, - { "name": "right upper leg", "parent": "hip", "length": 42.45, "x": -20.07, "y": -6.83, "rotation": -97.49 }, - { "name": "torso", "parent": "hip", "length": 85.82, "x": -6.42, "y": 1.97, "rotation": 93.92 }, - { "name": "left lower leg", "parent": "left upper leg", "length": 49.89, "x": 56.34, "y": 0.98, "rotation": -16.65 }, - { "name": "left shoulder", "parent": "torso", "length": 35.43, "x": 74.04, "y": -20.38, "rotation": -156.96 }, - { "name": "neck", "parent": "torso", "length": 18.38, "x": 81.67, "y": -6.34, "rotation": -1.51 }, - { "name": "right lower leg", "parent": "right upper leg", "length": 58.52, "x": 42.99, "y": -0.61, "rotation": -14.34 }, - { "name": "right shoulder", "parent": "torso", "length": 37.24, "x": 76.02, "y": 18.14, "rotation": 133.88 }, - { "name": "head", "parent": "neck", "length": 68.28, "x": 20.93, "y": 11.59, "rotation": -13.92 }, - { "name": "left arm", "parent": "left shoulder", "length": 35.62, "x": 37.85, "y": -2.34, "rotation": 28.16 }, - { "name": "left foot", "parent": "left lower leg", "length": 46.5, "x": 58.94, "y": -7.61, "rotation": 102.43 }, - { "name": "right arm", "parent": "right shoulder", "length": 36.74, "x": 37.6, "y": 0.31, "rotation": 36.32 }, - { "name": "right foot", "parent": "right lower leg", "length": 45.45, "x": 64.88, "y": 0.04, "rotation": 110.3 }, - { "name": "left hand", "parent": "left arm", "length": 11.52, "x": 35.62, "y": 0.07, "rotation": 2.7 }, - { "name": "right hand", "parent": "right arm", "length": 15.32, "x": 36.9, "y": 0.34, "rotation": 2.35 }, - { "name": "spear1", "parent": "left hand", "length": 65.06, "x": 0.48, "y": 17.03, "rotation": 102.43 }, - { "name": "spear2", "parent": "spear1", "length": 61.41, "x": 65.05, "y": 0.04, "rotation": 0.9 }, - { "name": "spear3", "parent": "spear2", "length": 76.79, "x": 61.88, "y": 0.57, "rotation": -0.9 } -], -"slots": [ - { "name": "left shoulder", "bone": "left shoulder", "attachment": "left shoulder" }, - { "name": "left arm", "bone": "left arm", "attachment": "left arm" }, - { "name": "left hand item", "bone": "left hand", "attachment": "spear" }, - { "name": "left hand", "bone": "left hand", "attachment": "left hand" }, - { "name": "left foot", "bone": "left foot", "attachment": "left foot" }, - { "name": "left lower leg", "bone": "left lower leg", "attachment": "left lower leg" }, - { "name": "left upper leg", "bone": "left upper leg", "attachment": "left upper leg" }, - { "name": "neck", "bone": "neck", "attachment": "neck" }, - { "name": "torso", "bone": "torso", "attachment": "torso" }, - { "name": "pelvis", "bone": "pelvis", "attachment": "pelvis" }, - { "name": "right foot", "bone": "right foot", "attachment": "right foot" }, - { "name": "right lower leg", "bone": "right lower leg", "attachment": "right lower leg" }, - { "name": "undie straps", "bone": "pelvis", "attachment": "undie straps" }, - { "name": "undies", "bone": "pelvis", "attachment": "undies" }, - { "name": "right upper leg", "bone": "right upper leg", "attachment": "right upper leg" }, - { "name": "head", "bone": "head", "attachment": "head" }, - { "name": "eyes", "bone": "head" }, - { "name": "right shoulder", "bone": "right shoulder", "attachment": "right shoulder" }, - { "name": "right arm", "bone": "right arm", "attachment": "right arm" }, - { "name": "right hand thumb", "bone": "right hand", "attachment": "right hand thumb" }, - { "name": "right hand item", "bone": "right hand", "attachment": "dagger" }, - { "name": "right hand", "bone": "right hand", "attachment": "right hand" }, - { "name": "right hand item 2", "bone": "right hand", "attachment": "shield" } -], -"skins": { - "default": { - "left hand item": { - "dagger": { "x": 7.88, "y": -23.45, "rotation": 10.47, "width": 26, "height": 108 }, - "spear": { - "type": "skinnedmesh", - "uvs": [ 1, 0.11236, 0.77096, 0.13278, 0.76608, 0.21781, 0.75642, 0.386, 0.74723, 0.54607, 0.72117, 1, 0.28838, 1, 0.24208, 0.54327, 0.22589, 0.38361, 0.2089, 0.21605, 0.20043, 0.13242, 0, 0.11519, 0.4527, 0, 0.58399, 0 ], - "triangles": [ 5, 6, 4, 6, 7, 4, 4, 7, 3, 2, 9, 1, 9, 10, 1, 10, 12, 1, 12, 13, 1, 1, 13, 0, 10, 11, 12, 3, 8, 2, 8, 9, 2, 7, 8, 3 ], - "vertices": [ 1, 20, 38.54, -10.88, 1, 1, 20, 30.97, -5.93, 1, 2, 19, 61.48, -5.58, 0.51, 20, -0.31, -6.16, 0.48, 2, 18, 64.73, -5.03, 0.5, 19, -0.4, -5.06, 0.49, 1, 16, 4.56, 23.91, 1, 1, 16, 41.7, -138.95, 1, 1, 16, 32.42, -141.1, 1, 1, 16, -6.49, 22.4, 1, 2, 18, 65.48, 6.64, 0.5, 19, 0.53, 6.59, 0.49, 2, 19, 62.18, 6.66, 0.51, 20, 0.2, 6.09, 0.48, 1, 20, 30.96, 6.61, 1, 1, 20, 37.26, 11.09, 1, 1, 20, 79.75, 1.59, 1, 1, 20, 79.78, -1.29, 1 ], - "edges": [ 24, 22, 22, 20, 10, 12, 2, 0, 24, 26, 0, 26, 8, 10, 12, 14, 6, 8, 14, 16, 2, 4, 4, 6, 16, 18, 18, 20, 20, 2 ], - "hull": 14, - "width": 22, - "height": 368 - } - }, - "right hand item": { - "dagger": { - "type": "mesh", - "uvs": [ 0.78091, 0.38453, 1, 0.38405, 1, 0.44881, 0.73953, 0.4687, 0.74641, 0.81344, 0.34022, 1, 0.15434, 1, 0.11303, 0.78858, 0.23007, 0.47367, 0, 0.45047, 0, 0.38621, 0.22367, 0.38573, 0.24384, 0, 1, 0 ], - "triangles": [ 0, 12, 13, 11, 12, 0, 0, 1, 2, 9, 10, 11, 3, 11, 0, 3, 0, 2, 8, 11, 3, 9, 11, 8, 5, 6, 7, 4, 5, 8, 4, 8, 3, 5, 7, 8 ], - "vertices": [ 15.49, -12.82, 21.13, -13.57, 20.16, -20.49, 13.15, -21.67, 8.13, -58.56, -5.13, -77.04, -9.92, -76.36, -7.79, -53.6, -0.03, -20.36, -5.6, -17.04, -4.63, -10.17, 1.12, -10.93, 7.46, 30.24, 26.93, 27.49 ], - "edges": [ 22, 20, 24, 26, 22, 24, 2, 0, 0, 22, 0, 26, 12, 14, 14, 16, 18, 20, 16, 18, 2, 4, 4, 6, 6, 8, 10, 12, 8, 10 ], - "hull": 14, - "width": 26, - "height": 108 - } - }, - "right hand item 2": { - "shield": { "rotation": 93.49, "width": 70, "height": 72 } - } - }, - "goblin": { - "eyes": { - "eyes closed": { "name": "goblin/eyes-closed", "x": 29.19, "y": -24.89, "rotation": -88.92, "width": 34, "height": 12 } - }, - "head": { - "head": { - "name": "goblin/head", - "type": "mesh", - "uvs": [ 0, 0.60494, 0.14172, 0.5145, 0.24218, 0.55229, 0.32667, 0.67806, 0.37969, 0.79352, 0.53505, 0.93014, 0.86056, 1, 0.94071, 0.94169, 0.92098, 0.69923, 0.9888, 0.65497, 0.99003, 0.51643, 0.89632, 0.43561, 0.94487, 0.41916, 1, 0.39713, 1, 0.2836, 0.94017, 0.27027, 0.87906, 0.25666, 0.80754, 0.16044, 0.66698, 0.01997, 0.4734, 0.01805, 0.29215, 0.19893, 0.25392, 0.31823, 0.09117, 0.324, 0, 0.44331, 0.43271, 0.69153, 0.466, 0.47794, 0.35996, 0.31246, 0.73473, 0.68593, 0.72215, 0.57425, 0.88179, 0.5583, 0.80267, 0.51015 ], - "triangles": [ 26, 20, 19, 21, 20, 26, 15, 14, 13, 12, 15, 13, 11, 16, 15, 11, 15, 12, 26, 17, 25, 18, 26, 19, 17, 26, 18, 30, 25, 17, 30, 17, 16, 30, 16, 11, 1, 22, 21, 23, 22, 1, 2, 1, 21, 2, 21, 26, 29, 30, 11, 29, 11, 10, 28, 25, 30, 0, 23, 1, 9, 29, 10, 25, 3, 2, 25, 2, 26, 29, 27, 28, 29, 28, 30, 24, 3, 25, 24, 25, 28, 24, 28, 27, 8, 29, 9, 27, 29, 8, 4, 3, 24, 5, 24, 27, 4, 24, 5, 7, 6, 27, 7, 27, 8, 5, 27, 6 ], - "vertices": [ 14.56, 50.42, 23.12, 35.47, 17.46, 26.36, 11.57, 16.86, 3.74, 11.71, -5.89, -3.91, -11.83, -37.23, -8.31, -45.63, 7.75, -44.24, 10.39, -51.33, 19.52, -51.82, 25.21, -43.15, 26.12, -47.43, 27.35, -53.16, 34.84, -53.46, 35.96, -47.33, 37.11, -41.08, 43.75, -33.97, 53.58, -19.87, 54.5, 0.03, 43.31, 19.16, 35.6, 23.41, 35.89, 40.17, 28.39, 49.87, 10.25, 5.99, 24.2, 2, 35.55, 12.48, 9.39, -25.1, 16.8, -24.31, 17.2, -40.65, 20.68, -33.02 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 20, 22, 26, 28, 32, 34, 34, 36, 36, 38, 38, 40, 40, 42, 42, 44, 44, 46, 0, 46, 6, 48, 48, 50, 50, 52, 52, 42, 2, 4, 4, 6, 4, 52, 2, 44, 22, 32, 22, 24, 24, 26, 28, 30, 30, 32, 24, 30, 16, 54, 54, 56, 20, 58, 58, 54, 16, 58, 22, 60, 60, 56, 58, 60 ], - "hull": 24, - "width": 103, - "height": 66 - } - }, - "left arm": { - "left arm": { - "name": "goblin/left-arm", - "type": "mesh", - "uvs": [ 0.68992, 0.29284, 1, 0.46364, 1, 0.74643, 0.84089, 1, 0.66344, 1, 0.33765, 0.64284, 0, 0.44124, 0, 0, 0.34295, 0 ], - "triangles": [ 6, 7, 8, 5, 6, 8, 0, 5, 8, 0, 1, 2, 5, 0, 2, 4, 5, 2, 3, 4, 2 ], - "vertices": [ 18.6, 8.81, 32.19, 10.31, 38.02, 1.62, 38.08, -9.63, 32.31, -13.49, 14.37, -9.62, -0.75, -10.78, -9.84, 2.77, 1.29, 10.25 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 6, 4, 6, 8, 8, 10, 12, 14, 10, 12 ], - "hull": 9, - "width": 37, - "height": 35 - } - }, - "left foot": { - "left foot": { - "name": "goblin/left-foot", - "type": "mesh", - "uvs": [ 0.15733, 0.31873, 0.08195, 0.78502, 0.15884, 0.99366, 0.41633, 0.96804, 0.68822, 0.97636, 1, 0.96388, 0.99385, 0.73501, 0.85294, 0.51862, 0.61479, 0.31056, 0.46991, 0, 0.48032, 0.75604, 0.75994, 0.77706 ], - "triangles": [ 0, 9, 8, 10, 0, 8, 10, 8, 7, 11, 10, 7, 11, 7, 6, 1, 0, 10, 11, 6, 5, 3, 1, 10, 4, 10, 11, 4, 11, 5, 3, 10, 4, 2, 1, 3 ], - "vertices": [ 2.28, 13.07, -1.76, -1.64, 3.59, -7.8, 20.25, -6.04, 37.91, -5.27, 58.12, -3.71, 57.31, 3.34, 47.78, 9.51, 31.95, 15.05, 21.99, 24.11, 24.03, 0.75, 42.21, 1.16 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 6, 20, 20, 16, 2, 20, 8, 22, 22, 14, 20, 22, 22, 10 ], - "hull": 10, - "width": 65, - "height": 31 - } - }, - "left hand": { - "left hand": { - "name": "goblin/left-hand", - "type": "mesh", - "uvs": [ 0.518, 0.12578, 1, 0.16285, 0.99788, 0.50578, 0.69745, 1, 0.37445, 1, 0, 0.80051, 0, 0.42792, 0.17601, 0, 0.43567, 0 ], - "triangles": [ 2, 0, 1, 0, 5, 6, 6, 7, 0, 0, 7, 8, 3, 4, 0, 4, 5, 0, 2, 3, 0 ], - "vertices": [ -3.11, 15.42, 10.83, 22.27, 15.5, 14.55, 18.35, -8.96, 9.48, -14.32, -4.58, -14.3, -11.63, -2.63, -14.89, 13.68, -7.75, 17.99 ], - "edges": [ 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 14, 16, 12, 14 ], - "hull": 9, - "width": 36, - "height": 41 - } - }, - "left lower leg": { - "left lower leg": { - "name": "goblin/left-lower-leg", - "type": "mesh", - "uvs": [ 0.95508, 0.20749, 0.81927, 0.65213, 0.94754, 0.77308, 0.67842, 0.97346, 0.46463, 1, 0.26845, 1, 0.04963, 0.90706, 0.2106, 0.60115, 0.07478, 0.40195, 0.18545, 0, 0.28857, 0 ], - "triangles": [ 10, 8, 9, 1, 7, 10, 7, 8, 10, 0, 1, 10, 1, 4, 7, 3, 1, 2, 5, 6, 7, 7, 4, 5, 1, 3, 4 ], - "vertices": [ -0.19, 6.82, 30.97, 10.96, 37.97, 17.33, 53.88, 12.6, 57.58, 6.31, 59.34, 0.08, 55.04, -8.63, 32.99, -9.33, 20.79, -17.43, -7.27, -21.56, -8.19, -18.29 ], - "edges": [ 20, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 18, 20, 16, 18 ], - "hull": 11, - "width": 33, - "height": 70 - } - }, - "left shoulder": { - "left shoulder": { - "name": "goblin/left-shoulder", - "type": "mesh", - "uvs": [ 0.7377, 0.40692, 1, 0.75237, 1, 1, 0.62046, 1, 0.26184, 0.56601, 0, 0.29783, 0, 0, 0.44115, 0 ], - "triangles": [ 5, 6, 7, 4, 5, 7, 4, 7, 0, 3, 4, 0, 3, 0, 1, 3, 1, 2 ], - "vertices": [ 15.18, 5.74, 32.17, 5.32, 41.79, 0.21, 36.63, -9.5, 14.88, -9.72, 0.9, -10.89, -10.66, -4.74, -4.66, 6.54 ], - "edges": [ 12, 14, 14, 0, 4, 2, 0, 2, 4, 6, 6, 8, 10, 12, 8, 10 ], - "hull": 8, - "width": 29, - "height": 44 - } - }, - "left upper leg": { - "left upper leg": { - "name": "goblin/left-upper-leg", - "type": "mesh", - "uvs": [ 1, 0.12167, 1, 0.54873, 0.91067, 0.78907, 0.76567, 1, 0.3087, 0.9579, 0, 0.68777, 0, 0.219, 0.51961, 0, 0.87552, 0 ], - "triangles": [ 7, 8, 0, 5, 6, 7, 0, 1, 7, 4, 5, 7, 1, 4, 7, 2, 4, 1, 3, 4, 2 ], - "vertices": [ 2.33, 13.06, 33.5, 12.57, 51, 9.34, 66.32, 4.31, 63, -10.71, 43.13, -20.58, 8.91, -20.04, -6.79, -2.64, -6.61, 9.1 ], - "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 10, 12, 12, 14, 14, 16, 2, 0, 16, 0 ], - "hull": 9, - "width": 33, - "height": 73 - } - }, - "neck": { - "neck": { - "name": "goblin/neck", - "type": "mesh", - "uvs": [ 0.81967, 0.27365, 0.92101, 0.82048, 0.47134, 1, 0.15679, 0.9354, 0, 0.7556, 0.19268, 0.51833, 0.15468, 0.35706, 0, 0.21989, 0.13568, 0, 0.68878, 0, 0.70145, 0.53872 ], - "triangles": [ 6, 8, 9, 6, 9, 0, 7, 8, 6, 10, 5, 6, 0, 10, 6, 10, 0, 1, 3, 4, 5, 2, 5, 10, 2, 10, 1, 3, 5, 2 ], - "vertices": [ 18.62, -11.65, -3.98, -13.85, -10.28, 2.76, -6.91, 13.89, 0.8, 19.05, 10.06, 11.51, 16.74, 12.45, 22.71, 17.64, 31.4, 12.19, 30.12, -7.67, 8.05, -6.71 ], - "edges": [ 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 20, 20, 0, 0, 18, 16, 18, 14, 16, 0, 2 ], - "hull": 10, - "width": 36, - "height": 41 - } - }, - "pelvis": { - "pelvis": { - "name": "goblin/pelvis", - "type": "mesh", - "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], - "triangles": [ 1, 2, 3, 1, 3, 0 ], - "vertices": [ 25.38, -20.73, -36.61, -20.73, -36.61, 22.26, 25.38, 22.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], - "hull": 4, - "width": 62, - "height": 43 - } - }, - "right arm": { - "right arm": { - "name": "goblin/right-arm", - "type": "mesh", - "uvs": [ 1, 0.09223, 1, 0.8501, 0.72058, 1, 0.24384, 1, 0, 0.86558, 0.20822, 0.10919, 0.50903, 0, 0.85342, 0 ], - "triangles": [ 6, 7, 0, 2, 3, 5, 4, 5, 3, 1, 6, 0, 6, 2, 5, 1, 2, 6 ], - "vertices": [ -4.75, 8.89, 33.03, 11.74, 40.99, 5.89, 41.81, -5.03, 35.53, -11.13, -2.53, -9.2, -8.5, -2.71, -9.09, 5.18 ], - "edges": [ 8, 6, 4, 6, 4, 2, 12, 14, 2, 0, 14, 0, 10, 12, 8, 10 ], - "hull": 8, - "width": 23, - "height": 50 - } - }, - "right foot": { - "right foot": { - "name": "goblin/right-foot", - "type": "mesh", - "uvs": [ 0.40851, 0.0047, 0.59087, 0.33404, 0.75959, 0.48311, 0.88907, 0.59751, 0.97532, 0.89391, 0.90385, 1, 0.6722, 1, 0.38633, 1, 0.08074, 1, 0, 0.88921, 0, 0.65984, 0, 0.46577, 0.0906, 0.0988, 0.305, 0, 0.47461, 0.71257, 0.715, 0.74681 ], - "triangles": [ 1, 10, 11, 1, 13, 0, 14, 1, 2, 1, 12, 13, 12, 1, 11, 14, 10, 1, 15, 14, 2, 15, 2, 3, 9, 10, 14, 15, 3, 4, 7, 8, 9, 14, 7, 9, 6, 14, 15, 5, 6, 15, 7, 14, 6, 4, 5, 15 ], - "vertices": [ 17.36, 25.99, 29.13, 15.44, 39.89, 10.8, 48.14, 7.24, 53.84, -2.38, 49.43, -6, 34.84, -6.39, 16.84, -6.87, -2.4, -7.38, -7.58, -3.86, -7.78, 3.7, -7.95, 10.1, -2.57, 22.36, 10.84, 25.97, 22.14, 2.75, 37.31, 2.03 ], - "edges": [ 0, 2, 6, 8, 8, 10, 16, 18, 22, 24, 24, 26, 0, 26, 10, 12, 2, 4, 4, 6, 12, 14, 14, 16, 18, 20, 20, 22, 2, 28, 28, 14, 20, 28, 4, 30, 30, 12, 28, 30, 30, 8 ], - "hull": 14, - "width": 63, - "height": 33 - } - }, - "right hand": { - "right hand": { - "name": "goblin/right-hand", - "type": "mesh", - "uvs": [ 0.17957, 0, 0, 0.44772, 0, 0.79734, 0.20057, 0.94264, 0.55057, 1, 0.8539, 1, 0.89823, 0.82004, 0.8259, 0.74285, 0.84223, 0.49993, 0.96356, 0.34102, 0.66023, 0 ], - "triangles": [ 8, 10, 9, 0, 10, 1, 8, 2, 1, 8, 1, 10, 7, 3, 8, 3, 2, 8, 4, 3, 7, 5, 7, 6, 4, 7, 5 ], - "vertices": [ -10.82, -9.45, 5.95, -15.34, 18.88, -14.9, 24, -7.5, 25.69, 5.16, 25.31, 16.07, 18.61, 17.44, 15.84, 14.74, 6.84, 15.02, 0.81, 19.18, -11.41, 7.83 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 18, 20, 0, 20 ], - "hull": 11, - "width": 36, - "height": 37 - } - }, - "right hand thumb": { - "right hand thumb": { - "name": "goblin/right-hand", - "type": "mesh", - "uvs": [ 0.88538, 0.22262, 0.76167, 0.3594, 0.75088, 0.78308, 0.95326, 0.84981, 1, 0.60302 ], - "triangles": [ 1, 0, 4, 2, 1, 4, 3, 2, 4 ], - "vertices": [ -2.82, 15.97, 2.4, 11.71, 18.08, 11.9, 20.27, 19.27, 11.09, 20.62 ], - "edges": [ 2, 4, 4, 6, 6, 8, 2, 0, 0, 8 ], - "hull": 5, - "width": 36, - "height": 37 - } - }, - "right lower leg": { - "right lower leg": { - "name": "goblin/right-lower-leg", - "type": "mesh", - "uvs": [ 1, 0.27261, 0.81312, 0.52592, 0.79587, 0.71795, 0.95544, 0.80988, 0.85193, 0.95493, 0.47241, 1, 0.14033, 1, 0, 0.8773, 0.14896, 0.67914, 0.1619, 0.30325, 0.60611, 0 ], - "triangles": [ 1, 10, 0, 9, 10, 1, 8, 9, 1, 2, 8, 1, 4, 2, 3, 6, 7, 8, 5, 6, 8, 2, 5, 8, 4, 5, 2 ], - "vertices": [ 6.26, 8.46, 23.32, 8.04, 37.1, 12.89, 41.45, 20.82, 53.07, 21.46, 61.33, 10.06, 65.77, -1.03, 58.99, -9.19, 43.02, -9.81, 16.33, -20, -12.79, -9.26 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 20, 18, 20 ], - "hull": 11, - "width": 36, - "height": 76 - } - }, - "right shoulder": { - "right shoulder": { - "name": "goblin/right-shoulder", - "type": "mesh", - "uvs": [ 0.62008, 0.03708, 0.92131, 0.09048, 1, 0.38319, 0.72049, 0.6937, 0.31656, 1, 0, 1, 0, 0.75106, 0.28233, 0.49988 ], - "triangles": [ 2, 3, 0, 2, 0, 1, 7, 0, 3, 4, 5, 6, 4, 7, 3, 4, 6, 7 ], - "vertices": [ -3.17, -11.05, -9, -0.57, -1.01, 10.33, 16.69, 11.17, 37.41, 8.2, 45.45, -1.16, 36.95, -8.46, 21.2, -7.47 ], - "edges": [ 10, 12, 12, 14, 14, 0, 0, 2, 2, 4, 4, 6, 8, 10, 6, 8 ], - "hull": 8, - "width": 39, - "height": 45 - } - }, - "right upper leg": { - "right upper leg": { - "name": "goblin/right-upper-leg", - "type": "mesh", - "uvs": [ 0.27018, 0, 0.11618, 0.18177, 0, 0.70688, 0, 0.89577, 0.26668, 1, 0.48718, 1, 0.67618, 0.83532, 1, 0.5161, 1, 0.25543, 0.74618, 0.0571 ], - "triangles": [ 9, 8, 7, 9, 1, 0, 6, 9, 7, 6, 1, 9, 2, 1, 6, 4, 3, 2, 6, 4, 2, 5, 4, 6 ], - "vertices": [ -9.85, -10.37, 2.17, -14.07, 35.49, -13.66, 47.29, -12.11, 52.61, -2.26, 51.63, 5.16, 40.51, 10.18, 19.13, 18.47, 2.85, 16.32, -8.4, 6.14 ], - "edges": [ 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18 ], - "hull": 10, - "width": 34, - "height": 63 - } - }, - "torso": { - "torso": { - "name": "goblin/torso", - "type": "mesh", - "uvs": [ 0, 0.33287, 0.15945, 0.46488, 0.15761, 0.60314, 0.15502, 0.79806, 0.32807, 0.93478, 0.6875, 1, 0.80731, 1, 1, 0.77763, 1, 0.66147, 1, 0.56703, 0.93207, 0.4771, 0.86944, 0.39416, 0.83837, 0.226, 0.68085, 0, 0.14836, 0, 0, 0.07199, 0.78734, 0.86249, 0.43679, 0.79649, 0.76738, 0.61733, 0.44345, 0.58747, 0.54329, 0.38316, 0.77692, 0.73446, 0.66478, 0.51012 ], - "triangles": [ 0, 15, 14, 20, 14, 13, 20, 13, 12, 1, 0, 14, 20, 12, 11, 20, 1, 14, 22, 20, 11, 22, 11, 10, 19, 1, 20, 19, 20, 22, 2, 1, 19, 18, 22, 10, 18, 10, 9, 19, 22, 18, 18, 9, 8, 21, 18, 8, 21, 8, 7, 17, 2, 19, 21, 17, 19, 21, 19, 18, 3, 2, 17, 16, 21, 7, 17, 21, 16, 4, 3, 17, 5, 17, 16, 4, 17, 5, 6, 16, 7, 5, 16, 6 ], - "vertices": [ 56.93, 27.95, 43.37, 18.23, 30.16, 19.5, 11.53, 21.28, -2.55, 10.69, -10.89, -13.12, -11.59, -21.23, 8.54, -36.12, 19.65, -37.08, 28.68, -37.86, 37.68, -34, 45.98, -30.44, 56.4, -29.07, 84.78, -20.92, 87.9, 15.15, 81.88, 25.79, 1.67, -21.01, 10.03, 2.18, 25.23, -18.25, 29.98, 0, 48.54, -8.39, 13.98, -21.36, 35.9, -15.6 ], - "edges": [ 0, 2, 6, 8, 8, 10, 10, 12, 12, 14, 22, 24, 24, 26, 26, 28, 28, 30, 0, 30, 14, 32, 32, 34, 34, 6, 18, 36, 36, 38, 2, 4, 4, 6, 38, 4, 2, 40, 40, 22, 40, 38, 38, 34, 32, 10, 34, 8, 40, 28, 14, 16, 16, 18, 32, 42, 42, 36, 16, 42, 42, 34, 18, 20, 20, 22, 36, 44, 44, 40, 20, 44 ], - "hull": 16, - "width": 68, - "height": 96 - } - }, - "undie straps": { - "undie straps": { - "name": "goblin/undie-straps", - "type": "mesh", - "uvs": [ 0.36097, 0.44959, 0.66297, 0.60591, 1, 0.19486, 1, 0.57117, 0.75897, 1, 0.38697, 1, 0, 0.26433, 0, 0, 0.12497, 0 ], - "triangles": [ 6, 7, 8, 6, 8, 0, 3, 1, 2, 5, 0, 1, 6, 0, 5, 4, 1, 3, 5, 1, 4 ], - "vertices": [ -10.56, 12.87, 6.53, 9.9, 25.62, 17.71, 25.62, 10.56, 11.97, 2.41, -9.09, 2.41, -31, 16.39, -31, 21.41, -23.92, 21.41 ], - "edges": [ 14, 16, 16, 0, 0, 2, 2, 4, 4, 6, 6, 8, 8, 10, 12, 14, 10, 12, 0, 10, 2, 8 ], - "hull": 9, - "width": 55, - "height": 19 - } - }, - "undies": { - "undies": { - "name": "goblin/undies", - "type": "mesh", - "uvs": [ 0, 0.32029, 0.14893, 0.59457, 0.22437, 1, 0.35909, 1, 0.50998, 1, 0.79559, 0.58453, 0.9842, 0.28015, 1, 0.00588, 0.46957, 0.17646, 0, 0.03933, 0.48843, 0.59122, 0.48114, 0.43099 ], - "triangles": [ 6, 8, 7, 0, 9, 8, 11, 8, 6, 0, 8, 11, 5, 11, 6, 10, 11, 5, 1, 0, 11, 1, 11, 10, 3, 2, 1, 10, 3, 1, 4, 10, 5, 3, 10, 4 ], - "vertices": [ -13.22, 5.56, -8, -2.47, -5.49, -14.27, -0.64, -14.36, 4.78, -14.45, 15.27, -2.59, 22.22, 6.11, 22.92, 14.05, 3.75, 9.44, -13.08, 13.71, 4.21, -2.59, 4.03, 2.05 ], - "edges": [ 0, 2, 2, 4, 8, 10, 10, 12, 12, 14, 14, 16, 16, 18, 0, 18, 4, 6, 6, 8, 6, 20, 16, 22, 22, 20, 0, 22, 22, 12, 2, 20, 20, 10 ], - "hull": 10, - "width": 36, - "height": 29 - } - } - }, - "goblingirl": { - "eyes": { - "eyes closed": { "name": "goblingirl/eyes-closed", "x": 28, "y": -25.54, "rotation": -87.04, "width": 37, "height": 21 } - }, - "head": { - "head": { "name": "goblingirl/head", "x": 27.71, "y": -4.32, "rotation": -85.58, "width": 103, "height": 81 } - }, - "left arm": { - "left arm": { "name": "goblingirl/left-arm", "x": 19.64, "y": -2.42, "rotation": 33.05, "width": 37, "height": 35 } - }, - "left foot": { - "left foot": { "name": "goblingirl/left-foot", "x": 25.17, "y": 7.92, "rotation": 3.32, "width": 65, "height": 31 } - }, - "left hand": { - "left hand": { - "name": "goblingirl/left-hand", - "x": 4.34, - "y": 2.39, - "scaleX": 0.896, - "scaleY": 0.896, - "rotation": 30.34, - "width": 35, - "height": 40 - } - }, - "left lower leg": { - "left lower leg": { "name": "goblingirl/left-lower-leg", "x": 25.02, "y": -0.6, "rotation": 105.75, "width": 33, "height": 70 } - }, - "left shoulder": { - "left shoulder": { "name": "goblingirl/left-shoulder", "x": 19.8, "y": -0.42, "rotation": 61.21, "width": 28, "height": 46 } - }, - "left upper leg": { - "left upper leg": { "name": "goblingirl/left-upper-leg", "x": 30.21, "y": -2.95, "rotation": 89.09, "width": 33, "height": 70 } - }, - "neck": { - "neck": { "name": "goblingirl/neck", "x": 6.16, "y": -3.14, "rotation": -98.86, "width": 35, "height": 41 } - }, - "pelvis": { - "pelvis": { "name": "goblingirl/pelvis", "x": -3.87, "y": 3.18, "width": 62, "height": 43 } - }, - "right arm": { - "right arm": { "name": "goblingirl/right-arm", "x": 16.85, "y": -0.66, "rotation": 93.52, "width": 28, "height": 50 } - }, - "right foot": { - "right foot": { "name": "goblingirl/right-foot", "x": 23.46, "y": 9.66, "rotation": 1.52, "width": 63, "height": 33 } - }, - "right hand": { - "right hand": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 } - }, - "right hand thumb": { - "right hand thumb": { "name": "goblingirl/right-hand", "x": 7.21, "y": 3.43, "rotation": 91.16, "width": 36, "height": 37 } - }, - "right lower leg": { - "right lower leg": { "name": "goblingirl/right-lower-leg", "x": 26.15, "y": -3.27, "rotation": 111.83, "width": 36, "height": 76 } - }, - "right shoulder": { - "right shoulder": { "name": "goblingirl/right-shoulder", "x": 14.46, "y": 0.45, "rotation": 129.85, "width": 39, "height": 45 } - }, - "right upper leg": { - "right upper leg": { "name": "goblingirl/right-upper-leg", "x": 19.69, "y": 2.13, "rotation": 97.49, "width": 34, "height": 63 } - }, - "torso": { - "torso": { "name": "goblingirl/torso", "x": 36.28, "y": -5.14, "rotation": -95.74, "width": 68, "height": 96 } - }, - "undie straps": { - "undie straps": { "name": "goblingirl/undie-straps", "x": -1.51, "y": 14.18, "width": 55, "height": 19 } - }, - "undies": { - "undies": { "name": "goblingirl/undies", "x": 5.4, "y": 1.7, "width": 36, "height": 29 } - } - } -}, -"animations": { - "walk": { - "slots": { - "eyes": { - "attachment": [ - { "time": 0.7, "name": "eyes closed" }, - { "time": 0.8, "name": null } - ] - } - }, - "bones": { - "left upper leg": { - "rotate": [ - { "time": 0, "angle": -26.55 }, - { "time": 0.1333, "angle": -8.78 }, - { "time": 0.2333, "angle": 9.51 }, - { "time": 0.3666, "angle": 30.74 }, - { "time": 0.5, "angle": 25.33 }, - { "time": 0.6333, "angle": 26.11 }, - { "time": 0.7333, "angle": 7.45 }, - { "time": 0.8666, "angle": -21.19 }, - { "time": 1, "angle": -26.55 } - ], - "translate": [ - { "time": 0, "x": -1.32, "y": 1.7 }, - { "time": 0.3666, "x": -0.06, "y": 2.42 }, - { "time": 1, "x": -1.32, "y": 1.7 } - ] - }, - "right upper leg": { - "rotate": [ - { "time": 0, "angle": 42.45 }, - { - "time": 0.1333, - "angle": 49.86, - "curve": [ 0.414, 0, 0.705, 0.99 ] - }, - { "time": 0.2333, "angle": 22.51 }, - { "time": 0.5, "angle": -16.93 }, - { "time": 0.6333, "angle": 1.89 }, - { - "time": 0.7333, - "angle": 34.86, - "curve": [ 0.462, 0.11, 1, 1 ] - }, - { - "time": 0.8666, - "angle": 58.68, - "curve": [ 0.5, 0.02, 1, 1 ] - }, - { "time": 1, "angle": 42.45 } - ], - "translate": [ - { "time": 0, "x": 6.23, "y": 0 }, - { "time": 0.2333, "x": 2.14, "y": 2.4 }, - { "time": 0.5, "x": 2.44, "y": 4.8 }, - { "time": 1, "x": 6.23, "y": 0 } - ] - }, - "left lower leg": { - "rotate": [ - { "time": 0, "angle": -18.05 }, - { "time": 0.1333, "angle": -63.5 }, - { "time": 0.2333, "angle": -83.01 }, - { "time": 0.5, "angle": 5.11 }, - { "time": 0.6333, "angle": -28.29 }, - { "time": 0.7333, "angle": -27.52 }, - { "time": 0.8666, "angle": 3.53 }, - { "time": 1, "angle": -18.05 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.2333, "x": 2.55, "y": -0.47 }, - { "time": 0.5, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 1, "x": 0, "y": 0 } - ] - }, - "left foot": { - "rotate": [ - { "time": 0, "angle": -14.56 }, - { "time": 0.1333, "angle": -10.42 }, - { "time": 0.2333, "angle": -5.01 }, - { "time": 0.3, "angle": 6.67 }, - { "time": 0.3666, "angle": 3.87 }, - { "time": 0.5, "angle": -3.87 }, - { "time": 0.6333, "angle": 2.78 }, - { "time": 0.7333, "angle": -11.99 }, - { "time": 0.8666, "angle": -12.45 }, - { "time": 1, "angle": -14.56 } - ] - }, - "right shoulder": { - "rotate": [ - { - "time": 0, - "angle": 5.29, - "curve": [ 0.264, 0, 0.75, 1 ] - }, - { "time": 0.6333, "angle": 6.65 }, - { "time": 1, "angle": 5.29 } - ] - }, - "right arm": { - "rotate": [ - { - "time": 0, - "angle": -4.02, - "curve": [ 0.267, 0, 0.804, 0.99 ] - }, - { - "time": 0.6333, - "angle": 19.78, - "curve": [ 0.307, 0, 0.787, 0.99 ] - }, - { "time": 1, "angle": -4.02 } - ] - }, - "right hand": { - "rotate": [ - { "time": 0, "angle": 8.98 }, - { "time": 0.6333, "angle": 0.51 }, - { "time": 1, "angle": 8.98 } - ] - }, - "left shoulder": { - "rotate": [ - { - "time": 0, - "angle": 6.25, - "curve": [ 0.339, 0, 0.683, 1 ] - }, - { - "time": 0.5, - "angle": -11.78, - "curve": [ 0.281, 0, 0.686, 0.99 ] - }, - { "time": 1, "angle": 6.25 } - ], - "translate": [ - { "time": 0, "x": 1.15, "y": 0.23 } - ] - }, - "left hand": { - "rotate": [ - { - "time": 0, - "angle": -21.23, - "curve": [ 0.295, 0, 0.755, 0.98 ] - }, - { - "time": 0.5, - "angle": -27.28, - "curve": [ 0.241, 0, 0.75, 0.97 ] - }, - { "time": 1, "angle": -21.23 } - ] - }, - "left arm": { - "rotate": [ - { - "time": 0, - "angle": 28.37, - "curve": [ 0.339, 0, 0.683, 1 ] - }, - { - "time": 0.5, - "angle": 60.09, - "curve": [ 0.281, 0, 0.686, 0.99 ] - }, - { "time": 1, "angle": 28.37 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -10.28 }, - { - "time": 0.1333, - "angle": -15.38, - "curve": [ 0.545, 0, 0.818, 1 ] - }, - { - "time": 0.3666, - "angle": -9.78, - "curve": [ 0.58, 0.17, 0.669, 0.99 ] - }, - { - "time": 0.6333, - "angle": -15.75, - "curve": [ 0.235, 0.01, 0.795, 1 ] - }, - { - "time": 0.8666, - "angle": -7.06, - "curve": [ 0.209, 0, 0.816, 0.98 ] - }, - { "time": 1, "angle": -10.28 } - ], - "translate": [ - { "time": 0, "x": -3.72, "y": -0.01 } - ] - }, - "right foot": { - "rotate": [ - { "time": 0, "angle": -5.25 }, - { "time": 0.2333, "angle": -17.76 }, - { "time": 0.3666, "angle": -20.09 }, - { "time": 0.5, "angle": -19.73 }, - { "time": 0.7333, "angle": -11.68 }, - { "time": 0.8, "angle": 4.46 }, - { "time": 0.8666, "angle": 0.46 }, - { "time": 1, "angle": -5.25 } - ] - }, - "right lower leg": { - "rotate": [ - { - "time": 0, - "angle": -3.39, - "curve": [ 0.316, 0.01, 0.741, 0.98 ] - }, - { - "time": 0.1333, - "angle": -43.21, - "curve": [ 0.414, 0, 0.705, 0.99 ] - }, - { "time": 0.2333, "angle": -25.98 }, - { "time": 0.5, "angle": -19.53 }, - { "time": 0.6333, "angle": -64.8 }, - { - "time": 0.7333, - "angle": -89.54, - "curve": [ 0.557, 0.18, 1, 1 ] - }, - { "time": 1, "angle": -3.39 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.5, "x": 0, "y": 0 }, - { "time": 0.6333, "x": 2.18, "y": 0.21 }, - { "time": 1, "x": 0, "y": 0 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 1, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": -8.4 }, - { - "time": 0.1333, - "x": 0, - "y": -9.35, - "curve": [ 0.326, 0.05, 0.674, 0.93 ] - }, - { - "time": 0.2333, - "x": 0, - "y": -0.59, - "curve": [ 0.325, 0.39, 0.643, 0.7 ] - }, - { "time": 0.3666, "x": 0, "y": -3.96 }, - { "time": 0.5, "x": 0, "y": -8.4 }, - { - "time": 0.6333, - "x": 0, - "y": -10, - "curve": [ 0.359, 0.47, 0.646, 0.74 ] - }, - { - "time": 0.7333, - "x": 0, - "y": -5.29, - "curve": [ 0.333, 0.36, 0.662, 0.69 ] - }, - { - "time": 0.8, - "x": 0, - "y": -2.49, - "curve": [ 0.322, 0.35, 0.651, 0.68 ] - }, - { "time": 0.8666, "x": 0, "y": -3.96 }, - { "time": 1, "x": 0, "y": -8.4 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 3.6 }, - { "time": 0.1333, "angle": 17.49 }, - { "time": 0.2333, "angle": 6.1 }, - { "time": 0.3666, "angle": 3.45 }, - { "time": 0.5, "angle": 5.17 }, - { "time": 0.6333, "angle": 18.36 }, - { "time": 0.7333, "angle": 6.09 }, - { "time": 0.8666, "angle": 2.28 }, - { "time": 1, "angle": 3.6 } - ] - }, - "head": { - "rotate": [ - { - "time": 0, - "angle": 3.6, - "curve": [ 0, 0, 0.704, 1.17 ] - }, - { "time": 0.1333, "angle": -0.2 }, - { "time": 0.2333, "angle": 6.1 }, - { "time": 0.3666, "angle": 3.45 }, - { - "time": 0.5, - "angle": 5.17, - "curve": [ 0, 0, 0.704, 1.61 ] - }, - { "time": 0.6666, "angle": 1.1 }, - { "time": 0.7333, "angle": 6.09 }, - { "time": 0.8666, "angle": 2.28 }, - { "time": 1, "angle": 3.6 } - ] - }, - "pelvis": { - "rotate": [ - { "time": 0, "angle": -1.33 } - ], - "translate": [ - { "time": 0, "x": 0.39, "y": -0.78 } - ] - }, - "spear1": { - "rotate": [ - { "time": 0, "angle": 1.84 }, - { "time": 0.2, "angle": -5.38 }, - { "time": 0.5, "angle": 2.95 }, - { "time": 0.7333, "angle": -3.67 }, - { "time": 1, "angle": 1.84 } - ] - }, - "spear2": { - "rotate": [ - { "time": 0, "angle": 1.84 }, - { "time": 0.2, "angle": -5.38 }, - { "time": 0.5, "angle": 2.95 }, - { "time": 0.7333, "angle": -3.67 }, - { "time": 1, "angle": 1.84 } - ] - }, - "spear3": { - "rotate": [ - { "time": 0, "angle": 3.64 }, - { "time": 0.2, "angle": -3.59 }, - { "time": 0.5, "angle": 4.74 }, - { "time": 0.7333, "angle": -1.87 }, - { "time": 1, "angle": 3.64 } - ] - } - }, - "ffd": { - "default": { - "left hand item": { - "spear": [ - { "time": 0 } - ] - }, - "right hand item": { - "dagger": [ - { - "time": 0, - "offset": 26, - "vertices": [ 2.34, 0.14 ], - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.5, - "offset": 8, - "vertices": [ -1.19, 4.31, 0.07, 6.41, 1.66, 6.18, 1.75, 3.59 ], - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 1, - "offset": 26, - "vertices": [ 2.34, 0.14 ] - } - ] - } - }, - "goblin": { - "head": { - "head": [ - { - "time": 0, - "curve": [ 0.632, 0, 0.75, 1 ] - }, - { - "time": 0.2, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08, -1.08, 0.08, -1.08, 0.08, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 0.08 ], - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.3666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09, 1.47, 0.09, 1.47, 0.09, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.47, 0.09 ], - "curve": [ 0.621, 0, 0.75, 1 ] - }, - { - "time": 0.7, - "vertices": [ -10.97, -6.68, -4.68, -2.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17, -1.17, -0.17, -1.17, -0.17, 0, 0, -2.22, 2.66, -4.83, 2.7, -5.7, -0.51, -3.15, -1.61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -6.64, 0.81, -11.82, -1.34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.17, -0.17 ], - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.8666, - "vertices": [ 10.69, 4.05, 3.66, 1.85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08, 0.38, 0.08, 0.38, 0.08, 0, 0, 2.69, -0.22, 3.77, 0.11, 3.68, 1.55, 2.49, 1.65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.45, -3.91, 9.19, -1.66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.38, 0.08 ], - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1 } - ] - }, - "left foot": { - "left foot": [ - { - "time": 0, - "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] - }, - { "time": 0.1333 }, - { - "time": 0.2333, - "offset": 8, - "vertices": [ -3.96, -2.34, -5.8, -12.47, -2.23, -12.99, 2.02, -9.1, 0, 0, 0, 0, 0, 0, -1.35, -5.28 ] - }, - { - "time": 0.3666, - "offset": 8, - "vertices": [ 0.66, 0.33, 0.33, 2.69, -0.48, 2.54, -1.13, 1.38, 0, 0, 0, 0, 0, 0, -0.11, 0.79 ] - }, - { "time": 0.5, "curve": "stepped" }, - { "time": 0.6333 }, - { - "time": 0.7333, - "offset": 8, - "vertices": [ -2.97, 9.4, -6.91, 19.92, -10.55, 18.41, -12.37, 12.38, -4.72, 6.3, 0, 0, -1.48, 4.88, -7.06, 10.7 ] - }, - { - "time": 0.8333, - "offset": 6, - "vertices": [ 1.05, 1.56, -2.52, 7.99, -5.52, 17.14, -8.93, 15.79, -10.73, 10.22, -4.23, 5.36, 0, 0, 0, 0, -5.83, 8.55 ] - }, - { - "time": 1, - "offset": 8, - "vertices": [ 3.69, 2.37, -7.16, 18.79, -12.78, 14.77, -12.75, 6.5, -3.13, 1.98, -0.44, 0.36, 0, 0, -3.8, 2.98 ] - } - ] - }, - "pelvis": { - "pelvis": [ - { "time": 0 }, - { - "time": 0.1333, - "offset": 6, - "vertices": [ -0.68, -4.13 ] - }, - { - "time": 0.3333, - "offset": 6, - "vertices": [ -1.04, -3.1 ] - }, - { - "time": 0.7, - "offset": 6, - "vertices": [ -1.42, -6.3 ] - }, - { - "time": 0.8666, - "offset": 6, - "vertices": [ -1.13, -1.79 ] - }, - { "time": 1 } - ] - }, - "right foot": { - "right foot": [ - { "time": 0 }, - { - "time": 0.1333, - "offset": 2, - "vertices": [ -2.81, 2.63, -2.35, 3.89, -1.99, 4.86, -0.93, 5.57, -0.48, 5.09, -0.34, 3.42, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.31, 1.91, -1.32, 3.65 ] - }, - { - "time": 0.2333, - "offset": 2, - "vertices": [ -6.39, 6.41, -7.74, 8.27, -7.02, 11.35, -4.03, 13.93, -2.5, 12.62, -1.46, 7.58, -0.17, 1.36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.84, 2.61, -4.53, 7.92 ] - }, - { - "time": 0.3, - "offset": 2, - "vertices": [ -8.27, 6.68, -9.29, 10.13, -8.62, 14.71, -4.58, 18.81, -2.2, 17.1, -0.07, 9.9, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.94, 2.38, -4.59, 10.01 ] - }, - { - "time": 0.3666, - "offset": 2, - "vertices": [ -10.47, 9.44, -13.36, 12.4, -14.32, 16.94, -9.24, 23.55, -5.51, 21.51, -1.19, 11.53, 2.54, 1.01, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -4.14, 2.29, -6.63, 11.37 ] - }, - { - "time": 0.5, - "offset": 2, - "vertices": [ -5.42, 4.36, -10.59, 7.04, -11.64, 11.55, -6.19, 20.12, -1.45, 18.05, 4.86, 6.41, 2.81, 0.27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.96, 4.94 ] - }, - { "time": 0.6333 }, - { - "time": 0.7333, - "offset": 4, - "vertices": [ 1.31, -6.84, -0.87, -12.54, -5.98, -14.08, -7.15, -11.63, -5.67, -4.83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2.06, -6.93 ] - }, - { - "time": 0.8, - "offset": 4, - "vertices": [ 0.65, -3.42, -0.43, -6.27, -2.99, -7.04, -3.57, -5.81, -2.83, -2.41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.79, -1.28, 0, 0, 0, 0, -1.03, -3.46 ] - }, - { "time": 0.8666 } - ] - }, - "right hand": { - "right hand": [ - { - "time": 0, - "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] - }, - { "time": 0.5 }, - { - "time": 1, - "offset": 4, - "vertices": [ -1.48, 0.34, 0, 0, 1.31, 0.08, 1.6, 0.09, 0.13, 0.15, 0, 0, 0, 0, -0.72, -0.04 ] - } - ] - }, - "right lower leg": { - "right lower leg": [ - { "time": 0 }, - { - "time": 0.6, - "offset": 6, - "vertices": [ 1.8, -1.56 ] - }, - { "time": 1 } - ] - }, - "right upper leg": { - "right upper leg": [ - { - "time": 0, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] - }, - { "time": 0.3333 }, - { - "time": 0.8666, - "offset": 14, - "vertices": [ 0.13, -2.35, -1.33, -5.99, -1.35, -4.43 ] - }, - { - "time": 1, - "vertices": [ -6.03, -1.46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.34, -1.93, -1.86, -5.05, -2.5, -3.09 ] - } - ] - }, - "torso": { - "torso": [ - { - "time": 0, - "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] - }, - { - "time": 0.1333, - "offset": 14, - "vertices": [ 1.31, -0.59, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] - }, - { - "time": 0.3, - "offset": 14, - "vertices": [ 6.03, -3.13, 7.55, -1.38, 6.79, 0.31, 4.23, 1.14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.07, -5.16, 0, 0, 4, 0.27, 0, 0, 0, 0, 3.43, -3.52 ] - }, - { - "time": 0.5, - "offset": 14, - "vertices": [ 2.25, -0.87, 2.57, -0.56, 3.17, -0.57, 1.48, 0.99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3.22, -4.43, 0, 0, 1.48, 0.01, 0, 0, 0, 0, 0.31, -3.28, -1.53, 0.17 ] - }, - { - "time": 0.6333, - "offset": 14, - "vertices": [ 0.75, -1.51, -0.97, -1.62, 0.74, -0.61, -1.44, 1.97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.65, -3.95, 0, 0, -1.46, -0.31, 0, 0, 0, 0, -3.31, -3.55, -2.56, 0.29 ] - }, - { - "time": 0.8666, - "offset": 14, - "vertices": [ 0.62, -1.26, 0.38, -2.2, 3.25, -0.5, 2.41, 2.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.66, -3.1, 0, 0, 2.3, -1.15, 0, 0, 0, 0, -0.07, -3.63, -0.93, 0.1 ] - }, - { - "time": 1, - "offset": 14, - "vertices": [ -1.48, -0.24, -2.72, -2.15, -0.51, -3.39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.09, -2.61, 0, 0, 0.57, -1.24, 0, 0, 0, 0, -2.11, -3.29 ] - } - ] - }, - "undie straps": { - "undie straps": [ - { - "time": 0, - "offset": 2, - "vertices": [ -1.77, 0.54, -0.96, -1.03, -0.39, -0.24, -1.77, 0.54 ] - }, - { - "time": 0.1333, - "offset": 2, - "vertices": [ -2.25, -1.03, -1.49, -4.23, -0.74, -2.84, -1.9, 0.54 ] - }, - { - "time": 0.3333, - "offset": 2, - "vertices": [ -2.37, -0.05, -0.49, 0.19, -0.9, 1.16, -1.6, 2.7, 0.96, 0.8 ] - }, - { - "time": 0.7, - "offset": 2, - "vertices": [ -0.91, -2.76, -0.62, -3.63, -0.84, -2.26, -2.56, 0.52 ] - }, - { - "time": 0.8666, - "offset": 2, - "vertices": [ -2.56, 0.52, -1.58, 0.32, -1.38, 0.32, -2.56, 0.52 ] - }, - { - "time": 1, - "offset": 2, - "vertices": [ -1.77, 0.54, -0.8, 0.53, -0.8, 0.53, -1.77, 0.54 ] - } - ] - }, - "undies": { - "undies": [ - { - "time": 0, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] - }, - { - "time": 0.1333, - "vertices": [ 0.72, 0.43, 7.2, -0.16, 1.37, 0, 1.37, 0, 1.37, 0, 1.25, 0.04, -0.99, -2.95, -1.37, -3.07, 1.37, 0, 0.35, -0.29, 2.99, -0.07, 3.9, -0.14 ] - }, - { - "time": 0.3333, - "vertices": [ 1.16, 0, 2.1, -0.23, 0, 0, 0, 0, 0, 0, 2.24, -0.24, -0.43, 0.6, -1.55, 0.48 ] - }, - { - "time": 0.5333, - "vertices": [ 1.16, 0, -0.23, -0.93, -2.92, 0.35, 0, 0, 0, 0, 0.49, -0.24, -0.64, -2.07, -0.64, -2.07 ] - }, - { - "time": 0.7, - "vertices": [ 1.86, -0.11, 4.66, -0.09, -1.76, 0.21, 0, 0, -0.56, 0.32, -1.13, -1.15, -2.19, -3.47, -1.29, -3.47, 0, 0, 0, 0, 1.58, -0.04, 2.65, 0.16 ] - }, - { - "time": 0.8333, - "vertices": [ 2.41, -0.2, 8.58, 0.58, -0.83, 0.1, 0, 0, -1.02, 0.59, -2.44, -1.87, -1.62, 0, 0, 0, 0, 0, 0, 0, 2.85, -0.08, 4.78, 0.3 ] - }, - { - "time": 0.8666, - "vertices": [ 2.01, -0.02, 8.98, 0.44, -0.2, 0.08, 0.45, 0, -0.35, 0.47, -1.84, -1.44, -0.79, 1.26, 0.53, 1.23, 0.45, 0, 0.11, -0.09, 3.28, -0.09, 5.13, 0.19 ] - }, - { - "time": 1, - "vertices": [ 0.43, 0.72, 10.6, -0.11, 2.29, 0, 2.29, 0, 2.29, 0, 0.58, 0.24, -2.4, -0.65, -2.27, -0.77, 2.29, 0, 0.58, -0.48, 4.98, -0.11, 6.5, -0.23 ] - } - ] - } - } - } - } -} -} \ No newline at end of file diff --git a/spine-cocos2dx/3/example/Resources/common/spineboy.json b/spine-cocos2dx/3/example/Resources/common/spineboy.json deleted file mode 100644 index 1ffa7aad5..000000000 --- a/spine-cocos2dx/3/example/Resources/common/spineboy.json +++ /dev/null @@ -1,2412 +0,0 @@ -{ -"bones": [ - { "name": "hip", "y": 247.47 }, - { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, - { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, - { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, - { - "name": "front_shin", - "parent": "front_thigh", - "length": 128.76, - "x": 78.69, - "y": 1.6, - "rotation": -2.21, - "inheritScale": false, - "color": "00ff04ff" - }, - { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, - { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, - { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, - { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, - { - "name": "front_bracer", - "parent": "front_upper_arm", - "length": 40.57, - "x": 68.8, - "y": -0.68, - "rotation": 18.29, - "color": "00ff04ff" - }, - { "name": "front_foot", "parent": "front_shin", "length": 91.34, "x": 128.75, "y": -0.33, "rotation": 77.9, "color": "00ff04ff" }, - { "name": "head", "parent": "neck", "length": 263.57, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, - { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, - { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "x": 121.45, "y": -0.75, "rotation": 69.3, "color": "ff000dff" }, - { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, - { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, - { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "color": "ff000dff" } -], -"slots": [ - { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, - { "name": "rear_bracer", "bone": "rear_bracer", "attachment": "rear_bracer" }, - { "name": "gun", "bone": "gun", "attachment": "gun" }, - { "name": "rear_foot", "bone": "rear_foot", "attachment": "rear_foot" }, - { "name": "rear_thigh", "bone": "rear_thigh", "attachment": "rear_thigh" }, - { "name": "rear_shin", "bone": "rear_shin", "attachment": "rear_shin" }, - { "name": "neck", "bone": "neck", "attachment": "neck" }, - { "name": "torso", "bone": "torso", "attachment": "torso" }, - { "name": "front_upper_arm", "bone": "front_upper_arm", "attachment": "front_upper_arm" }, - { "name": "head", "bone": "head", "attachment": "head" }, - { "name": "eye", "bone": "head", "attachment": "eye_indifferent" }, - { "name": "front_thigh", "bone": "front_thigh", "attachment": "front_thigh" }, - { "name": "front_foot", "bone": "front_foot", "attachment": "front_foot" }, - { "name": "front_shin", "bone": "front_shin", "attachment": "front_shin" }, - { "name": "mouth", "bone": "head", "attachment": "mouth_smile" }, - { "name": "goggles", "bone": "head", "attachment": "goggles" }, - { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, - { "name": "front_fist", "bone": "front_fist", "attachment": "front_fist_closed" }, - { "name": "muzzle", "bone": "gunTip", "additive": true } -], -"skins": { - "default": { - "eye": { - "eye_indifferent": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 }, - "eye_surprised": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 } - }, - "front_bracer": { - "front_bracer": { "x": 12.03, "y": -1.67, "rotation": 79.59, "width": 58, "height": 80 } - }, - "front_fist": { - "front_fist_closed": { "x": 35.49, "y": 6, "rotation": 67.16, "width": 75, "height": 82 }, - "front_fist_open": { "x": 39.56, "y": 7.76, "rotation": 67.16, "width": 86, "height": 87 } - }, - "front_foot": { - "front_foot": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 126, "height": 69 }, - "front_foot_bend1": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 128, "height": 70 }, - "front_foot_bend2": { "x": 16.07, "y": 13.83, "rotation": 18.68, "width": 108, "height": 93 } - }, - "front_shin": { - "front_shin": { "x": 55.11, "y": -3.54, "rotation": 96.59, "width": 82, "height": 184 } - }, - "front_thigh": { - "front_thigh": { "x": 42.47, "y": 4.44, "rotation": 84.86, "width": 48, "height": 112 } - }, - "front_upper_arm": { - "front_upper_arm": { "x": 28.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } - }, - "goggles": { - "goggles": { "x": 97.07, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 } - }, - "gun": { - "gun": { "x": 77.3, "y": 16.4, "rotation": 60.82, "width": 210, "height": 203 } - }, - "head": { - "head": { "x": 128.95, "y": 0.29, "rotation": -70.63, "width": 271, "height": 298 } - }, - "mouth": { - "mouth_grind": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, - "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, - "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 } - }, - "muzzle": { - "muzzle": { "x": 18.25, "y": 5.44, "rotation": 0.15, "width": 462, "height": 400 } - }, - "neck": { - "neck": { "x": 9.76, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 } - }, - "rear_bracer": { - "rear_bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 } - }, - "rear_foot": { - "rear_foot": { "x": 31.51, "y": 3.57, "rotation": 23.07, "width": 113, "height": 60 }, - "rear_foot_bend1": { "x": 34.39, "y": 4.8, "rotation": 23.07, "width": 117, "height": 66 }, - "rear_foot_bend2": { "x": 30.38, "y": 12.62, "rotation": 23.07, "width": 103, "height": 83 } - }, - "rear_shin": { - "rear_shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 } - }, - "rear_thigh": { - "rear_thigh": { "x": 33.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } - }, - "rear_upper_arm": { - "rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 } - }, - "torso": { - "torso": { "x": 63.61, "y": 7.12, "rotation": -94.53, "width": 98, "height": 180 } - } - } -}, -"events": { - "footstep": {}, - "headAttach": { "int": 3, "float": 4 }, - "headBehind": { "int": 5, "float": 6, "string": "setup" }, - "headPop": { "int": 1, "float": 2 } -}, -"animations": { - "death": { - "slots": { - "eye": { - "attachment": [ - { "time": 0, "name": "eye_surprised" }, - { "time": 0.4666, "name": "eye_indifferent" }, - { "time": 2.2333, "name": "eye_surprised" }, - { "time": 4.5333, "name": "eye_indifferent" } - ] - }, - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_oooo" }, - { "time": 2.2333, "name": "mouth_grind" }, - { "time": 4.5333, "name": "mouth_oooo" } - ] - } - }, - "bones": { - "head": { - "rotate": [ - { "time": 0, "angle": -2.82 }, - { "time": 0.1333, "angle": -28.74 }, - { "time": 0.2333, "angle": 11.42 }, - { "time": 0.3333, "angle": -50.24 }, - { "time": 0.4, "angle": -72.66, "curve": "stepped" }, - { "time": 0.4333, "angle": -72.66 }, - { "time": 0.5, "angle": -20.24 }, - { "time": 0.5666, "angle": -85.28, "curve": "stepped" }, - { "time": 0.9333, "angle": -85.28, "curve": "stepped" }, - { "time": 2.2333, "angle": -85.28 }, - { "time": 2.5, "angle": -51.96, "curve": "stepped" }, - { "time": 4.5333, "angle": -51.96 }, - { "time": 4.6666, "angle": -85.28 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": -2.82 }, - { "time": 0.1333, "angle": 12.35 }, - { "time": 0.2333, "angle": 29.89 }, - { "time": 0.3, "angle": 70.36 }, - { "time": 0.4, "angle": -10.22, "curve": "stepped" }, - { "time": 0.4333, "angle": -10.22 }, - { "time": 0.5, "angle": 2.92 }, - { "time": 0.5666, "angle": 47.94, "curve": "stepped" }, - { "time": 2.2333, "angle": 47.94 }, - { "time": 2.5, "angle": 18.5, "curve": "stepped" }, - { "time": 4.5333, "angle": 18.5 }, - { "time": 4.6666, "angle": 47.94 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -8.61 }, - { "time": 0.1333, "angle": 28.19 }, - { "time": 0.2666, "angle": -280.19 }, - { "time": 0.4, "angle": -237.22, "curve": "stepped" }, - { "time": 0.4333, "angle": -237.22 }, - { "time": 0.5, "angle": 76.03, "curve": "stepped" }, - { "time": 0.8, "angle": 76.03, "curve": "stepped" }, - { "time": 0.9333, "angle": 76.03, "curve": "stepped" }, - { "time": 2.2333, "angle": 76.03 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.9333, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 2.2333, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -38.85 }, - { "time": 0.1333, "angle": -299.58 }, - { "time": 0.2666, "angle": -244.74 }, - { "time": 0.4, "angle": -292.35 }, - { "time": 0.4333, "angle": -315.84 }, - { "time": 0.5, "angle": -347.94 }, - { "time": 0.7, "angle": -347.33, "curve": "stepped" }, - { "time": 2.2333, "angle": -347.33 }, - { "time": 2.7, "angle": -290.68 }, - { "time": 2.7666, "angle": -285.1 }, - { "time": 4.6666, "angle": -290.68 }, - { "time": 4.8, "angle": 8.61 }, - { "time": 4.8666, "angle": 10.94 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": -44.69 }, - { "time": 0.1333, "angle": 112.26 }, - { "time": 0.2666, "angle": 129.07 }, - { "time": 0.4, "angle": 134.94, "curve": "stepped" }, - { "time": 0.4333, "angle": 134.94 }, - { "time": 0.5666, "angle": 172.6, "curve": "stepped" }, - { "time": 0.9333, "angle": 172.6, "curve": "stepped" }, - { "time": 2.2333, "angle": 172.6 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 21.88 }, - { "time": 0.1333, "angle": 11.48 }, - { "time": 0.2666, "angle": -18.81 }, - { "time": 0.4, "angle": -18.92 }, - { "time": 0.4333, "angle": -18.28 }, - { "time": 0.5, "angle": 60.61 }, - { "time": 0.7, "angle": -18.87, "curve": "stepped" }, - { "time": 2.2333, "angle": -18.87 }, - { "time": 2.7, "angle": -1.95, "curve": "stepped" }, - { "time": 4.6666, "angle": -1.95 }, - { "time": 4.8, "angle": 34.55 }, - { "time": 4.9333, "angle": -18.74 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -2.33 }, - { "time": 0.2666, "angle": 26.34 }, - { "time": 0.7, "angle": -6.07, "curve": "stepped" }, - { "time": 2.2333, "angle": -6.07 }, - { "time": 2.7, "angle": 5.72, "curve": "stepped" }, - { "time": 4.6666, "angle": 5.72 }, - { "time": 4.8666, "angle": -6.52 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 10.36 }, - { "time": 0.1333, "angle": -23.12 }, - { "time": 0.2666, "angle": -23.11 }, - { "time": 0.4, "angle": -23.16, "curve": "stepped" }, - { "time": 0.4333, "angle": -23.16 }, - { "time": 0.5666, "angle": -23.2, "curve": "stepped" }, - { "time": 0.9333, "angle": -23.2, "curve": "stepped" }, - { "time": 2.2333, "angle": -23.2 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": -2.78 }, - { "time": 0.1333, "angle": -24.58 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.9333, "angle": 0, "curve": "stepped" }, - { "time": 2.2333, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.2, "x": 50.34, "y": 151.73 }, - { "time": 0.4, "x": 5.16, "y": -119.64, "curve": "stepped" }, - { "time": 0.4333, "x": 5.16, "y": -119.64 }, - { "time": 0.5, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 0.8, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 0.9333, "x": 50.34, "y": -205.18, "curve": "stepped" }, - { "time": 2.2333, "x": 50.34, "y": -205.18 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_thigh": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 8.47 }, - { "time": 0.2666, "angle": 115.95 }, - { "time": 0.4, "angle": 180.66, "curve": "stepped" }, - { "time": 0.4333, "angle": 180.66 }, - { "time": 0.5, "angle": 155.22 }, - { "time": 0.6, "angle": 97.73 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": -27.37 }, - { "time": 0.2666, "angle": -35.1 }, - { "time": 0.4, "angle": -37.72, "curve": "stepped" }, - { "time": 0.4333, "angle": -37.72 }, - { "time": 0.5, "angle": -40.06 }, - { "time": 0.6, "angle": 2.76 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 70.45 }, - { "time": 0.2666, "angle": 155.34 }, - { "time": 0.4, "angle": 214.31, "curve": "stepped" }, - { "time": 0.4333, "angle": 214.31 }, - { "time": 0.5, "angle": 169.67 }, - { "time": 0.8, "angle": 83.27 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 18.93 }, - { "time": 0.2666, "angle": -21.04 }, - { "time": 0.4, "angle": -29.93, "curve": "stepped" }, - { "time": 0.4333, "angle": -29.93 }, - { "time": 0.5, "angle": -16.79 }, - { "time": 0.8, "angle": 7.77 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": -11.62 }, - { "time": 0.4, "angle": -45.59, "curve": "stepped" }, - { "time": 0.4333, "angle": -45.59 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.4, "angle": -48.75, "curve": "stepped" }, - { "time": 0.4333, "angle": -48.75 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "gunTip": { - "rotate": [ - { "time": 0, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - } - } - }, - "hit": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0.1666, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_grind" }, - { "time": 0.3333, "name": "mouth_smile" } - ] - } - }, - "bones": { - "torso": { - "rotate": [ - { "time": 0, "angle": 56.42 }, - { "time": 0.3333, "angle": 8.89 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 35.38 }, - { "time": 0.2333, "angle": 24.94 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 10.21 }, - { "time": 0.3333, "angle": -41.3 } - ] - }, - "front_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": -310.92, - "curve": [ 0.38, 0.53, 0.744, 1 ] - }, - { "time": 0.3333, "angle": -112.59 } - ], - "translate": [ - { "time": 0, "x": 7.23, "y": -13.13 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 36.99 }, - { "time": 0.3333, "angle": -28.64 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": 13.59 }, - { "time": 0.3333, "angle": 7.55 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": 271.02, - "curve": [ 0.342, 0.36, 0.68, 0.71 ] - }, - { "time": 0.3333, "angle": -15.84 } - ], - "translate": [ - { "time": 0.3333, "x": -0.09, "y": -0.46 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.3333, "angle": 40.03 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 14.98 }, - { "time": 0.3333, "angle": 39.75 } - ] - }, - "hip": { - "translate": [ - { "time": 0, "x": -75.54, "y": -78.03 }, - { "time": 0.2333, "x": -36.48, "y": 12.42 }, - { "time": 0.3333, "x": -36.48, "y": -2.99 } - ] - }, - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 90.94, - "curve": [ 0.227, 0.26, 0.432, 1 ] - }, - { "time": 0.3333, "angle": 32.02 } - ], - "translate": [ - { "time": 0, "x": 7.21, "y": -4 } - ] - }, - "rear_thigh": { - "rotate": [ - { - "time": 0, - "angle": 40.51, - "curve": [ 0.295, 0.3, 0.59, 0.99 ] - }, - { "time": 0.3333, "angle": 90.76 } - ], - "translate": [ - { "time": 0, "x": -1.96, "y": -0.32 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": -96.62 }, - { "time": 0.3333, "angle": -15.13 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": 7.99 }, - { "time": 0.3333, "angle": -67.54 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 5.4 }, - { "time": 0.3333, "angle": -16.26 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 2.67 }, - { "time": 0.3333, "angle": -10.31 } - ] - } - } - }, - "idle": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_open" }, - { "time": 1.6666, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_smile" }, - { "time": 1.6666, "name": "mouth_smile" } - ] - } - }, - "bones": { - "torso": { - "rotate": [ - { - "time": 0, - "angle": -5.61, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.8333, - "angle": -9.65, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -5.61 } - ], - "translate": [ - { "time": 0, "x": -6.49, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": -59.85, - "curve": [ 0.492, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -54.31, - "curve": [ 0.324, 0.11, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -59.85 } - ], - "translate": [ - { "time": 0, "x": -7.12, "y": -8.23 }, - { "time": 0.6666, "x": -6.32, "y": -8.3 }, - { "time": 1.6666, "x": -7.12, "y": -8.23 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { - "time": 0, - "angle": 62.41, - "curve": [ 0.504, 0.02, 0.75, 1 ] - }, - { - "time": 0.7333, - "angle": 43.83, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": 62.41 } - ], - "translate": [ - { "time": 0, "x": -1.83, "y": -16.78 }, - { "time": 0.6666, "x": 0.34, "y": -15.23 }, - { "time": 1.6666, "x": -1.83, "y": -16.78 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.6666, "angle": 2.39 }, - { "time": 1.6666, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": -1.88, "y": -4.76, "curve": "stepped" }, - { "time": 1.6666, "x": -1.88, "y": -4.76 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 0.64, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": -4.34, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": 0.64 } - ], - "translate": [ - { "time": 0, "x": -13.39, "y": 6.69, "curve": "stepped" }, - { "time": 1.6666, "x": -13.39, "y": 6.69 } - ], - "scale": [ - { - "time": 0, - "x": 0.896, - "y": 1, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "x": 0.825, - "y": 1, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "x": 0.896, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": -19.28, "curve": "stepped" }, - { "time": 1.6666, "angle": -19.28 } - ], - "scale": [ - { - "time": 0, - "x": 1, - "y": 1, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "x": 0.994, - "y": 1, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { - "time": 0, - "angle": 30.5, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": 40.15, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": 30.5 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { - "time": 0, - "angle": -23.83, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": -43.77, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": -23.83 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { - "time": 0, - "angle": 5.13, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": 10.04, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": 5.13 } - ], - "scale": [ - { "time": 0, "x": 0.755, "y": 1.309, "curve": "stepped" }, - { "time": 1.6666, "x": 0.755, "y": 1.309 } - ] - }, - "hip": { - "translate": [ - { - "time": 0, - "x": -6.63, - "y": -23.01, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "x": 6.27, - "y": -35, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "x": -6.63, "y": -23.01 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { - "time": 0, - "angle": -7.34, - "curve": [ 0.235, 0, 0.558, 0.99 ] - }, - { - "time": 0.6666, - "angle": 3.85, - "curve": [ 0.594, 0, 0.653, 1 ] - }, - { "time": 1.6666, "angle": -7.34 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { - "time": 0, - "angle": -17.16, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": 12.52, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -17.16 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { - "time": 0, - "angle": -5.51, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -3.12, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -5.51 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { - "time": 0, - "angle": 45.46, - "curve": [ 0.492, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": 41.33, - "curve": [ 0.32, 0.1, 0.736, 0.91 ] - }, - { "time": 1.6666, "angle": 45.46 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { - "time": 0, - "angle": 0, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -15.59, - "curve": [ 0.732, 0, 0.769, 0.99 ] - }, - { "time": 1.6666, "angle": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { - "time": 0, - "angle": -6.84, - "curve": [ 0.492, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -14.63, - "curve": [ 0.324, 0.11, 0.75, 1 ] - }, - { "time": 1.6666, "angle": -6.84 } - ], - "scale": [ - { - "time": 0, - "x": 1, - "y": 1, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "x": 0.689, - "y": 1.1, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 1.6666, "x": 1, "y": 1 } - ] - } - } - }, - "jump": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_open" }, - { "time": 0.2, "name": "front_fist_closed" }, - { "time": 0.6666, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_grind" } - ] - }, - "torso": { - "attachment": [ - { "time": 0, "name": "torso" } - ] - } - }, - "bones": { - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 91.53, - "curve": [ 0.278, 0.46, 0.763, 1 ] - }, - { - "time": 0.2, - "angle": -35.83, - "curve": [ 0.761, 0, 0.75, 1 ] - }, - { "time": 0.4333, "angle": 127.74 }, - { - "time": 0.7333, - "angle": 48.18, - "curve": [ 0.227, 0.26, 0.432, 1 ] - }, - { "time": 0.8333, "angle": 25.35 }, - { "time": 0.9333, "angle": 45.37 }, - { "time": 1.0333, "angle": 38.12 }, - { "time": 1.1333, "angle": 25.35 }, - { "time": 1.3333, "angle": 91.53 } - ], - "translate": [ - { "time": 0, "x": -2.56, "y": 5.77 }, - { "time": 0.4333, "x": 8.3, "y": 7.98 }, - { "time": 0.7333, "x": 7.21, "y": -4 }, - { "time": 1.3333, "x": -2.56, "y": 5.77 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -42.63 }, - { "time": 0.2, "angle": -5.74 }, - { "time": 0.4333, "angle": -50.76 }, - { "time": 0.7333, "angle": 1.89 }, - { "time": 0.8333, "angle": 11.58 }, - { "time": 0.9666, "angle": -1.89 }, - { "time": 1.1333, "angle": 11.58 }, - { "time": 1.3333, "angle": -42.63 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": -26.32 }, - { "time": 0.2, "angle": 121.44 }, - { "time": 0.4333, "angle": 70.54 }, - { - "time": 0.7333, - "angle": 79.89, - "curve": [ 0.295, 0.3, 0.59, 0.99 ] - }, - { "time": 0.8333, "angle": 99.12 }, - { "time": 0.9333, "angle": 74.05 }, - { "time": 1.0333, "angle": 98.04 }, - { "time": 1.1333, "angle": 99.12 }, - { "time": 1.3333, "angle": -26.32 } - ], - "translate": [ - { "time": 0, "x": -0.56, "y": -0.32 }, - { "time": 0.4333, "x": -8.5, "y": 10.58 }, - { "time": 0.7333, "x": -1.96, "y": -0.32 }, - { "time": 1.3333, "x": -0.56, "y": -0.32 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": -78.69 }, - { "time": 0.4333, "angle": -55.56 }, - { "time": 0.7333, "angle": -62.84 }, - { "time": 0.8333, "angle": -80.74 }, - { "time": 0.9333, "angle": -41.12 }, - { "time": 1.0333, "angle": -77.4 }, - { "time": 1.1333, "angle": -80.74 }, - { "time": 1.3333, "angle": -78.69 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.7333, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -22.61 }, - { "time": 0.2, "angle": -246.68 }, - { - "time": 0.6, - "angle": 11.28, - "curve": [ 0.246, 0, 0.633, 0.53 ] - }, - { - "time": 0.7333, - "angle": -57.45, - "curve": [ 0.38, 0.53, 0.744, 1 ] - }, - { "time": 0.8666, "angle": -112.59 }, - { "time": 0.9333, "angle": -102.17 }, - { "time": 1.0333, "angle": -108.61 }, - { "time": 1.1333, "angle": -112.59 }, - { "time": 1.3333, "angle": -22.61 } - ], - "translate": [ - { "time": 0, "x": 6.08, "y": 7.15 }, - { "time": 0.2, "x": 7.23, "y": -13.13, "curve": "stepped" }, - { "time": 0.7333, "x": 7.23, "y": -13.13 }, - { "time": 1.3333, "x": 6.08, "y": 7.15 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 66.46 }, - { "time": 0.2, "angle": 42.39 }, - { "time": 0.4333, "angle": 26.06 }, - { "time": 0.7333, "angle": 13.28 }, - { "time": 0.8666, "angle": -28.64 }, - { "time": 0.9333, "angle": -22.31 }, - { "time": 1.0333, "angle": -35.39 }, - { "time": 1.1333, "angle": -28.64 }, - { "time": 1.3333, "angle": 66.46 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -28.43 }, - { "time": 0.4333, "angle": -45.6 }, - { "time": 0.7333, "angle": -53.66 }, - { "time": 0.8666, "angle": 7.55 }, - { "time": 0.9333, "angle": 31.15 }, - { "time": 1.0333, "angle": -32.58 }, - { "time": 1.1333, "angle": 7.55 }, - { "time": 1.3333, "angle": -28.43 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 39.68 }, - { "time": 0.2, "angle": 276.57 }, - { "time": 0.3, "angle": 17.73 }, - { "time": 0.4333, "angle": 83.38 }, - { - "time": 0.6, - "angle": -4.71, - "curve": [ 0.246, 0, 0.633, 0.53 ] - }, - { - "time": 0.7333, - "angle": -69.63, - "curve": [ 0.342, 0.36, 0.68, 0.71 ] - }, - { - "time": 0.7666, - "angle": 321.47, - "curve": [ 0.333, 0.33, 0.667, 0.66 ] - }, - { - "time": 0.8, - "angle": 33.7, - "curve": [ 0.358, 0.64, 0.693, 1 ] - }, - { "time": 0.8666, "angle": 34.56 }, - { "time": 1.0333, "angle": 71.96 }, - { "time": 1.1333, "angle": 34.56 }, - { "time": 1.3333, "angle": 39.68 } - ], - "translate": [ - { "time": 0, "x": -3.1, "y": -4.86 }, - { "time": 0.2, "x": 23.33, "y": 49.07 }, - { "time": 0.4333, "x": 20.78, "y": 40.21 }, - { "time": 1.3333, "x": -3.1, "y": -4.86 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 29.66 }, - { "time": 0.2, "angle": 45.06 }, - { "time": 0.4333, "angle": -4.34 }, - { "time": 0.7666, "angle": 61.68 }, - { "time": 0.8, "angle": 82.59 }, - { "time": 0.8666, "angle": 80.06 }, - { "time": 1.0333, "angle": 57.56 }, - { "time": 1.1333, "angle": 80.06 }, - { "time": 1.3333, "angle": 29.66 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 24.9 }, - { "time": 0.2, "angle": 16.31 }, - { "time": 0.4333, "angle": 7.44 }, - { "time": 0.7333, "angle": -20.35 }, - { "time": 0.8333, "angle": -0.69, "curve": "stepped" }, - { "time": 1.1333, "angle": -0.69 }, - { "time": 1.3333, "angle": 24.9 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 24.92 }, - { "time": 0.2, "angle": 10.36 }, - { "time": 0.4333, "angle": 28.65 }, - { "time": 0.7333, "angle": -2.65 }, - { "time": 0.8333, "angle": -28.94, "curve": "stepped" }, - { "time": 1.1333, "angle": -28.94 }, - { "time": 1.3333, "angle": 24.92 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0 } - ], - "translate": [ - { - "time": 0, - "x": -34.51, - "y": -78.62, - "curve": [ 0.232, 1, 0.75, 1 ] - }, - { - "time": 0.2, - "x": -34.51, - "y": 182.5, - "curve": [ 0.232, 0.48, 0.598, 0.79 ] - }, - { - "time": 0.7666, - "x": -34.51, - "y": 596.22, - "curve": [ 0.329, 0.17, 0.66, 0.21 ] - }, - { "time": 1.1333, "x": -34.51, "y": 2.49 }, - { "time": 1.3333, "x": -34.51, "y": -78.62 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { - "time": 0, - "angle": -90.62, - "curve": [ 0.416, 0.54, 0.743, 1 ] - }, - { - "time": 0.2, - "angle": -10.52, - "curve": [ 0.644, 0, 0.75, 1 ] - }, - { "time": 0.4333, "angle": -127.72 }, - { "time": 0.7333, "angle": -19.91 }, - { "time": 0.8333, "angle": -5.16 }, - { "time": 0.9333, "angle": -35.06 }, - { "time": 1.0333, "angle": -43.97 }, - { "time": 1.1333, "angle": -5.16 }, - { "time": 1.3333, "angle": -90.62 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": -0.79 }, - { "time": 0.0333, "angle": 16.27 }, - { "time": 0.0666, "angle": 23.52 }, - { "time": 0.1, "angle": 21.02 }, - { "time": 0.1333, "angle": 10.92 }, - { "time": 0.2, "angle": -38.45 }, - { "time": 0.4333, "angle": 6.62 }, - { "time": 0.7333, "angle": -11.51 }, - { "time": 1.0333, "angle": -22.91 }, - { "time": 1.3333, "angle": -0.79 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": -12.77 }, - { "time": 0.2, "angle": 17.05 }, - { "time": 0.4333, "angle": 19.45 }, - { "time": 0.7333, "angle": 2.67 }, - { "time": 1.0333, "angle": -28.49 }, - { "time": 1.3333, "angle": -12.77 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 6.18 }, - { "time": 0.2, "angle": 30.81 }, - { "time": 0.4333, "angle": 13.25 }, - { "time": 0.7333, "angle": 14.98 }, - { "time": 0.7666, "angle": 25.64 }, - { "time": 0.8, "angle": 20.62 }, - { "time": 0.8666, "angle": 64.52 }, - { "time": 1.0333, "angle": 8.59 }, - { "time": 1.1333, "angle": 64.52 }, - { "time": 1.3333, "angle": 6.18 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 } - ] - } - } - }, - "run": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_closed" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_grind" } - ] - }, - "torso": { - "attachment": [ - { "time": 0, "name": "torso" } - ] - } - }, - "bones": { - "front_thigh": { - "rotate": [ - { - "time": 0, - "angle": 42.05, - "curve": [ 0.195, 0.86, 0.75, 1 ] - }, - { "time": 0.0666, "angle": 46.07 }, - { "time": 0.1333, "angle": -20.28 }, - { "time": 0.2, "angle": -27.23 }, - { "time": 0.2666, "angle": -47.16 }, - { "time": 0.3333, "angle": -39.79 }, - { "time": 0.4, "angle": -25.86 }, - { "time": 0.4666, "angle": 14.35 }, - { "time": 0.5333, "angle": 55.62 }, - { "time": 0.6, "angle": 69.65 }, - { "time": 0.6666, "angle": 86.4 }, - { "time": 0.7333, "angle": 65.87 }, - { "time": 0.8, "angle": 42.05 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.0333, "x": -5.79, "y": 11.15 }, - { "time": 0.0666, "x": -5.13, "y": 11.55 }, - { "time": 0.1333, "x": -7.7, "y": 8.98 }, - { "time": 0.5333, "x": -1.26, "y": 3.83 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -39.7 }, - { "time": 0.2, "angle": -57.29 }, - { "time": 0.4, "angle": -39.7 }, - { "time": 0.6, "angle": -57.29 }, - { "time": 0.8, "angle": -39.7 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": -56.59 }, - { "time": 0.0666, "angle": -21.57 }, - { "time": 0.1333, "angle": 27.95 }, - { "time": 0.2, "angle": 42.42 }, - { "time": 0.2666, "angle": 62.37 }, - { "time": 0.3333, "angle": 45.42 }, - { "time": 0.4, "angle": 15.67 }, - { "time": 0.4666, "angle": 28.22 }, - { "time": 0.5333, "angle": -38.62 }, - { "time": 0.6, "angle": -53.26 }, - { "time": 0.6666, "angle": -79.31 }, - { "time": 0.7333, "angle": -86.47 }, - { "time": 0.8, "angle": -56.59 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.4, "x": -6.76, "y": -3.86 }, - { "time": 0.4333, "x": -15.85, "y": 7.28 }, - { "time": 0.4666, "x": -13.04, "y": 4.04 }, - { "time": 0.5, "x": -10.24, "y": 7.11 }, - { "time": 0.5333, "x": -9.01, "y": -5.15 }, - { "time": 0.6666, "x": -23.18, "y": -2.57 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": -74 }, - { "time": 0.0666, "angle": -83.38 }, - { "time": 0.1333, "angle": -106.69 }, - { "time": 0.2, "angle": -66.01 }, - { "time": 0.2666, "angle": -55.22 }, - { "time": 0.3333, "angle": -24.8 }, - { - "time": 0.4, - "angle": 18.44, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.4666, "angle": -56.65 }, - { - "time": 0.5333, - "angle": -11.94, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.6666, "angle": -41.26 }, - { "time": 0.7333, "angle": -43.6 }, - { "time": 0.8, "angle": -74 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -89.36 }, - { "time": 0.0666, "angle": -95.67 }, - { "time": 0.1333, "angle": -22 }, - { "time": 0.2, "angle": -316.04 }, - { "time": 0.2666, "angle": -274.94 }, - { "time": 0.3333, "angle": -273.74 }, - { "time": 0.4, "angle": -272.09 }, - { "time": 0.4666, "angle": -264.89 }, - { "time": 0.5333, "angle": -320.09 }, - { "time": 0.6, "angle": -50.83 }, - { "time": 0.6666, "angle": -81.72 }, - { "time": 0.7333, "angle": -83.92 }, - { "time": 0.8, "angle": -89.36 } - ], - "translate": [ - { "time": 0, "x": 6.24, "y": 10.05 }, - { "time": 0.2666, "x": 4.95, "y": -13.13 }, - { "time": 0.6, "x": -2.43, "y": 1.94 }, - { "time": 0.8, "x": 6.24, "y": 10.05 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 33.43 }, - { "time": 0.0666, "angle": 20.53 }, - { "time": 0.1333, "angle": 15.26 }, - { "time": 0.2, "angle": 19.28 }, - { "time": 0.2666, "angle": 22.62 }, - { "time": 0.3333, "angle": 37.29 }, - { "time": 0.4, "angle": 41.53 }, - { "time": 0.4666, "angle": 31.73 }, - { "time": 0.5333, "angle": 67.45 }, - { "time": 0.6666, "angle": 39.77 }, - { "time": 0.7333, "angle": 30.95 }, - { "time": 0.8, "angle": 33.43 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -19.75 }, - { "time": 0.0666, "angle": -37.11 }, - { "time": 0.1333, "angle": -50.79 }, - { "time": 0.2666, "angle": -12.69 }, - { "time": 0.3333, "angle": 3.01 }, - { "time": 0.4333, "angle": 12.05 }, - { "time": 0.5333, "angle": 13.25 }, - { "time": 0.8, "angle": -19.75 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 68.68 }, - { "time": 0.0666, "angle": 73.89 }, - { "time": 0.1333, "angle": -9.64 }, - { "time": 0.2, "angle": 284.27 }, - { "time": 0.2666, "angle": 283.29 }, - { "time": 0.3333, "angle": 278.28 }, - { "time": 0.4, "angle": 271.02 }, - { "time": 0.4666, "angle": 263.2 }, - { "time": 0.5333, "angle": 314.25 }, - { "time": 0.6, "angle": 16.83 }, - { "time": 0.6666, "angle": 70.35 }, - { "time": 0.7333, "angle": 73.53 }, - { "time": 0.8, "angle": 68.68 } - ], - "translate": [ - { "time": 0, "x": -2.57, "y": -8.89 }, - { "time": 0.1333, "x": -4.68, "y": 7.2 }, - { "time": 0.2, "x": 21.73, "y": 51.17 }, - { "time": 0.6, "x": 4.33, "y": 2.05 }, - { "time": 0.8, "x": -2.57, "y": -8.89 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 31.04 }, - { "time": 0.0666, "angle": 28.28 }, - { "time": 0.1333, "angle": 49.36 }, - { "time": 0.2, "angle": 59.37 }, - { "time": 0.2666, "angle": 8.56 }, - { "time": 0.3333, "angle": 9.38 }, - { "time": 0.4, "angle": 11.51 }, - { "time": 0.4666, "angle": 7.22 }, - { "time": 0.5333, "angle": -18.44 }, - { "time": 0.6, "angle": 11.44 }, - { "time": 0.6666, "angle": 9.99 }, - { "time": 0.7333, "angle": 8.28 }, - { "time": 0.8, "angle": 31.04 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 11.03 }, - { "time": 0.2, "angle": 13.58 }, - { "time": 0.4, "angle": 11.03 }, - { "time": 0.6, "angle": 13.58 }, - { "time": 0.8, "angle": 11.03 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 11.03 }, - { "time": 0.1, "angle": 12.34 }, - { "time": 0.2, "angle": 25.55 }, - { "time": 0.4, "angle": 11.03 }, - { "time": 0.5, "angle": 12.34 }, - { "time": 0.6, "angle": 25.55 }, - { "time": 0.8, "angle": 11.03 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": -62.47, "y": -23.1 }, - { - "time": 0.0666, - "x": -62.47, - "y": -38.51, - "curve": [ 0.244, 0.04, 0.75, 1 ] - }, - { - "time": 0.2666, - "x": -62.47, - "y": 22.28, - "curve": [ 0.17, 0.52, 0.75, 1 ] - }, - { "time": 0.4, "x": -62.47, "y": -23.1 }, - { "time": 0.4333, "x": -62.47, "y": -24.59 }, - { - "time": 0.4666, - "x": -62.47, - "y": -43.29, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.6666, "x": -62.47, "y": 22.28 }, - { "time": 0.8, "x": -62.47, "y": -23.1 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { - "time": 0, - "angle": 0, - "curve": [ 0.481, 0.01, 0.75, 1 ] - }, - { "time": 0.0666, "angle": -64.42 }, - { - "time": 0.1333, - "angle": -20.59, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.2666, "angle": -62.51 }, - { "time": 0.3333, "angle": -79.74 }, - { "time": 0.4, "angle": -78.28 }, - { - "time": 0.4666, - "angle": -118.96, - "curve": [ 0.93, 0, 0.952, 0.95 ] - }, - { "time": 0.6, "angle": -88.95 }, - { "time": 0.6666, "angle": -79.09 }, - { "time": 0.7333, "angle": -47.77 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { - "time": 0.0333, - "angle": -21.13, - "curve": [ 0.121, 0.23, 0.75, 1 ] - }, - { "time": 0.0666, "angle": 17.64 }, - { "time": 0.1, "angle": 29.92 }, - { "time": 0.1333, "angle": 16.44 }, - { "time": 0.2, "angle": -29.22 }, - { "time": 0.2666, "angle": -1.61 }, - { "time": 0.3333, "angle": -10.22 }, - { "time": 0.4666, "angle": -15.99 }, - { "time": 0.6, "angle": 9.03 }, - { "time": 0.7333, "angle": 17.32 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.0666, "angle": -12.04 }, - { "time": 0.1333, "angle": -0.87 }, - { "time": 0.2, "angle": 25.81 }, - { "time": 0.2666, "angle": 4.71 }, - { - "time": 0.4, - "angle": 18.09, - "curve": [ 0.281, 0.73, 0.75, 1 ] - }, - { "time": 0.4333, "angle": -1.7 }, - { "time": 0.4666, "angle": 27.12 }, - { "time": 0.5, "angle": 38.83 }, - { "time": 0.5333, "angle": 30.76 }, - { "time": 0.5666, "angle": -20.49 }, - { "time": 0.6, "angle": -30.8 }, - { "time": 0.6666, "angle": -1.31 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.1333, "angle": 24.72 }, - { "time": 0.5, "angle": -11.87 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - } - }, - "events": [ - { "time": 0, "name": "footstep" }, - { "time": 0.4, "name": "footstep", "int": 1 } - ] - }, - "shoot": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0.1333, "name": "front_fist_closed" }, - { "time": 0.4, "name": "front_fist_open" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0.1333, "name": "mouth_grind" } - ] - }, - "muzzle": { - "attachment": [ - { "time": 0.1333, "name": "muzzle" }, - { "time": 0.2666, "name": null } - ], - "color": [ - { - "time": 0.1333, - "color": "ffffff00", - "curve": [ 0.118, 0.99, 0.75, 1 ] - }, - { - "time": 0.1666, - "color": "ffffffff", - "curve": [ 0.821, 0, 0.909, 0.89 ] - }, - { "time": 0.2666, "color": "ffffff00" } - ] - } - }, - "bones": { - "front_fist": { - "scale": [ - { "time": 0.1333, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.4, "x": 1, "y": 1 } - ] - }, - "gunTip": { - "translate": [ - { "time": 0.1333, "x": 0, "y": 0 }, - { "time": 0.2, "x": 20.93, "y": 1.57 } - ], - "scale": [ - { "time": 0.1333, "x": 1, "y": 1 }, - { "time": 0.2, "x": 1.247, "y": 1.516 } - ] - }, - "gun": { - "rotate": [ - { "time": 0, "angle": 1.9 } - ], - "translate": [ - { - "time": 0, - "x": 7.95, - "y": 5.84, - "curve": [ 0, 0.3, 0.678, 1 ] - }, - { "time": 0.3, "x": -9.3, "y": -1.41 }, - { "time": 0.4, "x": 0, "y": 0 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": -30.47 } - ], - "translate": [ - { - "time": 0, - "x": 0, - "y": 0, - "curve": [ 0, 0.3, 0.678, 1 ] - }, - { "time": 0.3, "x": -5.99, "y": -3.71 }, - { "time": 0.4, "x": 0, "y": 0 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 62.3 } - ], - "translate": [ - { - "time": 0, - "x": 0, - "y": 0, - "curve": [ 0, 0.3, 0.678, 1 ] - }, - { "time": 0.3, "x": 2.81, "y": 11.41 }, - { "time": 0.4, "x": 0, "y": 0 } - ] - } - } - }, - "test": { - "slots": { - "front_foot": { - "color": [ - { "time": 0.6666, "color": "ffffffff" }, - { "time": 1.3333, "color": "ff0700ff" } - ] - }, - "gun": { - "color": [ - { "time": 0, "color": "ffffffff", "curve": "stepped" }, - { "time": 0.6666, "color": "ffffffff" }, - { "time": 1.3333, "color": "32ff00ff" } - ] - }, - "rear_foot": { - "color": [ - { "time": 0.6666, "color": "ffffffff" }, - { "time": 1.3333, "color": "ff0700ff" } - ] - } - }, - "bones": { - "head": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.3333, "angle": -20.72 }, - { "time": 0.6666, "angle": -32.41 }, - { "time": 1, "angle": -5.3 }, - { "time": 1.3333, "angle": 24.96 }, - { "time": 1.6666, "angle": 15.61 }, - { "time": 2, "angle": 0 } - ], - "translate": [ - { - "time": 0, - "x": 0, - "y": 0, - "curve": [ 0.172, 0.37, 0.574, 0.73 ] - }, - { - "time": 0.1666, - "x": 144.19, - "y": -77.59, - "curve": [ 0.372, 0.61, 0.765, 1 ] - }, - { - "time": 0.3333, - "x": 217.61, - "y": -192.63, - "curve": [ 0.282, 0, 0.624, 0.31 ] - }, - { - "time": 0.5, - "x": 181.21, - "y": -365.66, - "curve": [ 0.313, 0.21, 0.654, 0.54 ] - }, - { - "time": 0.6666, - "x": 20.09, - "y": -500.4, - "curve": [ 0.147, 0.27, 0.75, 1 ] - }, - { "time": 0.8333, "x": -194.24, "y": -341.84 }, - { "time": 1, "x": -307.93, "y": -114 }, - { - "time": 1.1666, - "x": -330.38, - "y": 121.42, - "curve": [ 0.25, 0, 0.764, 0.48 ] - }, - { - "time": 1.3333, - "x": -240.42, - "y": 335.66, - "curve": [ 0.229, 0.37, 0.58, 0.73 ] - }, - { - "time": 1.5, - "x": -56.12, - "y": 288.06, - "curve": [ 0.296, 0.6, 0.641, 1 ] - }, - { - "time": 1.6666, - "x": 87.63, - "y": 191.33, - "curve": [ 0.238, 0, 0.626, 0.39 ] - }, - { - "time": 1.8333, - "x": 60.62, - "y": 95.14, - "curve": [ 0.41, 0.26, 0.803, 0.62 ] - }, - { "time": 2, "x": 0, "y": 0 } - ] - } - }, - "draworder": [ - { - "time": 0.6666, - "offsets": [ - { "slot": "head", "offset": -9 }, - { "slot": "eye", "offset": -9 }, - { "slot": "mouth", "offset": -12 }, - { "slot": "goggles", "offset": -12 } - ] - }, - { "time": 1.3333 } - ], - "events": [ - { "time": 0, "name": "headPop", "int": 0, "float": 0, "string": "pop.wav" }, - { "time": 1, "name": "headBehind", "int": 7, "float": 8, "string": "animate" }, - { "time": 2, "name": "headAttach", "int": 0, "float": 0, "string": "attach.wav" } - ] - }, - "walk": { - "slots": { - "front_fist": { - "attachment": [ - { "time": 0, "name": "front_fist_closed" } - ] - }, - "mouth": { - "attachment": [ - { "time": 0, "name": "mouth_smile" } - ] - }, - "torso": { - "attachment": [ - { "time": 0, "name": "torso" } - ] - } - }, - "bones": { - "front_thigh": { - "rotate": [ - { "time": 0, "angle": 15.79 }, - { "time": 0.1, "angle": 27.39 }, - { "time": 0.2, "angle": -7.94 }, - { "time": 0.3, "angle": -16.94 }, - { "time": 0.4, "angle": -28.62 }, - { "time": 0.5, "angle": -19.3 }, - { "time": 0.6, "angle": -3.08 }, - { "time": 0.7, "angle": 29.51 }, - { "time": 0.8, "angle": 15.79 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.4, "x": -1.18, "y": 0.54 }, - { "time": 0.5, "x": 0.11, "y": 0.41 }, - { "time": 0.6, "x": 9.48, "y": 0.27 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.4, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_shin": { - "rotate": [ - { "time": 0, "angle": 5.12 }, - { "time": 0.1, "angle": -20.87 }, - { "time": 0.2, "angle": 13.37 }, - { "time": 0.3, "angle": 15.98 }, - { "time": 0.4, "angle": 5.94 }, - { "time": 0.5, "angle": -26.76 }, - { "time": 0.7, "angle": -55.44 }, - { "time": 0.8, "angle": 5.12 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_thigh": { - "rotate": [ - { "time": 0, "angle": -34.38 }, - { "time": 0.1, "angle": -30.32 }, - { "time": 0.2, "angle": -37.22 }, - { "time": 0.3, "angle": 20.73 }, - { "time": 0.4, "angle": 8.69 }, - { "time": 0.5, "angle": 12.16 }, - { "time": 0.6, "angle": -24.62 }, - { "time": 0.7, "angle": -27.26 }, - { "time": 0.8, "angle": -34.38 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0 }, - { "time": 0.4, "x": 4.08, "y": -9.53 }, - { "time": 0.5, "x": 0, "y": 0 }, - { "time": 0.7, "x": -21.14, "y": -9.6 }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_shin": { - "rotate": [ - { "time": 0, "angle": 14.26 }, - { "time": 0.1, "angle": -17.3 }, - { "time": 0.2, "angle": -12.67 }, - { "time": 0.3, "angle": -58.89 }, - { "time": 0.4, "angle": 15.95 }, - { "time": 0.5, "angle": -9 }, - { "time": 0.6, "angle": 26.06 }, - { "time": 0.7, "angle": 21.85 }, - { "time": 0.8, "angle": 14.26 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1 }, - { "time": 0.1, "x": 0.951, "y": 1 }, - { "time": 0.5, "x": 0.975, "y": 1 }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_foot": { - "rotate": [ - { "time": 0, "angle": 10.13 }, - { "time": 0.1, "angle": 12.27 }, - { "time": 0.2, "angle": -2.94 }, - { "time": 0.3, "angle": 6.29 }, - { "time": 0.4, "angle": 13.45 }, - { "time": 0.5, "angle": -3.57 }, - { "time": 0.6, "angle": -0.97 }, - { "time": 0.7, "angle": 2.97 }, - { "time": 0.8, "angle": 10.13 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_upper_arm": { - "rotate": [ - { "time": 0, "angle": -23.74 }, - { "time": 0.4, "angle": -320.57 }, - { "time": 0.8, "angle": -23.74 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_upper_arm": { - "rotate": [ - { "time": 0, "angle": 11.62 }, - { "time": 0.1, "angle": 19.36 }, - { "time": 0.4, "angle": 345.26 }, - { "time": 0.5, "angle": 343.44 }, - { "time": 0.8, "angle": 11.62 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "torso": { - "rotate": [ - { "time": 0, "angle": -12.11 }, - { "time": 0.1666, "angle": -17.16 }, - { "time": 0.4, "angle": -12.11 }, - { "time": 0.5666, "angle": -15.81 }, - { "time": 0.8, "angle": -12.11 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "neck": { - "rotate": [ - { "time": 0, "angle": 1.41 }, - { "time": 0.2333, "angle": -3.04 }, - { "time": 0.4, "angle": 1.41 }, - { "time": 0.6333, "angle": -3.04 }, - { "time": 0.8, "angle": 1.41 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "head": { - "rotate": [ - { "time": 0, "angle": 6.97 }, - { "time": 0.1666, "angle": 8.02 }, - { "time": 0.2666, "angle": 12.65 }, - { "time": 0.4, "angle": 6.97 }, - { "time": 0.5666, "angle": 8.02 }, - { "time": 0.6666, "angle": 12.65 }, - { "time": 0.8, "angle": 6.97 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "hip": { - "rotate": [ - { "time": 0, "angle": 0, "curve": "stepped" }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { - "time": 0, - "x": -23.93, - "y": 3.22, - "curve": [ 0.518, 0.03, 0.807, 0.61 ] - }, - { - "time": 0.1, - "x": -23.93, - "y": -9.24, - "curve": [ 0.135, 0.33, 0.601, 0.99 ] - }, - { - "time": 0.2, - "x": -23.93, - "y": 4.35, - "curve": [ 0.204, 0.68, 0.75, 1 ] - }, - { - "time": 0.3, - "x": -23.93, - "y": 2.38, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.4, - "x": -23.93, - "y": -2.5, - "curve": [ 0.692, 0.01, 0.75, 1 ] - }, - { - "time": 0.5, - "x": -23.93, - "y": -10.32, - "curve": [ 0.235, 0.77, 0.75, 1 ] - }, - { - "time": 0.6, - "x": -23.93, - "y": 4.35, - "curve": [ 0.287, 0.37, 0.718, 0.76 ] - }, - { - "time": 0.7, - "x": -23.93, - "y": 10.34, - "curve": [ 0.615, 0, 0.75, 1 ] - }, - { "time": 0.8, "x": -23.93, "y": 3.22 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_bracer": { - "rotate": [ - { "time": 0, "angle": 0 }, - { "time": 0.4, "angle": 20.59 }, - { "time": 0.8, "angle": 0 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_foot": { - "rotate": [ - { "time": 0, "angle": 12.49 }, - { "time": 0.1, "angle": -8.34 }, - { "time": 0.2, "angle": -6.17 }, - { "time": 0.3, "angle": -0.75 }, - { "time": 0.3333, "angle": 3.89 }, - { "time": 0.4, "angle": 10.22 }, - { "time": 0.5, "angle": 11.44 }, - { "time": 0.6, "angle": -0.33 }, - { "time": 0.7, "angle": 0.15 }, - { "time": 0.8, "angle": 12.49 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "rear_bracer": { - "rotate": [ - { "time": 0, "angle": 3.58 }, - { "time": 0.1, "angle": 5.51 }, - { "time": 0.4, "angle": -22.77 }, - { "time": 0.5, "angle": -9.65 }, - { "time": 0.8, "angle": 3.58 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "front_fist": { - "rotate": [ - { "time": 0, "angle": -15.22 }, - { "time": 0.1, "angle": -51.4 }, - { "time": 0.4, "angle": -39.4 }, - { "time": 0.5, "angle": 19.26 }, - { "time": 0.8, "angle": -15.22 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - }, - "gun": { - "rotate": [ - { - "time": 0, - "angle": -24.06, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.1, - "angle": -10.94, - "curve": [ 0.381, 0.54, 0.742, 1 ] - }, - { - "time": 0.4, - "angle": 25.34, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { - "time": 0.6666, - "angle": -27.47, - "curve": [ 0.25, 0, 0.75, 1 ] - }, - { "time": 0.8, "angle": -24.06 } - ], - "translate": [ - { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, - { "time": 0.8, "x": 0, "y": 0 } - ], - "scale": [ - { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, - { "time": 0.8, "x": 1, "y": 1 } - ] - } - } - } -} -} \ No newline at end of file diff --git a/spine-cocos2dx/3/example/Resources/common/sprite.png b/spine-cocos2dx/3/example/Resources/common/sprite.png deleted file mode 100644 index 91dd46533..000000000 Binary files a/spine-cocos2dx/3/example/Resources/common/sprite.png and /dev/null differ diff --git a/spine-cocos2dx/3/example/Resources/ipad-retina/goblins-mesh.atlas b/spine-cocos2dx/3/example/Resources/ipad-retina/goblins-mesh.atlas deleted file mode 100644 index d0ddb80c6..000000000 --- a/spine-cocos2dx/3/example/Resources/ipad-retina/goblins-mesh.atlas +++ /dev/null @@ -1,292 +0,0 @@ - -goblins-mesh.png -format: RGBA8888 -filter: Linear,Linear -repeat: none -dagger - rotate: true - xy: 372, 100 - size: 26, 108 - orig: 26, 108 - offset: 0, 0 - index: -1 -goblin/eyes-closed - rotate: false - xy: 2, 7 - size: 34, 12 - orig: 34, 12 - offset: 0, 0 - index: -1 -goblin/head - rotate: false - xy: 107, 36 - size: 103, 66 - orig: 103, 66 - offset: 0, 0 - index: -1 -goblin/left-arm - rotate: false - xy: 901, 56 - size: 37, 35 - orig: 37, 35 - offset: 0, 0 - index: -1 -goblin/left-foot - rotate: false - xy: 929, 95 - size: 65, 31 - orig: 65, 31 - offset: 0, 0 - index: -1 -goblin/left-hand - rotate: false - xy: 452, 2 - size: 36, 41 - orig: 36, 41 - offset: 0, 0 - index: -1 -goblin/left-lower-leg - rotate: true - xy: 713, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblin/left-shoulder - rotate: false - xy: 610, 44 - size: 29, 44 - orig: 29, 44 - offset: 0, 0 - index: -1 -goblin/left-upper-leg - rotate: true - xy: 638, 93 - size: 33, 73 - orig: 33, 73 - offset: 0, 0 - index: -1 -goblin/neck - rotate: false - xy: 490, 2 - size: 36, 41 - orig: 36, 41 - offset: 0, 0 - index: -1 -goblin/pelvis - rotate: false - xy: 482, 45 - size: 62, 43 - orig: 62, 43 - offset: 0, 0 - index: -1 -goblin/right-arm - rotate: true - xy: 690, 2 - size: 23, 50 - orig: 23, 50 - offset: 0, 0 - index: -1 -goblin/right-foot - rotate: false - xy: 771, 58 - size: 63, 33 - orig: 63, 33 - offset: 0, 0 - index: -1 -goblin/right-hand - rotate: false - xy: 940, 56 - size: 36, 37 - orig: 36, 37 - offset: 0, 0 - index: -1 -goblin/right-lower-leg - rotate: true - xy: 482, 90 - size: 36, 76 - orig: 36, 76 - offset: 0, 0 - index: -1 -goblin/right-shoulder - rotate: true - xy: 602, 3 - size: 39, 45 - orig: 39, 45 - offset: 0, 0 - index: -1 -goblin/right-upper-leg - rotate: true - xy: 641, 57 - size: 34, 63 - orig: 34, 63 - offset: 0, 0 - index: -1 -goblin/torso - rotate: true - xy: 212, 34 - size: 68, 96 - orig: 68, 96 - offset: 0, 0 - index: -1 -goblin/undie-straps - rotate: false - xy: 380, 5 - size: 55, 19 - orig: 55, 19 - offset: 0, 0 - index: -1 -goblin/undies - rotate: false - xy: 174, 5 - size: 36, 29 - orig: 36, 29 - offset: 0, 0 - index: -1 -goblingirl/eyes-closed - rotate: false - xy: 269, 11 - size: 37, 21 - orig: 37, 21 - offset: 0, 0 - index: -1 -goblingirl/head - rotate: false - xy: 2, 21 - size: 103, 81 - orig: 103, 81 - offset: 0, 0 - index: -1 -goblingirl/left-arm - rotate: true - xy: 978, 56 - size: 37, 35 - orig: 37, 35 - offset: 0, 0 - index: -1 -goblingirl/left-foot - rotate: false - xy: 107, 3 - size: 65, 31 - orig: 65, 31 - offset: 0, 0 - index: -1 -goblingirl/left-hand - rotate: false - xy: 565, 2 - size: 35, 40 - orig: 35, 40 - offset: 0, 0 - index: -1 -goblingirl/left-lower-leg - rotate: true - xy: 785, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblingirl/left-shoulder - rotate: true - xy: 690, 27 - size: 28, 46 - orig: 28, 46 - offset: 0, 0 - index: -1 -goblingirl/left-upper-leg - rotate: true - xy: 857, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblingirl/neck - rotate: false - xy: 528, 2 - size: 35, 41 - orig: 35, 41 - offset: 0, 0 - index: -1 -goblingirl/pelvis - rotate: false - xy: 546, 45 - size: 62, 43 - orig: 62, 43 - offset: 0, 0 - index: -1 -goblingirl/right-arm - rotate: false - xy: 452, 48 - size: 28, 50 - orig: 28, 50 - offset: 0, 0 - index: -1 -goblingirl/right-foot - rotate: false - xy: 836, 58 - size: 63, 33 - orig: 63, 33 - offset: 0, 0 - index: -1 -goblingirl/right-hand - rotate: true - xy: 771, 20 - size: 36, 37 - orig: 36, 37 - offset: 0, 0 - index: -1 -goblingirl/right-lower-leg - rotate: true - xy: 560, 90 - size: 36, 76 - orig: 36, 76 - offset: 0, 0 - index: -1 -goblingirl/right-shoulder - rotate: false - xy: 649, 10 - size: 39, 45 - orig: 39, 45 - offset: 0, 0 - index: -1 -goblingirl/right-upper-leg - rotate: true - xy: 706, 57 - size: 34, 63 - orig: 34, 63 - offset: 0, 0 - index: -1 -goblingirl/torso - rotate: false - xy: 310, 2 - size: 68, 96 - orig: 68, 96 - offset: 0, 0 - index: -1 -goblingirl/undie-straps - rotate: false - xy: 212, 13 - size: 55, 19 - orig: 55, 19 - offset: 0, 0 - index: -1 -goblingirl/undies - rotate: false - xy: 810, 27 - size: 36, 29 - orig: 36, 29 - offset: 0, 0 - index: -1 -shield - rotate: false - xy: 380, 26 - size: 70, 72 - orig: 70, 72 - offset: 0, 0 - index: -1 -spear - rotate: true - xy: 2, 104 - size: 22, 368 - orig: 22, 368 - offset: 0, 0 - index: -1 diff --git a/spine-cocos2dx/3/example/Resources/ipad-retina/goblins-mesh.png b/spine-cocos2dx/3/example/Resources/ipad-retina/goblins-mesh.png deleted file mode 100644 index a3daf0010..000000000 Binary files a/spine-cocos2dx/3/example/Resources/ipad-retina/goblins-mesh.png and /dev/null differ diff --git a/spine-cocos2dx/3/example/Resources/ipad-retina/spineboy.atlas b/spine-cocos2dx/3/example/Resources/ipad-retina/spineboy.atlas deleted file mode 100644 index 19c0934b1..000000000 --- a/spine-cocos2dx/3/example/Resources/ipad-retina/spineboy.atlas +++ /dev/null @@ -1,194 +0,0 @@ - -spineboy.png -format: RGBA8888 -filter: Linear,Linear -repeat: none -eye_indifferent - rotate: true - xy: 389, 5 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -eye_surprised - rotate: false - xy: 580, 34 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -front_bracer - rotate: false - xy: 732, 85 - size: 35, 48 - orig: 35, 48 - offset: 0, 0 - index: -1 -front_fist_closed - rotate: false - xy: 556, 91 - size: 45, 49 - orig: 45, 49 - offset: 0, 0 - index: -1 -front_fist_open - rotate: false - xy: 668, 32 - size: 52, 52 - orig: 52, 52 - offset: 0, 0 - index: -1 -front_foot - rotate: false - xy: 924, 201 - size: 76, 41 - orig: 76, 41 - offset: 0, 0 - index: -1 -front_foot_bend1 - rotate: false - xy: 845, 200 - size: 77, 42 - orig: 77, 42 - offset: 0, 0 - index: -1 -front_foot_bend2 - rotate: false - xy: 778, 186 - size: 65, 56 - orig: 65, 56 - offset: 0, 0 - index: -1 -front_shin - rotate: true - xy: 444, 91 - size: 49, 110 - orig: 49, 110 - offset: 0, 0 - index: -1 -front_thigh - rotate: true - xy: 603, 89 - size: 29, 67 - orig: 29, 67 - offset: 0, 0 - index: -1 -front_upper_arm - rotate: true - xy: 672, 86 - size: 32, 58 - orig: 32, 58 - offset: 0, 0 - index: -1 -goggles - rotate: false - xy: 444, 142 - size: 157, 100 - orig: 157, 100 - offset: 0, 0 - index: -1 -gun - rotate: false - xy: 603, 120 - size: 126, 122 - orig: 126, 122 - offset: 0, 0 - index: -1 -head - rotate: false - xy: 279, 63 - size: 163, 179 - orig: 163, 179 - offset: 0, 0 - index: -1 -mouth_grind - rotate: false - xy: 845, 163 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_oooo - rotate: false - xy: 842, 126 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_smile - rotate: false - xy: 769, 97 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -muzzle - rotate: false - xy: 2, 2 - size: 275, 240 - orig: 277, 240 - offset: 0, 0 - index: -1 -neck - rotate: false - xy: 903, 173 - size: 22, 25 - orig: 22, 25 - offset: 0, 0 - index: -1 -rear_bracer - rotate: false - xy: 722, 40 - size: 34, 43 - orig: 34, 43 - offset: 0, 0 - index: -1 -rear_foot - rotate: false - xy: 444, 11 - size: 68, 36 - orig: 68, 36 - offset: 0, 0 - index: -1 -rear_foot_bend1 - rotate: false - xy: 444, 49 - size: 70, 40 - orig: 70, 40 - offset: 0, 0 - index: -1 -rear_foot_bend2 - rotate: false - xy: 778, 134 - size: 62, 50 - orig: 62, 50 - offset: 0, 0 - index: -1 -rear_shin - rotate: false - xy: 731, 135 - size: 45, 107 - orig: 45, 107 - offset: 0, 0 - index: -1 -rear_thigh - rotate: true - xy: 516, 50 - size: 39, 62 - orig: 39, 62 - offset: 0, 0 - index: -1 -rear_upper_arm - rotate: false - xy: 638, 35 - size: 28, 52 - orig: 28, 52 - offset: 0, 0 - index: -1 -torso - rotate: true - xy: 279, 2 - size: 59, 108 - orig: 59, 108 - offset: 0, 0 - index: -1 diff --git a/spine-cocos2dx/3/example/Resources/ipad-retina/spineboy.png b/spine-cocos2dx/3/example/Resources/ipad-retina/spineboy.png deleted file mode 100644 index dce2fe3e2..000000000 Binary files a/spine-cocos2dx/3/example/Resources/ipad-retina/spineboy.png and /dev/null differ diff --git a/spine-cocos2dx/3/example/Resources/ipad/goblins-mesh.atlas b/spine-cocos2dx/3/example/Resources/ipad/goblins-mesh.atlas deleted file mode 100644 index d0ddb80c6..000000000 --- a/spine-cocos2dx/3/example/Resources/ipad/goblins-mesh.atlas +++ /dev/null @@ -1,292 +0,0 @@ - -goblins-mesh.png -format: RGBA8888 -filter: Linear,Linear -repeat: none -dagger - rotate: true - xy: 372, 100 - size: 26, 108 - orig: 26, 108 - offset: 0, 0 - index: -1 -goblin/eyes-closed - rotate: false - xy: 2, 7 - size: 34, 12 - orig: 34, 12 - offset: 0, 0 - index: -1 -goblin/head - rotate: false - xy: 107, 36 - size: 103, 66 - orig: 103, 66 - offset: 0, 0 - index: -1 -goblin/left-arm - rotate: false - xy: 901, 56 - size: 37, 35 - orig: 37, 35 - offset: 0, 0 - index: -1 -goblin/left-foot - rotate: false - xy: 929, 95 - size: 65, 31 - orig: 65, 31 - offset: 0, 0 - index: -1 -goblin/left-hand - rotate: false - xy: 452, 2 - size: 36, 41 - orig: 36, 41 - offset: 0, 0 - index: -1 -goblin/left-lower-leg - rotate: true - xy: 713, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblin/left-shoulder - rotate: false - xy: 610, 44 - size: 29, 44 - orig: 29, 44 - offset: 0, 0 - index: -1 -goblin/left-upper-leg - rotate: true - xy: 638, 93 - size: 33, 73 - orig: 33, 73 - offset: 0, 0 - index: -1 -goblin/neck - rotate: false - xy: 490, 2 - size: 36, 41 - orig: 36, 41 - offset: 0, 0 - index: -1 -goblin/pelvis - rotate: false - xy: 482, 45 - size: 62, 43 - orig: 62, 43 - offset: 0, 0 - index: -1 -goblin/right-arm - rotate: true - xy: 690, 2 - size: 23, 50 - orig: 23, 50 - offset: 0, 0 - index: -1 -goblin/right-foot - rotate: false - xy: 771, 58 - size: 63, 33 - orig: 63, 33 - offset: 0, 0 - index: -1 -goblin/right-hand - rotate: false - xy: 940, 56 - size: 36, 37 - orig: 36, 37 - offset: 0, 0 - index: -1 -goblin/right-lower-leg - rotate: true - xy: 482, 90 - size: 36, 76 - orig: 36, 76 - offset: 0, 0 - index: -1 -goblin/right-shoulder - rotate: true - xy: 602, 3 - size: 39, 45 - orig: 39, 45 - offset: 0, 0 - index: -1 -goblin/right-upper-leg - rotate: true - xy: 641, 57 - size: 34, 63 - orig: 34, 63 - offset: 0, 0 - index: -1 -goblin/torso - rotate: true - xy: 212, 34 - size: 68, 96 - orig: 68, 96 - offset: 0, 0 - index: -1 -goblin/undie-straps - rotate: false - xy: 380, 5 - size: 55, 19 - orig: 55, 19 - offset: 0, 0 - index: -1 -goblin/undies - rotate: false - xy: 174, 5 - size: 36, 29 - orig: 36, 29 - offset: 0, 0 - index: -1 -goblingirl/eyes-closed - rotate: false - xy: 269, 11 - size: 37, 21 - orig: 37, 21 - offset: 0, 0 - index: -1 -goblingirl/head - rotate: false - xy: 2, 21 - size: 103, 81 - orig: 103, 81 - offset: 0, 0 - index: -1 -goblingirl/left-arm - rotate: true - xy: 978, 56 - size: 37, 35 - orig: 37, 35 - offset: 0, 0 - index: -1 -goblingirl/left-foot - rotate: false - xy: 107, 3 - size: 65, 31 - orig: 65, 31 - offset: 0, 0 - index: -1 -goblingirl/left-hand - rotate: false - xy: 565, 2 - size: 35, 40 - orig: 35, 40 - offset: 0, 0 - index: -1 -goblingirl/left-lower-leg - rotate: true - xy: 785, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblingirl/left-shoulder - rotate: true - xy: 690, 27 - size: 28, 46 - orig: 28, 46 - offset: 0, 0 - index: -1 -goblingirl/left-upper-leg - rotate: true - xy: 857, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblingirl/neck - rotate: false - xy: 528, 2 - size: 35, 41 - orig: 35, 41 - offset: 0, 0 - index: -1 -goblingirl/pelvis - rotate: false - xy: 546, 45 - size: 62, 43 - orig: 62, 43 - offset: 0, 0 - index: -1 -goblingirl/right-arm - rotate: false - xy: 452, 48 - size: 28, 50 - orig: 28, 50 - offset: 0, 0 - index: -1 -goblingirl/right-foot - rotate: false - xy: 836, 58 - size: 63, 33 - orig: 63, 33 - offset: 0, 0 - index: -1 -goblingirl/right-hand - rotate: true - xy: 771, 20 - size: 36, 37 - orig: 36, 37 - offset: 0, 0 - index: -1 -goblingirl/right-lower-leg - rotate: true - xy: 560, 90 - size: 36, 76 - orig: 36, 76 - offset: 0, 0 - index: -1 -goblingirl/right-shoulder - rotate: false - xy: 649, 10 - size: 39, 45 - orig: 39, 45 - offset: 0, 0 - index: -1 -goblingirl/right-upper-leg - rotate: true - xy: 706, 57 - size: 34, 63 - orig: 34, 63 - offset: 0, 0 - index: -1 -goblingirl/torso - rotate: false - xy: 310, 2 - size: 68, 96 - orig: 68, 96 - offset: 0, 0 - index: -1 -goblingirl/undie-straps - rotate: false - xy: 212, 13 - size: 55, 19 - orig: 55, 19 - offset: 0, 0 - index: -1 -goblingirl/undies - rotate: false - xy: 810, 27 - size: 36, 29 - orig: 36, 29 - offset: 0, 0 - index: -1 -shield - rotate: false - xy: 380, 26 - size: 70, 72 - orig: 70, 72 - offset: 0, 0 - index: -1 -spear - rotate: true - xy: 2, 104 - size: 22, 368 - orig: 22, 368 - offset: 0, 0 - index: -1 diff --git a/spine-cocos2dx/3/example/Resources/ipad/goblins-mesh.png b/spine-cocos2dx/3/example/Resources/ipad/goblins-mesh.png deleted file mode 100644 index a3daf0010..000000000 Binary files a/spine-cocos2dx/3/example/Resources/ipad/goblins-mesh.png and /dev/null differ diff --git a/spine-cocos2dx/3/example/Resources/ipad/spineboy.atlas b/spine-cocos2dx/3/example/Resources/ipad/spineboy.atlas deleted file mode 100644 index 19c0934b1..000000000 --- a/spine-cocos2dx/3/example/Resources/ipad/spineboy.atlas +++ /dev/null @@ -1,194 +0,0 @@ - -spineboy.png -format: RGBA8888 -filter: Linear,Linear -repeat: none -eye_indifferent - rotate: true - xy: 389, 5 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -eye_surprised - rotate: false - xy: 580, 34 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -front_bracer - rotate: false - xy: 732, 85 - size: 35, 48 - orig: 35, 48 - offset: 0, 0 - index: -1 -front_fist_closed - rotate: false - xy: 556, 91 - size: 45, 49 - orig: 45, 49 - offset: 0, 0 - index: -1 -front_fist_open - rotate: false - xy: 668, 32 - size: 52, 52 - orig: 52, 52 - offset: 0, 0 - index: -1 -front_foot - rotate: false - xy: 924, 201 - size: 76, 41 - orig: 76, 41 - offset: 0, 0 - index: -1 -front_foot_bend1 - rotate: false - xy: 845, 200 - size: 77, 42 - orig: 77, 42 - offset: 0, 0 - index: -1 -front_foot_bend2 - rotate: false - xy: 778, 186 - size: 65, 56 - orig: 65, 56 - offset: 0, 0 - index: -1 -front_shin - rotate: true - xy: 444, 91 - size: 49, 110 - orig: 49, 110 - offset: 0, 0 - index: -1 -front_thigh - rotate: true - xy: 603, 89 - size: 29, 67 - orig: 29, 67 - offset: 0, 0 - index: -1 -front_upper_arm - rotate: true - xy: 672, 86 - size: 32, 58 - orig: 32, 58 - offset: 0, 0 - index: -1 -goggles - rotate: false - xy: 444, 142 - size: 157, 100 - orig: 157, 100 - offset: 0, 0 - index: -1 -gun - rotate: false - xy: 603, 120 - size: 126, 122 - orig: 126, 122 - offset: 0, 0 - index: -1 -head - rotate: false - xy: 279, 63 - size: 163, 179 - orig: 163, 179 - offset: 0, 0 - index: -1 -mouth_grind - rotate: false - xy: 845, 163 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_oooo - rotate: false - xy: 842, 126 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_smile - rotate: false - xy: 769, 97 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -muzzle - rotate: false - xy: 2, 2 - size: 275, 240 - orig: 277, 240 - offset: 0, 0 - index: -1 -neck - rotate: false - xy: 903, 173 - size: 22, 25 - orig: 22, 25 - offset: 0, 0 - index: -1 -rear_bracer - rotate: false - xy: 722, 40 - size: 34, 43 - orig: 34, 43 - offset: 0, 0 - index: -1 -rear_foot - rotate: false - xy: 444, 11 - size: 68, 36 - orig: 68, 36 - offset: 0, 0 - index: -1 -rear_foot_bend1 - rotate: false - xy: 444, 49 - size: 70, 40 - orig: 70, 40 - offset: 0, 0 - index: -1 -rear_foot_bend2 - rotate: false - xy: 778, 134 - size: 62, 50 - orig: 62, 50 - offset: 0, 0 - index: -1 -rear_shin - rotate: false - xy: 731, 135 - size: 45, 107 - orig: 45, 107 - offset: 0, 0 - index: -1 -rear_thigh - rotate: true - xy: 516, 50 - size: 39, 62 - orig: 39, 62 - offset: 0, 0 - index: -1 -rear_upper_arm - rotate: false - xy: 638, 35 - size: 28, 52 - orig: 28, 52 - offset: 0, 0 - index: -1 -torso - rotate: true - xy: 279, 2 - size: 59, 108 - orig: 59, 108 - offset: 0, 0 - index: -1 diff --git a/spine-cocos2dx/3/example/Resources/ipad/spineboy.png b/spine-cocos2dx/3/example/Resources/ipad/spineboy.png deleted file mode 100644 index dce2fe3e2..000000000 Binary files a/spine-cocos2dx/3/example/Resources/ipad/spineboy.png and /dev/null differ diff --git a/spine-cocos2dx/3/example/Resources/iphone-retina/goblins-mesh.atlas b/spine-cocos2dx/3/example/Resources/iphone-retina/goblins-mesh.atlas deleted file mode 100644 index d0ddb80c6..000000000 --- a/spine-cocos2dx/3/example/Resources/iphone-retina/goblins-mesh.atlas +++ /dev/null @@ -1,292 +0,0 @@ - -goblins-mesh.png -format: RGBA8888 -filter: Linear,Linear -repeat: none -dagger - rotate: true - xy: 372, 100 - size: 26, 108 - orig: 26, 108 - offset: 0, 0 - index: -1 -goblin/eyes-closed - rotate: false - xy: 2, 7 - size: 34, 12 - orig: 34, 12 - offset: 0, 0 - index: -1 -goblin/head - rotate: false - xy: 107, 36 - size: 103, 66 - orig: 103, 66 - offset: 0, 0 - index: -1 -goblin/left-arm - rotate: false - xy: 901, 56 - size: 37, 35 - orig: 37, 35 - offset: 0, 0 - index: -1 -goblin/left-foot - rotate: false - xy: 929, 95 - size: 65, 31 - orig: 65, 31 - offset: 0, 0 - index: -1 -goblin/left-hand - rotate: false - xy: 452, 2 - size: 36, 41 - orig: 36, 41 - offset: 0, 0 - index: -1 -goblin/left-lower-leg - rotate: true - xy: 713, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblin/left-shoulder - rotate: false - xy: 610, 44 - size: 29, 44 - orig: 29, 44 - offset: 0, 0 - index: -1 -goblin/left-upper-leg - rotate: true - xy: 638, 93 - size: 33, 73 - orig: 33, 73 - offset: 0, 0 - index: -1 -goblin/neck - rotate: false - xy: 490, 2 - size: 36, 41 - orig: 36, 41 - offset: 0, 0 - index: -1 -goblin/pelvis - rotate: false - xy: 482, 45 - size: 62, 43 - orig: 62, 43 - offset: 0, 0 - index: -1 -goblin/right-arm - rotate: true - xy: 690, 2 - size: 23, 50 - orig: 23, 50 - offset: 0, 0 - index: -1 -goblin/right-foot - rotate: false - xy: 771, 58 - size: 63, 33 - orig: 63, 33 - offset: 0, 0 - index: -1 -goblin/right-hand - rotate: false - xy: 940, 56 - size: 36, 37 - orig: 36, 37 - offset: 0, 0 - index: -1 -goblin/right-lower-leg - rotate: true - xy: 482, 90 - size: 36, 76 - orig: 36, 76 - offset: 0, 0 - index: -1 -goblin/right-shoulder - rotate: true - xy: 602, 3 - size: 39, 45 - orig: 39, 45 - offset: 0, 0 - index: -1 -goblin/right-upper-leg - rotate: true - xy: 641, 57 - size: 34, 63 - orig: 34, 63 - offset: 0, 0 - index: -1 -goblin/torso - rotate: true - xy: 212, 34 - size: 68, 96 - orig: 68, 96 - offset: 0, 0 - index: -1 -goblin/undie-straps - rotate: false - xy: 380, 5 - size: 55, 19 - orig: 55, 19 - offset: 0, 0 - index: -1 -goblin/undies - rotate: false - xy: 174, 5 - size: 36, 29 - orig: 36, 29 - offset: 0, 0 - index: -1 -goblingirl/eyes-closed - rotate: false - xy: 269, 11 - size: 37, 21 - orig: 37, 21 - offset: 0, 0 - index: -1 -goblingirl/head - rotate: false - xy: 2, 21 - size: 103, 81 - orig: 103, 81 - offset: 0, 0 - index: -1 -goblingirl/left-arm - rotate: true - xy: 978, 56 - size: 37, 35 - orig: 37, 35 - offset: 0, 0 - index: -1 -goblingirl/left-foot - rotate: false - xy: 107, 3 - size: 65, 31 - orig: 65, 31 - offset: 0, 0 - index: -1 -goblingirl/left-hand - rotate: false - xy: 565, 2 - size: 35, 40 - orig: 35, 40 - offset: 0, 0 - index: -1 -goblingirl/left-lower-leg - rotate: true - xy: 785, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblingirl/left-shoulder - rotate: true - xy: 690, 27 - size: 28, 46 - orig: 28, 46 - offset: 0, 0 - index: -1 -goblingirl/left-upper-leg - rotate: true - xy: 857, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblingirl/neck - rotate: false - xy: 528, 2 - size: 35, 41 - orig: 35, 41 - offset: 0, 0 - index: -1 -goblingirl/pelvis - rotate: false - xy: 546, 45 - size: 62, 43 - orig: 62, 43 - offset: 0, 0 - index: -1 -goblingirl/right-arm - rotate: false - xy: 452, 48 - size: 28, 50 - orig: 28, 50 - offset: 0, 0 - index: -1 -goblingirl/right-foot - rotate: false - xy: 836, 58 - size: 63, 33 - orig: 63, 33 - offset: 0, 0 - index: -1 -goblingirl/right-hand - rotate: true - xy: 771, 20 - size: 36, 37 - orig: 36, 37 - offset: 0, 0 - index: -1 -goblingirl/right-lower-leg - rotate: true - xy: 560, 90 - size: 36, 76 - orig: 36, 76 - offset: 0, 0 - index: -1 -goblingirl/right-shoulder - rotate: false - xy: 649, 10 - size: 39, 45 - orig: 39, 45 - offset: 0, 0 - index: -1 -goblingirl/right-upper-leg - rotate: true - xy: 706, 57 - size: 34, 63 - orig: 34, 63 - offset: 0, 0 - index: -1 -goblingirl/torso - rotate: false - xy: 310, 2 - size: 68, 96 - orig: 68, 96 - offset: 0, 0 - index: -1 -goblingirl/undie-straps - rotate: false - xy: 212, 13 - size: 55, 19 - orig: 55, 19 - offset: 0, 0 - index: -1 -goblingirl/undies - rotate: false - xy: 810, 27 - size: 36, 29 - orig: 36, 29 - offset: 0, 0 - index: -1 -shield - rotate: false - xy: 380, 26 - size: 70, 72 - orig: 70, 72 - offset: 0, 0 - index: -1 -spear - rotate: true - xy: 2, 104 - size: 22, 368 - orig: 22, 368 - offset: 0, 0 - index: -1 diff --git a/spine-cocos2dx/3/example/Resources/iphone-retina/goblins-mesh.png b/spine-cocos2dx/3/example/Resources/iphone-retina/goblins-mesh.png deleted file mode 100644 index a3daf0010..000000000 Binary files a/spine-cocos2dx/3/example/Resources/iphone-retina/goblins-mesh.png and /dev/null differ diff --git a/spine-cocos2dx/3/example/Resources/iphone-retina/spineboy.atlas b/spine-cocos2dx/3/example/Resources/iphone-retina/spineboy.atlas deleted file mode 100644 index 19c0934b1..000000000 --- a/spine-cocos2dx/3/example/Resources/iphone-retina/spineboy.atlas +++ /dev/null @@ -1,194 +0,0 @@ - -spineboy.png -format: RGBA8888 -filter: Linear,Linear -repeat: none -eye_indifferent - rotate: true - xy: 389, 5 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -eye_surprised - rotate: false - xy: 580, 34 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -front_bracer - rotate: false - xy: 732, 85 - size: 35, 48 - orig: 35, 48 - offset: 0, 0 - index: -1 -front_fist_closed - rotate: false - xy: 556, 91 - size: 45, 49 - orig: 45, 49 - offset: 0, 0 - index: -1 -front_fist_open - rotate: false - xy: 668, 32 - size: 52, 52 - orig: 52, 52 - offset: 0, 0 - index: -1 -front_foot - rotate: false - xy: 924, 201 - size: 76, 41 - orig: 76, 41 - offset: 0, 0 - index: -1 -front_foot_bend1 - rotate: false - xy: 845, 200 - size: 77, 42 - orig: 77, 42 - offset: 0, 0 - index: -1 -front_foot_bend2 - rotate: false - xy: 778, 186 - size: 65, 56 - orig: 65, 56 - offset: 0, 0 - index: -1 -front_shin - rotate: true - xy: 444, 91 - size: 49, 110 - orig: 49, 110 - offset: 0, 0 - index: -1 -front_thigh - rotate: true - xy: 603, 89 - size: 29, 67 - orig: 29, 67 - offset: 0, 0 - index: -1 -front_upper_arm - rotate: true - xy: 672, 86 - size: 32, 58 - orig: 32, 58 - offset: 0, 0 - index: -1 -goggles - rotate: false - xy: 444, 142 - size: 157, 100 - orig: 157, 100 - offset: 0, 0 - index: -1 -gun - rotate: false - xy: 603, 120 - size: 126, 122 - orig: 126, 122 - offset: 0, 0 - index: -1 -head - rotate: false - xy: 279, 63 - size: 163, 179 - orig: 163, 179 - offset: 0, 0 - index: -1 -mouth_grind - rotate: false - xy: 845, 163 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_oooo - rotate: false - xy: 842, 126 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_smile - rotate: false - xy: 769, 97 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -muzzle - rotate: false - xy: 2, 2 - size: 275, 240 - orig: 277, 240 - offset: 0, 0 - index: -1 -neck - rotate: false - xy: 903, 173 - size: 22, 25 - orig: 22, 25 - offset: 0, 0 - index: -1 -rear_bracer - rotate: false - xy: 722, 40 - size: 34, 43 - orig: 34, 43 - offset: 0, 0 - index: -1 -rear_foot - rotate: false - xy: 444, 11 - size: 68, 36 - orig: 68, 36 - offset: 0, 0 - index: -1 -rear_foot_bend1 - rotate: false - xy: 444, 49 - size: 70, 40 - orig: 70, 40 - offset: 0, 0 - index: -1 -rear_foot_bend2 - rotate: false - xy: 778, 134 - size: 62, 50 - orig: 62, 50 - offset: 0, 0 - index: -1 -rear_shin - rotate: false - xy: 731, 135 - size: 45, 107 - orig: 45, 107 - offset: 0, 0 - index: -1 -rear_thigh - rotate: true - xy: 516, 50 - size: 39, 62 - orig: 39, 62 - offset: 0, 0 - index: -1 -rear_upper_arm - rotate: false - xy: 638, 35 - size: 28, 52 - orig: 28, 52 - offset: 0, 0 - index: -1 -torso - rotate: true - xy: 279, 2 - size: 59, 108 - orig: 59, 108 - offset: 0, 0 - index: -1 diff --git a/spine-cocos2dx/3/example/Resources/iphone-retina/spineboy.png b/spine-cocos2dx/3/example/Resources/iphone-retina/spineboy.png deleted file mode 100644 index dce2fe3e2..000000000 Binary files a/spine-cocos2dx/3/example/Resources/iphone-retina/spineboy.png and /dev/null differ diff --git a/spine-cocos2dx/3/example/Resources/iphone/goblins-mesh.atlas b/spine-cocos2dx/3/example/Resources/iphone/goblins-mesh.atlas deleted file mode 100644 index d0ddb80c6..000000000 --- a/spine-cocos2dx/3/example/Resources/iphone/goblins-mesh.atlas +++ /dev/null @@ -1,292 +0,0 @@ - -goblins-mesh.png -format: RGBA8888 -filter: Linear,Linear -repeat: none -dagger - rotate: true - xy: 372, 100 - size: 26, 108 - orig: 26, 108 - offset: 0, 0 - index: -1 -goblin/eyes-closed - rotate: false - xy: 2, 7 - size: 34, 12 - orig: 34, 12 - offset: 0, 0 - index: -1 -goblin/head - rotate: false - xy: 107, 36 - size: 103, 66 - orig: 103, 66 - offset: 0, 0 - index: -1 -goblin/left-arm - rotate: false - xy: 901, 56 - size: 37, 35 - orig: 37, 35 - offset: 0, 0 - index: -1 -goblin/left-foot - rotate: false - xy: 929, 95 - size: 65, 31 - orig: 65, 31 - offset: 0, 0 - index: -1 -goblin/left-hand - rotate: false - xy: 452, 2 - size: 36, 41 - orig: 36, 41 - offset: 0, 0 - index: -1 -goblin/left-lower-leg - rotate: true - xy: 713, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblin/left-shoulder - rotate: false - xy: 610, 44 - size: 29, 44 - orig: 29, 44 - offset: 0, 0 - index: -1 -goblin/left-upper-leg - rotate: true - xy: 638, 93 - size: 33, 73 - orig: 33, 73 - offset: 0, 0 - index: -1 -goblin/neck - rotate: false - xy: 490, 2 - size: 36, 41 - orig: 36, 41 - offset: 0, 0 - index: -1 -goblin/pelvis - rotate: false - xy: 482, 45 - size: 62, 43 - orig: 62, 43 - offset: 0, 0 - index: -1 -goblin/right-arm - rotate: true - xy: 690, 2 - size: 23, 50 - orig: 23, 50 - offset: 0, 0 - index: -1 -goblin/right-foot - rotate: false - xy: 771, 58 - size: 63, 33 - orig: 63, 33 - offset: 0, 0 - index: -1 -goblin/right-hand - rotate: false - xy: 940, 56 - size: 36, 37 - orig: 36, 37 - offset: 0, 0 - index: -1 -goblin/right-lower-leg - rotate: true - xy: 482, 90 - size: 36, 76 - orig: 36, 76 - offset: 0, 0 - index: -1 -goblin/right-shoulder - rotate: true - xy: 602, 3 - size: 39, 45 - orig: 39, 45 - offset: 0, 0 - index: -1 -goblin/right-upper-leg - rotate: true - xy: 641, 57 - size: 34, 63 - orig: 34, 63 - offset: 0, 0 - index: -1 -goblin/torso - rotate: true - xy: 212, 34 - size: 68, 96 - orig: 68, 96 - offset: 0, 0 - index: -1 -goblin/undie-straps - rotate: false - xy: 380, 5 - size: 55, 19 - orig: 55, 19 - offset: 0, 0 - index: -1 -goblin/undies - rotate: false - xy: 174, 5 - size: 36, 29 - orig: 36, 29 - offset: 0, 0 - index: -1 -goblingirl/eyes-closed - rotate: false - xy: 269, 11 - size: 37, 21 - orig: 37, 21 - offset: 0, 0 - index: -1 -goblingirl/head - rotate: false - xy: 2, 21 - size: 103, 81 - orig: 103, 81 - offset: 0, 0 - index: -1 -goblingirl/left-arm - rotate: true - xy: 978, 56 - size: 37, 35 - orig: 37, 35 - offset: 0, 0 - index: -1 -goblingirl/left-foot - rotate: false - xy: 107, 3 - size: 65, 31 - orig: 65, 31 - offset: 0, 0 - index: -1 -goblingirl/left-hand - rotate: false - xy: 565, 2 - size: 35, 40 - orig: 35, 40 - offset: 0, 0 - index: -1 -goblingirl/left-lower-leg - rotate: true - xy: 785, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblingirl/left-shoulder - rotate: true - xy: 690, 27 - size: 28, 46 - orig: 28, 46 - offset: 0, 0 - index: -1 -goblingirl/left-upper-leg - rotate: true - xy: 857, 93 - size: 33, 70 - orig: 33, 70 - offset: 0, 0 - index: -1 -goblingirl/neck - rotate: false - xy: 528, 2 - size: 35, 41 - orig: 35, 41 - offset: 0, 0 - index: -1 -goblingirl/pelvis - rotate: false - xy: 546, 45 - size: 62, 43 - orig: 62, 43 - offset: 0, 0 - index: -1 -goblingirl/right-arm - rotate: false - xy: 452, 48 - size: 28, 50 - orig: 28, 50 - offset: 0, 0 - index: -1 -goblingirl/right-foot - rotate: false - xy: 836, 58 - size: 63, 33 - orig: 63, 33 - offset: 0, 0 - index: -1 -goblingirl/right-hand - rotate: true - xy: 771, 20 - size: 36, 37 - orig: 36, 37 - offset: 0, 0 - index: -1 -goblingirl/right-lower-leg - rotate: true - xy: 560, 90 - size: 36, 76 - orig: 36, 76 - offset: 0, 0 - index: -1 -goblingirl/right-shoulder - rotate: false - xy: 649, 10 - size: 39, 45 - orig: 39, 45 - offset: 0, 0 - index: -1 -goblingirl/right-upper-leg - rotate: true - xy: 706, 57 - size: 34, 63 - orig: 34, 63 - offset: 0, 0 - index: -1 -goblingirl/torso - rotate: false - xy: 310, 2 - size: 68, 96 - orig: 68, 96 - offset: 0, 0 - index: -1 -goblingirl/undie-straps - rotate: false - xy: 212, 13 - size: 55, 19 - orig: 55, 19 - offset: 0, 0 - index: -1 -goblingirl/undies - rotate: false - xy: 810, 27 - size: 36, 29 - orig: 36, 29 - offset: 0, 0 - index: -1 -shield - rotate: false - xy: 380, 26 - size: 70, 72 - orig: 70, 72 - offset: 0, 0 - index: -1 -spear - rotate: true - xy: 2, 104 - size: 22, 368 - orig: 22, 368 - offset: 0, 0 - index: -1 diff --git a/spine-cocos2dx/3/example/Resources/iphone/goblins-mesh.png b/spine-cocos2dx/3/example/Resources/iphone/goblins-mesh.png deleted file mode 100644 index a3daf0010..000000000 Binary files a/spine-cocos2dx/3/example/Resources/iphone/goblins-mesh.png and /dev/null differ diff --git a/spine-cocos2dx/3/example/Resources/iphone/spineboy.atlas b/spine-cocos2dx/3/example/Resources/iphone/spineboy.atlas deleted file mode 100644 index 19c0934b1..000000000 --- a/spine-cocos2dx/3/example/Resources/iphone/spineboy.atlas +++ /dev/null @@ -1,194 +0,0 @@ - -spineboy.png -format: RGBA8888 -filter: Linear,Linear -repeat: none -eye_indifferent - rotate: true - xy: 389, 5 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -eye_surprised - rotate: false - xy: 580, 34 - size: 56, 53 - orig: 56, 53 - offset: 0, 0 - index: -1 -front_bracer - rotate: false - xy: 732, 85 - size: 35, 48 - orig: 35, 48 - offset: 0, 0 - index: -1 -front_fist_closed - rotate: false - xy: 556, 91 - size: 45, 49 - orig: 45, 49 - offset: 0, 0 - index: -1 -front_fist_open - rotate: false - xy: 668, 32 - size: 52, 52 - orig: 52, 52 - offset: 0, 0 - index: -1 -front_foot - rotate: false - xy: 924, 201 - size: 76, 41 - orig: 76, 41 - offset: 0, 0 - index: -1 -front_foot_bend1 - rotate: false - xy: 845, 200 - size: 77, 42 - orig: 77, 42 - offset: 0, 0 - index: -1 -front_foot_bend2 - rotate: false - xy: 778, 186 - size: 65, 56 - orig: 65, 56 - offset: 0, 0 - index: -1 -front_shin - rotate: true - xy: 444, 91 - size: 49, 110 - orig: 49, 110 - offset: 0, 0 - index: -1 -front_thigh - rotate: true - xy: 603, 89 - size: 29, 67 - orig: 29, 67 - offset: 0, 0 - index: -1 -front_upper_arm - rotate: true - xy: 672, 86 - size: 32, 58 - orig: 32, 58 - offset: 0, 0 - index: -1 -goggles - rotate: false - xy: 444, 142 - size: 157, 100 - orig: 157, 100 - offset: 0, 0 - index: -1 -gun - rotate: false - xy: 603, 120 - size: 126, 122 - orig: 126, 122 - offset: 0, 0 - index: -1 -head - rotate: false - xy: 279, 63 - size: 163, 179 - orig: 163, 179 - offset: 0, 0 - index: -1 -mouth_grind - rotate: false - xy: 845, 163 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_oooo - rotate: false - xy: 842, 126 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -mouth_smile - rotate: false - xy: 769, 97 - size: 56, 35 - orig: 56, 35 - offset: 0, 0 - index: -1 -muzzle - rotate: false - xy: 2, 2 - size: 275, 240 - orig: 277, 240 - offset: 0, 0 - index: -1 -neck - rotate: false - xy: 903, 173 - size: 22, 25 - orig: 22, 25 - offset: 0, 0 - index: -1 -rear_bracer - rotate: false - xy: 722, 40 - size: 34, 43 - orig: 34, 43 - offset: 0, 0 - index: -1 -rear_foot - rotate: false - xy: 444, 11 - size: 68, 36 - orig: 68, 36 - offset: 0, 0 - index: -1 -rear_foot_bend1 - rotate: false - xy: 444, 49 - size: 70, 40 - orig: 70, 40 - offset: 0, 0 - index: -1 -rear_foot_bend2 - rotate: false - xy: 778, 134 - size: 62, 50 - orig: 62, 50 - offset: 0, 0 - index: -1 -rear_shin - rotate: false - xy: 731, 135 - size: 45, 107 - orig: 45, 107 - offset: 0, 0 - index: -1 -rear_thigh - rotate: true - xy: 516, 50 - size: 39, 62 - orig: 39, 62 - offset: 0, 0 - index: -1 -rear_upper_arm - rotate: false - xy: 638, 35 - size: 28, 52 - orig: 28, 52 - offset: 0, 0 - index: -1 -torso - rotate: true - xy: 279, 2 - size: 59, 108 - orig: 59, 108 - offset: 0, 0 - index: -1 diff --git a/spine-cocos2dx/3/example/Resources/iphone/spineboy.png b/spine-cocos2dx/3/example/Resources/iphone/spineboy.png deleted file mode 100644 index dce2fe3e2..000000000 Binary files a/spine-cocos2dx/3/example/Resources/iphone/spineboy.png and /dev/null differ diff --git a/spine-cocos2dx/3/example/proj.win32/main.cpp b/spine-cocos2dx/3/example/proj.win32/main.cpp deleted file mode 100644 index 90fbe00a6..000000000 --- a/spine-cocos2dx/3/example/proj.win32/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "main.h" -#include "../Classes/AppDelegate.h" - -USING_NS_CC; - -int APIENTRY _tWinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPTSTR lpCmdLine, - int nCmdShow) -{ - UNREFERENCED_PARAMETER(hPrevInstance); - UNREFERENCED_PARAMETER(lpCmdLine); - - // create the application instance - AppDelegate app; - - auto director = Director::getInstance(); - auto glview = GLViewImpl::create("Spine Example"); - glview->setFrameSize(960, 640); - director->setOpenGLView(glview); - return Application::getInstance()->run(); -} diff --git a/spine-cocos2dx/3/example/proj.win32/main.h b/spine-cocos2dx/3/example/proj.win32/main.h deleted file mode 100644 index 1eec81188..000000000 --- a/spine-cocos2dx/3/example/proj.win32/main.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __MAIN_H__ -#define __MAIN_H__ - -#define WIN32_LEAN_AND_MEAN - -#include -#include - -#endif // __MAIN_H__ diff --git a/spine-cocos2dx/3/example/proj.win32/spine-cocos2dx.sln b/spine-cocos2dx/3/example/proj.win32/spine-cocos2dx.sln deleted file mode 100644 index 755f7663f..000000000 --- a/spine-cocos2dx/3/example/proj.win32/spine-cocos2dx.sln +++ /dev/null @@ -1,102 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2012 for Windows Desktop -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcocos2d", "..\..\cocos2dx\cocos\2d\libcocos2d.vcxproj", "{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbox2d", "..\..\cocos2dx\external\Box2D\proj.win32\libbox2d.vcxproj", "{929480E7-23C0-4DF6-8456-096D71547116}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbullet", "..\..\cocos2dx\external\bullet\proj.win32\libbullet.vcxproj", "{012DFF48-A13F-4F52-B07B-F8B9D21CE95B}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "librecast", "..\..\cocos2dx\external\recast\proj.win32\librecast.vcxproj", "{41E34993-647E-4282-8384-4AB1AE31A452}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spine-cocos2dx", "spine-cocos2dx.vcxproj", "{DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spine-c", "..\..\..\..\spine-c\spine-c.vcxproj", "{5D74934A-7512-45EE-8402-7B95D3642E85}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|Mixed Platforms = Debug|Mixed Platforms - Debug|Win32 = Debug|Win32 - Release|Any CPU = Release|Any CPU - Release|Mixed Platforms = Release|Mixed Platforms - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.ActiveCfg = Debug|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.Build.0 = Debug|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Any CPU.ActiveCfg = Release|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Mixed Platforms.Build.0 = Release|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.ActiveCfg = Release|Win32 - {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.Build.0 = Release|Win32 - {929480E7-23C0-4DF6-8456-096D71547116}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {929480E7-23C0-4DF6-8456-096D71547116}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {929480E7-23C0-4DF6-8456-096D71547116}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {929480E7-23C0-4DF6-8456-096D71547116}.Debug|Win32.ActiveCfg = Debug|Win32 - {929480E7-23C0-4DF6-8456-096D71547116}.Debug|Win32.Build.0 = Debug|Win32 - {929480E7-23C0-4DF6-8456-096D71547116}.Release|Any CPU.ActiveCfg = Release|Win32 - {929480E7-23C0-4DF6-8456-096D71547116}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {929480E7-23C0-4DF6-8456-096D71547116}.Release|Mixed Platforms.Build.0 = Release|Win32 - {929480E7-23C0-4DF6-8456-096D71547116}.Release|Win32.ActiveCfg = Release|Win32 - {929480E7-23C0-4DF6-8456-096D71547116}.Release|Win32.Build.0 = Release|Win32 - {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Debug|Win32.ActiveCfg = Debug|Win32 - {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Debug|Win32.Build.0 = Debug|Win32 - {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Release|Any CPU.ActiveCfg = Release|Win32 - {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Release|Mixed Platforms.Build.0 = Release|Win32 - {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Release|Win32.ActiveCfg = Release|Win32 - {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Release|Win32.Build.0 = Release|Win32 - {41E34993-647E-4282-8384-4AB1AE31A452}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {41E34993-647E-4282-8384-4AB1AE31A452}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {41E34993-647E-4282-8384-4AB1AE31A452}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {41E34993-647E-4282-8384-4AB1AE31A452}.Debug|Win32.ActiveCfg = Debug|Win32 - {41E34993-647E-4282-8384-4AB1AE31A452}.Debug|Win32.Build.0 = Debug|Win32 - {41E34993-647E-4282-8384-4AB1AE31A452}.Release|Any CPU.ActiveCfg = Release|Win32 - {41E34993-647E-4282-8384-4AB1AE31A452}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {41E34993-647E-4282-8384-4AB1AE31A452}.Release|Mixed Platforms.Build.0 = Release|Win32 - {41E34993-647E-4282-8384-4AB1AE31A452}.Release|Win32.ActiveCfg = Release|Win32 - {41E34993-647E-4282-8384-4AB1AE31A452}.Release|Win32.Build.0 = Release|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Debug|Win32.ActiveCfg = Debug|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Debug|Win32.Build.0 = Debug|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Release|Any CPU.ActiveCfg = Release|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Release|Mixed Platforms.Build.0 = Release|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Release|Win32.ActiveCfg = Release|Win32 - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF}.Release|Win32.Build.0 = Release|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Mixed Platforms.Build.0 = Debug|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Win32.ActiveCfg = Debug|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Debug|Win32.Build.0 = Debug|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Any CPU.ActiveCfg = Release|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Mixed Platforms.ActiveCfg = Release|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Mixed Platforms.Build.0 = Release|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Win32.ActiveCfg = Release|Win32 - {5D74934A-7512-45EE-8402-7B95D3642E85}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection - GlobalSection(DPCodeReviewSolutionGUID) = preSolution - DPCodeReviewSolutionGUID = {00000000-0000-0000-0000-000000000000} - EndGlobalSection -EndGlobal diff --git a/spine-cocos2dx/3/example/proj.win32/spine-cocos2dx.vcxproj b/spine-cocos2dx/3/example/proj.win32/spine-cocos2dx.vcxproj deleted file mode 100644 index 4cfae091f..000000000 --- a/spine-cocos2dx/3/example/proj.win32/spine-cocos2dx.vcxproj +++ /dev/null @@ -1,180 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {DB4C84B9-AC6D-46A1-B7E6-A77FE4515ACF} - spine - Win32Proj - spine-cocos2dx - - - - Application - Unicode - true - v100 - v110 - v110_xp - - - Application - Unicode - v100 - v110 - v110_xp - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.40219.1 - $(SolutionDir)$(Configuration).win32\ - $(Configuration).win32\ - true - $(SolutionDir)$(Configuration).win32\ - $(Configuration).win32\ - false - AllRules.ruleset - - - AllRules.ruleset - - - - - $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;$(LibraryPath) - - - $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;$(LibraryPath) - - - - Disabled - $(ProjectDir)..\Classes;$(ProjectDir)..\..\src;$(ProjectDir)..\..\..\..\spine-c\include;%(AdditionalIncludeDirectories) - WIN32;_DEBUG;_WINDOWS;COCOS2D_DEBUG=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - - - Level3 - EditAndContinue - 4267;4251;4244;%(DisableSpecificWarnings) - CompileAsCpp - - - %(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Windows - MachineX86 - - - false - libcmt.lib;msvcrt.lib;libcmtd.lib - - - - - - - - - MaxSpeed - true - $(ProjectDir)..\..\..\..\cocos2dx;$(ProjectDir)..\..\..\..\cocos2dx\include;$(ProjectDir)..\..\..\..\cocos2dx\kazmath\include;$(ProjectDir)..\..\..\..\cocos2dx\platform\win32;$(ProjectDir)..\..\..\..\cocos2dx\platform\third_party\win32\OGLES;..\Classes;%(AdditionalIncludeDirectories) - WIN32;NDEBUG;_WINDOWS;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) - MultiThreadedDLL - true - - - Level3 - ProgramDatabase - 4267;4251;4244;%(DisableSpecificWarnings) - - - opengl32.lib;glew32.lib;libcocos2d.lib;%(AdditionalDependencies) - $(OutDir)$(ProjectName).exe - $(OutDir);%(AdditionalLibraryDirectories) - true - Windows - true - true - MachineX86 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {5d74934a-7512-45ee-8402-7b95d3642e85} - - - {98a51ba8-fc3a-415b-ac8f-8c7bd464e93e} - - - {929480e7-23c0-4df6-8456-096d71547116} - - - {012dff48-a13f-4f52-b07b-f8b9d21ce95b} - - - {41e34993-647e-4282-8384-4ab1ae31a452} - - - - - - \ No newline at end of file diff --git a/spine-cocos2dx/3/example/proj.win32/spine-cocos2dx.vcxproj.filters b/spine-cocos2dx/3/example/proj.win32/spine-cocos2dx.vcxproj.filters deleted file mode 100644 index 539f6f37d..000000000 --- a/spine-cocos2dx/3/example/proj.win32/spine-cocos2dx.vcxproj.filters +++ /dev/null @@ -1,93 +0,0 @@ - - - - - {ef769de4-53ac-449d-92e6-e67ec8d7414e} - - - {0dcd52ca-d521-4ba1-a1fa-c0d58a2df402} - - - {d38e21b5-cae6-46c6-99c4-33c99bc0383d} - - - - - win32 - - - Classes - - - Classes - - - Classes - - - Classes - - - Classes - - - src - - - src - - - src - - - Classes - - - src - - - src - - - src - - - - - win32 - - - Classes - - - Classes - - - Classes - - - Classes - - - src - - - src - - - src - - - Classes - - - src - - - src - - - src - - - \ No newline at end of file diff --git a/spine-cocos2dx/CMakeLists.txt b/spine-cocos2dx/CMakeLists.txt new file mode 100644 index 000000000..f491a0380 --- /dev/null +++ b/spine-cocos2dx/CMakeLists.txt @@ -0,0 +1,16 @@ +set(EXAMPLE_DIR "${CMAKE_CURRENT_LIST_DIR}/example") +if (NOT EXISTS ${EXAMPLE_DIR}/cocos2d) + message("Downloading cocos2dx, this may take some time!") + file(DOWNLOAD "http://www.cocos2d-x.org/filedown/start/334" "${EXAMPLE_DIR}/cocos2dx.zip") + execute_process( + COMMAND ${CMAKE_COMMAND} -E tar x ${EXAMPLE_DIR}/cocos2dx.zip + WORKING_DIRECTORY ${EXAMPLE_DIR} + ) + execute_process( + COMMAND ${CMAKE_COMMAND} -E rename + "${EXAMPLE_DIR}/cocos2d-x-3.11.1" "${EXAMPLE_DIR}/cocos2d" + ) + execute_process( + COMMAND ${CMAKE_COMMAND} -E remove_directory "${EXAMPLE_DIR}/cocos2d/cocos/editor-support/spine" + ) +endif() \ No newline at end of file diff --git a/spine-cocos2d-iphone/3/LICENSE b/spine-cocos2dx/LICENSE similarity index 100% rename from spine-cocos2d-iphone/3/LICENSE rename to spine-cocos2dx/LICENSE diff --git a/spine-cocos2dx/README.md b/spine-cocos2dx/README.md new file mode 100644 index 000000000..a032a783a --- /dev/null +++ b/spine-cocos2dx/README.md @@ -0,0 +1,65 @@ +# spine-cocos2dx v3.x + +The spine-cocos2dx runtime provides functionality to load, manipulate and render [Spine](http://esotericsoftware.com) skeletal animation data using [cocos2d-x](http://www.cocos2d-x.org/). spine-cocos2dx is based on [spine-c](https://github.com/EsotericSoftware/spine-runtimes/tree/master/spine-c). + +## Licensing + +This Spine Runtime may only be used for personal or internal use, typically to evaluate Spine before purchasing. If you would like to incorporate a Spine Runtime into your applications, distribute software containing a Spine Runtime, or modify a Spine Runtime, then you will need a valid [Spine license](https://esotericsoftware.com/spine-purchase). Please see the [Spine Runtimes Software License](https://github.com/EsotericSoftware/spine-runtimes/blob/master/LICENSE) for detailed information. + +The Spine Runtimes are developed with the intent to be used with data exported from Spine. By purchasing Spine, `Section 2` of the [Spine Software License](https://esotericsoftware.com/files/license.txt) grants the right to create and distribute derivative works of the Spine Runtimes. + +## Spine version + +spine-cocos2dx works with data exported from Spine version 3.2.01. + +spine-cocos2dx supports all Spine features. + +spine-cocos2dx does not yet support loading the binary format. + +## Setup + +The setup for cocos2d-x differs from most other Spine Runtimes because the cocos2d-x distribution includes a copy of the Spine Runtime files. This is not ideal because these files may be old and fail to work with the latest Spine editor. Also it means if cocos2d-x is updated, you may get newer Spine Runtime files which can break your application if you are not using the latest Spine editor. For these reasons, we have requested cocos2d-x to cease distributing the Spine Runtime files, but they continue to do so. The following instructions allow you to use the official Spine cocos2d-x runtime with your cocos2d-x project. + +1. Create a new cocos2d-x project. See [the cocos2d-x documentation](http://www.cocos2d-x.org/docs/static-pages/installation.html) +2. Delete the folder `cocos2d/cocos/editor-support/spine`. This will remove the outdated Spine cocos2d-x runtime shipped by cocos2d-x. +3. Open your project in your IDE of choice, then open the cocos2d_libs sub project and delete the `editor-support/spine` group. This will remove the outdated Spine cocos2d-x runtime shipped by cocos2d-x from your build. +3. Download the Spine Runtimes source using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip) +4. Add the sources from `spine-c/src/spine` and `spine-cocos2dx/src/spine` to your project +4. Add the folders `spine-c/include` and `spine-cocos2dx/src` to your header search path. Note that includes are specified as `#inclue `, so the `spine` directory cannot be omitted when copying the source files. + +## Example +The Spine cocos2d-x example works on Windows and Mac OS X. + +### Windows +1. Install [Visual Studio 2015 Community](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx) +2. Install CMake via the [Windows installer package](https://cmake.org/download/). +3. Download the Spine Runtimes repository using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip) +4. Run CMake GUI from the start menu +5. Click `Browse Source` and select the directory `spine-runtimes` +6. Click `Browse Build` and select the `spine-runtimes/spine-cocos2dx/build` directory. You can create the `build` folder directly in the file dialog via `New Folder`. +7. Click `Configure`. This will download the cocos2d-x dependency and wire it up with the example source code in `spine-runtimes/spine-cocos2dx/example`. The download is 400mb, so get yourself a cup of tea. +8. Open the `spine-runtimes/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.sln` file in Visual Studio 2015. Visual Studio may ask you to install the Windows XP/7 SDK, which you should install. +9. Expand the cocos2d_libs sub project and delete the `editor-support/spine` group. This will remove the outdated Spine cocos2d-x runtime shipped by cocos2d-x from your build. +9. Right click the `spine-cocos2d-x` project in the solution explorer and select `Set as Startup Project` from the context menu +10. Click `Local Windows Debugger` to run the example + +### Mac OS X +1. Install [Xcode](https://developer.apple.com/xcode/) +2. Install [Homebrew](http://brew.sh/) +3. Open a terminal and install CMake via `brew install cmake` +3. Download the Spine Runtimes repository using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip) +4. Open a terminal, and `cd` into the `spine-runtimes/spine-cocos2dx` folder +5. Type `mkdir build && cd build && cmake ../..`. This will download the cocos2d-x dependency and wire it up with the example source code in `spine-runtimes/spine-cocos2dx/example`. The download is 400mb, so get yourself a cup of tea. +6. Open the Xcode project in `spine-runtimes/spine-cocos2dx/example/proj.ios_mac` +7. Expand the `cocos2d_libs.xcodeproj` sub project, delete the group `editor-support/spine`. This will remove the +8. Click the `Run` button or type `CMD+R` to run the example + +## Notes + +- Images are premultiplied by cocos2d-x, so the Spine atlas images should *not* use premultiplied alpha. + +## Examples + +- [Raptor](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/3/example/Classes/RaptorExample.cpp) +- [Spineboy](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/3/example/Classes/SpineboyExample.cpp) +- [Golbins](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-cocos2dx/3/example/Classes/GoblinsExample.cpp) diff --git a/spine-cocos2dx/example/.cocos-project.json b/spine-cocos2dx/example/.cocos-project.json new file mode 100644 index 000000000..bb5550f3e --- /dev/null +++ b/spine-cocos2dx/example/.cocos-project.json @@ -0,0 +1,4 @@ +{ + "engine_version": "cocos2d-x-3.11.1", + "project_type": "cpp" +} \ No newline at end of file diff --git a/spine-cocos2dx/example/CMakeLists.txt b/spine-cocos2dx/example/CMakeLists.txt new file mode 100644 index 000000000..594c57899 --- /dev/null +++ b/spine-cocos2dx/example/CMakeLists.txt @@ -0,0 +1,169 @@ +#/**************************************************************************** +# Copyright (c) 2013-2014 cocos2d-x.org +# Copyright (c) 2015 Chukong Technologies Inc. +# +# http://www.cocos2d-x.org +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# ****************************************************************************/ +cmake_policy(SET CMP0017 NEW) + +cmake_minimum_required(VERSION 3.1) + +set(APP_NAME MyGame) +project (${APP_NAME}) + +set(COCOS2D_ROOT ${CMAKE_SOURCE_DIR}/cocos2d) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${COCOS2D_ROOT}/cmake/Modules/") +include(CocosBuildHelpers) + +# libcocos2d +set(BUILD_CPP_EMPTY_TEST OFF CACHE BOOL "turn off build cpp-empty-test") +set(BUILD_CPP_TESTS OFF CACHE BOOL "turn off build cpp-tests") +set(BUILD_LUA_LIBS OFF CACHE BOOL "turn off build lua related targets") +set(BUILD_JS_LIBS OFF CACHE BOOL "turn off build js related targets") +add_subdirectory(${COCOS2D_ROOT}) + +# Some macro definitions +if(WINDOWS) + if(BUILD_SHARED_LIBS) + ADD_DEFINITIONS (-D_USRDLL -D_EXPORT_DLL_ -D_USEGUIDLL -D_USREXDLL -D_USRSTUDIODLL) + else() + ADD_DEFINITIONS (-DCC_STATIC) + endif() + + ADD_DEFINITIONS (-DCOCOS2DXWIN32_EXPORTS -D_WINDOWS -DWIN32 -D_WIN32) + set(PLATFORM_FOLDER win32) +elseif(MACOSX OR APPLE) + ADD_DEFINITIONS (-DCC_TARGET_OS_MAC) + ADD_DEFINITIONS (-DUSE_FILE32API) + set(PLATFORM_FOLDER mac) +elseif(LINUX) + ADD_DEFINITIONS(-DLINUX) + set(PLATFORM_FOLDER linux) +elseif(ANDROID) + ADD_DEFINITIONS (-DUSE_FILE32API) + set(PLATFORM_FOLDER android) +else() + message( FATAL_ERROR "Unsupported platform, CMake will exit" ) +endif() + + +# Compiler options +if(MSVC) + ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS + -wd4251 -wd4244 -wd4334 -wd4005 -wd4820 -wd4710 + -wd4514 -wd4056 -wd4996 -wd4099) +else() + set(CMAKE_C_FLAGS_DEBUG "-g -Wall -DCOCOS2D_DEBUG=1") + set(CMAKE_CXX_FLAGS_DEBUG ${CMAKE_C_FLAGS_DEBUG}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-deprecated-declarations -Wno-reorder") + if(CLANG) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + endif() +endif(MSVC) + + +set(PLATFORM_SPECIFIC_SRC) +set(PLATFORM_SPECIFIC_HEADERS) + +if(MACOSX OR APPLE) + set(PLATFORM_SPECIFIC_SRC + proj.ios_mac/mac/main.cpp + ) +elseif(LINUX) + set(PLATFORM_SPECIFIC_SRC + proj.linux/main.cpp + ) +elseif ( WIN32 ) + set(PLATFORM_SPECIFIC_SRC + proj.win32/main.cpp + ) + set(PLATFORM_SPECIFIC_HEADERS + proj.win32/main.h + proj.win32/resource.h + ) +elseif(ANDROID) + set(PLATFORM_SPECIFIC_SRC + proj.android-studio/app/jni/hellocpp/main.cpp + ) +endif() + +include_directories( + /usr/local/include/GLFW + /usr/include/GLFW + ${COCOS2D_ROOT}/cocos + ${COCOS2D_ROOT}/cocos/platform + ${COCOS2D_ROOT}/cocos/audio/include/ + Classes +) +if ( WIN32 ) + include_directories( + ${COCOS2D_ROOT}/external/glfw3/include/win32 + ${COCOS2D_ROOT}/external/win32-specific/gles/include/OGLES +) +endif( WIN32 ) + +set(GAME_SRC + Classes/AppDelegate.cpp + Classes/HelloWorldScene.cpp + ${PLATFORM_SPECIFIC_SRC} +) + +set(GAME_HEADERS + Classes/AppDelegate.h + Classes/HelloWorldScene.h + ${PLATFORM_SPECIFIC_HEADERS} +) + +if( ANDROID ) + add_library(${APP_NAME} SHARED ${GAME_SRC} ${GAME_HEADERS}) + IF(CMAKE_BUILD_TYPE MATCHES RELEASE) + ADD_CUSTOM_COMMAND(TARGET ${APP_NAME} POST_BUILD COMMAND ${CMAKE_STRIP} lib${APP_NAME}.so) + ENDIF() +else() + add_executable(${APP_NAME} ${GAME_SRC} ${GAME_HEADERS}) +endif() + +target_link_libraries(${APP_NAME} cocos2d) + +set(APP_BIN_DIR "${CMAKE_BINARY_DIR}/bin") + +set_target_properties(${APP_NAME} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${APP_BIN_DIR}") + +if ( WIN32 ) + #also copying dlls to binary directory for the executable to run + pre_build(${APP_NAME} + COMMAND ${CMAKE_COMMAND} -E remove_directory ${APP_BIN_DIR}/Resources + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/Resources ${APP_BIN_DIR}/Resources + COMMAND ${CMAKE_COMMAND} -E copy ${COCOS2D_ROOT}/external/win32-specific/gles/prebuilt/glew32.dll ${APP_BIN_DIR}/${CMAKE_BUILD_TYPE} + COMMAND ${CMAKE_COMMAND} -E copy ${COCOS2D_ROOT}/external/win32-specific/zlib/prebuilt/zlib1.dll ${APP_BIN_DIR}/${CMAKE_BUILD_TYPE} + ) +elseif( ANDROID ) + +else() + pre_build(${APP_NAME} + COMMAND ${CMAKE_COMMAND} -E remove_directory ${APP_BIN_DIR}/Resources + COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/Resources ${APP_BIN_DIR}/Resources + ) + +endif() diff --git a/spine-cocos2dx/3/example/Classes/AppDelegate.cpp b/spine-cocos2dx/example/Classes/AppDelegate.cpp similarity index 100% rename from spine-cocos2dx/3/example/Classes/AppDelegate.cpp rename to spine-cocos2dx/example/Classes/AppDelegate.cpp diff --git a/spine-cocos2dx/3/example/Classes/AppDelegate.h b/spine-cocos2dx/example/Classes/AppDelegate.h similarity index 100% rename from spine-cocos2dx/3/example/Classes/AppDelegate.h rename to spine-cocos2dx/example/Classes/AppDelegate.h diff --git a/spine-cocos2dx/3/example/Classes/AppMacros.h b/spine-cocos2dx/example/Classes/AppMacros.h similarity index 100% rename from spine-cocos2dx/3/example/Classes/AppMacros.h rename to spine-cocos2dx/example/Classes/AppMacros.h diff --git a/spine-cocos2dx/3/example/Classes/BatchingExample.cpp b/spine-cocos2dx/example/Classes/BatchingExample.cpp similarity index 100% rename from spine-cocos2dx/3/example/Classes/BatchingExample.cpp rename to spine-cocos2dx/example/Classes/BatchingExample.cpp diff --git a/spine-cocos2dx/3/example/Classes/BatchingExample.h b/spine-cocos2dx/example/Classes/BatchingExample.h similarity index 100% rename from spine-cocos2dx/3/example/Classes/BatchingExample.h rename to spine-cocos2dx/example/Classes/BatchingExample.h diff --git a/spine-cocos2dx/3/example/Classes/GoblinsExample.cpp b/spine-cocos2dx/example/Classes/GoblinsExample.cpp similarity index 100% rename from spine-cocos2dx/3/example/Classes/GoblinsExample.cpp rename to spine-cocos2dx/example/Classes/GoblinsExample.cpp diff --git a/spine-cocos2dx/3/example/Classes/GoblinsExample.h b/spine-cocos2dx/example/Classes/GoblinsExample.h similarity index 100% rename from spine-cocos2dx/3/example/Classes/GoblinsExample.h rename to spine-cocos2dx/example/Classes/GoblinsExample.h diff --git a/spine-cocos2dx/3/example/Classes/RaptorExample.cpp b/spine-cocos2dx/example/Classes/RaptorExample.cpp similarity index 100% rename from spine-cocos2dx/3/example/Classes/RaptorExample.cpp rename to spine-cocos2dx/example/Classes/RaptorExample.cpp diff --git a/spine-cocos2dx/3/example/Classes/RaptorExample.h b/spine-cocos2dx/example/Classes/RaptorExample.h similarity index 100% rename from spine-cocos2dx/3/example/Classes/RaptorExample.h rename to spine-cocos2dx/example/Classes/RaptorExample.h diff --git a/spine-cocos2dx/3/example/Classes/SimpleCommand.cpp b/spine-cocos2dx/example/Classes/SimpleCommand.cpp similarity index 100% rename from spine-cocos2dx/3/example/Classes/SimpleCommand.cpp rename to spine-cocos2dx/example/Classes/SimpleCommand.cpp diff --git a/spine-cocos2dx/3/example/Classes/SimpleCommand.h b/spine-cocos2dx/example/Classes/SimpleCommand.h similarity index 100% rename from spine-cocos2dx/3/example/Classes/SimpleCommand.h rename to spine-cocos2dx/example/Classes/SimpleCommand.h diff --git a/spine-cocos2dx/3/example/Classes/SpineboyExample.cpp b/spine-cocos2dx/example/Classes/SpineboyExample.cpp similarity index 100% rename from spine-cocos2dx/3/example/Classes/SpineboyExample.cpp rename to spine-cocos2dx/example/Classes/SpineboyExample.cpp diff --git a/spine-cocos2dx/3/example/Classes/SpineboyExample.h b/spine-cocos2dx/example/Classes/SpineboyExample.h similarity index 100% rename from spine-cocos2dx/3/example/Classes/SpineboyExample.h rename to spine-cocos2dx/example/Classes/SpineboyExample.h diff --git a/spine-cocos2d-iphone/3/Resources/goblins-mesh.json b/spine-cocos2dx/example/Resources/common/goblins-mesh.json similarity index 100% rename from spine-cocos2d-iphone/3/Resources/goblins-mesh.json rename to spine-cocos2dx/example/Resources/common/goblins-mesh.json diff --git a/spine-cocos2dx/3/example/Resources/common/raptor.atlas b/spine-cocos2dx/example/Resources/common/raptor.atlas similarity index 100% rename from spine-cocos2dx/3/example/Resources/common/raptor.atlas rename to spine-cocos2dx/example/Resources/common/raptor.atlas diff --git a/spine-cocos2dx/3/example/Resources/common/raptor.json b/spine-cocos2dx/example/Resources/common/raptor.json similarity index 100% rename from spine-cocos2dx/3/example/Resources/common/raptor.json rename to spine-cocos2dx/example/Resources/common/raptor.json diff --git a/spine-cocos2dx/3/example/Resources/common/raptor.png b/spine-cocos2dx/example/Resources/common/raptor.png similarity index 100% rename from spine-cocos2dx/3/example/Resources/common/raptor.png rename to spine-cocos2dx/example/Resources/common/raptor.png diff --git a/spine-cocos2d-iphone/3/Resources/spineboy.json b/spine-cocos2dx/example/Resources/common/spineboy.json similarity index 100% rename from spine-cocos2d-iphone/3/Resources/spineboy.json rename to spine-cocos2dx/example/Resources/common/spineboy.json diff --git a/spine-cocos2dx/2/example/Resources/common/sprite.png b/spine-cocos2dx/example/Resources/common/sprite.png similarity index 100% rename from spine-cocos2dx/2/example/Resources/common/sprite.png rename to spine-cocos2dx/example/Resources/common/sprite.png diff --git a/spine-cocos2d-iphone/3/Resources/goblins-mesh.atlas b/spine-cocos2dx/example/Resources/ipad-retina/goblins-mesh.atlas similarity index 100% rename from spine-cocos2d-iphone/3/Resources/goblins-mesh.atlas rename to spine-cocos2dx/example/Resources/ipad-retina/goblins-mesh.atlas diff --git a/spine-cocos2d-iphone/3/Resources/goblins-mesh.png b/spine-cocos2dx/example/Resources/ipad-retina/goblins-mesh.png similarity index 100% rename from spine-cocos2d-iphone/3/Resources/goblins-mesh.png rename to spine-cocos2dx/example/Resources/ipad-retina/goblins-mesh.png diff --git a/spine-cocos2d-iphone/2/Resources/spineboy.atlas b/spine-cocos2dx/example/Resources/ipad-retina/spineboy.atlas similarity index 100% rename from spine-cocos2d-iphone/2/Resources/spineboy.atlas rename to spine-cocos2dx/example/Resources/ipad-retina/spineboy.atlas diff --git a/spine-cocos2d-iphone/3/Resources/spineboy.png b/spine-cocos2dx/example/Resources/ipad-retina/spineboy.png similarity index 100% rename from spine-cocos2d-iphone/3/Resources/spineboy.png rename to spine-cocos2dx/example/Resources/ipad-retina/spineboy.png diff --git a/spine-cocos2dx/2/example/Resources/ipad-retina/goblins-mesh.atlas b/spine-cocos2dx/example/Resources/ipad/goblins-mesh.atlas similarity index 100% rename from spine-cocos2dx/2/example/Resources/ipad-retina/goblins-mesh.atlas rename to spine-cocos2dx/example/Resources/ipad/goblins-mesh.atlas diff --git a/spine-cocos2dx/2/example/Resources/ipad-retina/goblins-mesh.png b/spine-cocos2dx/example/Resources/ipad/goblins-mesh.png similarity index 100% rename from spine-cocos2dx/2/example/Resources/ipad-retina/goblins-mesh.png rename to spine-cocos2dx/example/Resources/ipad/goblins-mesh.png diff --git a/spine-cocos2d-iphone/3/Resources/spineboy.atlas b/spine-cocos2dx/example/Resources/ipad/spineboy.atlas similarity index 100% rename from spine-cocos2d-iphone/3/Resources/spineboy.atlas rename to spine-cocos2dx/example/Resources/ipad/spineboy.atlas diff --git a/spine-cocos2dx/2/example/Resources/ipad-retina/spineboy.png b/spine-cocos2dx/example/Resources/ipad/spineboy.png similarity index 100% rename from spine-cocos2dx/2/example/Resources/ipad-retina/spineboy.png rename to spine-cocos2dx/example/Resources/ipad/spineboy.png diff --git a/spine-cocos2dx/2/example/Resources/ipad/goblins-mesh.atlas b/spine-cocos2dx/example/Resources/iphone-retina/goblins-mesh.atlas similarity index 100% rename from spine-cocos2dx/2/example/Resources/ipad/goblins-mesh.atlas rename to spine-cocos2dx/example/Resources/iphone-retina/goblins-mesh.atlas diff --git a/spine-cocos2dx/2/example/Resources/ipad/goblins-mesh.png b/spine-cocos2dx/example/Resources/iphone-retina/goblins-mesh.png similarity index 100% rename from spine-cocos2dx/2/example/Resources/ipad/goblins-mesh.png rename to spine-cocos2dx/example/Resources/iphone-retina/goblins-mesh.png diff --git a/spine-cocos2dx/2/example/Resources/ipad-retina/spineboy.atlas b/spine-cocos2dx/example/Resources/iphone-retina/spineboy.atlas similarity index 100% rename from spine-cocos2dx/2/example/Resources/ipad-retina/spineboy.atlas rename to spine-cocos2dx/example/Resources/iphone-retina/spineboy.atlas diff --git a/spine-cocos2dx/2/example/Resources/ipad/spineboy.png b/spine-cocos2dx/example/Resources/iphone-retina/spineboy.png similarity index 100% rename from spine-cocos2dx/2/example/Resources/ipad/spineboy.png rename to spine-cocos2dx/example/Resources/iphone-retina/spineboy.png diff --git a/spine-cocos2dx/2/example/Resources/iphone-retina/goblins-mesh.atlas b/spine-cocos2dx/example/Resources/iphone/goblins-mesh.atlas similarity index 100% rename from spine-cocos2dx/2/example/Resources/iphone-retina/goblins-mesh.atlas rename to spine-cocos2dx/example/Resources/iphone/goblins-mesh.atlas diff --git a/spine-cocos2dx/2/example/Resources/iphone-retina/goblins-mesh.png b/spine-cocos2dx/example/Resources/iphone/goblins-mesh.png similarity index 100% rename from spine-cocos2dx/2/example/Resources/iphone-retina/goblins-mesh.png rename to spine-cocos2dx/example/Resources/iphone/goblins-mesh.png diff --git a/spine-cocos2dx/2/example/Resources/ipad/spineboy.atlas b/spine-cocos2dx/example/Resources/iphone/spineboy.atlas similarity index 100% rename from spine-cocos2dx/2/example/Resources/ipad/spineboy.atlas rename to spine-cocos2dx/example/Resources/iphone/spineboy.atlas diff --git a/spine-cocos2dx/2/example/Resources/iphone-retina/spineboy.png b/spine-cocos2dx/example/Resources/iphone/spineboy.png similarity index 100% rename from spine-cocos2dx/2/example/Resources/iphone-retina/spineboy.png rename to spine-cocos2dx/example/Resources/iphone/spineboy.png diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/AppController.h b/spine-cocos2dx/example/proj.ios_mac/ios/AppController.h new file mode 100644 index 000000000..978e6e36c --- /dev/null +++ b/spine-cocos2dx/example/proj.ios_mac/ios/AppController.h @@ -0,0 +1,12 @@ +#import + +@class RootViewController; + +@interface AppController : NSObject { + UIWindow *window; +} + +@property(nonatomic, readonly) RootViewController* viewController; + +@end + diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/AppController.mm b/spine-cocos2dx/example/proj.ios_mac/ios/AppController.mm new file mode 100644 index 000000000..4bb313aa6 --- /dev/null +++ b/spine-cocos2dx/example/proj.ios_mac/ios/AppController.mm @@ -0,0 +1,149 @@ +/**************************************************************************** + Copyright (c) 2010 cocos2d-x.org + + http://www.cocos2d-x.org + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ + +#import "AppController.h" +#import "platform/ios/CCEAGLView-ios.h" +#import "cocos2d.h" +#import "AppDelegate.h" +#import "RootViewController.h" + +@implementation AppController + +#pragma mark - +#pragma mark Application lifecycle + +// cocos2d application instance +static AppDelegate s_sharedApplication; + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + + cocos2d::Application *app = cocos2d::Application::getInstance(); + app->initGLContextAttrs(); + cocos2d::GLViewImpl::convertAttrs(); + + // Override point for customization after application launch. + + // Add the view controller's view to the window and display. + window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; + + // Init the CCEAGLView + CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [window bounds] + pixelFormat: (NSString*)cocos2d::GLViewImpl::_pixelFormat + depthFormat: cocos2d::GLViewImpl::_depthFormat + preserveBackbuffer: NO + sharegroup: nil + multiSampling: NO + numberOfSamples: 0 ]; + + // Enable or disable multiple touches + [eaglView setMultipleTouchEnabled:NO]; + + // Use RootViewController manage CCEAGLView + _viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil]; + _viewController.wantsFullScreenLayout = YES; + _viewController.view = eaglView; + + // Set RootViewController to window + if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0) + { + // warning: addSubView doesn't work on iOS6 + [window addSubview: _viewController.view]; + } + else + { + // use this method on ios6 + [window setRootViewController:_viewController]; + } + + [window makeKeyAndVisible]; + + [[UIApplication sharedApplication] setStatusBarHidden:true]; + + // IMPORTANT: Setting the GLView should be done after creating the RootViewController + cocos2d::GLView *glview = cocos2d::GLViewImpl::createWithEAGLView(eaglView); + cocos2d::Director::getInstance()->setOpenGLView(glview); + + app->run(); + + return YES; +} + + +- (void)applicationWillResignActive:(UIApplication *)application { + /* + Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. + */ + //We don't need to call this method any more. It will interupt user defined game pause&resume logic + /* cocos2d::Director::getInstance()->pause(); */ +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + /* + Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + */ + //We don't need to call this method any more. It will interupt user defined game pause&resume logic + /* cocos2d::Director::getInstance()->resume(); */ +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + /* + Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + If your application supports background execution, called instead of applicationWillTerminate: when the user quits. + */ + cocos2d::Application::getInstance()->applicationDidEnterBackground(); +} + +- (void)applicationWillEnterForeground:(UIApplication *)application { + /* + Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background. + */ + cocos2d::Application::getInstance()->applicationWillEnterForeground(); +} + +- (void)applicationWillTerminate:(UIApplication *)application { + /* + Called when the application is about to terminate. + See also applicationDidEnterBackground:. + */ +} + + +#pragma mark - +#pragma mark Memory management + +- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { + /* + Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later. + */ +} + + +- (void)dealloc { + [window release]; + [super dealloc]; +} + + +@end diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Default-568h@2x.png b/spine-cocos2dx/example/proj.ios_mac/ios/Default-568h@2x.png new file mode 100644 index 000000000..66c6d1cea Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Default-568h@2x.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Default-667h@2x.png b/spine-cocos2dx/example/proj.ios_mac/ios/Default-667h@2x.png new file mode 100644 index 000000000..a0f61ec8e Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Default-667h@2x.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Default-736h@3x.png b/spine-cocos2dx/example/proj.ios_mac/ios/Default-736h@3x.png new file mode 100644 index 000000000..b685a04c7 Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Default-736h@3x.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Default-Landscape~ipad.png b/spine-cocos2dx/example/proj.ios_mac/ios/Default-Landscape~ipad.png new file mode 100644 index 000000000..e41c3192b Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Default-Landscape~ipad.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Default.png b/spine-cocos2dx/example/proj.ios_mac/ios/Default.png new file mode 100644 index 000000000..117d6e540 Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Default.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Default@2x.png b/spine-cocos2dx/example/proj.ios_mac/ios/Default@2x.png new file mode 100644 index 000000000..5e1af61e4 Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Default@2x.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-100.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-100.png new file mode 100644 index 000000000..ef38d4500 Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-100.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-114.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-114.png new file mode 100644 index 000000000..c3807861a Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-114.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-120.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-120.png new file mode 100644 index 000000000..a5b49ccbb Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-120.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-144.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-144.png new file mode 100644 index 000000000..1526615c0 Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-144.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-152.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-152.png new file mode 100644 index 000000000..8aa82506d Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-152.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-180.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-180.png new file mode 100644 index 000000000..d4bc53132 Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-180.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-29.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-29.png new file mode 100644 index 000000000..0500184c8 Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-29.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-40.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-40.png new file mode 100644 index 000000000..775685dac Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-40.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-50.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-50.png new file mode 100644 index 000000000..ac381bc20 Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-50.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-57.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-57.png new file mode 100644 index 000000000..4fcc6fddf Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-57.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-58.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-58.png new file mode 100644 index 000000000..f0f8b7fe9 Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-58.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-72.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-72.png new file mode 100644 index 000000000..2c573c8df Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-72.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-76.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-76.png new file mode 100644 index 000000000..8a1fa1850 Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-76.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-80.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-80.png new file mode 100644 index 000000000..d9c7ab446 Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-80.png differ diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Icon-87.png b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-87.png new file mode 100644 index 000000000..8968cf4ac Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/ios/Icon-87.png differ diff --git a/spine-cocos2d-iphone/3/Resources-ios/Info.plist b/spine-cocos2dx/example/proj.ios_mac/ios/Info.plist similarity index 51% rename from spine-cocos2d-iphone/3/Resources-ios/Info.plist rename to spine-cocos2dx/example/proj.ios_mac/ios/Info.plist index 2d687c269..bb4d1572d 100644 --- a/spine-cocos2d-iphone/3/Resources-ios/Info.plist +++ b/spine-cocos2dx/example/proj.ios_mac/ios/Info.plist @@ -9,50 +9,67 @@ CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - + Icon-57.png + CFBundleIdentifier + com.esotericsoftware.spine CFBundleIconFiles - Icon.png - Icon@2x.png - Icon-72.png - Icon-Small-50.png - Icon-Small.png - Icon-Small@2x.png + Icon-29 + Icon-40 + Icon-50 + Icon-57 + Icon-58 + Icon-72 + Icon-76 + Icon-80 + Icon-87 + Icon-100 + Icon-114 + Icon-120 + Icon-144 + Icon-152 + Icon-180 + + CFBundleIconFiles~ipad + + Icon-29 + Icon-40 + Icon-50 + Icon-57 + Icon-58 + Icon-72 + Icon-76 + Icon-80 + Icon-87 + Icon-100 + Icon-114 + Icon-120 + Icon-144 + Icon-152 + Icon-180 - CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:rfc1034identifier} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType APPL + CFBundleShortVersionString + CFBundleSignature ???? CFBundleVersion 1.0 LSRequiresIPhoneOS + UIAppFonts + UIPrerenderedIcon - UIStatusBarHidden - - UIRequiredDeviceCapabilities - - accelerometer - - opengles-2 - - UISupportedInterfaceOrientations - UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - - UISupportedInterfaceOrientations~ipad - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/Prefix.pch b/spine-cocos2dx/example/proj.ios_mac/ios/Prefix.pch new file mode 100644 index 000000000..3da08ad7f --- /dev/null +++ b/spine-cocos2dx/example/proj.ios_mac/ios/Prefix.pch @@ -0,0 +1,12 @@ +// +// Prefix header for all source files of the 'iphone' target in the 'iphone' project +// + +#ifdef __OBJC__ + #import + #import +#endif + +#ifdef __cplusplus + #include "cocos2d.h" +#endif \ No newline at end of file diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/RootViewController.h b/spine-cocos2dx/example/proj.ios_mac/ios/RootViewController.h new file mode 100644 index 000000000..a1669019e --- /dev/null +++ b/spine-cocos2dx/example/proj.ios_mac/ios/RootViewController.h @@ -0,0 +1,34 @@ +/**************************************************************************** + Copyright (c) 2013 cocos2d-x.org + Copyright (c) 2013-2014 Chukong Technologies Inc. + + http://www.cocos2d-x.org + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ + +#import + + +@interface RootViewController : UIViewController { + +} +- (BOOL) prefersStatusBarHidden; + +@end diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/RootViewController.mm b/spine-cocos2dx/example/proj.ios_mac/ios/RootViewController.mm new file mode 100644 index 000000000..c4989af5f --- /dev/null +++ b/spine-cocos2dx/example/proj.ios_mac/ios/RootViewController.mm @@ -0,0 +1,114 @@ +/**************************************************************************** + Copyright (c) 2013 cocos2d-x.org + Copyright (c) 2013-2014 Chukong Technologies Inc. + + http://www.cocos2d-x.org + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ + +#import "RootViewController.h" +#import "cocos2d.h" +#import "platform/ios/CCEAGLView-ios.h" + +@implementation RootViewController + +/* + // The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad. +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { + if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { + // Custom initialization + } + return self; +} +*/ + +/* +// Implement loadView to create a view hierarchy programmatically, without using a nib. +- (void)loadView { +} +*/ + +/* +// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. +- (void)viewDidLoad { + [super viewDidLoad]; +} + +*/ +// Override to allow orientations other than the default portrait orientation. +// This method is deprecated on ios6 +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + return UIInterfaceOrientationIsLandscape( interfaceOrientation ); +} + +// For ios6, use supportedInterfaceOrientations & shouldAutorotate instead +- (NSUInteger) supportedInterfaceOrientations{ +#ifdef __IPHONE_6_0 + return UIInterfaceOrientationMaskAllButUpsideDown; +#endif +} + +- (BOOL) shouldAutorotate { + return YES; +} + +- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { + [super didRotateFromInterfaceOrientation:fromInterfaceOrientation]; + + auto glview = cocos2d::Director::getInstance()->getOpenGLView(); + + if (glview) + { + CCEAGLView *eaglview = (CCEAGLView*) glview->getEAGLView(); + + if (eaglview) + { + CGSize s = CGSizeMake([eaglview getWidth], [eaglview getHeight]); + cocos2d::Application::getInstance()->applicationScreenSizeChanged((int) s.width, (int) s.height); + } + } +} + +//fix not hide status on ios7 +- (BOOL)prefersStatusBarHidden +{ + return YES; +} + +- (void)didReceiveMemoryWarning { + // Releases the view if it doesn't have a superview. + [super didReceiveMemoryWarning]; + + // Release any cached data, images, etc that aren't in use. +} + +- (void)viewDidUnload { + [super viewDidUnload]; + // Release any retained subviews of the main view. + // e.g. self.myOutlet = nil; +} + + +- (void)dealloc { + [super dealloc]; +} + + +@end diff --git a/spine-cocos2dx/example/proj.ios_mac/ios/main.m b/spine-cocos2dx/example/proj.ios_mac/ios/main.m new file mode 100644 index 000000000..8daa43e01 --- /dev/null +++ b/spine-cocos2dx/example/proj.ios_mac/ios/main.m @@ -0,0 +1,9 @@ +#import + +int main(int argc, char *argv[]) { + + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; + int retVal = UIApplicationMain(argc, argv, nil, @"AppController"); + [pool release]; + return retVal; +} diff --git a/spine-cocos2dx/example/proj.ios_mac/mac/Icon.icns b/spine-cocos2dx/example/proj.ios_mac/mac/Icon.icns new file mode 100644 index 000000000..2040fc6fe Binary files /dev/null and b/spine-cocos2dx/example/proj.ios_mac/mac/Icon.icns differ diff --git a/spine-cocos2d-iphone/3/Resources-mac/Info.plist b/spine-cocos2dx/example/proj.ios_mac/mac/Info.plist similarity index 76% rename from spine-cocos2d-iphone/3/Resources-mac/Info.plist rename to spine-cocos2dx/example/proj.ios_mac/mac/Info.plist index 56fdbce54..6c696840e 100644 --- a/spine-cocos2d-iphone/3/Resources-mac/Info.plist +++ b/spine-cocos2dx/example/proj.ios_mac/mac/Info.plist @@ -3,13 +3,13 @@ CFBundleDevelopmentRegion - English + en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile - icon + Icon CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:rfc1034identifier} + com.esotericsoftware.spine CFBundleInfoDictionaryVersion 6.0 CFBundleName @@ -22,8 +22,12 @@ ???? CFBundleVersion 1 + LSApplicationCategoryType + public.app-category.games LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2013. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass diff --git a/spine-cocos2dx/example/proj.ios_mac/mac/Prefix.pch b/spine-cocos2dx/example/proj.ios_mac/mac/Prefix.pch new file mode 100644 index 000000000..aa71e7664 --- /dev/null +++ b/spine-cocos2dx/example/proj.ios_mac/mac/Prefix.pch @@ -0,0 +1,11 @@ +// +// Prefix header for all source files of the 'Paralaxer' target in the 'Paralaxer' project +// + +#ifdef __OBJC__ + #import +#endif + +#ifdef __cplusplus + #include "cocos2d.h" +#endif \ No newline at end of file diff --git a/spine-cocos2dx/example/proj.ios_mac/mac/main.cpp b/spine-cocos2dx/example/proj.ios_mac/mac/main.cpp new file mode 100644 index 000000000..96f027e13 --- /dev/null +++ b/spine-cocos2dx/example/proj.ios_mac/mac/main.cpp @@ -0,0 +1,34 @@ +/**************************************************************************** + Copyright (c) 2010 cocos2d-x.org + + http://www.cocos2d-x.org + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + ****************************************************************************/ + +#include "AppDelegate.h" +#include "cocos2d.h" + +USING_NS_CC; + +int main(int argc, char *argv[]) +{ + AppDelegate app; + return Application::getInstance()->run(); +} diff --git a/spine-cocos2dx/example/proj.ios_mac/spine-cocos2d-x.xcodeproj/project.pbxproj b/spine-cocos2dx/example/proj.ios_mac/spine-cocos2d-x.xcodeproj/project.pbxproj new file mode 100644 index 000000000..5f2d46ca1 --- /dev/null +++ b/spine-cocos2dx/example/proj.ios_mac/spine-cocos2d-x.xcodeproj/project.pbxproj @@ -0,0 +1,1050 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 1AC6FB21180E996B004C840B /* libcocos2d Mac.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AC6FAF9180E9839004C840B /* libcocos2d Mac.a */; }; + 1AC6FB30180E99EB004C840B /* libcocos2d iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AC6FB07180E9839004C840B /* libcocos2d iOS.a */; }; + 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; + 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; }; + 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; }; + 503AE0F817EB97AB00D1A890 /* Icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 503AE0F617EB97AB00D1A890 /* Icon.icns */; }; + 503AE10017EB989F00D1A890 /* AppController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 503AE0FB17EB989F00D1A890 /* AppController.mm */; }; + 503AE10117EB989F00D1A890 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 503AE0FC17EB989F00D1A890 /* main.m */; }; + 503AE10217EB989F00D1A890 /* RootViewController.mm in Sources */ = {isa = PBXBuildFile; fileRef = 503AE0FF17EB989F00D1A890 /* RootViewController.mm */; }; + 503AE10517EB98FF00D1A890 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 503AE10317EB98FF00D1A890 /* main.cpp */; }; + 503AE11B17EB9C5A00D1A890 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 503AE11A17EB9C5A00D1A890 /* IOKit.framework */; }; + 5087E76317EB910900C73F5D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; }; + 5087E76717EB910900C73F5D /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = BF170DB412928DE900B8313A /* libz.dylib */; }; + 5087E76817EB910900C73F5D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF1C47EA1293683800B63C5D /* QuartzCore.framework */; }; + 5087E76917EB910900C73F5D /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D44C620B132DFF330009C878 /* OpenAL.framework */; }; + 5087E76A17EB910900C73F5D /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D44C620D132DFF430009C878 /* AVFoundation.framework */; }; + 5087E76B17EB910900C73F5D /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D44C620F132DFF4E0009C878 /* AudioToolbox.framework */; }; + 5087E77D17EB970100C73F5D /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5087E77217EB970100C73F5D /* Default-568h@2x.png */; }; + 5087E77E17EB970100C73F5D /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 5087E77317EB970100C73F5D /* Default.png */; }; + 5087E77F17EB970100C73F5D /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 5087E77417EB970100C73F5D /* Default@2x.png */; }; + 5087E78017EB970100C73F5D /* Icon-114.png in Resources */ = {isa = PBXBuildFile; fileRef = 5087E77517EB970100C73F5D /* Icon-114.png */; }; + 5087E78117EB970100C73F5D /* Icon-120.png in Resources */ = {isa = PBXBuildFile; fileRef = 5087E77617EB970100C73F5D /* Icon-120.png */; }; + 5087E78217EB970100C73F5D /* Icon-144.png in Resources */ = {isa = PBXBuildFile; fileRef = 5087E77717EB970100C73F5D /* Icon-144.png */; }; + 5087E78317EB970100C73F5D /* Icon-152.png in Resources */ = {isa = PBXBuildFile; fileRef = 5087E77817EB970100C73F5D /* Icon-152.png */; }; + 5087E78417EB970100C73F5D /* Icon-57.png in Resources */ = {isa = PBXBuildFile; fileRef = 5087E77917EB970100C73F5D /* Icon-57.png */; }; + 5087E78517EB970100C73F5D /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = 5087E77A17EB970100C73F5D /* Icon-72.png */; }; + 5087E78617EB970100C73F5D /* Icon-76.png in Resources */ = {isa = PBXBuildFile; fileRef = 5087E77B17EB970100C73F5D /* Icon-76.png */; }; + 5087E78917EB974C00C73F5D /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5087E78817EB974C00C73F5D /* AppKit.framework */; }; + 5087E78B17EB975400C73F5D /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5087E78A17EB975400C73F5D /* OpenGL.framework */; }; + 50EF629617ECD46A001EB2F8 /* Icon-40.png in Resources */ = {isa = PBXBuildFile; fileRef = 50EF629217ECD46A001EB2F8 /* Icon-40.png */; }; + 50EF629717ECD46A001EB2F8 /* Icon-58.png in Resources */ = {isa = PBXBuildFile; fileRef = 50EF629317ECD46A001EB2F8 /* Icon-58.png */; }; + 50EF629817ECD46A001EB2F8 /* Icon-80.png in Resources */ = {isa = PBXBuildFile; fileRef = 50EF629417ECD46A001EB2F8 /* Icon-80.png */; }; + 50EF629917ECD46A001EB2F8 /* Icon-100.png in Resources */ = {isa = PBXBuildFile; fileRef = 50EF629517ECD46A001EB2F8 /* Icon-100.png */; }; + 50EF62A217ECD613001EB2F8 /* Icon-29.png in Resources */ = {isa = PBXBuildFile; fileRef = 50EF62A017ECD613001EB2F8 /* Icon-29.png */; }; + 50EF62A317ECD613001EB2F8 /* Icon-50.png in Resources */ = {isa = PBXBuildFile; fileRef = 50EF62A117ECD613001EB2F8 /* Icon-50.png */; }; + 521A8E6419F0C34300D177D7 /* Default-667h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 521A8E6219F0C34300D177D7 /* Default-667h@2x.png */; }; + 521A8E6519F0C34300D177D7 /* Default-736h@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 521A8E6319F0C34300D177D7 /* Default-736h@3x.png */; }; + 52B47A471A53D09C004E4C60 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52B47A461A53D09B004E4C60 /* Security.framework */; }; + 76AAA3C01D180F7C00C54FCB /* AppDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B31D180F7C00C54FCB /* AppDelegate.cpp */; }; + 76AAA3C11D180F7C00C54FCB /* BatchingExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B61D180F7C00C54FCB /* BatchingExample.cpp */; }; + 76AAA3C21D180F7C00C54FCB /* GoblinsExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B81D180F7C00C54FCB /* GoblinsExample.cpp */; }; + 76AAA3C31D180F7C00C54FCB /* RaptorExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BA1D180F7C00C54FCB /* RaptorExample.cpp */; }; + 76AAA3C41D180F7C00C54FCB /* SimpleCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BC1D180F7C00C54FCB /* SimpleCommand.cpp */; }; + 76AAA3C51D180F7C00C54FCB /* SpineboyExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BE1D180F7C00C54FCB /* SpineboyExample.cpp */; }; + 76AAA3E31D180FA800C54FCB /* Animation.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C61D180FA800C54FCB /* Animation.c */; }; + 76AAA3E41D180FA800C54FCB /* AnimationState.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C71D180FA800C54FCB /* AnimationState.c */; }; + 76AAA3E51D180FA800C54FCB /* AnimationStateData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C81D180FA800C54FCB /* AnimationStateData.c */; }; + 76AAA3E61D180FA800C54FCB /* Atlas.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C91D180FA800C54FCB /* Atlas.c */; }; + 76AAA3E71D180FA800C54FCB /* AtlasAttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CA1D180FA800C54FCB /* AtlasAttachmentLoader.c */; }; + 76AAA3E81D180FA800C54FCB /* Attachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CB1D180FA800C54FCB /* Attachment.c */; }; + 76AAA3E91D180FA800C54FCB /* AttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CC1D180FA800C54FCB /* AttachmentLoader.c */; }; + 76AAA3EA1D180FA800C54FCB /* Bone.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CD1D180FA800C54FCB /* Bone.c */; }; + 76AAA3EB1D180FA800C54FCB /* BoneData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CE1D180FA800C54FCB /* BoneData.c */; }; + 76AAA3EC1D180FA800C54FCB /* BoundingBoxAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CF1D180FA800C54FCB /* BoundingBoxAttachment.c */; }; + 76AAA3ED1D180FA800C54FCB /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D01D180FA800C54FCB /* Event.c */; }; + 76AAA3EE1D180FA800C54FCB /* EventData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D11D180FA800C54FCB /* EventData.c */; }; + 76AAA3EF1D180FA800C54FCB /* extension.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D21D180FA800C54FCB /* extension.c */; }; + 76AAA3F01D180FA800C54FCB /* IkConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D31D180FA800C54FCB /* IkConstraint.c */; }; + 76AAA3F11D180FA800C54FCB /* IkConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D41D180FA800C54FCB /* IkConstraintData.c */; }; + 76AAA3F21D180FA800C54FCB /* Json.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D51D180FA800C54FCB /* Json.c */; }; + 76AAA3F31D180FA800C54FCB /* MeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D71D180FA800C54FCB /* MeshAttachment.c */; }; + 76AAA3F41D180FA800C54FCB /* RegionAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D81D180FA800C54FCB /* RegionAttachment.c */; }; + 76AAA3F51D180FA800C54FCB /* Skeleton.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D91D180FA800C54FCB /* Skeleton.c */; }; + 76AAA3F61D180FA800C54FCB /* SkeletonBounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DA1D180FA800C54FCB /* SkeletonBounds.c */; }; + 76AAA3F71D180FA800C54FCB /* SkeletonData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DB1D180FA800C54FCB /* SkeletonData.c */; }; + 76AAA3F81D180FA800C54FCB /* SkeletonJson.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DC1D180FA800C54FCB /* SkeletonJson.c */; }; + 76AAA3F91D180FA800C54FCB /* Skin.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DD1D180FA800C54FCB /* Skin.c */; }; + 76AAA3FA1D180FA800C54FCB /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DE1D180FA800C54FCB /* Slot.c */; }; + 76AAA3FB1D180FA800C54FCB /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DF1D180FA800C54FCB /* SlotData.c */; }; + 76AAA3FC1D180FA800C54FCB /* TransformConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E01D180FA800C54FCB /* TransformConstraint.c */; }; + 76AAA3FD1D180FA800C54FCB /* TransformConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E11D180FA800C54FCB /* TransformConstraintData.c */; }; + 76AAA3FE1D180FA800C54FCB /* WeightedMeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E21D180FA800C54FCB /* WeightedMeshAttachment.c */; }; + 76AAA40C1D18106000C54FCB /* AttachmentVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4001D18106000C54FCB /* AttachmentVertices.cpp */; }; + 76AAA40D1D18106000C54FCB /* Cocos2dAttachmentLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4021D18106000C54FCB /* Cocos2dAttachmentLoader.cpp */; }; + 76AAA40E1D18106000C54FCB /* SkeletonAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4041D18106000C54FCB /* SkeletonAnimation.cpp */; }; + 76AAA40F1D18106000C54FCB /* SkeletonBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4061D18106000C54FCB /* SkeletonBatch.cpp */; }; + 76AAA4101D18106000C54FCB /* SkeletonRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4081D18106000C54FCB /* SkeletonRenderer.cpp */; }; + 76AAA4111D18106000C54FCB /* spine-cocos2dx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA40A1D18106000C54FCB /* spine-cocos2dx.cpp */; }; + 76AAA4121D18119F00C54FCB /* AttachmentVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4001D18106000C54FCB /* AttachmentVertices.cpp */; }; + 76AAA4131D18119F00C54FCB /* AttachmentVertices.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4011D18106000C54FCB /* AttachmentVertices.h */; }; + 76AAA4141D18119F00C54FCB /* Cocos2dAttachmentLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4021D18106000C54FCB /* Cocos2dAttachmentLoader.cpp */; }; + 76AAA4151D18119F00C54FCB /* Cocos2dAttachmentLoader.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4031D18106000C54FCB /* Cocos2dAttachmentLoader.h */; }; + 76AAA4161D18119F00C54FCB /* SkeletonAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4041D18106000C54FCB /* SkeletonAnimation.cpp */; }; + 76AAA4171D18119F00C54FCB /* SkeletonAnimation.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4051D18106000C54FCB /* SkeletonAnimation.h */; }; + 76AAA4181D18119F00C54FCB /* SkeletonBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4061D18106000C54FCB /* SkeletonBatch.cpp */; }; + 76AAA4191D18119F00C54FCB /* SkeletonBatch.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4071D18106000C54FCB /* SkeletonBatch.h */; }; + 76AAA41A1D18119F00C54FCB /* SkeletonRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4081D18106000C54FCB /* SkeletonRenderer.cpp */; }; + 76AAA41B1D18119F00C54FCB /* SkeletonRenderer.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA4091D18106000C54FCB /* SkeletonRenderer.h */; }; + 76AAA41C1D18119F00C54FCB /* spine-cocos2dx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA40A1D18106000C54FCB /* spine-cocos2dx.cpp */; }; + 76AAA41D1D18119F00C54FCB /* spine-cocos2dx.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA40B1D18106000C54FCB /* spine-cocos2dx.h */; }; + 76AAA41E1D1811A700C54FCB /* Animation.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C61D180FA800C54FCB /* Animation.c */; }; + 76AAA41F1D1811A700C54FCB /* AnimationState.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C71D180FA800C54FCB /* AnimationState.c */; }; + 76AAA4201D1811A700C54FCB /* AnimationStateData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C81D180FA800C54FCB /* AnimationStateData.c */; }; + 76AAA4211D1811A700C54FCB /* Atlas.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3C91D180FA800C54FCB /* Atlas.c */; }; + 76AAA4221D1811A700C54FCB /* AtlasAttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CA1D180FA800C54FCB /* AtlasAttachmentLoader.c */; }; + 76AAA4231D1811A700C54FCB /* Attachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CB1D180FA800C54FCB /* Attachment.c */; }; + 76AAA4241D1811A700C54FCB /* AttachmentLoader.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CC1D180FA800C54FCB /* AttachmentLoader.c */; }; + 76AAA4251D1811A700C54FCB /* Bone.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CD1D180FA800C54FCB /* Bone.c */; }; + 76AAA4261D1811A700C54FCB /* BoneData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CE1D180FA800C54FCB /* BoneData.c */; }; + 76AAA4271D1811A700C54FCB /* BoundingBoxAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3CF1D180FA800C54FCB /* BoundingBoxAttachment.c */; }; + 76AAA4281D1811A700C54FCB /* Event.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D01D180FA800C54FCB /* Event.c */; }; + 76AAA4291D1811A700C54FCB /* EventData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D11D180FA800C54FCB /* EventData.c */; }; + 76AAA42A1D1811A700C54FCB /* extension.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D21D180FA800C54FCB /* extension.c */; }; + 76AAA42B1D1811A700C54FCB /* IkConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D31D180FA800C54FCB /* IkConstraint.c */; }; + 76AAA42C1D1811A700C54FCB /* IkConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D41D180FA800C54FCB /* IkConstraintData.c */; }; + 76AAA42D1D1811A700C54FCB /* Json.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D51D180FA800C54FCB /* Json.c */; }; + 76AAA42E1D1811A700C54FCB /* Json.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D61D180FA800C54FCB /* Json.h */; }; + 76AAA42F1D1811A700C54FCB /* MeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D71D180FA800C54FCB /* MeshAttachment.c */; }; + 76AAA4301D1811A700C54FCB /* RegionAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D81D180FA800C54FCB /* RegionAttachment.c */; }; + 76AAA4311D1811A700C54FCB /* Skeleton.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3D91D180FA800C54FCB /* Skeleton.c */; }; + 76AAA4321D1811A700C54FCB /* SkeletonBounds.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DA1D180FA800C54FCB /* SkeletonBounds.c */; }; + 76AAA4331D1811A700C54FCB /* SkeletonData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DB1D180FA800C54FCB /* SkeletonData.c */; }; + 76AAA4341D1811A700C54FCB /* SkeletonJson.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DC1D180FA800C54FCB /* SkeletonJson.c */; }; + 76AAA4351D1811A700C54FCB /* Skin.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DD1D180FA800C54FCB /* Skin.c */; }; + 76AAA4361D1811A700C54FCB /* Slot.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DE1D180FA800C54FCB /* Slot.c */; }; + 76AAA4371D1811A700C54FCB /* SlotData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3DF1D180FA800C54FCB /* SlotData.c */; }; + 76AAA4381D1811A700C54FCB /* TransformConstraint.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E01D180FA800C54FCB /* TransformConstraint.c */; }; + 76AAA4391D1811A700C54FCB /* TransformConstraintData.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E11D180FA800C54FCB /* TransformConstraintData.c */; }; + 76AAA43A1D1811A700C54FCB /* WeightedMeshAttachment.c in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3E21D180FA800C54FCB /* WeightedMeshAttachment.c */; }; + 76AAA43B1D1811B000C54FCB /* AppDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B31D180F7C00C54FCB /* AppDelegate.cpp */; }; + 76AAA43C1D1811B000C54FCB /* AppDelegate.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B41D180F7C00C54FCB /* AppDelegate.h */; }; + 76AAA43D1D1811B000C54FCB /* AppMacros.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B51D180F7C00C54FCB /* AppMacros.h */; }; + 76AAA43E1D1811B000C54FCB /* BatchingExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B61D180F7C00C54FCB /* BatchingExample.cpp */; }; + 76AAA43F1D1811B000C54FCB /* BatchingExample.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B71D180F7C00C54FCB /* BatchingExample.h */; }; + 76AAA4401D1811B000C54FCB /* GoblinsExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B81D180F7C00C54FCB /* GoblinsExample.cpp */; }; + 76AAA4411D1811B000C54FCB /* GoblinsExample.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3B91D180F7C00C54FCB /* GoblinsExample.h */; }; + 76AAA4421D1811B000C54FCB /* RaptorExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BA1D180F7C00C54FCB /* RaptorExample.cpp */; }; + 76AAA4431D1811B000C54FCB /* RaptorExample.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BB1D180F7C00C54FCB /* RaptorExample.h */; }; + 76AAA4441D1811B000C54FCB /* SimpleCommand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BC1D180F7C00C54FCB /* SimpleCommand.cpp */; }; + 76AAA4451D1811B000C54FCB /* SimpleCommand.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BD1D180F7C00C54FCB /* SimpleCommand.h */; }; + 76AAA4461D1811B000C54FCB /* SpineboyExample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BE1D180F7C00C54FCB /* SpineboyExample.cpp */; }; + 76AAA4471D1811B000C54FCB /* SpineboyExample.h in Sources */ = {isa = PBXBuildFile; fileRef = 76AAA3BF1D180F7C00C54FCB /* SpineboyExample.h */; }; + 76AAA4571D18132D00C54FCB /* common in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4521D18132D00C54FCB /* common */; }; + 76AAA4581D18132D00C54FCB /* common in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4521D18132D00C54FCB /* common */; }; + 76AAA4591D18132D00C54FCB /* ipad in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4531D18132D00C54FCB /* ipad */; }; + 76AAA45A1D18132D00C54FCB /* ipad in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4531D18132D00C54FCB /* ipad */; }; + 76AAA45B1D18132D00C54FCB /* ipad-retina in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4541D18132D00C54FCB /* ipad-retina */; }; + 76AAA45C1D18132D00C54FCB /* ipad-retina in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4541D18132D00C54FCB /* ipad-retina */; }; + 76AAA45D1D18132D00C54FCB /* iphone in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4551D18132D00C54FCB /* iphone */; }; + 76AAA45E1D18132D00C54FCB /* iphone in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4551D18132D00C54FCB /* iphone */; }; + 76AAA45F1D18132D00C54FCB /* iphone-retina in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4561D18132D00C54FCB /* iphone-retina */; }; + 76AAA4601D18132D00C54FCB /* iphone-retina in Resources */ = {isa = PBXBuildFile; fileRef = 76AAA4561D18132D00C54FCB /* iphone-retina */; }; + 8262943E1AAF051F00CB7CF7 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8262943D1AAF051F00CB7CF7 /* Security.framework */; }; + BF171245129291EC00B8313A /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF170DB012928DE900B8313A /* OpenGLES.framework */; }; + BF1712471292920000B8313A /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = BF170DB412928DE900B8313A /* libz.dylib */; }; + BF1C47F01293687400B63C5D /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF1C47EA1293683800B63C5D /* QuartzCore.framework */; }; + D44C620C132DFF330009C878 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D44C620B132DFF330009C878 /* OpenAL.framework */; }; + D44C620E132DFF430009C878 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D44C620D132DFF430009C878 /* AVFoundation.framework */; }; + D44C6210132DFF4E0009C878 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D44C620F132DFF4E0009C878 /* AudioToolbox.framework */; }; + D6B0611B1803AB670077942B /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6B0611A1803AB670077942B /* CoreMotion.framework */; }; + ED545A7C1B68A1F400C3958E /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = ED545A7B1B68A1F400C3958E /* libiconv.dylib */; }; + ED545A7E1B68A1FA00C3958E /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = ED545A7D1B68A1FA00C3958E /* libiconv.dylib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 1AC6FAF8180E9839004C840B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1AC6FAE5180E9839004C840B /* cocos2d_libs.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 1551A33F158F2AB200E66CFE; + remoteInfo = "cocos2dx Mac"; + }; + 1AC6FB06180E9839004C840B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1AC6FAE5180E9839004C840B /* cocos2d_libs.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = A07A4D641783777C0073F6A7; + remoteInfo = "cocos2dx iOS"; + }; + 1AC6FB15180E9959004C840B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1AC6FAE5180E9839004C840B /* cocos2d_libs.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 1551A33E158F2AB200E66CFE; + remoteInfo = "cocos2dx Mac"; + }; + 1AC6FB24180E99E1004C840B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1AC6FAE5180E9839004C840B /* cocos2d_libs.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = A07A4C241783777C0073F6A7; + remoteInfo = "cocos2dx iOS"; + }; + 76AAA3B01D180F5D00C54FCB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 1AC6FAE5180E9839004C840B /* cocos2d_libs.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 507B40FD1C31BDD30067B53E; + remoteInfo = "libcocos2d tvOS"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 1AC6FAE5180E9839004C840B /* cocos2d_libs.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = cocos2d_libs.xcodeproj; path = ../cocos2d/build/cocos2d_libs.xcodeproj; sourceTree = ""; }; + 1ACB3243164770DE00914215 /* libcurl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcurl.a; path = ../../cocos2dx/platform/third_party/ios/libraries/libcurl.a; sourceTree = ""; }; + 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 1D6058910D05DD3D006BFB54 /* spine-cocos2d-x-mobile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "spine-cocos2d-x-mobile.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 503AE0F617EB97AB00D1A890 /* Icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Icon.icns; sourceTree = ""; }; + 503AE0F717EB97AB00D1A890 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 503AE0FA17EB989F00D1A890 /* AppController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppController.h; path = ios/AppController.h; sourceTree = SOURCE_ROOT; }; + 503AE0FB17EB989F00D1A890 /* AppController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppController.mm; path = ios/AppController.mm; sourceTree = SOURCE_ROOT; }; + 503AE0FC17EB989F00D1A890 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = ios/main.m; sourceTree = SOURCE_ROOT; }; + 503AE0FD17EB989F00D1A890 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Prefix.pch; path = ios/Prefix.pch; sourceTree = SOURCE_ROOT; }; + 503AE0FE17EB989F00D1A890 /* RootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RootViewController.h; path = ios/RootViewController.h; sourceTree = SOURCE_ROOT; }; + 503AE0FF17EB989F00D1A890 /* RootViewController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = RootViewController.mm; path = ios/RootViewController.mm; sourceTree = SOURCE_ROOT; }; + 503AE10317EB98FF00D1A890 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = mac/main.cpp; sourceTree = ""; }; + 503AE10417EB98FF00D1A890 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Prefix.pch; path = mac/Prefix.pch; sourceTree = ""; }; + 503AE11117EB99EE00D1A890 /* libcurl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcurl.dylib; path = usr/lib/libcurl.dylib; sourceTree = SDKROOT; }; + 503AE11A17EB9C5A00D1A890 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; + 5087E76F17EB910900C73F5D /* spine-cocos2d-x-desktop.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "spine-cocos2d-x-desktop.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5087E77217EB970100C73F5D /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; + 5087E77317EB970100C73F5D /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = ""; }; + 5087E77417EB970100C73F5D /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; + 5087E77517EB970100C73F5D /* Icon-114.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-114.png"; sourceTree = ""; }; + 5087E77617EB970100C73F5D /* Icon-120.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-120.png"; sourceTree = ""; }; + 5087E77717EB970100C73F5D /* Icon-144.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-144.png"; sourceTree = ""; }; + 5087E77817EB970100C73F5D /* Icon-152.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-152.png"; sourceTree = ""; }; + 5087E77917EB970100C73F5D /* Icon-57.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-57.png"; sourceTree = ""; }; + 5087E77A17EB970100C73F5D /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-72.png"; sourceTree = ""; }; + 5087E77B17EB970100C73F5D /* Icon-76.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-76.png"; sourceTree = ""; }; + 5087E77C17EB970100C73F5D /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 5087E78817EB974C00C73F5D /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 5087E78A17EB975400C73F5D /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; + 50EF629217ECD46A001EB2F8 /* Icon-40.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-40.png"; sourceTree = ""; }; + 50EF629317ECD46A001EB2F8 /* Icon-58.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-58.png"; sourceTree = ""; }; + 50EF629417ECD46A001EB2F8 /* Icon-80.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-80.png"; sourceTree = ""; }; + 50EF629517ECD46A001EB2F8 /* Icon-100.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-100.png"; sourceTree = ""; }; + 50EF62A017ECD613001EB2F8 /* Icon-29.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-29.png"; sourceTree = ""; }; + 50EF62A117ECD613001EB2F8 /* Icon-50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-50.png"; sourceTree = ""; }; + 521A8E6219F0C34300D177D7 /* Default-667h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-667h@2x.png"; sourceTree = ""; }; + 521A8E6319F0C34300D177D7 /* Default-736h@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-736h@3x.png"; sourceTree = ""; }; + 52B47A461A53D09B004E4C60 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.1.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; + 76AAA3B31D180F7C00C54FCB /* AppDelegate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AppDelegate.cpp; sourceTree = ""; }; + 76AAA3B41D180F7C00C54FCB /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 76AAA3B51D180F7C00C54FCB /* AppMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppMacros.h; sourceTree = ""; }; + 76AAA3B61D180F7C00C54FCB /* BatchingExample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BatchingExample.cpp; sourceTree = ""; }; + 76AAA3B71D180F7C00C54FCB /* BatchingExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BatchingExample.h; sourceTree = ""; }; + 76AAA3B81D180F7C00C54FCB /* GoblinsExample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GoblinsExample.cpp; sourceTree = ""; }; + 76AAA3B91D180F7C00C54FCB /* GoblinsExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoblinsExample.h; sourceTree = ""; }; + 76AAA3BA1D180F7C00C54FCB /* RaptorExample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RaptorExample.cpp; sourceTree = ""; }; + 76AAA3BB1D180F7C00C54FCB /* RaptorExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RaptorExample.h; sourceTree = ""; }; + 76AAA3BC1D180F7C00C54FCB /* SimpleCommand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleCommand.cpp; sourceTree = ""; }; + 76AAA3BD1D180F7C00C54FCB /* SimpleCommand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleCommand.h; sourceTree = ""; }; + 76AAA3BE1D180F7C00C54FCB /* SpineboyExample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpineboyExample.cpp; sourceTree = ""; }; + 76AAA3BF1D180F7C00C54FCB /* SpineboyExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpineboyExample.h; sourceTree = ""; }; + 76AAA3C61D180FA800C54FCB /* Animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animation.c; path = "../../../spine-c/src/spine/Animation.c"; sourceTree = ""; }; + 76AAA3C71D180FA800C54FCB /* AnimationState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationState.c; path = "../../../spine-c/src/spine/AnimationState.c"; sourceTree = ""; }; + 76AAA3C81D180FA800C54FCB /* AnimationStateData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationStateData.c; path = "../../../spine-c/src/spine/AnimationStateData.c"; sourceTree = ""; }; + 76AAA3C91D180FA800C54FCB /* Atlas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Atlas.c; path = "../../../spine-c/src/spine/Atlas.c"; sourceTree = ""; }; + 76AAA3CA1D180FA800C54FCB /* AtlasAttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AtlasAttachmentLoader.c; path = "../../../spine-c/src/spine/AtlasAttachmentLoader.c"; sourceTree = ""; }; + 76AAA3CB1D180FA800C54FCB /* Attachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Attachment.c; path = "../../../spine-c/src/spine/Attachment.c"; sourceTree = ""; }; + 76AAA3CC1D180FA800C54FCB /* AttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AttachmentLoader.c; path = "../../../spine-c/src/spine/AttachmentLoader.c"; sourceTree = ""; }; + 76AAA3CD1D180FA800C54FCB /* Bone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bone.c; path = "../../../spine-c/src/spine/Bone.c"; sourceTree = ""; }; + 76AAA3CE1D180FA800C54FCB /* BoneData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoneData.c; path = "../../../spine-c/src/spine/BoneData.c"; sourceTree = ""; }; + 76AAA3CF1D180FA800C54FCB /* BoundingBoxAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoundingBoxAttachment.c; path = "../../../spine-c/src/spine/BoundingBoxAttachment.c"; sourceTree = ""; }; + 76AAA3D01D180FA800C54FCB /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../../../spine-c/src/spine/Event.c"; sourceTree = ""; }; + 76AAA3D11D180FA800C54FCB /* EventData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EventData.c; path = "../../../spine-c/src/spine/EventData.c"; sourceTree = ""; }; + 76AAA3D21D180FA800C54FCB /* extension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extension.c; path = "../../../spine-c/src/spine/extension.c"; sourceTree = ""; }; + 76AAA3D31D180FA800C54FCB /* IkConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraint.c; path = "../../../spine-c/src/spine/IkConstraint.c"; sourceTree = ""; }; + 76AAA3D41D180FA800C54FCB /* IkConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraintData.c; path = "../../../spine-c/src/spine/IkConstraintData.c"; sourceTree = ""; }; + 76AAA3D51D180FA800C54FCB /* Json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Json.c; path = "../../../spine-c/src/spine/Json.c"; sourceTree = ""; }; + 76AAA3D61D180FA800C54FCB /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Json.h; path = "../../../spine-c/src/spine/Json.h"; sourceTree = ""; }; + 76AAA3D71D180FA800C54FCB /* MeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MeshAttachment.c; path = "../../../spine-c/src/spine/MeshAttachment.c"; sourceTree = ""; }; + 76AAA3D81D180FA800C54FCB /* RegionAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = RegionAttachment.c; path = "../../../spine-c/src/spine/RegionAttachment.c"; sourceTree = ""; }; + 76AAA3D91D180FA800C54FCB /* Skeleton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skeleton.c; path = "../../../spine-c/src/spine/Skeleton.c"; sourceTree = ""; }; + 76AAA3DA1D180FA800C54FCB /* SkeletonBounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonBounds.c; path = "../../../spine-c/src/spine/SkeletonBounds.c"; sourceTree = ""; }; + 76AAA3DB1D180FA800C54FCB /* SkeletonData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonData.c; path = "../../../spine-c/src/spine/SkeletonData.c"; sourceTree = ""; }; + 76AAA3DC1D180FA800C54FCB /* SkeletonJson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonJson.c; path = "../../../spine-c/src/spine/SkeletonJson.c"; sourceTree = ""; }; + 76AAA3DD1D180FA800C54FCB /* Skin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skin.c; path = "../../../spine-c/src/spine/Skin.c"; sourceTree = ""; }; + 76AAA3DE1D180FA800C54FCB /* Slot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Slot.c; path = "../../../spine-c/src/spine/Slot.c"; sourceTree = ""; }; + 76AAA3DF1D180FA800C54FCB /* SlotData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SlotData.c; path = "../../../spine-c/src/spine/SlotData.c"; sourceTree = ""; }; + 76AAA3E01D180FA800C54FCB /* TransformConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraint.c; path = "../../../spine-c/src/spine/TransformConstraint.c"; sourceTree = ""; }; + 76AAA3E11D180FA800C54FCB /* TransformConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraintData.c; path = "../../../spine-c/src/spine/TransformConstraintData.c"; sourceTree = ""; }; + 76AAA3E21D180FA800C54FCB /* WeightedMeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = WeightedMeshAttachment.c; path = "../../../spine-c/src/spine/WeightedMeshAttachment.c"; sourceTree = ""; }; + 76AAA4001D18106000C54FCB /* AttachmentVertices.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AttachmentVertices.cpp; path = ../../src/spine/AttachmentVertices.cpp; sourceTree = ""; }; + 76AAA4011D18106000C54FCB /* AttachmentVertices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AttachmentVertices.h; path = ../../src/spine/AttachmentVertices.h; sourceTree = ""; }; + 76AAA4021D18106000C54FCB /* Cocos2dAttachmentLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Cocos2dAttachmentLoader.cpp; path = ../../src/spine/Cocos2dAttachmentLoader.cpp; sourceTree = ""; }; + 76AAA4031D18106000C54FCB /* Cocos2dAttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Cocos2dAttachmentLoader.h; path = ../../src/spine/Cocos2dAttachmentLoader.h; sourceTree = ""; }; + 76AAA4041D18106000C54FCB /* SkeletonAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkeletonAnimation.cpp; path = ../../src/spine/SkeletonAnimation.cpp; sourceTree = ""; }; + 76AAA4051D18106000C54FCB /* SkeletonAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonAnimation.h; path = ../../src/spine/SkeletonAnimation.h; sourceTree = ""; }; + 76AAA4061D18106000C54FCB /* SkeletonBatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkeletonBatch.cpp; path = ../../src/spine/SkeletonBatch.cpp; sourceTree = ""; }; + 76AAA4071D18106000C54FCB /* SkeletonBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonBatch.h; path = ../../src/spine/SkeletonBatch.h; sourceTree = ""; }; + 76AAA4081D18106000C54FCB /* SkeletonRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkeletonRenderer.cpp; path = ../../src/spine/SkeletonRenderer.cpp; sourceTree = ""; }; + 76AAA4091D18106000C54FCB /* SkeletonRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonRenderer.h; path = ../../src/spine/SkeletonRenderer.h; sourceTree = ""; }; + 76AAA40A1D18106000C54FCB /* spine-cocos2dx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "spine-cocos2dx.cpp"; path = "../../src/spine/spine-cocos2dx.cpp"; sourceTree = ""; }; + 76AAA40B1D18106000C54FCB /* spine-cocos2dx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "spine-cocos2dx.h"; path = "../../src/spine/spine-cocos2dx.h"; sourceTree = ""; }; + 76AAA4521D18132D00C54FCB /* common */ = {isa = PBXFileReference; lastKnownFileType = folder; path = common; sourceTree = ""; }; + 76AAA4531D18132D00C54FCB /* ipad */ = {isa = PBXFileReference; lastKnownFileType = folder; path = ipad; sourceTree = ""; }; + 76AAA4541D18132D00C54FCB /* ipad-retina */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "ipad-retina"; sourceTree = ""; }; + 76AAA4551D18132D00C54FCB /* iphone */ = {isa = PBXFileReference; lastKnownFileType = folder; path = iphone; sourceTree = ""; }; + 76AAA4561D18132D00C54FCB /* iphone-retina */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "iphone-retina"; sourceTree = ""; }; + 8262943D1AAF051F00CB7CF7 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + BF170DB012928DE900B8313A /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; + BF170DB412928DE900B8313A /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; }; + BF1C47EA1293683800B63C5D /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + D44C620B132DFF330009C878 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = System/Library/Frameworks/OpenAL.framework; sourceTree = SDKROOT; }; + D44C620D132DFF430009C878 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; + D44C620F132DFF4E0009C878 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; + D6B0611A1803AB670077942B /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/Frameworks/CoreMotion.framework; sourceTree = DEVELOPER_DIR; }; + ED545A7B1B68A1F400C3958E /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS8.4.sdk/usr/lib/libiconv.dylib; sourceTree = DEVELOPER_DIR; }; + ED545A7D1B68A1FA00C3958E /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1D60588F0D05DD3D006BFB54 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ED545A7C1B68A1F400C3958E /* libiconv.dylib in Frameworks */, + 52B47A471A53D09C004E4C60 /* Security.framework in Frameworks */, + 1AC6FB30180E99EB004C840B /* libcocos2d iOS.a in Frameworks */, + D6B0611B1803AB670077942B /* CoreMotion.framework in Frameworks */, + 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */, + 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */, + 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */, + BF171245129291EC00B8313A /* OpenGLES.framework in Frameworks */, + BF1712471292920000B8313A /* libz.dylib in Frameworks */, + BF1C47F01293687400B63C5D /* QuartzCore.framework in Frameworks */, + D44C620C132DFF330009C878 /* OpenAL.framework in Frameworks */, + D44C620E132DFF430009C878 /* AVFoundation.framework in Frameworks */, + D44C6210132DFF4E0009C878 /* AudioToolbox.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5087E75C17EB910900C73F5D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ED545A7E1B68A1FA00C3958E /* libiconv.dylib in Frameworks */, + 1AC6FB21180E996B004C840B /* libcocos2d Mac.a in Frameworks */, + 5087E76717EB910900C73F5D /* libz.dylib in Frameworks */, + 8262943E1AAF051F00CB7CF7 /* Security.framework in Frameworks */, + 503AE11B17EB9C5A00D1A890 /* IOKit.framework in Frameworks */, + 5087E78B17EB975400C73F5D /* OpenGL.framework in Frameworks */, + 5087E78917EB974C00C73F5D /* AppKit.framework in Frameworks */, + 5087E76317EB910900C73F5D /* Foundation.framework in Frameworks */, + 5087E76817EB910900C73F5D /* QuartzCore.framework in Frameworks */, + 5087E76917EB910900C73F5D /* OpenAL.framework in Frameworks */, + 5087E76A17EB910900C73F5D /* AVFoundation.framework in Frameworks */, + 5087E76B17EB910900C73F5D /* AudioToolbox.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 080E96DDFE201D6D7F000001 /* ios */ = { + isa = PBXGroup; + children = ( + 5087E77117EB970100C73F5D /* Icons */, + 503AE0FA17EB989F00D1A890 /* AppController.h */, + 503AE0FB17EB989F00D1A890 /* AppController.mm */, + 503AE0FC17EB989F00D1A890 /* main.m */, + 503AE0FD17EB989F00D1A890 /* Prefix.pch */, + 503AE0FE17EB989F00D1A890 /* RootViewController.h */, + 503AE0FF17EB989F00D1A890 /* RootViewController.mm */, + ); + name = ios; + path = Classes; + sourceTree = ""; + }; + 19C28FACFE9D520D11CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + 1D6058910D05DD3D006BFB54 /* spine-cocos2d-x-mobile.app */, + 5087E76F17EB910900C73F5D /* spine-cocos2d-x-desktop.app */, + ); + name = Products; + sourceTree = ""; + }; + 1AC6FAE6180E9839004C840B /* Products */ = { + isa = PBXGroup; + children = ( + 1AC6FAF9180E9839004C840B /* libcocos2d Mac.a */, + 1AC6FB07180E9839004C840B /* libcocos2d iOS.a */, + 76AAA3B11D180F5D00C54FCB /* libcocos2d tvOS.a */, + ); + name = Products; + sourceTree = ""; + }; + 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = { + isa = PBXGroup; + children = ( + 76AAA3FF1D18102C00C54FCB /* spine-cocos2dx */, + 76AAA3B21D180F7300C54FCB /* spine */, + 46880B8319C43A87006E1F66 /* Classes */, + 46880B7519C43A67006E1F66 /* Resources */, + 1AC6FAE5180E9839004C840B /* cocos2d_libs.xcodeproj */, + 29B97323FDCFA39411CA2CEA /* Frameworks */, + 080E96DDFE201D6D7F000001 /* ios */, + 503AE10617EB990700D1A890 /* mac */, + 19C28FACFE9D520D11CA2CBB /* Products */, + ); + name = CustomTemplate; + sourceTree = ""; + }; + 29B97323FDCFA39411CA2CEA /* Frameworks */ = { + isa = PBXGroup; + children = ( + ED545A7D1B68A1FA00C3958E /* libiconv.dylib */, + ED545A7B1B68A1F400C3958E /* libiconv.dylib */, + 8262943D1AAF051F00CB7CF7 /* Security.framework */, + 52B47A461A53D09B004E4C60 /* Security.framework */, + D6B0611A1803AB670077942B /* CoreMotion.framework */, + 503AE11A17EB9C5A00D1A890 /* IOKit.framework */, + 503AE11117EB99EE00D1A890 /* libcurl.dylib */, + 5087E78A17EB975400C73F5D /* OpenGL.framework */, + 5087E78817EB974C00C73F5D /* AppKit.framework */, + 1ACB3243164770DE00914215 /* libcurl.a */, + BF170DB412928DE900B8313A /* libz.dylib */, + D44C620F132DFF4E0009C878 /* AudioToolbox.framework */, + D44C620D132DFF430009C878 /* AVFoundation.framework */, + 288765A40DF7441C002DB57D /* CoreGraphics.framework */, + 1D30AB110D05D00D00671497 /* Foundation.framework */, + D44C620B132DFF330009C878 /* OpenAL.framework */, + BF170DB012928DE900B8313A /* OpenGLES.framework */, + BF1C47EA1293683800B63C5D /* QuartzCore.framework */, + 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 46880B7519C43A67006E1F66 /* Resources */ = { + isa = PBXGroup; + children = ( + 76AAA4521D18132D00C54FCB /* common */, + 76AAA4531D18132D00C54FCB /* ipad */, + 76AAA4541D18132D00C54FCB /* ipad-retina */, + 76AAA4551D18132D00C54FCB /* iphone */, + 76AAA4561D18132D00C54FCB /* iphone-retina */, + ); + name = Resources; + path = ../Resources; + sourceTree = ""; + }; + 46880B8319C43A87006E1F66 /* Classes */ = { + isa = PBXGroup; + children = ( + 76AAA3B31D180F7C00C54FCB /* AppDelegate.cpp */, + 76AAA3B41D180F7C00C54FCB /* AppDelegate.h */, + 76AAA3B51D180F7C00C54FCB /* AppMacros.h */, + 76AAA3B61D180F7C00C54FCB /* BatchingExample.cpp */, + 76AAA3B71D180F7C00C54FCB /* BatchingExample.h */, + 76AAA3B81D180F7C00C54FCB /* GoblinsExample.cpp */, + 76AAA3B91D180F7C00C54FCB /* GoblinsExample.h */, + 76AAA3BA1D180F7C00C54FCB /* RaptorExample.cpp */, + 76AAA3BB1D180F7C00C54FCB /* RaptorExample.h */, + 76AAA3BC1D180F7C00C54FCB /* SimpleCommand.cpp */, + 76AAA3BD1D180F7C00C54FCB /* SimpleCommand.h */, + 76AAA3BE1D180F7C00C54FCB /* SpineboyExample.cpp */, + 76AAA3BF1D180F7C00C54FCB /* SpineboyExample.h */, + ); + name = Classes; + path = ../Classes; + sourceTree = ""; + }; + 503AE0F517EB97AB00D1A890 /* Icons */ = { + isa = PBXGroup; + children = ( + 503AE0F617EB97AB00D1A890 /* Icon.icns */, + 503AE0F717EB97AB00D1A890 /* Info.plist */, + ); + name = Icons; + path = mac; + sourceTree = SOURCE_ROOT; + }; + 503AE10617EB990700D1A890 /* mac */ = { + isa = PBXGroup; + children = ( + 503AE0F517EB97AB00D1A890 /* Icons */, + 503AE10317EB98FF00D1A890 /* main.cpp */, + 503AE10417EB98FF00D1A890 /* Prefix.pch */, + ); + name = mac; + sourceTree = ""; + }; + 5087E77117EB970100C73F5D /* Icons */ = { + isa = PBXGroup; + children = ( + 521A8E6219F0C34300D177D7 /* Default-667h@2x.png */, + 521A8E6319F0C34300D177D7 /* Default-736h@3x.png */, + 5087E77217EB970100C73F5D /* Default-568h@2x.png */, + 5087E77317EB970100C73F5D /* Default.png */, + 5087E77417EB970100C73F5D /* Default@2x.png */, + 50EF62A017ECD613001EB2F8 /* Icon-29.png */, + 50EF62A117ECD613001EB2F8 /* Icon-50.png */, + 50EF629217ECD46A001EB2F8 /* Icon-40.png */, + 50EF629317ECD46A001EB2F8 /* Icon-58.png */, + 50EF629417ECD46A001EB2F8 /* Icon-80.png */, + 50EF629517ECD46A001EB2F8 /* Icon-100.png */, + 5087E77517EB970100C73F5D /* Icon-114.png */, + 5087E77617EB970100C73F5D /* Icon-120.png */, + 5087E77717EB970100C73F5D /* Icon-144.png */, + 5087E77817EB970100C73F5D /* Icon-152.png */, + 5087E77917EB970100C73F5D /* Icon-57.png */, + 5087E77A17EB970100C73F5D /* Icon-72.png */, + 5087E77B17EB970100C73F5D /* Icon-76.png */, + 5087E77C17EB970100C73F5D /* Info.plist */, + ); + name = Icons; + path = ios; + sourceTree = SOURCE_ROOT; + }; + 76AAA3B21D180F7300C54FCB /* spine */ = { + isa = PBXGroup; + children = ( + 76AAA3C61D180FA800C54FCB /* Animation.c */, + 76AAA3C71D180FA800C54FCB /* AnimationState.c */, + 76AAA3C81D180FA800C54FCB /* AnimationStateData.c */, + 76AAA3C91D180FA800C54FCB /* Atlas.c */, + 76AAA3CA1D180FA800C54FCB /* AtlasAttachmentLoader.c */, + 76AAA3CB1D180FA800C54FCB /* Attachment.c */, + 76AAA3CC1D180FA800C54FCB /* AttachmentLoader.c */, + 76AAA3CD1D180FA800C54FCB /* Bone.c */, + 76AAA3CE1D180FA800C54FCB /* BoneData.c */, + 76AAA3CF1D180FA800C54FCB /* BoundingBoxAttachment.c */, + 76AAA3D01D180FA800C54FCB /* Event.c */, + 76AAA3D11D180FA800C54FCB /* EventData.c */, + 76AAA3D21D180FA800C54FCB /* extension.c */, + 76AAA3D31D180FA800C54FCB /* IkConstraint.c */, + 76AAA3D41D180FA800C54FCB /* IkConstraintData.c */, + 76AAA3D51D180FA800C54FCB /* Json.c */, + 76AAA3D61D180FA800C54FCB /* Json.h */, + 76AAA3D71D180FA800C54FCB /* MeshAttachment.c */, + 76AAA3D81D180FA800C54FCB /* RegionAttachment.c */, + 76AAA3D91D180FA800C54FCB /* Skeleton.c */, + 76AAA3DA1D180FA800C54FCB /* SkeletonBounds.c */, + 76AAA3DB1D180FA800C54FCB /* SkeletonData.c */, + 76AAA3DC1D180FA800C54FCB /* SkeletonJson.c */, + 76AAA3DD1D180FA800C54FCB /* Skin.c */, + 76AAA3DE1D180FA800C54FCB /* Slot.c */, + 76AAA3DF1D180FA800C54FCB /* SlotData.c */, + 76AAA3E01D180FA800C54FCB /* TransformConstraint.c */, + 76AAA3E11D180FA800C54FCB /* TransformConstraintData.c */, + 76AAA3E21D180FA800C54FCB /* WeightedMeshAttachment.c */, + ); + name = spine; + sourceTree = ""; + }; + 76AAA3FF1D18102C00C54FCB /* spine-cocos2dx */ = { + isa = PBXGroup; + children = ( + 76AAA4001D18106000C54FCB /* AttachmentVertices.cpp */, + 76AAA4011D18106000C54FCB /* AttachmentVertices.h */, + 76AAA4021D18106000C54FCB /* Cocos2dAttachmentLoader.cpp */, + 76AAA4031D18106000C54FCB /* Cocos2dAttachmentLoader.h */, + 76AAA4041D18106000C54FCB /* SkeletonAnimation.cpp */, + 76AAA4051D18106000C54FCB /* SkeletonAnimation.h */, + 76AAA4061D18106000C54FCB /* SkeletonBatch.cpp */, + 76AAA4071D18106000C54FCB /* SkeletonBatch.h */, + 76AAA4081D18106000C54FCB /* SkeletonRenderer.cpp */, + 76AAA4091D18106000C54FCB /* SkeletonRenderer.h */, + 76AAA40A1D18106000C54FCB /* spine-cocos2dx.cpp */, + 76AAA40B1D18106000C54FCB /* spine-cocos2dx.h */, + ); + name = "spine-cocos2dx"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1D6058900D05DD3D006BFB54 /* spine-cocos2d-x-mobile */ = { + isa = PBXNativeTarget; + buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "spine-cocos2d-x-mobile" */; + buildPhases = ( + 1D60588D0D05DD3D006BFB54 /* Resources */, + 1D60588E0D05DD3D006BFB54 /* Sources */, + 1D60588F0D05DD3D006BFB54 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 1AC6FB25180E99E1004C840B /* PBXTargetDependency */, + ); + name = "spine-cocos2d-x-mobile"; + productName = iphone; + productReference = 1D6058910D05DD3D006BFB54 /* spine-cocos2d-x-mobile.app */; + productType = "com.apple.product-type.application"; + }; + 5087E73D17EB910900C73F5D /* spine-cocos2d-x-desktop */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5087E76C17EB910900C73F5D /* Build configuration list for PBXNativeTarget "spine-cocos2d-x-desktop" */; + buildPhases = ( + 5087E74817EB910900C73F5D /* Resources */, + 5087E75617EB910900C73F5D /* Sources */, + 5087E75C17EB910900C73F5D /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 1AC6FB16180E9959004C840B /* PBXTargetDependency */, + ); + name = "spine-cocos2d-x-desktop"; + productName = iphone; + productReference = 5087E76F17EB910900C73F5D /* spine-cocos2d-x-desktop.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 29B97313FDCFA39411CA2CEA /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0500; + }; + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "spine-cocos2d-x" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 1AC6FAE6180E9839004C840B /* Products */; + ProjectRef = 1AC6FAE5180E9839004C840B /* cocos2d_libs.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 1D6058900D05DD3D006BFB54 /* spine-cocos2d-x-mobile */, + 5087E73D17EB910900C73F5D /* spine-cocos2d-x-desktop */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 1AC6FAF9180E9839004C840B /* libcocos2d Mac.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libcocos2d Mac.a"; + remoteRef = 1AC6FAF8180E9839004C840B /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 1AC6FB07180E9839004C840B /* libcocos2d iOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libcocos2d iOS.a"; + remoteRef = 1AC6FB06180E9839004C840B /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 76AAA3B11D180F5D00C54FCB /* libcocos2d tvOS.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = "libcocos2d tvOS.a"; + remoteRef = 76AAA3B01D180F5D00C54FCB /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 1D60588D0D05DD3D006BFB54 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5087E78117EB970100C73F5D /* Icon-120.png in Resources */, + 5087E78617EB970100C73F5D /* Icon-76.png in Resources */, + 5087E77F17EB970100C73F5D /* Default@2x.png in Resources */, + 50EF629917ECD46A001EB2F8 /* Icon-100.png in Resources */, + 5087E78317EB970100C73F5D /* Icon-152.png in Resources */, + 5087E77D17EB970100C73F5D /* Default-568h@2x.png in Resources */, + 5087E78517EB970100C73F5D /* Icon-72.png in Resources */, + 76AAA4571D18132D00C54FCB /* common in Resources */, + 76AAA4591D18132D00C54FCB /* ipad in Resources */, + 521A8E6519F0C34300D177D7 /* Default-736h@3x.png in Resources */, + 50EF62A317ECD613001EB2F8 /* Icon-50.png in Resources */, + 5087E78017EB970100C73F5D /* Icon-114.png in Resources */, + 50EF62A217ECD613001EB2F8 /* Icon-29.png in Resources */, + 50EF629617ECD46A001EB2F8 /* Icon-40.png in Resources */, + 5087E78217EB970100C73F5D /* Icon-144.png in Resources */, + 76AAA45F1D18132D00C54FCB /* iphone-retina in Resources */, + 76AAA45B1D18132D00C54FCB /* ipad-retina in Resources */, + 50EF629817ECD46A001EB2F8 /* Icon-80.png in Resources */, + 5087E78417EB970100C73F5D /* Icon-57.png in Resources */, + 5087E77E17EB970100C73F5D /* Default.png in Resources */, + 76AAA45D1D18132D00C54FCB /* iphone in Resources */, + 521A8E6419F0C34300D177D7 /* Default-667h@2x.png in Resources */, + 50EF629717ECD46A001EB2F8 /* Icon-58.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5087E74817EB910900C73F5D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 76AAA45E1D18132D00C54FCB /* iphone in Resources */, + 503AE0F817EB97AB00D1A890 /* Icon.icns in Resources */, + 76AAA4601D18132D00C54FCB /* iphone-retina in Resources */, + 76AAA45C1D18132D00C54FCB /* ipad-retina in Resources */, + 76AAA4581D18132D00C54FCB /* common in Resources */, + 76AAA45A1D18132D00C54FCB /* ipad in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 1D60588E0D05DD3D006BFB54 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 76AAA3E61D180FA800C54FCB /* Atlas.c in Sources */, + 76AAA40C1D18106000C54FCB /* AttachmentVertices.cpp in Sources */, + 76AAA3EA1D180FA800C54FCB /* Bone.c in Sources */, + 76AAA3ED1D180FA800C54FCB /* Event.c in Sources */, + 76AAA3E31D180FA800C54FCB /* Animation.c in Sources */, + 76AAA3F81D180FA800C54FCB /* SkeletonJson.c in Sources */, + 76AAA3C51D180F7C00C54FCB /* SpineboyExample.cpp in Sources */, + 76AAA3F21D180FA800C54FCB /* Json.c in Sources */, + 76AAA3F71D180FA800C54FCB /* SkeletonData.c in Sources */, + 76AAA3E91D180FA800C54FCB /* AttachmentLoader.c in Sources */, + 76AAA3F11D180FA800C54FCB /* IkConstraintData.c in Sources */, + 76AAA3F51D180FA800C54FCB /* Skeleton.c in Sources */, + 76AAA3FE1D180FA800C54FCB /* WeightedMeshAttachment.c in Sources */, + 76AAA3EB1D180FA800C54FCB /* BoneData.c in Sources */, + 76AAA3F91D180FA800C54FCB /* Skin.c in Sources */, + 76AAA3C11D180F7C00C54FCB /* BatchingExample.cpp in Sources */, + 76AAA40D1D18106000C54FCB /* Cocos2dAttachmentLoader.cpp in Sources */, + 76AAA3E41D180FA800C54FCB /* AnimationState.c in Sources */, + 76AAA3EF1D180FA800C54FCB /* extension.c in Sources */, + 76AAA3FA1D180FA800C54FCB /* Slot.c in Sources */, + 76AAA3FC1D180FA800C54FCB /* TransformConstraint.c in Sources */, + 76AAA40F1D18106000C54FCB /* SkeletonBatch.cpp in Sources */, + 76AAA3F01D180FA800C54FCB /* IkConstraint.c in Sources */, + 76AAA3C31D180F7C00C54FCB /* RaptorExample.cpp in Sources */, + 76AAA3F61D180FA800C54FCB /* SkeletonBounds.c in Sources */, + 76AAA3EC1D180FA800C54FCB /* BoundingBoxAttachment.c in Sources */, + 76AAA3C01D180F7C00C54FCB /* AppDelegate.cpp in Sources */, + 76AAA3C41D180F7C00C54FCB /* SimpleCommand.cpp in Sources */, + 503AE10017EB989F00D1A890 /* AppController.mm in Sources */, + 76AAA3E81D180FA800C54FCB /* Attachment.c in Sources */, + 76AAA3F31D180FA800C54FCB /* MeshAttachment.c in Sources */, + 76AAA3E71D180FA800C54FCB /* AtlasAttachmentLoader.c in Sources */, + 76AAA3FB1D180FA800C54FCB /* SlotData.c in Sources */, + 76AAA3FD1D180FA800C54FCB /* TransformConstraintData.c in Sources */, + 76AAA3EE1D180FA800C54FCB /* EventData.c in Sources */, + 76AAA3E51D180FA800C54FCB /* AnimationStateData.c in Sources */, + 76AAA40E1D18106000C54FCB /* SkeletonAnimation.cpp in Sources */, + 76AAA4111D18106000C54FCB /* spine-cocos2dx.cpp in Sources */, + 76AAA3C21D180F7C00C54FCB /* GoblinsExample.cpp in Sources */, + 503AE10217EB989F00D1A890 /* RootViewController.mm in Sources */, + 76AAA3F41D180FA800C54FCB /* RegionAttachment.c in Sources */, + 503AE10117EB989F00D1A890 /* main.m in Sources */, + 76AAA4101D18106000C54FCB /* SkeletonRenderer.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5087E75617EB910900C73F5D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 76AAA43B1D1811B000C54FCB /* AppDelegate.cpp in Sources */, + 76AAA43C1D1811B000C54FCB /* AppDelegate.h in Sources */, + 76AAA43D1D1811B000C54FCB /* AppMacros.h in Sources */, + 76AAA43E1D1811B000C54FCB /* BatchingExample.cpp in Sources */, + 76AAA43F1D1811B000C54FCB /* BatchingExample.h in Sources */, + 76AAA4401D1811B000C54FCB /* GoblinsExample.cpp in Sources */, + 76AAA4411D1811B000C54FCB /* GoblinsExample.h in Sources */, + 76AAA4421D1811B000C54FCB /* RaptorExample.cpp in Sources */, + 76AAA4431D1811B000C54FCB /* RaptorExample.h in Sources */, + 76AAA4441D1811B000C54FCB /* SimpleCommand.cpp in Sources */, + 76AAA4451D1811B000C54FCB /* SimpleCommand.h in Sources */, + 76AAA4461D1811B000C54FCB /* SpineboyExample.cpp in Sources */, + 76AAA4471D1811B000C54FCB /* SpineboyExample.h in Sources */, + 76AAA41E1D1811A700C54FCB /* Animation.c in Sources */, + 76AAA41F1D1811A700C54FCB /* AnimationState.c in Sources */, + 76AAA4201D1811A700C54FCB /* AnimationStateData.c in Sources */, + 76AAA4211D1811A700C54FCB /* Atlas.c in Sources */, + 76AAA4221D1811A700C54FCB /* AtlasAttachmentLoader.c in Sources */, + 76AAA4231D1811A700C54FCB /* Attachment.c in Sources */, + 76AAA4241D1811A700C54FCB /* AttachmentLoader.c in Sources */, + 76AAA4251D1811A700C54FCB /* Bone.c in Sources */, + 76AAA4261D1811A700C54FCB /* BoneData.c in Sources */, + 76AAA4271D1811A700C54FCB /* BoundingBoxAttachment.c in Sources */, + 76AAA4281D1811A700C54FCB /* Event.c in Sources */, + 76AAA4291D1811A700C54FCB /* EventData.c in Sources */, + 76AAA42A1D1811A700C54FCB /* extension.c in Sources */, + 76AAA42B1D1811A700C54FCB /* IkConstraint.c in Sources */, + 76AAA42C1D1811A700C54FCB /* IkConstraintData.c in Sources */, + 76AAA42D1D1811A700C54FCB /* Json.c in Sources */, + 76AAA42E1D1811A700C54FCB /* Json.h in Sources */, + 76AAA42F1D1811A700C54FCB /* MeshAttachment.c in Sources */, + 76AAA4301D1811A700C54FCB /* RegionAttachment.c in Sources */, + 76AAA4311D1811A700C54FCB /* Skeleton.c in Sources */, + 76AAA4321D1811A700C54FCB /* SkeletonBounds.c in Sources */, + 76AAA4331D1811A700C54FCB /* SkeletonData.c in Sources */, + 76AAA4341D1811A700C54FCB /* SkeletonJson.c in Sources */, + 76AAA4351D1811A700C54FCB /* Skin.c in Sources */, + 76AAA4361D1811A700C54FCB /* Slot.c in Sources */, + 76AAA4371D1811A700C54FCB /* SlotData.c in Sources */, + 76AAA4381D1811A700C54FCB /* TransformConstraint.c in Sources */, + 76AAA4391D1811A700C54FCB /* TransformConstraintData.c in Sources */, + 76AAA43A1D1811A700C54FCB /* WeightedMeshAttachment.c in Sources */, + 76AAA4121D18119F00C54FCB /* AttachmentVertices.cpp in Sources */, + 76AAA4131D18119F00C54FCB /* AttachmentVertices.h in Sources */, + 76AAA4141D18119F00C54FCB /* Cocos2dAttachmentLoader.cpp in Sources */, + 76AAA4151D18119F00C54FCB /* Cocos2dAttachmentLoader.h in Sources */, + 76AAA4161D18119F00C54FCB /* SkeletonAnimation.cpp in Sources */, + 76AAA4171D18119F00C54FCB /* SkeletonAnimation.h in Sources */, + 76AAA4181D18119F00C54FCB /* SkeletonBatch.cpp in Sources */, + 76AAA4191D18119F00C54FCB /* SkeletonBatch.h in Sources */, + 76AAA41A1D18119F00C54FCB /* SkeletonRenderer.cpp in Sources */, + 76AAA41B1D18119F00C54FCB /* SkeletonRenderer.h in Sources */, + 76AAA41C1D18119F00C54FCB /* spine-cocos2dx.cpp in Sources */, + 76AAA41D1D18119F00C54FCB /* spine-cocos2dx.h in Sources */, + 503AE10517EB98FF00D1A890 /* main.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 1AC6FB16180E9959004C840B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "cocos2dx Mac"; + targetProxy = 1AC6FB15180E9959004C840B /* PBXContainerItemProxy */; + }; + 1AC6FB25180E99E1004C840B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "cocos2dx iOS"; + targetProxy = 1AC6FB24180E99E1004C840B /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 1D6058940D05DD3E006BFB54 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COMPRESS_PNG_FILES = NO; + ENABLE_BITCODE = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ios/Prefix.pch; + GCC_PREPROCESSOR_DEFINITIONS = ( + USE_FILE32API, + "COCOS2D_DEBUG=1", + "CC_ENABLE_CHIPMUNK_INTEGRATION=1", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = ios/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LIBRARY_SEARCH_PATHS = ""; + OTHER_LDFLAGS = ( + "$(_COCOS_LIB_IOS_BEGIN)", + "$(_COCOS_LIB_IOS_END)", + ); + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + USER_HEADER_SEARCH_PATHS = "$(_COCOS_HEADER_IOS_BEGIN) $(_COCOS_HEADER_IOS_END)"; + VALID_ARCHS = "arm64 armv7"; + }; + name = Debug; + }; + 1D6058950D05DD3E006BFB54 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COMPRESS_PNG_FILES = NO; + ENABLE_BITCODE = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = ios/Prefix.pch; + GCC_PREPROCESSOR_DEFINITIONS = ( + USE_FILE32API, + "CC_ENABLE_CHIPMUNK_INTEGRATION=1", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = "$(inherited)"; + INFOPLIST_FILE = ios/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LIBRARY_SEARCH_PATHS = ""; + OTHER_LDFLAGS = ( + "$(_COCOS_LIB_IOS_BEGIN)", + "$(_COCOS_LIB_IOS_END)", + ); + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + USER_HEADER_SEARCH_PATHS = "$(_COCOS_HEADER_IOS_BEGIN) $(_COCOS_HEADER_IOS_END)"; + VALID_ARCHS = "arm64 armv7"; + }; + name = Release; + }; + 5087E76D17EB910900C73F5D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = mac/Prefix.pch; + GCC_PREPROCESSOR_DEFINITIONS = ( + USE_FILE32API, + "COCOS2D_DEBUG=1", + "CC_ENABLE_CHIPMUNK_INTEGRATION=1", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../cocos2d/external/glfw3/include/mac", + ); + INFOPLIST_FILE = mac/Info.plist; + LIBRARY_SEARCH_PATHS = ""; + OTHER_LDFLAGS = ( + "$(_COCOS_LIB_MAC_BEGIN)", + "$(_COCOS_LIB_MAC_END)", + ); + USER_HEADER_SEARCH_PATHS = "$(_COCOS_HEADER_MAC_BEGIN) $(_COCOS_HEADER_MAC_END)"; + }; + name = Debug; + }; + 5087E76E17EB910900C73F5D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = YES; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = mac/Prefix.pch; + GCC_PREPROCESSOR_DEFINITIONS = ( + USE_FILE32API, + "CC_ENABLE_CHIPMUNK_INTEGRATION=1", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(SRCROOT)/../cocos2d/external/glfw3/include/mac", + ); + INFOPLIST_FILE = mac/Info.plist; + LIBRARY_SEARCH_PATHS = ""; + OTHER_LDFLAGS = ( + "$(_COCOS_LIB_MAC_BEGIN)", + "$(_COCOS_LIB_MAC_END)", + ); + USER_HEADER_SEARCH_PATHS = "$(_COCOS_HEADER_MAC_BEGIN) $(_COCOS_HEADER_MAC_END)"; + }; + name = Release; + }; + C01FCF4F08A954540054247B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + COPY_PHASE_STRIP = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cocos2d", + "$(SRCROOT)/../cocos2d/cocos/audio/include", + "$(SRCROOT)/../cocos2d/cocos", + "$(SRCROOT)/../cocos2d/extensions", + "$(SRCROOT)/../cocos2d/external", + "$(SRCROOT)/../cocos2d/external/chipmunk/include/chipmunk", + "$(SRCROOT)/../../../spine-c/include", + "$(SRCROOT)/../../src", + ); + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + MACOSX_DEPLOYMENT_TARGET = 10.7; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + }; + name = Debug; + }; + C01FCF5008A954540054247B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../cocos2d", + "$(SRCROOT)/../cocos2d/cocos/audio/include", + "$(SRCROOT)/../cocos2d/cocos", + "$(SRCROOT)/../cocos2d/extensions", + "$(SRCROOT)/../cocos2d/external", + "$(SRCROOT)/../cocos2d/external/chipmunk/include/chipmunk", + "$(SRCROOT)/../../../spine-c/include", + "$(SRCROOT)/../../src", + ); + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + MACOSX_DEPLOYMENT_TARGET = 10.7; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "spine-cocos2d-x-mobile" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1D6058940D05DD3E006BFB54 /* Debug */, + 1D6058950D05DD3E006BFB54 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + 5087E76C17EB910900C73F5D /* Build configuration list for PBXNativeTarget "spine-cocos2d-x-desktop" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5087E76D17EB910900C73F5D /* Debug */, + 5087E76E17EB910900C73F5D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "spine-cocos2d-x" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C01FCF4F08A954540054247B /* Debug */, + C01FCF5008A954540054247B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */; +} diff --git a/spine-cocos2d-iphone/2/spine-cocos2d-iphone-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/spine-cocos2dx/example/proj.ios_mac/spine-cocos2d-x.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 64% rename from spine-cocos2d-iphone/2/spine-cocos2d-iphone-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to spine-cocos2dx/example/proj.ios_mac/spine-cocos2d-x.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 0eb03b25f..919434a62 100644 --- a/spine-cocos2d-iphone/2/spine-cocos2d-iphone-mac.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/spine-cocos2dx/example/proj.ios_mac/spine-cocos2d-x.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/spine-cocos2dx/example/proj.linux/main.cpp b/spine-cocos2dx/example/proj.linux/main.cpp new file mode 100644 index 000000000..c5b735da7 --- /dev/null +++ b/spine-cocos2dx/example/proj.linux/main.cpp @@ -0,0 +1,15 @@ +#include "../Classes/AppDelegate.h" + +#include +#include +#include +#include + +USING_NS_CC; + +int main(int argc, char **argv) +{ + // create the application instance + AppDelegate app; + return Application::getInstance()->run(); +} diff --git a/spine-cocos2dx/example/proj.win32/build-cfg.json b/spine-cocos2dx/example/proj.win32/build-cfg.json new file mode 100644 index 000000000..aae4d7a05 --- /dev/null +++ b/spine-cocos2dx/example/proj.win32/build-cfg.json @@ -0,0 +1,8 @@ +{ + "copy_resources": [ + { + "from": "../Resources", + "to": "" + } + ] +} diff --git a/spine-cocos2dx/example/proj.win32/game.rc b/spine-cocos2dx/example/proj.win32/game.rc new file mode 100644 index 000000000..1e0a2a0da --- /dev/null +++ b/spine-cocos2dx/example/proj.win32/game.rc @@ -0,0 +1,86 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#define APSTUDIO_HIDDEN_SYMBOLS +#include "windows.h" +#undef APSTUDIO_HIDDEN_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +GLFW_ICON ICON "res\\game.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904B0" + BEGIN + VALUE "CompanyName", "\0" + VALUE "FileDescription", "game Module\0" + VALUE "FileVersion", "1, 0, 0, 1\0" + VALUE "InternalName", "game\0" + VALUE "LegalCopyright", "Copyright \0" + VALUE "OriginalFilename", "game.exe\0" + VALUE "ProductName", "game Module\0" + VALUE "ProductVersion", "1, 0, 0, 1\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 0x04B0 + END +END + +///////////////////////////////////////////////////////////////////////////// +#endif // !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) diff --git a/spine-cocos2dx/example/proj.win32/main.cpp b/spine-cocos2dx/example/proj.win32/main.cpp new file mode 100644 index 000000000..61ae71ffc --- /dev/null +++ b/spine-cocos2dx/example/proj.win32/main.cpp @@ -0,0 +1,18 @@ +#include "main.h" +#include "AppDelegate.h" +#include "cocos2d.h" + +USING_NS_CC; + +int APIENTRY _tWinMain(HINSTANCE hInstance, + HINSTANCE hPrevInstance, + LPTSTR lpCmdLine, + int nCmdShow) +{ + UNREFERENCED_PARAMETER(hPrevInstance); + UNREFERENCED_PARAMETER(lpCmdLine); + + // create the application instance + AppDelegate app; + return Application::getInstance()->run(); +} diff --git a/spine-cocos2dx/example/proj.win32/main.h b/spine-cocos2dx/example/proj.win32/main.h new file mode 100644 index 000000000..095e22791 --- /dev/null +++ b/spine-cocos2dx/example/proj.win32/main.h @@ -0,0 +1,13 @@ +#ifndef __MAIN_H__ +#define __MAIN_H__ + +#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers + +// Windows Header Files: +#include +#include + +// C RunTime Header Files +#include "platform/CCStdC.h" + +#endif // __MAIN_H__ diff --git a/spine-cocos2dx/example/proj.win32/res/game.ico b/spine-cocos2dx/example/proj.win32/res/game.ico new file mode 100644 index 000000000..feaf932a7 Binary files /dev/null and b/spine-cocos2dx/example/proj.win32/res/game.ico differ diff --git a/spine-cocos2dx/example/proj.win32/resource.h b/spine-cocos2dx/example/proj.win32/resource.h new file mode 100644 index 000000000..376870ba1 --- /dev/null +++ b/spine-cocos2dx/example/proj.win32/resource.h @@ -0,0 +1,20 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by game.RC +// + +#define IDS_PROJNAME 100 +#define IDR_TESTJS 100 + +#define ID_FILE_NEW_WINDOW 32771 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 201 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 32775 +#endif +#endif diff --git a/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.sln b/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.sln new file mode 100644 index 000000000..7d2a252dd --- /dev/null +++ b/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.sln @@ -0,0 +1,49 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.24720.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "spine-cocos2d-x", "spine-cocos2d-x.vcxproj", "{76A39BB2-9B84-4C65-98A5-654D86B86F2A}" + ProjectSection(ProjectDependencies) = postProject + {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E} = {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libcocos2d", "..\cocos2d\cocos\2d\libcocos2d.vcxproj", "{98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbox2d", "..\cocos2d\external\Box2D\proj.win32\libbox2d.vcxproj", "{929480E7-23C0-4DF6-8456-096D71547116}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbullet", "..\cocos2d\external\bullet\proj.win32\libbullet.vcxproj", "{012DFF48-A13F-4F52-B07B-F8B9D21CE95B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "librecast", "..\cocos2d\external\recast\proj.win32\librecast.vcxproj", "{41E34993-647E-4282-8384-4AB1AE31A452}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Debug|Win32.ActiveCfg = Debug|Win32 + {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Debug|Win32.Build.0 = Debug|Win32 + {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Release|Win32.ActiveCfg = Release|Win32 + {76A39BB2-9B84-4C65-98A5-654D86B86F2A}.Release|Win32.Build.0 = Release|Win32 + {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.ActiveCfg = Debug|Win32 + {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Debug|Win32.Build.0 = Debug|Win32 + {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.ActiveCfg = Release|Win32 + {98A51BA8-FC3A-415B-AC8F-8C7BD464E93E}.Release|Win32.Build.0 = Release|Win32 + {929480E7-23C0-4DF6-8456-096D71547116}.Debug|Win32.ActiveCfg = Debug|Win32 + {929480E7-23C0-4DF6-8456-096D71547116}.Debug|Win32.Build.0 = Debug|Win32 + {929480E7-23C0-4DF6-8456-096D71547116}.Release|Win32.ActiveCfg = Release|Win32 + {929480E7-23C0-4DF6-8456-096D71547116}.Release|Win32.Build.0 = Release|Win32 + {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Debug|Win32.ActiveCfg = Debug|Win32 + {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Debug|Win32.Build.0 = Debug|Win32 + {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Release|Win32.ActiveCfg = Release|Win32 + {012DFF48-A13F-4F52-B07B-F8B9D21CE95B}.Release|Win32.Build.0 = Release|Win32 + {41E34993-647E-4282-8384-4AB1AE31A452}.Debug|Win32.ActiveCfg = Debug|Win32 + {41E34993-647E-4282-8384-4AB1AE31A452}.Debug|Win32.Build.0 = Debug|Win32 + {41E34993-647E-4282-8384-4AB1AE31A452}.Release|Win32.ActiveCfg = Release|Win32 + {41E34993-647E-4282-8384-4AB1AE31A452}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj b/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj new file mode 100644 index 000000000..9c9618356 --- /dev/null +++ b/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj @@ -0,0 +1,250 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {76A39BB2-9B84-4C65-98A5-654D86B86F2A} + test_win32 + Win32Proj + + + + Application + Unicode + true + v120 + v120_xp + v140 + v140_xp + + + Application + Unicode + v120 + v120_xp + v140 + v140_xp + + + + + + + + + + + + + + + + + <_ProjectFileVersion>12.0.21005.1 + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + true + $(SolutionDir)$(Configuration).win32\ + $(Configuration).win32\ + false + AllRules.ruleset + + + AllRules.ruleset + + + + + $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;$(LibraryPath) + $(VC_IncludePath);$(WindowsSdk_71A_IncludePath); + + + $(MSBuildProgramFiles32)\Microsoft SDKs\Windows\v7.1A\lib;$(LibraryPath) + + + + Disabled + $(EngineRoot)external;$(EngineRoot)cocos\audio\include;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)extensions;..\Classes;..;%(AdditionalIncludeDirectories);$(_COCOS_HEADER_WIN32_BEGIN);$(_COCOS_HEADER_WIN32_END);$(SolutionDir)..\..\..\spine-c\include;$(SolutionDir)..\..\src;$(IncludePath) + WIN32;_DEBUG;_WINDOWS;_USE_MATH_DEFINES;GL_GLEXT_PROTOTYPES;CC_ENABLE_CHIPMUNK_INTEGRATION=1;COCOS2D_DEBUG=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + false + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + EditAndContinue + 4267;4251;4244;%(DisableSpecificWarnings) + true + + + %(AdditionalDependencies);$(_COCOS_LIB_WIN32_BEGIN);$(_COCOS_LIB_WIN32_END) + $(OutDir)$(ProjectName).exe + $(OutDir);%(AdditionalLibraryDirectories);$(_COCOS_LIB_PATH_WIN32_BEGIN);$(_COCOS_LIB_PATH_WIN32_END) + true + Windows + MachineX86 + + + + + + + + + + + + + if not exist "$(OutDir)" mkdir "$(OutDir)" +xcopy "$(ProjectDir)..\Resources" "$(OutDir)" /D /E /I /F /Y + + $(TargetName).cab + $(TargetFileName) + + + + + MaxSpeed + true + $(EngineRoot)external;$(EngineRoot)cocos\audio\include;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)extensions;..\Classes;..;%(AdditionalIncludeDirectories);$(_COCOS_HEADER_WIN32_BEGIN);$(_COCOS_HEADER_WIN32_END) + WIN32;NDEBUG;_WINDOWS;_USE_MATH_DEFINES;GL_GLEXT_PROTOTYPES;CC_ENABLE_CHIPMUNK_INTEGRATION=1;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + ProgramDatabase + 4267;4251;4244;%(DisableSpecificWarnings) + true + + + libcurl_imp.lib;websockets.lib;%(AdditionalDependencies);$(_COCOS_LIB_WIN32_BEGIN);$(_COCOS_LIB_WIN32_END) + $(OutDir)$(ProjectName).exe + $(OutDir);%(AdditionalLibraryDirectories);$(_COCOS_LIB_PATH_WIN32_BEGIN);$(_COCOS_LIB_PATH_WIN32_END) + true + Windows + true + true + MachineX86 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {98a51ba8-fc3a-415b-ac8f-8c7bd464e93e} + false + + + {929480e7-23c0-4df6-8456-096d71547116} + + + + + + + + + \ No newline at end of file diff --git a/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj.filters b/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj.filters new file mode 100644 index 000000000..1332e7ae7 --- /dev/null +++ b/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.vcxproj.filters @@ -0,0 +1,281 @@ + + + + + {84a8ebd7-7cf0-47f6-b75e-d441df67da40} + + + {715254bc-d70b-4ec5-bf29-467dd3ace079} + + + {bb6c862e-70e9-49d9-81b7-3829a6f50471} + + + {0eeabf42-523f-4983-a607-9ae84c92f216} + + + {4de62658-4c5f-4619-82c3-d1aeda912456} + + + + + win32 + + + src + + + src + + + src + + + src + + + src + + + src + + + spine-cocos2dx + + + spine-cocos2dx + + + spine-cocos2dx + + + spine-cocos2dx + + + spine-cocos2dx + + + spine-cocos2dx + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + + + win32 + + + src + + + src + + + src + + + src + + + src + + + src + + + src + + + spine-cocos2dx + + + spine-cocos2dx + + + spine-cocos2dx + + + spine-cocos2dx + + + spine-cocos2dx + + + spine-cocos2dx + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + spine + + + + + resource + + + \ No newline at end of file diff --git a/spine-cocos2dx/3/src/spine/AttachmentVertices.cpp b/spine-cocos2dx/src/spine/AttachmentVertices.cpp similarity index 100% rename from spine-cocos2dx/3/src/spine/AttachmentVertices.cpp rename to spine-cocos2dx/src/spine/AttachmentVertices.cpp diff --git a/spine-cocos2dx/3/src/spine/AttachmentVertices.h b/spine-cocos2dx/src/spine/AttachmentVertices.h similarity index 100% rename from spine-cocos2dx/3/src/spine/AttachmentVertices.h rename to spine-cocos2dx/src/spine/AttachmentVertices.h diff --git a/spine-cocos2dx/3/src/spine/Cocos2dAttachmentLoader.cpp b/spine-cocos2dx/src/spine/Cocos2dAttachmentLoader.cpp similarity index 93% rename from spine-cocos2dx/3/src/spine/Cocos2dAttachmentLoader.cpp rename to spine-cocos2dx/src/spine/Cocos2dAttachmentLoader.cpp index 7a8fb4b29..3b3dbde2b 100644 --- a/spine-cocos2dx/3/src/spine/Cocos2dAttachmentLoader.cpp +++ b/spine-cocos2dx/src/spine/Cocos2dAttachmentLoader.cpp @@ -111,9 +111,15 @@ void _Cocos2dAttachmentLoader_disposeAttachment (spAttachmentLoader* loader, spA } } +void _Cocos2dAttachmentLoader_dispose (spAttachmentLoader* loader) { + Cocos2dAttachmentLoader* self = SUB_CAST(Cocos2dAttachmentLoader, loader); + spAttachmentLoader_dispose(SUPER_CAST(spAttachmentLoader, self->atlasAttachmentLoader)); + _spAttachmentLoader_deinit(loader); +} + Cocos2dAttachmentLoader* Cocos2dAttachmentLoader_create (spAtlas* atlas) { Cocos2dAttachmentLoader* self = NEW(Cocos2dAttachmentLoader); - _spAttachmentLoader_init(SUPER(self), _spAttachmentLoader_deinit, _Cocos2dAttachmentLoader_createAttachment, + _spAttachmentLoader_init(SUPER(self), _Cocos2dAttachmentLoader_dispose, _Cocos2dAttachmentLoader_createAttachment, _Cocos2dAttachmentLoader_configureAttachment, _Cocos2dAttachmentLoader_disposeAttachment); self->atlasAttachmentLoader = spAtlasAttachmentLoader_create(atlas); return self; diff --git a/spine-cocos2dx/3/src/spine/Cocos2dAttachmentLoader.h b/spine-cocos2dx/src/spine/Cocos2dAttachmentLoader.h similarity index 100% rename from spine-cocos2dx/3/src/spine/Cocos2dAttachmentLoader.h rename to spine-cocos2dx/src/spine/Cocos2dAttachmentLoader.h diff --git a/spine-cocos2dx/3/src/spine/SkeletonAnimation.cpp b/spine-cocos2dx/src/spine/SkeletonAnimation.cpp similarity index 100% rename from spine-cocos2dx/3/src/spine/SkeletonAnimation.cpp rename to spine-cocos2dx/src/spine/SkeletonAnimation.cpp diff --git a/spine-cocos2dx/3/src/spine/SkeletonAnimation.h b/spine-cocos2dx/src/spine/SkeletonAnimation.h similarity index 100% rename from spine-cocos2dx/3/src/spine/SkeletonAnimation.h rename to spine-cocos2dx/src/spine/SkeletonAnimation.h diff --git a/spine-cocos2dx/3/src/spine/SkeletonBatch.cpp b/spine-cocos2dx/src/spine/SkeletonBatch.cpp similarity index 100% rename from spine-cocos2dx/3/src/spine/SkeletonBatch.cpp rename to spine-cocos2dx/src/spine/SkeletonBatch.cpp diff --git a/spine-cocos2dx/3/src/spine/SkeletonBatch.h b/spine-cocos2dx/src/spine/SkeletonBatch.h similarity index 100% rename from spine-cocos2dx/3/src/spine/SkeletonBatch.h rename to spine-cocos2dx/src/spine/SkeletonBatch.h diff --git a/spine-cocos2dx/3/src/spine/SkeletonRenderer.cpp b/spine-cocos2dx/src/spine/SkeletonRenderer.cpp similarity index 100% rename from spine-cocos2dx/3/src/spine/SkeletonRenderer.cpp rename to spine-cocos2dx/src/spine/SkeletonRenderer.cpp diff --git a/spine-cocos2dx/3/src/spine/SkeletonRenderer.h b/spine-cocos2dx/src/spine/SkeletonRenderer.h similarity index 100% rename from spine-cocos2dx/3/src/spine/SkeletonRenderer.h rename to spine-cocos2dx/src/spine/SkeletonRenderer.h diff --git a/spine-cocos2dx/3/src/spine/spine-cocos2dx.cpp b/spine-cocos2dx/src/spine/spine-cocos2dx.cpp similarity index 100% rename from spine-cocos2dx/3/src/spine/spine-cocos2dx.cpp rename to spine-cocos2dx/src/spine/spine-cocos2dx.cpp diff --git a/spine-cocos2dx/3/src/spine/spine-cocos2dx.h b/spine-cocos2dx/src/spine/spine-cocos2dx.h similarity index 100% rename from spine-cocos2dx/3/src/spine/spine-cocos2dx.h rename to spine-cocos2dx/src/spine/spine-cocos2dx.h diff --git a/spine-corona/README.md b/spine-corona/README.md index f1a0f46be..4c41f89dc 100644 --- a/spine-corona/README.md +++ b/spine-corona/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-corona works with data exported from Spine 2.1.27. Updating spine-corona to [v3.0](https://trello.com/c/tF8UykBM/72-update-runtimes-to-support-v3-0-skewing-scale), [v3.1](https://trello.com/c/bERJAFEq/73-update-runtimes-to-support-v3-1-linked-meshes), and [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-corona works with data exported from Spine 2.1.27. Updating spine-corona to [v3.0](https://trello.com/c/tF8UykBM/72-update-runtimes-to-support-v3-0-skewing-scale), [v3.1](https://trello.com/c/bERJAFEq/73-update-runtimes-to-support-v3-1-linked-meshes), [v3.2](https://github.com/EsotericSoftware/spine-runtimes/issues/586), and [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-corona supports all Spine features except for rendering meshes due to Corona having a limited graphics API. diff --git a/spine-corona/examples/spineboy/spineboy-mesh.json b/spine-corona/examples/spineboy/spineboy-mesh.json new file mode 100755 index 000000000..99bc632f0 --- /dev/null +++ b/spine-corona/examples/spineboy/spineboy-mesh.json @@ -0,0 +1,989 @@ +{ +"skeleton": { "hash": "UKMzD/MoxDbC0KR0YvXCqhXtBzo", "spine": "Dev", "width": 0, "height": 0, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "front_foot_ik", "parent": "root", "x": -13.52, "y": 0.04, "color": "ff3f00ff" }, + { "name": "hip", "parent": "root", "y": 247.26 }, + { "name": "rear_foot_ik", "parent": "root", "x": 61.9, "y": 0.42, "color": "ff3f00ff" }, + { "name": "front_ankle_ik", "parent": "front_foot_ik", "x": -28.39, "y": 29.06, "color": "ff3f00ff" }, + { "name": "front_thigh", "parent": "hip", "length": 74.8, "x": -17.45, "y": -11.64, "rotation": -95.51, "color": "00ff04ff" }, + { "name": "rear_ankle_ik", "parent": "rear_foot_ik", "x": -33.9, "y": 37.33, "color": "ff3f00ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "x": 8.91, "y": -5.62, "rotation": -72.54, "color": "ff000dff" }, + { "name": "torso", "parent": "hip", "length": 127.55, "x": -1.61, "y": 4.9, "rotation": 103.82, "color": "e0da19ff" }, + { + "name": "front_shin", + "parent": "front_thigh", + "length": 128.76, + "x": 78.69, + "y": 1.6, + "rotation": -2.21, + "inheritScale": false, + "color": "00ff04ff" + }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "x": 103.75, "y": 19.32, "rotation": 168.37, "color": "00ff04ff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "x": 127.49, "y": -0.3, "rotation": -31.53, "color": "e0da19ff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "x": 86.1, "y": -1.32, "rotation": -19.83, "color": "ff000dff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "x": 92.35, "y": -19.22, "rotation": -169.55, "color": "ff000dff" }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "x": 68.8, + "y": -0.68, + "rotation": 18.29, + "color": "00ff04ff" + }, + { "name": "front_foot", "parent": "front_shin", "length": 41, "x": 128.75, "y": -0.33, "rotation": 51.26, "color": "00ff04ff" }, + { "name": "head", "parent": "neck", "length": 131.79, "x": 27.66, "y": -0.25, "rotation": 23.18, "color": "e0da19ff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "x": 51.35, "rotation": 23.15, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 51.58, "x": 121.45, "y": -0.75, "rotation": 45.77, "color": "ff000dff" }, + { + "name": "back_foot_tip", + "parent": "rear_foot", + "length": 50.3, + "x": 51.16, + "y": 0.23, + "rotation": -0.85, + "inheritRotation": false, + "color": "ff000dff" + }, + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "x": 40.56, "y": 0.19, "rotation": 12.43, "color": "00ff04ff" }, + { + "name": "front_foot_tip", + "parent": "front_foot", + "length": 56.02, + "x": 41.42, + "y": -0.08, + "rotation": -1.67, + "inheritRotation": false, + "color": "00ff04ff" + }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "x": 34.42, "y": -0.45, "rotation": 5.34, "color": "ff000dff" }, + { "name": "hair1", "parent": "head", "length": 47.22, "x": 149.82, "y": -59.77, "rotation": -49.1, "color": "e0da19ff" }, + { "name": "hair3", "parent": "head", "length": 62.22, "x": 164.13, "y": 3.68, "rotation": -32.16, "color": "e0da19ff" }, + { "name": "gunTip", "parent": "gun", "x": 201.04, "y": 52.13, "rotation": 6.83, "color": "ff000dff" }, + { "name": "hair2", "parent": "hair1", "length": 55.56, "x": 47.22, "y": 0.18, "rotation": 50.41, "color": "e0da19ff" }, + { "name": "hair4", "parent": "hair3", "length": 80.28, "x": 62.22, "y": -0.03, "rotation": 83.7, "color": "e0da19ff" } +], +"ik": [ + { + "name": "front_ankle_ik", + "bones": [ "front_thigh", "front_shin" ], + "target": "front_ankle_ik", + "bendPositive": false + }, + { + "name": "rear_ankle_ik", + "bones": [ "rear_thigh", "rear_shin" ], + "target": "rear_ankle_ik", + "bendPositive": false + }, + { + "name": "front_foot_ik", + "bones": [ "front_foot" ], + "target": "front_foot_ik" + }, + { + "name": "rear_foot_ik", + "bones": [ "rear_foot" ], + "target": "rear_foot_ik" + } +], +"slots": [ + { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, + { "name": "rear_bracer", "bone": "rear_bracer", "attachment": "rear_bracer" }, + { "name": "gun", "bone": "gun", "attachment": "gun" }, + { "name": "rear_foot", "bone": "rear_foot", "attachment": "rear_foot" }, + { "name": "rear_thigh", "bone": "rear_thigh", "attachment": "rear_thigh" }, + { "name": "rear_shin", "bone": "rear_shin", "attachment": "rear_shin" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "torso", "bone": "torso", "attachment": "torso" }, + { "name": "front_upper_arm", "bone": "front_upper_arm", "attachment": "front_upper_arm" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "eye", "bone": "head", "attachment": "eye_indifferent" }, + { "name": "front_thigh", "bone": "front_thigh", "attachment": "front_thigh" }, + { "name": "front_foot", "bone": "front_foot", "attachment": "front_foot" }, + { "name": "front_shin", "bone": "front_shin", "attachment": "front_shin" }, + { "name": "mouth", "bone": "head", "attachment": "mouth_grind" }, + { "name": "goggles", "bone": "head", "attachment": "goggles" }, + { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, + { "name": "front_fist", "bone": "front_fist", "attachment": "front_fist_closed" }, + { "name": "muzzle", "bone": "gunTip", "additive": true }, + { "name": "head-bb", "bone": "head" } +], +"skins": { + "default": { + "eye": { + "eye_indifferent": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 59.16, -86.8, 28.32, 0.92, 112.27, 30.44, 143.11, -57.28 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 89 + }, + "eye_surprised": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 } + }, + "front_bracer": { + "front_bracer": { "x": 12.03, "y": -1.67, "rotation": 79.59, "width": 58, "height": 80 } + }, + "front_fist": { + "front_fist_closed": { "x": 35.49, "y": 6, "rotation": 67.16, "width": 75, "height": 82 }, + "front_fist_open": { "x": 39.56, "y": 7.76, "rotation": 67.16, "width": 86, "height": 87 } + }, + "front_foot": { + "front_foot": { + "type": "skinnedmesh", + "uvs": [ 0.59417, 0.23421, 0.62257, 0.30335, 0.65009, 0.37035, 0.67637, 0.38403, 0.72068, 0.40709, 0.76264, 0.42894, 1, 0.70375, 1, 1, 0.65517, 1, 0.3644, 1, 0, 1, 0, 0.39196, 0, 0, 0.17845, 0, 0.49795, 0 ], + "triangles": [ 8, 9, 3, 4, 8, 3, 8, 4, 5, 8, 5, 6, 8, 6, 7, 11, 12, 13, 11, 1, 10, 13, 14, 0, 0, 11, 13, 1, 11, 0, 2, 9, 10, 2, 10, 1, 9, 2, 3 ], + "vertices": [ 2, 15, 18.17, 41.57, 0.72, 21, 12.46, 46.04, 0.27, 2, 15, 24.08, 40.75, 0.57, 21, 16.12, 41.34, 0.42, 2, 15, 29.8, 39.97, 0.47, 21, 19.67, 36.77, 0.52, 2, 15, 32.8, 41.66, 0.37, 21, 22.99, 35.89, 0.62, 2, 15, 37.86, 44.51, 0.24, 21, 28.6, 34.4, 0.75, 2, 15, 42.65, 47.21, 0.17, 21, 33.91, 32.98, 0.82, 1, 21, 64.15, 14.56, 1, 1, 21, 64.51, -5.87, 1, 1, 21, 21.07, -6.63, 1, 2, 15, 35.38, -16.16, 0.99, 21, -15.54, -7.28, 0, 2, 15, 3.1, -48.81, 1, 21, -61.44, -8.09, 0, 2, 15, -26.72, -19.31, 1, 21, -62.18, 33.84, 0, 2, 15, -45.95, -0.29, 1, 21, -62.66, 60.88, 0, 1, 15, -30.14, 15.69, 1, 2, 15, -1.84, 44.31, 0.91, 21, 0.05, 61.98, 0.08 ], + "hull": 15, + "edges": [ 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 22, 24, 24, 26, 26, 28, 22, 26, 12, 14, 10, 12, 2, 4, 2, 20, 4, 6, 6, 16, 2, 0, 0, 28, 6, 8, 8, 10 ], + "width": 126, + "height": 69 + }, + "front_foot_bend1": { "x": 22.86, "y": 20.24, "rotation": 45.32, "width": 128, "height": 70 }, + "front_foot_bend2": { "x": 8.16, "y": 19.57, "rotation": 45.32, "width": 108, "height": 93 } + }, + "front_shin": { + "front_shin": { "x": 60.92, "y": -3.9, "rotation": 96.59, "width": 82, "height": 184 } + }, + "front_thigh": { + "front_thigh": { "x": 42.47, "y": 4.44, "rotation": 84.86, "width": 48, "height": 112 } + }, + "front_upper_arm": { + "front_upper_arm": { "x": 28.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } + }, + "goggles": { + "goggles": { + "type": "mesh", + "uvs": [ 0.53653, 0.04113, 0.72921, 0.16035, 0.91666, 0.33222, 0.97046, 0.31329, 1, 0.48053, 0.95755, 0.57329, 0.88825, 0.63279, 0.86877, 0.78962, 0.77403, 0.86749, 0.72628, 1, 0.60713, 0.93862, 0.496, 0.88138, 0.41557, 0.75026, 0.32547, 0.70084, 0.2782, 0.58256, 0.17209, 0.63281, 0.17228, 0.75071, 0.1078, 0.79897, 0, 0.32304, 0, 0.12475, 0.07372, 0.07343, 0.15423, 0.10733, 0.23165, 0.13994, 0.30313, 0.02256, 0.34802, 0, 0.42978, 0.69183, 0.39475, 0.51041, 0.39488, 0.31511, 0.45878, 0.23197, 0.56501, 0.28108, 0.6996, 0.39216, 0.82039, 0.54203, 0.85737, 0.62342, 0.91107, 0.51407, 0.72638, 0.32146, 0.58763, 0.19609, 0.48074, 0.11268, 0.37822, 0.05501, 0.32869, 0.17866, 0.31899, 0.30499, 0.36035, 0.53798, 0.40327, 0.70072, 0.30058, 0.55837, 0.21956, 0.2815, 0.09963, 0.28942, 0.56862, 0.4368, 0.4911, 0.37156, 0.51184, 0.52092, 0.67018, 0.59303, 0.7619, 0.68574, 0.73296, 0.43354 ], + "triangles": [ 49, 8, 48, 9, 48, 8, 12, 25, 11, 48, 9, 10, 47, 48, 10, 47, 10, 25, 25, 10, 11, 8, 49, 7, 17, 15, 16, 17, 18, 15, 49, 32, 7, 7, 32, 6, 41, 42, 40, 12, 41, 25, 41, 12, 42, 13, 14, 42, 12, 13, 42, 41, 40, 25, 40, 26, 25, 25, 26, 47, 49, 31, 32, 31, 49, 50, 18, 44, 15, 42, 14, 44, 14, 15, 44, 5, 6, 33, 6, 32, 33, 32, 31, 33, 47, 45, 48, 49, 48, 50, 50, 45, 30, 50, 48, 45, 42, 44, 43, 5, 33, 4, 42, 39, 40, 42, 43, 39, 31, 50, 33, 40, 39, 26, 45, 47, 46, 33, 2, 4, 2, 33, 34, 47, 26, 46, 26, 27, 46, 26, 39, 27, 2, 3, 4, 30, 45, 29, 30, 34, 50, 33, 50, 34, 45, 46, 29, 30, 29, 34, 27, 28, 46, 46, 28, 29, 18, 19, 44, 29, 35, 34, 2, 34, 1, 34, 35, 1, 28, 27, 38, 27, 39, 38, 39, 43, 38, 44, 19, 21, 44, 21, 43, 21, 19, 20, 43, 22, 38, 43, 21, 22, 29, 28, 35, 28, 36, 35, 28, 38, 36, 36, 0, 35, 35, 0, 1, 22, 23, 38, 38, 37, 36, 37, 23, 24, 37, 38, 23, 36, 37, 0, 37, 24, 0 ], + "vertices": [ 172.08, 22.81, 170.09, -31.19, 159.41, -86.8, 167.03, -99, 143.39, -115.48, 125.2, -110.14, 109.88, -96.35, 83.64, -100.19, 63.25, -81.15, 38.37, -76.69, 37.66, -43.98, 37, -13.47, 50.57, 13.54, 50.51, 38.45, 64.94, 56.6, 47.89, 79.94, 29.45, 73.42, 16.31, 86.63, 81.5, 139.38, 112.55, 150.28, 126.97, 134.97, 128.63, 113.28, 130.22, 92.43, 154.78, 81.29, 162.21, 71.48, 60.96, 13.26, 86.33, 31.87, 116.92, 42.6, 135.47, 31.44, 136.98, 2.58, 131.23, -36.66, 118.22, -74.65, 108.68, -88.23, 130.45, -95.43, 144.62, -39.36, 152.24, 1.69, 156.05, 32.59, 156.21, 61.01, 132.56, 66.4, 111.94, 61.83, 79.03, 38.83, 57.27, 19.29, 70.67, 52.42, 107.01, 87.61, 95.39, 116.7, 112.91, -6.87, 116.41, 15.8, 94.82, 2.47, 97.23, -40.47, 90.66, -68.16, 127.64, -47.15 ], + "hull": 25, + "edges": [ 36, 34, 34, 32, 32, 30, 30, 28, 28, 26, 26, 24, 24, 22, 18, 16, 16, 14, 14, 12, 12, 10, 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 48, 48, 46, 46, 44, 36, 38, 40, 38, 24, 50, 50, 52, 52, 54, 54, 56, 56, 58, 58, 60, 62, 64, 64, 12, 8, 66, 66, 68, 68, 70, 70, 72, 72, 74, 74, 76, 76, 78, 78, 80, 80, 82, 82, 24, 24, 84, 84, 86, 86, 44, 40, 42, 42, 44, 42, 88, 88, 30, 58, 90, 90, 92, 92, 94, 18, 20, 20, 22, 94, 20, 18, 96, 96, 98, 60, 100, 100, 62, 98, 100 ], + "width": 261, + "height": 166 + } + }, + "gun": { + "gun": { "x": 77.3, "y": 16.4, "rotation": 60.82, "width": 210, "height": 203 } + }, + "head": { + "head": { + "type": "skinnedmesh", + "uvs": [ 0.75918, 0.06107, 0.88392, 0.17892, 0.90174, 0.30856, 0.94223, 0.1966, 1, 0.26584, 1, 0.42199, 0.95863, 0.46992, 0.92118, 0.51333, 0.85957, 0.53469, 0.78388, 0.65605, 0.74384, 0.74838, 0.85115, 0.75151, 0.84828, 0.82563, 0.8178, 0.85367, 0.75598, 0.85906, 0.76236, 0.90467, 0.65875, 1, 0.38336, 1, 0.18579, 0.85403, 0.12741, 0.8109, 0.06024, 0.69209, 0, 0.58551, 0, 0.41021, 0.08529, 0.20691, 0.24243, 0.14504, 0.49999, 0.14209, 0.50323, 0.07433, 0.41738, 0, 0.57613, 0, 0.85059, 0.36086, 0.73431, 0.43206, 0.6848, 0.3127, 0.72164, 0.16717, 0.55931, 0.04153, 0.44763, 0.22894, 0.23925, 0.26559, 0.71271, 0.44035, 0.56992, 0.38299, 0.41678, 0.3351, 0.29299, 0.31496, 0.70801, 0.44501, 0.56676, 0.38976, 0.4152, 0.34416, 0.28753, 0.33017, 0.88988, 0.50176, 0.30388, 0.73462, 0.2646, 0.65674, 0.21414, 0.61583, 0.14612, 0.62193, 0.10315, 0.66636, 0.10357, 0.72556, 0.14505, 0.79163, 0.20263, 0.81355, 0.27872, 0.80158, 0.34946, 0.7376, 0.23073, 0.57073, 0.08878, 0.60706, 0.2946, 0.8129, 0.73005, 0.87883, 0.69804, 0.87348, 0.66165, 0.79681 ], + "triangles": [ 34, 25, 31, 37, 38, 34, 31, 32, 29, 31, 37, 34, 37, 41, 38, 30, 31, 29, 36, 37, 31, 33, 27, 28, 26, 27, 33, 0, 33, 28, 32, 33, 0, 32, 0, 1, 33, 25, 26, 33, 32, 25, 31, 25, 32, 2, 32, 1, 2, 3, 4, 2, 29, 32, 2, 4, 5, 29, 2, 5, 6, 29, 5, 30, 36, 31, 30, 29, 6, 44, 30, 6, 36, 30, 44, 34, 24, 25, 35, 23, 24, 35, 24, 34, 39, 35, 34, 39, 22, 35, 38, 39, 34, 42, 39, 38, 43, 39, 42, 41, 42, 38, 22, 23, 35, 43, 22, 39, 40, 37, 36, 41, 37, 40, 7, 44, 6, 8, 36, 44, 40, 36, 8, 8, 44, 7, 55, 22, 43, 56, 21, 22, 55, 56, 22, 55, 48, 56, 47, 48, 55, 9, 40, 8, 55, 54, 46, 42, 55, 43, 47, 55, 46, 49, 56, 48, 20, 21, 56, 20, 56, 49, 50, 49, 48, 20, 49, 50, 46, 54, 45, 54, 55, 41, 55, 42, 41, 9, 60, 40, 46, 51, 50, 60, 41, 40, 10, 60, 9, 54, 41, 60, 46, 52, 51, 19, 50, 51, 50, 48, 47, 47, 46, 50, 46, 45, 52, 20, 50, 19, 57, 53, 45, 57, 45, 54, 53, 52, 45, 12, 10, 11, 13, 10, 12, 18, 51, 52, 19, 51, 18, 18, 52, 53, 18, 53, 57, 14, 10, 13, 60, 10, 14, 59, 60, 14, 58, 59, 14, 58, 14, 15, 17, 54, 60, 16, 17, 60, 57, 54, 17, 18, 57, 17, 59, 16, 60, 16, 59, 58, 16, 58, 15 ], + "vertices": [ 2, 26, 96.38, 70.56, 0, 27, 41.97, -41.79, 0.99, 3, 26, 73.46, 27.54, 0.18, 27, -5.75, -51.7, 0.72, 24, 112.98, -11.43, 0.08, 4, 23, 63.13, 36.65, 0.02, 26, 38.23, 10.98, 0.82, 27, -41.01, -35.22, 0.09, 24, 92.72, -44.67, 0.05, 1, 26, 73.35, 10.89, 1, 1, 26, 58.59, -10.38, 1, 2, 23, 75.49, -4.55, 0.1, 26, 14.35, -24.8, 0.89, 2, 23, 59.82, -13.72, 0.41, 26, -2.69, -18.57, 0.58, 1, 16, 163.06, -108.68, 1, 1, 16, 151.52, -95.04, 1, 1, 16, 110.6, -87.69, 1, 1, 16, 81.05, -86.58, 1, 1, 16, 89.81, -114.32, 1, 1, 16, 68.72, -120.91, 1, 1, 16, 58.1, -115.89, 1, 1, 16, 51.03, -100.62, 1, 1, 16, 38.78, -106.76, 1, 1, 16, 2.67, -89.69, 1, 1, 16, -22.07, -19.29, 1, 1, 16, 1.19, 45.62, 1, 1, 16, 8.07, 64.81, 1, 1, 16, 35.43, 93.72, 1, 1, 16, 59.98, 119.66, 1, 1, 16, 109.25, 136.98, 1, 1, 16, 174.07, 135.27, 1, 3, 16, 205.58, 101.22, 0.82, 27, 95.35, 90.04, 0.01, 24, -16.79, 104.63, 0.15, 3, 16, 229.56, 35.66, 0.02, 27, 58.93, 30.5, 0.59, 24, 38.37, 61.89, 0.38, 3, 16, 248.9, 41.54, 0, 27, 75.55, 19, 0.94, 24, 51.62, 77.15, 0.05, 1, 27, 106.69, 26.9, 1, 1, 27, 83.78, -9.5, 1, 4, 23, 44.52, 27.24, 0.19, 26, 19.12, 19.33, 0.58, 27, -46.82, -15.19, 0.07, 24, 72.17, -48.24, 0.14, 4, 16, 169.11, -52.88, 0.02, 23, 7.42, 19.08, 0.77, 26, -10.8, 42.71, 0, 24, 34.31, -45.24, 0.2, 5, 16, 198.21, -28.43, 0, 23, 8, 57.08, 0.02, 26, 18.84, 66.49, 0, 27, -10.75, 15.18, 0, 24, 45.94, -9.06, 0.95, 3, 26, 63.16, 70.43, 0.01, 27, 20.62, -16.35, 0.98, 24, 80.73, 18.67, 0, 1, 27, 75.73, 0.94, 1, 3, 16, 200.44, 40.47, 0.48, 27, 44.58, 56.29, 0.14, 24, 11.16, 50.46, 0.36, 1, 16, 171.41, 90.11, 1, 4, 16, 164.84, -48.18, 0.02, 23, 1.07, 18.93, 0.77, 26, -14.97, 47.51, 0, 24, 28.19, -43.54, 0.2, 3, 16, 168.13, -6.01, 0.11, 23, -28.63, 49.03, 0.13, 24, 8.54, -6.08, 0.75, 3, 16, 167.82, 37.86, 0.26, 27, 22.26, 80.21, 0.03, 24, -15.06, 30.9, 0.7, 1, 16, 162.36, 71.5, 1, 1, 16, 163.1, -47.44, 1, 1, 16, 165.94, -5.87, 1, 1, 16, 165.14, 37.37, 1, 1, 16, 157.6, 71.39, 1, 1, 16, 163.5, -99.53, 1, 1, 16, 45.37, 27.24, 1, 1, 16, 63.73, 44.98, 1, 1, 16, 70.69, 61.92, 0.99, 1, 16, 62.87, 78.69, 0.99, 1, 16, 46.52, 85.3, 0.99, 1, 16, 29.92, 79.33, 0.99, 1, 16, 15.07, 62.21, 1, 1, 16, 14.09, 45.32, 1, 1, 16, 24.29, 27.05, 1, 1, 16, 48.63, 15.29, 1, 1, 16, 84.87, 62.14, 0.99, 1, 16, 61.9, 94.83, 0.99, 1, 16, 22.54, 21.87, 1, 1, 16, 43.14, -95.94, 1, 1, 16, 41.77, -87.23, 1, 1, 16, 60.05, -70.35, 1 ], + "hull": 29, + "edges": [ 10, 8, 8, 6, 6, 4, 4, 2, 2, 0, 0, 56, 54, 56, 54, 52, 52, 50, 50, 48, 48, 46, 46, 44, 42, 44, 32, 34, 4, 58, 58, 60, 62, 64, 64, 66, 66, 54, 50, 68, 68, 70, 70, 44, 60, 72, 62, 74, 72, 74, 74, 76, 76, 78, 78, 44, 16, 80, 80, 82, 82, 84, 84, 86, 86, 44, 14, 88, 88, 72, 14, 16, 10, 12, 12, 14, 12, 60, 90, 92, 92, 94, 94, 96, 96, 98, 98, 100, 100, 102, 102, 104, 104, 106, 106, 90, 108, 110, 110, 112, 38, 40, 40, 42, 112, 40, 34, 36, 36, 38, 36, 114, 114, 108, 30, 32, 30, 28, 24, 26, 28, 26, 22, 24, 22, 20, 20, 18, 18, 16, 28, 116, 116, 118, 118, 120, 120, 20 ], + "width": 271, + "height": 298 + } + }, + "head-bb": { + "head": { + "type": "boundingbox", + "vertices": [ -19.143097, -70.30209, 40.80313, -118.074234, 257.77155, -115.61827, 285.16193, 57.18005, 120.77191, 164.95125, -5.067627, 76.94907 ] + } + }, + "mouth": { + "mouth_grind": { + "type": "mesh", + "uvs": [ 1, 1, 0, 1, 0, 0, 1, 0 ], + "triangles": [ 1, 3, 0, 1, 2, 3 ], + "vertices": [ 11.28, -85.88, -19.56, 1.84, 36.09, 21.41, 66.93, -66.31 ], + "hull": 4, + "edges": [ 0, 2, 2, 4, 4, 6, 0, 6 ], + "width": 93, + "height": 59 + }, + "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 } + }, + "muzzle": { + "muzzle": { "x": 18.25, "y": 5.44, "rotation": 0.15, "width": 462, "height": 400 } + }, + "neck": { + "neck": { "x": 9.76, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 } + }, + "rear_bracer": { + "rear_bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 } + }, + "rear_foot": { + "rear_foot": { + "type": "skinnedmesh", + "uvs": [ 0.48368, 0.1387, 0.5199, 0.21423, 0.55099, 0.27906, 0.58838, 0.29816, 0.63488, 0.32191, 0.77342, 0.39266, 1, 0.73346, 1, 1, 0.59435, 1, 0.3116, 1, 0, 1, 0, 0.41396, 0.1363, 0, 0.41716, 0 ], + "triangles": [ 4, 8, 3, 5, 8, 4, 6, 8, 5, 8, 6, 7, 11, 1, 10, 12, 13, 0, 0, 11, 12, 1, 11, 0, 2, 9, 10, 2, 10, 1, 9, 2, 3, 8, 9, 3 ], + "vertices": [ 2, 18, 10.45, 29.41, 0.88, 19, -6.74, 49.62, 0.11, 2, 18, 16.54, 29.27, 0.83, 19, -2.65, 45.08, 0.16, 2, 18, 21.79, 29.15, 0.78, 19, 0.85, 41.19, 0.21, 2, 18, 25.53, 31.43, 0.67, 19, 5.07, 40.04, 0.32, 2, 18, 30.17, 34.27, 0.54, 19, 10.33, 38.61, 0.45, 2, 18, 44.01, 42.72, 0.16, 19, 25.97, 34.36, 0.83, 1, 19, 51.56, 13.89, 1, 2, 18, 88.08, 36.28, 0, 19, 51.54, -2.08, 1, 2, 18, 56.58, 2.98, 0.02, 19, 5.71, -2.05, 0.97, 2, 18, 34.63, -20.21, 0.99, 19, -26.22, -2.03, 0, 2, 18, 10.43, -45.8, 0.99, 19, -61.43, -2, 0, 2, 18, -15.1, -21.64, 1, 19, -61.4, 33.15, 0, 2, 18, -22.56, 6.61, 0.99, 19, -45.98, 57.97, 0, 2, 18, -0.76, 29.67, 0.99, 19, -14.25, 57.94, 0 ], + "hull": 14, + "edges": [ 14, 12, 10, 12, 14, 16, 16, 18, 18, 20, 4, 18, 20, 22, 24, 26, 22, 24, 4, 2, 2, 20, 4, 6, 6, 16, 6, 8, 8, 10, 2, 0, 0, 26 ], + "width": 113, + "height": 60 + }, + "rear_foot_bend1": { "x": 29.61, "y": 18.12, "rotation": 46.59, "width": 117, "height": 66 }, + "rear_foot_bend2": { "x": 22.82, "y": 23.69, "rotation": 46.59, "width": 103, "height": 83 } + }, + "rear_shin": { + "rear_shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 } + }, + "rear_thigh": { + "rear_thigh": { "x": 33.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } + }, + "rear_upper_arm": { + "rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 } + }, + "torso": { + "torso": { + "type": "mesh", + "uvs": [ 0.62509, 0.12672, 1, 0.2636, 1, 0.2887, 1, 0.66021, 1, 0.68245, 0.92323, 0.69258, 0.95115, 0.84965, 0.77123, 1, 0.49654, 1, 0.27181, 1, 0.13842, 0.77196, 0, 0.45614, 0, 0.19436, 0.14462, 0, 0.27801, 0, 0.72524, 0.27835, 0.76091, 0.46216, 0.84888, 0.67962, 0.68257, 0.63249, 0.53985, 0.38469, 0.25443, 0.32169, 0.30062, 0.55173, 0.39552, 0.79506, 0.26389, 0.17006, 0.52409, 0.18673 ], + "triangles": [ 6, 17, 5, 6, 7, 17, 8, 18, 7, 7, 18, 17, 9, 22, 8, 8, 22, 18, 9, 10, 22, 10, 21, 22, 22, 21, 18, 10, 11, 21, 4, 5, 3, 5, 17, 3, 3, 17, 16, 17, 18, 16, 16, 2, 3, 21, 19, 18, 18, 19, 16, 11, 20, 21, 21, 20, 19, 19, 15, 16, 16, 15, 2, 11, 12, 20, 20, 24, 19, 19, 24, 15, 20, 23, 24, 20, 12, 23, 15, 1, 2, 24, 0, 15, 15, 0, 1, 12, 13, 23, 0, 24, 14, 14, 24, 13, 24, 23, 13 ], + "vertices": [ 129.62, -10.38, 102.17, -45.07, 97.66, -44.71, 31, -39.45, 27.01, -39.13, 25.78, -31.49, -2.61, -31.99, -28.2, -12.29, -26.08, 14.54, -24.34, 36.5, 17.59, 46.3, 75.33, 55.34, 122.31, 51.63, 156.07, 34.75, 155.03, 21.72, 101.64, -18.02, 68.37, -18.9, 28.68, -24.41, 38.41, -8.83, 83.99, 1.59, 97.5, 28.58, 55.86, 27.33, 11.47, 21.51, 124.63, 25.51, 119.63, 0.32 ], + "hull": 15, + "edges": [ 14, 12, 12, 10, 10, 8, 18, 20, 20, 22, 22, 24, 26, 28, 24, 26, 2, 4, 30, 4, 30, 32, 32, 34, 4, 6, 6, 8, 34, 6, 34, 36, 36, 38, 38, 40, 40, 24, 36, 14, 40, 42, 42, 44, 14, 16, 16, 18, 44, 16, 40, 46, 38, 48, 48, 30, 2, 0, 0, 28, 48, 0, 48, 26 ], + "width": 98, + "height": 180 + } + } + } +}, +"events": { + "footstep": {}, + "headAttach": { "int": 3, "float": 4 }, + "headBehind": { "int": 5, "float": 6, "string": "setup" }, + "headPop": { "int": 1, "float": 2 } +}, +"animations": { + "run": { + "slots": { + "front_fist": { + "attachment": [ + { "time": 0, "name": "front_fist_closed" } + ] + }, + "mouth": { + "attachment": [ + { "time": 0, "name": "mouth_grind" } + ] + }, + "torso": { + "attachment": [ + { "time": 0, "name": "torso" } + ] + } + }, + "bones": { + "front_thigh": { + "rotate": [ + { + "time": 0, + "angle": 42.05, + "curve": [ 0.195, 0.86, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 46.07 }, + { "time": 0.1333, "angle": -20.28 }, + { "time": 0.2, "angle": -27.23 }, + { "time": 0.2666, "angle": -47.16 }, + { "time": 0.3333, "angle": -39.79 }, + { "time": 0.4, "angle": -25.86 }, + { "time": 0.4666, "angle": 14.35 }, + { "time": 0.5333, "angle": 55.62 }, + { "time": 0.6, "angle": 69.65 }, + { "time": 0.6666, "angle": 86.4 }, + { "time": 0.7333, "angle": 65.87 }, + { "time": 0.8, "angle": 42.05 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.0333, "x": -5.79, "y": 11.15 }, + { "time": 0.0666, "x": -5.13, "y": 11.55 }, + { "time": 0.1333, "x": -7.7, "y": 8.98 }, + { "time": 0.5333, "x": -1.26, "y": 3.83 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "torso": { + "rotate": [ + { "time": 0, "angle": -39.7 }, + { "time": 0.2, "angle": -57.29 }, + { "time": 0.4, "angle": -39.7 }, + { "time": 0.6, "angle": -57.29 }, + { "time": 0.8, "angle": -39.7 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_thigh": { + "rotate": [ + { "time": 0, "angle": -56.59 }, + { "time": 0.0666, "angle": -21.57 }, + { "time": 0.1333, "angle": 27.95 }, + { "time": 0.2, "angle": 42.42 }, + { "time": 0.2666, "angle": 62.37 }, + { "time": 0.3333, "angle": 45.42 }, + { "time": 0.4, "angle": 15.67 }, + { "time": 0.4666, "angle": 28.22 }, + { "time": 0.5333, "angle": -38.62 }, + { "time": 0.6, "angle": -53.26 }, + { "time": 0.6666, "angle": -79.31 }, + { "time": 0.7333, "angle": -86.47 }, + { "time": 0.8, "angle": -56.59 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.4, "x": -6.76, "y": -3.86 }, + { "time": 0.4333, "x": -15.85, "y": 7.28 }, + { "time": 0.4666, "x": -13.04, "y": 4.04 }, + { "time": 0.5, "x": -10.24, "y": 7.11 }, + { "time": 0.5333, "x": -9.01, "y": -5.15 }, + { "time": 0.6666, "x": -23.18, "y": -2.57 }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_shin": { + "rotate": [ + { "time": 0, "angle": -74 }, + { "time": 0.0666, "angle": -83.38 }, + { "time": 0.1333, "angle": -106.69 }, + { "time": 0.2, "angle": -66.01 }, + { "time": 0.2666, "angle": -55.22 }, + { "time": 0.3333, "angle": -24.8 }, + { + "time": 0.4, + "angle": 18.44, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.4666, "angle": -56.65 }, + { + "time": 0.5333, + "angle": -11.94, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "angle": -41.26 }, + { "time": 0.7333, "angle": -43.6 }, + { "time": 0.8, "angle": -74 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_upper_arm": { + "rotate": [ + { "time": 0, "angle": -89.36 }, + { "time": 0.0666, "angle": -95.67 }, + { "time": 0.1333, "angle": -22 }, + { "time": 0.2, "angle": -316.04 }, + { "time": 0.2666, "angle": -274.94 }, + { "time": 0.3333, "angle": -273.74 }, + { "time": 0.4, "angle": -272.09 }, + { "time": 0.4666, "angle": -264.89 }, + { "time": 0.5333, "angle": -320.09 }, + { "time": 0.6, "angle": -50.83 }, + { "time": 0.6666, "angle": -81.72 }, + { "time": 0.7333, "angle": -83.92 }, + { "time": 0.8, "angle": -89.36 } + ], + "translate": [ + { "time": 0, "x": 6.24, "y": 10.05 }, + { "time": 0.2666, "x": 4.95, "y": -13.13 }, + { "time": 0.6, "x": -2.43, "y": 1.94 }, + { "time": 0.8, "x": 6.24, "y": 10.05 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_bracer": { + "rotate": [ + { "time": 0, "angle": 33.43 }, + { "time": 0.0666, "angle": 20.53 }, + { "time": 0.1333, "angle": 15.26 }, + { "time": 0.2, "angle": 19.28 }, + { "time": 0.2666, "angle": 22.62 }, + { "time": 0.3333, "angle": 37.29 }, + { "time": 0.4, "angle": 41.53 }, + { "time": 0.4666, "angle": 31.73 }, + { "time": 0.5333, "angle": 67.45 }, + { "time": 0.6666, "angle": 39.77 }, + { "time": 0.7333, "angle": 30.95 }, + { "time": 0.8, "angle": 33.43 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_fist": { + "rotate": [ + { "time": 0, "angle": -19.75 }, + { "time": 0.0666, "angle": -37.11 }, + { "time": 0.1333, "angle": -50.79 }, + { "time": 0.2666, "angle": -12.69 }, + { "time": 0.3333, "angle": 3.01 }, + { "time": 0.4333, "angle": 12.05 }, + { "time": 0.5333, "angle": 13.25 }, + { "time": 0.8, "angle": -19.75 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_upper_arm": { + "rotate": [ + { "time": 0, "angle": 68.68 }, + { "time": 0.0666, "angle": 73.89 }, + { "time": 0.1333, "angle": -9.64 }, + { "time": 0.2, "angle": 284.27 }, + { "time": 0.2666, "angle": 283.29 }, + { "time": 0.3333, "angle": 278.28 }, + { "time": 0.4, "angle": 271.02 }, + { "time": 0.4666, "angle": 263.2 }, + { "time": 0.5333, "angle": 314.25 }, + { "time": 0.6, "angle": 16.83 }, + { "time": 0.6666, "angle": 70.35 }, + { "time": 0.7333, "angle": 73.53 }, + { "time": 0.8, "angle": 68.68 } + ], + "translate": [ + { "time": 0, "x": -2.57, "y": -8.89 }, + { "time": 0.1333, "x": -4.68, "y": 7.2 }, + { "time": 0.2, "x": 21.73, "y": 51.17 }, + { "time": 0.6, "x": 4.33, "y": 2.05 }, + { "time": 0.8, "x": -2.57, "y": -8.89 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_bracer": { + "rotate": [ + { "time": 0, "angle": 31.04 }, + { "time": 0.0666, "angle": 28.28 }, + { "time": 0.1333, "angle": 49.36 }, + { "time": 0.2, "angle": 59.37 }, + { "time": 0.2666, "angle": 8.56 }, + { "time": 0.3333, "angle": 9.38 }, + { "time": 0.4, "angle": 11.51 }, + { "time": 0.4666, "angle": 7.22 }, + { "time": 0.5333, "angle": -18.44 }, + { "time": 0.6, "angle": 11.44 }, + { "time": 0.6666, "angle": 9.99 }, + { "time": 0.7333, "angle": 8.28 }, + { "time": 0.8, "angle": 31.04 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "neck": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.2, "angle": 13.58 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.6, "angle": 13.58 }, + { "time": 0.8, "angle": 11.03 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "head": { + "rotate": [ + { "time": 0, "angle": 11.03 }, + { "time": 0.1, "angle": 12.34 }, + { "time": 0.2, "angle": 25.55 }, + { "time": 0.4, "angle": 11.03 }, + { "time": 0.5, "angle": 12.34 }, + { "time": 0.6, "angle": 25.55 }, + { "time": 0.8, "angle": 11.03 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.4, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_shin": { + "rotate": [ + { + "time": 0, + "angle": 0, + "curve": [ 0.481, 0.01, 0.75, 1 ] + }, + { "time": 0.0666, "angle": -64.42 }, + { + "time": 0.1333, + "angle": -20.59, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.2666, "angle": -62.51 }, + { "time": 0.3333, "angle": -79.74 }, + { "time": 0.4, "angle": -78.28 }, + { + "time": 0.4666, + "angle": -118.96, + "curve": [ 0.93, 0, 0.952, 0.95 ] + }, + { "time": 0.6, "angle": -88.95 }, + { "time": 0.6666, "angle": -79.09 }, + { "time": 0.7333, "angle": -47.77 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { + "time": 0.0333, + "angle": -21.13, + "curve": [ 0.121, 0.23, 0.75, 1 ] + }, + { "time": 0.0666, "angle": 17.64 }, + { "time": 0.1, "angle": 29.92 }, + { "time": 0.1333, "angle": 16.44 }, + { "time": 0.2, "angle": -29.22 }, + { "time": 0.2666, "angle": -1.61 }, + { "time": 0.3333, "angle": -10.22 }, + { "time": 0.4666, "angle": -15.99 }, + { "time": 0.6, "angle": 9.03 }, + { "time": 0.7333, "angle": 17.32 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "rear_foot": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": -12.04 }, + { "time": 0.1333, "angle": -0.87 }, + { "time": 0.2, "angle": 25.81 }, + { "time": 0.2666, "angle": 4.71 }, + { + "time": 0.4, + "angle": 18.09, + "curve": [ 0.281, 0.73, 0.75, 1 ] + }, + { "time": 0.4333, "angle": -1.7 }, + { "time": 0.4666, "angle": 27.12 }, + { "time": 0.5, "angle": 38.83 }, + { "time": 0.5333, "angle": 30.76 }, + { "time": 0.5666, "angle": -20.49 }, + { "time": 0.6, "angle": -30.8 }, + { "time": 0.6666, "angle": -1.31 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "gun": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1333, "angle": 24.72 }, + { "time": 0.5, "angle": -11.87 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 0, "y": 0, "curve": "stepped" }, + { "time": 0.8, "x": 0, "y": 0 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "hip": { + "rotate": [ + { "time": 0, "angle": 0, "curve": "stepped" }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { + "time": 0, + "x": 0, + "y": -24.88, + "curve": [ 0.3, 0.8, 0.663, 0.91 ] + }, + { + "time": 0.0666, + "x": 0, + "y": -40.28, + "curve": [ 0.456, 0, 0.339, 0.98 ] + }, + { + "time": 0.2666, + "x": 0, + "y": 20.51, + "curve": [ 0.17, 0.52, 0.596, 0.99 ] + }, + { "time": 0.4, "x": 0, "y": -24.88 }, + { "time": 0.4333, "x": 0, "y": -26.36 }, + { + "time": 0.4666, + "x": 0, + "y": -45.06, + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { "time": 0.6666, "x": 0, "y": 20.51 }, + { "time": 0.8, "x": 0, "y": -24.88 } + ], + "scale": [ + { "time": 0, "x": 1, "y": 1, "curve": "stepped" }, + { "time": 0.8, "x": 1, "y": 1 } + ] + }, + "front_foot_ik": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0333, "angle": -41.68 }, + { "time": 0.1333, "angle": -102.41 }, + { "time": 0.2, "angle": -121.43 }, + { "time": 0.2333, "angle": -133.6 }, + { "time": 0.2666, "angle": -139.86 }, + { "time": 0.3333, "angle": -152.39 }, + { "time": 0.3666, "angle": -146.32 }, + { "time": 0.5, "angle": -143.8 }, + { "time": 0.5333, "angle": -114.84 }, + { "time": 0.5666, "angle": -99.08 }, + { "time": 0.6, "angle": -63.03 }, + { "time": 0.6333, "angle": -47.34 }, + { "time": 0.6666, "angle": -31.04 }, + { "time": 0.7, "angle": -25.01 }, + { "time": 0.7666, "angle": -15.95 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": 159.31, "y": 38.68 }, + { "time": 0.0333, "x": 115.32, "y": 0.18 }, + { "time": 0.0666, "x": 16.34, "y": 0.18 }, + { "time": 0.1333, "x": -116.47, "y": 0.18 }, + { "time": 0.2, "x": -210.62, "y": 126.29 }, + { "time": 0.2333, "x": -226.11, "y": 203.77 }, + { "time": 0.2666, "x": -223.73, "y": 258 }, + { "time": 0.3333, "x": -208.23, "y": 250.25 }, + { "time": 0.3666, "x": -207.64, "y": 215.69 }, + { "time": 0.4, "x": -205.85, "y": 185.29 }, + { "time": 0.4333, "x": -179.03, "y": 176.95 }, + { "time": 0.4666, "x": -154, "y": 157.28 }, + { "time": 0.5, "x": -128.97, "y": 108.41 }, + { "time": 0.5333, "x": -76.68, "y": 75.29 }, + { "time": 0.5666, "x": -41.24, "y": 67.74 }, + { "time": 0.6, "x": 28.47, "y": 59.02 }, + { "time": 0.6333, "x": 70.89, "y": 78.19 }, + { "time": 0.6666, "x": 110.42, "y": 99 }, + { "time": 0.7, "x": 122.21, "y": 79.58 }, + { "time": 0.7666, "x": 145.33, "y": 44.61 }, + { "time": 0.8, "x": 159.31, "y": 38.68 } + ] + }, + "front_ankle_ik": { + "translate": [ + { "time": 0, "x": -14.25, "y": -25.95 }, + { "time": 0.1333, "x": -13.63, "y": -34.72 }, + { "time": 0.1666, "x": -11.41, "y": -12.61 }, + { "time": 0.5, "x": -14.88, "y": -31.78 }, + { "time": 0.8, "x": -14.25, "y": -25.95 } + ] + }, + "rear_foot_ik": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.0666, "angle": 18.55 }, + { "time": 0.1333, "angle": 52.75 }, + { "time": 0.1666, "angle": 87.39 }, + { "time": 0.2333, "angle": 133.94 }, + { "time": 0.3, "angle": 150.92 }, + { "time": 0.3666, "angle": 168.02 }, + { "time": 0.4, "angle": 129.09 }, + { "time": 0.4333, "angle": 125.95 }, + { "time": 0.5, "angle": 114.27 }, + { "time": 0.5333, "angle": 85.36 }, + { "time": 0.5666, "angle": 49.17 }, + { "time": 0.6333, "angle": 9.5 }, + { "time": 0.7, "angle": 4.15 }, + { "time": 0.7666, "angle": -1.36 }, + { "time": 0.8, "angle": 0 } + ], + "translate": [ + { "time": 0, "x": -248.9, "y": 230.06 }, + { "time": 0.0666, "x": -228.7, "y": 134.11 }, + { "time": 0.1333, "x": -145.37, "y": 94.22 }, + { "time": 0.1666, "x": -82.75, "y": 54.32 }, + { "time": 0.2333, "x": 37.92, "y": 74.38 }, + { "time": 0.2666, "x": 80.37, "y": 91.82 }, + { "time": 0.3, "x": 93.21, "y": 67.3 }, + { "time": 0.3666, "x": 99.34, "y": 35.47 }, + { "time": 0.4, "x": 68.62, "y": 0.35 }, + { "time": 0.4333, "x": 21.58, "y": -2.63 }, + { "time": 0.5, "x": -92.9, "y": -2.63 }, + { "time": 0.5333, "x": -166.79, "y": -2.63 }, + { "time": 0.5666, "x": -252.51, "y": 57.14 }, + { "time": 0.6333, "x": -304.31, "y": 214.02 }, + { "time": 0.7, "x": -296.91, "y": 281.36 }, + { "time": 0.7666, "x": -269.53, "y": 257.68 }, + { "time": 0.8, "x": -248.9, "y": 230.06 } + ] + }, + "rear_ankle_ik": { + "translate": [ + { "time": 0, "x": 85, "y": -33.59, "curve": "stepped" }, + { "time": 0.8, "x": 85, "y": -33.59 } + ] + }, + "back_foot_tip": { + "rotate": [ + { "time": 0, "angle": -151.51 }, + { "time": 0.1333, "angle": -93.33 }, + { "time": 0.1666, "angle": -70.77 }, + { "time": 0.2333, "angle": 22.43 }, + { "time": 0.3, "angle": 36.85 }, + { "time": 0.3666, "angle": 34.85 }, + { "time": 0.4, "angle": 0.76 }, + { "time": 0.4333, "angle": 0.82, "curve": "stepped" }, + { "time": 0.5333, "angle": 0.82 }, + { "time": 0.5666, "angle": -61.7 }, + { "time": 0.6333, "angle": -139.59 }, + { "time": 0.7, "angle": -146.78 }, + { "time": 0.8, "angle": -151.51 } + ] + }, + "front_foot_tip": { + "rotate": [ + { "time": 0, "angle": 42.19 }, + { "time": 0.0333, "angle": -0.23 }, + { "time": 0.1333, "angle": -0.28 }, + { "time": 0.1666, "angle": -59.58 }, + { "time": 0.2, "angle": -112.55 }, + { "time": 0.2666, "angle": -130.07 }, + { "time": 0.3333, "angle": -146.2 }, + { "time": 0.5, "angle": -86.48 }, + { "time": 0.5333, "angle": -86.98 }, + { "time": 0.5666, "angle": -66.86 }, + { "time": 0.6, "angle": -22.89 }, + { "time": 0.6333, "angle": -12.06 }, + { "time": 0.7, "angle": 35.39 }, + { "time": 0.8, "angle": 42.19 } + ] + }, + "hair1": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.2666, "angle": 7.16 }, + { "time": 0.3666, "angle": -0.15 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.6333, "angle": 7.16 }, + { "time": 0.7333, "angle": -0.15 }, + { "time": 0.8, "angle": 0 } + ] + }, + "hair2": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.1666, "angle": -30.13 }, + { "time": 0.2666, "angle": 6.38 }, + { "time": 0.3666, "angle": -13.48 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.5333, "angle": -30.13 }, + { "time": 0.6333, "angle": 6.38 }, + { "time": 0.7333, "angle": -13.48 }, + { "time": 0.8, "angle": 0 } + ] + }, + "hair3": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.2666, "angle": 7.16 }, + { "time": 0.3666, "angle": -0.15 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.6333, "angle": 7.16 }, + { "time": 0.7333, "angle": -0.15 }, + { "time": 0.8, "angle": 0 } + ] + }, + "hair4": { + "rotate": [ + { "time": 0, "angle": 0 }, + { "time": 0.1, "angle": -10.21 }, + { "time": 0.1666, "angle": -30.13 }, + { "time": 0.2666, "angle": 6.38 }, + { "time": 0.3666, "angle": -13.48 }, + { "time": 0.4666, "angle": -10.21 }, + { "time": 0.5333, "angle": -30.13 }, + { "time": 0.6333, "angle": 6.38 }, + { "time": 0.7333, "angle": -13.48 }, + { "time": 0.8, "angle": 0 } + ] + } + }, + "ffd": { + "default": { + "eye": { + "eye_indifferent": [ + { + "time": 0, + "vertices": [ -0.15, 0.7, -0.15, 0.7, -0.15, 0.7, -0.15, 0.7 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "vertices": [ 3.92, -18.23, 3.92, -18.23, 3.92, -18.23, 3.92, -18.23 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "vertices": [ -0.15, 0.7, -0.15, 0.7, -0.15, 0.7, -0.15, 0.7 ] + } + ] + }, + "goggles": { + "goggles": [ + { + "time": 0, + "vertices": [ -0.08, 0.23, -0.04, 0.11, -1.15, 5.38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 5, -1.86, 8.62, -0.82, 3.8, -0.09, 0.27, -0.11, 0.32, -5.76, 7.76, -3.05, 10.76, -2.18, 10.12, -4.92, 9.45, 0, 0, 0, 0, 0.65, -3.03, 0.55, -2.59, -1.4, 6.49, -0.16, 0.42, -0.14, 0.37, -0.13, 0.35, -0.11, 0.31, -0.12, 0.33, -0.12, 0.32, -0.1, 0.28, -0.9, 4.02, -0.04, 0.13, -1.07, 4.96, -1.06, 4.94, -1.04, 4.9, -0.04, 0.11, -0.07, 0.2, -0.1, 0.26, -0.12, 0.33, -0.13, 0.36, -0.14, 0.37, -0.13, 0.35, -0.11, 0.33, -0.14, 0.39, -0.16, 0.43, -1.4, 6.49, -0.82, 3.8, -0.82, 3.8, -0.82, 3.8, -1.82, 8.48, -1.82, 8.48, -1.82, 8.48 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "vertices": [ 1.73, -8.03, 0.7, -3.25, 0.39, -1.84, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.08, -5.04, 3.97, -18.45, 0.47, -2.19, 1.59, -7.39, 2.05, -9.54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2.58, -11.98, 2.93, -13.58, 2.71, -12.57, 2.01, -9.32, 2.26, -10.49, 2.34, -10.86, 2.05, -9.51, 1.96, -9.1, 0.75, -3.51, 0.08, -0.37, 0.57, -2.69, 0.35, -1.63, 0.65, -3.01, 1.4, -6.53, 1.98, -9.21, 4.07, -18.92, 3.45, -16.03, 3.45, -16.02, 2.42, -11.25, 2.14, -9.93, 2.06, -9.56, 2.59, -12, 0, 0, 0.47, -2.19, 0.47, -2.19, 0.47, -2.19, 0.47, -2.19, 0.47, -2.19, 0.47, -2.19 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "vertices": [ -0.08, 0.23, -0.04, 0.11, -1.15, 5.38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.08, 5, -1.86, 8.62, -0.82, 3.8, -0.09, 0.27, -0.11, 0.32, -5.76, 7.76, -3.05, 10.76, -2.18, 10.12, -4.92, 9.45, 0, 0, 0, 0, 0.65, -3.03, 0.55, -2.59, -1.4, 6.49, -0.16, 0.42, -0.14, 0.37, -0.13, 0.35, -0.11, 0.31, -0.12, 0.33, -0.12, 0.32, -0.1, 0.28, -0.9, 4.02, -0.04, 0.13, -1.07, 4.96, -1.06, 4.94, -1.04, 4.9, -0.04, 0.11, -0.07, 0.2, -0.1, 0.26, -0.12, 0.33, -0.13, 0.36, -0.14, 0.37, -0.13, 0.35, -0.11, 0.33, -0.14, 0.39, -0.16, 0.43, -1.4, 6.49, -0.82, 3.8, -0.82, 3.8, -0.82, 3.8, -1.82, 8.48, -1.82, 8.48, -1.82, 8.48 ] + } + ] + }, + "head": { + "head": [ + { + "time": 0, + "offset": 36, + "vertices": [ 2.81, 0.98, 1.01, 8.62, -2.7, 4.09, -4.48, 7.13, -4.76, 3.34, 0, 0, -2.25, -4.31, 0, 0, 0, 0, -0.45, 2.11, -0.45, 2.11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.14, 14.58, -2.86, 13.27, -2.55, 11.81, -2.17, 10.06, -1.96, 9.1, -2.01, 9.33, -2.29, 10.65, -2.63, 12.23, -3.05, 14.17, 0, 0, 0, 0, 0, 0, 0, 0, -0.59, 2.77, -1.96, 9.1, -2.16, 10.02 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "offset": 38, + "vertices": [ 3.14, -14.61, 3.14, -14.61, 3.14, -14.61, 0.83, -3.87, 0, 0, 0, 0, 0, 0, 0, 0, -0.45, 2.11, -0.45, 2.11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.17, -0.81, 0.17, -0.81, 0.17, -0.81, 0.17, -0.81, 0.17, -0.81, 0.17, -0.81, 0.17, -0.81, 0.17, -0.81, 0.17, -0.81, 0, 0, 0, 0, 0, 0, 0, 0, 0.55, -2.58, 0.41, -1.93, 1.04, -4.83 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "offset": 36, + "vertices": [ 2.81, 0.98, 1.01, 8.62, -2.7, 4.09, -4.48, 7.13, -4.76, 3.34, 0, 0, -2.25, -4.31, 0, 0, 0, 0, -0.45, 2.11, -0.45, 2.11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -3.14, 14.58, -2.86, 13.27, -2.55, 11.81, -2.17, 10.06, -1.96, 9.1, -2.01, 9.33, -2.29, 10.65, -2.63, 12.23, -3.05, 14.17, 0, 0, 0, 0, 0, 0, 0, 0, -0.59, 2.77, -1.96, 9.1, -2.16, 10.02 ] + } + ] + }, + "mouth": { + "mouth_grind": [ + { + "time": 0, + "vertices": [ -10.19, 11.77, -1.6, 14.33, 0.02, 8.88, -8.56, 6.32 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.4, + "vertices": [ -1.87, -8.97, 0, -17.7, 0, -17.7, -1.87, -8.97 ], + "curve": [ 0.25, 0, 0.75, 1 ] + }, + { + "time": 0.8, + "vertices": [ -10.19, 11.77, -1.6, 14.33, 0.02, 8.88, -8.56, 6.32 ] + } + ] + }, + "torso": { + "torso": [ + { + "time": 0, + "offset": 6, + "vertices": [ 6.35, 1.33, 6.35, 1.33, 0, 0, 0, 0, 0.82, 5.12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.82, 5.12, 0.82, 5.12, -0.94, 5.14, 0.82, 5.12, 0.82, 5.12, 0.24, 4.36, 0.24, 4.36, 0.24, 4.36, 0, 0, 0.82, 5.12 ] + }, + { + "time": 0.4, + "offset": 2, + "vertices": [ 1.46, 2.96, 0.68, 3.23, 2.2, 0.1, 0, 0, -0.31, -2.89, 0, 0, -0.18, 0.38, 0.33, -3.61, 0, 0, 0, 0, -0.55, 4.21, -0.55, 4.21, 0, 0, 0, 0, -0.29, -8.94, -0.02, -9.5, 0.23, -9.93, -4.64, -8.88, -2.62, -9.24, -1.7, -5.16, -1.7, -5.16, -1.7, -5.16, 0, 0, -7.37, -10.47 ] + }, + { + "time": 0.8, + "offset": 6, + "vertices": [ 6.35, 1.33, 6.35, 1.33, 0, 0, 0, 0, 0.82, 5.12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.82, 5.12, 0.82, 5.12, -0.94, 5.14, 0.82, 5.12, 0.82, 5.12, 0.24, 4.36, 0.24, 4.36, 0.24, 4.36, 0, 0, 0.82, 5.12 ] + } + ] + } + } + } + } +} +} \ No newline at end of file diff --git a/spine-corona/examples/spineboy/spineboy-mesh.lua b/spine-corona/examples/spineboy/spineboy-mesh.lua new file mode 100644 index 000000000..d1ed51cef --- /dev/null +++ b/spine-corona/examples/spineboy/spineboy-mesh.lua @@ -0,0 +1,62 @@ + +-- This example shows simple usage of displaying a skeleton with queued animations. + +local spine = require "spine-corona.spine" + +local json = spine.SkeletonJson.new() +json.scale = 0.6 +local skeletonData = json:readSkeletonDataFile("examples/spineboy/spineboy-mesh.json") + +local skeleton = spine.Skeleton.new(skeletonData) +function skeleton:createImage (attachment) + -- Customize where images are loaded. + return display.newImage("examples/spineboy/images/" .. attachment.name .. ".png") +end +function skeleton:createMesh (attachment, meshParameters) + -- Customize where mesh fill is loaded from. + local mesh = display.newMesh(meshParameters) + mesh.fill = {type="image", filename="examples/spineboy/images/" .. attachment.name .. ".png"} + return mesh +end + +skeleton.group.x = display.contentWidth * 0.5 +skeleton.group.y = display.contentHeight * 0.9 +skeleton.flipX = false +skeleton.flipY = false +skeleton.debug = true -- Omit or set to false to not draw debug lines on top of the images. +skeleton.debugAabb = true +skeleton:setToSetupPose() + + +local stateData = spine.AnimationStateData.new(skeletonData) + +-- AnimationState has a queue of animations and can apply them with crossfading. +local state = spine.AnimationState.new(stateData) +state:addAnimationByName(0, "run", true, 0) + +state.onStart = function (trackIndex) + print(trackIndex.." start: "..state:getCurrent(trackIndex).animation.name) +end +state.onEnd = function (trackIndex) + print(trackIndex.." end: "..state:getCurrent(trackIndex).animation.name) +end +state.onComplete = function (trackIndex, loopCount) + print(trackIndex.." complete: "..state:getCurrent(trackIndex).animation.name..", "..loopCount) +end +state.onEvent = function (trackIndex, event) + print(trackIndex.." event: "..state:getCurrent(trackIndex).animation.name..", "..event.data.name..", "..event.intValue..", "..event.floatValue..", '"..(event.stringValue or "").."'") +end + +local lastTime = 0 +Runtime:addEventListener("enterFrame", function (event) + -- Compute time in seconds since last frame. + local currentTime = event.time / 1000 + local delta = currentTime - lastTime + lastTime = currentTime + + -- Update the state with the delta time, apply it, and update the world transforms. + state:update(delta) + state:apply(skeleton) + skeleton:updateWorldTransform() +end) + diff --git a/spine-corona/main.lua b/spine-corona/main.lua index e279f778e..abc21fe60 100644 --- a/spine-corona/main.lua +++ b/spine-corona/main.lua @@ -1,5 +1,5 @@ - require "examples.spineboy.spineboy" +-- require "examples.spineboy.spineboy-mesh" -- require "examples.goblins.goblins" -- require "examples.dragon.dragon" -- require "examples.hero.hero" diff --git a/spine-corona/spine-corona/spine.lua b/spine-corona/spine-corona/spine.lua old mode 100644 new mode 100755 index ff6c21afd..fe4bed0d7 --- a/spine-corona/spine-corona/spine.lua +++ b/spine-corona/spine-corona/spine.lua @@ -84,6 +84,13 @@ function spine.Skeleton.new (skeletonData, group) return display.newImage(attachment.name .. ".png") end + -- Customizes where images are found. + function self:createMesh (attachment, meshParameters) + local mesh = display.newMesh(meshParameters) + mesh.fill = {type="image", filename=attachment.name .. ".png"} + return mesh + end + -- Customizes what happens when an image changes, return false to recreate the image. function self:modifyImage (attachment) return false @@ -200,6 +207,69 @@ function spine.Skeleton.new (skeletonData, group) self.group:insert(image) end + elseif attachment.type == spine.AttachmentType.mesh or attachment.type == spine.AttachmentType.skinnedmesh then + + if image and image.attachment ~= attachment then -- Attachment image has changed. + if self:modifyImage(image, attachment) then + image.lastR, image.lastA = nil, nil + image.attachment = attachment + else -- If not modified, remove the image and it will be recreated. + display.remove(image) + images[slot] = nil + image = nil + end + end + + local worldVertices = {} + attachment:updateUVs() + attachment:computeWorldVertices(0, 0, slot, worldVertices) + + for i = 2, #worldVertices, 2 do + worldVertices[i] = -worldVertices[i] + end + + if not image then + local meshParameters = { + mode = "indexed", + vertices = worldVertices, + indices = attachment.triangles, + uvs = attachment.uvs, + zeroBasedIndices = true, + } + image = self:createMesh(attachment, meshParameters) + if image then + if slot.data.blendMode == spine.BlendMode.normal then + image.blendMode = "normal" + elseif slot.data.blendMode == spine.BlendMode.additive then + image.blendMode = "add" + elseif slot.data.blendMode == spine.BlendMode.multiply then + image.blendMode = "multiply" + elseif slot.data.blendMode == spine.BlendMode.screen then + image.blendMode = "screen" + end + self.images[slot] = image + image:translate( image.path:getVertexOffset() ) + end + else + for i = 1, #worldVertices, 2 do + image.path:setVertex( 1+ 0.5*(i-1), worldVertices[i], worldVertices[i+1]) + end + end + + if image then + local r, g, b = skeletonR * slot.r, skeletonG * slot.g, skeletonB * slot.b + if image.lastR ~= r or image.lastG ~= g or image.lastB ~= b or not image.lastR then + image:setFillColor(r, g, b) + image.lastR, image.lastG, image.lastB = r, g, b + end + local a = skeletonA * slot.a + if a and (image.lastA ~= a or not image.lastA) then + image.lastA = a + image.alpha = image.lastA + end + self.group:insert(image) + end + end end diff --git a/spine-csharp/README.md b/spine-csharp/README.md index 3b6f0d1a4..5176e7000 100644 --- a/spine-csharp/README.md +++ b/spine-csharp/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-csharp works with data exported from Spine 3.1.08. Updating spine-csharp to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-csharp works with data exported from Spine 3.2.01. Updating spine-csharp to [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-csharp supports all Spine features. diff --git a/spine-csharp/src/Animation.cs b/spine-csharp/src/Animation.cs index c77e34e05..09a1f72ad 100644 --- a/spine-csharp/src/Animation.cs +++ b/spine-csharp/src/Animation.cs @@ -209,14 +209,14 @@ namespace Spine { } public class RotateTimeline : CurveTimeline { - protected const int PREV_FRAME_TIME = -2; - protected const int FRAME_VALUE = 1; + internal const int PREV_TIME = -2; + internal const int VALUE = 1; internal int boneIndex; internal float[] frames; public int BoneIndex { get { return boneIndex; } set { boneIndex = value; } } - public float[] Frames { get { return frames; } set { frames = value; } } // time, value, ... + public float[] Frames { get { return frames; } set { frames = value; } } // time, angle, ... public RotateTimeline (int frameCount) : base(frameCount) { @@ -249,13 +249,13 @@ namespace Spine { } // Interpolate between the previous frame and the current frame. - int frameIndex = Animation.binarySearch(frames, time, 2); - float prevFrameValue = frames[frameIndex - 1]; - float frameTime = frames[frameIndex]; - float percent = 1 - (time - frameTime) / (frames[frameIndex + PREV_FRAME_TIME] - frameTime); - percent = GetCurvePercent((frameIndex >> 1) - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + int frame = Animation.binarySearch(frames, time, 2); + float prevFrameValue = frames[frame - 1]; + float frameTime = frames[frame]; + float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); + percent = GetCurvePercent((frame >> 1) - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - amount = frames[frameIndex + FRAME_VALUE] - prevFrameValue; + amount = frames[frame + VALUE] - prevFrameValue; while (amount > 180) amount -= 360; while (amount < -180) @@ -270,9 +270,9 @@ namespace Spine { } public class TranslateTimeline : CurveTimeline { - protected const int PREV_FRAME_TIME = -3; - protected const int FRAME_X = 1; - protected const int FRAME_Y = 2; + protected const int PREV_TIME = -3; + protected const int X = 1; + protected const int Y = 2; internal int boneIndex; internal float[] frames; @@ -306,15 +306,15 @@ namespace Spine { } // Interpolate between the previous frame and the current frame. - int frameIndex = Animation.binarySearch(frames, time, 3); - float prevFrameX = frames[frameIndex - 2]; - float prevFrameY = frames[frameIndex - 1]; - float frameTime = frames[frameIndex]; - float percent = 1 - (time - frameTime) / (frames[frameIndex + PREV_FRAME_TIME] - frameTime); - percent = GetCurvePercent(frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + int frame = Animation.binarySearch(frames, time, 3); + float prevFrameX = frames[frame - 2]; + float prevFrameY = frames[frame - 1]; + float frameTime = frames[frame]; + float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); + percent = GetCurvePercent(frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - bone.x += (bone.data.x + prevFrameX + (frames[frameIndex + FRAME_X] - prevFrameX) * percent - bone.x) * alpha; - bone.y += (bone.data.y + prevFrameY + (frames[frameIndex + FRAME_Y] - prevFrameY) * percent - bone.y) * alpha; + bone.x += (bone.data.x + prevFrameX + (frames[frame + X] - prevFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + prevFrameY + (frames[frame + Y] - prevFrameY) * percent - bone.y) * alpha; } } @@ -335,24 +335,53 @@ namespace Spine { } // Interpolate between the previous frame and the current frame. - int frameIndex = Animation.binarySearch(frames, time, 3); - float prevFrameX = frames[frameIndex - 2]; - float prevFrameY = frames[frameIndex - 1]; - float frameTime = frames[frameIndex]; - float percent = 1 - (time - frameTime) / (frames[frameIndex + PREV_FRAME_TIME] - frameTime); - percent = GetCurvePercent(frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + int frame = Animation.binarySearch(frames, time, 3); + float prevFrameX = frames[frame - 2]; + float prevFrameY = frames[frame - 1]; + float frameTime = frames[frame]; + float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); + percent = GetCurvePercent(frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - bone.scaleX += (bone.data.scaleX * (prevFrameX + (frames[frameIndex + FRAME_X] - prevFrameX) * percent) - bone.scaleX) * alpha; - bone.scaleY += (bone.data.scaleY * (prevFrameY + (frames[frameIndex + FRAME_Y] - prevFrameY) * percent) - bone.scaleY) * alpha; + bone.scaleX += (bone.data.scaleX * (prevFrameX + (frames[frame + X] - prevFrameX) * percent) - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY * (prevFrameY + (frames[frame + Y] - prevFrameY) * percent) - bone.scaleY) * alpha; + } + } + + public class ShearTimeline : TranslateTimeline { + public ShearTimeline (int frameCount) + : base (frameCount) { + } + + override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { + float[] frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + Bone bone = skeleton.bones.Items[boneIndex]; + if (time >= frames[frames.Length - 3]) { // Time is after last frame. + bone.shearX += (bone.data.shearX + frames[frames.Length - 2] - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + frames[frames.Length - 1] - bone.shearY) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + int frame = Animation.binarySearch(frames, time, 3); + float prevFrameX = frames[frame - 2]; + float prevFrameY = frames[frame - 1]; + float frameTime = frames[frame]; + float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); + percent = GetCurvePercent(frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + + bone.shearX += (bone.data.shearX + (prevFrameX + (frames[frame + X] - prevFrameX) * percent) - bone.shearX) * alpha; + bone.shearY += (bone.data.shearY + (prevFrameY + (frames[frame + Y] - prevFrameY) * percent) - bone.shearY) * alpha; } } public class ColorTimeline : CurveTimeline { - protected const int PREV_FRAME_TIME = -5; - protected const int FRAME_R = 1; - protected const int FRAME_G = 2; - protected const int FRAME_B = 3; - protected const int FRAME_A = 4; + protected const int PREV_TIME = -5; + protected const int R = 1; + protected const int G = 2; + protected const int B = 3; + protected const int A = 4; internal int slotIndex; internal float[] frames; @@ -380,8 +409,7 @@ namespace Spine { if (time < frames[0]) return; // Time is before first frame. float r, g, b, a; - if (time >= frames[frames.Length - 5]) { - // Time is after last frame. + if (time >= frames[frames.Length - 5]) { // Time is after last frame. int i = frames.Length - 1; r = frames[i - 3]; g = frames[i - 2]; @@ -389,19 +417,19 @@ namespace Spine { a = frames[i]; } else { // Interpolate between the previous frame and the current frame. - int frameIndex = Animation.binarySearch(frames, time, 5); - float prevFrameR = frames[frameIndex - 4]; - float prevFrameG = frames[frameIndex - 3]; - float prevFrameB = frames[frameIndex - 2]; - float prevFrameA = frames[frameIndex - 1]; - float frameTime = frames[frameIndex]; - float percent = 1 - (time - frameTime) / (frames[frameIndex + PREV_FRAME_TIME] - frameTime); - percent = GetCurvePercent(frameIndex / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + int frame = Animation.binarySearch(frames, time, 5); + float frameTime = frames[frame]; + float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); + percent = GetCurvePercent(frame / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - r = prevFrameR + (frames[frameIndex + FRAME_R] - prevFrameR) * percent; - g = prevFrameG + (frames[frameIndex + FRAME_G] - prevFrameG) * percent; - b = prevFrameB + (frames[frameIndex + FRAME_B] - prevFrameB) * percent; - a = prevFrameA + (frames[frameIndex + FRAME_A] - prevFrameA) * percent; + r = frames[frame - 4]; + g = frames[frame - 3]; + b = frames[frame - 2]; + a = frames[frame - 1]; + r += (frames[frame + R] - r) * percent; + g += (frames[frame + G] - g) * percent; + b += (frames[frame + B] - b) * percent; + a += (frames[frame + A] - a) * percent; } Slot slot = skeleton.slots.Items[slotIndex]; if (alpha < 1) { @@ -488,19 +516,19 @@ namespace Spine { return; if (time < frames[0]) return; // Time is before first frame. - int frameIndex; + int frame; if (lastTime < frames[0]) - frameIndex = 0; + frame = 0; else { - frameIndex = Animation.binarySearch(frames, lastTime); - float frame = frames[frameIndex]; - while (frameIndex > 0) { // Fire multiple events with the same frame. - if (frames[frameIndex - 1] != frame) break; - frameIndex--; + frame = Animation.binarySearch(frames, lastTime); + float frameTime = frames[frame]; + while (frame > 0) { // Fire multiple events with the same frame. + if (frames[frame - 1] != frameTime) break; + frame--; } } - for (; frameIndex < frameCount && time >= frames[frameIndex]; frameIndex++) - firedEvents.Add(events[frameIndex]); + for (; frame < frameCount && time >= frames[frame]; frame++) + firedEvents.Add(events[frame]); } } @@ -528,15 +556,15 @@ namespace Spine { float[] frames = this.frames; if (time < frames[0]) return; // Time is before first frame. - int frameIndex; + int frame; if (time >= frames[frames.Length - 1]) // Time is after last frame. - frameIndex = frames.Length - 1; + frame = frames.Length - 1; else - frameIndex = Animation.binarySearch(frames, time) - 1; + frame = Animation.binarySearch(frames, time) - 1; ExposedList drawOrder = skeleton.drawOrder; ExposedList slots = skeleton.slots; - int[] drawOrderToSetupIndex = drawOrders[frameIndex]; + int[] drawOrderToSetupIndex = drawOrders[frame]; if (drawOrderToSetupIndex == null) { drawOrder.Clear(); for (int i = 0, n = slots.Count; i < n; i++) @@ -605,13 +633,13 @@ namespace Spine { } // Interpolate between the previous frame and the current frame. - int frameIndex = Animation.binarySearch(frames, time); - float frameTime = frames[frameIndex]; - float percent = 1 - (time - frameTime) / (frames[frameIndex - 1] - frameTime); - percent = GetCurvePercent(frameIndex - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + int frame = Animation.binarySearch(frames, time); + float frameTime = frames[frame]; + float percent = 1 - (time - frameTime) / (frames[frame - 1] - frameTime); + percent = GetCurvePercent(frame - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - float[] prevVertices = frameVertices[frameIndex - 1]; - float[] nextVertices = frameVertices[frameIndex]; + float[] prevVertices = frameVertices[frame - 1]; + float[] nextVertices = frameVertices[frame]; if (alpha < 1) { for (int i = 0; i < vertexCount; i++) { @@ -629,10 +657,10 @@ namespace Spine { } public class IkConstraintTimeline : CurveTimeline { - private const int PREV_FRAME_TIME = -3; - private const int PREV_FRAME_MIX = -2; - private const int PREV_FRAME_BEND_DIRECTION = -1; - private const int FRAME_MIX = 1; + private const int PREV_TIME = -3; + private const int PREV_MIX = -2; + private const int PREV_BEND_DIRECTION = -1; + private const int MIX = 1; internal int ikConstraintIndex; internal float[] frames; @@ -644,8 +672,8 @@ namespace Spine { : base(frameCount) { frames = new float[frameCount * 3]; } - - /** Sets the time, mix and bend direction of the specified keyframe. */ + + /// Sets the time, mix and bend direction of the specified keyframe. public void SetFrame (int frameIndex, float time, float mix, int bendDirection) { frameIndex *= 3; frames[frameIndex] = time; @@ -657,24 +685,86 @@ namespace Spine { float[] frames = this.frames; if (time < frames[0]) return; // Time is before first frame. - IkConstraint ikConstraint = skeleton.ikConstraints.Items[ikConstraintIndex]; + IkConstraint constraint = skeleton.ikConstraints.Items[ikConstraintIndex]; if (time >= frames[frames.Length - 3]) { // Time is after last frame. - ikConstraint.mix += (frames[frames.Length - 2] - ikConstraint.mix) * alpha; - ikConstraint.bendDirection = (int)frames[frames.Length - 1]; + constraint.mix += (frames[frames.Length + PREV_MIX] - constraint.mix) * alpha; + constraint.bendDirection = (int)frames[frames.Length + PREV_BEND_DIRECTION]; return; } // Interpolate between the previous frame and the current frame. - int frameIndex = Animation.binarySearch(frames, time, 3); - float prevFrameMix = frames[frameIndex + PREV_FRAME_MIX]; - float frameTime = frames[frameIndex]; - float percent = 1 - (time - frameTime) / (frames[frameIndex + PREV_FRAME_TIME] - frameTime); - percent = GetCurvePercent(frameIndex / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + int frame = Animation.binarySearch(frames, time, 3); + float frameTime = frames[frame]; + float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); + percent = GetCurvePercent(frame / 3 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); - float mix = prevFrameMix + (frames[frameIndex + FRAME_MIX] - prevFrameMix) * percent; - ikConstraint.mix += (mix - ikConstraint.mix) * alpha; - ikConstraint.bendDirection = (int)frames[frameIndex + PREV_FRAME_BEND_DIRECTION]; + float mix = frames[frame + PREV_MIX]; + constraint.mix += (mix + (frames[frame + MIX] - mix) * percent - constraint.mix) * alpha; + constraint.bendDirection = (int)frames[frame + PREV_BEND_DIRECTION]; + } + } + + public class TransformConstraintTimeline : CurveTimeline { + private const int PREV_TIME = -5; + private const int PREV_ROTATE_MIX = -4; + private const int PREV_TRANSLATE_MIX = -3; + private const int PREV_SCALE_MIX = -2; + private const int PREV_SHEAR_MIX = -1; + private const int ROTATE_MIX = 1; + private const int TRANSLATE_MIX = 2; + private const int SCALE_MIX = 3; + private const int SHEAR_MIX = 4; + + internal int transformConstraintIndex; + internal float[] frames; + + public int TransformConstraintIndex { get { return transformConstraintIndex; } set { transformConstraintIndex = value; } } + public float[] Frames { get { return frames; } set { frames = value; } } // time, rotate mix, translate mix, scale mix, shear mix, ... + + public TransformConstraintTimeline (int frameCount) + : base(frameCount) { + frames = new float[frameCount * 5]; + } + + public void SetFrame (int frameIndex, float time, float rotateMix, float translateMix, float scaleMix, float shearMix) { + frameIndex *= 5; + frames[frameIndex] = time; + frames[frameIndex + 1] = rotateMix; + frames[frameIndex + 2] = translateMix; + frames[frameIndex + 3] = scaleMix; + frames[frameIndex + 4] = shearMix; + } + + override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { + float[] frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + TransformConstraint constraint = skeleton.transformConstraints.Items[transformConstraintIndex]; + + if (time >= frames[frames.Length - 5]) { // Time is after last frame. + int i = frames.Length - 1; + constraint.rotateMix += (frames[i - 3] - constraint.rotateMix) * alpha; + constraint.translateMix += (frames[i - 2] - constraint.translateMix) * alpha; + constraint.scaleMix += (frames[i - 1] - constraint.scaleMix) * alpha; + constraint.shearMix += (frames[i] - constraint.shearMix) * alpha; + return; + } + + // Interpolate between the previous frame and the current frame. + int frame = Animation.binarySearch(frames, time, 5); + float frameTime = frames[frame]; + float percent = 1 - (time - frameTime) / (frames[frame + PREV_TIME] - frameTime); + percent = GetCurvePercent(frame / 5 - 1, percent < 0 ? 0 : (percent > 1 ? 1 : percent)); + + float rotate = frames[frame + PREV_ROTATE_MIX]; + float translate = frames[frame + PREV_TRANSLATE_MIX]; + float scale = frames[frame + PREV_SCALE_MIX]; + float shear = frames[frame + PREV_SHEAR_MIX]; + constraint.rotateMix += (rotate + (frames[frame + ROTATE_MIX] - rotate) * percent - constraint.rotateMix) * alpha; + constraint.translateMix += (translate + (frames[frame + TRANSLATE_MIX] - translate) * percent - constraint.translateMix) * alpha; + constraint.scaleMix += (scale + (frames[frame + SCALE_MIX] - scale) * percent - constraint.scaleMix) * alpha; + constraint.shearMix += (shear + (frames[frame + SHEAR_MIX] - shear) * percent - constraint.shearMix) * alpha; } } } diff --git a/spine-csharp/src/Bone.cs b/spine-csharp/src/Bone.cs index d1aeee7e1..01f1efbcb 100644 --- a/spine-csharp/src/Bone.cs +++ b/spine-csharp/src/Bone.cs @@ -40,7 +40,7 @@ namespace Spine { internal Skeleton skeleton; internal Bone parent; internal ExposedList children = new ExposedList(); - internal float x, y, rotation, scaleX, scaleY; + internal float x, y, rotation, scaleX, scaleY, shearX, shearY; internal float appliedRotation, appliedScaleX, appliedScaleY; internal float a, b, worldX; @@ -62,6 +62,8 @@ namespace Spine { public float AppliedScaleY { get { return appliedScaleY; } set { appliedScaleY = value; } } public float ScaleX { get { return scaleX; } set { scaleX = value; } } public float ScaleY { get { return scaleY; } set { scaleY = value; } } + public float ShearX { get { return shearX; } set { shearX = value; } } + public float ShearY { get { return shearY; } set { shearY = value; } } public float A { get { return a; } } public float B { get { return b; } } @@ -88,22 +90,24 @@ namespace Spine { /// Same as {@link #updateWorldTransform()}. This method exists for Bone to implement {@link Updatable}. public void Update () { - UpdateWorldTransform(x, y, rotation, scaleX, scaleY); + UpdateWorldTransform(x, y, rotation, scaleX, scaleY, shearX, shearY); } /// Computes the world SRT using the parent bone and this bone's local SRT. public void UpdateWorldTransform () { - UpdateWorldTransform(x, y, rotation, scaleX, scaleY); + UpdateWorldTransform(x, y, rotation, scaleX, scaleY, shearX, shearY); } /// Computes the world SRT using the parent bone and the specified local SRT. - public void UpdateWorldTransform (float x, float y, float rotation, float scaleX, float scaleY) { + public void UpdateWorldTransform (float x, float y, float rotation, float scaleX, float scaleY, float shearX, float shearY) { appliedRotation = rotation; appliedScaleX = scaleX; appliedScaleY = scaleY; - float cos = MathUtils.CosDeg(rotation), sin = MathUtils.SinDeg(rotation); - float la = cos * scaleX, lb = -sin * scaleY, lc = sin * scaleX, ld = cos * scaleY; + float rotationY = rotation + 90 + shearY; + float la = MathUtils.CosDeg(rotation + shearX) * scaleX, lb = MathUtils.CosDeg(rotationY) * scaleY; + float lc = MathUtils.SinDeg(rotation + shearX) * scaleX, ld = MathUtils.SinDeg(rotationY) * scaleY; + Bone parent = this.parent; if (parent == null) { // Root bone. Skeleton skeleton = this.skeleton; @@ -146,8 +150,7 @@ namespace Spine { pc = 0; pd = 1; do { - cos = MathUtils.CosDeg(parent.appliedRotation); - sin = MathUtils.SinDeg(parent.appliedRotation); + float cos = MathUtils.CosDeg(parent.appliedRotation), sin = MathUtils.SinDeg(parent.appliedRotation); float temp = pa * cos + pb * sin; pb = pa * -sin + pb * cos; pa = temp; @@ -168,9 +171,7 @@ namespace Spine { pc = 0; pd = 1; do { - float r = parent.rotation; - cos = MathUtils.CosDeg(r); - sin = MathUtils.SinDeg(r); + float r = parent.appliedRotation, cos = MathUtils.CosDeg(r), sin = MathUtils.SinDeg(r); float psx = parent.appliedScaleX, psy = parent.appliedScaleY; float za = cos * psx, zb = -sin * psy, zc = sin * psx, zd = cos * psy; float temp = pa * za + pb * zc; @@ -221,6 +222,8 @@ namespace Spine { rotation = data.rotation; scaleX = data.scaleX; scaleY = data.scaleY; + shearX = data.shearX; + shearY = data.shearY; } public void WorldToLocal (float worldX, float worldY, out float localX, out float localY) { diff --git a/spine-csharp/src/BoneData.cs b/spine-csharp/src/BoneData.cs index 29214e2f6..21b1ed555 100644 --- a/spine-csharp/src/BoneData.cs +++ b/spine-csharp/src/BoneData.cs @@ -35,7 +35,7 @@ namespace Spine { public class BoneData { internal BoneData parent; internal String name; - internal float length, x, y, rotation, scaleX = 1, scaleY = 1; + internal float length, x, y, rotation, scaleX = 1, scaleY = 1, shearX, shearY; internal bool inheritScale = true, inheritRotation = true; /// May be null. @@ -47,6 +47,8 @@ namespace Spine { public float Rotation { get { return rotation; } set { rotation = value; } } public float ScaleX { get { return scaleX; } set { scaleX = value; } } public float ScaleY { get { return scaleY; } set { scaleY = value; } } + public float ShearX { get { return shearX; } set { shearX = value; } } + public float ShearY { get { return shearY; } set { shearY = value; } } public bool InheritScale { get { return inheritScale; } set { inheritScale = value; } } public bool InheritRotation { get { return inheritRotation; } set { inheritRotation = value; } } diff --git a/spine-csharp/src/IkConstraint.cs b/spine-csharp/src/IkConstraint.cs index 63112c064..3b4530135 100644 --- a/spine-csharp/src/IkConstraint.cs +++ b/spine-csharp/src/IkConstraint.cs @@ -83,14 +83,17 @@ namespace Spine { /// Adjusts the bone rotation so the tip is as close to the target position as possible. The target is specified /// in the world coordinate system. static public void Apply (Bone bone, float targetX, float targetY, float alpha) { - float parentRotation = bone.parent == null ? 0 : bone.parent.WorldRotationX; - float rotation = bone.rotation; - float rotationIK = MathUtils.Atan2(targetY - bone.worldY, targetX - bone.worldX) * MathUtils.radDeg - parentRotation; - if ((bone.worldSignX != bone.worldSignY) != (bone.skeleton.flipX != (bone.skeleton.flipY != Bone.yDown))) - rotationIK = 360 - rotationIK; - if (rotationIK > 180) rotationIK -= 360; + Bone pp = bone.parent; + float id = 1 / (pp.a * pp.d - pp.b * pp.c); + float x = targetX - pp.worldX, y = targetY - pp.worldY; + float tx = (x * pp.d - y * pp.b) * id - bone.x, ty = (y * pp.a - x * pp.c) * id - bone.y; + float rotationIK = MathUtils.Atan2(ty, tx) * MathUtils.radDeg - bone.shearX; + if (bone.scaleX < 0) rotationIK += 180; + if (rotationIK > 180) + rotationIK -= 360; else if (rotationIK < -180) rotationIK += 360; - bone.UpdateWorldTransform(bone.x, bone.y, rotation + (rotationIK - rotation) * alpha, bone.appliedScaleX, bone.appliedScaleY); + bone.UpdateWorldTransform(bone.x, bone.y, bone.rotation + (rotationIK - bone.rotation) * alpha, bone.appliedScaleX, + bone.appliedScaleY, bone.shearX, bone.shearY); } /// Adjusts the parent and child bone rotations so the tip of the child is as close to the target position as @@ -125,22 +128,12 @@ namespace Spine { } else os2 = 0; Bone pp = parent.parent; - float tx, ty, dx, dy; - if (pp == null) { - tx = targetX - px; - ty = targetY - py; - dx = child.worldX - px; - dy = child.worldY - py; - } else { - float a = pp.a, b = pp.b, c = pp.c, d = pp.d, invDet = 1 / (a * d - b * c); - float wx = pp.worldX, wy = pp.worldY, x = targetX - wx, y = targetY - wy; - tx = (x * d - y * b) * invDet - px; - ty = (y * a - x * c) * invDet - py; - x = child.worldX - wx; - y = child.worldY - wy; - dx = (x * d - y * b) * invDet - px; - dy = (y * a - x * c) * invDet - py; - } + float ppa = pp.a, ppb = pp.b, ppc = pp.c, ppd = pp.d, id = 1 / (ppa * ppd - ppb * ppc); + float x = targetX - pp.worldX, y = targetY - pp.worldY; + float tx = (x * ppd - y * ppb) * id - px, ty = (y * ppa - x * ppc) * id - py; + x = child.worldX - pp.worldX; + y = child.worldY - pp.worldY; + float dx = (x * ppd - y * ppb) * id - px, dy = (y * ppa - x * ppc) * id - py; float l1 = (float)Math.Sqrt(dx * dx + dy * dy), l2 = child.data.length * csx, a1, a2; if (u) { l2 *= psx; @@ -162,40 +155,41 @@ namespace Spine { float r0 = q / c2, r1 = c0 / q; float r = Math.Abs(r0) < Math.Abs(r1) ? r0 : r1; if (r * r <= dd) { - float y1 = (float)Math.Sqrt(dd - r * r) * bendDir; - a1 = ta - MathUtils.Atan2(y1, r); - a2 = MathUtils.Atan2(y1 / psy, (r - l1) / psx); + y = (float)Math.Sqrt(dd - r * r) * bendDir; + a1 = ta - MathUtils.Atan2(y, r); + a2 = MathUtils.Atan2(y / psy, (r - l1) / psx); goto outer; } } float minAngle = 0, minDist = float.MaxValue, minX = 0, minY = 0; float maxAngle = 0, maxDist = 0, maxX = 0, maxY = 0; - float x = l1 + a, dist = x * x; - if (dist > maxDist) { + x = l1 + a; + d = x * x; + if (d > maxDist) { maxAngle = 0; - maxDist = dist; + maxDist = d; maxX = x; } x = l1 - a; - dist = x * x; - if (dist < minDist) { + d = x * x; + if (d < minDist) { minAngle = MathUtils.PI; - minDist = dist; + minDist = d; minX = x; } float angle = (float)Math.Acos(-a * l1 / (aa - bb)); x = a * MathUtils.Cos(angle) + l1; - float y = b * MathUtils.Sin(angle); - dist = x * x + y * y; - if (dist < minDist) { + y = b * MathUtils.Sin(angle); + d = x * x + y * y; + if (d < minDist) { minAngle = angle; - minDist = dist; + minDist = d; minX = x; minY = y; } - if (dist > maxDist) { + if (d > maxDist) { maxAngle = angle; - maxDist = dist; + maxDist = d; maxX = x; maxY = y; } @@ -210,15 +204,15 @@ namespace Spine { outer: float os = MathUtils.Atan2(cy, cx) * s2; a1 = (a1 - os) * MathUtils.radDeg + os1; - a2 = (a2 + os) * MathUtils.radDeg * s2 + os2; + a2 = ((a2 + os) * MathUtils.radDeg - child.shearX) * s2 + os2; if (a1 > 180) a1 -= 360; else if (a1 < -180) a1 += 360; if (a2 > 180) a2 -= 360; else if (a2 < -180) a2 += 360; float rotation = parent.rotation; - parent.UpdateWorldTransform(px, py, rotation + (a1 - rotation) * alpha, parent.appliedScaleX, parent.appliedScaleY); + parent.UpdateWorldTransform(px, py, rotation + (a1 - rotation) * alpha, parent.appliedScaleX, parent.appliedScaleY, 0, 0); rotation = child.rotation; - child.UpdateWorldTransform(cx, cy, rotation + (a2 - rotation) * alpha, child.appliedScaleX, child.appliedScaleY); + child.UpdateWorldTransform(cx, cy, rotation + (a2 - rotation) * alpha, child.appliedScaleX, child.appliedScaleY, child.shearX, child.shearY); } } } diff --git a/spine-csharp/src/MathUtils.cs b/spine-csharp/src/MathUtils.cs index 225b20f6c..665cf8f06 100644 --- a/spine-csharp/src/MathUtils.cs +++ b/spine-csharp/src/MathUtils.cs @@ -34,6 +34,7 @@ using System; namespace Spine { public static class MathUtils { public const float PI = 3.1415927f; + public const float PI2 = PI * 2; public const float radDeg = 180f / PI; public const float degRad = PI / 180; diff --git a/spine-csharp/src/Skeleton.cs b/spine-csharp/src/Skeleton.cs index a8cad1246..ea88ecd76 100644 --- a/spine-csharp/src/Skeleton.cs +++ b/spine-csharp/src/Skeleton.cs @@ -127,8 +127,7 @@ namespace Spine { for (int i = 0; i < transformConstraintsCount; i++) { TransformConstraint transformConstraint = transformConstraints.Items[i]; for (int ii = updateCache.Count - 1; i >= 0; ii--) { - IUpdatable updateable = updateCache.Items[ii]; - if (updateable == transformConstraint.bone || updateable == transformConstraint.target) { + if (updateCache.Items[ii] == transformConstraint.bone) { updateCache.Insert(ii + 1, transformConstraint); break; } @@ -165,9 +164,11 @@ namespace Spine { ExposedList transformConstraints = this.transformConstraints; for (int i = 0, n = transformConstraints.Count; i < n; i++) { TransformConstraint constraint = transformConstraints.Items[i]; - constraint.translateMix = constraint.data.translateMix; - constraint.x = constraint.data.x; - constraint.y = constraint.data.y; + TransformConstraintData data = constraint.data; + constraint.rotateMix = data.rotateMix; + constraint.translateMix = data.translateMix; + constraint.scaleMix = data.scaleMix; + constraint.shearMix = data.shearMix; } } diff --git a/spine-csharp/src/SkeletonBinary.cs b/spine-csharp/src/SkeletonBinary.cs index 830ac5785..d5228f43e 100644 --- a/spine-csharp/src/SkeletonBinary.cs +++ b/spine-csharp/src/SkeletonBinary.cs @@ -29,6 +29,10 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ +#if (UNITY_5 || UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_4_7 || UNITY_WSA || UNITY_WP8 || UNITY_WP8_1) +#define IS_UNITY +#endif + using System; using System.IO; using System.Collections.Generic; @@ -40,11 +44,12 @@ using Windows.Storage; namespace Spine { public class SkeletonBinary { - public const int TIMELINE_SCALE = 0; - public const int TIMELINE_ROTATE = 1; - public const int TIMELINE_TRANSLATE = 2; - public const int TIMELINE_ATTACHMENT = 3; - public const int TIMELINE_COLOR = 4; + public const int TIMELINE_ROTATE = 0; + public const int TIMELINE_TRANSLATE = 1; + public const int TIMELINE_SCALE = 2; + public const int TIMELINE_SHEAR = 3; + public const int TIMELINE_ATTACHMENT = 4; + public const int TIMELINE_COLOR = 5; public const int CURVE_LINEAR = 0; public const int CURVE_STEPPED = 1; @@ -65,10 +70,8 @@ namespace Spine { this.attachmentLoader = attachmentLoader; Scale = 1; } - - #if !(UNITY_5 || UNITY_4 || UNITY_WSA || UNITY_WP8 || UNITY_WP8_1) - #if WINDOWS_STOREAPP - + + #if !ISUNITY && WINDOWS_STOREAPP private async Task ReadFile(string path) { var folder = Windows.ApplicationModel.Package.Current.InstalledLocation; using (var input = new BufferedStream(await folder.GetFileAsync(path).AsTask().ConfigureAwait(false))) { @@ -95,7 +98,6 @@ namespace Spine { } #endif // WINDOWS_STOREAPP - #endif // !(UNITY) public SkeletonData ReadSkeletonData (Stream input) { if (input == null) throw new ArgumentNullException("input"); @@ -121,14 +123,16 @@ namespace Spine { String name = ReadString(input); BoneData parent = i == 0 ? null : skeletonData.bones.Items[ReadVarint(input, true)]; BoneData boneData = new BoneData(name, parent); + boneData.rotation = ReadFloat(input); boneData.x = ReadFloat(input) * scale; boneData.y = ReadFloat(input) * scale; boneData.scaleX = ReadFloat(input); boneData.scaleY = ReadFloat(input); - boneData.rotation = ReadFloat(input); + boneData.shearX = ReadFloat(input); + boneData.shearY = ReadFloat(input); boneData.length = ReadFloat(input) * scale; - boneData.inheritScale = ReadBoolean(input); boneData.inheritRotation = ReadBoolean(input); + boneData.inheritScale = ReadBoolean(input); if (nonessential) ReadInt(input); // Skip bone color. skeletonData.bones.Add(boneData); } @@ -149,9 +153,16 @@ namespace Spine { TransformConstraintData transformConstraintData = new TransformConstraintData(ReadString(input)); transformConstraintData.bone = skeletonData.bones.Items[ReadVarint(input, true)]; transformConstraintData.target = skeletonData.bones.Items[ReadVarint(input, true)]; + transformConstraintData.offsetRotation = ReadFloat(input); + transformConstraintData.offsetX = ReadFloat(input) * scale; + transformConstraintData.offsetY = ReadFloat(input) * scale; + transformConstraintData.offsetScaleX = ReadFloat(input); + transformConstraintData.offsetScaleY = ReadFloat(input); + transformConstraintData.offsetShearY = ReadFloat(input); + transformConstraintData.rotateMix = ReadFloat(input); transformConstraintData.translateMix = ReadFloat(input); - transformConstraintData.x = ReadFloat(input) * scale; - transformConstraintData.y = ReadFloat(input) * scale; + transformConstraintData.scaleMix = ReadFloat(input); + transformConstraintData.shearMix = ReadFloat(input); skeletonData.transformConstraints.Add(transformConstraintData); } @@ -247,11 +258,11 @@ namespace Spine { switch (type) { case AttachmentType.region: { String path = ReadString(input); + float rotation = ReadFloat(input); float x = ReadFloat(input); float y = ReadFloat(input); float scaleX = ReadFloat(input); float scaleY = ReadFloat(input); - float rotation = ReadFloat(input); float width = ReadFloat(input); float height = ReadFloat(input); int color = ReadInt(input); @@ -508,11 +519,14 @@ namespace Spine { break; } case TIMELINE_TRANSLATE: - case TIMELINE_SCALE: { + case TIMELINE_SCALE: + case TIMELINE_SHEAR: { TranslateTimeline timeline; float timelineScale = 1; if (timelineType == TIMELINE_SCALE) timeline = new ScaleTimeline(frameCount); + else if (timelineType == TIMELINE_SHEAR) + timeline = new ShearTimeline(frameCount); else { timeline = new TranslateTimeline(frameCount); timelineScale = scale; @@ -533,10 +547,10 @@ namespace Spine { // IK timelines. for (int i = 0, n = ReadVarint(input, true); i < n; i++) { - IkConstraintData ikConstraint = skeletonData.ikConstraints.Items[ReadVarint(input, true)]; + IkConstraintData constraint = skeletonData.ikConstraints.Items[ReadVarint(input, true)]; int frameCount = ReadVarint(input, true); IkConstraintTimeline timeline = new IkConstraintTimeline(frameCount); - timeline.ikConstraintIndex = skeletonData.ikConstraints.IndexOf(ikConstraint); + timeline.ikConstraintIndex = skeletonData.ikConstraints.IndexOf(constraint); for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { timeline.SetFrame(frameIndex, ReadFloat(input), ReadFloat(input), ReadSByte(input)); if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); @@ -545,6 +559,20 @@ namespace Spine { duration = Math.Max(duration, timeline.frames[frameCount * 3 - 3]); } + // Transform constraint timelines. + for (int i = 0, n = ReadVarint(input, true); i < n; i++) { + TransformConstraintData constraint = skeletonData.transformConstraints.Items[ReadVarint(input, true)]; + int frameCount = ReadVarint(input, true); + TransformConstraintTimeline timeline = new TransformConstraintTimeline(frameCount); + timeline.transformConstraintIndex = skeletonData.transformConstraints.IndexOf(constraint); + for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { + timeline.SetFrame(frameIndex, ReadFloat(input), ReadFloat(input), ReadFloat(input), ReadFloat(input), ReadFloat(input)); + if (frameIndex < frameCount - 1) ReadCurve(input, frameIndex, timeline); + } + timelines.Add(timeline); + duration = Math.Max(duration, timeline.frames[frameCount * 5 - 5]); + } + // FFD timelines. for (int i = 0, n = ReadVarint(input, true); i < n; i++) { Skin skin = skeletonData.skins.Items[ReadVarint(input, true)]; diff --git a/spine-csharp/src/SkeletonJson.cs b/spine-csharp/src/SkeletonJson.cs index 84691e890..5ae9f1238 100644 --- a/spine-csharp/src/SkeletonJson.cs +++ b/spine-csharp/src/SkeletonJson.cs @@ -59,9 +59,7 @@ namespace Spine { Scale = 1; } - #if !(IS_UNITY) - #if WINDOWS_STOREAPP - + #if !(IS_UNITY) && WINDOWS_STOREAPP private async Task ReadFile(string path) { var folder = Windows.ApplicationModel.Package.Current.InstalledLocation; var file = await folder.GetFileAsync(path).AsTask().ConfigureAwait(false); @@ -88,9 +86,7 @@ namespace Spine { return skeletonData; } } - #endif // WINDOWS_STOREAPP - #endif // !UNITY public SkeletonData ReadSkeletonData (TextReader reader) { if (reader == null) throw new ArgumentNullException("reader cannot be null."); @@ -125,6 +121,8 @@ namespace Spine { boneData.rotation = GetFloat(boneMap, "rotation", 0); boneData.scaleX = GetFloat(boneMap, "scaleX", 1); boneData.scaleY = GetFloat(boneMap, "scaleY", 1); + boneData.shearX = GetFloat(boneMap, "shearX", 0); + boneData.shearY = GetFloat(boneMap, "shearY", 0); boneData.inheritScale = GetBoolean(boneMap, "inheritScale", true); boneData.inheritRotation = GetBoolean(boneMap, "inheritRotation", true); skeletonData.bones.Add(boneData); @@ -165,9 +163,17 @@ namespace Spine { transformConstraintData.target = skeletonData.FindBone(targetName); if (transformConstraintData.target == null) throw new Exception("Target bone not found: " + targetName); + transformConstraintData.offsetRotation = GetFloat(transformMap, "rotation", 0); + transformConstraintData.offsetX = GetFloat(transformMap, "x", 0) * scale; + transformConstraintData.offsetY = GetFloat(transformMap, "y", 0) * scale; + transformConstraintData.offsetScaleX = GetFloat(transformMap, "scaleX", 0); + transformConstraintData.offsetScaleY = GetFloat(transformMap, "scaleY", 0); + transformConstraintData.offsetShearY = GetFloat(transformMap, "shearY", 0); + + transformConstraintData.rotateMix = GetFloat(transformMap, "rotateMix", 1); transformConstraintData.translateMix = GetFloat(transformMap, "translateMix", 1); - transformConstraintData.x = GetFloat(transformMap, "x", 0) * scale; - transformConstraintData.y = GetFloat(transformMap, "y", 0) * scale; + transformConstraintData.scaleMix = GetFloat(transformMap, "scaleMix", 1); + transformConstraintData.shearMix = GetFloat(transformMap, "shearMix", 1); skeletonData.transformConstraints.Add(transformConstraintData); } @@ -520,11 +526,13 @@ namespace Spine { timelines.Add(timeline); duration = Math.Max(duration, timeline.frames[timeline.FrameCount * 2 - 2]); - } else if (timelineName == "translate" || timelineName == "scale") { + } else if (timelineName == "translate" || timelineName == "scale" || timelineName == "shear") { TranslateTimeline timeline; float timelineScale = 1; if (timelineName == "scale") timeline = new ScaleTimeline(values.Count); + else if (timelineName == "shear") + timeline = new ShearTimeline(values.Count); else { timeline = new TranslateTimeline(values.Count); timelineScale = scale; @@ -534,8 +542,8 @@ namespace Spine { int frameIndex = 0; foreach (Dictionary valueMap in values) { float time = (float)valueMap["time"]; - float x = valueMap.ContainsKey("x") ? (float)valueMap["x"] : 0; - float y = valueMap.ContainsKey("y") ? (float)valueMap["y"] : 0; + float x = GetFloat(valueMap, "x", 0); + float y = GetFloat(valueMap, "y", 0); timeline.SetFrame(frameIndex, time, (float)x * timelineScale, (float)y * timelineScale); ReadCurve(timeline, frameIndex, valueMap); frameIndex++; @@ -549,17 +557,18 @@ namespace Spine { } } + // IK timelines. if (map.ContainsKey("ik")) { - foreach (KeyValuePair ikMap in (Dictionary)map["ik"]) { - IkConstraintData ikConstraint = skeletonData.FindIkConstraint(ikMap.Key); - var values = (List)ikMap.Value; + foreach (KeyValuePair constraintMap in (Dictionary)map["ik"]) { + IkConstraintData constraint = skeletonData.FindIkConstraint(constraintMap.Key); + var values = (List)constraintMap.Value; var timeline = new IkConstraintTimeline(values.Count); - timeline.ikConstraintIndex = skeletonData.ikConstraints.IndexOf(ikConstraint); + timeline.ikConstraintIndex = skeletonData.ikConstraints.IndexOf(constraint); int frameIndex = 0; foreach (Dictionary valueMap in values) { float time = (float)valueMap["time"]; - float mix = valueMap.ContainsKey("mix") ? (float)valueMap["mix"] : 1; - bool bendPositive = valueMap.ContainsKey("bendPositive") ? (bool)valueMap["bendPositive"] : true; + float mix = GetFloat(valueMap, "mix", 1); + bool bendPositive = GetBoolean(valueMap, "bendPositive", true); timeline.SetFrame(frameIndex, time, mix, bendPositive ? 1 : -1); ReadCurve(timeline, frameIndex, valueMap); frameIndex++; @@ -569,6 +578,30 @@ namespace Spine { } } + // Transform constraint timelines. + if (map.ContainsKey("transform")) { + foreach (KeyValuePair constraintMap in (Dictionary)map["transform"]) { + TransformConstraintData constraint = skeletonData.FindTransformConstraint(constraintMap.Key); + var values = (List)constraintMap.Value; + var timeline = new TransformConstraintTimeline(values.Count); + timeline.transformConstraintIndex = skeletonData.transformConstraints.IndexOf(constraint); + int frameIndex = 0; + foreach (Dictionary valueMap in values) { + float time = (float)valueMap["time"]; + float rotateMix = GetFloat(valueMap, "rotateMix", 1); + float translateMix = GetFloat(valueMap, "translateMix", 1); + float scaleMix = GetFloat(valueMap, "scaleMix", 1); + float shearMix = GetFloat(valueMap, "shearMix", 1); + timeline.SetFrame(frameIndex, time, rotateMix, translateMix, scaleMix, shearMix); + ReadCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.Add(timeline); + duration = Math.Max(duration, timeline.frames[timeline.FrameCount * 5 - 5]); + } + } + + // FFD timelines. if (map.ContainsKey("ffd")) { foreach (KeyValuePair ffdMap in (Dictionary)map["ffd"]) { Skin skin = skeletonData.FindSkin(ffdMap.Key); diff --git a/spine-csharp/src/TransformConstraint.cs b/spine-csharp/src/TransformConstraint.cs index d5b03be6e..4239781a7 100644 --- a/spine-csharp/src/TransformConstraint.cs +++ b/spine-csharp/src/TransformConstraint.cs @@ -36,38 +36,95 @@ namespace Spine { public class TransformConstraint : IUpdatable { internal TransformConstraintData data; internal Bone bone, target; - internal float translateMix; - internal float x, y; + internal float rotateMix, translateMix, scaleMix, shearMix; + internal float offsetRotation, offsetX, offsetY, offsetScaleX, offsetScaleY, offsetShearY; public TransformConstraintData Data { get { return data; } } public Bone Bone { get { return bone; } set { bone = value; } } public Bone Target { get { return target; } set { target = value; } } + public float RotateMix { get { return rotateMix; } set { rotateMix = value; } } public float TranslateMix { get { return translateMix; } set { translateMix = value; } } - public float X { get { return x; } set { x = value; } } - public float Y { get { return y; } set { y = value; } } + public float ScaleMix { get { return scaleMix; } set { scaleMix = value; } } + public float ShearMix { get { return shearMix; } set { shearMix = value; } } + + public float OffsetRotation { get { return offsetRotation; } set { offsetRotation = value; } } + public float OffsetX { get { return offsetX; } set { offsetX = value; } } + public float OffsetY { get { return offsetY; } set { offsetY = value; } } + public float OffsetScaleX { get { return offsetScaleX; } set { offsetScaleX = value; } } + public float OffsetScaleY { get { return offsetScaleY; } set { offsetScaleY = value; } } + public float OffsetShearY { get { return offsetShearY; } set { offsetShearY = value; } } public TransformConstraint (TransformConstraintData data, Skeleton skeleton) { if (data == null) throw new ArgumentNullException("data cannot be null."); if (skeleton == null) throw new ArgumentNullException("skeleton cannot be null."); this.data = data; translateMix = data.translateMix; - x = data.x; - y = data.y; + rotateMix = data.rotateMix; + scaleMix = data.scaleMix; + shearMix = data.shearMix; + offsetRotation = data.offsetRotation; + offsetX = data.offsetX; + offsetY = data.offsetY; + offsetScaleX = data.offsetScaleX; + offsetScaleY = data.offsetScaleY; + offsetShearY = data.offsetShearY; bone = skeleton.FindBone(data.bone.name); target = skeleton.FindBone(data.target.name); } - public void Update () { - Apply(); + public void Apply () { + Update(); } - public void Apply () { + public void Update () { + Bone bone = this.bone; + Bone target = this.target; + + if (rotateMix > 0) { + float a = bone.a, b = bone.b, c = bone.c, d = bone.d; + float r = MathUtils.Atan2(target.c, target.a) - MathUtils.Atan2(c, a) + offsetRotation * MathUtils.degRad; + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) r += MathUtils.PI2; + r *= rotateMix; + float cos = MathUtils.Cos(r), sin = MathUtils.Sin(r); + bone.a = cos * a - sin * c; + bone.b = cos * b - sin * d; + bone.c = sin * a + cos * c; + bone.d = sin * b + cos * d; + } + + if (scaleMix > 0) { + float bs = (float)Math.Sqrt(bone.a * bone.a + bone.c * bone.c); + float ts = (float)Math.Sqrt(target.a * target.a + target.c * target.c); + float s = bs > 0.00001f ? (bs + (ts - bs + offsetScaleX) * scaleMix) / bs : 0; + bone.a *= s; + bone.c *= s; + bs = (float)Math.Sqrt(bone.b * bone.b + bone.d * bone.d); + ts = (float)Math.Sqrt(target.b * target.b + target.d * target.d); + s = bs > 0.00001f ? (bs + (ts - bs + offsetScaleY) * scaleMix) / bs : 0; + bone.b *= s; + bone.d *= s; + } + + if (shearMix > 0) { + float b = bone.b, d = bone.d; + float by = MathUtils.Atan2(d, b); + float r = MathUtils.Atan2(target.d, target.b) - MathUtils.Atan2(target.c, target.a) - (by - MathUtils.Atan2(bone.c, bone.a)); + if (r > MathUtils.PI) + r -= MathUtils.PI2; + else if (r < -MathUtils.PI) r += MathUtils.PI2; + r = by + (r + offsetShearY * MathUtils.degRad) * shearMix; + float s = (float)Math.Sqrt(b * b + d * d); + bone.b = MathUtils.Cos(r) * s; + bone.d = MathUtils.Sin(r) * s; + } + float translateMix = this.translateMix; if (translateMix > 0) { - Bone bone = this.bone; float tx, ty; - target.LocalToWorld(x, y, out tx, out ty); + target.LocalToWorld(offsetX, offsetY, out tx, out ty); bone.worldX += (tx - bone.worldX) * translateMix; bone.worldY += (ty - bone.worldY) * translateMix; } diff --git a/spine-csharp/src/TransformConstraintData.cs b/spine-csharp/src/TransformConstraintData.cs index 907add275..eeee5d21e 100644 --- a/spine-csharp/src/TransformConstraintData.cs +++ b/spine-csharp/src/TransformConstraintData.cs @@ -36,15 +36,23 @@ namespace Spine { public class TransformConstraintData { internal String name; internal BoneData bone, target; - internal float translateMix; - internal float x, y; + internal float rotateMix, translateMix, scaleMix, shearMix; + internal float offsetRotation, offsetX, offsetY, offsetScaleX, offsetScaleY, offsetShearY; public String Name { get { return name; } } public BoneData Bone { get { return bone; } set { bone = value; } } public BoneData Target { get { return target; } set { target = value; } } + public float RotateMix { get { return rotateMix; } set { rotateMix = value; } } public float TranslateMix { get { return translateMix; } set { translateMix = value; } } - public float X { get { return x; } set { x = value; } } - public float Y { get { return y; } set { y = value; } } + public float ScaleMix { get { return scaleMix; } set { scaleMix = value; } } + public float ShearMix { get { return shearMix; } set { shearMix = value; } } + + public float OffsetRotation { get { return offsetRotation; } set { offsetRotation = value; } } + public float OffsetX { get { return offsetX; } set { offsetX = value; } } + public float OffsetY { get { return offsetY; } set { offsetY = value; } } + public float OffsetScaleX { get { return offsetScaleX; } set { offsetScaleX = value; } } + public float OffsetScaleY { get { return offsetScaleY; } set { offsetScaleY = value; } } + public float OffsetShearY { get { return offsetShearY; } set { offsetShearY = value; } } public TransformConstraintData (String name) { if (name == null) throw new ArgumentNullException("name cannot be null."); diff --git a/spine-js/README.md b/spine-js/README.md index 33e711722..29fdc962a 100644 --- a/spine-js/README.md +++ b/spine-js/README.md @@ -14,7 +14,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-js works with data exported from Spine 3.1.08. Updating spine-js to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-js works with data exported from Spine 3.1.08. Updating spine-js to [v3.2](https://github.com/EsotericSoftware/spine-runtimes/issues/586) and [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-js supports all Spine features. spine-canvas does not support color tinting, mesh attachments, or nonuniform scaling. diff --git a/spine-js/spine.js b/spine-js/spine.js index ea554a0e8..080482b35 100644 --- a/spine-js/spine.js +++ b/spine-js/spine.js @@ -989,8 +989,10 @@ spine.FfdTimeline.prototype = { var vertexCount = frameVertices[0].length; var vertices = slot.attachmentVertices; - if (vertices.length != vertexCount) alpha = 1; - vertices.length = vertexCount; + if (vertices.length != vertexCount) { + slot.attachmentVertices = vertices = new spine.Float32Array(vertexCount); + alpha = 1; + } if (time >= frames[frames.length - 1]) { // Time is after last frame. var lastVertices = frameVertices[frames.length - 1]; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java index baefe5c3f..14e792302 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Animation.java @@ -828,10 +828,10 @@ public class Animation { public void setFrame (int frameIndex, float time, float rotateMix, float translateMix, float scaleMix, float shearMix) { frameIndex *= ENTRIES; frames[frameIndex] = time; - frames[frameIndex + 1] = rotateMix; - frames[frameIndex + 2] = translateMix; - frames[frameIndex + 3] = scaleMix; - frames[frameIndex + 4] = shearMix; + frames[frameIndex + ROTATE] = rotateMix; + frames[frameIndex + TRANSLATE] = translateMix; + frames[frameIndex + SCALE] = scaleMix; + frames[frameIndex + SHEAR] = shearMix; } public void apply (Skeleton skeleton, float lastTime, float time, Array events, float alpha) { diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java index 50dd12514..58e99dd18 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java @@ -130,13 +130,13 @@ public class IkConstraint implements Updatable { float id = 1 / (pp.a * pp.d - pp.b * pp.c); float x = targetX - pp.worldX, y = targetY - pp.worldY; float tx = (x * pp.d - y * pp.b) * id - bone.x, ty = (y * pp.a - x * pp.c) * id - bone.y; - float rotationIK = atan2(ty, tx) * radDeg - bone.shearX; + float rotationIK = atan2(ty, tx) * radDeg - bone.shearX - bone.rotation; if (bone.scaleX < 0) rotationIK += 180; if (rotationIK > 180) rotationIK -= 360; else if (rotationIK < -180) rotationIK += 360; - bone.updateWorldTransform(bone.x, bone.y, bone.rotation + (rotationIK - bone.rotation) * alpha, bone.scaleX, bone.scaleY, - bone.shearX, bone.shearY); + bone.updateWorldTransform(bone.x, bone.y, bone.rotation + rotationIK * alpha, bone.scaleX, bone.scaleY, bone.shearX, + bone.shearY); } /** Adjusts the parent and child bone rotations so the tip of the child is as close to the target position as possible. The diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java index 1e614a608..063c4efce 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Skeleton.java @@ -531,11 +531,10 @@ public class Skeleton { Slot slot = drawOrder.get(i); float[] vertices = null; Attachment attachment = slot.attachment; - if (attachment instanceof RegionAttachment) { + if (attachment instanceof RegionAttachment) vertices = ((RegionAttachment)attachment).updateWorldVertices(slot, false); - } else if (attachment instanceof MeshAttachment) { + else if (attachment instanceof MeshAttachment) // vertices = ((MeshAttachment)attachment).updateWorldVertices(slot, true); - } if (vertices != null) { for (int ii = 0, nn = vertices.length; ii < nn; ii += 5) { float x = vertices[ii], y = vertices[ii + 1]; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java index 5a49e17c3..3c113dcb4 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java @@ -241,8 +241,12 @@ public class SkeletonJson { int slotIndex = skeletonData.findSlotIndex(slotEntry.name); if (slotIndex == -1) throw new SerializationException("Slot not found: " + slotEntry.name); for (JsonValue entry = slotEntry.child; entry != null; entry = entry.next) { - Attachment attachment = readAttachment(entry, skin, slotIndex, entry.name); - if (attachment != null) skin.addAttachment(slotIndex, entry.name, attachment); + try { + Attachment attachment = readAttachment(entry, skin, slotIndex, entry.name); + if (attachment != null) skin.addAttachment(slotIndex, entry.name, attachment); + } catch (Exception ex) { + throw new SerializationException("Error reading attachment: " + entry.name + ", skin: " + skin, ex); + } } } skeletonData.skins.add(skin); @@ -271,8 +275,13 @@ public class SkeletonJson { } // Animations. - for (JsonValue animationMap = root.getChild("animations"); animationMap != null; animationMap = animationMap.next) - readAnimation(animationMap, animationMap.name, skeletonData); + for (JsonValue animationMap = root.getChild("animations"); animationMap != null; animationMap = animationMap.next) { + try { + readAnimation(animationMap, animationMap.name, skeletonData); + } catch (Exception ex) { + throw new SerializationException("Error reading animation: " + animationMap.name, ex); + } + } skeletonData.bones.shrink(); skeletonData.slots.shrink(); @@ -289,11 +298,6 @@ public class SkeletonJson { String type = map.getString("type", AttachmentType.region.name()); - // BOZO - Warning: These types are deprecated and will be removed in the near future. - if (type.equals("skinnedmesh")) type = "weightedmesh"; - if (type.equals("weightedmesh")) type = "mesh"; - if (type.equals("weightedlinkedmesh")) type = "linkedmesh"; - switch (AttachmentType.valueOf(type)) { case region: { String path = map.getString("path", name); @@ -497,7 +501,7 @@ public class SkeletonJson { int frameIndex = 0; for (JsonValue valueMap = constraintMap.child; valueMap != null; valueMap = valueMap.next) { timeline.setFrame(frameIndex, valueMap.getFloat("time"), valueMap.getFloat("mix", 1), - valueMap.getBoolean("bendPositive", false) ? 1 : -1); + valueMap.getBoolean("bendPositive", true) ? 1 : -1); readCurve(valueMap, timeline, frameIndex); frameIndex++; } diff --git a/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/JsonRollback.java b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/JsonRollback.java new file mode 100644 index 000000000..ead3b11f0 --- /dev/null +++ b/spine-libgdx/spine-skeletonviewer/src/com/esotericsoftware/spine/JsonRollback.java @@ -0,0 +1,114 @@ + +package com.esotericsoftware.spine; + +import com.badlogic.gdx.files.FileHandle; +import com.badlogic.gdx.utils.Array; +import com.badlogic.gdx.utils.Json; +import com.badlogic.gdx.utils.JsonValue; +import com.badlogic.gdx.utils.JsonWriter.OutputType; + +/** Takes Spine JSON data and transforms it to work with an older version of Spine. It supports going from version 3.3.xx to + * 2.1.27. + *

+ * Data can be exported from a Spine project, processed with JsonRollback, then imported into an older version of Spine. However, + * JsonRollback may remove data for features not supported by the older Spine version. Because of this, JsonRollback is only + * intended for situations were work was accidentally done with a newer Spine version and now needs to be imported into an older + * Spine version (eg, if runtime support for the new version is not yet available). + *

+ * Animators should freeze their Spine editor version to match the Spine version supported by the runtime being used. Only when + * the runtime is updated to support a newer Spine version should animators update their Spine editor version to match. */ +public class JsonRollback { + static public void main (String[] args) throws Exception { + if (args.length == 0) { + System.out.println("Usage: [outputFile]"); + System.exit(0); + } + + JsonValue root = new Json().fromJson(null, new FileHandle(args[0])); + + // In 3.2 skinnedmesh was renamed to weightedmesh. + setValue(root, "skinnedmesh", "skins", "*", "*", "*", "type", "weightedmesh"); + + // In 3.2 shear was added. + delete(root, "animations", "*", "bones", "*", "shear"); + + // In 3.3 ffd was renamed to deform. + rename(root, "ffd", "animations", "*", "deform"); + + // In 3.3 mesh is now a single type, previously they were skinnedmesh if they had weights. + for (JsonValue value : find(root, new Array(), 0, "skins", "*", "*", "*", "type", "mesh")) + if (value.parent.get("uvs").size != value.parent.get("vertices").size) value.set("skinnedmesh"); + + // In 3.3 linkedmesh is now a single type, previously they were linkedweightedmesh if they had weights. + for (JsonValue value : find(root, new Array(), 0, "skins", "*", "*", "*", "type", "linkedmesh")) { + String slot = value.parent.parent.name.replaceAll("", ""); + String skinName = value.parent.getString("skin", "default"); + String parentName = value.parent.getString("parent"); + if (find(root, new Array(), 0, + ("skins~~" + skinName + "~~" + slot + "~~" + parentName + "~~type~~skinnedmesh").split("~~")).size > 0) + value.set("weightedlinkedmesh"); + } + + // In 3.3 bounding boxes can be weighted. + for (JsonValue value : find(root, new Array(), 0, "skins", "*", "*", "*", "type", "boundingbox")) + if (value.parent.getInt("vertexCount") * 2 != value.parent.get("vertices").size) + value.parent.parent.remove(value.parent.name); + + // In 3.3 paths were added. + for (JsonValue value : find(root, new Array(), 0, "skins", "*", "*", "*", "type", "path")) { + String attachment = value.parent.name; + value.parent.parent.remove(attachment); + String slot = value.parent.parent.name; + // Also remove path deform timelines. + delete(root, "animations", "*", "ffd", "*", slot, attachment); + } + + // In 3.3 IK constraint timelines no longer require bendPositive. + for (JsonValue value : find(root, new Array(), 0, "animations", "*", "ik", "*")) + for (JsonValue child = value.child; child != null; child = child.next) + if (!child.has("bendPositive")) child.addChild("bendPositive", new JsonValue(true)); + + // In 3.3 transform constraints can have more than 1 bone. + for (JsonValue child = root.getChild("transform"); child != null; child = child.next) { + JsonValue bones = child.remove("bones"); + if (bones != null) child.addChild("bone", new JsonValue(bones.child.asString())); + } + + if (args.length > 1) + new FileHandle(args[1]).writeString(root.prettyPrint(OutputType.json, 130), false, "UTF-8"); + else + System.out.println(root.prettyPrint(OutputType.json, 130)); + } + + static void setValue (JsonValue root, String newValue, String... path) { + for (JsonValue value : find(root, new Array(), 0, path)) + value.set(newValue); + } + + static void rename (JsonValue root, String newName, String... path) { + for (JsonValue value : find(root, new Array(), 0, path)) + value.name = newName; + } + + static void delete (JsonValue root, String... path) { + for (JsonValue value : find(root, new Array(), 0, path)) + value.parent.remove(value.name); + } + + static Array find (JsonValue current, Array values, int index, String... path) { + String name = path[index]; + if (current.name == null) { + if (name.equals("*") && index == path.length - 1) + values.add(current); + else if (current.has(name)) return find(current.get(name), values, index, path); + } else if (name.equals("*") || current.name.equals(name)) { + if (++index == path.length || (index == path.length - 1 && current.isString() && current.asString().equals(path[index]))) + values.add(current); + else { + for (JsonValue child = current.child; child != null; child = child.next) + find(child, values, index, path); + } + } + return values; + } +} diff --git a/spine-love/README.md b/spine-love/README.md index 052613780..16b6a2984 100644 --- a/spine-love/README.md +++ b/spine-love/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-love works with data exported from Spine 2.1.27. Updating spine-love to [v3.0](https://trello.com/c/tF8UykBM/72-update-runtimes-to-support-v3-0-skewing-scale), [v3.1](https://trello.com/c/bERJAFEq/73-update-runtimes-to-support-v3-1-linked-meshes), and [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-love works with data exported from Spine 2.1.27. Updating spine-love to [v3.0](https://trello.com/c/tF8UykBM/72-update-runtimes-to-support-v3-0-skewing-scale), [v3.1](https://trello.com/c/bERJAFEq/73-update-runtimes-to-support-v3-1-linked-meshes), [v3.2](https://github.com/EsotericSoftware/spine-runtimes/issues/586), and [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-love supports all Spine features except for rendering meshes. diff --git a/spine-lua/Animation.lua b/spine-lua/Animation.lua index 79af8c295..8b4cc423b 100644 --- a/spine-lua/Animation.lua +++ b/spine-lua/Animation.lua @@ -612,16 +612,16 @@ function Animation.FfdTimeline.new () local frameVertices = self.frameVertices local vertexCount = #frameVertices[0] local vertices = slot.attachmentVertices - if not vertices or #vertices ~= vertexCount then - if #vertices < vertexCount then - vertices = {} - slot.attachmentVertices = vertices - end + if not vertices or #vertices < vertexCount then + vertices = {} + slot.attachmentVertices = vertices + end + if #vertices ~= vertexCount then alpha = 1 -- Don't mix from uninitialized slot vertices. end slot.attachmentVerticesCount = vertexCount - if time >= frames[#frames - 1] then -- Time is after last frame. - local lastVertices = frameVertices[#frames - 1] + if time >= frames[#frames] then -- Time is after last frame. + local lastVertices = frameVertices[#frames] if alpha < 1 then for i = 1, vertexCount do local vertex = vertices[i] diff --git a/spine-lua/AnimationState.lua b/spine-lua/AnimationState.lua index aeb429aff..06258ba03 100644 --- a/spine-lua/AnimationState.lua +++ b/spine-lua/AnimationState.lua @@ -65,7 +65,7 @@ function AnimationState.new (data) end self.tracks[index] = entry - self.trackCount = math.max(self.trackCount, index) + self.trackCount = math.max(self.trackCount, index + 1) if entry.onStart then entry.onStart(index) end if self.onStart then self.onStart(index) end @@ -73,7 +73,7 @@ function AnimationState.new (data) function self:update (delta) delta = delta * self.timeScale - for i = 0, self.trackCount do + for i = 0, self.trackCount - 1 do local current = self.tracks[i] if current then current.time = current.time + delta * current.timeScale @@ -96,7 +96,7 @@ function AnimationState.new (data) end function self:apply(skeleton) - for i = 0, self.trackCount do + for i = 0, self.trackCount - 1 do local current = self.tracks[i] if current then local time = current.time @@ -211,7 +211,7 @@ function AnimationState.new (data) end last.next = entry else - self.tracks[trackIndex] = entry + setCurrent(trackIndex, entry) end delay = delay or 0 diff --git a/spine-lua/README.md b/spine-lua/README.md index 2cd62c597..c3d06f59d 100644 --- a/spine-lua/README.md +++ b/spine-lua/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-lua works with data exported from Spine 2.1.27. Updating spine-lua to [v3.0](https://trello.com/c/tF8UykBM/72-update-runtimes-to-support-v3-0-skewing-scale), [v3.1](https://trello.com/c/bERJAFEq/73-update-runtimes-to-support-v3-1-linked-meshes), and [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-lua works with data exported from Spine 2.1.27. Updating spine-lua to [v3.0](https://trello.com/c/tF8UykBM/72-update-runtimes-to-support-v3-0-skewing-scale), [v3.1](https://trello.com/c/bERJAFEq/73-update-runtimes-to-support-v3-1-linked-meshes), [v3.2](https://github.com/EsotericSoftware/spine-runtimes/issues/586), and [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-lua supports all Spine features. diff --git a/spine-monogame/README.md b/spine-monogame/README.md index 5d05837c9..ae93d235f 100644 --- a/spine-monogame/README.md +++ b/spine-monogame/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-monogame works with data exported from Spine 3.1.08. Updating spine-monogame to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-monogame works with data exported from Spine 3.2.01. Updating spine-monogame to [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-monogame supports all Spine features. diff --git a/spine-sfml/CMakeLists.txt b/spine-sfml/CMakeLists.txt new file mode 100644 index 000000000..c37eccda2 --- /dev/null +++ b/spine-sfml/CMakeLists.txt @@ -0,0 +1,86 @@ +# +# First download and extract SFML 2.3.2 for the respective OS we are on +# +set(DEPS_DIR "${CMAKE_CURRENT_LIST_DIR}/dependencies/") +if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(SFML_URL "http://www.sfml-dev.org/files/SFML-2.3.2-osx-clang-universal.tar.gz") + set(SFML_DIR ${DEPS_DIR}/SFML-2.3.2-osx-clang-universal) + if (NOT EXISTS "${SFML_DIR}") + message("Downloading SFML for Mac OS X") + file(DOWNLOAD "${SFML_URL}" "${DEPS_DIR}/sfml.tar.gz") + execute_process( + COMMAND ${CMAKE_COMMAND} -E tar xzf ${DEPS_DIR}/sfml.tar.gz + WORKING_DIRECTORY ${DEPS_DIR} + ) + # copy freetype over to Frameworks/ so rpath resoultion works + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_directory ${SFML_DIR}/extlibs/freetype.framework ${SFML_DIR}/Frameworks/freetype.framework + WORKING_DIRECTORY ${SFML_DIR} + ) + endif() +elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") + set(SFML_URL "http://www.sfml-dev.org/files/SFML-2.3.2-linux-gcc-64-bit.tar.gz") + set(SFML_DIR ${DEPS_DIR}/SFML-2.3.2) + if (NOT EXISTS ${SFML_DIR}) + message("Downloading SFML for Linux 64-bit") + file(DOWNLOAD "${SFML_URL}" "${DEPS_DIR}/sfml.tar.gz") + execute_process( + COMMAND ${CMAKE_COMMAND} -E tar xzf ${DEPS_DIR}/sfml.tar.gz + WORKING_DIRECTORY ${DEPS_DIR} + ) + endif() +else() + set(SFML_URL "http://www.sfml-dev.org/files/SFML-2.3.2-windows-vc14-32-bit.zip") + set(SFML_DIR ${DEPS_DIR}/SFML-2.3.2) + if (NOT EXISTS ${SFML_DIR}) + message("Downloading SFML for Windows 32-bit") + file(DOWNLOAD "${SFML_URL}" "${DEPS_DIR}/sfml.zip") + execute_process( + COMMAND ${CMAKE_COMMAND} -E tar x ${DEPS_DIR}/sfml.zip + WORKING_DIRECTORY ${DEPS_DIR} + ) + endif() +endif() + +# Define spine-sfml library +include_directories(src ${SFML_DIR}/include) +file(GLOB INCLUDES "src/**/*.h") +file(GLOB SOURCES "src/**/*.cpp") +add_library(spine-sfml STATIC ${SOURCES} ${INCLUDES}) +target_link_libraries(spine-sfml LINK_PUBLIC spine-c) +install(TARGETS spine-sfml DESTINATION dist/lib) +install(FILES ${INCLUDES} DESTINATION dist/include) + +# Define spine-sfml example executable +add_executable(spine-sfml-example example/main.cpp) + +# Link in SFML libraries and OS dependencies like OpenGL +if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + find_library(SFML SFML PATHS ${SFML_DIR}/Frameworks) + find_library(SFML_SYSTEM "sfml-system" PATHS ${SFML_DIR}/Frameworks) + find_library(SFML_WINDOW sfml-window PATHS ${SFML_DIR}/Frameworks) + find_library(SFML_GRAPHICS sfml-graphics PATHS ${SFML_DIR}/Frameworks) + target_link_libraries(spine-sfml-example ${SFML} ${SFML_SYSTEM} ${SFML_WINDOW} ${SFML_GRAPHICS}) +elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") + target_link_libraries(spine-sfml-example sfml-graphics sfml-window sfml-system) +else() + set(SFML_LIBS ${SFML_DIR}/lib) + target_link_libraries(spine-sfml-example ${SFML_LIBS}/sfml-main-d.lib) + target_link_libraries(spine-sfml-example ${SFML_LIBS}/sfml-graphics-s-d.lib) + target_link_libraries(spine-sfml-example ${SFML_LIBS}/sfml-window-s-d.lib) + target_link_libraries(spine-sfml-example ${SFML_LIBS}/sfml-system-s-d.lib) + target_link_libraries(spine-sfml-example ${SFML_LIBS}/freetype.lib) + target_link_libraries(spine-sfml-example ${SFML_LIBS}/jpeg.lib) + target_link_libraries(spine-sfml-example opengl32) + target_link_libraries(spine-sfml-example gdi32) + target_link_libraries(spine-sfml-example winmm) + add_definitions(-DSFML_STATIC) +endif() + +# copy data to build directory +add_custom_command(TARGET spine-sfml-example PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_CURRENT_LIST_DIR}/data $/data) + +target_link_libraries(spine-sfml-example spine-c) +target_link_libraries(spine-sfml-example spine-sfml) diff --git a/spine-sfml/README.md b/spine-sfml/README.md index 9c73517f7..856804404 100644 --- a/spine-sfml/README.md +++ b/spine-sfml/README.md @@ -10,23 +10,58 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-sfml works with data exported from Spine 3.1.08. Updating spine-sfml to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-sfml works with data exported from Spine version 3.2.01. spine-sfml supports all Spine features. spine-sfml does not yet support loading the binary format. -## Setup +## Usage +1. Create a new SFML project. See the [SFML documentation](http://www.sfml-dev.org/tutorials/2.1/) or have a look at the example in this repository. +2. Download the Spine Runtimes source using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip) +3. Add the sources from `spine-c/src/spine` and `spine-sfml/src/spine` to your project +4. Add the folder `spine-c/include` to your header search path. Note that includes are specified as `#inclue `, so the `spine` directory cannot be omitted when copying the source files. -1. Download the Spine Runtimes source using [git](https://help.github.com/articles/set-up-git) or by downloading it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip). -1. Using Eclipse CDT, import the project by choosing File -> Import -> Existing projects. For other IDEs you will need to create a new project and import the source. -1. Copy the SFML binaries into the `spine-sfml/Debug` directory so they can be found when the example is run. +See the [Spine Runtimes documentation](http://esotericsoftware.com/spine-documentation#runtimesTitle) on how to use the APIs or check out the Spine SFML example. -Alternatively, the contents of the `spine-c/src`, `spine-c/include` and `spine-sfml/src` directories can be copied into your project. Be sure your header search path will find the contents of the `spine-c/include` and `spine-sfml/src` directories. Note that the includes use `spine/Xxx.h`, so the `spine` directory cannot be omitted when copying the files. +## Example +The Spine SFML example works on Windows, Linux and Mac OS X. -## Examples +### Windows +1. Install [Visual Studio 2015 Community](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx). Make sure you install support for C++ as well as th Windows SDK for XP/7/8. +2. Install CMake via the [Windows installer package](https://cmake.org/download/). +3. Download the Spine Runtimes repository using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip) +4. Run CMake GUI from the start menu +5. Click `Browse Source` and select the directory `spine-runtimes` +6. Click `Browse Build` and select the `spine-runtimes/spine-sfml/build` directory. You can create the `build` folder directly in the file dialog via `New Folder`. +7. Click `Configure`. Then click `Generate`. This will create a Visual Studio 2015 solution file called `spine.sln` in `spine-runtimes/spine-sfml/build` and also download the SFML dependencies. +8. Open the `spine.sln` file in Visual Studio 2015 +9. Right click the `spine-sfml-example` project in the solution explorer and select `Set as Startup Project` from the context menu +10. Right click the `spine-sfml-example` project in the solution explorer and select `Properties` from the context menu +11. Select `Debugging` in the left-hand list, then set `Working Directory` to `$(OutputPath)` +12. Click `Local Windows Debugger` to run the example -- [Simple example](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-sfml/example/main.cpp#L61) +The entire example code is contained in [main.cpp](https://github.com/EsotericSoftware/spine-runtimes/blob/master/spine-sfml/example/main.cpp#L61) + +### Linux +1. Install the SFML dependencies, e.g. on Ubuntu/Debian via `sudo apt-get install -y libpthread-stubs0-dev libgl1-mesa-dev libx11-dev libxrandr-dev libfreetype6-dev libglew1.5-dev libjpeg8-dev libsndfile1-dev libopenal-dev libudev-dev libxcb-image0-dev libjpeg-dev libflac-dev` +2. Install CMake, e.g. on Ubuntu/Debian via `sudo apt-get install -y cmake` +3. Download the Spine Runtimes repository using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip) +4. Open a terminal, and `cd` into the `spine-runtimes/spine-sfml` folder +5. Type `mkdir build && cd build && cmake ../..` to generate Make files +6. Type `make` to compile the example +7. Run the example by `cd spine-sfml-example && ./spine-sfml-example` + +### Mac OS X +1. Install [Xcode](https://developer.apple.com/xcode/) +2. Install [Homebrew](http://brew.sh/) +3. Open a terminal and install CMake via `brew install cmake` +3. Download the Spine Runtimes repository using git (`git clone https://github.com/esotericsoftware/spine-runtimes`) or download it [as a zip](https://github.com/EsotericSoftware/spine-runtimes/archive/master.zip) +4. Open a terminal, and `cd` into the `spine-runtimes/spine-sfml` folder +5. Type `mkdir build && cd build && cmake -G Xcode ../..` to generate an Xcode project called `spine.xcodeproj` +6. Open the Xcode project in `spine-runtimes/spine-sfml/build/` +7. In Xcode, set the active scheme from `ALL_BUILD` to `spine-sfml-example` +8. Click the `Run` button or type `CMD+R` to run the example ## Notes diff --git a/spine-sfml/data/spineboy-shear.json b/spine-sfml/data/spineboy-shear.json new file mode 100644 index 000000000..dd2607b4f --- /dev/null +++ b/spine-sfml/data/spineboy-shear.json @@ -0,0 +1,183 @@ +{ +"skeleton": { "hash": "8JOt0KF63FuqjG/j+ncweKjt3Vc", "spine": "9.0.01", "width": 505.42, "height": 723.02, "images": "./images/" }, +"bones": [ + { "name": "root" }, + { "name": "hip", "parent": "root", "length": 338.72, "y": 247.47 }, + { "name": "shoot target", "parent": "root", "rotation": 1.22, "x": 578.73, "y": 350.08, "color": "ff3f00ff" }, + { "name": "aimer", "parent": "hip", "length": 350.93, "rotation": 1.57, "x": -5.73, "y": 98.76 }, + { "name": "aiming gun target", "parent": "aimer", "rotation": 0.33, "x": 317.91, "y": -78.74, "color": "ff3f00ff" }, + { "name": "free gun bone", "parent": "root", "rotation": -37.23, "x": 41.13, "y": 276.2 }, + { "name": "torso", "parent": "hip", "length": 127.55, "rotation": 103.82, "x": -1.61, "y": 4.9, "color": "e0da19ff" }, + { "name": "front_upper_arm", "parent": "torso", "length": 69.45, "rotation": 168.37, "x": 103.75, "y": 19.32, "color": "00ff04ff" }, + { + "name": "front_bracer", + "parent": "front_upper_arm", + "length": 40.57, + "rotation": 18.29, + "x": 68.8, + "y": -0.68, + "color": "00ff04ff" + }, + { "name": "front_fist", "parent": "front_bracer", "length": 65.38, "rotation": 29.28, "x": 40.56, "y": 0.19, "color": "00ff04ff" }, + { "name": "front_thigh", "parent": "hip", "length": 74.8, "rotation": -95.51, "x": -17.45, "y": -11.64, "color": "00ff04ff" }, + { + "name": "front_shin", + "parent": "front_thigh", + "length": 128.76, + "rotation": -2.21, + "x": 78.69, + "y": 1.6, + "inheritScale": false, + "color": "00ff04ff" + }, + { "name": "front_foot", "parent": "front_shin", "length": 91.34, "rotation": 77.9, "x": 128.75, "y": -0.33, "color": "00ff04ff" }, + { "name": "rear_upper_arm", "parent": "torso", "length": 51.93, "rotation": -169.55, "x": 92.35, "y": -19.22, "color": "ff000dff" }, + { "name": "rear_bracer", "parent": "rear_upper_arm", "length": 34.55, "rotation": 23.15, "x": 51.35, "color": "ff000dff" }, + { "name": "gun", "parent": "rear_bracer", "length": 43.1, "rotation": 5.34, "x": 34.42, "y": -0.45, "color": "ff000dff" }, + { "name": "gunTip", "parent": "gun", "rotation": 6.83, "x": 201.03, "y": 52.12, "color": "ff000dff" }, + { "name": "neck", "parent": "torso", "length": 25.45, "rotation": -31.53, "x": 127.49, "y": -0.3, "color": "e0da19ff" }, + { "name": "head", "parent": "neck", "length": 263.57, "rotation": 23.18, "x": 27.66, "y": -0.25, "color": "e0da19ff" }, + { "name": "rear_thigh", "parent": "hip", "length": 85.71, "rotation": -72.54, "x": 8.91, "y": -5.62, "color": "ff000dff" }, + { "name": "rear_shin", "parent": "rear_thigh", "length": 121.87, "rotation": -19.83, "x": 86.1, "y": -1.32, "color": "ff000dff" }, + { "name": "rear_foot", "parent": "rear_shin", "length": 82.57, "rotation": 69.3, "x": 121.45, "y": -0.75, "color": "ff000dff" } +], +"ik": [ + { + "name": "aiming constraint", + "bones": [ "aimer" ], + "target": "shoot target", + "mix": 0 + }, + { + "name": "aiming gun constraint", + "bones": [ "rear_upper_arm", "rear_bracer" ], + "target": "aiming gun target", + "mix": 0 + } +], +"transform": [ + { "name": "gun flying", "bone": "gun", "target": "free gun bone", "rotateMix": 0, "translateMix": 0, "scaleMix": 0, "shearMix": 0 } +], +"slots": [ + { "name": "rear_upper_arm", "bone": "rear_upper_arm", "attachment": "rear_upper_arm" }, + { "name": "rear_bracer", "bone": "rear_bracer", "attachment": "rear_bracer" }, + { "name": "gun", "bone": "gun", "attachment": "gun" }, + { "name": "rear_foot", "bone": "rear_foot", "attachment": "rear_foot" }, + { "name": "rear_thigh", "bone": "rear_thigh", "attachment": "rear_thigh" }, + { "name": "rear_shin", "bone": "rear_shin", "attachment": "rear_shin" }, + { "name": "neck", "bone": "neck", "attachment": "neck" }, + { "name": "torso", "bone": "torso", "attachment": "torso" }, + { "name": "front_upper_arm", "bone": "front_upper_arm", "attachment": "front_upper_arm" }, + { "name": "head", "bone": "head", "attachment": "head" }, + { "name": "eye", "bone": "head", "attachment": "eye_indifferent" }, + { "name": "front_thigh", "bone": "front_thigh", "attachment": "front_thigh" }, + { "name": "front_foot", "bone": "front_foot", "attachment": "front_foot" }, + { "name": "front_shin", "bone": "front_shin", "attachment": "front_shin" }, + { "name": "mouth", "bone": "head", "attachment": "mouth_smile" }, + { "name": "goggles", "bone": "head", "attachment": "goggles" }, + { "name": "front_bracer", "bone": "front_bracer", "attachment": "front_bracer" }, + { "name": "front_fist", "bone": "front_fist", "attachment": "front_fist_closed" }, + { "name": "muzzle", "bone": "gunTip", "blend": "additive" }, + { "name": "head-bb", "bone": "head" } +], +"skins": { + "default": { + "eye": { + "eye_indifferent": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 }, + "eye_surprised": { "x": 85.72, "y": -28.18, "rotation": -70.63, "width": 93, "height": 89 } + }, + "front_bracer": { + "front_bracer": { "x": 12.03, "y": -1.67, "rotation": 79.59, "width": 58, "height": 80 } + }, + "front_fist": { + "front_fist_closed": { "x": 35.71, "y": -4.54, "rotation": 50.3, "width": 75, "height": 82 }, + "front_fist_open": { "x": 40.11, "y": -4.04, "rotation": 50.3, "width": 86, "height": 87 } + }, + "front_foot": { + "front_foot": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 126, "height": 69 }, + "front_foot_bend1": { "x": 29.51, "y": 7.83, "rotation": 18.68, "width": 128, "height": 70 }, + "front_foot_bend2": { "x": 16.07, "y": 13.83, "rotation": 18.68, "width": 108, "height": 93 } + }, + "front_shin": { + "front_shin": { "x": 55.11, "y": -3.54, "rotation": 96.59, "width": 82, "height": 184 } + }, + "front_thigh": { + "front_thigh": { "x": 42.47, "y": 4.44, "rotation": 84.86, "width": 48, "height": 112 } + }, + "front_upper_arm": { + "front_upper_arm": { "x": 28.3, "y": 7.37, "rotation": 97.89, "width": 54, "height": 97 } + }, + "goggles": { + "goggles": { "x": 97.07, "y": 6.54, "rotation": -70.63, "width": 261, "height": 166 } + }, + "gun": { + "gun": { "x": 77.29, "y": 16.39, "rotation": 60.82, "width": 210, "height": 203 } + }, + "head": { + "head": { "x": 128.95, "y": 0.29, "rotation": -70.63, "width": 271, "height": 298 } + }, + "head-bb": { + "head": { + "type": "boundingbox", + "vertexCount": 6, + "vertices": [ -19.14, -70.3, 40.8, -118.07, 257.77, -115.61, 285.16, 57.18, 120.77, 164.95, -5.06, 76.94 ] + } + }, + "mouth": { + "mouth_grind": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_oooo": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 }, + "mouth_smile": { "x": 23.68, "y": -32.23, "rotation": -70.63, "width": 93, "height": 59 } + }, + "muzzle": { + "muzzle": { "x": 18.25, "y": 5.44, "rotation": 0.15, "width": 462, "height": 400 } + }, + "neck": { + "neck": { "x": 9.76, "y": -3.01, "rotation": -55.22, "width": 36, "height": 41 } + }, + "rear_bracer": { + "rear_bracer": { "x": 11.15, "y": -2.2, "rotation": 66.17, "width": 56, "height": 72 } + }, + "rear_foot": { + "rear_foot": { "x": 31.51, "y": 3.57, "rotation": 23.07, "width": 113, "height": 60 }, + "rear_foot_bend1": { "x": 34.39, "y": 4.8, "rotation": 23.07, "width": 117, "height": 66 }, + "rear_foot_bend2": { "x": 30.38, "y": 12.62, "rotation": 23.07, "width": 103, "height": 83 } + }, + "rear_shin": { + "rear_shin": { "x": 58.29, "y": -2.75, "rotation": 92.37, "width": 75, "height": 178 } + }, + "rear_thigh": { + "rear_thigh": { "x": 33.1, "y": -4.11, "rotation": 72.54, "width": 65, "height": 104 } + }, + "rear_upper_arm": { + "rear_upper_arm": { "x": 21.12, "y": 4.08, "rotation": 89.32, "width": 47, "height": 87 } + }, + "torso": { + "torso": { "x": 63.61, "y": 7.12, "rotation": -94.53, "width": 98, "height": 180 } + } + } +}, +"events": { + "footstep": {}, + "headAttach": { "int": 3, "float": 4 }, + "headBehind": { "int": 5, "float": 6, "string": "setup" }, + "headPop": { "int": 1, "float": 2 } +}, +"animations": { + "shear": { + "bones": { + "head": { + "shear": [ + { "time": 0, "x": 0, "y": 0 }, + { "time": 0.5, "x": 45, "y": 0 }, + { "time": 1, "x": 0.59, "y": 0 } + ] + } + }, + "transform": { + "gun flying": [ + { "time": 0 } + ] + } + } +} +} \ No newline at end of file diff --git a/spine-starling/README.md b/spine-starling/README.md index d48df26f8..9b7500bc5 100644 --- a/spine-starling/README.md +++ b/spine-starling/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-starling works with data exported from Spine 3.1.08. Updating spine-starling to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-starling works with data exported from Spine 3.1.08. Updating spine-starling to [v3.2](https://github.com/EsotericSoftware/spine-runtimes/issues/586) and [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-starling supports all Spine features. diff --git a/spine-threejs/README.md b/spine-threejs/README.md index 381c88a1d..9844b3160 100644 --- a/spine-threejs/README.md +++ b/spine-threejs/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-threejs works with data exported from Spine 3.1.08. Updating spine-threejs to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-threejs works with data exported from Spine 3.1.08. Updating spine-threejs to [v3.2](https://github.com/EsotericSoftware/spine-runtimes/issues/586) and [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-threejs supports all Spine features except for rendering meshes. diff --git a/spine-turbulenz/README.md b/spine-turbulenz/README.md index 5fc79577f..789b945cd 100644 --- a/spine-turbulenz/README.md +++ b/spine-turbulenz/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-turbulenz works with data exported from Spine 3.1.08. Updating spine-turbulenz to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-turbulenz works with data exported from Spine 3.1.08. Updating spine-turbulenz to [v3.2](https://github.com/EsotericSoftware/spine-runtimes/issues/586) and [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-turbulenz supports all Spine features except for rendering meshes. diff --git a/spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs b/spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs index af9fd5e26..b991889d6 100644 --- a/spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs +++ b/spine-unity/Assets/spine-unity/Asset Types/Editor/SkeletonDataAssetInspector.cs @@ -3,6 +3,7 @@ * Full irrevocable rights and permissions granted to Esoteric Software *****************************************************************************/ #define SPINE_SKELETON_ANIMATOR +#define SPINE_BAKING using System; using System.Collections.Generic; @@ -21,63 +22,75 @@ namespace Spine.Unity.Editor { static bool showAnimationList = true; static bool showSlotList = false; static bool showAttachments = false; - static bool showBaking = false; + + #if SPINE_BAKING + static bool isBakingExpanded = false; static bool bakeAnimations = true; static bool bakeIK = true; static SendMessageOptions bakeEventOptions = SendMessageOptions.DontRequireReceiver; - - private SerializedProperty atlasAssets, skeletonJSON, scale, fromAnimation, toAnimation, duration, defaultMix; - #if SPINE_SKELETON_ANIMATOR - static bool showMecanim = false; - private SerializedProperty controller; + const string ShowBakingPrefsKey = "SkeletonDataAssetInspector_showUnity"; #endif + SerializedProperty atlasAssets, skeletonJSON, scale, fromAnimation, toAnimation, duration, defaultMix; #if SPINE_TK2D - private SerializedProperty spriteCollection; + SerializedProperty spriteCollection; #endif - private bool m_initialized = false; - private SkeletonDataAsset m_skeletonDataAsset; - private SkeletonData m_skeletonData; - private string m_skeletonDataAssetGUID; - private bool needToSerialize; + #if SPINE_SKELETON_ANIMATOR + static bool isMecanimExpanded = false; + SerializedProperty controller; + #endif + + bool m_initialized = false; + SkeletonDataAsset m_skeletonDataAsset; + SkeletonData m_skeletonData; + string m_skeletonDataAssetGUID; + bool needToSerialize; List warnings = new List(); - void OnEnable () { + GUIStyle activePlayButtonStyle, idlePlayButtonStyle; + void OnEnable () { SpineEditorUtilities.ConfirmInitialization(); atlasAssets = serializedObject.FindProperty("atlasAssets"); - atlasAssets.isExpanded = true; skeletonJSON = serializedObject.FindProperty("skeletonJSON"); scale = serializedObject.FindProperty("scale"); fromAnimation = serializedObject.FindProperty("fromAnimation"); toAnimation = serializedObject.FindProperty("toAnimation"); duration = serializedObject.FindProperty("duration"); defaultMix = serializedObject.FindProperty("defaultMix"); + + idlePlayButtonStyle = new GUIStyle(EditorStyles.toolbarButton); + activePlayButtonStyle = new GUIStyle(EditorStyles.toolbarButton); + activePlayButtonStyle.normal.textColor = Color.red; + #if SPINE_SKELETON_ANIMATOR controller = serializedObject.FindProperty("controller"); #endif + #if SPINE_TK2D + atlasAssets.isExpanded = false; spriteCollection = serializedObject.FindProperty("spriteCollection"); + #else + atlasAssets.isExpanded = true; + #endif + + #if SPINE_BAKING + isBakingExpanded = EditorPrefs.GetBool(ShowBakingPrefsKey, false); #endif m_skeletonDataAsset = (SkeletonDataAsset)target; m_skeletonDataAssetGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_skeletonDataAsset)); - - EditorApplication.update += Update; - + EditorApplication.update += EditorUpdate; m_skeletonData = m_skeletonDataAsset.GetSkeletonData(false); - - showBaking = EditorPrefs.GetBool("SkeletonDataAssetInspector_showUnity", false); - RepopulateWarnings(); } void OnDestroy () { m_initialized = false; - EditorApplication.update -= Update; + EditorApplication.update -= EditorUpdate; this.DestroyPreviewInstances(); if (this.m_previewUtility != null) { this.m_previewUtility.Cleanup(); @@ -92,29 +105,29 @@ namespace Spine.Unity.Editor { #if !SPINE_TK2D EditorGUILayout.PropertyField(atlasAssets, true); #else - EditorGUI.BeginDisabledGroup(spriteCollection.objectReferenceValue != null); - EditorGUILayout.PropertyField(atlasAssets, true); - EditorGUI.EndDisabledGroup(); + using (new EditorGUI.DisabledGroupScope(spriteCollection.objectReferenceValue != null)) { + EditorGUILayout.PropertyField(atlasAssets, true); + } + EditorGUILayout.LabelField("spine-tk2d", EditorStyles.boldLabel); EditorGUILayout.PropertyField(spriteCollection, true); #endif + EditorGUILayout.Space(); EditorGUILayout.PropertyField(skeletonJSON); EditorGUILayout.PropertyField(scale); + EditorGUILayout.Space(); + if (EditorGUI.EndChangeCheck()) { if (serializedObject.ApplyModifiedProperties()) { - if (m_previewUtility != null) { m_previewUtility.Cleanup(); m_previewUtility = null; } - RepopulateWarnings(); OnEnable(); return; } - } - - + if (m_skeletonData != null) { DrawAnimationStateInfo(); DrawAnimationList(); @@ -123,10 +136,22 @@ namespace Spine.Unity.Editor { } else { - DrawReimportButton(); - //Show Warnings - foreach (var str in warnings) - EditorGUILayout.LabelField(new GUIContent(str, SpineEditorUtilities.Icons.warning)); + #if !SPINE_TK2D + // Reimport Button + using (new EditorGUI.DisabledGroupScope(skeletonJSON.objectReferenceValue == null)) { + if (GUILayout.Button(new GUIContent("Attempt Reimport", SpineEditorUtilities.Icons.warning))) { + DoReimport(); + return; + } + } + #else + EditorGUILayout.HelpBox("Couldn't load SkeletonData.", MessageType.Error); + #endif + + // List warnings. + foreach (var line in warnings) + EditorGUILayout.LabelField(new GUIContent(line, SpineEditorUtilities.Icons.warning)); + } if(!Application.isPlaying) @@ -135,91 +160,104 @@ namespace Spine.Unity.Editor { void DrawUnityTools () { #if SPINE_SKELETON_ANIMATOR - showMecanim = EditorGUILayout.Foldout(showMecanim, new GUIContent("SkeletonAnimator", SpineEditorUtilities.Icons.unityIcon)); - if (showMecanim) { + isMecanimExpanded = EditorGUILayout.Foldout(isMecanimExpanded, new GUIContent("SkeletonAnimator", SpineEditorUtilities.Icons.unityIcon)); + if (isMecanimExpanded) { EditorGUI.indentLevel++; EditorGUILayout.PropertyField(controller, new GUIContent("Controller", SpineEditorUtilities.Icons.controllerIcon)); if (controller.objectReferenceValue == null) { + + // Generate Mecanim Controller Button using (new GUILayout.HorizontalScope()) { - GUILayout.Space(32); - if (GUILayout.Button(new GUIContent("Generate Mecanim Controller"), GUILayout.Width(195), GUILayout.Height(20))) + GUILayout.Space(EditorGUIUtility.labelWidth); + if (GUILayout.Button(new GUIContent("Generate Mecanim Controller"), GUILayout.Height(20))) SkeletonBaker.GenerateMecanimAnimationClips(m_skeletonDataAsset); } - EditorGUILayout.LabelField("SkeletonAnimator is the Mecanim alternative to SkeletonAnimation. It is not required.", EditorStyles.miniLabel); + EditorGUILayout.HelpBox("SkeletonAnimator is the Mecanim alternative to SkeletonAnimation.\nIt is not required.", MessageType.Info); + } else { + + // Update AnimationClips button. using (new GUILayout.HorizontalScope()) { - GUILayout.Space(32); - if (GUILayout.Button(new GUIContent("Update Controller Animations"), GUILayout.Width(195), GUILayout.Height(20))) + GUILayout.Space(EditorGUIUtility.labelWidth); + if (GUILayout.Button(new GUIContent("Force Update AnimationClips"), GUILayout.Height(20))) SkeletonBaker.GenerateMecanimAnimationClips(m_skeletonDataAsset); } + } EditorGUI.indentLevel--; } #endif - bool pre = showBaking; - showBaking = EditorGUILayout.Foldout(showBaking, new GUIContent("Baking", SpineEditorUtilities.Icons.unityIcon)); - if (pre != showBaking) - EditorPrefs.SetBool("SkeletonDataAssetInspector_showUnity", showBaking); - - if (showBaking) { + #if SPINE_BAKING + bool pre = isBakingExpanded; + isBakingExpanded = EditorGUILayout.Foldout(isBakingExpanded, new GUIContent("Baking", SpineEditorUtilities.Icons.unityIcon)); + if (pre != isBakingExpanded) + EditorPrefs.SetBool(ShowBakingPrefsKey, isBakingExpanded); + + if (isBakingExpanded) { EditorGUI.indentLevel++; - EditorGUILayout.HelpBox("WARNING!\n\nBaking is NOT the same as SkeletonAnimator!\nDoes not support the following:\n\tFlipX or Y\n\tInheritScale\n\tColor Keys\n\tDraw Order Keys\n\tIK and Curves are sampled at 60fps and are not realtime.\n\tPlease read SkeletonBaker.cs comments for full details.\n\nThe main use of Baking is to export Spine projects to be used without the Spine Runtime (ie: for sale on the Asset Store, or background objects that are animated only with a wind noise generator)", MessageType.Warning, true); + const string BakingWarningMessage = + "WARNING!" + + "\nBaking is NOT the same as SkeletonAnimator!" + + + "\n\nThe main use of Baking is to export Spine projects to be used without the Spine Runtime (ie: for sale on the Asset Store, or background objects that are animated only with a wind noise generator)" + + + "\n\nBaking also does not support the following:" + + "\n\tDisabled transform inheritance" + + "\n\tShear" + + "\n\tColor Keys" + + "\n\tDraw Order Keys" + + "\n\tAll Constraint types" + + + "\n\nCurves are sampled at 60fps and are not realtime." + + "\nPlease read SkeletonBaker.cs comments for full details."; + EditorGUILayout.HelpBox(BakingWarningMessage, MessageType.Warning, true); + EditorGUI.indentLevel++; bakeAnimations = EditorGUILayout.Toggle("Bake Animations", bakeAnimations); - EditorGUI.BeginDisabledGroup(!bakeAnimations); - { + using (new EditorGUI.DisabledGroupScope(!bakeAnimations)) { EditorGUI.indentLevel++; bakeIK = EditorGUILayout.Toggle("Bake IK", bakeIK); bakeEventOptions = (SendMessageOptions)EditorGUILayout.EnumPopup("Event Options", bakeEventOptions); EditorGUI.indentLevel--; } - EditorGUI.EndDisabledGroup(); - EditorGUI.indentLevel++; - using (new EditorGUILayout.HorizontalScope()) { + // Bake Skin buttons. + using (new GUILayout.HorizontalScope()) { if (GUILayout.Button(new GUIContent("Bake All Skins", SpineEditorUtilities.Icons.unityIcon), GUILayout.Height(32), GUILayout.Width(150))) SkeletonBaker.BakeToPrefab(m_skeletonDataAsset, m_skeletonData.Skins, "", bakeAnimations, bakeIK, bakeEventOptions); - string skinName = ""; - + // If m_skeletonAnimation is lazy-instantiated elsewhere, this can cause contents to change between Layout and Repaint events, causing scope errors. + if (m_skeletonData != null && m_skeletonAnimation == null) + InitPreview(); + if (m_skeletonAnimation != null && m_skeletonAnimation.skeleton != null) { - Skin bakeSkin = m_skeletonAnimation.skeleton.Skin; + + string skinName = ""; if (bakeSkin == null) { skinName = "Default"; bakeSkin = m_skeletonData.Skins.Items[0]; } else skinName = m_skeletonAnimation.skeleton.Skin.Name; - using (new EditorGUILayout.VerticalScope()) { - if (GUILayout.Button(new GUIContent("Bake " + skinName, SpineEditorUtilities.Icons.unityIcon), GUILayout.Height(32), GUILayout.Width(250))) + using (new GUILayout.VerticalScope()) { + if (GUILayout.Button(new GUIContent("Bake \"" + skinName + "\"", SpineEditorUtilities.Icons.unityIcon), GUILayout.Height(32), GUILayout.Width(250))) SkeletonBaker.BakeToPrefab(m_skeletonDataAsset, new ExposedList(new [] { bakeSkin }), "", bakeAnimations, bakeIK, bakeEventOptions); - using (new EditorGUILayout.HorizontalScope()) { + using (new GUILayout.HorizontalScope()) { GUILayout.Label(new GUIContent("Skins", SpineEditorUtilities.Icons.skinsRoot), GUILayout.Width(50)); if (GUILayout.Button(skinName, EditorStyles.popup, GUILayout.Width(196))) { - SelectSkinContext(); + DrawSkinDropdown(); } } - } } - } + EditorGUI.indentLevel--; EditorGUI.indentLevel--; } - - - } - - void DrawReimportButton () { - EditorGUI.BeginDisabledGroup(skeletonJSON.objectReferenceValue == null); - if (GUILayout.Button(new GUIContent("Attempt Reimport", SpineEditorUtilities.Icons.warning))) { - DoReimport(); - return; - } - EditorGUI.EndDisabledGroup(); + #endif } void DoReimport () { @@ -244,7 +282,6 @@ namespace Spine.Unity.Editor { EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(defaultMix); - // Animation names var animations = new string[m_skeletonData.Animations.Count]; for (int i = 0; i < animations.Length; i++) animations[i] = m_skeletonData.Animations.Items[i].Name; @@ -264,6 +301,7 @@ namespace Spine.Unity.Editor { } } } + using (new EditorGUILayout.HorizontalScope()) { EditorGUILayout.Space(); if (GUILayout.Button("Add Mix")) { @@ -280,8 +318,8 @@ namespace Spine.Unity.Editor { serializedObject.ApplyModifiedProperties(); needToSerialize = true; } - } + void DrawAnimationList () { showAnimationList = EditorGUILayout.Foldout(showAnimationList, new GUIContent("Animations", SpineEditorUtilities.Icons.animationRoot)); if (!showAnimationList) @@ -298,61 +336,52 @@ namespace Spine.Unity.Editor { } EditorGUILayout.LabelField("Name", "Duration"); - foreach (Spine.Animation a in m_skeletonData.Animations) { + foreach (Spine.Animation animation in m_skeletonData.Animations) { using (new GUILayout.HorizontalScope()) { if (m_skeletonAnimation != null && m_skeletonAnimation.state != null) { - if (m_skeletonAnimation.state.GetCurrent(0) != null && m_skeletonAnimation.state.GetCurrent(0).Animation == a) { - GUI.contentColor = Color.red; - if (GUILayout.Button("\u25BA", EditorStyles.toolbarButton, GUILayout.Width(24))) { + var activeTrack = m_skeletonAnimation.state.GetCurrent(0); + if (activeTrack != null && activeTrack.Animation == animation) { + if (GUILayout.Button("\u25BA", activePlayButtonStyle, GUILayout.Width(24))) { StopAnimation(); } - GUI.contentColor = Color.white; } else { - if (GUILayout.Button("\u25BA", EditorStyles.toolbarButton, GUILayout.Width(24))) { - PlayAnimation(a.Name, true); + if (GUILayout.Button("\u25BA", idlePlayButtonStyle, GUILayout.Width(24))) { + PlayAnimation(animation.Name, true); } } } else { - GUILayout.Label("?", GUILayout.Width(24)); + GUILayout.Label("-", GUILayout.Width(24)); } - EditorGUILayout.LabelField(new GUIContent(a.Name, SpineEditorUtilities.Icons.animation), new GUIContent(a.Duration.ToString("f3") + "s" + ("(" + (Mathf.RoundToInt(a.Duration * 30)) + ")").PadLeft(12, ' '))); + EditorGUILayout.LabelField(new GUIContent(animation.Name, SpineEditorUtilities.Icons.animation), new GUIContent(animation.Duration.ToString("f3") + "s" + ("(" + (Mathf.RoundToInt(animation.Duration * 30)) + ")").PadLeft(12, ' '))); } } } - void DrawSlotList () { showSlotList = EditorGUILayout.Foldout(showSlotList, new GUIContent("Slots", SpineEditorUtilities.Icons.slotRoot)); - if (!showSlotList) - return; - - if (m_skeletonAnimation == null || m_skeletonAnimation.skeleton == null) - return; + if (!showSlotList) return; + if (m_skeletonAnimation == null || m_skeletonAnimation.skeleton == null) return; EditorGUI.indentLevel++; + try { showAttachments = EditorGUILayout.ToggleLeft("Show Attachments", showAttachments); } catch { return; } - List slotAttachments = new List(); List slotAttachmentNames = new List(); List defaultSkinAttachmentNames = new List(); var defaultSkin = m_skeletonData.Skins.Items[0]; - Skin skin = m_skeletonAnimation.skeleton.Skin; - if (skin == null) { - skin = defaultSkin; - } + Skin skin = m_skeletonAnimation.skeleton.Skin ?? defaultSkin; for (int i = m_skeletonAnimation.skeleton.Slots.Count - 1; i >= 0; i--) { Slot slot = m_skeletonAnimation.skeleton.Slots.Items[i]; EditorGUILayout.LabelField(new GUIContent(slot.Data.Name, SpineEditorUtilities.Icons.slot)); if (showAttachments) { - - + EditorGUI.indentLevel++; slotAttachments.Clear(); slotAttachmentNames.Clear(); @@ -361,7 +390,6 @@ namespace Spine.Unity.Editor { skin.FindNamesForSlot(i, slotAttachmentNames); skin.FindAttachmentsForSlot(i, slotAttachments); - if (skin != defaultSkin) { defaultSkin.FindNamesForSlot(i, defaultSkinAttachmentNames); defaultSkin.FindNamesForSlot(i, slotAttachmentNames); @@ -370,11 +398,9 @@ namespace Spine.Unity.Editor { defaultSkin.FindNamesForSlot(i, defaultSkinAttachmentNames); } - - for (int a = 0; a < slotAttachments.Count; a++) { Attachment attachment = slotAttachments[a]; - string name = slotAttachmentNames[a]; + string attachmentName = slotAttachmentNames[a]; Texture2D icon = null; var type = attachment.GetType(); @@ -390,51 +416,42 @@ namespace Spine.Unity.Editor { else icon = SpineEditorUtilities.Icons.warning; - //TODO: Waterboard Nate + // MITCH: left todo: Waterboard Nate //if (name != attachment.Name) //icon = SpineEditorUtilities.Icons.skinPlaceholder; bool initialState = slot.Attachment == attachment; - bool toggled = EditorGUILayout.ToggleLeft(new GUIContent(name, icon), slot.Attachment == attachment); + bool toggled = EditorGUILayout.ToggleLeft(new GUIContent(attachmentName, icon), slot.Attachment == attachment); - if (!defaultSkinAttachmentNames.Contains(name)) { + if (!defaultSkinAttachmentNames.Contains(attachmentName)) { Rect skinPlaceHolderIconRect = GUILayoutUtility.GetLastRect(); skinPlaceHolderIconRect.width = SpineEditorUtilities.Icons.skinPlaceholder.width; skinPlaceHolderIconRect.height = SpineEditorUtilities.Icons.skinPlaceholder.height; GUI.DrawTexture(skinPlaceHolderIconRect, SpineEditorUtilities.Icons.skinPlaceholder); } - if (toggled != initialState) { - if (toggled) { - slot.Attachment = attachment; - } else { - slot.Attachment = null; - } + slot.Attachment = toggled ? attachment : null; m_requireRefresh = true; } } - - EditorGUI.indentLevel--; } } - EditorGUI.indentLevel--; } - - + void RepopulateWarnings () { warnings.Clear(); - if (skeletonJSON.objectReferenceValue == null) + if (skeletonJSON.objectReferenceValue == null) { warnings.Add("Missing Skeleton JSON"); - else { - + } else { if (SpineEditorUtilities.IsValidSpineData((TextAsset)skeletonJSON.objectReferenceValue) == false) { warnings.Add("Skeleton data file is not a valid JSON or binary file."); } else { + #if !SPINE_TK2D bool detectedNullAtlasEntry = false; var atlasList = new List(); for (int i = 0; i < atlasAssets.arraySize; i++) { @@ -449,7 +466,7 @@ namespace Spine.Unity.Editor { if (detectedNullAtlasEntry) warnings.Add("AtlasAsset elements cannot be Null"); else { - //get requirements + // Get requirements. var missingPaths = SpineEditorUtilities.GetRequiredAtlasRegions(AssetDatabase.GetAssetPath((TextAsset)skeletonJSON.objectReferenceValue)); foreach (var atlas in atlasList) { @@ -463,29 +480,31 @@ namespace Spine.Unity.Editor { foreach (var str in missingPaths) warnings.Add("Missing Region: '" + str + "'"); - - - + } + #else + if (spriteCollection.objectReferenceValue == null) { + warnings.Add("SkeletonDataAsset requires tk2DSpriteCollectionData."); + } else { + warnings.Add("Your sprite collection may have missing images."); + } + #endif } - - } } - //preview window stuff - private PreviewRenderUtility m_previewUtility; - private GameObject m_previewInstance; - private Vector2 previewDir; - private SkeletonAnimation m_skeletonAnimation; - //private SkeletonData m_skeletonData; - private static int sliderHash = "Slider".GetHashCode(); - private float m_lastTime; - private bool m_playing; - private bool m_requireRefresh; - private Color m_originColor = new Color(0.3f, 0.3f, 0.3f, 1); + #region Preview Window + PreviewRenderUtility m_previewUtility; + GameObject m_previewInstance; + Vector2 previewDir; + SkeletonAnimation m_skeletonAnimation; + static readonly int SliderHash = "Slider".GetHashCode(); + float m_lastTime; + bool m_playing; + bool m_requireRefresh; + Color m_originColor = new Color(0.3f, 0.3f, 0.3f, 1); - private void StopAnimation () { + void StopAnimation () { if (m_skeletonAnimation == null) { Debug.LogWarning("Animation was stopped but preview doesn't exist. It's possible that the Preview Panel is closed."); } @@ -497,7 +516,7 @@ namespace Spine.Unity.Editor { List m_animEvents = new List(); List m_animEventFrames = new List(); - private void PlayAnimation (string animName, bool loop) { + void PlayAnimation (string animName, bool loop) { m_animEvents.Clear(); m_animEventFrames.Clear(); @@ -519,7 +538,7 @@ namespace Spine.Unity.Editor { m_playing = true; } - private void InitPreview () { + void InitPreview () { if (this.m_previewUtility == null) { this.m_lastTime = Time.realtimeSinceStartup; this.m_previewUtility = new PreviewRenderUtility(true); @@ -532,34 +551,34 @@ namespace Spine.Unity.Editor { } } - private void CreatePreviewInstances () { + void CreatePreviewInstances () { this.DestroyPreviewInstances(); + + var skeletonDataAsset = (SkeletonDataAsset)target; + if (skeletonDataAsset.GetSkeletonData(false) == null) + return; + if (this.m_previewInstance == null) { - try { - string skinName = EditorPrefs.GetString(m_skeletonDataAssetGUID + "_lastSkin", ""); + string skinName = EditorPrefs.GetString(m_skeletonDataAssetGUID + "_lastSkin", ""); - m_previewInstance = SpineEditorUtilities.InstantiateSkeletonAnimation((SkeletonDataAsset)target, skinName).gameObject; - m_previewInstance.hideFlags = HideFlags.HideAndDontSave; - m_previewInstance.layer = 0x1f; + m_previewInstance = SpineEditorUtilities.InstantiateSkeletonAnimation(skeletonDataAsset, skinName).gameObject; + m_previewInstance.hideFlags = HideFlags.HideAndDontSave; + m_previewInstance.layer = 0x1f; + m_skeletonAnimation = m_previewInstance.GetComponent(); + m_skeletonAnimation.initialSkinName = skinName; + m_skeletonAnimation.LateUpdate(); - m_skeletonAnimation = m_previewInstance.GetComponent(); - m_skeletonAnimation.initialSkinName = skinName; - m_skeletonAnimation.LateUpdate(); + m_skeletonData = m_skeletonAnimation.skeletonDataAsset.GetSkeletonData(true); - m_skeletonData = m_skeletonAnimation.skeletonDataAsset.GetSkeletonData(true); + m_previewInstance.GetComponent().enabled = false; - m_previewInstance.GetComponent().enabled = false; - - m_initialized = true; - AdjustCameraGoals(true); - } catch { - // WARNING: Suppresses errors. - } + m_initialized = true; + AdjustCameraGoals(true); } } - private void DestroyPreviewInstances () { + void DestroyPreviewInstances () { if (this.m_previewInstance != null) { DestroyImmediate(this.m_previewInstance); m_previewInstance = null; @@ -568,7 +587,7 @@ namespace Spine.Unity.Editor { } public override bool HasPreviewGUI () { - //TODO: validate json data + // MITCH: left todo: validate json data for (int i = 0; i < atlasAssets.arraySize; i++) { var prop = atlasAssets.GetArrayElementAtIndex(i); @@ -597,8 +616,8 @@ namespace Spine.Unity.Editor { DrawSkinToolbar(r); NormalizedTimeBar(r); - //TODO: implement panning - // this.previewDir = Drag2D(this.previewDir, r); + // MITCH: left a todo: Implement panning + // this.previewDir = Drag2D(this.previewDir, r); MouseScroll(r); } @@ -606,37 +625,31 @@ namespace Spine.Unity.Editor { Vector3 m_posGoal = new Vector3(0, 0, -10); double m_adjustFrameEndTime = 0; - private void AdjustCameraGoals (bool calculateMixTime) { + void AdjustCameraGoals (bool calculateMixTime) { if (this.m_previewInstance == null) return; if (calculateMixTime) { - if (m_skeletonAnimation.state.GetCurrent(0) != null) { + if (m_skeletonAnimation.state.GetCurrent(0) != null) m_adjustFrameEndTime = EditorApplication.timeSinceStartup + m_skeletonAnimation.state.GetCurrent(0).Mix; - } } - - + GameObject go = this.m_previewInstance; - Bounds bounds = go.GetComponent().bounds; m_orthoGoal = bounds.size.y; - m_posGoal = bounds.center + new Vector3(0, 0, -10); } - private void AdjustCameraGoals () { + void AdjustCameraGoals () { AdjustCameraGoals(false); } - private void AdjustCamera () { + void AdjustCamera () { if (m_previewUtility == null) return; - - if (EditorApplication.timeSinceStartup < m_adjustFrameEndTime) { + if (EditorApplication.timeSinceStartup < m_adjustFrameEndTime) AdjustCameraGoals(); - } float orthoSet = Mathf.Lerp(this.m_previewUtility.m_Camera.orthographicSize, m_orthoGoal, 0.1f); @@ -652,25 +665,20 @@ namespace Spine.Unity.Editor { } } - private void DoRenderPreview (bool drawHandles) { + void DoRenderPreview (bool drawHandles) { GameObject go = this.m_previewInstance; if (m_requireRefresh && go != null) { go.GetComponent().enabled = true; - if (EditorApplication.isPlaying) { - //do nothing - } else { + if (!EditorApplication.isPlaying) m_skeletonAnimation.Update((Time.realtimeSinceStartup - m_lastTime)); - } m_lastTime = Time.realtimeSinceStartup; if (!EditorApplication.isPlaying) m_skeletonAnimation.LateUpdate(); - - if (drawHandles) { Handles.SetCamera(m_previewUtility.m_Camera); Handles.color = m_originColor; @@ -685,17 +693,14 @@ namespace Spine.Unity.Editor { Handles.SetCamera(m_previewUtility.m_Camera); foreach (var slot in m_skeletonAnimation.skeleton.Slots) { var boundingBoxAttachment = slot.Attachment as BoundingBoxAttachment; - - if (boundingBoxAttachment != null) { + if (boundingBoxAttachment != null) DrawBoundingBox (slot.Bone, boundingBoxAttachment); - } } } go.GetComponent().enabled = false; } - - + } static void DrawBoundingBox (Bone bone, BoundingBoxAttachment box) { @@ -712,9 +717,8 @@ namespace Spine.Unity.Editor { vert.x = worldVerts[i]; vert.y = worldVerts[i + 1]; - if (i > 0) { + if (i > 0) Handles.DrawLine(lastVert, vert); - } lastVert = vert; } @@ -723,7 +727,7 @@ namespace Spine.Unity.Editor { } - void Update () { + void EditorUpdate () { AdjustCamera(); if (m_playing) { @@ -760,31 +764,11 @@ namespace Spine.Unity.Editor { popRect.x += 44; if (GUI.Button(popRect, label, EditorStyles.popup)) { - SelectSkinContext(); + DrawSkinDropdown(); } } } - - void SelectSkinContext () { - GenericMenu menu = new GenericMenu(); - - foreach (Skin s in m_skeletonData.Skins) { - menu.AddItem(new GUIContent(s.Name), this.m_skeletonAnimation.skeleton.Skin == s, SetSkin, (object)s); - } - - menu.ShowAsContext(); - } - - void SetSkin (object o) { - Skin skin = (Skin)o; - - m_skeletonAnimation.initialSkinName = skin.Name; - m_skeletonAnimation.Initialize(true); - m_requireRefresh = true; - - EditorPrefs.SetString(m_skeletonDataAssetGUID + "_lastSkin", skin.Name); - } - + void NormalizedTimeBar (Rect r) { if (m_skeletonAnimation == null) return; @@ -814,11 +798,10 @@ namespace Spine.Unity.Editor { GUI.color = Color.white; for (int i = 0; i < m_animEvents.Count; i++) { - //TODO: Tooltip + // MITCH: left todo: Tooltip //Spine.Event spev = animEvents[i]; float fr = m_animEventFrames[i]; - var evRect = new Rect(barRect); evRect.x = Mathf.Clamp(((fr / t.Animation.Duration) * width) - (SpineEditorUtilities.Icons._event.width / 2), barRect.x, float.MaxValue); evRect.width = SpineEditorUtilities.Icons._event.width; @@ -826,32 +809,27 @@ namespace Spine.Unity.Editor { evRect.y += SpineEditorUtilities.Icons._event.height; GUI.DrawTexture(evRect, SpineEditorUtilities.Icons._event); - - //TODO: Tooltip - /* - UnityEngine.Event ev = UnityEngine.Event.current; - if(ev.isMouse){ - if(evRect.Contains(ev.mousePosition)){ - Rect tooltipRect = new Rect(evRect); - tooltipRect.width = 500; - tooltipRect.y -= 4; - tooltipRect.x += 4; - GUI.Label(tooltipRect, spev.Data.Name); - } - } - */ + // MITCH: left todo: Tooltip +// UnityEngine.Event ev = UnityEngine.Event.current; +// if (ev.isMouse) { +// if (evRect.Contains(ev.mousePosition)) { +// Rect tooltipRect = new Rect(evRect); +// tooltipRect.width = 500; +// tooltipRect.y -= 4; +// tooltipRect.x += 4; +// GUI.Label(tooltipRect, spev.Data.Name); +// } +// } } } } void MouseScroll (Rect position) { UnityEngine.Event current = UnityEngine.Event.current; - int controlID = GUIUtility.GetControlID(sliderHash, FocusType.Passive); - + int controlID = GUIUtility.GetControlID(SliderHash, FocusType.Passive); switch (current.GetTypeForControl(controlID)) { case EventType.ScrollWheel: if (position.Contains(current.mousePosition)) { - m_orthoGoal += current.delta.y; m_orthoGoal = Mathf.Max(0.01f, m_orthoGoal); GUIUtility.hotControl = controlID; @@ -859,50 +837,49 @@ namespace Spine.Unity.Editor { } break; } - } - //TODO: Implement preview panning + // MITCH: left todo: Implement preview panning /* - static Vector2 Drag2D(Vector2 scrollPosition, Rect position) - { - int controlID = GUIUtility.GetControlID(sliderHash, FocusType.Passive); - UnityEngine.Event current = UnityEngine.Event.current; - switch (current.GetTypeForControl(controlID)) + static Vector2 Drag2D(Vector2 scrollPosition, Rect position) { - case EventType.MouseDown: - if (position.Contains(current.mousePosition) && (position.width > 50f)) + int controlID = GUIUtility.GetControlID(sliderHash, FocusType.Passive); + UnityEngine.Event current = UnityEngine.Event.current; + switch (current.GetTypeForControl(controlID)) { - GUIUtility.hotControl = controlID; - current.Use(); - EditorGUIUtility.SetWantsMouseJumping(1); - } - return scrollPosition; - - case EventType.MouseUp: - if (GUIUtility.hotControl == controlID) - { - GUIUtility.hotControl = 0; - } - EditorGUIUtility.SetWantsMouseJumping(0); - return scrollPosition; - - case EventType.MouseMove: - return scrollPosition; - - case EventType.MouseDrag: - if (GUIUtility.hotControl == controlID) - { - scrollPosition -= (Vector2) (((current.delta * (!current.shift ? ((float) 1) : ((float) 3))) / Mathf.Min(position.width, position.height)) * 140f); - scrollPosition.y = Mathf.Clamp(scrollPosition.y, -90f, 90f); - current.Use(); - GUI.changed = true; + case EventType.MouseDown: + if (position.Contains(current.mousePosition) && (position.width > 50f)) + { + GUIUtility.hotControl = controlID; + current.Use(); + EditorGUIUtility.SetWantsMouseJumping(1); + } + return scrollPosition; + + case EventType.MouseUp: + if (GUIUtility.hotControl == controlID) + { + GUIUtility.hotControl = 0; + } + EditorGUIUtility.SetWantsMouseJumping(0); + return scrollPosition; + + case EventType.MouseMove: + return scrollPosition; + + case EventType.MouseDrag: + if (GUIUtility.hotControl == controlID) + { + scrollPosition -= (Vector2) (((current.delta * (!current.shift ? ((float) 1) : ((float) 3))) / Mathf.Min(position.width, position.height)) * 140f); + scrollPosition.y = Mathf.Clamp(scrollPosition.y, -90f, 90f); + current.Use(); + GUI.changed = true; + } + return scrollPosition; } return scrollPosition; } - return scrollPosition; - } - */ + */ public override GUIContent GetPreviewTitle () { return new GUIContent("Preview"); @@ -923,8 +900,8 @@ namespace Spine.Unity.Editor { } } - //TODO: Fix first-import error - //TODO: Update preview without thumbnail + // MITCH: left todo: Fix first-import error + // MITCH: left todo: Update preview without thumbnail public override Texture2D RenderStaticPreview (string assetPath, UnityEngine.Object[] subAssets, int width, int height) { var tex = new Texture2D(width, height, TextureFormat.ARGB32, false); @@ -942,7 +919,7 @@ namespace Spine.Unity.Editor { this.m_previewUtility.BeginStaticPreview(new Rect(0, 0, width, height)); this.DoRenderPreview(false); - //TODO: Figure out why this is throwing errors on first attempt + //MITCH: left todo: Figure out why this is throwing errors on first attempt // if(m_previewUtility != null){ // Handles.SetCamera(this.m_previewUtility.m_Camera); // Handles.BeginGUI(); @@ -952,6 +929,27 @@ namespace Spine.Unity.Editor { tex = this.m_previewUtility.EndStaticPreview(); return tex; } + #endregion + + #region Skin Dropdown Context Menu + void DrawSkinDropdown () { + var menu = new GenericMenu(); + foreach (Skin s in m_skeletonData.Skins) + menu.AddItem(new GUIContent(s.Name), this.m_skeletonAnimation.skeleton.Skin == s, SetSkin, s); + + menu.ShowAsContext(); + } + + void SetSkin (object o) { + Skin skin = (Skin)o; + + m_skeletonAnimation.initialSkinName = skin.Name; + m_skeletonAnimation.Initialize(true); + m_requireRefresh = true; + + EditorPrefs.SetString(m_skeletonDataAssetGUID + "_lastSkin", skin.Name); + } + #endregion } } diff --git a/spine-unity/Assets/spine-unity/BoneFollower.cs b/spine-unity/Assets/spine-unity/BoneFollower.cs index e43622c3f..a5a1af424 100644 --- a/spine-unity/Assets/spine-unity/BoneFollower.cs +++ b/spine-unity/Assets/spine-unity/BoneFollower.cs @@ -43,68 +43,61 @@ namespace Spine.Unity { get { return skeletonRenderer; } set { skeletonRenderer = value; - Reset(); + Initialize(); } } + ///

If a bone isn't set, boneName is used to find the bone. [SpineBone(dataField: "skeletonRenderer")] public String boneName; public bool followZPosition = true; public bool followBoneRotation = true; - public bool resetOnAwake = true; + [UnityEngine.Serialization.FormerlySerializedAs("resetOnAwake")] + public bool initializeOnAwake = true; #endregion - [NonSerialized] - public bool valid; - - [NonSerialized] - public Bone bone; + [NonSerialized] public bool valid; + [NonSerialized] public Bone bone; Transform skeletonTransform; - public void HandleResetRenderer (SkeletonRenderer skeletonRenderer) { - Reset(); + public void Awake () { + if (initializeOnAwake) Initialize(); } - public void Reset () { + public void HandleRebuildRenderer (SkeletonRenderer skeletonRenderer) { + Initialize(); + } + + public void Initialize () { bone = null; valid = skeletonRenderer != null && skeletonRenderer.valid; - if (!valid) return; skeletonTransform = skeletonRenderer.transform; - skeletonRenderer.OnRebuild -= HandleResetRenderer; - skeletonRenderer.OnRebuild += HandleResetRenderer; + skeletonRenderer.OnRebuild -= HandleRebuildRenderer; + skeletonRenderer.OnRebuild += HandleRebuildRenderer; #if UNITY_EDITOR if (Application.isEditor) - DoUpdate(); + LateUpdate(); #endif } void OnDestroy () { if (skeletonRenderer != null) - skeletonRenderer.OnRebuild -= HandleResetRenderer; + skeletonRenderer.OnRebuild -= HandleRebuildRenderer; } - public void Awake () { - if (resetOnAwake) - Reset(); - } - - void LateUpdate () { - DoUpdate(); - } - - public void DoUpdate () { + public void LateUpdate () { if (!valid) { - Reset(); + Initialize(); return; } if (bone == null) { - if (boneName == null || boneName.Length == 0) - return; + if (string.IsNullOrEmpty(boneName)) return; + bone = skeletonRenderer.skeleton.FindBone(boneName); if (bone == null) { Debug.LogError("Bone not found: " + boneName, this); @@ -112,33 +105,23 @@ namespace Spine.Unity { } } - Skeleton skeleton = skeletonRenderer.skeleton; - float flipRotation = (skeleton.flipX ^ skeleton.flipY) ? -1f : 1f; Transform thisTransform = this.transform; - - // Recommended setup: Use local transform properties if Spine GameObject is parent if (thisTransform.parent == skeletonTransform) { + // Recommended setup: Use local transform properties if Spine GameObject is the immediate parent thisTransform.localPosition = new Vector3(bone.worldX, bone.worldY, followZPosition ? 0f : thisTransform.localPosition.z); - - if (followBoneRotation) { - Vector3 rotation = thisTransform.localRotation.eulerAngles; - thisTransform.localRotation = Quaternion.Euler(rotation.x, rotation.y, bone.WorldRotationX * flipRotation); - } - - // For special cases: Use transform world properties if transform relationship is complicated + if (followBoneRotation) thisTransform.localRotation = Quaternion.Euler(0f, 0f, bone.WorldRotationX); + } else { + // For special cases: Use transform world properties if transform relationship is complicated Vector3 targetWorldPosition = skeletonTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY, 0f)); - if (!followZPosition) - targetWorldPosition.z = thisTransform.position.z; - + if (!followZPosition) targetWorldPosition.z = thisTransform.position.z; thisTransform.position = targetWorldPosition; if (followBoneRotation) { Vector3 worldRotation = skeletonTransform.rotation.eulerAngles; - thisTransform.rotation = Quaternion.Euler(worldRotation.x, worldRotation.y, skeletonTransform.rotation.eulerAngles.z + (bone.WorldRotationX * flipRotation)); + thisTransform.rotation = Quaternion.Euler(worldRotation.x, worldRotation.y, skeletonTransform.rotation.eulerAngles.z + bone.WorldRotationX); } } - } } diff --git a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs index f81af9955..44221347e 100644 --- a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs +++ b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs @@ -52,8 +52,8 @@ namespace Spine.Unity.Editor { override public void OnInspectorGUI () { if (needsReset) { - component.Reset(); - component.DoUpdate(); + component.Initialize(); + component.LateUpdate(); needsReset = false; SceneView.RepaintAll(); } @@ -89,17 +89,17 @@ namespace Spine.Unity.Editor { if (serializedObject.ApplyModifiedProperties() || (UnityEngine.Event.current.type == EventType.ValidateCommand && UnityEngine.Event.current.commandName == "UndoRedoPerformed") ) { - component.Reset(); + component.Initialize(); } } public static T GetInParent (Transform origin) where T : Component { #if UNITY_4_3 Transform parent = origin.parent; - while(parent.GetComponent() == null){ - parent = parent.parent; - if(parent == null) - return default(T); + while (parent.GetComponent() == null) { + parent = parent.parent; + if(parent == null) + return default(T); } return parent.GetComponent(); diff --git a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs index af9583d10..d0f08cfae 100644 --- a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs +++ b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs @@ -48,6 +48,7 @@ using Spine; namespace Spine.Unity.Editor { + // Analysis disable once ConvertToStaticType [InitializeOnLoad] public class SpineEditorUtilities : AssetPostprocessor { @@ -78,47 +79,42 @@ namespace Spine.Unity.Editor { public static Texture2D unityIcon; public static Texture2D controllerIcon; - public static Mesh boneMesh { + internal static Mesh _boneMesh; + public static Mesh BoneMesh { get { if (_boneMesh == null) { _boneMesh = new Mesh(); - _boneMesh.vertices = new Vector3[4] { - Vector3.zero, + _boneMesh.vertices = new [] { + new Vector3(0, 0, 0), new Vector3(-0.1f, 0.1f, 0), - Vector3.up, + new Vector3(0, 1, 0), new Vector3(0.1f, 0.1f, 0) }; _boneMesh.uv = new Vector2[4]; - _boneMesh.triangles = new int[6] { 0, 1, 2, 2, 3, 0 }; + _boneMesh.triangles = new [] { 0, 1, 2, 2, 3, 0 }; _boneMesh.RecalculateBounds(); _boneMesh.RecalculateNormals(); } - return _boneMesh; } } - internal static Mesh _boneMesh; - - public static Material boneMaterial { + internal static Material _boneMaterial; + public static Material BoneMaterial { get { if (_boneMaterial == null) { #if UNITY_4_3 _boneMaterial = new Material(Shader.Find("Particles/Alpha Blended")); _boneMaterial.SetColor("_TintColor", new Color(0.4f, 0.4f, 0.4f, 0.25f)); #else - _boneMaterial = new Material(Shader.Find("Spine/Bones")); + _boneMaterial = new Material(Shader.Find("Hidden/Spine/Bones")); _boneMaterial.SetColor("_Color", new Color(0.4f, 0.4f, 0.4f, 0.25f)); #endif - } - return _boneMaterial; } } - internal static Material _boneMaterial; - public static void Initialize () { skeleton = (Texture2D)AssetDatabase.LoadMainAssetAtPath(SpineEditorUtilities.editorGUIPath + "/icon-skeleton.png"); nullBone = (Texture2D)AssetDatabase.LoadMainAssetAtPath(SpineEditorUtilities.editorGUIPath + "/icon-null.png"); @@ -152,17 +148,19 @@ namespace Spine.Unity.Editor { public static string editorPath = ""; public static string editorGUIPath = ""; + public static bool initialized; + static HashSet assetsImportedInWrongState; static Dictionary skeletonRendererTable; static Dictionary skeletonUtilityBoneTable; static Dictionary boundingBoxFollowerTable; + + const string DEFAULT_MIX_KEY = "SPINE_DEFAULT_MIX"; public static float defaultScale = 0.01f; public static float defaultMix = 0.2f; public static string defaultShader = "Spine/Skeleton"; - public static bool initialized; - - const string DEFAULT_MIX_KEY = "SPINE_DEFAULT_MIX"; + #region Initialization static SpineEditorUtilities () { Initialize(); } @@ -193,8 +191,39 @@ namespace Spine.Unity.Editor { if (!initialized || Icons.skeleton == null) Initialize(); } + #endregion - #region Hierarchy Icon + #region Spine Preferences and Defaults + static bool preferencesLoaded = false; + + [PreferenceItem("Spine")] + static void PreferencesGUI () { + if (!preferencesLoaded) { + preferencesLoaded = true; + defaultMix = EditorPrefs.GetFloat(DEFAULT_MIX_KEY, 0.2f); + } + + + EditorGUILayout.LabelField("Auto-Import Settings", EditorStyles.boldLabel); + EditorGUI.BeginChangeCheck(); + defaultMix = EditorGUILayout.FloatField("Default Mix", defaultMix); + if (EditorGUI.EndChangeCheck()) + EditorPrefs.SetFloat(DEFAULT_MIX_KEY, defaultMix); + + GUILayout.Space(20); + EditorGUILayout.LabelField("3rd Party Settings", EditorStyles.boldLabel); + GUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel("TK2D"); + + if (GUILayout.Button("Enable", GUILayout.Width(64))) + EnableTK2D(); + if (GUILayout.Button("Disable", GUILayout.Width(64))) + DisableTK2D(); + GUILayout.EndHorizontal(); + } + #endregion + + #region Hierarchy Icons static void HierarchyWindowChanged () { skeletonRendererTable.Clear(); skeletonUtilityBoneTable.Clear(); @@ -218,48 +247,37 @@ namespace Spine.Unity.Editor { Rect r = new Rect(selectionRect); r.x = r.width - 15; r.width = 15; - GUI.Label(r, Icons.spine); } else if (skeletonUtilityBoneTable.ContainsKey(instanceId)) { Rect r = new Rect(selectionRect); r.x -= 26; - if (skeletonUtilityBoneTable[instanceId] != null) { if (skeletonUtilityBoneTable[instanceId].transform.childCount == 0) r.x += 13; - r.y += 2; - r.width = 13; r.height = 13; - - if (skeletonUtilityBoneTable[instanceId].mode == SkeletonUtilityBone.Mode.Follow) { + if (skeletonUtilityBoneTable[instanceId].mode == SkeletonUtilityBone.Mode.Follow) GUI.DrawTexture(r, Icons.bone); - } else { + else GUI.DrawTexture(r, Icons.poseBones); - } } - } else if (boundingBoxFollowerTable.ContainsKey(instanceId)) { Rect r = new Rect(selectionRect); r.x -= 26; - if (boundingBoxFollowerTable[instanceId] != null) { if (boundingBoxFollowerTable[instanceId].transform.childCount == 0) r.x += 13; - r.y += 2; - r.width = 13; r.height = 13; - GUI.DrawTexture(r, Icons.boundingBox); } } - } #endregion + #region Auto-Import Entry Point static void OnPostprocessAllAssets (string[] imported, string[] deleted, string[] moved, string[] movedFromAssetPaths) { if (imported.Length == 0) return; @@ -298,9 +316,8 @@ namespace Spine.Unity.Editor { string extension = Path.GetExtension(str).ToLower(); switch (extension) { case ".txt": - if (str.EndsWith(".atlas.txt")) { + if (str.EndsWith(".atlas.txt", System.StringComparison.Ordinal)) atlasPaths.Add(str); - } break; case ".png": case ".jpg": @@ -311,28 +328,24 @@ namespace Spine.Unity.Editor { skeletonPaths.Add(str); break; case ".bytes": - if (str.ToLower().EndsWith(".skel.bytes")) { + if (str.ToLower().EndsWith(".skel.bytes", System.StringComparison.Ordinal)) { if (IsValidSpineData((TextAsset)AssetDatabase.LoadAssetAtPath(str, typeof(TextAsset)))) skeletonPaths.Add(str); } break; } } - - - List atlases = new List(); - - //import atlases first + + // Import atlases first. + var atlases = new List(); foreach (string ap in atlasPaths) { - if (!reimport && CheckForValidAtlas(ap)) - continue; - + // MITCH: left note: Always import atlas data now. TextAsset atlasText = (TextAsset)AssetDatabase.LoadAssetAtPath(ap, typeof(TextAsset)); AtlasAsset atlas = IngestSpineAtlas(atlasText); atlases.Add(atlas); } - //import skeletons and match them with atlases + // Import skeletons and match them with atlases. bool abortSkeletonImport = false; foreach (string sp in skeletonPaths) { if (!reimport && CheckForValidSkeletonData(sp)) { @@ -340,19 +353,27 @@ namespace Spine.Unity.Editor { continue; } - string dir = Path.GetDirectoryName(sp); + #if SPINE_TK2D + IngestSpineProject(AssetDatabase.LoadAssetAtPath(sp, typeof(TextAsset)) as TextAsset, null); + #else var localAtlases = FindAtlasesAtPath(dir); var requiredPaths = GetRequiredAtlasRegions(sp); var atlasMatch = GetMatchingAtlas(requiredPaths, localAtlases); - if (atlasMatch != null) { IngestSpineProject(AssetDatabase.LoadAssetAtPath(sp, typeof(TextAsset)) as TextAsset, atlasMatch); } else { bool resolved = false; while (!resolved) { - int result = EditorUtility.DisplayDialogComplex("Skeleton JSON Import Error!", "Could not find matching AtlasAsset for " + Path.GetFileNameWithoutExtension(sp), "Select", "Skip", "Abort"); + + var filename = Path.GetFileNameWithoutExtension(sp); + int result = EditorUtility.DisplayDialogComplex( + string.Format("Missing AtlasAsset for \"{0}\"", filename), + string.Format("Could not find matching AtlasAsset for \"{0}\"", filename), + "Choose AtlaseAssets...", "Skip this", "Stop importing all" + ); + switch (result) { case -1: Debug.Log("Select Atlas"); @@ -366,25 +387,19 @@ namespace Spine.Unity.Editor { IngestSpineProject(AssetDatabase.LoadAssetAtPath(sp, typeof(TextAsset)) as TextAsset, atlasMatch); } } - break; - case 0: + case 0: // Choose AtlaseAssets... var atlasList = MultiAtlasDialog(requiredPaths, Path.GetDirectoryName(sp), Path.GetFileNameWithoutExtension(sp)); - if (atlasList != null) IngestSpineProject(AssetDatabase.LoadAssetAtPath(sp, typeof(TextAsset)) as TextAsset, atlasList.ToArray()); resolved = true; break; - - case 1: + case 1: // Skip Debug.Log("Skipped importing: " + Path.GetFileName(sp)); resolved = true; break; - - - case 2: - //abort + case 2: // Stop importing all abortSkeletonImport = true; resolved = true; break; @@ -394,46 +409,22 @@ namespace Spine.Unity.Editor { if (abortSkeletonImport) break; + #endif } - - //TODO: any post processing of images - } - - static bool CheckForValidSkeletonData (string skeletonJSONPath) { - - string dir = Path.GetDirectoryName(skeletonJSONPath); - TextAsset textAsset = (TextAsset)AssetDatabase.LoadAssetAtPath(skeletonJSONPath, typeof(TextAsset)); - DirectoryInfo dirInfo = new DirectoryInfo(dir); - - FileInfo[] files = dirInfo.GetFiles("*.asset"); - - foreach (var f in files) { - string localPath = dir + "/" + f.Name; - var obj = AssetDatabase.LoadAssetAtPath(localPath, typeof(Object)); - if (obj is SkeletonDataAsset) { - var skeletonDataAsset = (SkeletonDataAsset)obj; - if (skeletonDataAsset.skeletonJSON == textAsset) - return true; - } - } - - return false; + // MITCH: left a todo: any post processing of images } static void ResetExistingSkeletonData (string skeletonJSONPath) { - string dir = Path.GetDirectoryName(skeletonJSONPath); TextAsset textAsset = (TextAsset)AssetDatabase.LoadAssetAtPath(skeletonJSONPath, typeof(TextAsset)); DirectoryInfo dirInfo = new DirectoryInfo(dir); - FileInfo[] files = dirInfo.GetFiles("*.asset"); foreach (var f in files) { string localPath = dir + "/" + f.Name; var obj = AssetDatabase.LoadAssetAtPath(localPath, typeof(Object)); - if (obj is SkeletonDataAsset) { - var skeletonDataAsset = (SkeletonDataAsset)obj; - + var skeletonDataAsset = obj as SkeletonDataAsset; + if (skeletonDataAsset != null) { if (skeletonDataAsset.skeletonJSON == textAsset) { if (Selection.activeObject == skeletonDataAsset) Selection.activeObject = null; @@ -461,10 +452,14 @@ namespace Spine.Unity.Editor { SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(true); string currentHash = skeletonData != null ? skeletonData.Hash : null; - if (currentHash == null || lastHash != currentHash) { - //do any upkeep on synchronized assets + + #if SPINE_SKELETONANIMATOR + if (currentHash == null || lastHash != currentHash) UpdateMecanimClips(skeletonDataAsset); - } + #endif + + // if (currentHash == null || lastHash != currentHash) + // Do any upkeep on synchronized assets if (currentHash != null) { EditorPrefs.SetString(guid + "_hash", currentHash); @@ -473,99 +468,62 @@ namespace Spine.Unity.Editor { } } } + #endregion - static bool CheckForValidAtlas (string atlasPath) { - return false; - //////////////DEPRECATED - always check for new atlas data now - /* - string dir = Path.GetDirectoryName(atlasPath); - TextAsset textAsset = (TextAsset)AssetDatabase.LoadAssetAtPath(atlasPath, typeof(TextAsset)); - DirectoryInfo dirInfo = new DirectoryInfo(dir); - - FileInfo[] files = dirInfo.GetFiles("*.asset"); - - foreach (var f in files) { - string localPath = dir + "/" + f.Name; - var obj = AssetDatabase.LoadAssetAtPath(localPath, typeof(Object)); - if (obj is AtlasAsset) { - var atlasAsset = (AtlasAsset)obj; - if (atlasAsset.atlasFile == textAsset) { - - - Atlas atlas = atlasAsset.GetAtlas(); - FieldInfo field = typeof(Atlas).GetField("regions", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.NonPublic); - List regions = (List)field.GetValue(atlas); - string atlasAssetPath = AssetDatabase.GetAssetPath(atlasAsset); - string atlasAssetDirPath = Path.GetDirectoryName(atlasAssetPath); - string bakedDirPath = Path.Combine(atlasAssetDirPath, atlasAsset.name); - - for (int i = 0; i < regions.Count; i++) { - AtlasRegion region = regions[i]; - string bakedPrefabPath = Path.Combine(bakedDirPath, SpineEditorUtilities.GetPathSafeRegionName(region) + ".prefab").Replace("\\", "/"); - GameObject prefab = (GameObject)AssetDatabase.LoadAssetAtPath(bakedPrefabPath, typeof(GameObject)); - - if (prefab != null) { - Debug.Log("Updating: " + region.name); - BakeRegion(atlasAsset, region); - } - } - - - return true; - } - - } - } - - return false; - - */ - } - - static List MultiAtlasDialog (List requiredPaths, string initialDirectory, string header = "") { - + #region Match SkeletonData with Atlases + static List MultiAtlasDialog (List requiredPaths, string initialDirectory, string filename = "") { List atlasAssets = new List(); - bool resolved = false; string lastAtlasPath = initialDirectory; while (!resolved) { - StringBuilder sb = new StringBuilder(); - sb.AppendLine(header); - sb.AppendLine("Atlases:"); - if (atlasAssets.Count == 0) { - sb.AppendLine("\t--none--"); - } - for (int i = 0; i < atlasAssets.Count; i++) { - sb.AppendLine("\t" + atlasAssets[i].name); - } - sb.AppendLine(); - sb.AppendLine("Missing Regions:"); + // Build dialog box message. + var missingRegions = new List(requiredPaths); + var dialogText = new StringBuilder(); + { + dialogText.AppendLine(string.Format("SkeletonDataAsset for \"{0}\"", filename)); + dialogText.AppendLine("has missing regions."); + dialogText.AppendLine(); + dialogText.AppendLine("Current Atlases:"); - List missingRegions = new List(requiredPaths); + if (atlasAssets.Count == 0) + dialogText.AppendLine("\t--none--"); - foreach (var atlasAsset in atlasAssets) { - var atlas = atlasAsset.GetAtlas(); - for (int i = 0; i < missingRegions.Count; i++) { - if (atlas.FindRegion(missingRegions[i]) != null) { - missingRegions.RemoveAt(i); - i--; + for (int i = 0; i < atlasAssets.Count; i++) + dialogText.AppendLine("\t" + atlasAssets[i].name); + + dialogText.AppendLine(); + dialogText.AppendLine("Missing Regions:"); + + foreach (var atlasAsset in atlasAssets) { + var atlas = atlasAsset.GetAtlas(); + for (int i = 0; i < missingRegions.Count; i++) { + if (atlas.FindRegion(missingRegions[i]) != null) { + missingRegions.RemoveAt(i); + i--; + } } } + + int n = missingRegions.Count; + if (n == 0) break; + + const int MaxListLength = 15; + for (int i = 0; (i < n && i < MaxListLength); i++) + dialogText.AppendLine("\t" + missingRegions[i]); + + if (n > MaxListLength) dialogText.AppendLine(string.Format("\t... {0} more...", n - MaxListLength)); } - if (missingRegions.Count == 0) { - break; - } - - for (int i = 0; i < missingRegions.Count; i++) { - sb.AppendLine("\t" + missingRegions[i]); - } - - int result = EditorUtility.DisplayDialogComplex("Atlas Selection", sb.ToString(), "Select", "Finish", "Abort"); + // Show dialog box. + int result = EditorUtility.DisplayDialogComplex( + "SkeletonDataAsset has missing Atlas.", + dialogText.ToString(), + "Browse...", "Import anyway", "Cancel" + ); switch (result) { - case 0: + case 0: // Browse... AtlasAsset selectedAtlasAsset = GetAtlasDialog(lastAtlasPath); if (selectedAtlasAsset != null) { var atlas = selectedAtlasAsset.GetAtlas(); @@ -576,32 +534,26 @@ namespace Spine.Unity.Editor { break; } } - atlasAssets.Add(selectedAtlasAsset); } break; - - case 1: + case 1: // Import anyway resolved = true; break; - - case 2: + case 2: // Cancel atlasAssets = null; resolved = true; break; } - - } - return atlasAssets; } static AtlasAsset GetAtlasDialog (string dirPath) { string path = EditorUtility.OpenFilePanel("Select AtlasAsset...", dirPath, "asset"); - if (path == "") - return null; + + if (path == "") return null; // Canceled or closed by user. int subLen = Application.dataPath.Length - 6; string assetRelativePath = path.Substring(subLen, path.Length - subLen).Replace("\\", "/"); @@ -641,10 +593,8 @@ namespace Spine.Unity.Editor { foreach (KeyValuePair attachmentEntry in ((Dictionary)slotEntry.Value)) { var data = ((Dictionary)attachmentEntry.Value); if (data.ContainsKey("type")) { - if ((string)data["type"] == "boundingbox") { + if ((string)data["type"] == "boundingbox") continue; - } - } if (data.ContainsKey("path")) requiredPaths.Add((string)data["path"]); @@ -652,13 +602,13 @@ namespace Spine.Unity.Editor { requiredPaths.Add((string)data["name"]); else requiredPaths.Add(attachmentEntry.Key); - //requiredPaths.Add((string)sdf["path"]); } } } return requiredPaths; } + static AtlasAsset GetMatchingAtlas (List requiredPaths, List atlasAssets) { AtlasAsset atlasAssetMatch = null; @@ -676,65 +626,55 @@ namespace Spine.Unity.Editor { atlasAssetMatch = a; break; } - } return atlasAssetMatch; } + public class AtlasRequirementLoader : AttachmentLoader { + List requirementList; + public AtlasRequirementLoader (List requirementList) { + this.requirementList = requirementList; + } + + public RegionAttachment NewRegionAttachment (Skin skin, string name, string path) { + requirementList.Add(path); + return new RegionAttachment(name); + } + + public MeshAttachment NewMeshAttachment (Skin skin, string name, string path) { + requirementList.Add(path); + return new MeshAttachment(name); + } + + public WeightedMeshAttachment NewWeightedMeshAttachment(Skin skin, string name, string path) { + requirementList.Add(path); + return new WeightedMeshAttachment(name); + } + + public BoundingBoxAttachment NewBoundingBoxAttachment (Skin skin, string name) { + return new BoundingBoxAttachment(name); + } + } + #endregion + + #region Import Atlases static List FindAtlasesAtPath (string path) { List arr = new List(); - DirectoryInfo dir = new DirectoryInfo(path); FileInfo[] assetInfoArr = dir.GetFiles("*.asset"); int subLen = Application.dataPath.Length - 6; - foreach (var f in assetInfoArr) { string assetRelativePath = f.FullName.Substring(subLen, f.FullName.Length - subLen).Replace("\\", "/"); - Object obj = AssetDatabase.LoadAssetAtPath(assetRelativePath, typeof(AtlasAsset)); - if (obj != null) { + if (obj != null) arr.Add(obj as AtlasAsset); - } - } - return arr; } - public static bool IsValidSpineData (TextAsset asset) { - if (asset.name.Contains(".skel")) return true; - - object obj = null; - try { - obj = Json.Deserialize(new StringReader(asset.text)); - } catch (System.Exception) { - - } - - if (obj == null) { - Debug.LogError("Is not valid JSON"); - return false; - } - - var root = obj as Dictionary; - if (root == null) { - Debug.LogError("Parser returned an incorrect type."); - return false; - } - - if (!root.ContainsKey("skeleton")) - return false; - -// var skeletonInfo = (Dictionary)root["skeleton"]; -// string spineVersion = (string)skeletonInfo["spine"]; - // TODO: Warn users of old version incompatibility. - - return true; - } - static AtlasAsset IngestSpineAtlas (TextAsset atlasText) { if (atlasText == null) { Debug.LogWarning("Atlas source cannot be null!"); @@ -805,7 +745,6 @@ namespace Spine.Unity.Editor { mat.mainTexture = texture; EditorUtility.SetDirty(mat); - AssetDatabase.SaveAssets(); atlasAsset.materials[i] = mat; @@ -820,11 +759,9 @@ namespace Spine.Unity.Editor { atlasAsset.Reset(); EditorUtility.SetDirty(atlasAsset); - AssetDatabase.SaveAssets(); - - //iterate regions and bake marked + // Iterate regions and bake marked. Atlas atlas = atlasAsset.GetAtlas(); FieldInfo field = typeof(Atlas).GetField("regions", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.NonPublic); List regions = (List)field.GetValue(atlas); @@ -837,7 +774,6 @@ namespace Spine.Unity.Editor { AtlasRegion region = regions[i]; string bakedPrefabPath = Path.Combine(bakedDirPath, SpineEditorUtilities.GetPathSafeRegionName(region) + ".prefab").Replace("\\", "/"); GameObject prefab = (GameObject)AssetDatabase.LoadAssetAtPath(bakedPrefabPath, typeof(GameObject)); - if (prefab != null) { BakeRegion(atlasAsset, region, false); hasBakedRegions = true; @@ -851,7 +787,9 @@ namespace Spine.Unity.Editor { return (AtlasAsset)AssetDatabase.LoadAssetAtPath(atlasPath, typeof(AtlasAsset)); } + #endregion + #region Bake Atlas Region public static GameObject BakeRegion (AtlasAsset atlasAsset, AtlasRegion region, bool autoSave = true) { Atlas atlas = atlasAsset.GetAtlas(); string atlasAssetPath = AssetDatabase.GetAssetPath(atlasAsset); @@ -869,7 +807,7 @@ namespace Spine.Unity.Editor { if (prefab == null) { root = new GameObject("temp", typeof(MeshFilter), typeof(MeshRenderer)); - prefab = (GameObject)PrefabUtility.CreatePrefab(bakedPrefabPath, root); + prefab = PrefabUtility.CreatePrefab(bakedPrefabPath, root); isNewPrefab = true; Object.DestroyImmediate(root); } @@ -891,23 +829,45 @@ namespace Spine.Unity.Editor { AssetDatabase.Refresh(); } - prefab.GetComponent().sharedMaterial = mat; return prefab; } + #endregion - public static string GetPathSafeRegionName (AtlasRegion region) { - return region.name.Replace("/", "_"); - } - + #region Import SkeletonData (json or binary) static SkeletonDataAsset IngestSpineProject (TextAsset spineJson, params AtlasAsset[] atlasAssets) { string primaryName = Path.GetFileNameWithoutExtension(spineJson.name); string assetPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(spineJson)); string filePath = assetPath + "/" + primaryName + "_SkeletonData.asset"; - if (spineJson != null && atlasAssets != null) { + #if SPINE_TK2D + if (spineJson != null) { + SkeletonDataAsset skeletonDataAsset = (SkeletonDataAsset)AssetDatabase.LoadAssetAtPath(filePath, typeof(SkeletonDataAsset)); + if (skeletonDataAsset == null) { + skeletonDataAsset = SkeletonDataAsset.CreateInstance(); + skeletonDataAsset.skeletonJSON = spineJson; + skeletonDataAsset.fromAnimation = new string[0]; + skeletonDataAsset.toAnimation = new string[0]; + skeletonDataAsset.duration = new float[0]; + skeletonDataAsset.defaultMix = defaultMix; + skeletonDataAsset.scale = defaultScale; + AssetDatabase.CreateAsset(skeletonDataAsset, filePath); + AssetDatabase.SaveAssets(); + } else { + skeletonDataAsset.Reset(); + skeletonDataAsset.GetSkeletonData(true); + } + + return skeletonDataAsset; + } else { + EditorUtility.DisplayDialog("Error!", "Tried to ingest null Spine data.", "OK"); + return null; + } + + #else + if (spineJson != null && atlasAssets != null) { SkeletonDataAsset skelDataAsset = (SkeletonDataAsset)AssetDatabase.LoadAssetAtPath(filePath, typeof(SkeletonDataAsset)); if (skelDataAsset == null) { skelDataAsset = SkeletonDataAsset.CreateInstance(); @@ -932,7 +892,52 @@ namespace Spine.Unity.Editor { EditorUtility.DisplayDialog("Error!", "Must specify both Spine JSON and AtlasAsset array", "OK"); return null; } + #endif } + #endregion + + #region Checking Methods + static bool CheckForValidSkeletonData (string skeletonJSONPath) { + string dir = Path.GetDirectoryName(skeletonJSONPath); + TextAsset textAsset = (TextAsset)AssetDatabase.LoadAssetAtPath(skeletonJSONPath, typeof(TextAsset)); + DirectoryInfo dirInfo = new DirectoryInfo(dir); + FileInfo[] files = dirInfo.GetFiles("*.asset"); + + foreach (var path in files) { + string localPath = dir + "/" + path.Name; + var obj = AssetDatabase.LoadAssetAtPath(localPath, typeof(Object)); + var skeletonDataAsset = obj as SkeletonDataAsset; + if (skeletonDataAsset != null && skeletonDataAsset.skeletonJSON == textAsset) + return true; + } + + return false; + } + + public static bool IsValidSpineData (TextAsset asset) { + if (asset.name.Contains(".skel")) return true; + + object obj = null; + obj = Json.Deserialize(new StringReader(asset.text)); + + if (obj == null) { + Debug.LogError("Is not valid JSON."); + return false; + } + + var root = obj as Dictionary; + if (root == null) { + Debug.LogError("Parser returned an incorrect type."); + return false; + } + + return root.ContainsKey("skeleton"); + + // TODO: Warn users of old version incompatibility. + // var skeletonInfo = (Dictionary)root["skeleton"]; + // string spineVersion = (string)skeletonInfo["spine"]; + } + #endregion #region SkeletonAnimation Menu [MenuItem("Assets/Spine/Instantiate (SkeletonAnimation)", false, 10)] @@ -963,18 +968,20 @@ namespace Spine.Unity.Editor { } public static SkeletonAnimation InstantiateSkeletonAnimation (SkeletonDataAsset skeletonDataAsset, string skinName) { - return InstantiateSkeletonAnimation(skeletonDataAsset, skeletonDataAsset.GetSkeletonData(true).FindSkin(skinName)); + var skeletonData = skeletonDataAsset.GetSkeletonData(true); + var skin = skeletonData != null ? skeletonData.FindSkin(skinName) : null; + return InstantiateSkeletonAnimation(skeletonDataAsset, skin); } public static SkeletonAnimation InstantiateSkeletonAnimation (SkeletonDataAsset skeletonDataAsset, Skin skin = null) { string spineGameObjectName = string.Format("Spine GameObject ({0})", skeletonDataAsset.name.Replace("_SkeletonData", "")); GameObject go = new GameObject(spineGameObjectName, typeof(MeshFilter), typeof(MeshRenderer), typeof(SkeletonAnimation)); - SkeletonAnimation anim = go.GetComponent(); - anim.skeletonDataAsset = skeletonDataAsset; + SkeletonAnimation newSkeletonAnimation = go.GetComponent(); + newSkeletonAnimation.skeletonDataAsset = skeletonDataAsset; bool requiresNormals = false; - foreach (AtlasAsset atlasAsset in anim.skeletonDataAsset.atlasAssets) { + foreach (AtlasAsset atlasAsset in newSkeletonAnimation.skeletonDataAsset.atlasAssets) { foreach (Material m in atlasAsset.materials) { if (m.shader.name.Contains("Lit")) { requiresNormals = true; @@ -982,10 +989,8 @@ namespace Spine.Unity.Editor { } } } - - - - anim.calculateNormals = requiresNormals; + + newSkeletonAnimation.calculateNormals = requiresNormals; SkeletonData data = skeletonDataAsset.GetSkeletonData(true); @@ -994,8 +999,12 @@ namespace Spine.Unity.Editor { string reloadAtlasPath = AssetDatabase.GetAssetPath(skeletonDataAsset.atlasAssets[i]); skeletonDataAsset.atlasAssets[i] = (AtlasAsset)AssetDatabase.LoadAssetAtPath(reloadAtlasPath, typeof(AtlasAsset)); } + data = skeletonDataAsset.GetSkeletonData(false); + } - data = skeletonDataAsset.GetSkeletonData(true); + if (data == null) { + Debug.LogWarning("Tried to instantiate a skeleton from an invalid SkeletonDataAsset."); + return null; } if (skin == null) @@ -1004,17 +1013,17 @@ namespace Spine.Unity.Editor { if (skin == null) skin = data.Skins.Items[0]; - anim.Initialize(false); + newSkeletonAnimation.Initialize(false); - anim.skeleton.SetSkin(skin); - anim.initialSkinName = skin.Name; + newSkeletonAnimation.skeleton.SetSkin(skin); + newSkeletonAnimation.initialSkinName = skin.Name; - anim.skeleton.Update(1); - anim.state.Update(1); - anim.state.Apply(anim.skeleton); - anim.skeleton.UpdateWorldTransform(); + newSkeletonAnimation.skeleton.Update(1); + newSkeletonAnimation.state.Update(1); + newSkeletonAnimation.state.Apply(newSkeletonAnimation.skeleton); + newSkeletonAnimation.skeleton.UpdateWorldTransform(); - return anim; + return newSkeletonAnimation; } #endregion @@ -1115,37 +1124,7 @@ namespace Spine.Unity.Editor { #endif #endregion - #region Spine Preferences - static bool preferencesLoaded = false; - - [PreferenceItem("Spine")] - static void PreferencesGUI () { - if (!preferencesLoaded) { - preferencesLoaded = true; - defaultMix = EditorPrefs.GetFloat(DEFAULT_MIX_KEY, 0.2f); - } - - - EditorGUILayout.LabelField("Auto-Import Settings", EditorStyles.boldLabel); - EditorGUI.BeginChangeCheck(); - defaultMix = EditorGUILayout.FloatField("Default Mix", defaultMix); - if (EditorGUI.EndChangeCheck()) - EditorPrefs.SetFloat(DEFAULT_MIX_KEY, defaultMix); - - GUILayout.Space(20); - EditorGUILayout.LabelField("3rd Party Settings", EditorStyles.boldLabel); - GUILayout.BeginHorizontal(); - EditorGUILayout.PrefixLabel("TK2D"); - - if (GUILayout.Button("Enable", GUILayout.Width(64))) - EnableTK2D(); - if (GUILayout.Button("Disable", GUILayout.Width(64))) - DisableTK2D(); - GUILayout.EndHorizontal(); - } - #endregion - - //TK2D Support + #region TK2D Support const string SPINE_TK2D_DEFINE = "SPINE_TK2D"; static void EnableTK2D () { @@ -1195,32 +1174,10 @@ namespace Spine.Unity.Editor { Debug.LogWarning("Already Removed Scripting Define Symbol " + SPINE_TK2D_DEFINE); } } + #endregion - public class AtlasRequirementLoader : AttachmentLoader { - - List requirementList; - public AtlasRequirementLoader (List requirementList) { - this.requirementList = requirementList; - } - - public RegionAttachment NewRegionAttachment (Skin skin, string name, string path) { - requirementList.Add(path); - return new RegionAttachment(name); - } - - public MeshAttachment NewMeshAttachment (Skin skin, string name, string path) { - requirementList.Add(path); - return new MeshAttachment(name); - } - - public WeightedMeshAttachment NewWeightedMeshAttachment(Skin skin, string name, string path) { - requirementList.Add(path); - return new WeightedMeshAttachment(name); - } - - public BoundingBoxAttachment NewBoundingBoxAttachment (Skin skin, string name) { - return new BoundingBoxAttachment(name); - } + public static string GetPathSafeRegionName (AtlasRegion region) { + return region.name.Replace("/", "_"); } } diff --git a/spine-unity/Assets/spine-unity/Modules/Ghost/Shaders/SkeletonGhost.shader b/spine-unity/Assets/spine-unity/Modules/Ghost/Shaders/SkeletonGhost.shader index 1494a89d6..bda3f4684 100644 --- a/spine-unity/Assets/spine-unity/Modules/Ghost/Shaders/SkeletonGhost.shader +++ b/spine-unity/Assets/spine-unity/Modules/Ghost/Shaders/SkeletonGhost.shader @@ -1,5 +1,5 @@ //Shader written by Alex Dixon -Shader "Spine/SkeletonGhost" +Shader "Spine/Special/SkeletonGhost" { Properties { @@ -32,14 +32,12 @@ Shader "Spine/SkeletonGhost" float4 vertex : POSITION; float2 texcoord : TEXCOORD0; float4 color : COLOR; - }; struct vertex_output { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; - float4 color : COLOR; }; diff --git a/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhost.cs b/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhost.cs index 3de748487..0244fcfa4 100644 --- a/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhost.cs +++ b/spine-unity/Assets/spine-unity/Modules/Ghost/SkeletonGhost.cs @@ -38,7 +38,7 @@ namespace Spine.Unity.Modules { void Start () { if (ghostShader == null) - ghostShader = Shader.Find("Spine/SkeletonGhost"); + ghostShader = Shader.Find("Spine/Special/SkeletonGhost"); skeletonRenderer = GetComponent(); meshFilter = GetComponent(); diff --git a/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs b/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs index 649345d0e..a5495946e 100644 --- a/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs +++ b/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdoll2DInspector.cs @@ -7,47 +7,5 @@ using UnityEngine; using UnityEditor; namespace Spine.Unity.Modules { - [CustomEditor(typeof(SkeletonRagdoll2D))] - public class SkeletonRagdoll2DInspector : UnityEditor.Editor { - SerializedProperty startingBoneName, stopBoneNames, applyOnStart, pinStartBone, enableJointCollision, gravityScale, disableIK, thickness, rotationLimit, colliderLayer, mix, rootMass, massFalloffFactor; - - void OnEnable () { - startingBoneName = serializedObject.FindProperty("startingBoneName"); - stopBoneNames = serializedObject.FindProperty("stopBoneNames"); - applyOnStart = serializedObject.FindProperty("applyOnStart"); - pinStartBone = serializedObject.FindProperty("pinStartBone"); - gravityScale = serializedObject.FindProperty("gravityScale"); - disableIK = serializedObject.FindProperty("disableIK"); - thickness = serializedObject.FindProperty("thickness"); - rotationLimit = serializedObject.FindProperty("rotationLimit"); - colliderLayer = serializedObject.FindProperty("colliderLayer"); - mix = serializedObject.FindProperty("mix"); - rootMass = serializedObject.FindProperty("rootMass"); - massFalloffFactor = serializedObject.FindProperty("massFalloffFactor"); - } - - public override void OnInspectorGUI () { - EditorGUILayout.PropertyField(startingBoneName); - EditorGUILayout.PropertyField(stopBoneNames, true); - EditorGUILayout.PropertyField(applyOnStart); - EditorGUILayout.PropertyField(pinStartBone); - EditorGUILayout.PropertyField(gravityScale); - EditorGUILayout.PropertyField(disableIK); - EditorGUILayout.PropertyField(thickness); - EditorGUILayout.PropertyField(rotationLimit); - EditorGUILayout.PropertyField(rootMass); - EditorGUILayout.PropertyField(massFalloffFactor); - colliderLayer.intValue = EditorGUILayout.LayerField(colliderLayer.displayName, colliderLayer.intValue); - EditorGUILayout.PropertyField(mix); - - - serializedObject.ApplyModifiedProperties(); - } - - void Header (string name) { - GUILayout.Space(20); - EditorGUILayout.LabelField(name, EditorStyles.boldLabel); - } - } - + public class SkeletonRagdoll2DInspector {} } diff --git a/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdollInspector.cs b/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdollInspector.cs index bac20be1b..ee2828665 100644 --- a/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdollInspector.cs +++ b/spine-unity/Assets/spine-unity/Modules/Ragdoll/Editor/SkeletonRagdollInspector.cs @@ -5,51 +5,15 @@ using UnityEngine; using UnityEditor; -using System.Collections; -using System.Collections.Generic; namespace Spine.Unity.Modules { - [CustomEditor(typeof(SkeletonRagdoll))] + public class SkeletonRagdollInspector : UnityEditor.Editor { - SerializedProperty startingBoneName, stopBoneNames, applyOnStart, pinStartBone, enableJointCollision, useGravity, disableIK, thickness, rotationLimit, colliderLayer, mix, rootMass, massFalloffFactor; - - void OnEnable () { - startingBoneName = serializedObject.FindProperty("startingBoneName"); - stopBoneNames = serializedObject.FindProperty("stopBoneNames"); - applyOnStart = serializedObject.FindProperty("applyOnStart"); - pinStartBone = serializedObject.FindProperty("pinStartBone"); - enableJointCollision = serializedObject.FindProperty("enableJointCollision"); - useGravity = serializedObject.FindProperty("useGravity"); - disableIK = serializedObject.FindProperty("disableIK"); - thickness = serializedObject.FindProperty("thickness"); - rotationLimit = serializedObject.FindProperty("rotationLimit"); - colliderLayer = serializedObject.FindProperty("colliderLayer"); - mix = serializedObject.FindProperty("mix"); - rootMass = serializedObject.FindProperty("rootMass"); - massFalloffFactor = serializedObject.FindProperty("massFalloffFactor"); - } - - public override void OnInspectorGUI () { - EditorGUILayout.PropertyField(startingBoneName); - EditorGUILayout.PropertyField(stopBoneNames, true); - EditorGUILayout.PropertyField(applyOnStart); - EditorGUILayout.PropertyField(pinStartBone); - EditorGUILayout.PropertyField(enableJointCollision); - EditorGUILayout.PropertyField(useGravity); - EditorGUILayout.PropertyField(disableIK); - EditorGUILayout.PropertyField(thickness); - EditorGUILayout.PropertyField(rotationLimit); - EditorGUILayout.PropertyField(rootMass); - EditorGUILayout.PropertyField(massFalloffFactor); - colliderLayer.intValue = EditorGUILayout.LayerField(colliderLayer.displayName, colliderLayer.intValue); - EditorGUILayout.PropertyField(mix); - - serializedObject.ApplyModifiedProperties(); - } - - void Header (string name) { - GUILayout.Space(20); - EditorGUILayout.LabelField(name, EditorStyles.boldLabel); + [CustomPropertyDrawer(typeof(SkeletonRagdoll.LayerFieldAttribute))] + public class LayerFieldPropertyDrawer : PropertyDrawer { + public override void OnGUI (Rect position, SerializedProperty property, GUIContent label) { + property.intValue = EditorGUI.LayerField(position, label, property.intValue); + } } } diff --git a/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs index 1275edb25..b8674180b 100644 --- a/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs +++ b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs @@ -10,8 +10,9 @@ using System.Collections.Generic; namespace Spine.Unity.Modules { [RequireComponent(typeof(SkeletonRenderer))] public class SkeletonRagdoll : MonoBehaviour { - private static Transform helper; + static Transform parentSpaceHelper; + #region Inspector [Header("Hierarchy")] [SpineBone] public string startingBoneName = ""; @@ -39,53 +40,153 @@ namespace Spine.Unity.Modules { public int colliderLayer = 0; [Range(0, 1)] public float mix = 1; + #endregion - public Rigidbody RootRigidbody { - get { - return this.rootRigidbody; - } - } - - public Vector3 RootOffset { - get { - return this.rootOffset; - } - } - - public Vector3 EstimatedSkeletonPosition { - get { - return rootRigidbody.position - rootOffset; - } - } - - public bool IsActive { - get { - return this.isActive; - } - } - - private Rigidbody rootRigidbody; - private ISkeletonAnimation skeletonAnim; - private Skeleton skeleton; - private Dictionary boneTable = new Dictionary(); - private Bone startingBone; - private Transform ragdollRoot; - private Vector3 rootOffset; - private bool isActive; + ISkeletonAnimation targetSkeletonComponent; + Skeleton skeleton; + Dictionary boneTable = new Dictionary(); + Transform ragdollRoot; + public Rigidbody RootRigidbody { get; private set; } + public Bone StartingBone { get; private set; } + Vector3 rootOffset; + public Vector3 RootOffset { get { return this.rootOffset; } } + bool isActive; + public bool IsActive { get { return this.isActive; } } IEnumerator Start () { - skeletonAnim = (ISkeletonAnimation)GetComponent(); - if (helper == null) { - helper = (Transform)(new GameObject("Helper")).transform; - helper.hideFlags = HideFlags.HideInHierarchy; + if (parentSpaceHelper == null) { + parentSpaceHelper = (new GameObject("Parent Space Helper")).transform; + parentSpaceHelper.hideFlags = HideFlags.HideInHierarchy; } + targetSkeletonComponent = GetComponent() as ISkeletonAnimation; + if (targetSkeletonComponent == null) Debug.LogError("Attached Spine component does not implement ISkeletonAnimation. This script is not compatible."); + skeleton = targetSkeletonComponent.Skeleton; + if (applyOnStart) { yield return null; Apply(); } } + #region API + public Rigidbody[] RigidbodyArray { + get { + if (!isActive) + return new Rigidbody[0]; + + var rigidBodies = new Rigidbody[boneTable.Count]; + int i = 0; + foreach (Transform t in boneTable.Values) { + rigidBodies[i] = t.GetComponent(); + i++; + } + + return rigidBodies; + } + } + + public Vector3 EstimatedSkeletonPosition { + get { return RootRigidbody.position - rootOffset; } + } + + /// Instantiates the ragdoll simulation and applies its transforms to the skeleton. + public void Apply () { + isActive = true; + mix = 1; + + StartingBone = skeleton.FindBone(startingBoneName); + RecursivelyCreateBoneProxies(StartingBone); + + RootRigidbody = boneTable[StartingBone].GetComponent(); + RootRigidbody.isKinematic = pinStartBone; + RootRigidbody.mass = rootMass; + var boneColliders = new List(); + foreach (var pair in boneTable) { + var b = pair.Key; + var t = pair.Value; + Transform parentTransform; + boneColliders.Add(t.GetComponent()); + if (b == StartingBone) { +// skeletonSpaceTransform = new GameObject("Spine World Space Transform").transform; +// skeletonSpaceTransform.hideFlags = HideFlags.NotEditable; +// skeletonSpaceTransform.localScale = FlipScale(skeleton.flipX, skeleton.flipY); +// skeletonSpaceTransform.SetParent(this.transform, false); + ragdollRoot = new GameObject("RagdollRoot").transform; + ragdollRoot.SetParent(transform, false); + if (b == skeleton.RootBone) { // RagdollRoot is skeleton root. + ragdollRoot.localPosition = new Vector3(b.WorldX, b.WorldY, 0); + ragdollRoot.localRotation = Quaternion.Euler(0, 0, GetPropagatedRotation(b)); + } else { + ragdollRoot.localPosition = new Vector3(b.Parent.WorldX, b.Parent.WorldY, 0); + ragdollRoot.localRotation = Quaternion.Euler(0, 0, GetPropagatedRotation(b.Parent)); + } + parentTransform = ragdollRoot; + rootOffset = t.position - transform.position; + } else { + parentTransform = boneTable[b.Parent]; + } + + // Add joint and attach to parent. + var rbParent = parentTransform.GetComponent(); + if (rbParent != null) { + var joint = t.gameObject.AddComponent(); + joint.connectedBody = rbParent; + Vector3 localPos = parentTransform.InverseTransformPoint(t.position); + localPos.x *= 1; + joint.connectedAnchor = localPos; + joint.axis = Vector3.forward; + + joint.GetComponent().mass = joint.connectedBody.mass * massFalloffFactor; + joint.limits = new JointLimits { + min = -rotationLimit, + max = rotationLimit, + }; + joint.useLimits = true; + joint.enableCollision = enableJointCollision; + } + } + + // Ignore collisions among bones. + for (int x = 0; x < boneColliders.Count; x++) { + for (int y = 0; y < boneColliders.Count; y++) { + if (x == y) continue; + Physics.IgnoreCollision(boneColliders[x], boneColliders[y]); + } + } + + // Destroy existing override-mode SkeletonUtilityBones. + var utilityBones = GetComponentsInChildren(); + if (utilityBones.Length > 0) { + var destroyedUtilityBoneNames = new List(); + foreach (var ub in utilityBones) { + if (ub.mode == SkeletonUtilityBone.Mode.Override) { + destroyedUtilityBoneNames.Add(ub.gameObject.name); + Destroy(ub.gameObject); + } + } + if (destroyedUtilityBoneNames.Count > 0) { + string msg = "Destroyed Utility Bones: "; + for (int i = 0; i < destroyedUtilityBoneNames.Count; i++) { + msg += destroyedUtilityBoneNames[i]; + if (i != destroyedUtilityBoneNames.Count - 1) { + msg += ","; + } + } + Debug.LogWarning(msg); + } + } + + // Disable IK constraints. + if (disableIK) { + foreach (IkConstraint ik in skeleton.IkConstraints) + ik.Mix = 0; + } + + targetSkeletonComponent.UpdateWorld += UpdateSpineSkeleton; + } + + /// Transitions the mix value from the current value to a target value. public Coroutine SmoothMix (float target, float duration) { return StartCoroutine(SmoothMixCoroutine(target, duration)); } @@ -99,6 +200,7 @@ namespace Spine.Unity.Modules { } } + /// Set the transform world position while preserving the ragdoll parts world position. public void SetSkeletonPosition (Vector3 worldPosition) { if (!isActive) { Debug.LogWarning("Can't call SetSkeletonPosition while Ragdoll is not active!"); @@ -111,35 +213,11 @@ namespace Spine.Unity.Modules { t.position -= offset; } - UpdateWorld(null); + UpdateSpineSkeleton(null); skeleton.UpdateWorldTransform(); } - public Rigidbody[] GetRigidbodyArray () { - if (!isActive) - return new Rigidbody[0]; - - Rigidbody[] arr = new Rigidbody[boneTable.Count]; - int i = 0; - foreach (Transform t in boneTable.Values) { - arr[i] = t.GetComponent(); - i++; - } - - return arr; - } - - public Rigidbody GetRigidbody (string boneName) { - var bone = skeleton.FindBone(boneName); - if (bone == null) - return null; - - if (boneTable.ContainsKey(bone)) - return boneTable[bone].GetComponent(); - - return null; - } - + /// Removes the ragdoll instance and effect from the animated skeleton. public void Remove () { isActive = false; foreach (var t in boneTable.Values) { @@ -148,198 +226,120 @@ namespace Spine.Unity.Modules { Destroy(ragdollRoot.gameObject); boneTable.Clear(); - skeletonAnim.UpdateWorld -= UpdateWorld; + targetSkeletonComponent.UpdateWorld -= UpdateSpineSkeleton; } - public void Apply () { - isActive = true; - skeleton = skeletonAnim.Skeleton; - mix = 1; - - var ragdollRootBone = skeleton.FindBone(startingBoneName); - startingBone = ragdollRootBone; - RecursivelyCreateBoneProxies(ragdollRootBone); - - rootRigidbody = boneTable[ragdollRootBone].GetComponent(); - rootRigidbody.isKinematic = pinStartBone; - - rootRigidbody.mass = rootMass; - - List boneColliders = new List(); - - foreach (var pair in boneTable) { - var b = pair.Key; - var t = pair.Value; - Bone parentBone = null; - Transform parentTransform = transform; - - boneColliders.Add(t.GetComponent()); - - if (b != startingBone) { - parentBone = b.Parent; - parentTransform = boneTable[parentBone]; - } else { - ragdollRoot = new GameObject("RagdollRoot").transform; - ragdollRoot.parent = transform; - - if (b == skeleton.RootBone) { - ragdollRoot.localPosition = new Vector3(b.WorldX, b.WorldY, 0); - ragdollRoot.localRotation = Quaternion.Euler(0, 0, GetCompensatedRotationIK(b)); - parentTransform = ragdollRoot; - } else { - ragdollRoot.localPosition = new Vector3(b.Parent.WorldX, b.Parent.WorldY, 0); - ragdollRoot.localRotation = Quaternion.Euler(0, 0, GetCompensatedRotationIK(b.Parent)); - parentTransform = ragdollRoot; - } - - rootOffset = t.position - transform.position; - } - - var rbParent = parentTransform.GetComponent(); - - if (rbParent != null) { - var joint = t.gameObject.AddComponent(); - joint.connectedBody = rbParent; - Vector3 localPos = parentTransform.InverseTransformPoint(t.position); - localPos.x *= 1; - joint.connectedAnchor = localPos; - joint.axis = Vector3.forward; - joint.GetComponent().mass = joint.connectedBody.mass * massFalloffFactor; - JointLimits limits = new JointLimits(); - limits.min = -rotationLimit; - limits.max = rotationLimit; - joint.limits = limits; - joint.useLimits = true; - joint.enableCollision = enableJointCollision; - } - } - - for (int x = 0; x < boneColliders.Count; x++) { - for (int y = 0; y < boneColliders.Count; y++) { - if (x == y) continue; - Physics.IgnoreCollision(boneColliders[x], boneColliders[y]); - } - } - - var utilityBones = GetComponentsInChildren(); - if (utilityBones.Length > 0) { - List destroyedUtilityBoneNames = new List(); - foreach (var ub in utilityBones) { - if (ub.mode == SkeletonUtilityBone.Mode.Override) { - destroyedUtilityBoneNames.Add(ub.gameObject.name); - Destroy(ub.gameObject); - } - } - - if (destroyedUtilityBoneNames.Count > 0) { - string msg = "Destroyed Utility Bones: "; - for (int i = 0; i < destroyedUtilityBoneNames.Count; i++) { - msg += destroyedUtilityBoneNames[i]; - if (i != destroyedUtilityBoneNames.Count - 1) { - msg += ","; - } - } - Debug.LogWarning(msg); - } - } - - if (disableIK) { - foreach (IkConstraint ik in skeleton.IkConstraints) { - ik.Mix = 0; - } - } - - skeletonAnim.UpdateWorld += UpdateWorld; + public Rigidbody GetRigidbody (string boneName) { + var bone = skeleton.FindBone(boneName); + return (bone != null && boneTable.ContainsKey(bone)) ? boneTable[bone].GetComponent() : null; } + #endregion void RecursivelyCreateBoneProxies (Bone b) { - if (stopBoneNames.Contains(b.Data.Name)) + string boneName = b.data.name; + if (stopBoneNames.Contains(boneName)) return; - GameObject go = new GameObject(b.Data.Name); - go.layer = colliderLayer; - Transform t = go.transform; + var boneGameObject = new GameObject(boneName); + boneGameObject.layer = colliderLayer; + Transform t = boneGameObject.transform; boneTable.Add(b, t); t.parent = transform; - t.localPosition = new Vector3(b.WorldX, b.WorldY, 0); - // MITCH - // t.localRotation = Quaternion.Euler(0, 0, b.WorldFlipX ^ b.WorldFlipY ? -b.WorldRotation : b.WorldRotation); t.localRotation = Quaternion.Euler(0, 0, b.WorldRotationX); t.localScale = new Vector3(b.WorldScaleX, b.WorldScaleY, 1); - float length = b.Data.Length; - + // MITCH: You left "todo: proper ragdoll branching" var colliders = AttachBoundingBoxRagdollColliders(b); - - if (length == 0) { - //physics - if (colliders.Count == 0) { - var ball = go.AddComponent(); - ball.radius = thickness / 2f; - } - } else { - //physics - if (colliders.Count == 0) { - var box = go.AddComponent(); + if (colliders.Count == 0) { + float length = b.Data.Length; + if (length == 0) { + var ball = boneGameObject.AddComponent(); + ball.radius = thickness * 0.5f; + } else { + var box = boneGameObject.AddComponent(); box.size = new Vector3(length, thickness, thickness); - // MITCH - // box.center = new Vector3((b.WorldFlipX ? -length : length) / 2, 0); - box.center = new Vector3(length / 2, 0); + box.center = new Vector3(length * 0.5f, 0); } } - - var rb = go.AddComponent(); + var rb = boneGameObject.AddComponent(); rb.constraints = RigidbodyConstraints.FreezePositionZ; + foreach (Bone child in b.Children) { RecursivelyCreateBoneProxies(child); } } + void UpdateSpineSkeleton (ISkeletonAnimation skeletonRenderer) { + bool flipX = skeleton.flipX; + bool flipY = skeleton.flipY; + bool flipXOR = flipX ^ flipY; + bool flipOR = flipX || flipY; + + foreach (var pair in boneTable) { + var b = pair.Key; + var t = pair.Value; + bool isStartingBone = b == StartingBone; + Transform parentTransform = isStartingBone ? ragdollRoot : boneTable[b.Parent]; + Vector3 parentTransformWorldPosition = parentTransform.position; + Quaternion parentTransformWorldRotation = parentTransform.rotation; + + parentSpaceHelper.position = parentTransformWorldPosition; + parentSpaceHelper.rotation = parentTransformWorldRotation; + parentSpaceHelper.localScale = parentTransform.localScale; + + Vector3 boneWorldPosition = t.position; + Vector3 right = parentSpaceHelper.InverseTransformDirection(t.right); + + Vector3 boneLocalPosition = parentSpaceHelper.InverseTransformPoint(boneWorldPosition); + float boneLocalRotation = Mathf.Atan2(right.y, right.x) * Mathf.Rad2Deg; + + if (flipOR) { + if (isStartingBone) { + if (flipX) boneLocalPosition.x *= -1f; + if (flipY) boneLocalPosition.y *= -1f; + + boneLocalRotation = boneLocalRotation * (flipXOR ? -1f : 1f); + if (flipX) boneLocalRotation += 180; + } else { + if (flipXOR) { + boneLocalRotation *= -1f; + boneLocalPosition.y *= -1f; // wtf?? + } + } + } + + b.x = Mathf.Lerp(b.x, boneLocalPosition.x, mix); + b.y = Mathf.Lerp(b.y, boneLocalPosition.y, mix); + b.rotation = Mathf.Lerp(b.rotation, boneLocalRotation, mix); + b.appliedRotation = Mathf.Lerp(b.appliedRotation, boneLocalRotation, mix); + } + } + List AttachBoundingBoxRagdollColliders (Bone b) { - List colliders = new List(); + const string AttachmentNameMarker = "ragdoll"; + var colliders = new List(); Transform t = boneTable[b]; GameObject go = t.gameObject; - var skin = skeleton.Skin; - if (skin == null) - skin = skeleton.Data.DefaultSkin; + var skin = skeleton.Skin ?? skeleton.Data.DefaultSkin; - // MITCH - // bool flipX = b.WorldFlipX; - // bool flipY = b.WorldFlipY; - bool flipX = false; - bool flipY = false; - - List attachments = new List(); + var attachments = new List(); foreach (Slot s in skeleton.Slots) { if (s.Bone == b) { skin.FindAttachmentsForSlot(skeleton.Slots.IndexOf(s), attachments); foreach (var a in attachments) { - if (a is BoundingBoxAttachment) { - if (!a.Name.ToLower().Contains("ragdoll")) + var bbAttachment = a as BoundingBoxAttachment; + if (bbAttachment != null) { + if (!a.Name.ToLower().Contains(AttachmentNameMarker)) continue; - var collider = go.AddComponent(); - var bounds = SkeletonUtility.GetBoundingBoxBounds((BoundingBoxAttachment)a, thickness); - - collider.center = bounds.center; - collider.size = bounds.size; - - if (flipX || flipY) { - Vector3 center = collider.center; - - if (flipX) - center.x *= -1; - - if (flipY) - center.y *= -1; - - collider.center = center; - } - - colliders.Add(collider); + var bbCollider = go.AddComponent(); + var bounds = SkeletonUtility.GetBoundingBoxBounds(bbAttachment, thickness); + bbCollider.center = bounds.center; + bbCollider.size = bounds.size; + colliders.Add(bbCollider); } } } @@ -348,81 +348,17 @@ namespace Spine.Unity.Modules { return colliders; } - void UpdateWorld (ISkeletonAnimation skeletonRenderer) { - foreach (var pair in boneTable) { - var b = pair.Key; - var t = pair.Value; - // bool flip = false; - bool flipX = false; //TODO: deal with negative scale instead of Flip Key for Spine 3.0 - bool flipY = false; //TODO: deal with negative scale instead of Flip Key for Spine 3.0 - Bone parentBone = null; - Transform parentTransform = transform; - - if (b != startingBone) { - parentBone = b.Parent; - parentTransform = boneTable[parentBone]; - // MITCH - // flipX = parentBone.WorldFlipX; - // flipY = parentBone.WorldFlipY; - - } else { - parentBone = b.Parent; - parentTransform = ragdollRoot; - if (b.Parent != null) { - // MITCH - // flipX = b.worldFlipX; - // flipY = b.WorldFlipY; - } else { - flipX = b.Skeleton.FlipX; - flipY = b.Skeleton.FlipY; - } - } - - //flip = flipX ^ flipY; - - helper.position = parentTransform.position; - helper.rotation = parentTransform.rotation; - helper.localScale = new Vector3(flipX ? -parentTransform.localScale.x : parentTransform.localScale.x, flipY ? -parentTransform.localScale.y : parentTransform.localScale.y, 1); - - - Vector3 pos = t.position; - pos = helper.InverseTransformPoint(pos); - b.X = Mathf.Lerp(b.X, pos.x, mix); - b.Y = Mathf.Lerp(b.Y, pos.y, mix); - - Vector3 right = helper.InverseTransformDirection(t.right); - - float a = Mathf.Atan2(right.y, right.x) * Mathf.Rad2Deg; - - // MITCH - //if (b.WorldFlipX ^ b.WorldFlipY) { - // a *= -1; - //} - - if (parentBone != null) { - // MITCH - //if ((b.WorldFlipX ^ b.WorldFlipY) != flip) { - // a -= GetCompensatedRotationIK(parentBone) * 2; - //} - } - - b.Rotation = Mathf.Lerp(b.Rotation, a, mix); - // MITCH - // b.RotationIK = Mathf.Lerp(b.rotationIK, a, mix); - } - } - - float GetCompensatedRotationIK (Bone b) { + static float GetPropagatedRotation (Bone b) { Bone parent = b.Parent; - // MITCH float a = b.AppliedRotation; while (parent != null) { a += parent.AppliedRotation; parent = parent.parent; } - return a; } + + public class LayerFieldAttribute : PropertyAttribute {} } } diff --git a/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs index 79a3d6f6a..2972d3fae 100644 --- a/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs +++ b/spine-unity/Assets/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs @@ -2,16 +2,27 @@ * SkeletonRagdoll2D added by Mitch Thompson * Full irrevocable rights and permissions granted to Esoteric Software *****************************************************************************/ +//#define FLIPDEBUG using UnityEngine; using System.Collections; using System.Collections.Generic; using Spine.Unity; +using UnityEngine.Assertions; namespace Spine.Unity.Modules { [RequireComponent(typeof(SkeletonRenderer))] public class SkeletonRagdoll2D : MonoBehaviour { - private static Transform helper; + static Transform parentSpaceHelper; + + #region Inspector + #if FLIPDEBUG + [Header("DEBUG")] + public bool flipXInitially; + public bool flipYInitially; + public bool spawnKinematic; + public bool disableUpdateBones; + #endif [Header("Hierarchy")] [SpineBone] @@ -35,49 +46,163 @@ namespace Spine.Unity.Modules { [Range(0.01f, 1f)] public float massFalloffFactor = 0.4f; [Tooltip("The layer assigned to all of the rigidbody parts.")] + [SkeletonRagdoll.LayerField] public int colliderLayer = 0; [Range(0, 1)] public float mix = 1; + #endregion - public Rigidbody2D RootRigidbody { - get { return this.rootRigidbody; } - } - - public Vector3 RootOffset { - get { return this.rootOffset; } - } - - public Vector3 EstimatedSkeletonPosition { - get { return this.rootRigidbody.position - rootOffset; } - } - - public bool IsActive { - get { return this.isActive; } - } - - private Rigidbody2D rootRigidbody; - private ISkeletonAnimation skeletonAnim; - private Skeleton skeleton; - private Dictionary boneTable = new Dictionary(); - private Bone startingBone; - private Transform ragdollRoot; - private Vector2 rootOffset; - private bool isActive; - + ISkeletonAnimation targetSkeletonComponent; + Skeleton skeleton; + Dictionary boneTable = new Dictionary(); + Transform ragdollRoot; + public Rigidbody2D RootRigidbody { get; private set; } + public Bone StartingBone { get; private set; } + Vector2 rootOffset; + public Vector3 RootOffset { get { return this.rootOffset; } } + bool isActive; + public bool IsActive { get { return this.isActive; } } +// public Transform skeletonSpaceTransform; IEnumerator Start () { - skeletonAnim = (ISkeletonAnimation)GetComponent(); - if (helper == null) { - helper = (Transform)(new GameObject("Helper")).transform; - helper.hideFlags = HideFlags.HideInHierarchy; + if (parentSpaceHelper == null) { + parentSpaceHelper = (new GameObject("Parent Space Helper")).transform; + #if !FLIPDEBUG + parentSpaceHelper.hideFlags = HideFlags.HideInHierarchy; + #endif } + targetSkeletonComponent = GetComponent() as ISkeletonAnimation; + if (targetSkeletonComponent == null) Debug.LogError("Attached Spine component does not implement ISkeletonAnimation. This script is not compatible."); + skeleton = targetSkeletonComponent.Skeleton; + + #if FLIPDEBUG + skeleton.flipX = flipXInitially; + skeleton.flipY = flipYInitially; + #endif + if (applyOnStart) { yield return null; Apply(); } } + #region API + public Rigidbody2D[] RigidbodyArray { + get { + if (!isActive) + return new Rigidbody2D[0]; + + var rigidBodies = new Rigidbody2D[boneTable.Count]; + int i = 0; + foreach (Transform t in boneTable.Values) { + rigidBodies[i] = t.GetComponent(); + i++; + } + + return rigidBodies; + } + } + + public Vector3 EstimatedSkeletonPosition { + get { return this.RootRigidbody.position - rootOffset; } + } + + /// Instantiates the ragdoll simulation and applies its transforms to the skeleton. + public void Apply () { + isActive = true; + mix = 1; + + Bone startingBone = this.StartingBone = skeleton.FindBone(startingBoneName); + RecursivelyCreateBoneProxies(startingBone); + + RootRigidbody = boneTable[startingBone].GetComponent(); + #if FLIPDEBUG + if (!RootRigidbody.isKinematic) + #endif + RootRigidbody.isKinematic = pinStartBone; + RootRigidbody.mass = rootMass; + var boneColliders = new List(); + foreach (var pair in boneTable) { + var b = pair.Key; + var t = pair.Value; + Transform parentTransform; + boneColliders.Add(t.GetComponent()); + if (b == startingBone) { +// skeletonSpaceTransform = new GameObject("Spine World Space Transform").transform; +// skeletonSpaceTransform.hideFlags = HideFlags.NotEditable; +// skeletonSpaceTransform.localScale = FlipScale(skeleton.flipX, skeleton.flipY); +// skeletonSpaceTransform.SetParent(this.transform, false); + ragdollRoot = new GameObject("RagdollRoot").transform; + ragdollRoot.SetParent(transform, false); + if (b == skeleton.RootBone) { // RagdollRoot is skeleton root. + ragdollRoot.localPosition = new Vector3(b.WorldX, b.WorldY, 0); + ragdollRoot.localRotation = Quaternion.Euler(0, 0, GetPropagatedRotation(b)); + } else { + ragdollRoot.localPosition = new Vector3(b.Parent.WorldX, b.Parent.WorldY, 0); + ragdollRoot.localRotation = Quaternion.Euler(0, 0, GetPropagatedRotation(b.Parent)); + } + parentTransform = ragdollRoot; + rootOffset = t.position - transform.position; + } else { + parentTransform = boneTable[b.Parent]; + } + + // Add joint and attach to parent. + var rbParent = parentTransform.GetComponent(); + if (rbParent != null) { + var joint = t.gameObject.AddComponent(); + joint.connectedBody = rbParent; + Vector3 localPos = parentTransform.InverseTransformPoint(t.position); + joint.connectedAnchor = localPos; + + joint.GetComponent().mass = joint.connectedBody.mass * massFalloffFactor; + joint.limits = new JointAngleLimits2D { + min = -rotationLimit, + max = rotationLimit + }; + joint.useLimits = true; + } + } + + // Ignore collisions among bones. + for (int x = 0; x < boneColliders.Count; x++) { + for (int y = 0; y < boneColliders.Count; y++) { + if (x == y) continue; + Physics2D.IgnoreCollision(boneColliders[x], boneColliders[y]); + } + } + + // Destroy existing override-mode SkeletonUtility bones. + var utilityBones = GetComponentsInChildren(); + if (utilityBones.Length > 0) { + var destroyedUtilityBoneNames = new List(); + foreach (var ub in utilityBones) { + if (ub.mode == SkeletonUtilityBone.Mode.Override) { + destroyedUtilityBoneNames.Add(ub.gameObject.name); + Destroy(ub.gameObject); + } + } + if (destroyedUtilityBoneNames.Count > 0) { + string msg = "Destroyed Utility Bones: "; + for (int i = 0; i < destroyedUtilityBoneNames.Count; i++) { + msg += destroyedUtilityBoneNames[i]; + if (i != destroyedUtilityBoneNames.Count - 1) { + msg += ","; + } + } + Debug.LogWarning(msg); + } + } + // Disable IK constraints. + if (disableIK) { + foreach (IkConstraint ik in skeleton.IkConstraints) + ik.Mix = 0; + } + targetSkeletonComponent.UpdateWorld += UpdateSpineSkeleton; + } + + /// Transitions the mix value from the current value to a target value. public Coroutine SmoothMix (float target, float duration) { return StartCoroutine(SmoothMixCoroutine(target, duration)); } @@ -91,249 +216,160 @@ namespace Spine.Unity.Modules { } } + /// Set the transform world position while preserving the ragdoll parts world position. public void SetSkeletonPosition (Vector3 worldPosition) { if (!isActive) { Debug.LogWarning("Can't call SetSkeletonPosition while Ragdoll is not active!"); return; } - Vector3 offset = worldPosition - transform.position; transform.position = worldPosition; foreach (Transform t in boneTable.Values) { t.position -= offset; } - - UpdateWorld(null); + UpdateSpineSkeleton(null); skeleton.UpdateWorldTransform(); } - public Rigidbody2D[] GetRigidbodyArray () { - if (!isActive) - return new Rigidbody2D[0]; - - Rigidbody2D[] arr = new Rigidbody2D[boneTable.Count]; - int i = 0; - foreach (Transform t in boneTable.Values) { - arr[i] = t.GetComponent(); - i++; - } - - return arr; - } - - public Rigidbody2D GetRigidbody (string boneName) { - var bone = skeleton.FindBone(boneName); - if (bone == null) - return null; - - if (boneTable.ContainsKey(bone)) - return boneTable[bone].GetComponent(); - - return null; - } - + /// Removes the ragdoll instance and effect from the animated skeleton. public void Remove () { isActive = false; foreach (var t in boneTable.Values) { Destroy(t.gameObject); } Destroy(ragdollRoot.gameObject); - boneTable.Clear(); - skeletonAnim.UpdateWorld -= UpdateWorld; + targetSkeletonComponent.UpdateWorld -= UpdateSpineSkeleton; } - public void Apply () { - isActive = true; - skeleton = skeletonAnim.Skeleton; - mix = 1; - - var ragdollRootBone = skeleton.FindBone(startingBoneName); - startingBone = ragdollRootBone; - RecursivelyCreateBoneProxies(ragdollRootBone); - - rootRigidbody = boneTable[ragdollRootBone].GetComponent(); - rootRigidbody.isKinematic = pinStartBone; - rootRigidbody.mass = rootMass; - - List boneColliders = new List(); - - foreach (var pair in boneTable) { - var b = pair.Key; - var t = pair.Value; - Bone parentBone = null; - Transform parentTransform = transform; - - boneColliders.Add(t.GetComponent()); - - if (b != startingBone) { - parentBone = b.Parent; - parentTransform = boneTable[parentBone]; - } else { - ragdollRoot = new GameObject("RagdollRoot").transform; - ragdollRoot.parent = transform; - - if (b == skeleton.RootBone) { - ragdollRoot.localPosition = new Vector3(b.WorldX, b.WorldY, 0); - ragdollRoot.localRotation = Quaternion.Euler(0, 0, GetCompensatedRotationIK(b)); - parentTransform = ragdollRoot; - } else { - ragdollRoot.localPosition = new Vector3(b.Parent.WorldX, b.Parent.WorldY, 0); - ragdollRoot.localRotation = Quaternion.Euler(0, 0, GetCompensatedRotationIK(b.Parent)); - parentTransform = ragdollRoot; - } - - rootOffset = t.position - transform.position; - } - - var rbParent = parentTransform.GetComponent(); - - if (rbParent != null) { - var joint = t.gameObject.AddComponent(); - joint.connectedBody = rbParent; - Vector3 localPos = parentTransform.InverseTransformPoint(t.position); - localPos.x *= 1; - joint.connectedAnchor = localPos; - joint.GetComponent().mass = joint.connectedBody.mass * massFalloffFactor; - JointAngleLimits2D limits = new JointAngleLimits2D(); - limits.min = -rotationLimit; - limits.max = rotationLimit; - joint.limits = limits; - joint.useLimits = true; - } - } - - for (int x = 0; x < boneColliders.Count; x++) { - for (int y = 0; y < boneColliders.Count; y++) { - if (x == y) continue; - Physics2D.IgnoreCollision(boneColliders[x], boneColliders[y]); - } - } - - var utilityBones = GetComponentsInChildren(); - if (utilityBones.Length > 0) { - List destroyedUtilityBoneNames = new List(); - foreach (var ub in utilityBones) { - if (ub.mode == SkeletonUtilityBone.Mode.Override) { - destroyedUtilityBoneNames.Add(ub.gameObject.name); - Destroy(ub.gameObject); - } - } - - if (destroyedUtilityBoneNames.Count > 0) { - string msg = "Destroyed Utility Bones: "; - for (int i = 0; i < destroyedUtilityBoneNames.Count; i++) { - msg += destroyedUtilityBoneNames[i]; - if (i != destroyedUtilityBoneNames.Count - 1) { - msg += ","; - } - } - Debug.LogWarning(msg); - } - } - - if (disableIK) { - foreach (IkConstraint ik in skeleton.IkConstraints) { - ik.Mix = 0; - } - } - - skeletonAnim.UpdateWorld += UpdateWorld; + public Rigidbody2D GetRigidbody (string boneName) { + var bone = skeleton.FindBone(boneName); + return (bone != null && boneTable.ContainsKey(bone)) ? boneTable[bone].GetComponent() : null; } + #endregion + /// Generates the ragdoll simulation's Transform and joint setup. void RecursivelyCreateBoneProxies (Bone b) { - if (stopBoneNames.Contains(b.Data.Name)) + string boneName = b.data.name; + if (stopBoneNames.Contains(boneName)) return; - GameObject go = new GameObject(b.Data.Name); - go.layer = colliderLayer; - Transform t = go.transform; + var boneGameObject = new GameObject(boneName); + boneGameObject.layer = this.colliderLayer; + Transform t = boneGameObject.transform; boneTable.Add(b, t); t.parent = transform; - t.localPosition = new Vector3(b.WorldX, b.WorldY, 0); - //TODO: deal with WorldFlipY - // MITCH - // t.localRotation = Quaternion.Euler(0, 0, b.WorldFlipX ? -b.WorldRotation : b.WorldRotation); t.localRotation = Quaternion.Euler(0, 0, b.WorldRotationX); t.localScale = new Vector3(b.WorldScaleX, b.WorldScaleY, 0); - float length = b.Data.Length; - - //TODO proper ragdoll branching - var colliders = AttachBoundingBoxRagdollColliders(b); - - if (length == 0) { - //physics - if (colliders.Count == 0) { - var circle = go.AddComponent(); - circle.radius = thickness / 2f; - } - } else { - //physics - if (colliders.Count == 0) { - var box = go.AddComponent(); + // MITCH: You left "todo: proper ragdoll branching" + var colliders = AttachBoundingBoxRagdollColliders(b, boneGameObject, skeleton); + if (colliders.Count == 0) { + float length = b.data.length; + if (length == 0) { + var circle = boneGameObject.AddComponent(); + circle.radius = thickness * 0.5f; + } else { + var box = boneGameObject.AddComponent(); box.size = new Vector2(length, thickness); - #if UNITY_5 - // MITCH - // box.offset = new Vector2((b.WorldFlipX ? -length : length) / 2, 0); - box.offset = new Vector2(length / 2, 0); - #else - //box.center = new Vector2((b.WorldFlipX ? -length : length) / 2, 0); - box.center = new Vector2(length/2, 0); - #endif + box.offset = new Vector2(length * 0.5f, 0); // box.center in UNITY_4 } } + var rb = boneGameObject.AddComponent(); + rb.gravityScale = this.gravityScale; - var rb = go.AddComponent(); - rb.gravityScale = gravityScale; + #if FLIPDEBUG + rb.isKinematic = spawnKinematic; + #endif foreach (Bone child in b.Children) { RecursivelyCreateBoneProxies(child); } } - List AttachBoundingBoxRagdollColliders (Bone b) { - List colliders = new List(); - Transform t = boneTable[b]; - GameObject go = t.gameObject; - var skin = skeleton.Skin; - if (skin == null) - skin = skeleton.Data.DefaultSkin; + /// Performed every skeleton animation update to translate Unity Transforms positions into Spine bone transforms. + void UpdateSpineSkeleton (ISkeletonAnimation animatedSkeleton) { + #if FLIPDEBUG + if (disableUpdateBones) return; + #endif - // MITCH - // bool flipX = b.WorldFlipX; - // bool flipY = b.WorldFlipY; - bool flipX = false; - bool flipY = false; + bool flipX = skeleton.flipX; + bool flipY = skeleton.flipY; + bool flipXOR = flipX ^ flipY; + bool flipOR = flipX || flipY; + var startingBone = this.StartingBone; - List attachments = new List(); + foreach (var pair in boneTable) { + var b = pair.Key; + var t = pair.Value; + bool isStartingBone = (b == startingBone); + Transform parentTransform = isStartingBone ? ragdollRoot : boneTable[b.Parent]; + Vector3 parentTransformWorldPosition = parentTransform.position; + Quaternion parentTransformWorldRotation = parentTransform.rotation; + + parentSpaceHelper.position = parentTransformWorldPosition; + parentSpaceHelper.rotation = parentTransformWorldRotation; + parentSpaceHelper.localScale = parentTransform.localScale; + + Vector3 boneWorldPosition = t.position; + Vector3 right = parentSpaceHelper.InverseTransformDirection(t.right); + + Vector3 boneLocalPosition = parentSpaceHelper.InverseTransformPoint(boneWorldPosition); + float boneLocalRotation = Mathf.Atan2(right.y, right.x) * Mathf.Rad2Deg; + if (flipOR) { + if (isStartingBone) { + if (flipX) boneLocalPosition.x *= -1f; + if (flipY) boneLocalPosition.y *= -1f; + + boneLocalRotation = boneLocalRotation * (flipXOR ? -1f : 1f); + if (flipX) boneLocalRotation += 180; + } else { + if (flipXOR) { + boneLocalRotation *= -1f; + boneLocalPosition.y *= -1f; // wtf?? + } + } + } + + b.x = Mathf.Lerp(b.x, boneLocalPosition.x, mix); + b.y = Mathf.Lerp(b.y, boneLocalPosition.y, mix); + b.rotation = Mathf.Lerp(b.rotation, boneLocalRotation, mix); + b.appliedRotation = Mathf.Lerp(b.appliedRotation, boneLocalRotation, mix); + +// Mitch Original Code: +// Vector3 right = parentSpaceHelper.InverseTransformDirection(t.right); +// float a = Mathf.Atan2(right.y, right.x) * Mathf.Rad2Deg; +// if (b.worldSignX ^ b.worldSignY) { +// a *= -1; +// } +// if (parentBone != null) { +// if ((b.WorldFlipX ^ b.WorldFlipY) != flip) { +// a -= GetCompensatedRotationIK(parentBone) * 2; +// } +// } +// b.Rotation = Mathf.Lerp(b.Rotation, a, mix); + } + } + + static List AttachBoundingBoxRagdollColliders (Bone b, GameObject go, Skeleton skeleton) { + const string AttachmentNameMarker = "ragdoll"; + var colliders = new List(); + var skin = skeleton.Skin ?? skeleton.Data.DefaultSkin; + + var attachments = new List(); foreach (Slot s in skeleton.Slots) { - if (s.Bone == b) { + if (s.bone == b) { skin.FindAttachmentsForSlot(skeleton.Slots.IndexOf(s), attachments); foreach (var a in attachments) { - if (a is BoundingBoxAttachment) { - if (!a.Name.ToLower().Contains("ragdoll")) + var bbAttachment = a as BoundingBoxAttachment; + if (bbAttachment != null) { + if (!a.Name.ToLower().Contains(AttachmentNameMarker)) continue; - var collider = SkeletonUtility.AddBoundingBoxAsComponent((BoundingBoxAttachment)a, go, false); - - if (flipX || flipY) { - Vector2[] points = collider.points; - - for (int i = 0; i < points.Length; i++) { - if (flipX) - points[i].x *= -1; - - if (flipY) - points[i].y *= -1; - } - - collider.points = points; - } - - colliders.Add(collider); + var bbCollider = SkeletonUtility.AddBoundingBoxAsComponent(bbAttachment, go, false); + colliders.Add(bbCollider); } } } @@ -341,92 +377,31 @@ namespace Spine.Unity.Modules { return colliders; } - - void UpdateWorld (ISkeletonAnimation skeletonRenderer) { - foreach (var pair in boneTable) { - var b = pair.Key; - var t = pair.Value; - //bool flip = false; - bool flipX = false; //TODO: deal with negative scale instead of Flip Key - bool flipY = false; //TODO: deal with negative scale instead of Flip Key - Bone parentBone = null; - Transform parentTransform = transform; - - if (b != startingBone) { - parentBone = b.Parent; - parentTransform = boneTable[parentBone]; - // MITCH - // flipX = parentBone.WorldFlipX; - // flipY = parentBone.WorldFlipY; - - } else { - parentBone = b.Parent; - parentTransform = ragdollRoot; - if (b.Parent != null) { - // MITCH - // flipX = b.worldFlipX; - // flipY = b.WorldFlipY; - } else { - flipX = b.Skeleton.FlipX; - flipY = b.Skeleton.FlipY; - } - } - - //flip = flipX ^ flipY; - - helper.position = parentTransform.position; - helper.rotation = parentTransform.rotation; - helper.localScale = new Vector3(flipX ? -parentTransform.localScale.x : parentTransform.localScale.x, flipY ? -parentTransform.localScale.y : parentTransform.localScale.y, 1); - - - Vector3 pos = t.position; - pos = helper.InverseTransformPoint(pos); - b.X = Mathf.Lerp(b.X, pos.x, mix); - b.Y = Mathf.Lerp(b.Y, pos.y, mix); - - Vector3 right = helper.InverseTransformDirection(t.right); - - float a = Mathf.Atan2(right.y, right.x) * Mathf.Rad2Deg; - - // MITCH - //if (b.WorldFlipX ^ b.WorldFlipY) { - // a *= -1; - //} - - if (parentBone != null) { - // MITCH - //if ((b.WorldFlipX ^ b.WorldFlipY) != flip) { - // a -= GetCompensatedRotationIK(parentBone) * 2; - //} - } - - b.Rotation = Mathf.Lerp(b.Rotation, a, mix); - // MITCH - // b.RotationIK = Mathf.Lerp(b.rotationIK, a, mix); - } - } - - float GetCompensatedRotationIK (Bone b) { + + static float GetPropagatedRotation (Bone b) { Bone parent = b.Parent; - // MITCH float a = b.AppliedRotation; while (parent != null) { a += parent.AppliedRotation; parent = parent.parent; } - return a; } + static Vector3 FlipScale (bool flipX, bool flipY) { + return new Vector3(flipX ? -1f : 1f, flipY ? -1f : 1f, 1f); + } + + #if UNITY_EDITOR void OnDrawGizmosSelected () { if (isActive) { Gizmos.DrawWireSphere(transform.position, thickness * 1.2f); - Vector3 newTransformPos = rootRigidbody.position - rootOffset; + Vector3 newTransformPos = RootRigidbody.position - rootOffset; Gizmos.DrawLine(transform.position, newTransformPos); Gizmos.DrawWireSphere(newTransformPos, thickness * 1.2f); } } - + #endif } } diff --git a/spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs b/spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs index 5f44696ca..ceb4d2601 100644 --- a/spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs +++ b/spine-unity/Assets/spine-unity/Modules/SpriteAttacher.cs @@ -169,8 +169,8 @@ namespace Spine.Unity.Modules { attachment.SetColor(Color.white); attachment.ScaleX = 1; attachment.ScaleY = 1; - attachment.RegionOffsetX = sprite.rect.width * (0.5f - Mathf.InverseLerp(bounds.min.x, bounds.max.x, 0)) / sprite.pixelsPerUnit; - attachment.RegionOffsetY = sprite.rect.height * (0.5f - Mathf.InverseLerp(bounds.min.y, bounds.max.y, 0)) / sprite.pixelsPerUnit; + attachment.RegionOffsetX = sprite.rect.width * (0.5f - InverseLerp(bounds.min.x, bounds.max.x, 0)) / sprite.pixelsPerUnit; + attachment.RegionOffsetY = sprite.rect.height * (0.5f - InverseLerp(bounds.min.y, bounds.max.y, 0)) / sprite.pixelsPerUnit; attachment.Width = size.x; attachment.Height = size.y; attachment.RegionWidth = size.x; @@ -194,6 +194,11 @@ namespace Spine.Unity.Modules { public BoundingBoxAttachment NewBoundingBoxAttachment (Skin skin, string name) { throw new System.NotImplementedException(); } + + private float InverseLerp(float a, float b, float value) + { + return (value - a) / (b - a); + } } public static class SpriteAttachmentExtensions { diff --git a/spine-unity/Assets/spine-unity/Shaders/Bones.shader b/spine-unity/Assets/spine-unity/Shaders/Bones.shader index 61fc977e5..055d9d329 100644 --- a/spine-unity/Assets/spine-unity/Shaders/Bones.shader +++ b/spine-unity/Assets/spine-unity/Shaders/Bones.shader @@ -1,4 +1,4 @@ -Shader "Spine/Bones" { +Shader "Hidden/Spine/Bones" { Properties { _Color ("Color", Color) = (0.5,0.5,0.5,0.5) _MainTex ("Particle Texture", 2D) = "white" {} @@ -56,7 +56,6 @@ Category { } sampler2D_float _CameraDepthTexture; - fixed4 frag (v2f i) : SV_Target { diff --git a/spine-unity/Assets/spine-unity/Shaders/HiddenPass.shader b/spine-unity/Assets/spine-unity/Shaders/HiddenPass.shader index 3a0de6756..c06650af2 100644 --- a/spine-unity/Assets/spine-unity/Shaders/HiddenPass.shader +++ b/spine-unity/Assets/spine-unity/Shaders/HiddenPass.shader @@ -1,21 +1,12 @@ -Shader "Spine/HiddenPass" { +Shader "Spine/Special/HiddenPass" { SubShader - { - Tags {"Queue" = "Geometry-1" } - Lighting Off - Pass - { - ZWrite Off - ColorMask 0 - } - } } diff --git a/spine-unity/Assets/spine-unity/Shaders/Skeleton.shader b/spine-unity/Assets/spine-unity/Shaders/Skeleton.shader index 890aea1e3..cda7d3d76 100644 --- a/spine-unity/Assets/spine-unity/Shaders/Skeleton.shader +++ b/spine-unity/Assets/spine-unity/Shaders/Skeleton.shader @@ -8,6 +8,7 @@ Shader "Spine/Skeleton" { Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } LOD 100 + Fog { Mode Off } Cull Off ZWrite Off Blend One OneMinusSrcAlpha @@ -24,8 +25,7 @@ Shader "Spine/Skeleton" { Name "Caster" Tags { "LightMode"="ShadowCaster" } Offset 1, 1 - - Fog { Mode Off } + ZWrite On ZTest LEqual Cull Off @@ -79,4 +79,4 @@ Shader "Spine/Skeleton" { } } } -} \ No newline at end of file +} diff --git a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs index 9cf65b806..341713ac5 100644 --- a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs +++ b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs @@ -257,7 +257,9 @@ namespace Spine.Unity { var workingSubmeshInstructions = workingInstruction.submeshInstructions; // Items array should not be cached. There is dynamic writing to this list. workingSubmeshInstructions.Clear(false); + #if !SPINE_TK2D bool isCustomSlotMaterialsPopulated = customSlotMaterials.Count > 0; + #endif int vertexCount = 0; int submeshVertexCount = 0; diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs index f61f22b25..42e346d9b 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs @@ -90,10 +90,7 @@ namespace Spine.Unity.Editor { } UpdateAttachments(); - - if (PrefabUtility.GetPrefabType(this.target) == PrefabType.Prefab) - isPrefab = true; - + isPrefab |= PrefabUtility.GetPrefabType(this.target) == PrefabType.Prefab; } void OnSceneGUI () { @@ -101,21 +98,14 @@ namespace Spine.Unity.Editor { OnEnable(); return; } - - // MITCH - //float flipRotation = skeleton.FlipX ? -1 : 1; - const float flipRotation = 1; - + foreach (Bone b in skeleton.Bones) { - Vector3 vec = transform.TransformPoint(new Vector3(b.WorldX, b.WorldY, 0)); + Vector3 pos = new Vector3(b.WorldX, b.WorldY, 0); + Quaternion rot = Quaternion.Euler(0, 0, b.WorldRotationX - 90f); + Vector3 scale = Vector3.one * b.Data.Length * b.WorldScaleX; - // MITCH - Quaternion rot = Quaternion.Euler(0, 0, b.WorldRotationX * flipRotation); - Vector3 forward = transform.TransformDirection(rot * Vector3.right); - forward *= flipRotation; - - SpineEditorUtilities.Icons.boneMaterial.SetPass(0); - Graphics.DrawMeshNow(SpineEditorUtilities.Icons.boneMesh, Matrix4x4.TRS(vec, Quaternion.LookRotation(transform.forward, forward), Vector3.one * b.Data.Length * b.WorldScaleX)); + SpineEditorUtilities.Icons.BoneMaterial.SetPass(0); + Graphics.DrawMeshNow(SpineEditorUtilities.Icons.BoneMesh, transform.localToWorldMatrix * Matrix4x4.TRS(pos, rot, scale)); } } diff --git a/spine-unity/README.md b/spine-unity/README.md index b52cff4b6..9274b05d7 100644 --- a/spine-unity/README.md +++ b/spine-unity/README.md @@ -14,7 +14,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-unity works with data exported from Spine 3.1.08. Updating spine-unity to [v3.2](https://trello.com/c/k7KtGdPW/76-update-runtimes-to-support-v3-2-shearing) is in progress. +spine-unity works with data exported from Spine 3.2.01. Updating spine-unity to [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-unity supports all Spine features. diff --git a/spine-xna/README.md b/spine-xna/README.md index ed55e4761..2afbd013f 100644 --- a/spine-xna/README.md +++ b/spine-xna/README.md @@ -10,7 +10,7 @@ The Spine Runtimes are developed with the intent to be used with data exported f ## Spine version -spine-xna works with data exported from the latest version of Spine. +spine-xna works with data exported from Spine 3.2.01. Updating spine-xna to [v3.3](https://github.com/EsotericSoftware/spine-runtimes/issues/613) is in progress. spine-xna supports all Spine features.