From 9cadc92b97c917872581e24512cb987f2be0e1f5 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Wed, 1 May 2013 17:53:09 +0200 Subject: [PATCH] Brought back some convenience methods. Anything more than this and you have to use the C API! --- spine-cocos2d-iphone/src/spine/CCSkeleton.h | 25 +++++++++++++ spine-cocos2d-iphone/src/spine/CCSkeleton.m | 39 ++++++++++++++++++++- spine-cocos2dx/src/spine/CCSkeleton.cpp | 38 +++++++++++++++++++- spine-cocos2dx/src/spine/CCSkeleton.h | 25 ++++++++++++- 4 files changed, 124 insertions(+), 3 deletions(-) diff --git a/spine-cocos2d-iphone/src/spine/CCSkeleton.h b/spine-cocos2d-iphone/src/spine/CCSkeleton.h index be90d222b..7c2c20be9 100644 --- a/spine-cocos2d-iphone/src/spine/CCSkeleton.h +++ b/spine-cocos2d-iphone/src/spine/CCSkeleton.h @@ -35,6 +35,7 @@ Draws a skeleton. */ @interface CCSkeleton : CCNodeRGBA { Skeleton* _skeleton; + Bone* _rootBone; float _timeScale; bool _debugSlots; bool _debugBones; @@ -52,9 +53,33 @@ Draws a skeleton. - (id) initWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale; - (id) initWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale; +// --- Convenience methods for common Skeleton_* functions. +- (void) updateWorldTransform; + +- (void) setToBindPose; +- (void) setBonesToBindPose; +- (void) setSlotsToBindPose; + +/* Returns 0 if the bone was not found. */ +- (Bone*) findBone:(NSString*)boneName; + +/* Returns 0 if the slot was not found. */ +- (Slot*) 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. 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. */ +- (Attachment*) 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) Skeleton* skeleton; @property (nonatomic) float timeScale; @property (nonatomic) bool debugSlots; @property (nonatomic) bool debugBones; +@property (nonatomic) Bone* rootBone; @end diff --git a/spine-cocos2d-iphone/src/spine/CCSkeleton.m b/spine-cocos2d-iphone/src/spine/CCSkeleton.m index dbda083a8..957d4d0fd 100644 --- a/spine-cocos2d-iphone/src/spine/CCSkeleton.m +++ b/spine-cocos2d-iphone/src/spine/CCSkeleton.m @@ -33,6 +33,7 @@ @implementation CCSkeleton @synthesize skeleton = _skeleton; +@synthesize rootBone = _rootBone; @synthesize timeScale = _timeScale; @synthesize debugSlots = _debugSlots; @synthesize debugBones = _debugBones; @@ -53,6 +54,7 @@ _ownsSkeletonData = ownsSkeletonData; _skeleton = Skeleton_create(skeletonData); + _rootBone = _skeleton->bones[0]; _blendFunc.src = GL_ONE; _blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA; @@ -232,7 +234,42 @@ return CGRectMake(minX, minY, maxX - minX, maxY - minY); } -// CCBlendProtocol +// --- Convenience methods for Skeleton_* functions. + +- (void) updateWorldTransform { + Skeleton_updateWorldTransform(_skeleton); +} + +- (void) setToBindPose { + Skeleton_setToBindPose(_skeleton); +} +- (void) setBonesToBindPose { + Skeleton_setBonesToBindPose(_skeleton); +} +- (void) setSlotsToBindPose { + Skeleton_setSlotsToBindPose(_skeleton); +} + +- (Bone*) findBone:(NSString*)boneName { + return Skeleton_findBone(_skeleton, [boneName UTF8String]); +} + +- (Slot*) findSlot:(NSString*)slotName { + return Skeleton_findSlot(_skeleton, [slotName UTF8String]); +} + +- (bool) setSkin:(NSString*)skinName { + return (bool)Skeleton_setSkinByName(_skeleton, skinName ? [skinName UTF8String] : 0); +} + +- (Attachment*) getAttachment:(NSString*)slotName attachmentName:(NSString*)attachmentName { + return Skeleton_getAttachmentForSlotName(_skeleton, [slotName UTF8String], [attachmentName UTF8String]); +} +- (bool) setAttachment:(NSString*)slotName attachmentName:(NSString*)attachmentName { + return (bool)Skeleton_setAttachment(_skeleton, [slotName UTF8String], [attachmentName UTF8String]); +} + +// --- CCBlendProtocol - (void) setBlendFunc:(ccBlendFunc)func { self.blendFunc = func; diff --git a/spine-cocos2dx/src/spine/CCSkeleton.cpp b/spine-cocos2dx/src/spine/CCSkeleton.cpp index 0e312343c..5e6b8fd8d 100644 --- a/spine-cocos2dx/src/spine/CCSkeleton.cpp +++ b/spine-cocos2dx/src/spine/CCSkeleton.cpp @@ -64,6 +64,7 @@ void CCSkeleton::initialize () { void CCSkeleton::setSkeletonData (SkeletonData *skeletonData, bool ownsSkeletonData) { skeleton = Skeleton_create(skeletonData); + rootBone = skeleton->bones[0]; this->ownsSkeletonData = ownsSkeletonData; } @@ -222,7 +223,42 @@ CCRect CCSkeleton::boundingBox () { return CCRectMake(position.x + minX, position.y + minY, maxX - minX, maxY - minY); } -// CCBlendProtocol +// --- Convenience methods for Skeleton_* functions. + +void CCSkeleton::updateWorldTransform () { + Skeleton_updateWorldTransform(skeleton); +} + +void CCSkeleton::setToBindPose () { + Skeleton_setToBindPose(skeleton); +} +void CCSkeleton::setBonesToBindPose () { + Skeleton_setBonesToBindPose(skeleton); +} +void CCSkeleton::setSlotsToBindPose () { + Skeleton_setSlotsToBindPose(skeleton); +} + +Bone* CCSkeleton::findBone (const char* boneName) const { + return Skeleton_findBone(skeleton, boneName); +} + +Slot* CCSkeleton::findSlot (const char* slotName) const { + return Skeleton_findSlot(skeleton, slotName); +} + +bool CCSkeleton::setSkin (const char* skinName) { + return Skeleton_setSkinByName(skeleton, skinName) ? true : false; +} + +Attachment* CCSkeleton::getAttachment (const char* slotName, const char* attachmentName) const { + return Skeleton_getAttachmentForSlotName(skeleton, slotName, attachmentName); +} +bool CCSkeleton::setAttachment (const char* slotName, const char* attachmentName) { + return Skeleton_setAttachment(skeleton, slotName, attachmentName) ? true : false; +} + +// --- CCBlendProtocol ccBlendFunc CCSkeleton::getBlendFunc () { return blendFunc; diff --git a/spine-cocos2dx/src/spine/CCSkeleton.h b/spine-cocos2dx/src/spine/CCSkeleton.h index 0dea58b9c..b4f2c241e 100644 --- a/spine-cocos2dx/src/spine/CCSkeleton.h +++ b/spine-cocos2dx/src/spine/CCSkeleton.h @@ -37,6 +37,7 @@ Draws a skeleton. class CCSkeleton: public cocos2d::CCNodeRGBA, public cocos2d::CCBlendProtocol { public: Skeleton* skeleton; + Bone* rootBone; float timeScale; bool debugSlots; bool debugBones; @@ -55,7 +56,29 @@ public: virtual void draw (); virtual cocos2d::CCRect boundingBox (); - // CCBlendProtocol + // --- Convenience methods for common Skeleton_* functions. + void updateWorldTransform (); + + void setToBindPose (); + void setBonesToBindPose (); + void setSlotsToBindPose (); + + /* Returns 0 if the bone was not found. */ + Bone* findBone (const char* boneName) const; + /* Returns 0 if the slot was not found. */ + Slot* findSlot (const char* slotName) const; + + /* Sets the skin used to look up attachments not found in the SkeletonData defaultSkin. Attachments from the new skin are + * attached if the corresponding attachment from the old skin was attached. Returns false if the skin was not found. + * @param skin May be 0.*/ + bool setSkin (const char* skinName); + + /* Returns 0 if the slot or attachment was not found. */ + Attachment* getAttachment (const char* slotName, const char* attachmentName) const; + /* Returns false if the slot or attachment was not found. */ + bool setAttachment (const char* slotName, const char* attachmentName); + + // --- CCBlendProtocol CC_PROPERTY(cocos2d::ccBlendFunc, blendFunc, BlendFunc); protected: