/*
* Copyright (c) 2012. HappyDroids LLC, All rights reserved.
*/
package com.happydroids.droidtowers.gui;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.NinePatch;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.ui.Button;
import com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup;
import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable;
import com.badlogic.gdx.utils.Pools;
import com.google.common.eventbus.Subscribe;
import com.happydroids.droidtowers.Colors;
import com.happydroids.droidtowers.DroidTowersGame;
import com.happydroids.droidtowers.TowerAssetManager;
import com.happydroids.droidtowers.TowerConsts;
import com.happydroids.droidtowers.controllers.AvatarLayer;
import com.happydroids.droidtowers.entities.GridObject;
import com.happydroids.droidtowers.events.GridObjectBoundsChangeEvent;
import com.happydroids.droidtowers.grid.GameGrid;
import com.happydroids.droidtowers.gui.events.CameraControllerEvent;
import com.happydroids.droidtowers.input.CameraController;
import com.happydroids.droidtowers.math.GridPoint;
import com.happydroids.droidtowers.platform.Display;
import com.happydroids.platform.Platform;
import static com.happydroids.droidtowers.TowerConsts.GAME_GRID_EXPAND_LAND_SIZE;
public class ExpandLandOverlay extends WidgetGroup {
private static final int PADDING = 300;
private final GameGrid gameGrid;
private final AvatarLayer avatarLayer;
private final CameraController cameraController;
private Button leftButton;
private Button rightButton;
public ExpandLandOverlay(GameGrid gameGrid, AvatarLayer avatarLayer, CameraController cameraController) {
this.gameGrid = gameGrid;
this.avatarLayer = avatarLayer;
this.cameraController = cameraController;
cameraController.events().register(this);
leftButton = new ExpandLandButton("left");
leftButton.setVisible(false);
leftButton.setX(5);
leftButton.setY((Gdx.graphics.getHeight() - leftButton.getHeight()) / 2);
addActor(leftButton);
rightButton = new ExpandLandButton("right");
rightButton.setVisible(false);
rightButton.setX(Display.getWidth() - rightButton.getWidth() - 5);
rightButton.setY((Display.getHeight() - rightButton.getHeight()) / 2);
addActor(rightButton);
leftButton.addListener(new VibrateClickListener() {
@Override
public void onClick(InputEvent event, float x, float y) {
expandLandToWest();
}
});
rightButton.addListener(new VibrateClickListener() {
@Override
public void onClick(InputEvent event, float x, float y) {
expandLandToEast();
}
});
}
private void expandLandToEast() {
if (!Platform.getPurchaseManager().hasPurchasedUnlimitedVersion()) {
new PurchaseDroidTowersUnlimitedPrompt().show();
return;
}
gameGrid.events().unregister(DroidTowersGame.getSoundController());
gameGrid.getGridSize().x += GAME_GRID_EXPAND_LAND_SIZE;
gameGrid.updateWorldSize(false);
for (GridObject gridObject : gameGrid.getObjects()) {
GridObjectBoundsChangeEvent event = Pools.obtain(GridObjectBoundsChangeEvent.class);
event.setGridObject(gridObject);
gridObject.setPosition(gridObject.getPosition());
gridObject.broadcastEvent(event);
Pools.free(event);
}
cameraController.panTo(gameGrid.getWorldSize().x, cameraController.getCamera().position.y, true);
gameGrid.events().register(DroidTowersGame.getSoundController());
}
private void expandLandToWest() {
if (!Platform.getPurchaseManager().hasPurchasedUnlimitedVersion()) {
new PurchaseDroidTowersUnlimitedPrompt().show();
return;
}
gameGrid.events().unregister(DroidTowersGame.getSoundController());
gameGrid.getGridSize().x += GAME_GRID_EXPAND_LAND_SIZE;
gameGrid.updateWorldSize(false);
for (GridObject gridObject : gameGrid.getObjects()) {
GridPoint position = gridObject.getPosition();
gridObject.setPosition(position.x + GAME_GRID_EXPAND_LAND_SIZE, position.y);
gridObject.adjustToNewLandSize();
}
avatarLayer.adjustAvatarPositions(GAME_GRID_EXPAND_LAND_SIZE);
Vector3 cameraPosition = cameraController.getCamera().position.cpy();
cameraController.getCamera()
.position
.set(cameraPosition.x + (TowerConsts.GRID_UNIT_SIZE * GAME_GRID_EXPAND_LAND_SIZE), cameraPosition.y, cameraPosition.z);
cameraController.panTo(0, cameraController.getCamera().position.y, true);
gameGrid.events().register(DroidTowersGame.getSoundController());
}
public float getPrefWidth() {
return 0;
}
public float getPrefHeight() {
return 0;
}
private static class ExpandLandButton extends Button {
public ExpandLandButton(String textureSuffix) {
super(new ButtonStyle(
makeNinePatch(textureSuffix, new Color(1f, 1f, 1f, 0.5f)),
makeNinePatch(textureSuffix, Colors.ICS_BLUE),
makeNinePatch(textureSuffix, new Color(1f, 1f, 1f, 0.75f))));
}
private static NinePatchDrawable makeNinePatch(String textureSuffix, Color color) {
return new NinePatchDrawable(new NinePatch(TowerAssetManager.textureFromAtlas("expand-land-" + textureSuffix, "hud/buttons.txt"), color));
}
}
@Subscribe
public void CameraController_onPan(CameraControllerEvent event) {
leftButton.setVisible(event.getPosition().x <= PADDING * event.getZoom());
rightButton.setVisible(event.getPosition().x + (PADDING * event.getZoom()) >= gameGrid.getWorldSize().x);
}
}