/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.droidtowers.input; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.math.Vector2; import com.happydroids.HappyDroidConsts; import com.happydroids.droidtowers.entities.GameLayer; import com.happydroids.droidtowers.grid.GameGrid; import java.util.List; import static com.badlogic.gdx.input.GestureDetector.GestureListener; public class GestureDelegater implements GestureListener { private ToolBase currentTool; private final CameraController cameraController; private Runnable beforeSwitchToolRunnable; private final GameGrid gameGrid; private final List<GameLayer> gameLayers; public GestureDelegater(OrthographicCamera camera, List<GameLayer> gameLayers, GameGrid gameGrid, CameraController cameraController) { this.gameLayers = gameLayers; this.gameGrid = gameGrid; this.cameraController = cameraController; } public void switchTool(OrthographicCamera camera, List<GameLayer> gameLayers, GestureTool tool, Runnable switchToolRunnable) { if (HappyDroidConsts.DEBUG) { System.out.println("tool = " + tool); } if (beforeSwitchToolRunnable != null) { beforeSwitchToolRunnable.run(); beforeSwitchToolRunnable = null; } if (currentTool != null) { currentTool.cleanup(); } currentTool = tool.newInstance(camera, gameLayers, gameGrid); beforeSwitchToolRunnable = switchToolRunnable; } public GestureListener getCurrentTool() { return currentTool; } // GO AWAY, DEMONS AHEAD! public boolean touchDown(float x, float y, int pointer, int button) { return currentTool != null && currentTool.touchDown(x, y, pointer, button) || cameraController.touchDown(x, y, pointer); } public boolean tap(float x, float y, int count, int button) { return currentTool != null && currentTool.tap(x, y, count, button) || cameraController.tap(x, y, count, button); } public boolean longPress(float x, float y) { return currentTool != null && currentTool.longPress(x, y) || cameraController.longPress(x, y); } public boolean fling(float velocityX, float velocityY, int button) { return currentTool != null && currentTool.fling(velocityX, velocityY, button) || cameraController.fling(velocityX, velocityY, button); } public boolean pan(float x, float y, float deltaX, float deltaY) { return currentTool != null && currentTool.pan(x, y, deltaX, deltaY) || cameraController.pan(x, y, deltaX, deltaY); } @Override public boolean panStop(float x, float y, int pointer, int button) { return false; } public boolean zoom(float originalDistance, float currentDistance) { return currentTool != null && currentTool.zoom(originalDistance, currentDistance) || cameraController.zoom(originalDistance, currentDistance); } public boolean scrolled(int amount) { return currentTool != null && currentTool.scrolled(amount) || cameraController.scrolled(amount); } public boolean pinch(Vector2 vector2, Vector2 vector21, Vector2 vector22, Vector2 vector23) { return false; } public void update(float deltaTime) { if (currentTool != null) { currentTool.update(deltaTime); } cameraController.update(deltaTime); } public List<GameLayer> getGameLayers() { return gameLayers; } }