51 if (amount * amount == 0 || amount <= 0) {
65 float speed =
vel.length();
71 float effectiveAccel = acc * accelMult;
73 if (effectiveAccel <= 0f) {
79 Vector2f toDest = Vector2f.sub(
dest,
loc,
new Vector2f());
80 Vector2f velDiff = Vector2f.sub(
destVel,
vel,
new Vector2f());
93 float timeToMatchVel = velDiff.length() / effectiveAccel;
95 velDiff.scale(timeToMatchVel + 0.75f);
106 Vector2f negate = (Vector2f) Vector2f.add(toDest, velDiff,
new Vector2f()).negate();
113 float maxAccel = negate.length() / (amount * amount);
114 if (maxAccel > effectiveAccel) maxAccel = effectiveAccel;
120 accel = (Vector2f) negate.negate();
131 vel.x += accel.x * amount;
132 vel.y += accel.y * amount;
134 speed =
vel.length();
147 if (speed >= effectiveMaxSpeed && speed > 0) {
152 Vector2f cap =
new Vector2f(
vel);
160 float mag = speed - effectiveMaxSpeed;
161 if (mag < 50f) mag = 50f;
163 float minMag = maxAccel * 2f;
164 if (mag < minMag) mag = minMag;
166 if (mag * amount > (speed - effectiveMaxSpeed) && amount > 0) {
167 mag = (speed - effectiveMaxSpeed) / amount;
170 vel.x += cap.x * amount;
171 vel.y += cap.y * amount;
173 vel.scale(effectiveMaxSpeed / speed);
181 loc.x += vel.x * amount;
182 loc.y += vel.y * amount;