mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2025-12-20 09:16:01 +08:00
[csharp] Port of commits 254a484 and f762a94: Added physics limit, smaller binary size.
This commit is contained in:
parent
f762a94638
commit
8dd7016a72
@ -35,9 +35,9 @@ namespace Spine {
|
||||
public class IkConstraintData : ConstraintData {
|
||||
internal ExposedList<BoneData> bones = new ExposedList<BoneData>();
|
||||
internal BoneData target;
|
||||
internal int bendDirection = 1;
|
||||
internal int bendDirection;
|
||||
internal bool compress, stretch, uniform;
|
||||
internal float mix = 1, softness;
|
||||
internal float mix, softness;
|
||||
|
||||
public IkConstraintData (string name) : base(name) {
|
||||
}
|
||||
|
||||
@ -156,14 +156,16 @@ namespace Spine {
|
||||
ux = bx;
|
||||
uy = by;
|
||||
} else {
|
||||
float a = this.remaining, i = inertia, t = data.step, f = skeleton.data.referenceScale;
|
||||
float a = this.remaining, i = inertia, q = data.limit, t = data.step, f = skeleton.data.referenceScale;
|
||||
if (x || y) {
|
||||
if (x) {
|
||||
xOffset += (ux - bx) * i;
|
||||
float u = (ux - bx) * i;
|
||||
xOffset += u > q ? q : u < -q ? -q : u;
|
||||
ux = bx;
|
||||
}
|
||||
if (y) {
|
||||
yOffset += (uy - by) * i;
|
||||
float u = (uy - by) * i;
|
||||
yOffset += u > q ? q : u < -q ? -q : u;
|
||||
uy = by;
|
||||
}
|
||||
if (a >= t) {
|
||||
@ -190,7 +192,10 @@ namespace Spine {
|
||||
float ca = (float)Math.Atan2(bone.c, bone.a), c, s, mr = 0;
|
||||
if (rotateOrShearX) {
|
||||
mr = (data.rotate + data.shearX) * mix;
|
||||
float dx = cx - bone.worldX, dy = cy - bone.worldY, r = (float)Math.Atan2(dy + ty, dx + tx) - ca - rotateOffset * mr;
|
||||
float dx = cx - bone.worldX, dy = cy - bone.worldY;
|
||||
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;
|
||||
r = rotateOffset * mr + ca;
|
||||
c = (float)Math.Cos(r);
|
||||
|
||||
@ -35,7 +35,7 @@ namespace Spine {
|
||||
/// </summary>
|
||||
public class PhysicsConstraintData : ConstraintData {
|
||||
internal BoneData bone;
|
||||
internal float x, y, rotate, scaleX, shearX;
|
||||
internal float x, y, rotate, scaleX, shearX, limit;
|
||||
internal float step, inertia, strength, damping, massInverse, wind, gravity, mix;
|
||||
internal bool inertiaGlobal, strengthGlobal, dampingGlobal, massGlobal, windGlobal, gravityGlobal, mixGlobal;
|
||||
|
||||
@ -51,6 +51,7 @@ namespace Spine {
|
||||
public float Rotate { get { return rotate; } set { rotate = value; } }
|
||||
public float ScaleX { get { return scaleX; } set { scaleX = value; } }
|
||||
public float ShearX { get { return shearX; } set { shearX = value; } }
|
||||
public float Limit { get { return limit; } set { limit = value; } }
|
||||
public float Inertia { get { return inertia; } set { inertia = value; } }
|
||||
public float Strength { get { return strength; } set { strength = value; } }
|
||||
public float Damping { get { return damping; } set { damping = value; } }
|
||||
|
||||
@ -242,14 +242,14 @@ namespace Spine {
|
||||
for (int ii = 0; ii < nn; ii++)
|
||||
constraintBones[ii] = bones[input.ReadInt(true)];
|
||||
data.target = bones[input.ReadInt(true)];
|
||||
data.mix = input.ReadFloat();
|
||||
data.softness = input.ReadFloat() * scale;
|
||||
int flags = input.Read();
|
||||
data.skinRequired = (flags & 1) != 0;
|
||||
data.bendDirection = (flags & 2) != 0 ? 1 : -1;
|
||||
data.compress = (flags & 4) != 0;
|
||||
data.stretch = (flags & 8) != 0;
|
||||
data.uniform = (flags & 16) != 0;
|
||||
if ((flags & 32) != 0) data.mix = (flags & 64) != 0 ? input.ReadFloat() : 1;
|
||||
if ((flags & 128) != 0) data.softness = input.ReadFloat() * scale;
|
||||
o[i] = data;
|
||||
}
|
||||
|
||||
@ -266,18 +266,19 @@ namespace Spine {
|
||||
data.skinRequired = (flags & 1) != 0;
|
||||
data.local = (flags & 2) != 0;
|
||||
data.relative = (flags & 4) != 0;
|
||||
data.offsetRotation = input.ReadFloat();
|
||||
data.offsetX = input.ReadFloat() * scale;
|
||||
data.offsetY = input.ReadFloat() * scale;
|
||||
data.offsetScaleX = input.ReadFloat();
|
||||
data.offsetScaleY = input.ReadFloat();
|
||||
data.offsetShearY = input.ReadFloat();
|
||||
data.mixRotate = input.ReadFloat();
|
||||
data.mixX = input.ReadFloat();
|
||||
data.mixY = input.ReadFloat();
|
||||
data.mixScaleX = input.ReadFloat();
|
||||
data.mixScaleY = input.ReadFloat();
|
||||
data.mixShearY = input.ReadFloat();
|
||||
if ((flags & 8) != 0) data.offsetRotation = input.ReadFloat();
|
||||
if ((flags & 16) != 0) data.offsetX = input.ReadFloat() * scale;
|
||||
if ((flags & 32) != 0) data.offsetY = input.ReadFloat() * scale;
|
||||
if ((flags & 64) != 0) data.offsetScaleX = input.ReadFloat();
|
||||
if ((flags & 128) != 0) data.offsetScaleY = input.ReadFloat();
|
||||
flags = input.Read();
|
||||
if ((flags & 1) != 0) data.offsetShearY = input.ReadFloat();
|
||||
if ((flags & 2) != 0) data.mixRotate = input.ReadFloat();
|
||||
if ((flags & 4) != 0) data.mixX = input.ReadFloat();
|
||||
if ((flags & 8) != 0) data.mixY = input.ReadFloat();
|
||||
if ((flags & 16) != 0) data.mixScaleX = input.ReadFloat();
|
||||
if ((flags & 32) != 0) data.mixScaleY = input.ReadFloat();
|
||||
if ((flags & 64) != 0) data.mixShearY = input.ReadFloat();
|
||||
o[i] = data;
|
||||
}
|
||||
|
||||
@ -291,10 +292,12 @@ namespace Spine {
|
||||
for (int ii = 0; ii < nn; ii++)
|
||||
constraintBones[ii] = bones[input.ReadInt(true)];
|
||||
data.target = slots[input.ReadInt(true)];
|
||||
data.positionMode = (PositionMode)Enum.GetValues(typeof(PositionMode)).GetValue(input.ReadInt(true));
|
||||
data.spacingMode = (SpacingMode)Enum.GetValues(typeof(SpacingMode)).GetValue(input.ReadInt(true));
|
||||
data.rotateMode = (RotateMode)Enum.GetValues(typeof(RotateMode)).GetValue(input.ReadInt(true));
|
||||
data.offsetRotation = input.ReadFloat();
|
||||
int flags = input.Read();
|
||||
data.positionMode = (PositionMode)Enum.GetValues(typeof(PositionMode)).GetValue(flags & 1);
|
||||
data.spacingMode = (SpacingMode)Enum.GetValues(typeof(SpacingMode)).GetValue((flags >> 1) & 3);
|
||||
data.rotateMode = (RotateMode)Enum.GetValues(typeof(RotateMode)).GetValue((flags >> 3) & 3);
|
||||
if ((flags & 128) != 0) data.offsetRotation = input.ReadFloat();
|
||||
|
||||
data.position = input.ReadFloat();
|
||||
if (data.positionMode == PositionMode.Fixed) data.position *= scale;
|
||||
data.spacing = input.ReadFloat();
|
||||
@ -318,14 +321,14 @@ namespace Spine {
|
||||
if ((flags & 8) != 0) data.rotate = input.ReadFloat();
|
||||
if ((flags & 16) != 0) data.scaleX = input.ReadFloat();
|
||||
if ((flags & 32) != 0) data.shearX = input.ReadFloat();
|
||||
data.limit = ((flags & 64) != 0 ? input.ReadFloat() : 500) * scale;
|
||||
data.step = 1f / input.ReadUByte();
|
||||
data.inertia = input.ReadFloat();
|
||||
data.strength = input.ReadFloat();
|
||||
data.damping = input.ReadFloat();
|
||||
data.massInverse = input.ReadFloat();
|
||||
data.massInverse = (flags & 128) != 0 ? input.ReadFloat() : 1;
|
||||
data.wind = input.ReadFloat();
|
||||
data.gravity = input.ReadFloat();
|
||||
data.mix = input.ReadFloat();
|
||||
flags = input.Read();
|
||||
if ((flags & 1) != 0) data.inertiaGlobal = true;
|
||||
if ((flags & 2) != 0) data.strengthGlobal = true;
|
||||
@ -334,6 +337,7 @@ namespace Spine {
|
||||
if ((flags & 16) != 0) data.windGlobal = true;
|
||||
if ((flags & 32) != 0) data.gravityGlobal = true;
|
||||
if ((flags & 64) != 0) data.mixGlobal = true;
|
||||
data.mix = (flags & 128) != 0 ? input.ReadFloat() : 1;
|
||||
o[i] = data;
|
||||
}
|
||||
|
||||
@ -447,7 +451,7 @@ namespace Spine {
|
||||
string path = (flags & 16) != 0 ? input.ReadStringRef() : null;
|
||||
uint color = (flags & 32) != 0 ? (uint)input.ReadInt() : 0xffffffff;
|
||||
Sequence sequence = (flags & 64) != 0 ? ReadSequence(input) : null;
|
||||
float rotation = input.ReadFloat();
|
||||
float rotation = (flags & 128) != 0 ? input.ReadFloat() : 0;
|
||||
float x = input.ReadFloat();
|
||||
float y = input.ReadFloat();
|
||||
float scaleX = input.ReadFloat();
|
||||
@ -880,17 +884,20 @@ namespace Spine {
|
||||
for (int i = 0, n = input.ReadInt(true); i < n; i++) {
|
||||
int index = input.ReadInt(true), frameCount = input.ReadInt(true), frameLast = frameCount - 1;
|
||||
IkConstraintTimeline timeline = new IkConstraintTimeline(frameCount, input.ReadInt(true), index);
|
||||
float time = input.ReadFloat(), mix = input.ReadFloat(), softness = input.ReadFloat() * scale;
|
||||
int flags = input.Read();
|
||||
float time = input.ReadFloat(), mix = (flags & 1) != 0 ? ((flags & 2) != 0 ? input.ReadFloat() : 1) : 0;
|
||||
float softness = (flags & 4) != 0 ? input.ReadFloat() * scale : 0;
|
||||
for (int frame = 0, bezier = 0; ; frame++) {
|
||||
int flags = input.Read();
|
||||
timeline.SetFrame(frame, time, mix, softness, input.ReadSByte(), (flags & 1) != 0, (flags & 2) != 0);
|
||||
timeline.SetFrame(frame, time, mix, softness, (flags & 8) != 0 ? 1 : -1, (flags & 16) != 0, (flags & 32) != 0);
|
||||
|
||||
if (frame == frameLast) break;
|
||||
float time2 = input.ReadFloat(), mix2 = input.ReadFloat(), softness2 = input.ReadFloat() * scale;
|
||||
switch (input.ReadUByte()) {
|
||||
case CURVE_STEPPED:
|
||||
//float time2 = input.ReadFloat(), mix2 = input.ReadFloat(), softness2 = input.ReadFloat() * scale;
|
||||
flags = input.Read();
|
||||
float time2 = input.ReadFloat(), mix2 = (flags & 1) != 0 ? ((flags & 2) != 0 ? input.ReadFloat() : 1) : 0;
|
||||
float softness2 = (flags & 4) != 0 ? input.ReadFloat() * scale : 0;
|
||||
if ((flags & 64) != 0)
|
||||
timeline.SetStepped(frame);
|
||||
break;
|
||||
case CURVE_BEZIER:
|
||||
else if ((flags & 128) != 0) {
|
||||
SetBezier(input, timeline, bezier++, frame, 0, time, time2, mix, mix2, 1);
|
||||
SetBezier(input, timeline, bezier++, frame, 1, time, time2, softness, softness2, scale);
|
||||
break;
|
||||
|
||||
@ -303,6 +303,7 @@ namespace Spine {
|
||||
data.rotate = GetFloat(constraintMap, "rotate", 0);
|
||||
data.scaleX = GetFloat(constraintMap, "scaleX", 0);
|
||||
data.shearX = GetFloat(constraintMap, "shearX", 0);
|
||||
data.limit = GetFloat(constraintMap, "limit", 500) * scale;
|
||||
data.step = 1f / GetInt(constraintMap, "fps", 60);
|
||||
data.inertia = GetFloat(constraintMap, "inertia", 1);
|
||||
data.strength = GetFloat(constraintMap, "strength", 100);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
"name": "com.esotericsoftware.spine.spine-csharp",
|
||||
"displayName": "spine-csharp Runtime",
|
||||
"description": "This plugin provides the spine-csharp core runtime.",
|
||||
"version": "4.2.13",
|
||||
"version": "4.2.14",
|
||||
"unity": "2018.3",
|
||||
"author": {
|
||||
"name": "Esoteric Software",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user