/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.droidtowers.input; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.math.Vector3; import com.badlogic.gdx.utils.Array; import com.happydroids.droidtowers.TowerConsts; import com.happydroids.droidtowers.entities.GameLayer; import com.happydroids.droidtowers.entities.GridObject; import com.happydroids.droidtowers.entities.GridObjectSort; import com.happydroids.droidtowers.entities.Transit; import com.happydroids.droidtowers.grid.GameGrid; import com.happydroids.droidtowers.gui.HeadsUpDisplay; import com.happydroids.droidtowers.math.GridPoint; import java.util.List; public class SellTool extends ToolBase { public SellTool(OrthographicCamera camera, List<GameLayer> gameLayers, GameGrid gameGrid) { super(camera, gameLayers, gameGrid); } public boolean touchDown(float x, float y, int pointer, int button) { Vector3 worldPoint = camera.getPickRay(x, y).getEndPoint(1); GridPoint gridPointAtFinger = gameGrid.closestGridPoint(worldPoint.x, worldPoint.y); Array<GridObject> gridObjects = gameGrid.positionCache().getObjectsAt(gridPointAtFinger, TowerConsts.SINGLE_POINT); if (gridObjects != null && gridObjects.size > 0) { gridObjects.sort(GridObjectSort.byZIndex); final GridObject objectToSell = gridObjects.get(0); if (objectToSell.getPosition().y >= TowerConsts.LOBBY_FLOOR && !checkAboveOrBelow(objectToSell, objectToSell.getPosition() .cpy() .add(0, 1))) { HeadsUpDisplay.showToast("You cannot sell this, something is above it."); } else if (objectToSell.getPosition().y < TowerConsts.LOBBY_FLOOR && !checkAboveOrBelow(objectToSell, objectToSell .getPosition() .cpy() .sub(0, 1))) { HeadsUpDisplay.showToast("You cannot sell this, something is below it."); } else { final int sellPrice = (int) (objectToSell.getGridObjectType().getCoins() * 0.5); new SellGridObjectConfirmationDialog(gameGrid, objectToSell).show(); } return true; } return false; } private boolean checkAboveOrBelow(GridObject objectToSell, final GridPoint gridPointAbove) { if (objectToSell instanceof Transit) { return true; } Array<GridObject> objectsAbove = objectToSell.getGameGrid() .positionCache() .getObjectsAt(gridPointAbove, objectToSell.getSize(), objectToSell); if (objectsAbove.size > 0) { int nonTransits = 0; for (GridObject gridObject : objectsAbove) { if (!(gridObject instanceof Transit)) { nonTransits++; } } return nonTransits == 0; } return objectsAbove.size == 0; } }