package fr.wisper.entities;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.BodyDef;
import com.badlogic.gdx.physics.box2d.CircleShape;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.physics.box2d.FixtureDef;
import fr.wisper.utils.Config;
public class WisperBox2d extends AbstractBox2dWrapper {
// Wisper
private Wisper wisper;
private int wisperType;
public WisperBox2d(int particleId, World world) {
switch (particleId) {
case Wisper.BLACK_WISPER:
wisper = new Wisper("particles/black-wisper-small-noadditive.p");
break;
case Wisper.BLUE_WISPER:
wisper = new Wisper("particles/blue-wisper-small-noadditive.p");
break;
case Wisper.RED_WISPER:
wisper = new Wisper("particles/red-wisper-small-noadditive.p");
break;
default:
break;
}
wisperType = particleId;
body = createWisperBody(world);
}
public int getType() {
return wisperType;
}
@Override
public boolean isComplete() {
return wisper.isComplete();
}
public void explode() {
wisper.explode();
}
@Override
public void draw(Batch batch, float delta) {
wisper.setPosition(body.getPosition().x - wisper.getOffset() / 2, body.getPosition().y);
wisper.draw(batch, delta);
}
private Body createWisperBody(World world) {
CircleShape shape = new CircleShape();
shape.setRadius(1.5f); // Meters
BodyDef wisperBodyDef = new BodyDef();
wisperBodyDef.type = BodyDef.BodyType.DynamicBody;
wisperBodyDef.position.set(Config.APP_WIDTH / 2, Config.APP_HEIGHT / 2);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = shape;
fixtureDef.density = 3f; // kg
fixtureDef.friction = 1f; // [0 - 1]
fixtureDef.restitution = 0f; // velocity loose
Body body = world.createBody(wisperBodyDef);
body.createFixture(fixtureDef);
body.setFixedRotation(true);
shape.dispose();
body.setUserData(this);
body.setGravityScale(0);
return body;
}
@Override
public void dispose() {
wisper.dispose();
}
}