Przeglądaj źródła

Refactoring to make it easier to load a SkeletonData in a subclass constructor.

NathanSweet 12 lat temu
rodzic
commit
0d488eafe6

+ 2 - 2
spine-cocos2d-iphone/src/spine/CCSkeleton.h

@@ -44,11 +44,11 @@ Draws a skeleton.
 	Atlas* _atlas;
 	Atlas* _atlas;
 }
 }
 
 
-+ (id) skeletonWithData:(SkeletonData*)skeletonData;
++ (id) skeletonWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
 
 
-- (id) initWithData:(SkeletonData*)skeletonData;
+- (id) initWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;
 - (id) initWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
 - (id) initWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
 - (id) initWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
 - (id) initWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
 
 

+ 10 - 10
spine-cocos2d-iphone/src/spine/CCSkeleton.m

@@ -27,7 +27,7 @@
 #import <spine/spine-cocos2d-iphone.h>
 #import <spine/spine-cocos2d-iphone.h>
 
 
 @interface CCSkeleton (Private)
 @interface CCSkeleton (Private)
-- (void) initialize:(SkeletonData*)skeletonData;
+- (void) initialize:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;
 @end
 @end
 
 
 @implementation CCSkeleton
 @implementation CCSkeleton
@@ -37,8 +37,8 @@
 @synthesize debugSlots = _debugSlots;
 @synthesize debugSlots = _debugSlots;
 @synthesize debugBones = _debugBones;
 @synthesize debugBones = _debugBones;
 
 
-+ (id) skeletonWithData:(SkeletonData*)skeletonData {
-	return [[[CCSkeleton alloc] initWithData:skeletonData] autorelease];
++ (id) skeletonWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
+	return [[[CCSkeleton alloc] initWithData:skeletonData ownsSkeletonData:ownsSkeletonData] autorelease];
 }
 }
 
 
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale {
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale {
@@ -49,7 +49,9 @@
 	return [[[CCSkeleton alloc] initWithFile:skeletonDataFile atlasFile:atlasFile scale:scale] autorelease];
 	return [[[CCSkeleton alloc] initWithFile:skeletonDataFile atlasFile:atlasFile scale:scale] autorelease];
 }
 }
 
 
-- (void) initialize:(SkeletonData*)skeletonData {
+- (void) initialize:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
+	_ownsSkeletonData = ownsSkeletonData;
+
 	_skeleton = Skeleton_create(skeletonData);
 	_skeleton = Skeleton_create(skeletonData);
 
 
 	_blendFunc.src = GL_ONE;
 	_blendFunc.src = GL_ONE;
@@ -61,13 +63,13 @@
 	[self scheduleUpdate];
 	[self scheduleUpdate];
 }
 }
 
 
-- (id) initWithData:(SkeletonData*)skeletonData {
+- (id) initWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
 	NSAssert(skeletonData, @"skeletonData cannot be null.");
 	NSAssert(skeletonData, @"skeletonData cannot be null.");
 
 
 	self = [super init];
 	self = [super init];
 	if (!self) return nil;
 	if (!self) return nil;
 
 
-	[self initialize:skeletonData];
+	[self initialize:skeletonData ownsSkeletonData:ownsSkeletonData];
 
 
 	return self;
 	return self;
 }
 }
@@ -83,8 +85,7 @@
 	SkeletonJson_dispose(json);
 	SkeletonJson_dispose(json);
 	if (!skeletonData) return 0;
 	if (!skeletonData) return 0;
 
 
-	[self initialize:skeletonData];
-	_ownsSkeletonData = YES;
+	[self initialize:skeletonData ownsSkeletonData:YES];
 
 
 	return self;
 	return self;
 }
 }
@@ -104,8 +105,7 @@
 	SkeletonJson_dispose(json);
 	SkeletonJson_dispose(json);
 	if (!skeletonData) return 0;
 	if (!skeletonData) return 0;
 
 
-	[self initialize:skeletonData];
-	_ownsSkeletonData = YES;
+	[self initialize:skeletonData ownsSkeletonData:YES];
 
 
 	return self;
 	return self;
 }
 }

+ 2 - 2
spine-cocos2d-iphone/src/spine/CCSkeletonAnimation.h

@@ -40,11 +40,11 @@ Draws an animated skeleton, providing a simple API for applying one or more anim
 	NSMutableArray* _stateDatas;
 	NSMutableArray* _stateDatas;
 }
 }
 
 
-+ (id) skeletonWithData:(SkeletonData*)skeletonData;
++ (id) skeletonWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
 
 
-- (id) initWithData:(SkeletonData*)skeletonData;
+- (id) initWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;
 - (id) initWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
 - (id) initWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
 - (id) initWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
 - (id) initWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
 
 

+ 4 - 4
spine-cocos2d-iphone/src/spine/CCSkeletonAnimation.m

@@ -34,8 +34,8 @@
 
 
 @synthesize states = _states;
 @synthesize states = _states;
 
 
-+ (id) skeletonWithData:(SkeletonData*)skeletonData {
-	return [[[CCSkeletonAnimation alloc] initWithData:skeletonData] autorelease];
++ (id) skeletonWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
+	return [[[CCSkeletonAnimation alloc] initWithData:skeletonData ownsSkeletonData:ownsSkeletonData] autorelease];
 }
 }
 
 
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale {
 + (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale {
@@ -52,8 +52,8 @@
 	[self addAnimationState];
 	[self addAnimationState];
 }
 }
 
 
-- (id) initWithData:(SkeletonData*)skeletonData {
-	self = [super initWithData:skeletonData];
+- (id) initWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
+	self = [super initWithData:skeletonData ownsSkeletonData:ownsSkeletonData];
 	if (!self) return nil;
 	if (!self) return nil;
 	
 	
 	[self initialize];
 	[self initialize];

+ 22 - 12
spine-cocos2dx/src/spine/CCSkeleton.cpp

@@ -32,8 +32,8 @@ using std::max;
 
 
 namespace spine {
 namespace spine {
 
 
-static CCSkeleton* createWithData (SkeletonData* skeletonData) {
-	CCSkeleton* node = new CCSkeleton(skeletonData);
+static CCSkeleton* createWithData (SkeletonData* skeletonData, bool ownsSkeletonData) {
+	CCSkeleton* node = new CCSkeleton(skeletonData, ownsSkeletonData);
 	node->autorelease();
 	node->autorelease();
 	return node;
 	return node;
 }
 }
@@ -50,14 +50,11 @@ static CCSkeleton* createWithFile (const char* skeletonDataFile, const char* atl
 	return node;
 	return node;
 }
 }
 
 
-void CCSkeleton::initialize (SkeletonData *skeletonData) {
-	ownsSkeletonData = false;
+void CCSkeleton::initialize () {
 	atlas = 0;
 	atlas = 0;
 	debugSlots = false;
 	debugSlots = false;
 	debugBones = false;
 	debugBones = false;
 
 
-	skeleton = Skeleton_create(skeletonData);
-
 	blendFunc.src = GL_ONE;
 	blendFunc.src = GL_ONE;
 	blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA;
 	blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA;
 
 
@@ -65,22 +62,36 @@ void CCSkeleton::initialize (SkeletonData *skeletonData) {
 	scheduleUpdate();
 	scheduleUpdate();
 }
 }
 
 
-CCSkeleton::CCSkeleton (SkeletonData *skeletonData) {
-	initialize(skeletonData);
+void CCSkeleton::setSkeletonData (SkeletonData *skeletonData, bool ownsSkeletonData) {
+	skeleton = Skeleton_create(skeletonData);
+	this->ownsSkeletonData = ownsSkeletonData;	
+}
+
+CCSkeleton::CCSkeleton () {
+	initialize();
+}
+
+CCSkeleton::CCSkeleton (SkeletonData *skeletonData, bool ownsSkeletonData) {
+	initialize();
+
+	setSkeletonData(skeletonData, ownsSkeletonData);
 }
 }
 
 
 CCSkeleton::CCSkeleton (const char* skeletonDataFile, Atlas* atlas, float scale) {
 CCSkeleton::CCSkeleton (const char* skeletonDataFile, Atlas* atlas, float scale) {
+	initialize();
+
 	SkeletonJson* json = SkeletonJson_create(atlas);
 	SkeletonJson* json = SkeletonJson_create(atlas);
 	json->scale = scale;
 	json->scale = scale;
 	SkeletonData* skeletonData = SkeletonJson_readSkeletonDataFile(json, skeletonDataFile);
 	SkeletonData* skeletonData = SkeletonJson_readSkeletonDataFile(json, skeletonDataFile);
 	CCAssert(skeletonData, json->error ? json->error : "Error reading skeleton data.");
 	CCAssert(skeletonData, json->error ? json->error : "Error reading skeleton data.");
 	SkeletonJson_dispose(json);
 	SkeletonJson_dispose(json);
 
 
-	initialize(skeletonData);
-	ownsSkeletonData = true;
+	setSkeletonData(skeletonData, true);
 }
 }
 
 
 CCSkeleton::CCSkeleton (const char* skeletonDataFile, const char* atlasFile, float scale) {
 CCSkeleton::CCSkeleton (const char* skeletonDataFile, const char* atlasFile, float scale) {
+	initialize();
+
 	atlas = Atlas_readAtlasFile(atlasFile);
 	atlas = Atlas_readAtlasFile(atlasFile);
 	CCAssert(atlas, "Error reading atlas file.");
 	CCAssert(atlas, "Error reading atlas file.");
 
 
@@ -90,8 +101,7 @@ CCSkeleton::CCSkeleton (const char* skeletonDataFile, const char* atlasFile, flo
 	CCAssert(skeletonData, json->error ? json->error : "Error reading skeleton data file.");
 	CCAssert(skeletonData, json->error ? json->error : "Error reading skeleton data file.");
 	SkeletonJson_dispose(json);
 	SkeletonJson_dispose(json);
 
 
-	initialize(skeletonData);
-	ownsSkeletonData = true;
+	setSkeletonData(skeletonData, true);
 }
 }
 
 
 CCSkeleton::~CCSkeleton () {
 CCSkeleton::~CCSkeleton () {

+ 7 - 3
spine-cocos2dx/src/spine/CCSkeleton.h

@@ -41,11 +41,11 @@ public:
 	bool debugSlots;
 	bool debugSlots;
 	bool debugBones;
 	bool debugBones;
 
 
-	static CCSkeleton* createWithData (SkeletonData* skeletonData);
+	static CCSkeleton* createWithData (SkeletonData* skeletonData, bool ownsSkeletonData = false);
 	static CCSkeleton* createWithFile (const char* skeletonDataFile, Atlas* atlas, float scale = 1);
 	static CCSkeleton* createWithFile (const char* skeletonDataFile, Atlas* atlas, float scale = 1);
 	static CCSkeleton* createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale = 1);
 	static CCSkeleton* createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale = 1);
 
 
-	CCSkeleton (SkeletonData* skeletonData);
+	CCSkeleton (SkeletonData* skeletonData, bool ownsSkeletonData = false);
 	CCSkeleton (const char* skeletonDataFile, Atlas* atlas, float scale = 1);
 	CCSkeleton (const char* skeletonDataFile, Atlas* atlas, float scale = 1);
 	CCSkeleton (const char* skeletonDataFile, const char* atlasFile, float scale = 1);
 	CCSkeleton (const char* skeletonDataFile, const char* atlasFile, float scale = 1);
 
 
@@ -58,10 +58,14 @@ public:
 	// CCBlendProtocol
 	// CCBlendProtocol
 	CC_PROPERTY(cocos2d::ccBlendFunc, blendFunc, BlendFunc);
 	CC_PROPERTY(cocos2d::ccBlendFunc, blendFunc, BlendFunc);
 
 
+protected:
+	CCSkeleton ();
+	void CCSkeleton::setSkeletonData (SkeletonData *skeletonData, bool ownsSkeletonData);
+
 private:
 private:
 	bool ownsSkeletonData;
 	bool ownsSkeletonData;
 	Atlas* atlas;
 	Atlas* atlas;
-	void initialize (SkeletonData *skeletonData);
+	void initialize ();
 };
 };
 
 
 }
 }

+ 3 - 0
spine-cocos2dx/src/spine/CCSkeletonAnimation.h

@@ -58,6 +58,9 @@ public:
 	void addAnimation (char* name, bool loop, float delay = 0, int stateIndex = 0);
 	void addAnimation (char* name, bool loop, float delay = 0, int stateIndex = 0);
 	void clearAnimation (int stateIndex = 0);
 	void clearAnimation (int stateIndex = 0);
 
 
+protected:
+	CCSkeletonAnimation ();
+
 private:
 private:
 	typedef CCSkeleton super;
 	typedef CCSkeleton super;
 	std::vector<AnimationStateData*> stateDatas;
 	std::vector<AnimationStateData*> stateDatas;