com.badlogic.gdx.tests.dragome.examples.bullet.BulletTestCollection.java Source code

Java tutorial

Introduction

Here is the source code for com.badlogic.gdx.tests.dragome.examples.bullet.BulletTestCollection.java

Source

package com.badlogic.gdx.tests.dragome.examples.bullet;

import com.badlogic.gdx.Application;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.InputMultiplexer;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g3d.utils.CameraInputController;
import com.badlogic.gdx.input.GestureDetector;
import com.badlogic.gdx.input.GestureDetector.GestureListener;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.utils.Align;

public class BulletTestCollection extends InputAdapter implements ApplicationListener, GestureListener {
    protected final BulletTest[] tests = { new BasicBulletTest(), new ShootTest(), new BasicShapesTest()
            //      , new KinematicTest(),
            //      new ConstraintsTest(), new MeshShapeTest(), new GimpactTest(), new ConvexHullTest(), new ConvexHullDistanceTest(),
            //      new RayCastTest(), new RayPickRagdollTest(), new InternalTickTest(), new CollisionWorldTest(), new CollisionTest(),
            //      new FrustumCullingTest(), new CollisionDispatcherTest(), new ContactCallbackTest(), new ContactCallbackTest2(),
            //      new ContactCacheTest(), new SoftBodyTest(), new SoftMeshTest(), new VehicleTest(), new CharacterTest(), new ImportTest(),
            //      new TriangleRaycastTest(), new OcclusionCullingTest(), new PairCacheTest()
    };

    protected int testIndex = 0;

    private Application app = null;

    private BitmapFont font;
    private Stage hud;
    private Label fpsLabel;
    private Label titleLabel;
    private Label instructLabel;
    private int loading = 0;
    private CameraInputController cameraController;

    @Override
    public void render() {
        if ((loading > 0) && (++loading > 2))
            loadnext();

        tests[testIndex].render();
        fpsLabel.setText(tests[testIndex].performance);
        hud.draw();
    }

    @Override
    public void create() {
        if (app == null) {
            app = Gdx.app;
            tests[testIndex].create();
        }

        cameraController = new CameraInputController(tests[testIndex].camera);
        cameraController.activateKey = Keys.CONTROL_LEFT;
        cameraController.autoUpdate = false;
        cameraController.forwardTarget = false;
        cameraController.translateTarget = false;
        Gdx.input.setInputProcessor(new InputMultiplexer(cameraController, this, new GestureDetector(this)));

        font = new BitmapFont(false);
        hud = new Stage();
        hud.addActor(fpsLabel = new Label(" ", new Label.LabelStyle(font, Color.WHITE)));
        fpsLabel.setPosition(0, 0);
        hud.addActor(titleLabel = new Label(tests[testIndex].getClass().getSimpleName(),
                new Label.LabelStyle(font, Color.WHITE)));
        titleLabel.setY(hud.getHeight() - titleLabel.getHeight());
        hud.addActor(instructLabel = new Label("A\nB\nC\nD\nE\nF", new Label.LabelStyle(font, Color.WHITE)));
        instructLabel.setY(titleLabel.getY() - instructLabel.getHeight());
        instructLabel.setAlignment(Align.top | Align.left);
        instructLabel.setText(tests[testIndex].instructions);
    }

    @Override
    public void resize(int width, int height) {
        hud.getViewport().update(width, height, true);
    }

    @Override
    public void dispose() {
        tests[testIndex].dispose();
        app = null;
    }

    public void next() {
        titleLabel.setText("Loading...");
        loading = 1;
    }

    public void loadnext() {
        app.log("TestCollection", "disposing test '" + tests[testIndex].getClass().getName() + "'");
        tests[testIndex].dispose();
        // This would be a good time for GC to kick in.
        System.gc();
        testIndex++;
        if (testIndex >= tests.length)
            testIndex = 0;
        tests[testIndex].create();
        cameraController.camera = tests[testIndex].camera;
        app.log("TestCollection", "created test '" + tests[testIndex].getClass().getName() + "'");

        titleLabel.setText(tests[testIndex].getClass().getSimpleName());
        instructLabel.setText(tests[testIndex].instructions);
        loading = 0;
    }

    @Override
    public boolean keyDown(int keycode) {
        return tests[testIndex].keyDown(keycode);
    }

    @Override
    public boolean keyTyped(char character) {
        return tests[testIndex].keyTyped(character);
    }

    @Override
    public boolean keyUp(int keycode) {
        boolean result = tests[testIndex].keyUp(keycode);
        if ((result == false) && (keycode == Keys.SPACE || keycode == Keys.MENU)) {
            next();
            result = true;
        }
        return result;
    }

    @Override
    public boolean touchDown(int x, int y, int pointer, int button) {
        return tests[testIndex].touchDown(x, y, pointer, button);
    }

    @Override
    public boolean touchDragged(int x, int y, int pointer) {
        return tests[testIndex].touchDragged(x, y, pointer);
    }

    @Override
    public boolean touchUp(int x, int y, int pointer, int button) {
        return tests[testIndex].touchUp(x, y, pointer, button);
    }

    @Override
    public boolean mouseMoved(int x, int y) {
        return tests[testIndex].mouseMoved(x, y);
    }

    @Override
    public boolean scrolled(int amount) {
        return tests[testIndex].scrolled(amount);
    }

    @Override
    public boolean touchDown(float x, float y, int pointer, int button) {
        return tests[testIndex].touchDown(x, y, pointer, button);
    }

    @Override
    public boolean tap(float x, float y, int count, int button) {
        return tests[testIndex].tap(x, y, count, button);
    }

    @Override
    public boolean longPress(float x, float y) {
        return tests[testIndex].longPress(x, y);
    }

    @Override
    public boolean fling(float velocityX, float velocityY, int button) {
        if (tests[testIndex].fling(velocityX, velocityY, button) == false)
            next();
        return true;
    }

    @Override
    public boolean pan(float x, float y, float deltaX, float deltaY) {
        return tests[testIndex].pan(x, y, deltaX, deltaY);
    }

    @Override
    public boolean panStop(float x, float y, int pointer, int button) {
        return tests[testIndex].panStop(x, y, pointer, button);
    }

    @Override
    public boolean zoom(float originalDistance, float currentDistance) {
        return tests[testIndex].zoom(originalDistance, currentDistance);
    }

    @Override
    public boolean pinch(Vector2 initialFirstPointer, Vector2 initialSecondPointer, Vector2 firstPointer,
            Vector2 secondPointer) {
        return tests[testIndex].pinch(initialFirstPointer, initialSecondPointer, firstPointer, secondPointer);
    }

    @Override
    public void pinchStop() {
    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }
}