package com.weem.epicinventor.placeable;
import com.weem.epicinventor.*;
import com.weem.epicinventor.hud.*;
import com.weem.epicinventor.inventory.*;
import com.weem.epicinventor.network.*;
import java.awt.*;
import java.util.*;
public abstract class Farm extends Building {
private static final long serialVersionUID = 10000L;
protected Inventory inventory;
transient protected HUD hud;
protected int inventorySize;
protected final static int MAX_IDLE_TIME = 30;
protected long idleTime;
protected boolean isTransforming;
protected long transformTime = 0;
protected long totalTransformTime = 0;
public Farm(PlaceableManager pm, Registry rg, String sm, String am, int x, int y, Placeable.State cs, int is) {
super(pm, rg, sm, am, x, y, cs);
type = "Farm";
inventorySize = is;
inventory = new Inventory(rg, inventorySize);
hud = registry.getHUDManager().loadFarmHUD(this, inventorySize);
}
@Override
public void setTransient(Registry rg) {
registry = rg;
placeableManager = rg.getPlaceableManager();
buildingImage = registry.getImageLoader().getImage(standardImage);
buildingImage = registry.getImageLoader().changeToGrayscale(buildingImage);
canPlaceImage = registry.getImageLoader().getImage(standardImage);
canPlaceImage = registry.getImageLoader().changeTransperancy(canPlaceImage, 0.7f);
canPlaceImage = registry.getImageLoader().changeColor(canPlaceImage, (short) 0, (short) 100, (short) 0);
cantPlaceImage = registry.getImageLoader().getImage(standardImage);
cantPlaceImage = registry.getImageLoader().changeTransperancy(cantPlaceImage, 0.7f);
cantPlaceImage = registry.getImageLoader().changeColor(cantPlaceImage, (short) 100, (short) 0, (short) 0);
inventory.setTransient(rg);
if (id == null) {
id = UUID.randomUUID().toString();
}
hud = registry.getHUDManager().loadFarmHUD(this, inventorySize);
}
protected void initHUD() {
hud = registry.getHUDManager().loadFarmHUD(this, inventorySize);
}
@Override
public void setInventory(Inventory i) {
inventory = i;
}
public int getInventorySize() {
return inventorySize;
}
public void quickLoot() {
for (int i = 0; i < inventorySize; i++) {
int qty = inventory.getQtyFromSlot(i);
if (qty > 0) {
int oldQty = qty;
String name = inventory.getNameFromSlot(i);
int level = inventory.getLevelFromSlot(i);
if(placeableManager.playerAddItem(name, qty, level) < oldQty) {
deleteInventory(i, oldQty - qty);
}
}
}
hud.setShouldRender(false);
}
@Override
public boolean handleRightClick(Point clickPoint) {
if (this.isActivated() && !isTransforming) {
Point mapPoint = new Point(
placeableManager.panelToMapX(clickPoint.x),
placeableManager.panelToMapY(clickPoint.y));
if (currentState == State.Placed) {
if (isInside(mapPoint)) {
if (registry.getPlayerManager().getCurrentPlayer().getCenterPoint().distance(getCenterPoint()) <= registry.getMaxContainerDistance()) {
placeableManager.toggleContainerHUD(hud);
return true;
}
}
}
}
return false;
}
public void startTransformation() {
boolean canTransform = false;
//only transform if we've got a seed
for (int i = 0; i <= 1; i++) {
if (inventory.getNameFromSlot(i).equals("WheatSeed") || inventory.getNameFromSlot(i).equals("PumpkinSeed")) {
canTransform = true;
}
}
if (!isTransforming && canTransform) {
int usedSlots = inventory.getUsedSlots();
switch (usedSlots) {
case 1:
isTransforming = true;
totalTransformTime = (long) (1 * 60);
break;
case 2:
isTransforming = true;
totalTransformTime = (long) (1.5f * 60f);
break;
}
}
}
public Inventory getInventory() {
return inventory;
}
public boolean addItem(int slot, String name, int qty) {
if (inventory.addToInventory(slot, name, qty) == 0) {
if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.NONE && registry.getNetworkThread() != null) {
if (registry.getNetworkThread().readyForUpdates()) {
UpdatePlaceable up = new UpdatePlaceable(this.getId());
up.inventory = inventory;
up.action = "InventoryUpdate";
registry.getNetworkThread().sendData(up);
}
}
return true;
} else {
return false;
}
}
public boolean addItem(String name, int qty) {
if (inventory.addToInventory(0, name, qty) == 0) {
if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.NONE && registry.getNetworkThread() != null) {
if (registry.getNetworkThread().readyForUpdates()) {
UpdatePlaceable up = new UpdatePlaceable(this.getId());
up.inventory = inventory;
up.action = "InventoryUpdate";
registry.getNetworkThread().sendData(up);
}
}
return true;
} else {
return false;
}
}
public boolean addItem(int slot, String name, int qty, int level, boolean stack) {
if (inventory.addToInventory(slot, name, qty, level, stack) == 0) {
if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.NONE && registry.getNetworkThread() != null) {
if (registry.getNetworkThread().readyForUpdates()) {
UpdatePlaceable up = new UpdatePlaceable(this.getId());
up.inventory = inventory;
up.action = "InventoryUpdate";
registry.getNetworkThread().sendData(up);
}
}
return true;
} else {
return false;
}
}
public boolean addItem(String name, int qty, int level) {
if (inventory.addToInventory(0, name, qty, level) == 0) {
if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.NONE && registry.getNetworkThread() != null) {
if (registry.getNetworkThread().readyForUpdates()) {
UpdatePlaceable up = new UpdatePlaceable(this.getId());
up.inventory = inventory;
up.action = "InventoryUpdate";
registry.getNetworkThread().sendData(up);
}
}
return true;
} else {
return false;
}
}
public void deleteInventory(int slot, int qty) {
inventory.deleteInventory(slot, qty);
if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.NONE && registry.getNetworkThread() != null) {
if (registry.getNetworkThread().readyForUpdates()) {
UpdatePlaceable up = new UpdatePlaceable(this.getId());
up.inventory = inventory;
up.action = "InventoryUpdate";
registry.getNetworkThread().sendData(up);
}
}
}
public void swapInventory(int from, int to) {
inventory.swapInventoryLocations(from, to);
if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.NONE && registry.getNetworkThread() != null) {
if (registry.getNetworkThread().readyForUpdates()) {
UpdatePlaceable up = new UpdatePlaceable(this.getId());
up.inventory = inventory;
up.action = "InventoryUpdate";
registry.getNetworkThread().sendData(up);
}
}
}
@Override
public void update() {
super.update();
if (isTransforming) {
transformTime += registry.getImageLoader().getPeriod();
if ((transformTime / 1000) >= totalTransformTime) {
transformTime = 0;
isTransforming = false;
for (int i = 0; i <= 1; i++) {
if (inventory.getNameFromSlot(i).equals("WheatSeed")) {
inventory.deleteInventory(i, 1);
inventory.addToInventory(i, "Bread", 1);
} else if (inventory.getNameFromSlot(i).equals("PumpkinSeed")) {
inventory.deleteInventory(i, 1);
inventory.addToInventory(i, "Pumpkin", 1);
}
}
registry.showMessage("Success", "Your farm has finished producing!");
}
}
}
@Override
public void render(Graphics g) {
super.render(g);
if (isTransforming) {
float timeSpent;
float timeLeft;
float percentage;
int hours = 0;
int minutes = 0;
int seconds = 0;
int x = mapX + (width / 2);
int y = mapY + height;
timeSpent = (float) (transformTime / 1000f);
timeLeft = (float) totalTransformTime - timeSpent;
if (timeLeft < 0) {
timeLeft = 0;
}
if (timeLeft >= 3600) {
hours = (int) timeLeft / 3600;
timeLeft -= (hours * 3600);
}
if (timeLeft >= 60) {
minutes = (int) timeLeft / 60;
timeLeft -= (minutes * 60);
}
seconds = (int) timeLeft + 1;
percentage = ((float) timeSpent / (float) totalTransformTime) * 100;
placeableManager.displayProgress(g,
x,
y,
(int) percentage,
hours + ":"
+ String.format("%02d", minutes) + ":"
+ String.format("%02d", seconds));
}
}
}