package com.cookbook.samples;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputAdapter;
import com.badlogic.gdx.InputMultiplexer;
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;
public class InputMultiplexerSample extends GdxSample {
private static final float SCENE_WIDTH = 1280f;
private static final float SCENE_HEIGHT = 720f;
private static final int MESSAGE_MAX = 22;
private OrthographicCamera camera;
private Viewport viewport;
private SpriteBatch batch;
private BitmapFont font;
private InputMultiplexer multiplexer;
private Array<ScreenLogMessage> messages;
@Override
public void create() {
camera = new OrthographicCamera();
viewport = new FitViewport(SCENE_WIDTH, SCENE_HEIGHT, camera);
batch = new SpriteBatch();
font = new BitmapFont(Gdx.files.internal("data/fonts/oswald-32.fnt"));
font.getData().setScale(0.8f);
messages = new Array<ScreenLogMessage>();
multiplexer = new InputMultiplexer();
camera.position.set(SCENE_WIDTH * 0.5f, SCENE_HEIGHT * 0.5f, 0.0f);
Gdx.input.setInputProcessor(multiplexer);
multiplexer.addProcessor(new InputHandlerA());
multiplexer.addProcessor(new InputHandlerB());
}
@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) {
ScreenLogMessage message = messages.get(i);
font.setColor(message.color);
font.draw(batch, message.message, 20.0f, SCENE_HEIGHT - 30.0f * (i + 1));
}
batch.end();
}
@Override
public void resize(int width, int height) {
viewport.update(width, height);
}
private void addMessage(String message, Color color) {
messages.add(new ScreenLogMessage(message, color));
if (messages.size > MESSAGE_MAX) {
messages.removeIndex(0);
}
}
private class InputHandlerA extends InputAdapter {
@Override
public boolean keyDown (int keycode) {
addMessage("InputHandlerA - keyDown: keycode(" + keycode + ")", Color.YELLOW);
return true;
}
@Override
public boolean keyUp (int keycode) {
addMessage("InputHandlerA - keyUp: keycode(" + keycode + ")", Color.YELLOW);
return true;
}
@Override
public boolean keyTyped (char character) {
addMessage("InputHandlerA - keyTyped: character(" + character + ")", Color.YELLOW);
return true;
}
}
private class InputHandlerB extends InputAdapter {
@Override
public boolean touchDown (int screenX, int screenY, int pointer, int button) {
addMessage("InputHandlerB - touchDown: screenX(" + screenX + ") screenY(" + screenY + ") pointer(" + pointer + ") button(" + button + ")", Color.GREEN);
return true;
}
@Override
public boolean touchUp (int screenX, int screenY, int pointer, int button) {
addMessage("InputHandlerB - touchUp: screenX(" + screenX + ") screenY(" + screenY + ") pointer(" + pointer + ") button(" + button + ")", Color.GREEN);
return true;
}
@Override
public boolean touchDragged (int screenX, int screenY, int pointer) {
addMessage("InputHandlerB - touchDragged: screenX(" + screenX + ") screenY(" + screenY + ") pointer(" + pointer + ")", Color.GREEN);
return true;
}
@Override
public boolean mouseMoved (int screenX, int screenY) {
addMessage("InputHandlerB - mouseMoved: screenX(" + screenX + ") screenY(" + screenY + ")", Color.GREEN);
return true;
}
@Override
public boolean scrolled (int amount) {
addMessage("InputHandlerB - scrolled: amount(" + amount + ")", Color.GREEN);
return true;
}
}
private class ScreenLogMessage {
public final String message;
public final Color color;
public ScreenLogMessage(String message, Color color) {
this.message = message;
this.color = color;
}
}
}