mirror of
https://github.com/Anuken/Mindustry.git
synced 2026-03-15 11:20:39 -07:00
53 lines
1.3 KiB
Java
53 lines
1.3 KiB
Java
package mindustry.graphics;
|
|
|
|
import arc.graphics.*;
|
|
import arc.graphics.g2d.*;
|
|
import arc.math.*;
|
|
import arc.math.geom.*;
|
|
import arc.struct.*;
|
|
import arc.util.pooling.*;
|
|
|
|
public class Trail{
|
|
public int length;
|
|
|
|
private final Seq<Vec3> points;
|
|
private float lastX = -1, lastY = -1;
|
|
|
|
public Trail(int length){
|
|
this.length = length;
|
|
points = new Seq<>(length);
|
|
}
|
|
|
|
public void clear(){
|
|
points.clear();
|
|
}
|
|
|
|
public void draw(Color color, float width){
|
|
Draw.color(color);
|
|
|
|
for(int i = 0; i < points.size - 1; i++){
|
|
Vec3 c = points.get(i);
|
|
Vec3 n = points.get(i + 1);
|
|
float size = width / length;
|
|
|
|
float cx = Mathf.sin(c.z) * i * size, cy = Mathf.cos(c.z) * i * size, nx = Mathf.sin(n.z) * (i + 1) * size, ny = Mathf.cos(n.z) * (i + 1) * size;
|
|
Fill.quad(c.x - cx, c.y - cy, c.x + cx, c.y + cy, n.x + nx, n.y + ny, n.x - nx, n.y - ny);
|
|
}
|
|
|
|
Draw.reset();
|
|
}
|
|
|
|
public void update(float x, float y){
|
|
if(points.size > length){
|
|
Pools.free(points.first());
|
|
points.remove(0);
|
|
}
|
|
|
|
float angle = -Angles.angle(x, y, lastX, lastY);
|
|
|
|
points.add(Pools.obtain(Vec3.class, Vec3::new).set(x, y, (angle) * Mathf.degRad));
|
|
|
|
lastX = x;
|
|
lastY = y;
|
|
}
|
|
}
|