Przeglądaj źródła

latest sdk, json test

dm 7 lat temu
rodzic
commit
23edcdfe3f

+ 12 - 10
dependencies/spine/src/spine/AnimationState.cpp

@@ -334,11 +334,11 @@ void AnimationState::update(float delta) {
 			float nextTime = current._trackLast - next->_delay;
 			if (nextTime >= 0) {
 				next->_delay = 0;
-				next->_trackTime = nextTime + (delta * next->_timeScale);
+				next->_trackTime = (nextTime / current._timeScale + delta) * next->_timeScale;
 				current._trackTime += currentDelta;
 				setCurrent(i, next, true);
 				while (next->_mixingFrom != NULL) {
-					next->_mixTime += currentDelta;
+					next->_mixTime += delta;
 					next = next->_mixingFrom;
 				}
 				continue;
@@ -728,14 +728,8 @@ bool AnimationState::updateMixingFrom(TrackEntry *to, float delta) {
 		return finished;
 	}
 
-	if (to->_timeScale == 0 && to->_mixingTo) {
-		to->_timeScale = 1;
-		to->_mixTime = 0;
-		to->_mixDuration = 0;
-	}
-
 	from->_trackTime += delta * from->_timeScale;
-	to->_mixTime += delta * to->_timeScale;
+	to->_mixTime += delta;
 
 	return false;
 }
@@ -783,6 +777,7 @@ float AnimationState::applyMixingFrom(TrackEntry *to, Skeleton &skeleton, MixBle
 		from->_totalAlpha = 0;
 		for (size_t i = 0; i < timelineCount; i++) {
 			Timeline *timeline = timelines[i];
+			MixDirection direction = MixDirection_Out;
 			MixBlend timelineBlend;
 			float alpha;
 			switch (timelineMode[i]) {
@@ -811,8 +806,15 @@ float AnimationState::applyMixingFrom(TrackEntry *to, Skeleton &skeleton, MixBle
 				applyRotateTimeline((RotateTimeline*)timeline, skeleton, animationTime, alpha, timelineBlend, timelinesRotation, i << 1,
 									firstFrame);
 			} else {
+				if (timelineBlend == MixBlend_Setup) {
+					if (timeline->getRTTI().isExactly(AttachmentTimeline::rtti)) {
+						if (attachments) direction = MixDirection_In;
+					} else if (timeline->getRTTI().isExactly(DrawOrderTimeline::rtti)) {
+						if (drawOrder) direction = MixDirection_In;
+					}
+				}
 				timeline->apply(skeleton, animationLast, animationTime, eventBuffer, alpha, timelineBlend,
-								MixDirection_Out);
+								direction);
 			}
 		}
 	}

+ 1 - 1
dependencies/spine/src/spine/Atlas.cpp

@@ -249,7 +249,7 @@ void Atlas::trim(Str *str) {
 
 	str->end--;
 
-	while (isspace((unsigned char) *str->end) && str->end >= str->begin) {
+	while (((unsigned char)*str->end == '\r') && str->end >= str->begin) {
 		str->end--;
 	}
 

+ 2 - 1
dependencies/spine/src/spine/Bone.cpp

@@ -237,10 +237,11 @@ float Bone::worldToLocalRotation(float worldRotation) {
 	float sin = MathUtil::sinDeg(worldRotation);
 	float cos = MathUtil::cosDeg(worldRotation);
 
-	return MathUtil::atan2(_a * sin - _c * cos, _d * cos - _b * sin) * MathUtil::Rad_Deg;
+	return MathUtil::atan2(_a * sin - _c * cos, _d * cos - _b * sin) * MathUtil::Rad_Deg + this->_rotation - this->_shearX;
 }
 
 float Bone::localToWorldRotation(float localRotation) {
+	localRotation -= this->_rotation - this->_shearX;
 	float sin = MathUtil::sinDeg(localRotation);
 	float cos = MathUtil::cosDeg(localRotation);
 

+ 10 - 3
dependencies/spine/src/spine/PathConstraint.cpp

@@ -549,7 +549,10 @@ void PathConstraint::addAfterPosition(float p, Vector<float> &temp, int i, Vecto
 void PathConstraint::addCurvePosition(float p, float x1, float y1, float cx1, float cy1, float cx2, float cy2, float x2,
 									  float y2, Vector<float> &output, int o, bool tangents) {
 	if (p < EPSILON || MathUtil::isNan(p)) {
-		p = EPSILON;
+		output[o] = x1;
+		output[o + 1] = y1;
+		output[o + 2] = MathUtil::atan2(cy1 - y1, cx1 - x1);
+		return;
 	}
 
 	float tt = p * p, ttt = tt * p, u = 1 - p, uu = u * u, uuu = uu * u;
@@ -558,7 +561,11 @@ void PathConstraint::addCurvePosition(float p, float x1, float y1, float cx1, fl
 	output[o] = x;
 	output[o + 1] = y;
 	if (tangents) {
-		output[o + 2] = MathUtil::atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt),
-										x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));
+		if (p < 0.001) {
+			output[o + 2] = MathUtil::atan2(cy1 - y1, cx1 - x1);
+		} else {
+			output[o + 2] = MathUtil::atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt),
+											x - (x1 * uu + cx1 * ut * 2 + cx2 * tt));
+		}
 	}
 }

+ 18 - 8
dependencies/spine/src/spine/SkeletonClipping.cpp

@@ -250,17 +250,27 @@ bool SkeletonClipping::clip(float x1, float y1, float x2, float y2, float x3, fl
 				}
 				// v1 inside, v2 outside
 				float c0 = inputY2 - inputY, c2 = inputX2 - inputX;
-				float ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) /
-						   (c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY));
-				output->add(edgeX + (edgeX2 - edgeX) * ua);
-				output->add(edgeY + (edgeY2 - edgeY) * ua);
+				float s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
+				if (MathUtil::abs(s) > 0.000001f) {
+					float ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
+					output->add(edgeX + (edgeX2 - edgeX) * ua);
+					output->add(edgeY + (edgeY2 - edgeY) * ua);
+				} else {
+					output->add(edgeX);
+					output->add(edgeY);
+				}
 			} else if (side2) {
 				// v1 outside, v2 inside
 				float c0 = inputY2 - inputY, c2 = inputX2 - inputX;
-				float ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) /
-						   (c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY));
-				output->add(edgeX + (edgeX2 - edgeX) * ua);
-				output->add(edgeY + (edgeY2 - edgeY) * ua);
+				float s = c0 * (edgeX2 - edgeX) - c2 * (edgeY2 - edgeY);
+				if (MathUtil::abs(s) > 0.000001f) {
+					float ua = (c2 * (edgeY - inputY) - c0 * (edgeX - inputX)) / s;
+					output->add(edgeX + (edgeX2 - edgeX) * ua);
+					output->add(edgeY + (edgeY2 - edgeY) * ua);
+				} else {
+					output->add(edgeX);
+					output->add(edgeY);
+				}
 				output->add(inputX2);
 				output->add(inputY2);
 			}

Plik diff jest za duży
+ 0 - 0
examples/HelloSpine/data/spine/dragon/dragon-ess.json


BIN
examples/HelloSpine/data/spine/dragon/dragon-ess.skel


+ 292 - 0
examples/HelloSpine/data/spine/dragon/dragon-pma.atlas

@@ -0,0 +1,292 @@
+
+dragon-pma.png
+size: 1024,1024
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+chin
+  rotate: true
+  xy: 856, 138
+  size: 214, 146
+  orig: 214, 146
+  offset: 0, 0
+  index: -1
+front-toe-a
+  rotate: true
+  xy: 584, 72
+  size: 29, 50
+  orig: 29, 50
+  offset: 0, 0
+  index: -1
+head
+  rotate: false
+  xy: 204, 756
+  size: 296, 260
+  orig: 296, 260
+  offset: 0, 0
+  index: -1
+left-front-leg
+  rotate: false
+  xy: 636, 355
+  size: 84, 57
+  orig: 84, 57
+  offset: 0, 0
+  index: -1
+left-rear-thigh
+  rotate: true
+  xy: 207, 12
+  size: 91, 149
+  orig: 91, 149
+  offset: 0, 0
+  index: -1
+left-wing01
+  rotate: false
+  xy: 443, 103
+  size: 191, 256
+  orig: 191, 256
+  offset: 0, 0
+  index: -1
+left-wing02
+  rotate: true
+  xy: 502, 616
+  size: 179, 269
+  orig: 179, 269
+  offset: 0, 0
+  index: -1
+left-wing04
+  rotate: false
+  xy: 636, 2
+  size: 188, 135
+  orig: 188, 135
+  offset: 0, 0
+  index: -1
+left-wing05
+  rotate: false
+  xy: 636, 139
+  size: 218, 213
+  orig: 218, 213
+  offset: 0, 0
+  index: -1
+left-wing06
+  rotate: false
+  xy: 2, 317
+  size: 192, 331
+  orig: 192, 331
+  offset: 0, 0
+  index: -1
+left-wing07
+  rotate: true
+  xy: 750, 354
+  size: 159, 255
+  orig: 159, 255
+  offset: 0, 0
+  index: -1
+right-rear-thigh
+  rotate: true
+  xy: 433, 10
+  size: 91, 149
+  orig: 91, 149
+  offset: 0, 0
+  index: -1
+right-wing01
+  rotate: true
+  xy: 502, 797
+  size: 219, 310
+  orig: 219, 310
+  offset: 0, 0
+  index: -1
+right-wing02
+  rotate: false
+  xy: 2, 10
+  size: 203, 305
+  orig: 203, 305
+  offset: 0, 0
+  index: -1
+right-wing03
+  rotate: false
+  xy: 196, 361
+  size: 272, 247
+  orig: 272, 247
+  offset: 0, 0
+  index: -1
+right-wing04
+  rotate: false
+  xy: 204, 610
+  size: 279, 144
+  orig: 279, 144
+  offset: 0, 0
+  index: -1
+right-wing05
+  rotate: true
+  xy: 773, 515
+  size: 251, 229
+  orig: 251, 229
+  offset: 0, 0
+  index: -1
+right-wing06
+  rotate: false
+  xy: 2, 650
+  size: 200, 366
+  orig: 200, 366
+  offset: 0, 0
+  index: -1
+right-wing07
+  rotate: true
+  xy: 485, 414
+  size: 200, 263
+  orig: 200, 263
+  offset: 0, 0
+  index: -1
+right-wing08
+  rotate: false
+  xy: 207, 105
+  size: 234, 254
+  orig: 234, 254
+  offset: 0, 0
+  index: -1
+right-wing09
+  rotate: true
+  xy: 814, 768
+  size: 248, 204
+  orig: 248, 204
+  offset: 0, 0
+  index: -1
+tail01
+  rotate: true
+  xy: 826, 16
+  size: 120, 153
+  orig: 120, 153
+  offset: 0, 0
+  index: -1
+tail03
+  rotate: false
+  xy: 358, 11
+  size: 73, 92
+  orig: 73, 92
+  offset: 0, 0
+  index: -1
+
+dragon-pma2.png
+size: 1024,512
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+back
+  rotate: false
+  xy: 396, 290
+  size: 190, 185
+  orig: 190, 185
+  offset: 0, 0
+  index: -1
+chest
+  rotate: false
+  xy: 754, 386
+  size: 136, 122
+  orig: 136, 122
+  offset: 0, 0
+  index: -1
+front-toe-b
+  rotate: false
+  xy: 934, 341
+  size: 56, 57
+  orig: 56, 57
+  offset: 0, 0
+  index: -1
+left-front-thigh
+  rotate: true
+  xy: 105, 7
+  size: 84, 72
+  orig: 84, 72
+  offset: 0, 0
+  index: -1
+left-rear-leg
+  rotate: true
+  xy: 2, 93
+  size: 206, 177
+  orig: 206, 177
+  offset: 0, 0
+  index: -1
+left-wing03
+  rotate: false
+  xy: 2, 301
+  size: 186, 207
+  orig: 186, 207
+  offset: 0, 0
+  index: -1
+left-wing08
+  rotate: false
+  xy: 588, 327
+  size: 164, 181
+  orig: 164, 181
+  offset: 0, 0
+  index: -1
+left-wing09
+  rotate: false
+  xy: 190, 308
+  size: 204, 167
+  orig: 204, 167
+  offset: 0, 0
+  index: -1
+right-front-leg
+  rotate: false
+  xy: 2, 2
+  size: 101, 89
+  orig: 101, 89
+  offset: 0, 0
+  index: -1
+right-front-thigh
+  rotate: false
+  xy: 892, 400
+  size: 108, 108
+  orig: 108, 108
+  offset: 0, 0
+  index: -1
+right-rear-leg
+  rotate: false
+  xy: 588, 225
+  size: 116, 100
+  orig: 116, 100
+  offset: 0, 0
+  index: -1
+right-rear-toe
+  rotate: false
+  xy: 706, 210
+  size: 109, 77
+  orig: 109, 77
+  offset: 0, 0
+  index: -1
+tail02
+  rotate: true
+  xy: 754, 289
+  size: 95, 120
+  orig: 95, 120
+  offset: 0, 0
+  index: -1
+tail04
+  rotate: false
+  xy: 876, 313
+  size: 56, 71
+  orig: 56, 71
+  offset: 0, 0
+  index: -1
+tail05
+  rotate: true
+  xy: 934, 287
+  size: 52, 59
+  orig: 52, 59
+  offset: 0, 0
+  index: -1
+tail06
+  rotate: true
+  xy: 817, 192
+  size: 95, 68
+  orig: 95, 68
+  offset: 0, 0
+  index: -1
+thiagobrayner
+  rotate: false
+  xy: 190, 477
+  size: 350, 31
+  orig: 350, 31
+  offset: 0, 0
+  index: -1

BIN
examples/HelloSpine/data/spine/dragon/dragon-pma.png


BIN
examples/HelloSpine/data/spine/dragon/dragon-pma2.png


+ 292 - 0
examples/HelloSpine/data/spine/dragon/dragon.atlas

@@ -0,0 +1,292 @@
+
+dragon.png
+size: 1024,1024
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+chin
+  rotate: true
+  xy: 856, 138
+  size: 214, 146
+  orig: 214, 146
+  offset: 0, 0
+  index: -1
+front-toe-a
+  rotate: true
+  xy: 584, 72
+  size: 29, 50
+  orig: 29, 50
+  offset: 0, 0
+  index: -1
+head
+  rotate: false
+  xy: 204, 756
+  size: 296, 260
+  orig: 296, 260
+  offset: 0, 0
+  index: -1
+left-front-leg
+  rotate: false
+  xy: 636, 355
+  size: 84, 57
+  orig: 84, 57
+  offset: 0, 0
+  index: -1
+left-rear-thigh
+  rotate: true
+  xy: 207, 12
+  size: 91, 149
+  orig: 91, 149
+  offset: 0, 0
+  index: -1
+left-wing01
+  rotate: false
+  xy: 443, 103
+  size: 191, 256
+  orig: 191, 256
+  offset: 0, 0
+  index: -1
+left-wing02
+  rotate: true
+  xy: 502, 616
+  size: 179, 269
+  orig: 179, 269
+  offset: 0, 0
+  index: -1
+left-wing04
+  rotate: false
+  xy: 636, 2
+  size: 188, 135
+  orig: 188, 135
+  offset: 0, 0
+  index: -1
+left-wing05
+  rotate: false
+  xy: 636, 139
+  size: 218, 213
+  orig: 218, 213
+  offset: 0, 0
+  index: -1
+left-wing06
+  rotate: false
+  xy: 2, 317
+  size: 192, 331
+  orig: 192, 331
+  offset: 0, 0
+  index: -1
+left-wing07
+  rotate: true
+  xy: 750, 354
+  size: 159, 255
+  orig: 159, 255
+  offset: 0, 0
+  index: -1
+right-rear-thigh
+  rotate: true
+  xy: 433, 10
+  size: 91, 149
+  orig: 91, 149
+  offset: 0, 0
+  index: -1
+right-wing01
+  rotate: true
+  xy: 502, 797
+  size: 219, 310
+  orig: 219, 310
+  offset: 0, 0
+  index: -1
+right-wing02
+  rotate: false
+  xy: 2, 10
+  size: 203, 305
+  orig: 203, 305
+  offset: 0, 0
+  index: -1
+right-wing03
+  rotate: false
+  xy: 196, 361
+  size: 272, 247
+  orig: 272, 247
+  offset: 0, 0
+  index: -1
+right-wing04
+  rotate: false
+  xy: 204, 610
+  size: 279, 144
+  orig: 279, 144
+  offset: 0, 0
+  index: -1
+right-wing05
+  rotate: true
+  xy: 773, 515
+  size: 251, 229
+  orig: 251, 229
+  offset: 0, 0
+  index: -1
+right-wing06
+  rotate: false
+  xy: 2, 650
+  size: 200, 366
+  orig: 200, 366
+  offset: 0, 0
+  index: -1
+right-wing07
+  rotate: true
+  xy: 485, 414
+  size: 200, 263
+  orig: 200, 263
+  offset: 0, 0
+  index: -1
+right-wing08
+  rotate: false
+  xy: 207, 105
+  size: 234, 254
+  orig: 234, 254
+  offset: 0, 0
+  index: -1
+right-wing09
+  rotate: true
+  xy: 814, 768
+  size: 248, 204
+  orig: 248, 204
+  offset: 0, 0
+  index: -1
+tail01
+  rotate: true
+  xy: 826, 16
+  size: 120, 153
+  orig: 120, 153
+  offset: 0, 0
+  index: -1
+tail03
+  rotate: false
+  xy: 358, 11
+  size: 73, 92
+  orig: 73, 92
+  offset: 0, 0
+  index: -1
+
+dragon2.png
+size: 1024,512
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+back
+  rotate: false
+  xy: 396, 290
+  size: 190, 185
+  orig: 190, 185
+  offset: 0, 0
+  index: -1
+chest
+  rotate: false
+  xy: 754, 386
+  size: 136, 122
+  orig: 136, 122
+  offset: 0, 0
+  index: -1
+front-toe-b
+  rotate: false
+  xy: 934, 341
+  size: 56, 57
+  orig: 56, 57
+  offset: 0, 0
+  index: -1
+left-front-thigh
+  rotate: true
+  xy: 105, 7
+  size: 84, 72
+  orig: 84, 72
+  offset: 0, 0
+  index: -1
+left-rear-leg
+  rotate: true
+  xy: 2, 93
+  size: 206, 177
+  orig: 206, 177
+  offset: 0, 0
+  index: -1
+left-wing03
+  rotate: false
+  xy: 2, 301
+  size: 186, 207
+  orig: 186, 207
+  offset: 0, 0
+  index: -1
+left-wing08
+  rotate: false
+  xy: 588, 327
+  size: 164, 181
+  orig: 164, 181
+  offset: 0, 0
+  index: -1
+left-wing09
+  rotate: false
+  xy: 190, 308
+  size: 204, 167
+  orig: 204, 167
+  offset: 0, 0
+  index: -1
+right-front-leg
+  rotate: false
+  xy: 2, 2
+  size: 101, 89
+  orig: 101, 89
+  offset: 0, 0
+  index: -1
+right-front-thigh
+  rotate: false
+  xy: 892, 400
+  size: 108, 108
+  orig: 108, 108
+  offset: 0, 0
+  index: -1
+right-rear-leg
+  rotate: false
+  xy: 588, 225
+  size: 116, 100
+  orig: 116, 100
+  offset: 0, 0
+  index: -1
+right-rear-toe
+  rotate: false
+  xy: 706, 210
+  size: 109, 77
+  orig: 109, 77
+  offset: 0, 0
+  index: -1
+tail02
+  rotate: true
+  xy: 754, 289
+  size: 95, 120
+  orig: 95, 120
+  offset: 0, 0
+  index: -1
+tail04
+  rotate: false
+  xy: 876, 313
+  size: 56, 71
+  orig: 56, 71
+  offset: 0, 0
+  index: -1
+tail05
+  rotate: true
+  xy: 934, 287
+  size: 52, 59
+  orig: 52, 59
+  offset: 0, 0
+  index: -1
+tail06
+  rotate: true
+  xy: 817, 192
+  size: 95, 68
+  orig: 95, 68
+  offset: 0, 0
+  index: -1
+thiagobrayner
+  rotate: false
+  xy: 190, 477
+  size: 350, 31
+  orig: 350, 31
+  offset: 0, 0
+  index: -1

BIN
examples/HelloSpine/data/spine/dragon/dragon.png


BIN
examples/HelloSpine/data/spine/dragon/dragon2.png


+ 13 - 0
examples/HelloSpine/data/spine/test/skeleton.atlas

@@ -0,0 +1,13 @@
+
+skeleton.png
+size: 3542,3542
+format: RGBA8888
+filter: Linear,Linear
+repeat: none
+sosna
+  rotate: false
+  xy: 0, 0
+  size: 3542, 3542
+  orig: 3542, 3542
+  offset: 0, 0
+  index: -1

Plik diff jest za duży
+ 0 - 0
examples/HelloSpine/data/spine/test/skeleton.json


BIN
examples/HelloSpine/data/spine/test/skeleton.png


+ 16 - 3
examples/HelloSpine/src/example.cpp

@@ -17,6 +17,7 @@ spine::Skeleton *skeleton = 0;
 oxspine::spSpineActor actor;
 
 
+#define DRAGON_TEST
 
 
 //called from main.cpp
@@ -59,19 +60,31 @@ void example_init()
 
     file::buffer bf;
 
+#ifdef DRAGON_TEST
+    atlas = new spine::Atlas("spine/dragon/dragon.atlas", oxspine::getTextureLoader());
+
+    spine::SkeletonJson json(atlas);
+    json.setScale(1);
+
+    skeletonData = json.readSkeletonDataFile("spine/dragon/dragon-ess.json");
+#else
     atlas = new spine::Atlas("spine/spineboy/spineboy.atlas", oxspine::getTextureLoader());
 
     spine::SkeletonBinary binary(atlas);
     binary.setScale(1);
 
-    
     skeletonData = binary.readSkeletonDataFile("spine/spineboy/spineboy-ess.skel");
-
+#endif
 
     animationStateData = new spine::AnimationStateData(skeletonData);
     
     animationState = new spine::AnimationState(animationStateData);
-    animationState->setAnimation(0, "idle", true);
+
+#ifdef DRAGON_TEST
+    animationState->setAnimation(0, "flying", true);
+#else
+    animationState->setAnimation(0, "flying", true);
+#endif
 
     
     

+ 5 - 0
readme.md

@@ -0,0 +1,5 @@
+based on arrticle:
+http://ru.esotericsoftware.com/spine-cpp
+
+sdk:
+https://github.com/EsotericSoftware/spine-runtimes/tree/3.7-beta-cpp/spine-cpp

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików