mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
Merge pull request #1725 from MellowArpeggiation/master
Fixes to bezier fcurves
This commit is contained in:
commit
7b127888c8
Binary file not shown.
@ -120,6 +120,31 @@ public class BusAnimationKeyframe {
|
|||||||
double v4x = startTime + duration;
|
double v4x = startTime + duration;
|
||||||
double v4y = value;
|
double v4y = value;
|
||||||
|
|
||||||
|
// correct beziers into non-looping fcurves
|
||||||
|
double h1x = v1x - v2x;
|
||||||
|
double h1y = v1y - v2y;
|
||||||
|
|
||||||
|
double h2x = v4x - v3x;
|
||||||
|
double h2y = v4y - v3y;
|
||||||
|
|
||||||
|
double len = v4x - v1x;
|
||||||
|
double len1 = Math.abs(h1x);
|
||||||
|
double len2 = Math.abs(h2x);
|
||||||
|
|
||||||
|
if(len1 + len2 != 0) {
|
||||||
|
if(len1 > len) {
|
||||||
|
double fac = len / len1;
|
||||||
|
v2x = v1x - fac * h1x;
|
||||||
|
v2y = v1y - fac * h1y;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(len2 > len) {
|
||||||
|
double fac = len / len2;
|
||||||
|
v3x = v4x - fac * h2x;
|
||||||
|
v3y = v4y - fac * h2y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
double curveT = findZero(currentTime, v1x, v2x, v3x, v4x);
|
double curveT = findZero(currentTime, v1x, v2x, v3x, v4x);
|
||||||
return cubicBezier(v1y, v2y, v3y, v4y, curveT);
|
return cubicBezier(v1y, v2y, v3y, v4y, curveT);
|
||||||
} else if(previous.interpolationType == IType.BACK) {
|
} else if(previous.interpolationType == IType.BACK) {
|
||||||
@ -200,7 +225,7 @@ public class BusAnimationKeyframe {
|
|||||||
|
|
||||||
// Blender bezier solvers, but rewritten (pain)
|
// Blender bezier solvers, but rewritten (pain)
|
||||||
private double solveCubic(double c0, double c1, double c2, double c3) {
|
private double solveCubic(double c0, double c1, double c2, double c3) {
|
||||||
if(c3 != 0) {
|
if(c3 > 0.000001) {
|
||||||
double a = c2 / c3;
|
double a = c2 / c3;
|
||||||
double b = c1 / c3;
|
double b = c1 / c3;
|
||||||
double c = c0 / c3;
|
double c = c0 / c3;
|
||||||
@ -242,10 +267,10 @@ public class BusAnimationKeyframe {
|
|||||||
double b = c1;
|
double b = c1;
|
||||||
double c = c0;
|
double c = c0;
|
||||||
|
|
||||||
if(a != 0) {
|
if(a > 0.000001) {
|
||||||
double p = b * b - 4 * a * c;
|
double p = b * b - 4 * a * c;
|
||||||
|
|
||||||
if(p > 0) {
|
if(p > 0.000001) {
|
||||||
p = Math.sqrt(p);
|
p = Math.sqrt(p);
|
||||||
double result = (-b - p) / (2 * a);
|
double result = (-b - p) / (2 * a);
|
||||||
if(result < 0.000001 || result > 1.000001) {
|
if(result < 0.000001 || result > 1.000001) {
|
||||||
@ -259,14 +284,10 @@ public class BusAnimationKeyframe {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(b != 0) {
|
if(b > 0.000001) {
|
||||||
return -c / b;
|
return -c / b;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(c == 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user