Rogue: Savage Rats, a retro-themed dungeon crawler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
rogue-savage-rats/src/mightypork/utils/math/coord/AnimCoord.java

155 lines
2.4 KiB

package mightypork.utils.math.coord;
import mightypork.gamecore.control.timing.Pauseable;
import mightypork.gamecore.control.timing.Updateable;
import mightypork.utils.math.animation.AnimDouble;
import mightypork.utils.math.animation.Easing;
/**
* 3D coordinated with support for transitions, mutable.
*
* @author MightyPork
*/
public class AnimCoord extends VecMutableImpl implements Pauseable, Updateable {
private final AnimDouble x, y, z;
public AnimCoord(AnimDouble x, AnimDouble y, AnimDouble z) {
this.x = x;
this.y = y;
this.z = z;
}
public AnimCoord(Vec start, Easing easing) {
x = new AnimDouble(start.x(), easing);
y = new AnimDouble(start.y(), easing);
z = new AnimDouble(start.z(), easing);
}
@Override
public double x()
{
return x.now();
}
@Override
public double y()
{
return y.now();
}
@Override
public double z()
{
return z.now();
}
@Override
public AnimCoord result(double x, double y, double z)
{
this.x.setTo(x);
this.y.setTo(y);
this.z.setTo(z);
return this;
}
public AnimCoord add(Vec offset, double speed)
{
animate(offset.x() - x(), offset.y() - y(), offset.z() - z(), speed);
return this;
}
public AnimCoord animate(double x, double y, double z, double duration)
{
this.x.animate(x, duration);
this.y.animate(y, duration);
this.z.animate(z, duration);
return this;
}
public AnimCoord animate(Vec target, double duration)
{
x.animate(target.x(), duration);
y.animate(target.y(), duration);
z.animate(target.z(), duration);
return this;
}
public void animateWithSpeed(Vec target, double unitsPerSecond)
{
final double dist = distTo(target);
final double duration = dist / unitsPerSecond;
animate(target, duration);
}
@Override
public void update(double delta)
{
x.update(delta);
y.update(delta);
z.update(delta);
}
@Override
public void pause()
{
x.pause();
y.pause();
z.pause();
}
@Override
public void resume()
{
x.resume();
y.resume();
z.resume();
}
@Override
public boolean isPaused()
{
return x.isPaused(); // BUNO
}
public boolean isFinished()
{
return x.isFinished(); // BUNO
}
public double getDuration()
{
return x.getDuration(); // BUNO
}
public double getElapsed()
{
return x.getElapsed(); // BUNO
}
public double getProgress()
{
return x.getProgress(); // BUNO
}
}