use of com.badlogic.gdx.math.Vector2 in project libgdx by libgdx.
the class ShapeRenderer method rectLine.
/** Draws a line using a rotated rectangle, where with one edge is centered at x1, y1 and the opposite edge centered at x2, y2. */
public void rectLine(float x1, float y1, float x2, float y2, float width) {
check(ShapeType.Line, ShapeType.Filled, 8);
float colorBits = color.toFloatBits();
Vector2 t = tmp.set(y2 - y1, x1 - x2).nor();
width *= 0.5f;
float tx = t.x * width;
float ty = t.y * width;
if (shapeType == ShapeType.Line) {
renderer.color(colorBits);
renderer.vertex(x1 + tx, y1 + ty, 0);
renderer.color(colorBits);
renderer.vertex(x1 - tx, y1 - ty, 0);
renderer.color(colorBits);
renderer.vertex(x2 + tx, y2 + ty, 0);
renderer.color(colorBits);
renderer.vertex(x2 - tx, y2 - ty, 0);
renderer.color(colorBits);
renderer.vertex(x2 + tx, y2 + ty, 0);
renderer.color(colorBits);
renderer.vertex(x1 + tx, y1 + ty, 0);
renderer.color(colorBits);
renderer.vertex(x2 - tx, y2 - ty, 0);
renderer.color(colorBits);
renderer.vertex(x1 - tx, y1 - ty, 0);
} else {
renderer.color(colorBits);
renderer.vertex(x1 + tx, y1 + ty, 0);
renderer.color(colorBits);
renderer.vertex(x1 - tx, y1 - ty, 0);
renderer.color(colorBits);
renderer.vertex(x2 + tx, y2 + ty, 0);
renderer.color(colorBits);
renderer.vertex(x2 - tx, y2 - ty, 0);
renderer.color(colorBits);
renderer.vertex(x2 + tx, y2 + ty, 0);
renderer.color(colorBits);
renderer.vertex(x1 - tx, y1 - ty, 0);
}
}
use of com.badlogic.gdx.math.Vector2 in project libgdx by libgdx.
the class Box2DCharacterControllerTest method isPlayerGrounded.
private boolean isPlayerGrounded(float deltaTime) {
groundedPlatform = null;
Array<Contact> contactList = world.getContactList();
for (int i = 0; i < contactList.size; i++) {
Contact contact = contactList.get(i);
if (contact.isTouching() && (contact.getFixtureA() == playerSensorFixture || contact.getFixtureB() == playerSensorFixture)) {
Vector2 pos = player.getPosition();
WorldManifold manifold = contact.getWorldManifold();
boolean below = true;
for (int j = 0; j < manifold.getNumberOfContactPoints(); j++) {
below &= (manifold.getPoints()[j].y < pos.y - 1.5f);
}
if (below) {
if (contact.getFixtureA().getUserData() != null && contact.getFixtureA().getUserData().equals("p")) {
groundedPlatform = (Platform) contact.getFixtureA().getBody().getUserData();
}
if (contact.getFixtureB().getUserData() != null && contact.getFixtureB().getUserData().equals("p")) {
groundedPlatform = (Platform) contact.getFixtureB().getBody().getUserData();
}
return true;
}
return false;
}
}
return false;
}
use of com.badlogic.gdx.math.Vector2 in project libgdx by libgdx.
the class Box2DCharacterControllerTest method create.
@Override
public void create() {
world = new World(new Vector2(0, -40), true);
renderer = new Box2DDebugRenderer();
cam = new OrthographicCamera(28, 20);
createWorld();
Gdx.input.setInputProcessor(this);
batch = new SpriteBatch();
font = new BitmapFont(Gdx.files.internal("data/arial-15.fnt"), false);
}
use of com.badlogic.gdx.math.Vector2 in project libgdx by libgdx.
the class Box2DCharacterControllerTest method touchDown.
@Override
public boolean touchDown(int x, int y, int pointerId, int button) {
cam.unproject(point.set(x, y, 0));
if (button == Input.Buttons.LEFT) {
if (last == null) {
last = new Vector2(point.x, point.y);
} else {
createEdge(BodyType.StaticBody, last.x, last.y, point.x, point.y, 0);
last.set(point.x, point.y);
}
} else {
last = null;
}
return false;
}
use of com.badlogic.gdx.math.Vector2 in project libgdx by libgdx.
the class Box2DCharacterControllerTest method render.
@Override
public void render() {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
cam.position.set(player.getPosition().x, player.getPosition().y, 0);
cam.update();
renderer.render(world, cam.combined);
Vector2 vel = player.getLinearVelocity();
Vector2 pos = player.getPosition();
boolean grounded = isPlayerGrounded(Gdx.graphics.getDeltaTime());
if (grounded) {
lastGroundTime = TimeUtils.nanoTime();
} else {
if (TimeUtils.nanoTime() - lastGroundTime < 100000000) {
grounded = true;
}
}
// cap max velocity on x
if (Math.abs(vel.x) > MAX_VELOCITY) {
vel.x = Math.signum(vel.x) * MAX_VELOCITY;
player.setLinearVelocity(vel.x, vel.y);
}
// calculate stilltime & damp
if (!Gdx.input.isKeyPressed(Keys.A) && !Gdx.input.isKeyPressed(Keys.D)) {
stillTime += Gdx.graphics.getDeltaTime();
player.setLinearVelocity(vel.x * 0.9f, vel.y);
} else {
stillTime = 0;
}
// disable friction while jumping
if (!grounded) {
playerPhysicsFixture.setFriction(0f);
playerSensorFixture.setFriction(0f);
} else {
if (!Gdx.input.isKeyPressed(Keys.A) && !Gdx.input.isKeyPressed(Keys.D) && stillTime > 0.2) {
playerPhysicsFixture.setFriction(1000f);
playerSensorFixture.setFriction(1000f);
} else {
playerPhysicsFixture.setFriction(0.2f);
playerSensorFixture.setFriction(0.2f);
}
// character hops :)
if (groundedPlatform != null && groundedPlatform instanceof MovingPlatform && ((MovingPlatform) groundedPlatform).dist == 0) {
player.applyLinearImpulse(0, -24, pos.x, pos.y, true);
}
}
// since Box2D 2.2 we need to reset the friction of any existing contacts
Array<Contact> contacts = world.getContactList();
for (int i = 0; i < world.getContactCount(); i++) {
Contact contact = contacts.get(i);
contact.resetFriction();
}
// apply left impulse, but only if max velocity is not reached yet
if (Gdx.input.isKeyPressed(Keys.A) && vel.x > -MAX_VELOCITY) {
player.applyLinearImpulse(-2f, 0, pos.x, pos.y, true);
}
// apply right impulse, but only if max velocity is not reached yet
if (Gdx.input.isKeyPressed(Keys.D) && vel.x < MAX_VELOCITY) {
player.applyLinearImpulse(2f, 0, pos.x, pos.y, true);
}
// jump, but only when grounded
if (jump) {
jump = false;
if (grounded) {
player.setLinearVelocity(vel.x, 0);
System.out.println("jump before: " + player.getLinearVelocity());
player.setTransform(pos.x, pos.y + 0.01f, 0);
player.applyLinearImpulse(0, 40, pos.x, pos.y, true);
System.out.println("jump, " + player.getLinearVelocity());
}
}
// update platforms
for (int i = 0; i < platforms.size; i++) {
Platform platform = platforms.get(i);
platform.update(Math.max(1 / 30.0f, Gdx.graphics.getDeltaTime()));
}
// le step...
world.step(Gdx.graphics.getDeltaTime(), 4, 4);
// accum += Gdx.graphics.getDeltaTime();
// while(accum > TICK) {
// accum -= TICK;
// world.step(TICK, 4, 4);
// }
player.setAwake(true);
cam.project(point.set(pos.x, pos.y, 0));
batch.begin();
font.draw(batch, "friction: " + playerPhysicsFixture.getFriction() + "\ngrounded: " + grounded, point.x + 20, point.y);
batch.end();
}
Aggregations