mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
[csharp] Port of commit 98c5be6. Use delta for physics limit, apply limit to scale.
This commit is contained in:
parent
98c5be690a
commit
d1c09687e8
@ -147,7 +147,8 @@ namespace Spine {
|
|||||||
Reset();
|
Reset();
|
||||||
goto case Physics.Update; // Fall through.
|
goto case Physics.Update; // Fall through.
|
||||||
case Physics.Update:
|
case Physics.Update:
|
||||||
remaining += Math.Max(skeleton.time - lastTime, 0);
|
float delta = Math.Max(skeleton.time - lastTime, 0);
|
||||||
|
remaining += delta;
|
||||||
lastTime = skeleton.time;
|
lastTime = skeleton.time;
|
||||||
|
|
||||||
float bx = bone.worldX, by = bone.worldY;
|
float bx = bone.worldX, by = bone.worldY;
|
||||||
@ -156,7 +157,7 @@ namespace Spine {
|
|||||||
ux = bx;
|
ux = bx;
|
||||||
uy = by;
|
uy = by;
|
||||||
} else {
|
} else {
|
||||||
float a = this.remaining, i = inertia, q = data.limit, t = data.step, f = skeleton.data.referenceScale;
|
float a = this.remaining, i = inertia, q = data.limit * delta, t = data.step, f = skeleton.data.referenceScale;
|
||||||
if (x || y) {
|
if (x || y) {
|
||||||
if (x) {
|
if (x) {
|
||||||
float u = (ux - bx) * i;
|
float u = (ux - bx) * i;
|
||||||
@ -190,12 +191,18 @@ namespace Spine {
|
|||||||
}
|
}
|
||||||
if (rotateOrShearX || scaleX) {
|
if (rotateOrShearX || scaleX) {
|
||||||
float ca = (float)Math.Atan2(bone.c, bone.a), c, s, mr = 0;
|
float ca = (float)Math.Atan2(bone.c, bone.a), c, s, mr = 0;
|
||||||
|
float dx = cx - bone.worldX, dy = cy - bone.worldY;
|
||||||
|
if (dx > q)
|
||||||
|
dx = q;
|
||||||
|
else if (dx < -q)
|
||||||
|
dx = -q;
|
||||||
|
if (dy > q)
|
||||||
|
dy = q;
|
||||||
|
else if (dy < -q)
|
||||||
|
dy = -q;
|
||||||
if (rotateOrShearX) {
|
if (rotateOrShearX) {
|
||||||
mr = (data.rotate + data.shearX) * mix;
|
mr = (data.rotate + data.shearX) * mix;
|
||||||
float dx = cx - bone.worldX, dy = cy - bone.worldY;
|
float r = (float)Math.Atan2(dy + ty, dx + tx) - ca - rotateOffset * mr;
|
||||||
float r = (float)Math.Atan2((dy > q ? q : dy < -q ? -q : dy) + ty, (dx > q ? q : dx < -q ? -q : dx) + tx) - ca
|
|
||||||
- rotateOffset * mr;
|
|
||||||
|
|
||||||
rotateOffset += (r - (float)Math.Ceiling(r * MathUtils.InvPI2 - 0.5f) * MathUtils.PI2) * i;
|
rotateOffset += (r - (float)Math.Ceiling(r * MathUtils.InvPI2 - 0.5f) * MathUtils.PI2) * i;
|
||||||
r = rotateOffset * mr + ca;
|
r = rotateOffset * mr + ca;
|
||||||
c = (float)Math.Cos(r);
|
c = (float)Math.Cos(r);
|
||||||
@ -208,7 +215,7 @@ namespace Spine {
|
|||||||
c = (float)Math.Cos(ca);
|
c = (float)Math.Cos(ca);
|
||||||
s = (float)Math.Sin(ca);
|
s = (float)Math.Sin(ca);
|
||||||
float r = l * bone.WorldScaleX;
|
float r = l * bone.WorldScaleX;
|
||||||
if (r > 0) scaleOffset += ((cx - bone.worldX) * c + (cy - bone.worldY) * s) * i / r;
|
if (r > 0) scaleOffset += (dx * c + dy * s) * i / r;
|
||||||
}
|
}
|
||||||
a = this.remaining;
|
a = this.remaining;
|
||||||
if (a >= t) {
|
if (a >= t) {
|
||||||
|
|||||||
@ -321,7 +321,7 @@ namespace Spine {
|
|||||||
if ((flags & 8) != 0) data.rotate = input.ReadFloat();
|
if ((flags & 8) != 0) data.rotate = input.ReadFloat();
|
||||||
if ((flags & 16) != 0) data.scaleX = input.ReadFloat();
|
if ((flags & 16) != 0) data.scaleX = input.ReadFloat();
|
||||||
if ((flags & 32) != 0) data.shearX = input.ReadFloat();
|
if ((flags & 32) != 0) data.shearX = input.ReadFloat();
|
||||||
data.limit = ((flags & 64) != 0 ? input.ReadFloat() : 500) * scale;
|
data.limit = ((flags & 64) != 0 ? input.ReadFloat() : 5000) * scale;
|
||||||
data.step = 1f / input.ReadUByte();
|
data.step = 1f / input.ReadUByte();
|
||||||
data.inertia = input.ReadFloat();
|
data.inertia = input.ReadFloat();
|
||||||
data.strength = input.ReadFloat();
|
data.strength = input.ReadFloat();
|
||||||
|
|||||||
@ -303,7 +303,7 @@ namespace Spine {
|
|||||||
data.rotate = GetFloat(constraintMap, "rotate", 0);
|
data.rotate = GetFloat(constraintMap, "rotate", 0);
|
||||||
data.scaleX = GetFloat(constraintMap, "scaleX", 0);
|
data.scaleX = GetFloat(constraintMap, "scaleX", 0);
|
||||||
data.shearX = GetFloat(constraintMap, "shearX", 0);
|
data.shearX = GetFloat(constraintMap, "shearX", 0);
|
||||||
data.limit = GetFloat(constraintMap, "limit", 500) * scale;
|
data.limit = GetFloat(constraintMap, "limit", 5000) * scale;
|
||||||
data.step = 1f / GetInt(constraintMap, "fps", 60);
|
data.step = 1f / GetInt(constraintMap, "fps", 60);
|
||||||
data.inertia = GetFloat(constraintMap, "inertia", 1);
|
data.inertia = GetFloat(constraintMap, "inertia", 1);
|
||||||
data.strength = GetFloat(constraintMap, "strength", 100);
|
data.strength = GetFloat(constraintMap, "strength", 100);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user