Better physics system

This commit is contained in:
Anuken
2020-09-24 15:39:34 -04:00
parent 1682e3b996
commit 0dccbf8598
8 changed files with 102 additions and 135 deletions

View File

@@ -1,48 +0,0 @@
package mindustry.entities;
import arc.math.geom.*;
import arc.math.geom.QuadTree.*;
import arc.struct.*;
public class PhysicsWorld{
private QuadTree<PhysicsBody> tree;
private Seq<PhysicsBody> bodies = new Seq<>(false, 16, PhysicsBody.class);
private Rect rect = new Rect();
public PhysicsWorld(Rect bounds){
tree = new QuadTree<>(new Rect(bounds));
}
public void add(PhysicsBody body){
bodies.add(body);
}
public void remove(PhysicsBody body){
bodies.remove(body);
}
public void update(){
tree.clear();
for(int i = 0; i < bodies.size; i++){
tree.insert(bodies.items[i]);
}
for(int i = 0; i < bodies.size; i++){
PhysicsBody body = bodies.items[i];
body.hitbox(rect);
tree.intersect(rect, other -> {
});
}
}
public static class PhysicsBody implements QuadTreeObject{
public float x, y, xv, yv, radius, mass;
public int flag = 0;
@Override
public void hitbox(Rect out){
out.setCentered(x, y, radius * 2, radius * 2);
}
}
}

View File

@@ -73,7 +73,7 @@ abstract class CommanderComp implements Unitc{
void command(Formation formation, Seq<Unit> units){
clearCommand();
float spacing = hitSize() * 1f;
float spacing = hitSize() * 0.65f;
minFormationSpeed = type().speed;
controlling.addAll(units);