package org.jrenner.fps;
import com.badlogic.gdx.graphics.g3d.ModelInstance;
import com.badlogic.gdx.math.Matrix4;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.physics.bullet.collision.btCollisionObject;
import com.badlogic.gdx.utils.Array;
public class Block {
public static Array<Block> blocks;
ModelInstance instance;
btCollisionObject body;
private Vector3 dimen = new Vector3();
private boolean dynamic;
public static void init() {
Block.blocks = new Array<>();
}
public Block(ModelInstance instance, int width, int height, int depth, boolean dynamic) {
this.dynamic = dynamic;
this.instance = instance;
dimen.set(width, height, depth);
tmp.set(dimen).scl(0.5f);
body = Physics.inst.createBoxObject(tmp);
Physics.applyStaticGeometryCollisionFlags(body);
mtx.set(instance.transform);
mtx.getTranslation(translation);
translation.add(tmp);
mtx.setToTranslation(translation);
body.setWorldTransform(mtx);
blocks.add(this);
if (dynamic) {
Physics.inst.addDynamicEntityToWorld(body);
} else {
Physics.inst.addStaticGeometryToWorld(body);
}
}
private static Vector3 tmp = new Vector3();
private static Vector3 translation = new Vector3();
private static Matrix4 mtx = new Matrix4();
public static void updateAll() {
for (Block block : blocks) {
block.update();
}
}
public void update() {
if (!dynamic) return;
mtx.set(body.getWorldTransform());
mtx.getTranslation(translation);
translation.sub(tmp.set(dimen).scl(0.5f));
mtx.setToTranslation(translation);
instance.transform.setTranslation(translation);
}
}