diff --git a/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.pbxproj b/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.pbxproj new file mode 100644 index 000000000..4d3027361 --- /dev/null +++ b/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.pbxproj @@ -0,0 +1,775 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 48; + objects = { + +/* Begin PBXBuildFile section */ + BB6017131FD9289A009BD546 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017121FD9289A009BD546 /* main.cpp */; }; + BB6017A21FD928AC009BD546 /* Attachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017671FD928AC009BD546 /* Attachment.cpp */; }; + BB6017A31FD928AC009BD546 /* Skeleton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017681FD928AC009BD546 /* Skeleton.cpp */; }; + BB6017A41FD928AC009BD546 /* TranslateTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017691FD928AC009BD546 /* TranslateTimeline.cpp */; }; + BB6017A51FD928AC009BD546 /* Extension.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176A1FD928AC009BD546 /* Extension.cpp */; }; + BB6017A61FD928AC009BD546 /* Updatable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176B1FD928AC009BD546 /* Updatable.cpp */; }; + BB6017A71FD928AC009BD546 /* Bone.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176C1FD928AC009BD546 /* Bone.cpp */; }; + BB6017A81FD928AC009BD546 /* AtlasAttachmentLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176D1FD928AC009BD546 /* AtlasAttachmentLoader.cpp */; }; + BB6017A91FD928AC009BD546 /* EventTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176E1FD928AC009BD546 /* EventTimeline.cpp */; }; + BB6017AA1FD928AC009BD546 /* PathConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60176F1FD928AC009BD546 /* PathConstraint.cpp */; }; + BB6017AB1FD928AC009BD546 /* VertexAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017701FD928AC009BD546 /* VertexAttachment.cpp */; }; + BB6017AC1FD928AC009BD546 /* TextureLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017711FD928AC009BD546 /* TextureLoader.cpp */; }; + BB6017AD1FD928AC009BD546 /* SkeletonData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017721FD928AC009BD546 /* SkeletonData.cpp */; }; + BB6017AE1FD928AC009BD546 /* TransformConstraintTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017731FD928AC009BD546 /* TransformConstraintTimeline.cpp */; }; + BB6017AF1FD928AC009BD546 /* IkConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017741FD928AC009BD546 /* IkConstraint.cpp */; }; + BB6017B01FD928AC009BD546 /* CurveTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017751FD928AC009BD546 /* CurveTimeline.cpp */; }; + BB6017B11FD928AC009BD546 /* AnimationStateData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017761FD928AC009BD546 /* AnimationStateData.cpp */; }; + BB6017B21FD928AC009BD546 /* Constraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017771FD928AC009BD546 /* Constraint.cpp */; }; + BB6017B31FD928AC009BD546 /* BoundingBoxAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017781FD928AC009BD546 /* BoundingBoxAttachment.cpp */; }; + BB6017B41FD928AC009BD546 /* PathAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017791FD928AC009BD546 /* PathAttachment.cpp */; }; + BB6017B51FD928AC009BD546 /* MeshAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177A1FD928AC009BD546 /* MeshAttachment.cpp */; }; + BB6017B61FD928AC009BD546 /* TransformConstraint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177B1FD928AC009BD546 /* TransformConstraint.cpp */; }; + BB6017B71FD928AC009BD546 /* Skin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177C1FD928AC009BD546 /* Skin.cpp */; }; + BB6017B81FD928AC009BD546 /* RTTI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177D1FD928AC009BD546 /* RTTI.cpp */; }; + BB6017B91FD928AC009BD546 /* MathUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177E1FD928AC009BD546 /* MathUtil.cpp */; }; + BB6017BA1FD928AC009BD546 /* IkConstraintData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60177F1FD928AC009BD546 /* IkConstraintData.cpp */; }; + BB6017BB1FD928AC009BD546 /* Atlas.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017801FD928AC009BD546 /* Atlas.cpp */; }; + BB6017BC1FD928AC009BD546 /* ClippingAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017811FD928AC009BD546 /* ClippingAttachment.cpp */; }; + BB6017BD1FD928AC009BD546 /* PathConstraintData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017821FD928AC009BD546 /* PathConstraintData.cpp */; }; + BB6017BE1FD928AC009BD546 /* Timeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017831FD928AC009BD546 /* Timeline.cpp */; }; + BB6017BF1FD928AC009BD546 /* SkeletonBinary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017841FD928AC009BD546 /* SkeletonBinary.cpp */; }; + BB6017C01FD928AC009BD546 /* ScaleTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017851FD928AC009BD546 /* ScaleTimeline.cpp */; }; + BB6017C11FD928AC009BD546 /* LinkedMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017861FD928AC009BD546 /* LinkedMesh.cpp */; }; + BB6017C21FD928AC009BD546 /* PointAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017871FD928AC009BD546 /* PointAttachment.cpp */; }; + BB6017C31FD928AC009BD546 /* RegionAttachment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017881FD928AC009BD546 /* RegionAttachment.cpp */; }; + BB6017C41FD928AC009BD546 /* DeformTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017891FD928AC009BD546 /* DeformTimeline.cpp */; }; + BB6017C51FD928AC009BD546 /* Animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178A1FD928AC009BD546 /* Animation.cpp */; }; + BB6017C61FD928AC009BD546 /* AttachmentLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178B1FD928AC009BD546 /* AttachmentLoader.cpp */; }; + BB6017C71FD928AC009BD546 /* DrawOrderTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178C1FD928AC009BD546 /* DrawOrderTimeline.cpp */; }; + BB6017C81FD928AC009BD546 /* AttachmentTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178D1FD928AC009BD546 /* AttachmentTimeline.cpp */; }; + BB6017C91FD928AC009BD546 /* EventData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178E1FD928AC009BD546 /* EventData.cpp */; }; + BB6017CA1FD928AC009BD546 /* PathConstraintSpacingTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60178F1FD928AC009BD546 /* PathConstraintSpacingTimeline.cpp */; }; + BB6017CB1FD928AC009BD546 /* PathConstraintPositionTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017901FD928AC009BD546 /* PathConstraintPositionTimeline.cpp */; }; + BB6017CC1FD928AC009BD546 /* TransformConstraintData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017911FD928AC009BD546 /* TransformConstraintData.cpp */; }; + BB6017CD1FD928AC009BD546 /* SkeletonClipping.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017921FD928AC009BD546 /* SkeletonClipping.cpp */; }; + BB6017CE1FD928AC009BD546 /* TwoColorTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017931FD928AC009BD546 /* TwoColorTimeline.cpp */; }; + BB6017CF1FD928AC009BD546 /* Slot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017941FD928AC009BD546 /* Slot.cpp */; }; + BB6017D01FD928AC009BD546 /* AnimationState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017951FD928AC009BD546 /* AnimationState.cpp */; }; + BB6017D11FD928AC009BD546 /* SkeletonJson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017961FD928AC009BD546 /* SkeletonJson.cpp */; }; + BB6017D21FD928AC009BD546 /* BoneData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017971FD928AC009BD546 /* BoneData.cpp */; }; + BB6017D31FD928AC009BD546 /* IkConstraintTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017981FD928AC009BD546 /* IkConstraintTimeline.cpp */; }; + BB6017D41FD928AC009BD546 /* Event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017991FD928AC009BD546 /* Event.cpp */; }; + BB6017D51FD928AC009BD546 /* RotateTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179A1FD928AC009BD546 /* RotateTimeline.cpp */; }; + BB6017D61FD928AC009BD546 /* PathConstraintMixTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179B1FD928AC009BD546 /* PathConstraintMixTimeline.cpp */; }; + BB6017D71FD928AC009BD546 /* Triangulator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179C1FD928AC009BD546 /* Triangulator.cpp */; }; + BB6017D81FD928AC009BD546 /* Json.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179D1FD928AC009BD546 /* Json.cpp */; }; + BB6017D91FD928AC009BD546 /* SkeletonBounds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179E1FD928AC009BD546 /* SkeletonBounds.cpp */; }; + BB6017DA1FD928AC009BD546 /* SlotData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB60179F1FD928AC009BD546 /* SlotData.cpp */; }; + BB6017DB1FD928AC009BD546 /* ShearTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017A01FD928AC009BD546 /* ShearTimeline.cpp */; }; + BB6017DC1FD928AC009BD546 /* ColorTimeline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017A11FD928AC009BD546 /* ColorTimeline.cpp */; }; + BB6017E21FD928F7009BD546 /* KMemory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017E01FD928F6009BD546 /* KMemory.cpp */; }; + BB6017E31FD928F7009BD546 /* KString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017E11FD928F6009BD546 /* KString.cpp */; }; + BB6017E71FD929D0009BD546 /* MiniCppUnit.cxx in Sources */ = {isa = PBXBuildFile; fileRef = BB6017E61FD929D0009BD546 /* MiniCppUnit.cxx */; }; + BB6017EE1FD929F4009BD546 /* teamcity_cppunit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017EA1FD929F4009BD546 /* teamcity_cppunit.cpp */; }; + BB6017EF1FD929F4009BD546 /* teamcity_messages.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017ED1FD929F4009BD546 /* teamcity_messages.cpp */; }; + BB6018081FD92AF4009BD546 /* SpineEventMonitor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BB6017FD1FD92AF3009BD546 /* SpineEventMonitor.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + BB60170D1FD9289A009BD546 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + BB60170F1FD9289A009BD546 /* spine_unit_test */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = spine_unit_test; sourceTree = BUILT_PRODUCTS_DIR; }; + BB6017121FD9289A009BD546 /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; + BB60171C1FD928AC009BD546 /* DeformTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeformTimeline.h; sourceTree = ""; }; + BB60171D1FD928AC009BD546 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Animation.h; sourceTree = ""; }; + BB60171E1FD928AC009BD546 /* EventData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventData.h; sourceTree = ""; }; + BB60171F1FD928AC009BD546 /* SlotData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SlotData.h; sourceTree = ""; }; + BB6017201FD928AC009BD546 /* PathConstraintMixTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathConstraintMixTimeline.h; sourceTree = ""; }; + BB6017211FD928AC009BD546 /* SkeletonClipping.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonClipping.h; sourceTree = ""; }; + BB6017221FD928AC009BD546 /* Pool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pool.h; sourceTree = ""; }; + BB6017231FD928AC009BD546 /* TimelineType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TimelineType.h; sourceTree = ""; }; + BB6017241FD928AC009BD546 /* TextureLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureLoader.h; sourceTree = ""; }; + BB6017251FD928AC009BD546 /* PositionMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PositionMode.h; sourceTree = ""; }; + BB6017261FD928AC009BD546 /* RTTI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTTI.h; sourceTree = ""; }; + BB6017271FD928AC009BD546 /* PathAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathAttachment.h; sourceTree = ""; }; + BB6017281FD928AC009BD546 /* MixDirection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MixDirection.h; sourceTree = ""; }; + BB6017291FD928AC009BD546 /* CurveTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CurveTimeline.h; sourceTree = ""; }; + BB60172A1FD928AC009BD546 /* PointAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PointAttachment.h; sourceTree = ""; }; + BB60172B1FD928AC009BD546 /* Event.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Event.h; sourceTree = ""; }; + BB60172C1FD928AC009BD546 /* Bone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bone.h; sourceTree = ""; }; + BB60172D1FD928AC009BD546 /* Atlas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Atlas.h; sourceTree = ""; }; + BB60172E1FD928AC009BD546 /* DrawOrderTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DrawOrderTimeline.h; sourceTree = ""; }; + BB60172F1FD928AC009BD546 /* TransformConstraintTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformConstraintTimeline.h; sourceTree = ""; }; + BB6017301FD928AC009BD546 /* IkConstraintTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IkConstraintTimeline.h; sourceTree = ""; }; + BB6017311FD928AC009BD546 /* VertexAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexAttachment.h; sourceTree = ""; }; + BB6017321FD928AC009BD546 /* AttachmentType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AttachmentType.h; sourceTree = ""; }; + BB6017331FD928AC009BD546 /* RotateMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RotateMode.h; sourceTree = ""; }; + BB6017341FD928AC009BD546 /* ClippingAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClippingAttachment.h; sourceTree = ""; }; + BB6017351FD928AC009BD546 /* PathConstraintPositionTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathConstraintPositionTimeline.h; sourceTree = ""; }; + BB6017361FD928AC009BD546 /* RotateTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RotateTimeline.h; sourceTree = ""; }; + BB6017371FD928AC009BD546 /* Triangulator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Triangulator.h; sourceTree = ""; }; + BB6017381FD928AC009BD546 /* RegionAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegionAttachment.h; sourceTree = ""; }; + BB6017391FD928AC009BD546 /* Attachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Attachment.h; sourceTree = ""; }; + BB60173A1FD928AC009BD546 /* HashMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HashMap.h; sourceTree = ""; }; + BB60173B1FD928AC009BD546 /* TransformConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformConstraint.h; sourceTree = ""; }; + BB60173C1FD928AC009BD546 /* TransformMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformMode.h; sourceTree = ""; }; + BB60173D1FD928AC009BD546 /* SkeletonJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonJson.h; sourceTree = ""; }; + BB60173E1FD928AC009BD546 /* IkConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IkConstraintData.h; sourceTree = ""; }; + BB60173F1FD928AC009BD546 /* MixPose.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MixPose.h; sourceTree = ""; }; + BB6017401FD928AC009BD546 /* AnimationStateData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimationStateData.h; sourceTree = ""; }; + BB6017411FD928AC009BD546 /* TwoColorTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TwoColorTimeline.h; sourceTree = ""; }; + BB6017421FD928AC009BD546 /* Skeleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Skeleton.h; sourceTree = ""; }; + BB6017431FD928AC009BD546 /* ColorTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColorTimeline.h; sourceTree = ""; }; + BB6017441FD928AC009BD546 /* SpacingMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpacingMode.h; sourceTree = ""; }; + BB6017451FD928AC009BD546 /* Vertices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vertices.h; sourceTree = ""; }; + BB6017461FD928AC009BD546 /* Constraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constraint.h; sourceTree = ""; }; + BB6017471FD928AC009BD546 /* LinkedMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkedMesh.h; sourceTree = ""; }; + BB6017481FD928AC009BD546 /* ShearTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShearTimeline.h; sourceTree = ""; }; + BB6017491FD928AC009BD546 /* Json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Json.h; sourceTree = ""; }; + BB60174A1FD928AC009BD546 /* AttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AttachmentLoader.h; sourceTree = ""; }; + BB60174B1FD928AC009BD546 /* Skin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Skin.h; sourceTree = ""; }; + BB60174C1FD928AC009BD546 /* AttachmentTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AttachmentTimeline.h; sourceTree = ""; }; + BB60174D1FD928AC009BD546 /* SkeletonBinary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonBinary.h; sourceTree = ""; }; + BB60174E1FD928AC009BD546 /* SkeletonData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonData.h; sourceTree = ""; }; + BB60174F1FD928AC009BD546 /* ContainerUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContainerUtil.h; sourceTree = ""; }; + BB6017501FD928AC009BD546 /* PathConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathConstraintData.h; sourceTree = ""; }; + BB6017511FD928AC009BD546 /* Updatable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Updatable.h; sourceTree = ""; }; + BB6017521FD928AC009BD546 /* TransformConstraintData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransformConstraintData.h; sourceTree = ""; }; + BB6017531FD928AC009BD546 /* Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Extension.h; sourceTree = ""; }; + BB6017541FD928AC009BD546 /* BlendMode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlendMode.h; sourceTree = ""; }; + BB6017551FD928AC009BD546 /* PathConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathConstraint.h; sourceTree = ""; }; + BB6017561FD928AC009BD546 /* PathConstraintSpacingTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PathConstraintSpacingTimeline.h; sourceTree = ""; }; + BB6017571FD928AC009BD546 /* ScaleTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScaleTimeline.h; sourceTree = ""; }; + BB6017581FD928AC009BD546 /* IkConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IkConstraint.h; sourceTree = ""; }; + BB6017591FD928AC009BD546 /* BoundingBoxAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BoundingBoxAttachment.h; sourceTree = ""; }; + BB60175A1FD928AC009BD546 /* MathUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathUtil.h; sourceTree = ""; }; + BB60175B1FD928AC009BD546 /* Vector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vector.h; sourceTree = ""; }; + BB60175C1FD928AC009BD546 /* SkeletonBounds.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonBounds.h; sourceTree = ""; }; + BB60175D1FD928AC009BD546 /* Timeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timeline.h; sourceTree = ""; }; + BB60175E1FD928AC009BD546 /* Slot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Slot.h; sourceTree = ""; }; + BB60175F1FD928AC009BD546 /* BoneData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BoneData.h; sourceTree = ""; }; + BB6017601FD928AC009BD546 /* TranslateTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TranslateTimeline.h; sourceTree = ""; }; + BB6017611FD928AC009BD546 /* AnimationState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimationState.h; sourceTree = ""; }; + BB6017621FD928AC009BD546 /* MeshAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MeshAttachment.h; sourceTree = ""; }; + BB6017631FD928AC009BD546 /* AtlasAttachmentLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AtlasAttachmentLoader.h; sourceTree = ""; }; + BB6017641FD928AC009BD546 /* EventTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventTimeline.h; sourceTree = ""; }; + BB6017671FD928AC009BD546 /* Attachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Attachment.cpp; sourceTree = ""; }; + BB6017681FD928AC009BD546 /* Skeleton.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Skeleton.cpp; sourceTree = ""; }; + BB6017691FD928AC009BD546 /* TranslateTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TranslateTimeline.cpp; sourceTree = ""; }; + BB60176A1FD928AC009BD546 /* Extension.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Extension.cpp; sourceTree = ""; }; + BB60176B1FD928AC009BD546 /* Updatable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Updatable.cpp; sourceTree = ""; }; + BB60176C1FD928AC009BD546 /* Bone.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Bone.cpp; sourceTree = ""; }; + BB60176D1FD928AC009BD546 /* AtlasAttachmentLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AtlasAttachmentLoader.cpp; sourceTree = ""; }; + BB60176E1FD928AC009BD546 /* EventTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventTimeline.cpp; sourceTree = ""; }; + BB60176F1FD928AC009BD546 /* PathConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathConstraint.cpp; sourceTree = ""; }; + BB6017701FD928AC009BD546 /* VertexAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VertexAttachment.cpp; sourceTree = ""; }; + BB6017711FD928AC009BD546 /* TextureLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureLoader.cpp; sourceTree = ""; }; + BB6017721FD928AC009BD546 /* SkeletonData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonData.cpp; sourceTree = ""; }; + BB6017731FD928AC009BD546 /* TransformConstraintTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransformConstraintTimeline.cpp; sourceTree = ""; }; + BB6017741FD928AC009BD546 /* IkConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IkConstraint.cpp; sourceTree = ""; }; + BB6017751FD928AC009BD546 /* CurveTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CurveTimeline.cpp; sourceTree = ""; }; + BB6017761FD928AC009BD546 /* AnimationStateData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimationStateData.cpp; sourceTree = ""; }; + BB6017771FD928AC009BD546 /* Constraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Constraint.cpp; sourceTree = ""; }; + BB6017781FD928AC009BD546 /* BoundingBoxAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BoundingBoxAttachment.cpp; sourceTree = ""; }; + BB6017791FD928AC009BD546 /* PathAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathAttachment.cpp; sourceTree = ""; }; + BB60177A1FD928AC009BD546 /* MeshAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MeshAttachment.cpp; sourceTree = ""; }; + BB60177B1FD928AC009BD546 /* TransformConstraint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransformConstraint.cpp; sourceTree = ""; }; + BB60177C1FD928AC009BD546 /* Skin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Skin.cpp; sourceTree = ""; }; + BB60177D1FD928AC009BD546 /* RTTI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTTI.cpp; sourceTree = ""; }; + BB60177E1FD928AC009BD546 /* MathUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathUtil.cpp; sourceTree = ""; }; + BB60177F1FD928AC009BD546 /* IkConstraintData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IkConstraintData.cpp; sourceTree = ""; }; + BB6017801FD928AC009BD546 /* Atlas.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Atlas.cpp; sourceTree = ""; }; + BB6017811FD928AC009BD546 /* ClippingAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClippingAttachment.cpp; sourceTree = ""; }; + BB6017821FD928AC009BD546 /* PathConstraintData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathConstraintData.cpp; sourceTree = ""; }; + BB6017831FD928AC009BD546 /* Timeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Timeline.cpp; sourceTree = ""; }; + BB6017841FD928AC009BD546 /* SkeletonBinary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonBinary.cpp; sourceTree = ""; }; + BB6017851FD928AC009BD546 /* ScaleTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScaleTimeline.cpp; sourceTree = ""; }; + BB6017861FD928AC009BD546 /* LinkedMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LinkedMesh.cpp; sourceTree = ""; }; + BB6017871FD928AC009BD546 /* PointAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PointAttachment.cpp; sourceTree = ""; }; + BB6017881FD928AC009BD546 /* RegionAttachment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RegionAttachment.cpp; sourceTree = ""; }; + BB6017891FD928AC009BD546 /* DeformTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeformTimeline.cpp; sourceTree = ""; }; + BB60178A1FD928AC009BD546 /* Animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Animation.cpp; sourceTree = ""; }; + BB60178B1FD928AC009BD546 /* AttachmentLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AttachmentLoader.cpp; sourceTree = ""; }; + BB60178C1FD928AC009BD546 /* DrawOrderTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DrawOrderTimeline.cpp; sourceTree = ""; }; + BB60178D1FD928AC009BD546 /* AttachmentTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AttachmentTimeline.cpp; sourceTree = ""; }; + BB60178E1FD928AC009BD546 /* EventData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventData.cpp; sourceTree = ""; }; + BB60178F1FD928AC009BD546 /* PathConstraintSpacingTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathConstraintSpacingTimeline.cpp; sourceTree = ""; }; + BB6017901FD928AC009BD546 /* PathConstraintPositionTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathConstraintPositionTimeline.cpp; sourceTree = ""; }; + BB6017911FD928AC009BD546 /* TransformConstraintData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TransformConstraintData.cpp; sourceTree = ""; }; + BB6017921FD928AC009BD546 /* SkeletonClipping.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonClipping.cpp; sourceTree = ""; }; + BB6017931FD928AC009BD546 /* TwoColorTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TwoColorTimeline.cpp; sourceTree = ""; }; + BB6017941FD928AC009BD546 /* Slot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Slot.cpp; sourceTree = ""; }; + BB6017951FD928AC009BD546 /* AnimationState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimationState.cpp; sourceTree = ""; }; + BB6017961FD928AC009BD546 /* SkeletonJson.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonJson.cpp; sourceTree = ""; }; + BB6017971FD928AC009BD546 /* BoneData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BoneData.cpp; sourceTree = ""; }; + BB6017981FD928AC009BD546 /* IkConstraintTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IkConstraintTimeline.cpp; sourceTree = ""; }; + BB6017991FD928AC009BD546 /* Event.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Event.cpp; sourceTree = ""; }; + BB60179A1FD928AC009BD546 /* RotateTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RotateTimeline.cpp; sourceTree = ""; }; + BB60179B1FD928AC009BD546 /* PathConstraintMixTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PathConstraintMixTimeline.cpp; sourceTree = ""; }; + BB60179C1FD928AC009BD546 /* Triangulator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Triangulator.cpp; sourceTree = ""; }; + BB60179D1FD928AC009BD546 /* Json.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Json.cpp; sourceTree = ""; }; + BB60179E1FD928AC009BD546 /* SkeletonBounds.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonBounds.cpp; sourceTree = ""; }; + BB60179F1FD928AC009BD546 /* SlotData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SlotData.cpp; sourceTree = ""; }; + BB6017A01FD928AC009BD546 /* ShearTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShearTimeline.cpp; sourceTree = ""; }; + BB6017A11FD928AC009BD546 /* ColorTimeline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColorTimeline.cpp; sourceTree = ""; }; + BB6017DE1FD928F6009BD546 /* KMemory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KMemory.h; sourceTree = ""; }; + BB6017DF1FD928F6009BD546 /* KString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KString.h; sourceTree = ""; }; + BB6017E01FD928F6009BD546 /* KMemory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KMemory.cpp; sourceTree = ""; }; + BB6017E11FD928F6009BD546 /* KString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KString.cpp; sourceTree = ""; }; + BB6017E51FD929D0009BD546 /* MiniCppUnit.hxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MiniCppUnit.hxx; sourceTree = ""; }; + BB6017E61FD929D0009BD546 /* MiniCppUnit.cxx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MiniCppUnit.cxx; sourceTree = ""; }; + BB6017E91FD929F4009BD546 /* teamcity_cppunit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = teamcity_cppunit.h; sourceTree = ""; }; + BB6017EA1FD929F4009BD546 /* teamcity_cppunit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = teamcity_cppunit.cpp; sourceTree = ""; }; + BB6017EB1FD929F4009BD546 /* teamcity_messages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = teamcity_messages.h; sourceTree = ""; }; + BB6017EC1FD929F4009BD546 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; + BB6017ED1FD929F4009BD546 /* teamcity_messages.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = teamcity_messages.cpp; sourceTree = ""; }; + BB6017F01FD92A5B009BD546 /* SimpleTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SimpleTest.h; sourceTree = ""; }; + BB6017FC1FD92AF3009BD546 /* SpineEventMonitor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpineEventMonitor.h; sourceTree = ""; }; + BB6017FD1FD92AF3009BD546 /* SpineEventMonitor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpineEventMonitor.cpp; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + BB60170C1FD9289A009BD546 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + BB6017061FD9289A009BD546 = { + isa = PBXGroup; + children = ( + BB6017F11FD92AF3009BD546 /* tests */, + BB6017E81FD929F4009BD546 /* teamcity */, + BB6017E41FD929D0009BD546 /* minicppunit */, + BB6017DD1FD928F6009BD546 /* memory */, + BB6017191FD928AC009BD546 /* spine-cpp */, + BB6017111FD9289A009BD546 /* spine_unit_test */, + BB6017101FD9289A009BD546 /* Products */, + ); + sourceTree = ""; + }; + BB6017101FD9289A009BD546 /* Products */ = { + isa = PBXGroup; + children = ( + BB60170F1FD9289A009BD546 /* spine_unit_test */, + ); + name = Products; + sourceTree = ""; + }; + BB6017111FD9289A009BD546 /* spine_unit_test */ = { + isa = PBXGroup; + children = ( + BB6017121FD9289A009BD546 /* main.cpp */, + BB6017F01FD92A5B009BD546 /* SimpleTest.h */, + ); + path = spine_unit_test; + sourceTree = ""; + }; + BB6017191FD928AC009BD546 /* spine-cpp */ = { + isa = PBXGroup; + children = ( + BB60171A1FD928AC009BD546 /* include */, + BB6017651FD928AC009BD546 /* src */, + ); + name = "spine-cpp"; + path = "../../spine-cpp"; + sourceTree = ""; + }; + BB60171A1FD928AC009BD546 /* include */ = { + isa = PBXGroup; + children = ( + BB60171B1FD928AC009BD546 /* spine */, + ); + path = include; + sourceTree = ""; + }; + BB60171B1FD928AC009BD546 /* spine */ = { + isa = PBXGroup; + children = ( + BB60171D1FD928AC009BD546 /* Animation.h */, + BB6017611FD928AC009BD546 /* AnimationState.h */, + BB6017401FD928AC009BD546 /* AnimationStateData.h */, + BB60172D1FD928AC009BD546 /* Atlas.h */, + BB6017631FD928AC009BD546 /* AtlasAttachmentLoader.h */, + BB6017391FD928AC009BD546 /* Attachment.h */, + BB60174A1FD928AC009BD546 /* AttachmentLoader.h */, + BB60174C1FD928AC009BD546 /* AttachmentTimeline.h */, + BB6017321FD928AC009BD546 /* AttachmentType.h */, + BB6017541FD928AC009BD546 /* BlendMode.h */, + BB60172C1FD928AC009BD546 /* Bone.h */, + BB60175F1FD928AC009BD546 /* BoneData.h */, + BB6017591FD928AC009BD546 /* BoundingBoxAttachment.h */, + BB6017341FD928AC009BD546 /* ClippingAttachment.h */, + BB6017431FD928AC009BD546 /* ColorTimeline.h */, + BB6017461FD928AC009BD546 /* Constraint.h */, + BB60174F1FD928AC009BD546 /* ContainerUtil.h */, + BB6017291FD928AC009BD546 /* CurveTimeline.h */, + BB60171C1FD928AC009BD546 /* DeformTimeline.h */, + BB60172E1FD928AC009BD546 /* DrawOrderTimeline.h */, + BB60172B1FD928AC009BD546 /* Event.h */, + BB60171E1FD928AC009BD546 /* EventData.h */, + BB6017641FD928AC009BD546 /* EventTimeline.h */, + BB6017531FD928AC009BD546 /* Extension.h */, + BB60173A1FD928AC009BD546 /* HashMap.h */, + BB6017581FD928AC009BD546 /* IkConstraint.h */, + BB60173E1FD928AC009BD546 /* IkConstraintData.h */, + BB6017301FD928AC009BD546 /* IkConstraintTimeline.h */, + BB6017491FD928AC009BD546 /* Json.h */, + BB6017471FD928AC009BD546 /* LinkedMesh.h */, + BB60175A1FD928AC009BD546 /* MathUtil.h */, + BB6017621FD928AC009BD546 /* MeshAttachment.h */, + BB6017281FD928AC009BD546 /* MixDirection.h */, + BB60173F1FD928AC009BD546 /* MixPose.h */, + BB6017271FD928AC009BD546 /* PathAttachment.h */, + BB6017551FD928AC009BD546 /* PathConstraint.h */, + BB6017501FD928AC009BD546 /* PathConstraintData.h */, + BB6017201FD928AC009BD546 /* PathConstraintMixTimeline.h */, + BB6017351FD928AC009BD546 /* PathConstraintPositionTimeline.h */, + BB6017561FD928AC009BD546 /* PathConstraintSpacingTimeline.h */, + BB60172A1FD928AC009BD546 /* PointAttachment.h */, + BB6017221FD928AC009BD546 /* Pool.h */, + BB6017251FD928AC009BD546 /* PositionMode.h */, + BB6017381FD928AC009BD546 /* RegionAttachment.h */, + BB6017331FD928AC009BD546 /* RotateMode.h */, + BB6017361FD928AC009BD546 /* RotateTimeline.h */, + BB6017261FD928AC009BD546 /* RTTI.h */, + BB6017571FD928AC009BD546 /* ScaleTimeline.h */, + BB6017481FD928AC009BD546 /* ShearTimeline.h */, + BB6017421FD928AC009BD546 /* Skeleton.h */, + BB60174D1FD928AC009BD546 /* SkeletonBinary.h */, + BB60175C1FD928AC009BD546 /* SkeletonBounds.h */, + BB6017211FD928AC009BD546 /* SkeletonClipping.h */, + BB60174E1FD928AC009BD546 /* SkeletonData.h */, + BB60173D1FD928AC009BD546 /* SkeletonJson.h */, + BB60174B1FD928AC009BD546 /* Skin.h */, + BB60175E1FD928AC009BD546 /* Slot.h */, + BB60171F1FD928AC009BD546 /* SlotData.h */, + BB6017441FD928AC009BD546 /* SpacingMode.h */, + BB6017241FD928AC009BD546 /* TextureLoader.h */, + BB60175D1FD928AC009BD546 /* Timeline.h */, + BB6017231FD928AC009BD546 /* TimelineType.h */, + BB60173B1FD928AC009BD546 /* TransformConstraint.h */, + BB6017521FD928AC009BD546 /* TransformConstraintData.h */, + BB60172F1FD928AC009BD546 /* TransformConstraintTimeline.h */, + BB60173C1FD928AC009BD546 /* TransformMode.h */, + BB6017601FD928AC009BD546 /* TranslateTimeline.h */, + BB6017371FD928AC009BD546 /* Triangulator.h */, + BB6017411FD928AC009BD546 /* TwoColorTimeline.h */, + BB6017511FD928AC009BD546 /* Updatable.h */, + BB60175B1FD928AC009BD546 /* Vector.h */, + BB6017311FD928AC009BD546 /* VertexAttachment.h */, + BB6017451FD928AC009BD546 /* Vertices.h */, + ); + path = spine; + sourceTree = ""; + }; + BB6017651FD928AC009BD546 /* src */ = { + isa = PBXGroup; + children = ( + BB6017661FD928AC009BD546 /* spine */, + ); + path = src; + sourceTree = ""; + }; + BB6017661FD928AC009BD546 /* spine */ = { + isa = PBXGroup; + children = ( + BB60178A1FD928AC009BD546 /* Animation.cpp */, + BB6017951FD928AC009BD546 /* AnimationState.cpp */, + BB6017761FD928AC009BD546 /* AnimationStateData.cpp */, + BB6017801FD928AC009BD546 /* Atlas.cpp */, + BB60176D1FD928AC009BD546 /* AtlasAttachmentLoader.cpp */, + BB6017671FD928AC009BD546 /* Attachment.cpp */, + BB60178B1FD928AC009BD546 /* AttachmentLoader.cpp */, + BB60178D1FD928AC009BD546 /* AttachmentTimeline.cpp */, + BB60176C1FD928AC009BD546 /* Bone.cpp */, + BB6017971FD928AC009BD546 /* BoneData.cpp */, + BB6017781FD928AC009BD546 /* BoundingBoxAttachment.cpp */, + BB6017811FD928AC009BD546 /* ClippingAttachment.cpp */, + BB6017A11FD928AC009BD546 /* ColorTimeline.cpp */, + BB6017771FD928AC009BD546 /* Constraint.cpp */, + BB6017751FD928AC009BD546 /* CurveTimeline.cpp */, + BB6017891FD928AC009BD546 /* DeformTimeline.cpp */, + BB60178C1FD928AC009BD546 /* DrawOrderTimeline.cpp */, + BB6017991FD928AC009BD546 /* Event.cpp */, + BB60178E1FD928AC009BD546 /* EventData.cpp */, + BB60176E1FD928AC009BD546 /* EventTimeline.cpp */, + BB60176A1FD928AC009BD546 /* Extension.cpp */, + BB6017741FD928AC009BD546 /* IkConstraint.cpp */, + BB60177F1FD928AC009BD546 /* IkConstraintData.cpp */, + BB6017981FD928AC009BD546 /* IkConstraintTimeline.cpp */, + BB60179D1FD928AC009BD546 /* Json.cpp */, + BB6017861FD928AC009BD546 /* LinkedMesh.cpp */, + BB60177E1FD928AC009BD546 /* MathUtil.cpp */, + BB60177A1FD928AC009BD546 /* MeshAttachment.cpp */, + BB6017791FD928AC009BD546 /* PathAttachment.cpp */, + BB60176F1FD928AC009BD546 /* PathConstraint.cpp */, + BB6017821FD928AC009BD546 /* PathConstraintData.cpp */, + BB60179B1FD928AC009BD546 /* PathConstraintMixTimeline.cpp */, + BB6017901FD928AC009BD546 /* PathConstraintPositionTimeline.cpp */, + BB60178F1FD928AC009BD546 /* PathConstraintSpacingTimeline.cpp */, + BB6017871FD928AC009BD546 /* PointAttachment.cpp */, + BB6017881FD928AC009BD546 /* RegionAttachment.cpp */, + BB60179A1FD928AC009BD546 /* RotateTimeline.cpp */, + BB60177D1FD928AC009BD546 /* RTTI.cpp */, + BB6017851FD928AC009BD546 /* ScaleTimeline.cpp */, + BB6017A01FD928AC009BD546 /* ShearTimeline.cpp */, + BB6017681FD928AC009BD546 /* Skeleton.cpp */, + BB6017841FD928AC009BD546 /* SkeletonBinary.cpp */, + BB60179E1FD928AC009BD546 /* SkeletonBounds.cpp */, + BB6017921FD928AC009BD546 /* SkeletonClipping.cpp */, + BB6017721FD928AC009BD546 /* SkeletonData.cpp */, + BB6017961FD928AC009BD546 /* SkeletonJson.cpp */, + BB60177C1FD928AC009BD546 /* Skin.cpp */, + BB6017941FD928AC009BD546 /* Slot.cpp */, + BB60179F1FD928AC009BD546 /* SlotData.cpp */, + BB6017711FD928AC009BD546 /* TextureLoader.cpp */, + BB6017831FD928AC009BD546 /* Timeline.cpp */, + BB60177B1FD928AC009BD546 /* TransformConstraint.cpp */, + BB6017911FD928AC009BD546 /* TransformConstraintData.cpp */, + BB6017731FD928AC009BD546 /* TransformConstraintTimeline.cpp */, + BB6017691FD928AC009BD546 /* TranslateTimeline.cpp */, + BB60179C1FD928AC009BD546 /* Triangulator.cpp */, + BB6017931FD928AC009BD546 /* TwoColorTimeline.cpp */, + BB60176B1FD928AC009BD546 /* Updatable.cpp */, + BB6017701FD928AC009BD546 /* VertexAttachment.cpp */, + ); + path = spine; + sourceTree = ""; + }; + BB6017DD1FD928F6009BD546 /* memory */ = { + isa = PBXGroup; + children = ( + BB6017DE1FD928F6009BD546 /* KMemory.h */, + BB6017DF1FD928F6009BD546 /* KString.h */, + BB6017E01FD928F6009BD546 /* KMemory.cpp */, + BB6017E11FD928F6009BD546 /* KString.cpp */, + ); + name = memory; + path = ../memory; + sourceTree = ""; + }; + BB6017E41FD929D0009BD546 /* minicppunit */ = { + isa = PBXGroup; + children = ( + BB6017E51FD929D0009BD546 /* MiniCppUnit.hxx */, + BB6017E61FD929D0009BD546 /* MiniCppUnit.cxx */, + ); + name = minicppunit; + path = ../minicppunit; + sourceTree = ""; + }; + BB6017E81FD929F4009BD546 /* teamcity */ = { + isa = PBXGroup; + children = ( + BB6017E91FD929F4009BD546 /* teamcity_cppunit.h */, + BB6017EA1FD929F4009BD546 /* teamcity_cppunit.cpp */, + BB6017EB1FD929F4009BD546 /* teamcity_messages.h */, + BB6017EC1FD929F4009BD546 /* README.txt */, + BB6017ED1FD929F4009BD546 /* teamcity_messages.cpp */, + ); + name = teamcity; + path = ../teamcity; + sourceTree = ""; + }; + BB6017F11FD92AF3009BD546 /* tests */ = { + isa = PBXGroup; + children = ( + BB6017FC1FD92AF3009BD546 /* SpineEventMonitor.h */, + BB6017FD1FD92AF3009BD546 /* SpineEventMonitor.cpp */, + ); + name = tests; + path = ../tests; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + BB60170E1FD9289A009BD546 /* spine_unit_test */ = { + isa = PBXNativeTarget; + buildConfigurationList = BB6017161FD9289A009BD546 /* Build configuration list for PBXNativeTarget "spine_unit_test" */; + buildPhases = ( + BB60170B1FD9289A009BD546 /* Sources */, + BB60170C1FD9289A009BD546 /* Frameworks */, + BB60170D1FD9289A009BD546 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = spine_unit_test; + productName = spine_unit_test; + productReference = BB60170F1FD9289A009BD546 /* spine_unit_test */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + BB6017071FD9289A009BD546 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0920; + ORGANIZATIONNAME = "Noctis Games"; + TargetAttributes = { + BB60170E1FD9289A009BD546 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = BB60170A1FD9289A009BD546 /* Build configuration list for PBXProject "spine_unit_test" */; + compatibilityVersion = "Xcode 8.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = BB6017061FD9289A009BD546; + productRefGroup = BB6017101FD9289A009BD546 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + BB60170E1FD9289A009BD546 /* spine_unit_test */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + BB60170B1FD9289A009BD546 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BB6017CB1FD928AC009BD546 /* PathConstraintPositionTimeline.cpp in Sources */, + BB6017CD1FD928AC009BD546 /* SkeletonClipping.cpp in Sources */, + BB6017B51FD928AC009BD546 /* MeshAttachment.cpp in Sources */, + BB6017C01FD928AC009BD546 /* ScaleTimeline.cpp in Sources */, + BB6017D01FD928AC009BD546 /* AnimationState.cpp in Sources */, + BB6017A31FD928AC009BD546 /* Skeleton.cpp in Sources */, + BB6017BA1FD928AC009BD546 /* IkConstraintData.cpp in Sources */, + BB6017EE1FD929F4009BD546 /* teamcity_cppunit.cpp in Sources */, + BB6017CA1FD928AC009BD546 /* PathConstraintSpacingTimeline.cpp in Sources */, + BB6017C91FD928AC009BD546 /* EventData.cpp in Sources */, + BB6017B41FD928AC009BD546 /* PathAttachment.cpp in Sources */, + BB6017A91FD928AC009BD546 /* EventTimeline.cpp in Sources */, + BB6017A21FD928AC009BD546 /* Attachment.cpp in Sources */, + BB6017C81FD928AC009BD546 /* AttachmentTimeline.cpp in Sources */, + BB6017E21FD928F7009BD546 /* KMemory.cpp in Sources */, + BB6017E71FD929D0009BD546 /* MiniCppUnit.cxx in Sources */, + BB6017DA1FD928AC009BD546 /* SlotData.cpp in Sources */, + BB6017BE1FD928AC009BD546 /* Timeline.cpp in Sources */, + BB6017BF1FD928AC009BD546 /* SkeletonBinary.cpp in Sources */, + BB6017131FD9289A009BD546 /* main.cpp in Sources */, + BB6017B21FD928AC009BD546 /* Constraint.cpp in Sources */, + BB6017A41FD928AC009BD546 /* TranslateTimeline.cpp in Sources */, + BB6017A71FD928AC009BD546 /* Bone.cpp in Sources */, + BB6017DC1FD928AC009BD546 /* ColorTimeline.cpp in Sources */, + BB6017AE1FD928AC009BD546 /* TransformConstraintTimeline.cpp in Sources */, + BB6017BB1FD928AC009BD546 /* Atlas.cpp in Sources */, + BB6017C21FD928AC009BD546 /* PointAttachment.cpp in Sources */, + BB6017C11FD928AC009BD546 /* LinkedMesh.cpp in Sources */, + BB6017A61FD928AC009BD546 /* Updatable.cpp in Sources */, + BB6017DB1FD928AC009BD546 /* ShearTimeline.cpp in Sources */, + BB6017C31FD928AC009BD546 /* RegionAttachment.cpp in Sources */, + BB6017D71FD928AC009BD546 /* Triangulator.cpp in Sources */, + BB6017EF1FD929F4009BD546 /* teamcity_messages.cpp in Sources */, + BB6017D61FD928AC009BD546 /* PathConstraintMixTimeline.cpp in Sources */, + BB6017CC1FD928AC009BD546 /* TransformConstraintData.cpp in Sources */, + BB6017C71FD928AC009BD546 /* DrawOrderTimeline.cpp in Sources */, + BB6017B61FD928AC009BD546 /* TransformConstraint.cpp in Sources */, + BB6017BC1FD928AC009BD546 /* ClippingAttachment.cpp in Sources */, + BB6017B81FD928AC009BD546 /* RTTI.cpp in Sources */, + BB6017A51FD928AC009BD546 /* Extension.cpp in Sources */, + BB6017C41FD928AC009BD546 /* DeformTimeline.cpp in Sources */, + BB6017A81FD928AC009BD546 /* AtlasAttachmentLoader.cpp in Sources */, + BB6017AA1FD928AC009BD546 /* PathConstraint.cpp in Sources */, + BB6017B71FD928AC009BD546 /* Skin.cpp in Sources */, + BB6017D21FD928AC009BD546 /* BoneData.cpp in Sources */, + BB6017C61FD928AC009BD546 /* AttachmentLoader.cpp in Sources */, + BB6017CF1FD928AC009BD546 /* Slot.cpp in Sources */, + BB6017B91FD928AC009BD546 /* MathUtil.cpp in Sources */, + BB6017B11FD928AC009BD546 /* AnimationStateData.cpp in Sources */, + BB6018081FD92AF4009BD546 /* SpineEventMonitor.cpp in Sources */, + BB6017E31FD928F7009BD546 /* KString.cpp in Sources */, + BB6017D41FD928AC009BD546 /* Event.cpp in Sources */, + BB6017D81FD928AC009BD546 /* Json.cpp in Sources */, + BB6017CE1FD928AC009BD546 /* TwoColorTimeline.cpp in Sources */, + BB6017AD1FD928AC009BD546 /* SkeletonData.cpp in Sources */, + BB6017D11FD928AC009BD546 /* SkeletonJson.cpp in Sources */, + BB6017D31FD928AC009BD546 /* IkConstraintTimeline.cpp in Sources */, + BB6017AF1FD928AC009BD546 /* IkConstraint.cpp in Sources */, + BB6017AC1FD928AC009BD546 /* TextureLoader.cpp in Sources */, + BB6017C51FD928AC009BD546 /* Animation.cpp in Sources */, + BB6017B01FD928AC009BD546 /* CurveTimeline.cpp in Sources */, + BB6017BD1FD928AC009BD546 /* PathConstraintData.cpp in Sources */, + BB6017D91FD928AC009BD546 /* SkeletonBounds.cpp in Sources */, + BB6017B31FD928AC009BD546 /* BoundingBoxAttachment.cpp in Sources */, + BB6017D51FD928AC009BD546 /* RotateTimeline.cpp in Sources */, + BB6017AB1FD928AC009BD546 /* VertexAttachment.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + BB6017141FD9289A009BD546 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + BB6017151FD9289A009BD546 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + BB6017171FD9289A009BD546 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../spine-cpp/include\""; + OTHER_LDFLAGS = "-DKANJI_MEMTRACE"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + BB6017181FD9289A009BD546 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + HEADER_SEARCH_PATHS = "\"$(SRCROOT)/../../spine-cpp/include\""; + OTHER_LDFLAGS = "-DKANJI_MEMTRACE"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + BB60170A1FD9289A009BD546 /* Build configuration list for PBXProject "spine_unit_test" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BB6017141FD9289A009BD546 /* Debug */, + BB6017151FD9289A009BD546 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BB6017161FD9289A009BD546 /* Build configuration list for PBXNativeTarget "spine_unit_test" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BB6017171FD9289A009BD546 /* Debug */, + BB6017181FD9289A009BD546 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = BB6017071FD9289A009BD546 /* Project object */; +} diff --git a/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..af455f762 --- /dev/null +++ b/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test/SimpleTest.h b/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test/SimpleTest.h new file mode 100644 index 000000000..b030095f6 --- /dev/null +++ b/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test/SimpleTest.h @@ -0,0 +1,197 @@ +// +// SimpleTest.h +// TestHarness +// +// Created by Stephen Gowen on 11/9/17. +// Copyright © 2017 Noctis Games. All rights reserved. +// + +#ifndef SimpleTest_h +#define SimpleTest_h + +#include "SpineEventMonitor.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + +#include + +#include "KMemory.h" // last include + +#define SPINEBOY_JSON "/Users/sgowen/Dropbox/Documents/freelance/NoctisGames/github/dante/src/3rdparty/spine-runtimes/examples/spineboy/export/spineboy-ess.json" +#define SPINEBOY_ATLAS "/Users/sgowen/Dropbox/Documents/freelance/NoctisGames/github/dante/src/3rdparty/spine-runtimes/examples/spineboy/export/spineboy.atlas" + +#define RAPTOR_JSON "/Users/sgowen/Dropbox/Documents/freelance/NoctisGames/github/dante/src/3rdparty/spine-runtimes/examples/raptor/export/raptor-pro.json" +#define RAPTOR_ATLAS "/Users/sgowen/Dropbox/Documents/freelance/NoctisGames/github/dante/src/3rdparty/spine-runtimes/examples/raptor/export/raptor.atlas" + +#define GOBLINS_JSON "/Users/sgowen/Dropbox/Documents/freelance/NoctisGames/github/dante/src/3rdparty/spine-runtimes/examples/goblins/export/goblins-pro.json" +#define GOBLINS_ATLAS "/Users/sgowen/Dropbox/Documents/freelance/NoctisGames/github/dante/src/3rdparty/spine-runtimes/examples/goblins/export/goblins.atlas" + +#define MAX_RUN_TIME 6000 // equal to about 100 seconds of execution + +namespace Spine +{ + class SimpleTest + { + public: + static SkeletonData* readSkeletonJsonData(const char* filename, Atlas* atlas) + { + Vector atlasArray; + atlasArray.push_back(atlas); + + SkeletonJson* skeletonJson = NEW(SkeletonJson); + new (skeletonJson) SkeletonJson(atlasArray); + assert(skeletonJson != 0); + + SkeletonData* skeletonData = skeletonJson->readSkeletonDataFile(filename); + assert(skeletonData != 0); + + DESTROY(SkeletonJson, skeletonJson); + + return skeletonData; + } + + typedef std::vector AnimList; + + static size_t enumerateAnimations(AnimList& outList, SkeletonData* skeletonData) + { + if (skeletonData) + { + for (int n = 0; n < skeletonData->getAnimations().size(); n++) + { + outList.push_back(skeletonData->getAnimations()[n]->getName()); + } + } + + return outList.size(); + } + + class MyTextureLoader : public TextureLoader + { + virtual void load(AtlasPage& page, std::string path) + { + page.rendererObject = NULL; + page.width = 2048; + page.height = 2048; + } + + virtual void unload(void* texture) + { + // TODO + } + }; + + static void testRunner(const char* jsonName, const char* atlasName) + { + /////////////////////////////////////////////////////////////////////////// + // Global Animation Information + MyTextureLoader myTextureLoader; + Atlas* atlas = NEW(Atlas); + new (atlas) Atlas(atlasName, myTextureLoader); + assert(atlas != 0); + + SkeletonData* skeletonData = readSkeletonJsonData(jsonName, atlas); + assert(skeletonData != 0); + + AnimationStateData* stateData = NEW(AnimationStateData); + new (stateData) AnimationStateData(*skeletonData); + assert(stateData != 0); + stateData->setDefaultMix(0.2f); // force mixing + + /////////////////////////////////////////////////////////////////////////// + // Animation Instance + Skeleton* skeleton = NEW(Skeleton); + new (skeleton) Skeleton(*skeletonData); + assert(skeleton != 0); + + AnimationState* state = NEW(AnimationState); + new (state) AnimationState(*stateData); + assert(state != 0); + + /////////////////////////////////////////////////////////////////////////// + // Run animation + skeleton->setToSetupPose(); + SpineEventMonitor eventMonitor(state); + + AnimList anims; // Let's chain all the animations together as a test + size_t count = enumerateAnimations(anims, skeletonData); + if (count > 0) + { + state->setAnimation(0, anims[0].c_str(), false); + } + + for (size_t i = 1; i < count; ++i) + { + state->addAnimation(0, anims[i].c_str(), false, 0.0f); + } + + // Run Loop + for (int i = 0; i < MAX_RUN_TIME && eventMonitor.isAnimationPlaying(); ++i) + { + const float timeSlice = 1.0f / 60.0f; + skeleton->update(timeSlice); + state->update(timeSlice); + state->apply(*skeleton); + } + + /////////////////////////////////////////////////////////////////////////// + // Dispose Instance + DESTROY(Skeleton, skeleton); + DESTROY(AnimationState, state); + + /////////////////////////////////////////////////////////////////////////// + // Dispose Global + DESTROY(AnimationStateData, stateData); + DESTROY(SkeletonData, skeletonData); + DESTROY(Atlas, atlas); + } + + static void spineboyTestCase() + { + testRunner(SPINEBOY_JSON, SPINEBOY_ATLAS); + } + + static void raptorTestCase() + { + testRunner(RAPTOR_JSON, RAPTOR_ATLAS); + } + + static void goblinsTestCase() + { + testRunner(GOBLINS_JSON, GOBLINS_ATLAS); + } + + static void test() + { + spineboyTestCase(); + raptorTestCase(); + goblinsTestCase(); + } + + private: + // ctor, copy ctor, and assignment should be private in a Singleton + SimpleTest(); + SimpleTest(const SimpleTest&); + SimpleTest& operator=(const SimpleTest&); + }; +} + +#endif /* SimpleTest_h */ diff --git a/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test/main.cpp b/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test/main.cpp new file mode 100644 index 000000000..ea1741f2f --- /dev/null +++ b/spine-cpp/spine-cpp-unit-tests/spine_unit_test/spine_unit_test/main.cpp @@ -0,0 +1,111 @@ +// +// main.cpp +// spine_unit_test +// +// Created by Stephen Gowen on 12/7/17. +// Copyright © 2017 Noctis Games. All rights reserved. +// + +#ifdef WIN32 +#include +#else +#include +#endif // WIN32 + +#include +#include "KString.h" +#include + +#include "spine/Extension.h" + +#include "SimpleTest.h" + +#include "KMemory.h" // last include + +using namespace Spine; + +class KanjiSpineExtension : public DefaultSpineExtension +{ +public: + static KanjiSpineExtension* getInstance(); + + virtual ~KanjiSpineExtension(); + + virtual void* spineAlloc(size_t size, const char* file, int line); + + virtual void* spineCalloc(size_t num, size_t size, const char* file, int line); + + virtual void* spineRealloc(void* ptr, size_t size, const char* file, int line); + + virtual void spineFree(void* mem); + +protected: + KanjiSpineExtension(); +}; + +KanjiSpineExtension* KanjiSpineExtension::getInstance() +{ + static KanjiSpineExtension ret; + return &ret; +} + +KanjiSpineExtension::~KanjiSpineExtension() +{ + // Empty +} + +void* KanjiSpineExtension::spineAlloc(size_t size, const char* file, int line) +{ + return _kanjimalloc(size); +} + +void* KanjiSpineExtension::spineCalloc(size_t num, size_t size, const char* file, int line) +{ + void* ptr = spineAlloc(num * size, file, line); + if (ptr) + { + memset(ptr, 0, num * size); + } + + return ptr; +} + +void* KanjiSpineExtension::spineRealloc(void* ptr, size_t size, const char* file, int line) +{ + return _kanjirealloc(ptr, size); +} + +void KanjiSpineExtension::spineFree(void* mem) +{ + _kanjifree(mem); +} + +KanjiSpineExtension::KanjiSpineExtension() : DefaultSpineExtension() +{ + // Empty +} + +int main(int argc, char* argv[]) +{ + SpineExtension::setInstance(KanjiSpineExtension::getInstance()); + + // Start Timing + time_t start_time, end_time; + time(&start_time); + + /* Set working directory to current location for opening test data */ +#ifdef WIN32 + _chdir( GetFileDir(argv[0], false).c_str() ); +#else + chdir(GetFileDir(argv[0], false).c_str()); +#endif + + SimpleTest::test(); + + // End Timing + time(&end_time); + double secs = difftime(end_time,start_time); + printf("\n\n%i minutes and %i seconds of your life taken from you by these tests.\n", ((int)secs) / 60, ((int)secs) % 60); + + return 0; +} diff --git a/spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.cpp b/spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.cpp index 2c1cb61bc..072c8531d 100755 --- a/spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.cpp +++ b/spine-cpp/spine-cpp-unit-tests/tests/C_InterfaceTestFixture.cpp @@ -35,9 +35,7 @@ #define GOBLINS_JSON "testdata/goblins/goblins-pro.json" #define GOBLINS_ATLAS "testdata/goblins/goblins.atlas" -#define MAX_RUN_TIME 6000 // equal to about 100 seconds of execution - -using namespace Spine; +#define MAX_RUN_TIME 6000 // equal to about 100 seconds of execution void C_InterfaceTestFixture::setUp() { @@ -47,8 +45,10 @@ void C_InterfaceTestFixture::tearDown() { } -static SkeletonData* readSkeletonJsonData(const char* filename, Atlas* atlas) +static Spine::SkeletonData* readSkeletonJsonData(const char* filename, Atlas* atlas) { + using namespace Spine; + Vector atlasArray; atlasArray.push_back(atlas); diff --git a/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.cpp b/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.cpp index 9ea3e4d6e..b24f39521 100755 --- a/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.cpp +++ b/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.cpp @@ -2,8 +2,13 @@ #include "KString.h" +#include +#include + #include "KMemory.h" // Last include +using namespace Spine; + SpineEventMonitor::SpineEventMonitor(AnimationState* _pAnimationState /*= nullptr*/) { bLogging = false; @@ -17,53 +22,53 @@ SpineEventMonitor::~SpineEventMonitor() void SpineEventMonitor::RegisterListener(AnimationState * _pAnimationState) { -// if (_pAnimationState) -// { -// _pAnimationState->rendererObject = this; -// _pAnimationState->listener = (spAnimationStateListener)&SpineEventMonitor::spineAnimStateHandler; -// } -// pAnimState = _pAnimationState; + if (_pAnimationState) + { + _pAnimationState->setRendererObject(this); + _pAnimationState->setOnAnimationEventFunc(&SpineEventMonitor::spineAnimStateHandler); + } + pAnimState = _pAnimationState; } bool SpineEventMonitor::isAnimationPlaying() { -// if (pAnimState) -// { -// return spAnimationState_getCurrent(pAnimState, 0) != 0; -// } + if (pAnimState) + { + return pAnimState->getCurrent(0) != NULL; + } return false; } -void SpineEventMonitor::spineAnimStateHandler(AnimationState * state, int type, spTrackEntry * entry, spEvent * event) +void SpineEventMonitor::spineAnimStateHandler(AnimationState* state, EventType type, TrackEntry* entry, Event* event) { -// if (state && state->rendererObject) -// { -// SpineEventMonitor* pEventMonitor = (SpineEventMonitor*)state->rendererObject; -// pEventMonitor->OnSpineAnimationStateEvent(state, type, entry, event); -// } + if (state && state->getRendererObject()) + { + SpineEventMonitor* pEventMonitor = (SpineEventMonitor*)state->getRendererObject(); + pEventMonitor->OnSpineAnimationStateEvent(state, type, entry, event); + } } -void SpineEventMonitor::OnSpineAnimationStateEvent(AnimationState * state, int type, spTrackEntry * trackEntry, spEvent * event) +void SpineEventMonitor::OnSpineAnimationStateEvent(AnimationState* state, EventType type, TrackEntry* entry, Event* event) { -// const char* eventName = 0; -// if (state == pAnimState) -// { -// // only monitor ours -// switch(type) -// { -// case SP_ANIMATION_START: eventName = "SP_ANIMATION_START"; break; -// case SP_ANIMATION_INTERRUPT: eventName = "SP_ANIMATION_INTERRUPT"; break; -// case SP_ANIMATION_END: eventName = "SP_ANIMATION_END"; break; -// case SP_ANIMATION_COMPLETE: eventName = "SP_ANIMATION_COMPLETE"; break; -// case SP_ANIMATION_DISPOSE: eventName = "SP_ANIMATION_DISPOSE"; break; -// case SP_ANIMATION_EVENT: eventName = "SP_ANIMATION_EVENT"; break; -// default: -// break; -// } -// -// if (bLogging && eventName && trackEntry && trackEntry->animation && trackEntry->animation->name) -// KOutputDebug(DEBUGLVL, "[%s : '%s']\n", eventName, trackEntry->animation->name);//*/ -// } + const char* eventName = 0; + if (state == pAnimState) + { + // only monitor ours + switch(type) + { + case EventType_Start: eventName = "EventType_Start"; break; + case EventType_Interrupt: eventName = "EventType_Interrupt"; break; + case EventType_End: eventName = "EventType_End"; break; + case EventType_Complete: eventName = "EventType_Complete"; break; + case EventType_Dispose: eventName = "EventType_Dispose"; break; + case EventType_Event: eventName = "EventType_Event"; break; + default: + break; + } + + if (bLogging && eventName && entry && entry->getAnimation()) + KOutputDebug(DEBUGLVL, "[%s : '%s']\n", eventName, entry->getAnimation()->getName().c_str());//*/ + } } InterruptMonitor::InterruptMonitor(AnimationState * _pAnimationState): @@ -98,7 +103,7 @@ InterruptMonitor& InterruptMonitor::AddInterruptEvent(int theEventType, const st } // stops the first encounter of spEventType on the specified TrackEntry -InterruptMonitor& InterruptMonitor::AddInterruptEvent(int theEventType, spTrackEntry * theTrackEntry) +InterruptMonitor& InterruptMonitor::AddInterruptEvent(int theEventType, TrackEntry * theTrackEntry) { InterruptEvent ev; ev.mEventType = theEventType; @@ -117,7 +122,7 @@ InterruptMonitor& InterruptMonitor::AddInterruptEventTrigger(const std::string & return *this; } -void InterruptMonitor::OnSpineAnimationStateEvent(AnimationState * state, int type, spTrackEntry * trackEntry, spEvent * event) +void InterruptMonitor::OnSpineAnimationStateEvent(AnimationState * state, EventType type, TrackEntry * trackEntry, Event * event) { SpineEventMonitor::OnSpineAnimationStateEvent(state, type, trackEntry, event); @@ -136,41 +141,41 @@ void InterruptMonitor::OnSpineAnimationStateEvent(AnimationState * state, int ty } } -inline bool InterruptMonitor::InterruptEvent::matches(AnimationState * state, int type, spTrackEntry * trackEntry, spEvent * event) +inline bool InterruptMonitor::InterruptEvent::matches(AnimationState * state, EventType type, TrackEntry * trackEntry, Event * event) { // Must match spEventType {SP_ANIMATION_START, SP_ANIMATION_INTERRUPT, SP_ANIMATION_END, SP_ANIMATION_COMPLETE, SP_ANIMATION_DISPOSE, SP_ANIMATION_EVENT } -// if (mEventType == type) -// { -// // Looking for specific TrackEntry by pointer -// if (mTrackEntry != 0) -// { -// return mTrackEntry == trackEntry; -// } -// -// // looking for Animation Track by name -// if (!mAnimName.empty()) -// { -// if (trackEntry && trackEntry->animation && trackEntry->animation->name) -// { -// if (CompareNoCase(trackEntry->animation->name, mAnimName) == 0) -// { -// return true; -// } -// } -// return false; -// } -// -// // looking for Event String Text -// if (!mEventName.empty()) -// { -// if (event && event->stringValue) -// { -// return (CompareNoCase(event->stringValue, mEventName) == 0); -// } -// return false; -// } -// -// return true; // waiting for ANY spEventType that matches -// } + if (mEventType == type) + { + // Looking for specific TrackEntry by pointer + if (mTrackEntry != 0) + { + return mTrackEntry == trackEntry; + } + + // looking for Animation Track by name + if (!mAnimName.empty()) + { + if (trackEntry && trackEntry->getAnimation()) + { + if (CompareNoCase(trackEntry->getAnimation()->getName(), mAnimName) == 0) + { + return true; + } + } + return false; + } + + // looking for Event String Text + if (!mEventName.empty()) + { + if (event) + { + return (CompareNoCase(event->getStringValue(), mEventName) == 0); + } + return false; + } + + return true; // waiting for ANY spEventType that matches + } return false; } diff --git a/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.h b/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.h index df177c03c..4590a1e6e 100755 --- a/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.h +++ b/spine-cpp/spine-cpp-unit-tests/tests/SpineEventMonitor.h @@ -7,12 +7,7 @@ #pragma once #include -#include - -// forward declarations -typedef struct spAnimationState spAnimationState; -typedef struct spTrackEntry spTrackEntry; -typedef struct spEvent spEvent; +#include #include @@ -22,7 +17,7 @@ using namespace Spine; // class: SpineEventMonitor // // purpose: Monitor spAnimationState Events and report when there -// are no more spTrackEntry(s) waiting to play on track 0; +// are no more TrackEntry(s) waiting to play on track 0; // // Also allows for debug printing of Events to console. ///////////////////////////////////////////////////////////////////// @@ -40,8 +35,8 @@ public: virtual bool isAnimationPlaying(); protected: - static void spineAnimStateHandler(AnimationState* state, int type, spTrackEntry* entry, spEvent* event); - virtual void OnSpineAnimationStateEvent(AnimationState* state, int type, spTrackEntry* trackEntry, spEvent* event); + static void spineAnimStateHandler(AnimationState* state, EventType type, TrackEntry* entry, Event* event); + virtual void OnSpineAnimationStateEvent(AnimationState* state, EventType type, TrackEntry* entry, Event* event); protected: AnimationState *pAnimState; @@ -65,11 +60,11 @@ private: mTrackEntry = 0; } - bool matches(AnimationState* state, int type, spTrackEntry* trackEntry, spEvent* event); + bool matches(AnimationState* state, EventType type, TrackEntry* trackEntry, Event* event); std::string mAnimName; int mEventType; - spTrackEntry* mTrackEntry; + TrackEntry* mTrackEntry; std::string mEventName; }; typedef std::vector InterruptEventStack; @@ -84,11 +79,11 @@ public: public: InterruptMonitor& AddInterruptEvent(int theEventType); InterruptMonitor& AddInterruptEvent(int theEventType, const std::string& theAnimationName); - InterruptMonitor& AddInterruptEvent(int theEventType, spTrackEntry* theTrackEntry); + InterruptMonitor& AddInterruptEvent(int theEventType, TrackEntry* theTrackEntry); InterruptMonitor& AddInterruptEventTrigger(const std::string& theEventTriggerName); protected: - virtual void OnSpineAnimationStateEvent(AnimationState* state, int type, spTrackEntry* trackEntry, spEvent* event) override; + virtual void OnSpineAnimationStateEvent(AnimationState* state, EventType type, TrackEntry* trackEntry, Event* event) override; virtual void OnMatchingComplete() {} protected: @@ -119,7 +114,7 @@ eventMonitor.SetDebugLogging(true); // Interrupt the animation on this specific sequence of spEventType(s) eventMonitor - .AddInterruptEvent(SP_ANIMATION_INTERRUPT, "jump") // First, wait for INTERRUPT signal on the 'jump' animation spTrackEntry + .AddInterruptEvent(SP_ANIMATION_INTERRUPT, "jump") // First, wait for INTERRUPT signal on the 'jump' animation TrackEntry .AddInterruptEvent(SP_ANIMATION_START); // Then, stop on any following START signal diff --git a/spine-cpp/spine-cpp/include/spine/AnimationState.h b/spine-cpp/spine-cpp/include/spine/AnimationState.h index 2b58862bb..09821da5b 100644 --- a/spine-cpp/spine-cpp/include/spine/AnimationState.h +++ b/spine-cpp/spine-cpp/include/spine/AnimationState.h @@ -56,7 +56,7 @@ namespace Spine class Skeleton; class RotateTimeline; - typedef void (*OnAnimationEventFunc) (AnimationState& state, EventType type, TrackEntry* entry, Event* event); + typedef void (*OnAnimationEventFunc) (AnimationState* state, EventType type, TrackEntry* entry, Event* event); /// State for the playback of an animation class TrackEntry @@ -375,6 +375,8 @@ namespace Spine float getTimeScale(); void setTimeScale(float inValue); void setOnAnimationEventFunc(OnAnimationEventFunc inValue); + void setRendererObject(void* inValue); + void* getRendererObject(); private: static const int Subsequent, First, Dip, DipMix; @@ -389,6 +391,8 @@ namespace Spine Vector _propertyIDs; Vector _mixingTo; bool _animationsChanged; + + void* _rendererObject; OnAnimationEventFunc _onAnimationEventFunc; diff --git a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp index 760e99efb..d45d3fe47 100644 --- a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp +++ b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp @@ -48,7 +48,7 @@ namespace Spine { - void dummyOnAnimationEventFunc(AnimationState& state, EventType type, TrackEntry* entry, Event* event = NULL) + void dummyOnAnimationEventFunc(AnimationState* state, EventType type, TrackEntry* entry, Event* event = NULL) { // Empty } @@ -320,22 +320,22 @@ namespace Spine case EventType_Start: case EventType_Interrupt: case EventType_Complete: - trackEntry->_onAnimationEventFunc(state, queueEntry->_type, trackEntry, NULL); - state._onAnimationEventFunc(state, queueEntry->_type, trackEntry, NULL); + trackEntry->_onAnimationEventFunc(&state, queueEntry->_type, trackEntry, NULL); + state._onAnimationEventFunc(&state, queueEntry->_type, trackEntry, NULL); break; case EventType_End: - trackEntry->_onAnimationEventFunc(state, queueEntry->_type, trackEntry, NULL); - state._onAnimationEventFunc(state, queueEntry->_type, trackEntry, NULL); + trackEntry->_onAnimationEventFunc(&state, queueEntry->_type, trackEntry, NULL); + state._onAnimationEventFunc(&state, queueEntry->_type, trackEntry, NULL); /* Yes, we want to fall through here */ case EventType_Dispose: - trackEntry->_onAnimationEventFunc(state, EventType_Dispose, trackEntry, NULL); - state._onAnimationEventFunc(state, EventType_Dispose, trackEntry, NULL); + trackEntry->_onAnimationEventFunc(&state, EventType_Dispose, trackEntry, NULL); + state._onAnimationEventFunc(&state, EventType_Dispose, trackEntry, NULL); trackEntry->reset(); _trackEntryPool.free(trackEntry); break; case EventType_Event: - trackEntry->_onAnimationEventFunc(state, queueEntry->_type, trackEntry, queueEntry->_event); - state._onAnimationEventFunc(state, queueEntry->_type, trackEntry, queueEntry->_event); + trackEntry->_onAnimationEventFunc(&state, queueEntry->_type, trackEntry, queueEntry->_event); + state._onAnimationEventFunc(&state, queueEntry->_type, trackEntry, queueEntry->_event); break; } } @@ -732,6 +732,16 @@ namespace Spine _onAnimationEventFunc = inValue; } + void AnimationState::setRendererObject(void* inValue) + { + _rendererObject = inValue; + } + + void* AnimationState::getRendererObject() + { + return _rendererObject; + } + Animation* AnimationState::getEmptyAnimation() { static Vector timelines; diff --git a/spine-cpp/spine-cpp/src/spine/Atlas.cpp b/spine-cpp/spine-cpp/src/spine/Atlas.cpp index 506f5042c..04fbbd39f 100644 --- a/spine-cpp/spine-cpp/src/spine/Atlas.cpp +++ b/spine-cpp/spine-cpp/src/spine/Atlas.cpp @@ -145,7 +145,8 @@ namespace Spine FREE(name); - assert(readTuple(&begin, end, tuple) == 2); + int tupleVal = readTuple(&begin, end, tuple); + assert(tupleVal == 2); /* size is only optional for an atlas packed with an old TexturePacker. */ page->width = toInt(tuple);