/*
* Copyright (c) 2012. HappyDroids LLC, All rights reserved.
*/
package com.happydroids.droidtowers;
import com.badlogic.gdx.*;
import com.happydroids.droidtowers.actions.ActionManager;
import com.happydroids.droidtowers.actions.TimeDelayedAction;
import com.happydroids.droidtowers.input.InputSystem;
import org.lwjgl.opengl.Display;
public class LwjglApplicationShim implements ApplicationListener {
private static final String TAG = LwjglApplicationShim.class.getSimpleName();
private final ApplicationListener applicationListener;
private boolean wasFocused;
private InputProcessor inputProcessor;
private final TimeDelayedAction reattachInputProcessorAction;
private final InputProcessor dummyInputAdapter;
public LwjglApplicationShim(ApplicationListener applicationListener) {
this.applicationListener = applicationListener;
dummyInputAdapter = new InputAdapter();
reattachInputProcessorAction = new TimeDelayedAction(1f) {
@Override
public void run() {
Gdx.app.debug(TAG, "Reattaching input processor.");
if (inputProcessor instanceof InputSystem) {
Gdx.input.setInputProcessor(inputProcessor);
inputProcessor = null;
}
markToRemove();
}
};
}
public void create() {
Gdx.app.setLogLevel(Application.LOG_DEBUG);
wasFocused = isFocused();
applicationListener.create();
}
public void resize(int width, int height) {
applicationListener.resize(width, height);
}
public void render() {
applicationListener.render();
if (!isFocused() && wasFocused) {
pause();
wasFocused = false;
}
if (isFocused() && !wasFocused) {
resume();
wasFocused = true;
}
}
public void pause() {
Gdx.app.debug(TAG, "Focus lost, pausing game");
if (Gdx.input.getInputProcessor() != dummyInputAdapter) {
inputProcessor = Gdx.input.getInputProcessor();
}
if (inputProcessor instanceof InputSystem) {
((InputSystem) inputProcessor).unfocusAll();
}
Gdx.input.setInputProcessor(dummyInputAdapter);
applicationListener.pause();
}
public void resume() {
Gdx.app.debug(TAG, "Focus gained, resuming game");
applicationListener.resume();
reattachInputProcessorAction.reset();
ActionManager.instance().addAction(reattachInputProcessorAction);
}
public void dispose() {
applicationListener.dispose();
}
public boolean isFocused() {
return Display.isActive();
}
}