package com.cookbook.samples; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.controllers.Controller; import com.badlogic.gdx.controllers.ControllerListener; import com.badlogic.gdx.controllers.Controllers; import com.badlogic.gdx.controllers.PovDirection; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.Viewport; public class GamepadSample extends GdxSample { private static final float SCENE_WIDTH = 1280.0f; private static final float SCENE_HEIGHT = 720.0f; private static final int MESSAGE_MAX = 26; private static final float DEAD_ZONE = 0.4f; private OrthographicCamera camera; private Viewport viewport; private SpriteBatch batch; private BitmapFont font; private Array<String> messages; @Override public void create() { camera = new OrthographicCamera(); viewport = new FitViewport(SCENE_WIDTH, SCENE_HEIGHT, camera); batch = new SpriteBatch(); font = new BitmapFont(); messages = new Array<String>(); font.setColor(Color.WHITE); font.getData().setScale(1.5f); camera.position.set(SCENE_WIDTH * 0.5f, SCENE_HEIGHT * 0.5f, 0.0f); Controllers.addListener(new ControllerEventHandler()); for (Controller controller : Controllers.getControllers()) { Gdx.app.log("Controllers: ", controller.toString()); } } @Override public void dispose() { batch.dispose(); font.dispose(); } @Override public void render() { Gdx.gl.glClearColor(0.39f, 0.58f, 0.92f, 1.0f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); camera.update(); batch.setProjectionMatrix(camera.combined); batch.begin(); for (int i = 0; i < messages.size; ++i) { font.draw(batch, messages.get(i), 20.0f, SCENE_HEIGHT - 25.0f * (i + 1)); } batch.end(); } @Override public void resize(int width, int height) { viewport.update(width, height); } private void addMessage(String message) { messages.add(message); if (messages.size > MESSAGE_MAX) { messages.removeIndex(0); } } private class ControllerEventHandler implements ControllerListener { @Override public void connected(Controller controller) { addMessage("controller connected"); } @Override public void disconnected(Controller controller) { addMessage("controller disconnected"); } @Override public boolean buttonDown(Controller controller, int buttonCode) { addMessage("buttonDown controller(" + controller + ") buttonCode(" + buttonCode + ")"); return false; } @Override public boolean buttonUp(Controller controller, int buttonCode) { addMessage("buttonUp controller(" + controller + ") buttonCode(" + buttonCode + ")"); return false; } @Override public boolean axisMoved(Controller controller, int axisCode, float value) { if (Math.abs(value) > DEAD_ZONE) { addMessage("axisMoved controller(" + controller + ") axisCode(" + axisCode + ") value(" + value + ")"); } return false; } @Override public boolean povMoved(Controller controller, int povCode, PovDirection value) { addMessage("povMoved controller(" + controller + ") povCode(" + povCode + ") value(" + value + ")"); return false; } @Override public boolean xSliderMoved(Controller controller, int sliderCode, boolean value) { addMessage("xSliderMoved controller(" + controller + ") sliderCode(" + sliderCode + ") value(" + value + ")"); return false; } @Override public boolean ySliderMoved(Controller controller, int sliderCode, boolean value) { addMessage("ySliderMoved controller(" + controller + ") sliderCode(" + sliderCode + ") value(" + value + ")"); return false; } @Override public boolean accelerometerMoved(Controller controller, int accelerometerCode, Vector3 value) { addMessage("accelerometerMoved controller(" + controller + ") accelerometerCode(" + accelerometerCode + ") value(" + value + ")"); return false; } } }