/*
* 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.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.math.collision.Ray;
import com.happydroids.droidtowers.entities.GameLayer;
import com.happydroids.droidtowers.grid.GameGrid;
import java.util.List;
public class PickerTool extends ToolBase {
public PickerTool(OrthographicCamera camera, List<GameLayer> gameLayers, GameGrid gameGrid) {
super(camera, gameLayers, gameGrid);
}
@Override
public boolean longPress(float x, float y) {
Vector2 worldPoint = cameraPickRayToWorldPoint(x, y);
for (GameLayer gameLayer : gameLayers) {
if (gameLayer.isTouchEnabled() && gameLayer.longPress(worldPoint)) {
return true;
}
}
return false;
}
@Override
public boolean pan(float x, float y, float deltaX, float deltaY) {
Vector2 worldPoint = cameraPickRayToWorldPoint(x, y);
Vector2 deltaPoint = cameraPickRayToWorldPoint(x + -deltaX, y + deltaY);
for (GameLayer gameLayer : gameLayers) {
if (gameLayer.isTouchEnabled() && gameLayer.pan(worldPoint, deltaPoint)) {
return true;
}
}
return false;
}
@Override
public boolean tap(float x, float y, int count, int button) {
Vector2 worldPoint = cameraPickRayToWorldPoint(x, y);
for (GameLayer gameLayer : gameLayers) {
if (gameLayer.isTouchEnabled() && gameLayer.tap(worldPoint, count, button)) {
return true;
}
}
return false;
}
@Override
public boolean touchDown(float x, float y, int pointer, int button) {
Vector2 worldPoint = cameraPickRayToWorldPoint(x, y);
for (GameLayer gameLayer : gameLayers) {
if (gameLayer.isTouchEnabled() && gameLayer.touchDown(worldPoint, pointer)) {
return true;
}
}
return false;
}
private Vector2 cameraPickRayToWorldPoint(float x, float y) {
Ray pickRay = camera.getPickRay(x, y);
Vector3 pickRayEndPoint = pickRay.getEndPoint(1);
return new Vector2(pickRayEndPoint.x, pickRayEndPoint.y);
}
}