Merge branch 'master' into dev

This commit is contained in:
NathanSweet 2016-06-26 15:28:33 +02:00
commit eb805cc562
314 changed files with 6363 additions and 21075 deletions

23
.gitignore vendored
View File

@ -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

23
CMakeLists.txt Normal file
View File

@ -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()

View File

@ -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.

9
spine-c/CMakeLists.txt Normal file
View File

@ -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)

View File

@ -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/*

View File

@ -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.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 KiB

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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)

View File

@ -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

View File

@ -1,140 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{5D74934A-7512-45EE-8402-7B95D3642E85}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>SpineC</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v110</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>.\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>.\include</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="include\spine\Animation.h" />
<ClInclude Include="include\spine\AnimationState.h" />
<ClInclude Include="include\spine\AnimationStateData.h" />
<ClInclude Include="include\spine\Atlas.h" />
<ClInclude Include="include\spine\AtlasAttachmentLoader.h" />
<ClInclude Include="include\spine\Attachment.h" />
<ClInclude Include="include\spine\AttachmentLoader.h" />
<ClInclude Include="include\spine\Bone.h" />
<ClInclude Include="include\spine\BoneData.h" />
<ClInclude Include="include\spine\BoundingBoxAttachment.h" />
<ClInclude Include="include\spine\Event.h" />
<ClInclude Include="include\spine\EventData.h" />
<ClInclude Include="include\spine\extension.h" />
<ClInclude Include="include\spine\IkConstraint.h" />
<ClInclude Include="include\spine\IkConstraintData.h" />
<ClInclude Include="include\spine\MeshAttachment.h" />
<ClInclude Include="include\spine\RegionAttachment.h" />
<ClInclude Include="include\spine\Skeleton.h" />
<ClInclude Include="include\spine\SkeletonBounds.h" />
<ClInclude Include="include\spine\SkeletonData.h" />
<ClInclude Include="include\spine\SkeletonJson.h" />
<ClInclude Include="include\spine\Skin.h" />
<ClInclude Include="include\spine\SkinnedMeshAttachment.h" />
<ClInclude Include="include\spine\Slot.h" />
<ClInclude Include="include\spine\SlotData.h" />
<ClInclude Include="include\spine\spine.h" />
<ClInclude Include="include\spine\TransformConstraint.h" />
<ClInclude Include="include\spine\TransformConstraintData.h" />
<ClInclude Include="include\spine\WeightedMeshAttachment.h" />
<ClInclude Include="src\spine\Json.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\spine\Animation.c" />
<ClCompile Include="src\spine\AnimationState.c" />
<ClCompile Include="src\spine\AnimationStateData.c" />
<ClCompile Include="src\spine\Atlas.c" />
<ClCompile Include="src\spine\AtlasAttachmentLoader.c" />
<ClCompile Include="src\spine\Attachment.c" />
<ClCompile Include="src\spine\AttachmentLoader.c" />
<ClCompile Include="src\spine\Bone.c" />
<ClCompile Include="src\spine\BoneData.c" />
<ClCompile Include="src\spine\BoundingBoxAttachment.c" />
<ClCompile Include="src\spine\Event.c" />
<ClCompile Include="src\spine\EventData.c" />
<ClCompile Include="src\spine\extension.c" />
<ClCompile Include="src\spine\IkConstraint.c" />
<ClCompile Include="src\spine\IkConstraintData.c" />
<ClCompile Include="src\spine\Json.c" />
<ClCompile Include="src\spine\MeshAttachment.c" />
<ClCompile Include="src\spine\RegionAttachment.c" />
<ClCompile Include="src\spine\Skeleton.c" />
<ClCompile Include="src\spine\SkeletonBounds.c" />
<ClCompile Include="src\spine\SkeletonData.c" />
<ClCompile Include="src\spine\SkeletonJson.c" />
<ClCompile Include="src\spine\Skin.c" />
<ClCompile Include="src\spine\Slot.c" />
<ClCompile Include="src\spine\SlotData.c" />
<ClCompile Include="src\spine\TransformConstraint.c" />
<ClCompile Include="src\spine\TransformConstraintData.c" />
<ClCompile Include="src\spine\WeightedMeshAttachment.c" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -1,195 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="include\spine\Atlas.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\Attachment.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\extension.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\Skeleton.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="src\spine\Json.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\Animation.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\AnimationState.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\AnimationStateData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\AtlasAttachmentLoader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\AttachmentLoader.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\Bone.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\BoneData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\BoundingBoxAttachment.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\Event.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\EventData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\RegionAttachment.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\SkeletonBounds.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\SkeletonData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\SkeletonJson.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\Skin.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\Slot.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\SlotData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\MeshAttachment.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\SkinnedMeshAttachment.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\spine.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\IkConstraint.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\IkConstraintData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\TransformConstraint.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\TransformConstraintData.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="include\spine\WeightedMeshAttachment.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\spine\Atlas.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\Attachment.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\extension.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\Json.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\Skeleton.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\Animation.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\AnimationState.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\AnimationStateData.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\AttachmentLoader.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\Bone.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\BoneData.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\BoundingBoxAttachment.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\Event.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\EventData.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\RegionAttachment.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\SkeletonBounds.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\SkeletonData.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\SkeletonJson.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\Skin.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\Slot.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\SlotData.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\AtlasAttachmentLoader.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\MeshAttachment.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\IkConstraint.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\IkConstraintData.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\TransformConstraint.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\TransformConstraintData.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="src\spine\WeightedMeshAttachment.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -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;
}

View File

@ -31,7 +31,7 @@
#include <spine/Bone.h>
#include <spine/extension.h>
#include <stdio.h>
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) {

View File

@ -34,181 +34,187 @@
#include <spine/extension.h>
#include <float.h>
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);
}

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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;
}
}

View File

@ -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)

View File

@ -1,20 +0,0 @@
#import <UIKit/UIKit.h>
#import "cocos2d.h"
// Added only for iOS 6 support
@interface MyNavigationController : UINavigationController <CCDirectorDelegate>
@end
@interface AppController : NSObject <UIApplicationDelegate> {
UIWindow *window_;
MyNavigationController *navController_;
CCDirectorIOS *director_; // weak ref
}
@property (nonatomic, retain) UIWindow *window;
@property (readonly) MyNavigationController *navController;
@property (readonly) CCDirectorIOS *director;
@end

View File

@ -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

View File

@ -1,9 +0,0 @@
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"AppController");
[pool release];
return retVal;
}

View File

@ -1,14 +0,0 @@
#import "cocos2d.h"
@interface spine_cocos2d_iphoneAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window_;
CCGLView *glView_;
}
@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet CCGLView *glView;
- (IBAction)toggleFullScreen:(id)sender;
@end

View File

@ -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

View File

@ -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 <spine/spine-cocos2d-iphone.h>
@interface GoblinsExample : CCLayerColor {
SkeletonAnimation* skeletonNode;
}
+ (CCScene*) scene;
@end

View File

@ -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

View File

@ -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 <spine/spine-cocos2d-iphone.h>
@interface SpineboyExample : CCLayerColor {
SkeletonAnimation* skeletonNode;
}
+ (CCScene*) scene;
@end

View File

@ -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

View File

@ -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 = "<group>"; };
4327E30119E9879C007E7FB7 /* IkConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraintData.h; path = "../../spine-c/include/spine/IkConstraintData.h"; sourceTree = "<group>"; };
4327E30219E9879C007E7FB7 /* IkConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraint.c; path = "../../spine-c/src/spine/IkConstraint.c"; sourceTree = "<group>"; };
4327E30319E9879C007E7FB7 /* IkConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraintData.c; path = "../../spine-c/src/spine/IkConstraintData.c"; sourceTree = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
43C32868170B0DA6004A9460 /* spineboy.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = spineboy.json; path = Resources/spineboy.json; sourceTree = "<group>"; };
43C3286A170B0DA6004A9460 /* spineboy.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = spineboy.atlas; path = Resources/spineboy.atlas; sourceTree = "<group>"; };
43C3286B170B0DA6004A9460 /* spineboy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = spineboy.png; path = Resources/spineboy.png; sourceTree = "<group>"; };
43C32871170B0DBE004A9460 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-568h@2x.png"; path = "Resources-ios/Default-568h@2x.png"; sourceTree = "<group>"; };
43C32872170B0DBE004A9460 /* Default-Landscape~ipad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-Landscape~ipad.png"; path = "Resources-ios/Default-Landscape~ipad.png"; sourceTree = "<group>"; };
43C32873170B0DBE004A9460 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Default.png; path = "Resources-ios/Default.png"; sourceTree = "<group>"; };
43C32874170B0DBE004A9460 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x.png"; path = "Resources-ios/Default@2x.png"; sourceTree = "<group>"; };
43C32875170B0DBE004A9460 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72.png"; path = "Resources-ios/Icon-72.png"; sourceTree = "<group>"; };
43C32876170B0DBE004A9460 /* Icon-Small-50.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small-50.png"; path = "Resources-ios/Icon-Small-50.png"; sourceTree = "<group>"; };
43C32877170B0DBE004A9460 /* Icon-Small.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small.png"; path = "Resources-ios/Icon-Small.png"; sourceTree = "<group>"; };
43C32878170B0DBE004A9460 /* Icon-Small@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-Small@2x.png"; path = "Resources-ios/Icon-Small@2x.png"; sourceTree = "<group>"; };
43C32879170B0DBE004A9460 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = "Resources-ios/Icon.png"; sourceTree = "<group>"; };
43C3287A170B0DBE004A9460 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "Resources-ios/Icon@2x.png"; sourceTree = "<group>"; };
43C3287B170B0DBE004A9460 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Resources-ios/Info.plist"; sourceTree = "<group>"; };
43C3287C170B0DBE004A9460 /* iTunesArtwork */ = {isa = PBXFileReference; lastKnownFileType = file; name = iTunesArtwork; path = "Resources-ios/iTunesArtwork"; sourceTree = "<group>"; };
43C32889170B0E9F004A9460 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Prefix.pch; path = "Resources-ios/Prefix.pch"; sourceTree = "<group>"; };
43C32A05170B0F93004A9460 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "Resources-ios/main.m"; sourceTree = "<group>"; };
43C32A07170B10FF004A9460 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = "Resources-ios/AppDelegate.h"; sourceTree = "<group>"; };
43C32A08170B10FF004A9460 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = "Resources-ios/AppDelegate.m"; sourceTree = "<group>"; };
43D73BD31C7352D100F73E38 /* TransformConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraint.c; path = "../../spine-c/src/spine/TransformConstraint.c"; sourceTree = "<group>"; };
43D73BD41C7352D100F73E38 /* TransformConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraintData.c; path = "../../spine-c/src/spine/TransformConstraintData.c"; sourceTree = "<group>"; };
43D73BD51C7352D100F73E38 /* WeightedMeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = WeightedMeshAttachment.c; path = "../../spine-c/src/spine/WeightedMeshAttachment.c"; sourceTree = "<group>"; };
43D73BD91C7352E200F73E38 /* TransformConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraint.h; path = "../../spine-c/include/spine/TransformConstraint.h"; sourceTree = "<group>"; };
43D73BDA1C7352E200F73E38 /* TransformConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraintData.h; path = "../../spine-c/include/spine/TransformConstraintData.h"; sourceTree = "<group>"; };
43D73BDB1C7352E200F73E38 /* WeightedMeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightedMeshAttachment.h; path = "../../spine-c/include/spine/WeightedMeshAttachment.h"; sourceTree = "<group>"; };
43F7010C1927FBC700CA4038 /* goblins-mesh.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "goblins-mesh.atlas"; path = "Resources/goblins-mesh.atlas"; sourceTree = "<group>"; };
43F7010D1927FBC700CA4038 /* goblins-mesh.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "goblins-mesh.json"; path = "Resources/goblins-mesh.json"; sourceTree = "<group>"; };
43F7010E1927FBC700CA4038 /* goblins-mesh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "goblins-mesh.png"; path = "Resources/goblins-mesh.png"; sourceTree = "<group>"; };
43F7FF381927F91900CA4038 /* Animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animation.c; path = "../../spine-c/src/spine/Animation.c"; sourceTree = "<group>"; };
43F7FF391927F91900CA4038 /* AnimationState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationState.c; path = "../../spine-c/src/spine/AnimationState.c"; sourceTree = "<group>"; };
43F7FF3A1927F91900CA4038 /* AnimationStateData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationStateData.c; path = "../../spine-c/src/spine/AnimationStateData.c"; sourceTree = "<group>"; };
43F7FF3B1927F91900CA4038 /* Atlas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Atlas.c; path = "../../spine-c/src/spine/Atlas.c"; sourceTree = "<group>"; };
43F7FF3C1927F91900CA4038 /* AtlasAttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AtlasAttachmentLoader.c; path = "../../spine-c/src/spine/AtlasAttachmentLoader.c"; sourceTree = "<group>"; };
43F7FF3D1927F91900CA4038 /* Attachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Attachment.c; path = "../../spine-c/src/spine/Attachment.c"; sourceTree = "<group>"; };
43F7FF3E1927F91900CA4038 /* AttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AttachmentLoader.c; path = "../../spine-c/src/spine/AttachmentLoader.c"; sourceTree = "<group>"; };
43F7FF3F1927F91900CA4038 /* Bone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bone.c; path = "../../spine-c/src/spine/Bone.c"; sourceTree = "<group>"; };
43F7FF401927F91900CA4038 /* BoneData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoneData.c; path = "../../spine-c/src/spine/BoneData.c"; sourceTree = "<group>"; };
43F7FF411927F91900CA4038 /* BoundingBoxAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoundingBoxAttachment.c; path = "../../spine-c/src/spine/BoundingBoxAttachment.c"; sourceTree = "<group>"; };
43F7FF421927F91900CA4038 /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../../spine-c/src/spine/Event.c"; sourceTree = "<group>"; };
43F7FF431927F91900CA4038 /* EventData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EventData.c; path = "../../spine-c/src/spine/EventData.c"; sourceTree = "<group>"; };
43F7FF441927F91900CA4038 /* extension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extension.c; path = "../../spine-c/src/spine/extension.c"; sourceTree = "<group>"; };
43F7FF451927F91900CA4038 /* Json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Json.c; path = "../../spine-c/src/spine/Json.c"; sourceTree = "<group>"; };
43F7FF461927F91900CA4038 /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Json.h; path = "../../spine-c/src/spine/Json.h"; sourceTree = "<group>"; };
43F7FF471927F91900CA4038 /* MeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MeshAttachment.c; path = "../../spine-c/src/spine/MeshAttachment.c"; sourceTree = "<group>"; };
43F7FF481927F91900CA4038 /* RegionAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = RegionAttachment.c; path = "../../spine-c/src/spine/RegionAttachment.c"; sourceTree = "<group>"; };
43F7FF491927F91900CA4038 /* Skeleton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skeleton.c; path = "../../spine-c/src/spine/Skeleton.c"; sourceTree = "<group>"; };
43F7FF4A1927F91900CA4038 /* SkeletonBounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonBounds.c; path = "../../spine-c/src/spine/SkeletonBounds.c"; sourceTree = "<group>"; };
43F7FF4B1927F91900CA4038 /* SkeletonData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonData.c; path = "../../spine-c/src/spine/SkeletonData.c"; sourceTree = "<group>"; };
43F7FF4C1927F91900CA4038 /* SkeletonJson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonJson.c; path = "../../spine-c/src/spine/SkeletonJson.c"; sourceTree = "<group>"; };
43F7FF4D1927F91900CA4038 /* Skin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skin.c; path = "../../spine-c/src/spine/Skin.c"; sourceTree = "<group>"; };
43F7FF4F1927F91900CA4038 /* Slot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Slot.c; path = "../../spine-c/src/spine/Slot.c"; sourceTree = "<group>"; };
43F7FF501927F91900CA4038 /* SlotData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SlotData.c; path = "../../spine-c/src/spine/SlotData.c"; sourceTree = "<group>"; };
43F7FF691927F92500CA4038 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = "../../spine-c/include/spine/Animation.h"; sourceTree = "<group>"; };
43F7FF6A1927F92500CA4038 /* AnimationState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationState.h; path = "../../spine-c/include/spine/AnimationState.h"; sourceTree = "<group>"; };
43F7FF6B1927F92500CA4038 /* AnimationStateData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationStateData.h; path = "../../spine-c/include/spine/AnimationStateData.h"; sourceTree = "<group>"; };
43F7FF6C1927F92500CA4038 /* Atlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Atlas.h; path = "../../spine-c/include/spine/Atlas.h"; sourceTree = "<group>"; };
43F7FF6D1927F92500CA4038 /* AtlasAttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AtlasAttachmentLoader.h; path = "../../spine-c/include/spine/AtlasAttachmentLoader.h"; sourceTree = "<group>"; };
43F7FF6E1927F92500CA4038 /* Attachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Attachment.h; path = "../../spine-c/include/spine/Attachment.h"; sourceTree = "<group>"; };
43F7FF6F1927F92500CA4038 /* AttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AttachmentLoader.h; path = "../../spine-c/include/spine/AttachmentLoader.h"; sourceTree = "<group>"; };
43F7FF701927F92500CA4038 /* Bone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bone.h; path = "../../spine-c/include/spine/Bone.h"; sourceTree = "<group>"; };
43F7FF711927F92500CA4038 /* BoneData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoneData.h; path = "../../spine-c/include/spine/BoneData.h"; sourceTree = "<group>"; };
43F7FF721927F92500CA4038 /* BoundingBoxAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoundingBoxAttachment.h; path = "../../spine-c/include/spine/BoundingBoxAttachment.h"; sourceTree = "<group>"; };
43F7FF731927F92500CA4038 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Event.h; path = "../../spine-c/include/spine/Event.h"; sourceTree = "<group>"; };
43F7FF741927F92500CA4038 /* EventData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EventData.h; path = "../../spine-c/include/spine/EventData.h"; sourceTree = "<group>"; };
43F7FF751927F92500CA4038 /* extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = extension.h; path = "../../spine-c/include/spine/extension.h"; sourceTree = "<group>"; };
43F7FF761927F92500CA4038 /* MeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshAttachment.h; path = "../../spine-c/include/spine/MeshAttachment.h"; sourceTree = "<group>"; };
43F7FF771927F92500CA4038 /* RegionAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegionAttachment.h; path = "../../spine-c/include/spine/RegionAttachment.h"; sourceTree = "<group>"; };
43F7FF781927F92500CA4038 /* Skeleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skeleton.h; path = "../../spine-c/include/spine/Skeleton.h"; sourceTree = "<group>"; };
43F7FF791927F92500CA4038 /* SkeletonBounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonBounds.h; path = "../../spine-c/include/spine/SkeletonBounds.h"; sourceTree = "<group>"; };
43F7FF7A1927F92500CA4038 /* SkeletonData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonData.h; path = "../../spine-c/include/spine/SkeletonData.h"; sourceTree = "<group>"; };
43F7FF7B1927F92500CA4038 /* SkeletonJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonJson.h; path = "../../spine-c/include/spine/SkeletonJson.h"; sourceTree = "<group>"; };
43F7FF7C1927F92500CA4038 /* Skin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skin.h; path = "../../spine-c/include/spine/Skin.h"; sourceTree = "<group>"; };
43F7FF7E1927F92500CA4038 /* Slot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Slot.h; path = "../../spine-c/include/spine/Slot.h"; sourceTree = "<group>"; };
43F7FF7F1927F92500CA4038 /* SlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SlotData.h; path = "../../spine-c/include/spine/SlotData.h"; sourceTree = "<group>"; };
43F7FF801927F92500CA4038 /* spine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spine.h; path = "../../spine-c/include/spine/spine.h"; sourceTree = "<group>"; };
43F7FF811927F94800CA4038 /* PolygonBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PolygonBatch.h; path = src/spine/PolygonBatch.h; sourceTree = "<group>"; };
43F7FF821927F94800CA4038 /* PolygonBatch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PolygonBatch.m; path = src/spine/PolygonBatch.m; sourceTree = "<group>"; };
43F7FF831927F94800CA4038 /* SkeletonAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonAnimation.h; path = src/spine/SkeletonAnimation.h; sourceTree = "<group>"; };
43F7FF841927F94800CA4038 /* SkeletonAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonAnimation.m; path = src/spine/SkeletonAnimation.m; sourceTree = "<group>"; };
43F7FF851927F94800CA4038 /* SkeletonRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonRenderer.h; path = src/spine/SkeletonRenderer.h; sourceTree = "<group>"; };
43F7FF861927F94800CA4038 /* SkeletonRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonRenderer.m; path = src/spine/SkeletonRenderer.m; sourceTree = "<group>"; };
43F7FF8A1927F96700CA4038 /* GoblinsExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GoblinsExample.h; path = example/GoblinsExample.h; sourceTree = "<group>"; };
43F7FF8B1927F96700CA4038 /* GoblinsExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GoblinsExample.m; path = example/GoblinsExample.m; sourceTree = "<group>"; };
43F7FF8C1927F96700CA4038 /* SpineboyExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpineboyExample.h; path = example/SpineboyExample.h; sourceTree = "<group>"; };
43F7FF8D1927F96700CA4038 /* SpineboyExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SpineboyExample.m; path = example/SpineboyExample.m; sourceTree = "<group>"; };
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
9A5D248C170A94DA0030D4DD = {
isa = PBXGroup;
children = (
43C32821170B0BBC004A9460 /* Classes */,
43C32867170B0C7F004A9460 /* Resources */,
43C32870170B0DAD004A9460 /* Resources-ios */,
9A5D24C3170A94DA0030D4DD /* cocos2d */,
9A5D2497170A94DA0030D4DD /* Frameworks */,
9A5D2496170A94DA0030D4DD /* Products */,
);
sourceTree = "<group>";
};
9A5D2496170A94DA0030D4DD /* Products */ = {
isa = PBXGroup;
children = (
9A5D2495170A94DA0030D4DD /* SpineExample.app */,
);
name = Products;
sourceTree = "<group>";
};
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 = "<group>";
};
9A5D24C3170A94DA0030D4DD /* cocos2d */ = {
isa = PBXGroup;
children = (
434D47CA192A246A003127B5 /* cocos2d-ios.xcodeproj */,
);
name = cocos2d;
path = Spine;
sourceTree = "<group>";
};
/* 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 */;
}

View File

@ -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 = "<group>"; };
431FF7D51C735CAE00D52DF2 /* IkConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraint.h; path = "../../spine-c/include/spine/IkConstraint.h"; sourceTree = "<group>"; };
431FF7D61C735CFE00D52DF2 /* IkConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = IkConstraintData.c; path = "../../spine-c/src/spine/IkConstraintData.c"; sourceTree = "<group>"; };
431FF7D71C735CFE00D52DF2 /* TransformConstraint.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraint.c; path = "../../spine-c/src/spine/TransformConstraint.c"; sourceTree = "<group>"; };
431FF7D81C735CFE00D52DF2 /* TransformConstraintData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = TransformConstraintData.c; path = "../../spine-c/src/spine/TransformConstraintData.c"; sourceTree = "<group>"; };
431FF7D91C735CFE00D52DF2 /* WeightedMeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = WeightedMeshAttachment.c; path = "../../spine-c/src/spine/WeightedMeshAttachment.c"; sourceTree = "<group>"; };
431FF7DE1C735D1500D52DF2 /* IkConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IkConstraintData.h; path = "../../spine-c/include/spine/IkConstraintData.h"; sourceTree = "<group>"; };
431FF7DF1C735D1500D52DF2 /* TransformConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraint.h; path = "../../spine-c/include/spine/TransformConstraint.h"; sourceTree = "<group>"; };
431FF7E01C735D1500D52DF2 /* TransformConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformConstraintData.h; path = "../../spine-c/include/spine/TransformConstraintData.h"; sourceTree = "<group>"; };
431FF7E11C735D1500D52DF2 /* WeightedMeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WeightedMeshAttachment.h; path = "../../spine-c/include/spine/WeightedMeshAttachment.h"; sourceTree = "<group>"; };
431FF7E21C735D4300D52DF2 /* goblins-mesh.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "goblins-mesh.atlas"; sourceTree = "<group>"; };
431FF7E31C735D4300D52DF2 /* goblins-mesh.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "goblins-mesh.json"; sourceTree = "<group>"; };
431FF7E41C735D4300D52DF2 /* goblins-mesh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "goblins-mesh.png"; sourceTree = "<group>"; };
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 = "<group>"; };
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 = "<group>"; };
43C32A10170B1295004A9460 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = "../Resources-mac/AppDelegate.h"; sourceTree = "<group>"; };
43C32A11170B1295004A9460 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = "../Resources-mac/AppDelegate.m"; sourceTree = "<group>"; };
43C32A14170B1295004A9460 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = English; path = InfoPlist.strings; sourceTree = "<group>"; };
43C32A16170B1295004A9460 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = MainMenu.xib; sourceTree = "<group>"; };
43C32A17170B1295004A9460 /* icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = icon.icns; path = "Resources-mac/icon.icns"; sourceTree = "<group>"; };
43C32A18170B1295004A9460 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = "Resources-mac/Info.plist"; sourceTree = "<group>"; };
43C32A19170B1295004A9460 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "../Resources-mac/main.m"; sourceTree = "<group>"; };
43C32A1A170B1295004A9460 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Prefix.pch; path = "../Resources-mac/Prefix.pch"; sourceTree = "<group>"; };
43C32A30170D0A4D004A9460 /* spineboy.atlas */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = spineboy.atlas; sourceTree = "<group>"; };
43C32A31170D0A4D004A9460 /* spineboy.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = spineboy.json; sourceTree = "<group>"; };
43C32A32170D0A4D004A9460 /* spineboy.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = spineboy.png; sourceTree = "<group>"; };
43F7FD581927C31700CA4038 /* Animation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Animation.c; path = "../../spine-c/src/spine/Animation.c"; sourceTree = "<group>"; };
43F7FD591927C31700CA4038 /* AnimationState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationState.c; path = "../../spine-c/src/spine/AnimationState.c"; sourceTree = "<group>"; };
43F7FD5A1927C31700CA4038 /* AnimationStateData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AnimationStateData.c; path = "../../spine-c/src/spine/AnimationStateData.c"; sourceTree = "<group>"; };
43F7FD5B1927C31700CA4038 /* Atlas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Atlas.c; path = "../../spine-c/src/spine/Atlas.c"; sourceTree = "<group>"; };
43F7FD5C1927C31700CA4038 /* AtlasAttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AtlasAttachmentLoader.c; path = "../../spine-c/src/spine/AtlasAttachmentLoader.c"; sourceTree = "<group>"; };
43F7FD5D1927C31700CA4038 /* Attachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Attachment.c; path = "../../spine-c/src/spine/Attachment.c"; sourceTree = "<group>"; };
43F7FD5E1927C31700CA4038 /* AttachmentLoader.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = AttachmentLoader.c; path = "../../spine-c/src/spine/AttachmentLoader.c"; sourceTree = "<group>"; };
43F7FD5F1927C31700CA4038 /* Bone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Bone.c; path = "../../spine-c/src/spine/Bone.c"; sourceTree = "<group>"; };
43F7FD601927C31700CA4038 /* BoneData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoneData.c; path = "../../spine-c/src/spine/BoneData.c"; sourceTree = "<group>"; };
43F7FD611927C31700CA4038 /* BoundingBoxAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = BoundingBoxAttachment.c; path = "../../spine-c/src/spine/BoundingBoxAttachment.c"; sourceTree = "<group>"; };
43F7FD621927C31700CA4038 /* Event.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Event.c; path = "../../spine-c/src/spine/Event.c"; sourceTree = "<group>"; };
43F7FD631927C31700CA4038 /* EventData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = EventData.c; path = "../../spine-c/src/spine/EventData.c"; sourceTree = "<group>"; };
43F7FD641927C31700CA4038 /* extension.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = extension.c; path = "../../spine-c/src/spine/extension.c"; sourceTree = "<group>"; };
43F7FD651927C31700CA4038 /* Json.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Json.c; path = "../../spine-c/src/spine/Json.c"; sourceTree = "<group>"; };
43F7FD661927C31700CA4038 /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Json.h; path = "../../spine-c/src/spine/Json.h"; sourceTree = "<group>"; };
43F7FD671927C31700CA4038 /* MeshAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = MeshAttachment.c; path = "../../spine-c/src/spine/MeshAttachment.c"; sourceTree = "<group>"; };
43F7FD681927C31700CA4038 /* RegionAttachment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = RegionAttachment.c; path = "../../spine-c/src/spine/RegionAttachment.c"; sourceTree = "<group>"; };
43F7FD691927C31700CA4038 /* Skeleton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skeleton.c; path = "../../spine-c/src/spine/Skeleton.c"; sourceTree = "<group>"; };
43F7FD6A1927C31700CA4038 /* SkeletonBounds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonBounds.c; path = "../../spine-c/src/spine/SkeletonBounds.c"; sourceTree = "<group>"; };
43F7FD6B1927C31700CA4038 /* SkeletonData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonData.c; path = "../../spine-c/src/spine/SkeletonData.c"; sourceTree = "<group>"; };
43F7FD6C1927C31700CA4038 /* SkeletonJson.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SkeletonJson.c; path = "../../spine-c/src/spine/SkeletonJson.c"; sourceTree = "<group>"; };
43F7FD6D1927C31700CA4038 /* Skin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Skin.c; path = "../../spine-c/src/spine/Skin.c"; sourceTree = "<group>"; };
43F7FD6F1927C31700CA4038 /* Slot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = Slot.c; path = "../../spine-c/src/spine/Slot.c"; sourceTree = "<group>"; };
43F7FD701927C31700CA4038 /* SlotData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SlotData.c; path = "../../spine-c/src/spine/SlotData.c"; sourceTree = "<group>"; };
43F7FD891927C32800CA4038 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = "../../spine-c/include/spine/Animation.h"; sourceTree = "<group>"; };
43F7FD8A1927C32800CA4038 /* AnimationState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationState.h; path = "../../spine-c/include/spine/AnimationState.h"; sourceTree = "<group>"; };
43F7FD8B1927C32800CA4038 /* AnimationStateData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationStateData.h; path = "../../spine-c/include/spine/AnimationStateData.h"; sourceTree = "<group>"; };
43F7FD8C1927C32800CA4038 /* Atlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Atlas.h; path = "../../spine-c/include/spine/Atlas.h"; sourceTree = "<group>"; };
43F7FD8D1927C32800CA4038 /* AtlasAttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AtlasAttachmentLoader.h; path = "../../spine-c/include/spine/AtlasAttachmentLoader.h"; sourceTree = "<group>"; };
43F7FD8E1927C32800CA4038 /* Attachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Attachment.h; path = "../../spine-c/include/spine/Attachment.h"; sourceTree = "<group>"; };
43F7FD8F1927C32800CA4038 /* AttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AttachmentLoader.h; path = "../../spine-c/include/spine/AttachmentLoader.h"; sourceTree = "<group>"; };
43F7FD901927C32800CA4038 /* Bone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Bone.h; path = "../../spine-c/include/spine/Bone.h"; sourceTree = "<group>"; };
43F7FD911927C32800CA4038 /* BoneData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoneData.h; path = "../../spine-c/include/spine/BoneData.h"; sourceTree = "<group>"; };
43F7FD921927C32800CA4038 /* BoundingBoxAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoundingBoxAttachment.h; path = "../../spine-c/include/spine/BoundingBoxAttachment.h"; sourceTree = "<group>"; };
43F7FD931927C32800CA4038 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Event.h; path = "../../spine-c/include/spine/Event.h"; sourceTree = "<group>"; };
43F7FD941927C32800CA4038 /* EventData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EventData.h; path = "../../spine-c/include/spine/EventData.h"; sourceTree = "<group>"; };
43F7FD951927C32800CA4038 /* extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = extension.h; path = "../../spine-c/include/spine/extension.h"; sourceTree = "<group>"; };
43F7FD961927C32800CA4038 /* MeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshAttachment.h; path = "../../spine-c/include/spine/MeshAttachment.h"; sourceTree = "<group>"; };
43F7FD971927C32800CA4038 /* RegionAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegionAttachment.h; path = "../../spine-c/include/spine/RegionAttachment.h"; sourceTree = "<group>"; };
43F7FD981927C32800CA4038 /* Skeleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skeleton.h; path = "../../spine-c/include/spine/Skeleton.h"; sourceTree = "<group>"; };
43F7FD991927C32800CA4038 /* SkeletonBounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonBounds.h; path = "../../spine-c/include/spine/SkeletonBounds.h"; sourceTree = "<group>"; };
43F7FD9A1927C32800CA4038 /* SkeletonData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonData.h; path = "../../spine-c/include/spine/SkeletonData.h"; sourceTree = "<group>"; };
43F7FD9B1927C32800CA4038 /* SkeletonJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonJson.h; path = "../../spine-c/include/spine/SkeletonJson.h"; sourceTree = "<group>"; };
43F7FD9C1927C32800CA4038 /* Skin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Skin.h; path = "../../spine-c/include/spine/Skin.h"; sourceTree = "<group>"; };
43F7FD9E1927C32800CA4038 /* Slot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Slot.h; path = "../../spine-c/include/spine/Slot.h"; sourceTree = "<group>"; };
43F7FD9F1927C32800CA4038 /* SlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SlotData.h; path = "../../spine-c/include/spine/SlotData.h"; sourceTree = "<group>"; };
43F7FDA01927C32800CA4038 /* spine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = spine.h; path = "../../spine-c/include/spine/spine.h"; sourceTree = "<group>"; };
43F7FDA11927C33C00CA4038 /* PolygonBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PolygonBatch.h; path = src/spine/PolygonBatch.h; sourceTree = "<group>"; };
43F7FDA21927C33C00CA4038 /* PolygonBatch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PolygonBatch.m; path = src/spine/PolygonBatch.m; sourceTree = "<group>"; };
43F7FDA31927C33C00CA4038 /* SkeletonAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonAnimation.h; path = src/spine/SkeletonAnimation.h; sourceTree = "<group>"; };
43F7FDA41927C33C00CA4038 /* SkeletonAnimation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonAnimation.m; path = src/spine/SkeletonAnimation.m; sourceTree = "<group>"; };
43F7FDA51927C33C00CA4038 /* SkeletonRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkeletonRenderer.h; path = src/spine/SkeletonRenderer.h; sourceTree = "<group>"; };
43F7FDA61927C33C00CA4038 /* SkeletonRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SkeletonRenderer.m; path = src/spine/SkeletonRenderer.m; sourceTree = "<group>"; };
43F7FDAA1927C34600CA4038 /* SpineboyExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpineboyExample.h; sourceTree = "<group>"; };
43F7FDAB1927C34600CA4038 /* SpineboyExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SpineboyExample.m; sourceTree = "<group>"; };
43F7FDB31927D04200CA4038 /* GoblinsExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GoblinsExample.h; sourceTree = "<group>"; };
43F7FDB41927D04200CA4038 /* GoblinsExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GoblinsExample.m; sourceTree = "<group>"; };
/* 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 = "<group>";
};
4319B51416FF9B2600C1D7A9 /* Products */ = {
isa = PBXGroup;
children = (
4319B51316FF9B2600C1D7A9 /* SpineExample.app */,
);
name = Products;
sourceTree = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
43C32A0F170B1282004A9460 /* Resources-mac */ = {
isa = PBXGroup;
children = (
43C32A12170B1295004A9460 /* English.lproj */,
43C32A17170B1295004A9460 /* icon.icns */,
43C32A18170B1295004A9460 /* Info.plist */,
);
name = "Resources-mac";
sourceTree = "<group>";
};
43C32A12170B1295004A9460 /* English.lproj */ = {
isa = PBXGroup;
children = (
43C32A13170B1295004A9460 /* InfoPlist.strings */,
43C32A15170B1295004A9460 /* MainMenu.xib */,
);
name = English.lproj;
path = "Resources-mac/English.lproj";
sourceTree = "<group>";
};
/* 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 = "<group>";
};
43C32A15170B1295004A9460 /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
43C32A16170B1295004A9460 /* English */,
);
name = MainMenu.xib;
sourceTree = "<group>";
};
/* 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 */;
}

View File

@ -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 <spine/spine-cocos2d-iphone.h>
@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

View File

@ -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 <spine/PolygonBatch.h>
#import <spine/spine-cocos2d-iphone.h>
#import <spine/extension.h>
@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

View File

@ -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 <spine/SkeletonAnimation.h>
#import <spine/spine-cocos2d-iphone.h>
#import <spine/extension.h>
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

View File

@ -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 <spine/spine.h>
#import "cocos2d.h"
@class spPolygonBatch;
/** Draws a skeleton. */
@interface SkeletonRenderer : CCNodeRGBA<CCBlendProtocol> {
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

View File

@ -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 <spine/SkeletonRenderer.h>
#import <spine/spine-cocos2d-iphone.h>
#import <spine/extension.h>
#import <spine/PolygonBatch.h>
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

View File

@ -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 <spine/spine-cocos2d-iphone.h>
#import <spine/extension.h>
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);
}

View File

@ -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)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 464 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View File

@ -1,11 +0,0 @@
#import <Availability.h>
#ifndef __IPHONE_3_0
#warning "This project uses features only available in iPhone SDK 3.0 and later."
#endif
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#endif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

View File

@ -1,2 +0,0 @@
/* Localized versions of Info.plist keys */

View File

@ -1,896 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1060</int>
<string key="IBDocument.SystemVersion">10K549</string>
<string key="IBDocument.InterfaceBuilderVersion">1938</string>
<string key="IBDocument.AppKitVersion">1038.36</string>
<string key="IBDocument.HIToolboxVersion">461.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">1938</string>
</object>
<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSOpenGLView</string>
<string>NSWindowTemplate</string>
<string>NSView</string>
<string>NSMenu</string>
<string>NSMenuItem</string>
<string>NSCustomObject</string>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
<integer value="1" key="NS.object.0"/>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSCustomObject" id="1021">
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSCustomObject" id="1014">
<string key="NSClassName">FirstResponder</string>
</object>
<object class="NSCustomObject" id="1050">
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSMenu" id="649796088">
<string key="NSTitle">AMainMenu</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="694149608">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">spine-cocos2d-iphone</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<object class="NSCustomResource" key="NSOnImage" id="35465992">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuCheckmark</string>
</object>
<object class="NSCustomResource" key="NSMixedImage" id="502551668">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuMixedState</string>
</object>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="110575045">
<string key="NSTitle">spine-cocos2d-iphone</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="238522557">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">About spine-cocos2d-iphone</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="304266470">
<reference key="NSMenu" ref="110575045"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="609285721">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">Preferences…</string>
<string key="NSKeyEquiv">,</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="481834944">
<reference key="NSMenu" ref="110575045"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="1046388886">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">Services</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="752062318">
<string key="NSTitle">Services</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<string key="NSName">_NSServicesMenu</string>
</object>
</object>
<object class="NSMenuItem" id="646227648">
<reference key="NSMenu" ref="110575045"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="755159360">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">Hide spine-cocos2d-iphone</string>
<string key="NSKeyEquiv">h</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="342932134">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">Hide Others</string>
<string key="NSKeyEquiv">h</string>
<int key="NSKeyEquivModMask">1572864</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="908899353">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">Show All</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="1056857174">
<reference key="NSMenu" ref="110575045"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="632727374">
<reference key="NSMenu" ref="110575045"/>
<string key="NSTitle">Quit spine-cocos2d-iphone</string>
<string key="NSKeyEquiv">q</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
</object>
<string key="NSName">_NSAppleMenu</string>
</object>
</object>
<object class="NSMenuItem" id="586577488">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">View</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="466310130">
<string key="NSTitle">View</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="593943139">
<reference key="NSMenu" ref="466310130"/>
<string key="NSTitle">Toggle Full Screen</string>
<string key="NSKeyEquiv">f</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
</object>
</object>
</object>
<object class="NSMenuItem" id="713487014">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">Window</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="835318025">
<string key="NSTitle">Window</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="1011231497">
<reference key="NSMenu" ref="835318025"/>
<string key="NSTitle">Minimize</string>
<string key="NSKeyEquiv">m</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="575023229">
<reference key="NSMenu" ref="835318025"/>
<string key="NSTitle">Zoom</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="299356726">
<reference key="NSMenu" ref="835318025"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
<object class="NSMenuItem" id="625202149">
<reference key="NSMenu" ref="835318025"/>
<string key="NSTitle">Bring All to Front</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
</object>
<string key="NSName">_NSWindowsMenu</string>
</object>
</object>
<object class="NSMenuItem" id="448692316">
<reference key="NSMenu" ref="649796088"/>
<string key="NSTitle">Help</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="992780483">
<string key="NSTitle">Help</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="105068016">
<reference key="NSMenu" ref="992780483"/>
<string key="NSTitle">spine-cocos2d-iphone Help</string>
<string key="NSKeyEquiv">?</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
</object>
<string key="NSName">_NSHelpMenu</string>
</object>
</object>
</object>
<string key="NSName">_NSMainMenu</string>
</object>
<object class="NSWindowTemplate" id="972006081">
<int key="NSWindowStyleMask">15</int>
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{335, 435}, {580, 416}}</string>
<int key="NSWTFlags">1685585920</int>
<string key="NSWindowTitle">spine-cocos2d-iphone</string>
<string key="NSWindowClass">NSWindow</string>
<nil key="NSViewClass"/>
<object class="NSView" key="NSWindowView" id="439893737">
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
<object class="NSMutableArray" key="NSSubviews">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSOpenGLView" id="335206536">
<reference key="NSNextResponder" ref="439893737"/>
<int key="NSvFlags">1298</int>
<object class="NSPSMatrix" key="NSDrawMatrix"/>
<string key="NSFrame">{{0, 20}, {580, 396}}</string>
<reference key="NSSuperview" ref="439893737"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<int key="NSViewLayerContentsRedrawPolicy">2</int>
<object class="NSOpenGLPixelFormat" key="NSPixelFormat">
<object class="NSMutableData" key="NSPixelAttributes">
<bytes key="NS.bytes">AAAABQAAAGAAAAAIAAAADwAAAAsAAAAIAAAAAA</bytes>
</object>
</object>
</object>
</object>
<string key="NSFrameSize">{580, 416}</string>
<reference key="NSSuperview"/>
<reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="335206536"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
<string key="NSMaxSize">{1e+13, 1e+13}</string>
</object>
<object class="NSCustomObject" id="976324537">
<string key="NSClassName">spine_cocos2d_iphoneAppDelegate</string>
</object>
<object class="NSCustomObject" id="755631768">
<string key="NSClassName">NSFontManager</string>
</object>
<object class="NSMenuItem" id="313989180">
<string key="NSTitle">Item</string>
<string key="NSKeyEquiv"/>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="35465992"/>
<reference key="NSMixedImage" ref="502551668"/>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">terminate:</string>
<reference key="source" ref="1050"/>
<reference key="destination" ref="632727374"/>
</object>
<int key="connectionID">449</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">orderFrontStandardAboutPanel:</string>
<reference key="source" ref="1021"/>
<reference key="destination" ref="238522557"/>
</object>
<int key="connectionID">142</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="1021"/>
<reference key="destination" ref="976324537"/>
</object>
<int key="connectionID">495</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performMiniaturize:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="1011231497"/>
</object>
<int key="connectionID">37</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">arrangeInFront:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="625202149"/>
</object>
<int key="connectionID">39</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performZoom:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="575023229"/>
</object>
<int key="connectionID">240</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">hide:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="755159360"/>
</object>
<int key="connectionID">367</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">hideOtherApplications:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="342932134"/>
</object>
<int key="connectionID">368</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">unhideAllApplications:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="908899353"/>
</object>
<int key="connectionID">370</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">showHelp:</string>
<reference key="source" ref="1014"/>
<reference key="destination" ref="105068016"/>
</object>
<int key="connectionID">493</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">window</string>
<reference key="source" ref="976324537"/>
<reference key="destination" ref="972006081"/>
</object>
<int key="connectionID">536</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">glView</string>
<reference key="source" ref="976324537"/>
<reference key="destination" ref="335206536"/>
</object>
<int key="connectionID">537</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">toggleFullScreen:</string>
<reference key="source" ref="976324537"/>
<reference key="destination" ref="593943139"/>
</object>
<int key="connectionID">541</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBObjectRecord">
<int key="objectID">0</int>
<object class="NSArray" key="object" id="0">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<reference key="children" ref="1048"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="1021"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="1014"/>
<reference key="parent" ref="0"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="1050"/>
<reference key="parent" ref="0"/>
<string key="objectName">Application</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">29</int>
<reference key="object" ref="649796088"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="713487014"/>
<reference ref="694149608"/>
<reference ref="586577488"/>
<reference ref="448692316"/>
</object>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">19</int>
<reference key="object" ref="713487014"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="835318025"/>
</object>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">56</int>
<reference key="object" ref="694149608"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="110575045"/>
</object>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">57</int>
<reference key="object" ref="110575045"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="238522557"/>
<reference ref="755159360"/>
<reference ref="908899353"/>
<reference ref="632727374"/>
<reference ref="646227648"/>
<reference ref="609285721"/>
<reference ref="481834944"/>
<reference ref="304266470"/>
<reference ref="1046388886"/>
<reference ref="1056857174"/>
<reference ref="342932134"/>
</object>
<reference key="parent" ref="694149608"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">58</int>
<reference key="object" ref="238522557"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">134</int>
<reference key="object" ref="755159360"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">150</int>
<reference key="object" ref="908899353"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">136</int>
<reference key="object" ref="632727374"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">144</int>
<reference key="object" ref="646227648"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">129</int>
<reference key="object" ref="609285721"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">143</int>
<reference key="object" ref="481834944"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">236</int>
<reference key="object" ref="304266470"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">131</int>
<reference key="object" ref="1046388886"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="752062318"/>
</object>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">149</int>
<reference key="object" ref="1056857174"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">145</int>
<reference key="object" ref="342932134"/>
<reference key="parent" ref="110575045"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">130</int>
<reference key="object" ref="752062318"/>
<reference key="parent" ref="1046388886"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">24</int>
<reference key="object" ref="835318025"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="299356726"/>
<reference ref="625202149"/>
<reference ref="575023229"/>
<reference ref="1011231497"/>
</object>
<reference key="parent" ref="713487014"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">92</int>
<reference key="object" ref="299356726"/>
<reference key="parent" ref="835318025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">5</int>
<reference key="object" ref="625202149"/>
<reference key="parent" ref="835318025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">239</int>
<reference key="object" ref="575023229"/>
<reference key="parent" ref="835318025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">23</int>
<reference key="object" ref="1011231497"/>
<reference key="parent" ref="835318025"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">295</int>
<reference key="object" ref="586577488"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="466310130"/>
</object>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">296</int>
<reference key="object" ref="466310130"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="593943139"/>
</object>
<reference key="parent" ref="586577488"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">371</int>
<reference key="object" ref="972006081"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="439893737"/>
</object>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">372</int>
<reference key="object" ref="439893737"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="335206536"/>
</object>
<reference key="parent" ref="972006081"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">420</int>
<reference key="object" ref="755631768"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">490</int>
<reference key="object" ref="448692316"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="992780483"/>
</object>
<reference key="parent" ref="649796088"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">491</int>
<reference key="object" ref="992780483"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="105068016"/>
</object>
<reference key="parent" ref="448692316"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">492</int>
<reference key="object" ref="105068016"/>
<reference key="parent" ref="992780483"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">494</int>
<reference key="object" ref="976324537"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">533</int>
<reference key="object" ref="335206536"/>
<reference key="parent" ref="439893737"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">538</int>
<reference key="object" ref="313989180"/>
<reference key="parent" ref="0"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">540</int>
<reference key="object" ref="593943139"/>
<reference key="parent" ref="466310130"/>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>-1.IBPluginDependency</string>
<string>-2.IBPluginDependency</string>
<string>-3.IBPluginDependency</string>
<string>129.IBPluginDependency</string>
<string>130.IBPluginDependency</string>
<string>131.IBPluginDependency</string>
<string>134.IBPluginDependency</string>
<string>136.IBPluginDependency</string>
<string>143.IBPluginDependency</string>
<string>144.IBPluginDependency</string>
<string>145.IBPluginDependency</string>
<string>149.IBPluginDependency</string>
<string>150.IBPluginDependency</string>
<string>19.IBPluginDependency</string>
<string>23.IBPluginDependency</string>
<string>236.IBPluginDependency</string>
<string>239.IBPluginDependency</string>
<string>24.IBPluginDependency</string>
<string>29.IBPluginDependency</string>
<string>295.IBPluginDependency</string>
<string>296.IBPluginDependency</string>
<string>371.IBPluginDependency</string>
<string>371.IBWindowTemplateEditedContentRect</string>
<string>371.NSWindowTemplate.visibleAtLaunch</string>
<string>372.IBPluginDependency</string>
<string>420.IBPluginDependency</string>
<string>490.IBPluginDependency</string>
<string>491.IBPluginDependency</string>
<string>492.IBPluginDependency</string>
<string>494.IBPluginDependency</string>
<string>5.IBPluginDependency</string>
<string>533.CustomClassName</string>
<string>533.IBPluginDependency</string>
<string>538.IBPluginDependency</string>
<string>540.IBPluginDependency</string>
<string>56.IBPluginDependency</string>
<string>57.IBPluginDependency</string>
<string>58.IBPluginDependency</string>
<string>92.IBPluginDependency</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>{{395, 107}, {580, 416}}</string>
<integer value="1"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>CCGLView</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="dict.sortedKeys" ref="0"/>
<reference key="dict.values" ref="0"/>
</object>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="dict.sortedKeys" ref="0"/>
<reference key="dict.values" ref="0"/>
</object>
<nil key="sourceID"/>
<int key="maxID">541</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">MacGLView</string>
<string key="superclassName">NSOpenGLView</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/MacGLView.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">spine_cocos2d_iphoneAppDelegate</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">toggleFullScreen:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
<string key="NS.key.0">toggleFullScreen:</string>
<object class="IBActionInfo" key="NS.object.0">
<string key="name">toggleFullScreen:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<object class="NSMutableDictionary" key="outlets">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>glView</string>
<string>window</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>MacGLView</string>
<string>NSWindow</string>
</object>
</object>
<object class="NSMutableDictionary" key="toOneOutletInfosByName">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>glView</string>
<string>window</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBToOneOutletInfo">
<string key="name">glView</string>
<string key="candidateClassName">MacGLView</string>
</object>
<object class="IBToOneOutletInfo">
<string key="name">window</string>
<string key="candidateClassName">NSWindow</string>
</object>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">./Classes/spine_cocos2d_iphoneAppDelegate.h</string>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
<integer value="3000" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>NSMenuCheckmark</string>
<string>NSMenuMixedState</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>{9, 8}</string>
<string>{7, 2}</string>
</object>
</object>
</data>
</archive>

View File

@ -1,4 +0,0 @@
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif

View File

@ -1,8 +0,0 @@
#import <Cocoa/Cocoa.h>
#import "cocos2d.h"
int main(int argc, char *argv[]) {
[CCGLView load_];
return NSApplicationMain(argc, (const char **) argv);
}

View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:spine-cocos2d-iphone-ios.xcodeproj">
</FileRef>
</Workspace>

View File

@ -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 <spine/spine.h>
#import <spine/SkeletonRenderer.h>
#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

View File

@ -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 <spine/spine.h>
#import "cocos2d.h"
#import <spine/SkeletonRenderer.h>
#import <spine/SkeletonAnimation.h>

View File

@ -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()

View File

@ -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 <spine/file.h>`, 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)

View File

Before

Width:  |  Height:  |  Size: 256 KiB

After

Width:  |  Height:  |  Size: 256 KiB

View File

Before

Width:  |  Height:  |  Size: 464 KiB

After

Width:  |  Height:  |  Size: 464 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 357 KiB

After

Width:  |  Height:  |  Size: 357 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

Before

Width:  |  Height:  |  Size: 9.2 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

Before

Width:  |  Height:  |  Size: 217 KiB

After

Width:  |  Height:  |  Size: 217 KiB

View File

Before

Width:  |  Height:  |  Size: 253 KiB

After

Width:  |  Height:  |  Size: 253 KiB

View File

@ -30,7 +30,7 @@
*****************************************************************************/
#import "cocos2d.h"
#import <spine/spine-cocos2d-iphone.h>
#import <spine/spine-cocos2d-objc.h>
@interface GoblinsExample : CCNode {
SkeletonAnimation* skeletonNode;

View File

@ -30,7 +30,7 @@
*****************************************************************************/
#import "cocos2d.h"
#import <spine/spine-cocos2d-iphone.h>
#import <spine/spine-cocos2d-objc.h>
@interface SpineboyExample : CCNode {
SkeletonAnimation* skeletonNode;

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