Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.me.game.screens;
- import com.badlogic.gdx.Game;
- import com.badlogic.gdx.Gdx;
- import com.badlogic.gdx.InputAdapter;
- import com.badlogic.gdx.InputMultiplexer;
- import com.badlogic.gdx.Screen;
- import com.badlogic.gdx.Input.Keys;
- import com.badlogic.gdx.graphics.GL20;
- import com.badlogic.gdx.graphics.OrthographicCamera;
- import com.badlogic.gdx.graphics.g2d.Sprite;
- import com.badlogic.gdx.graphics.g2d.SpriteBatch;
- import com.badlogic.gdx.math.MathUtils;
- import com.badlogic.gdx.math.Vector2;
- import com.badlogic.gdx.math.Vector3;
- import com.badlogic.gdx.physics.box2d.Body;
- import com.badlogic.gdx.physics.box2d.BodyDef;
- import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
- import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
- import com.badlogic.gdx.physics.box2d.ChainShape;
- import com.badlogic.gdx.physics.box2d.FixtureDef;
- import com.badlogic.gdx.physics.box2d.World;
- import com.badlogic.gdx.utils.Array;
- import com.badlogic.gdx.utils.FloatArray;
- import com.me.game.entities.Car;
- public class Play implements Screen {
- private World world;
- private Box2DDebugRenderer debugRenderer;
- private OrthographicCamera camera;
- private SpriteBatch batch;
- private final float timeStep = 1 / 60f;
- private final int velocityIterations = 8, positionIterations = 3;
- private Body ground;
- private Car car;
- private Array<Body> tmpBodies = new Array<Body>();
- private boolean drawing;
- private FloatArray coords = new FloatArray();
- private Vector3 tmp = new Vector3();
- @Override
- public void render(float delta) {
- Gdx.gl.glClearColor(0, 0, 0, 1);
- Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
- world.step(timeStep, velocityIterations, positionIterations);
- // camera.position.set(box.getPosition().x, box.getPosition().y, 0);
- camera.update();
- batch.setProjectionMatrix(camera.combined);
- batch.begin();
- world.getBodies(tmpBodies);
- for(Body body : tmpBodies)
- if(body.getUserData() != null && body.getUserData() instanceof Sprite) {
- Sprite sprite = (Sprite) body.getUserData();
- sprite.setPosition(body.getPosition().x - sprite.getWidth() / 2, body.getPosition().y - sprite.getHeight() / 2);
- sprite.setRotation(body.getAngle() * MathUtils.radiansToDegrees);
- sprite.draw(batch);
- }
- batch.end();
- debugRenderer.render(world, camera.combined);
- }
- @Override
- public void resize(int width, int height) {
- camera.viewportWidth = width / 50;
- camera.viewportHeight = height / 50;
- camera.update();
- }
- @Override
- public void show() {
- batch = new SpriteBatch();
- world = new World(new Vector2(0, -9.81f), true);
- debugRenderer = new Box2DDebugRenderer();
- camera = new OrthographicCamera();
- final BodyDef bodyDef = new BodyDef();
- final FixtureDef fixtureDef = new FixtureDef(), wheelFixtureDef = new FixtureDef();
- // CAR
- fixtureDef.density = 5;
- fixtureDef.friction = .4f;
- fixtureDef.restitution = .3f;
- wheelFixtureDef.density = fixtureDef.density * 8;
- wheelFixtureDef.friction = 5000;
- wheelFixtureDef.restitution = .4f;
- car = new Car(world, fixtureDef, wheelFixtureDef, 0, 3, 3, 1);
- Gdx.input.setInputProcessor(new InputMultiplexer(new InputAdapter() {
- @Override
- public boolean keyDown(int keycode) {
- switch(keycode) {
- case Keys.ESCAPE:
- ((Game) Gdx.app.getApplicationListener()).setScreen(new Levels());
- break;
- }
- return false;
- }
- @Override
- public boolean touchDragged(int screenX, int screenY, int pointer) {
- if(drawing) {
- tmp.x = screenX;
- tmp.y = screenY;
- camera.unproject(tmp);
- coords.add(tmp.x);
- coords.add(tmp.y);
- return true;
- }
- return false;
- }
- @Override
- public boolean scrolled(int amount) {
- camera.zoom += amount / 15f;
- return true;
- }
- @Override
- public boolean keyTyped(char character) {
- switch(character) {
- case 'c':
- if(drawing) // drawing was enabled, so this will disable it and create the ChainShape
- createChain();
- drawing = !drawing; // toggle
- return true;
- default:
- return false;
- }
- }
- public Body createChain() {
- ChainShape shape = new ChainShape();
- coords.shrink(); // reduce inner array to make sure it's not longer than needed
- shape.createChain(coords.items);
- fixtureDef.shape = shape;
- // SETUP THE OTHER FIXTURE PROPERTIES HERE
- Body body = world.createBody(bodyDef);
- body.createFixture(fixtureDef);
- return body;
- }
- }, car));
- // GROUND
- bodyDef.type = BodyType.StaticBody;
- bodyDef.position.set(0, 0);
- // ground shape
- ChainShape groundShape = new ChainShape();
- groundShape.createChain(new Vector2[] {new Vector2(-50000, 0), new Vector2(50000, 0)});
- // fixture definition
- fixtureDef.shape = groundShape;
- fixtureDef.friction = 10;
- fixtureDef.restitution = 0f;
- ground = world.createBody(bodyDef);
- ground.createFixture(fixtureDef);
- groundShape.dispose();
- }
- @Override
- public void hide() {
- dispose();
- }
- @Override
- public void pause() {
- }
- @Override
- public void resume() {
- }
- @Override
- public void dispose() {
- world.dispose();
- debugRenderer.dispose();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement