package com.cookbook.samples; import com.badlogic.gdx.Gdx; 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.utils.Array; import com.badlogic.gdx.utils.viewport.FitViewport; import com.badlogic.gdx.utils.viewport.Viewport; import com.cookbook.samples.inputmapping.InputActionListener; import com.cookbook.samples.inputmapping.InputContext; import com.cookbook.samples.inputmapping.InputProfile; public class InputMappingSample extends GdxSample implements InputActionListener { private static final float SCENE_WIDTH = 1280.0f; private static final float SCENE_HEIGHT = 720.0f; private static final int MESSAGE_MAX = 15; private OrthographicCamera camera; private Viewport viewport; private SpriteBatch batch; private BitmapFont font; private InputProfile profile; private InputContext gameContext; 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.getData().setScale(2.0f); font.setColor(Color.WHITE); camera.position.set(SCENE_WIDTH * 0.5f, SCENE_HEIGHT * 0.5f, 0.0f); profile = new InputProfile(Gdx.files.internal("data/input/profile.xml")); profile.setContext("Game"); gameContext = profile.getContext(); gameContext.addListener(this); Gdx.input.setInputProcessor(profile); } @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(); font.draw(batch, gameContext.getState("Crouch") ? "crouching" : "not crouching", 50.0f, SCENE_HEIGHT - 20.0f); font.draw(batch, gameContext.getState("LookUp") ? "looking up" : "not looking up", 50.0f, SCENE_HEIGHT - 50.0f); font.draw(batch, gameContext.getState("MoveRight") ? "moving right" : "not moving right", 50.0f, SCENE_HEIGHT - 80.0f); font.draw(batch, gameContext.getState("MoveLeft") ? "moving left" : "not moving left", 50.0f, SCENE_HEIGHT - 110.0f); int numMessages = messages.size; for (int i = 0; i < numMessages; ++i) { font.draw(batch, messages.get(i), 50.0f, SCENE_HEIGHT - 160.0f - 30.0f * i); } batch.end(); } @Override public void resize(int width, int height) { viewport.update(width, height); } @Override public boolean OnAction(String action) { addMessage("Action -> " + action); return false; } private void addMessage(String message) { messages.add(message); if (messages.size > MESSAGE_MAX) { messages.removeIndex(0); } } }