소스 검색

[libgdx] Physics WIP.

Nathan Sweet 1 년 전
부모
커밋
b40b40ffe1
1개의 변경된 파일79개의 추가작업 그리고 26개의 파일을 삭제
  1. 79 26
      spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PhysicsConstraint.java

+ 79 - 26
spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PhysicsConstraint.java

@@ -202,40 +202,93 @@ public class PhysicsConstraint implements Updatable {
 			if (y) bone.worldY += yOffset * mix;
 		}
 
-		if (rotateOrShearX) {
-			float r = rotateOffset * mix, ra = bone.a, sin, cos;
-			if (data.rotate) {
-				if (data.shearX) {
-					r *= 0.5f;
+		// Smoothing.
+		if (physics != Physics.none && false) {
+			float a = (Math.min(remaining / data.step, 1) - 1) * mix;
+			if (rotateOrShearX) {
+				float rotateOffset = rotateVelocityLast * a;
+				float r = rotateOffset * mix, ra = bone.a, sin, cos;
+				if (data.rotate) {
+					if (data.shearX) {
+						r *= 0.5f;
+						sin = sin(r);
+						cos = cos(r);
+						bone.a = cos * ra - sin * bone.c;
+						bone.c = sin * ra + cos * bone.c;
+						ra = bone.a;
+					} else {
+						sin = sin(r);
+						cos = cos(r);
+					}
+					float rb = bone.b;
+					bone.b = cos * rb - sin * bone.d;
+					bone.d = sin * rb + cos * bone.d;
+				} else {
 					sin = sin(r);
 					cos = cos(r);
-					bone.a = cos * ra - sin * bone.c;
-					bone.c = sin * ra + cos * bone.c;
-					ra = bone.a;
+				}
+				bone.a = cos * ra - sin * bone.c;
+				bone.c = sin * ra + cos * bone.c;
+			}
+			if (scaleX) {
+			}
+		}
+
+		if (false) {
+			// Local.
+			if (rotateOrShearX) {
+				float r = bone.worldToLocalRotation((atan2(bone.c, bone.a) + rotateOffset * mix) * radDeg) - bone.arotation;
+				if (data.rotate) {
+					if (data.shearX) {
+						r *= 0.5f;
+						bone.ashearX += r;
+					}
+					bone.arotation += r;
+				} else
+					bone.ashearX += r;
+			}
+			if (scaleX) bone.ascaleX *= 1 + scaleOffset * mix;
+			bone.update(null);
+			if (physics == Physics.update) {
+				tx = l * bone.a;
+				ty = l * bone.c;
+			}
+		} else {
+			if (rotateOrShearX) {
+				float r = rotateOffset * mix, ra = bone.a, sin, cos;
+				if (data.rotate) {
+					if (data.shearX) {
+						r *= 0.5f;
+						sin = sin(r);
+						cos = cos(r);
+						bone.a = cos * ra - sin * bone.c;
+						bone.c = sin * ra + cos * bone.c;
+						ra = bone.a;
+					} else {
+						sin = sin(r);
+						cos = cos(r);
+					}
+					float rb = bone.b;
+					bone.b = cos * rb - sin * bone.d;
+					bone.d = sin * rb + cos * bone.d;
 				} else {
 					sin = sin(r);
 					cos = cos(r);
 				}
-				float rb = bone.b;
-				bone.b = cos * rb - sin * bone.d;
-				bone.d = sin * rb + cos * bone.d;
-			} else {
-				sin = sin(r);
-				cos = cos(r);
+				bone.a = cos * ra - sin * bone.c;
+				bone.c = sin * ra + cos * bone.c;
 			}
-			bone.a = cos * ra - sin * bone.c;
-			bone.c = sin * ra + cos * bone.c;
-		}
-		if (scaleX) {
-			float s = 1 + scaleOffset * mix;
-			bone.a *= s;
-			bone.c *= s;
-		}
-		if (physics == Physics.update) {
-			tx = l * bone.a;
-			ty = l * bone.c;
+			if (scaleX) {
+				float s = 1 + scaleOffset * mix;
+				bone.a *= s;
+				bone.c *= s;
+			}
+			if (physics == Physics.update) {
+				tx = l * bone.a;
+				ty = l * bone.c;
+			}
+			bone.updateAppliedTransform();
 		}
-		bone.updateAppliedTransform();
 	}
 
 	/** The bone constrained by this physics constraint. */