package com.cookbook.samples.inputmapping;
import java.io.InputStream;
import java.io.InputStreamReader;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.ArrayMap;
import com.badlogic.gdx.utils.XmlReader;
import com.badlogic.gdx.utils.XmlReader.Element;
public class InputProfile implements InputProcessor {
private ArrayMap<String, InputContext> contexts;
private InputContext context;
public InputProfile(FileHandle handle) {
contexts = new ArrayMap<String, InputContext>();
context = null;
try {
Gdx.app.debug("InputProfile", "Reading file " + handle.path());
InputStream inputStream = handle.read();
InputStreamReader streamReader = new InputStreamReader(inputStream, "UTF-8");
XmlReader reader = new XmlReader();
Element root = reader.parse(streamReader);
int numContexts = root.getChildCount();
for (int i = 0; i < numContexts; ++i) {
Element contextElement = root.getChild(i);
InputContext context = new InputContext();
context.load(contextElement);
contexts.put(context.getName(), context);
}
}
catch (Exception e) {
Gdx.app.error("InputProfile", "error loading file " + handle.path() + " " + e.getMessage());
}
}
public void setContext(String contextName) {
context = contexts.get(contextName);
}
public InputContext getContext() {
return context;
}
public InputContext getContextByName(String name) {
return contexts.get(name);
}
@Override
public boolean keyDown(int keycode) {
if (context != null) {
return context.keyDown(keycode);
}
return false;
}
@Override
public boolean keyUp(int keycode) {
if (context != null) {
return context.keyUp(keycode);
}
return false;
}
@Override
public boolean keyTyped(char character) {
if (context != null) {
return context.keyTyped(character);
}
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
if (context != null) {
return context.touchDown(screenX, screenY, pointer, button);
}
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
if (context != null) {
return context.touchUp(screenX, screenY, pointer, button);
}
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
if (context != null) {
return context.touchDragged(screenX, screenY, pointer);
}
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
if (context != null) {
return context.mouseMoved(screenX, screenY);
}
return false;
}
@Override
public boolean scrolled(int amount) {
if (context != null) {
return context.scrolled(amount);
}
return false;
}
}