/*******************************************************************************
* Copyright 2015 Maximilian Stark | Dakror <mail@dakror.de>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package de.dakror.vloxlands.util.base;
import java.util.concurrent.CopyOnWriteArrayList;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.InputMultiplexer;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.input.GestureDetector.GestureListener;
import com.badlogic.gdx.math.Vector2;
import de.dakror.vloxlands.layer.Layer;
/**
* @author Dakror
*/
public abstract class GameBase extends ApplicationAdapter implements InputProcessor, GestureListener {
public CopyOnWriteArrayList<Layer> layers = new CopyOnWriteArrayList<Layer>();
private InputMultiplexer multiplexer = new InputMultiplexer();
public void addLayer(Layer layer) {
layer.show();
getMultiplexer().addProcessor(0, layer.gestureDetector);
getMultiplexer().addProcessor(0, layer);
if (layer.getStage() != null) getMultiplexer().addProcessor(0, layer.getStage());
layers.add(layer);
}
public void toggleLayer(Layer layer) {
if (hasLayer(layer.getClass())) removeLayer(layer.getClass());
else addLayer(layer);
}
public boolean removeLayer(Layer layer) {
getMultiplexer().removeProcessor(layer);
getMultiplexer().removeProcessor(layer.gestureDetector);
if (layer.getStage() != null) getMultiplexer().removeProcessor(layer.getStage());
layer.dispose();
return layers.remove(layer);
}
public boolean removeLayer(Class<?> layerClass) {
for (Layer layer : layers)
if (layer.getClass().equals(layerClass)) removeLayer(layer);
return false;
}
public boolean hasLayer(Class<?> layerClass) {
for (Layer layer : layers)
if (layer.getClass().equals(layerClass)) return true;
return false;
}
public Layer getActiveLayer() {
return layers.get(layers.size() - 1);
}
public void clearLayers() {
for (Layer l : layers)
removeLayer(l);
}
public void setLayer(Layer layer) {
clearLayers();
addLayer(layer);
}
public InputMultiplexer getMultiplexer() {
return multiplexer;
}
@Override
public void resize(int width, int height) {
for (Layer l : layers)
l.resize(width, height);
}
@Override
public boolean touchDown(float x, float y, int pointer, int button) {
return false;
}
@Override
public boolean tap(float x, float y, int count, int button) {
return false;
}
@Override
public boolean longPress(float x, float y) {
return false;
}
@Override
public boolean fling(float velocityX, float velocityY, int button) {
return false;
}
@Override
public boolean pan(float x, float y, float deltaX, float deltaY) {
return false;
}
@Override
public boolean panStop(float x, float y, int pointer, int button) {
return false;
}
@Override
public boolean zoom(float initialDistance, float distance) {
return false;
}
@Override
public boolean pinch(Vector2 initialPointer1, Vector2 initialPointer2, Vector2 pointer1, Vector2 pointer2) {
return false;
}
@Override
public boolean keyDown(int keycode) {
return false;
}
@Override
public boolean keyUp(int keycode) {
return false;
}
@Override
public boolean keyTyped(char character) {
return false;
}
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer) {
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY) {
return false;
}
@Override
public boolean scrolled(int amount) {
return false;
}
}