package com.weem.epicinventor.placeable;
import com.weem.epicinventor.*;
import com.weem.epicinventor.drop.*;
import com.weem.epicinventor.hud.*;
import com.weem.epicinventor.inventory.*;
import com.weem.epicinventor.network.*;
import java.awt.*;
import java.util.*;
import java.util.ArrayList;
public class ItemContainer extends Building {
private static final long serialVersionUID = 10000L;
protected Inventory inventory;
transient protected HUD hud;
protected int inventorySize = 15;
protected final static int MAX_IDLE_TIME = 30;
protected long idleTime;
public ItemContainer(PlaceableManager pm, Registry rg, String sm, String am, int x, int y, Placeable.State cs, ArrayList<Drop> drops) {
super(pm, rg, sm, am, x, y, cs);
type = "ItemContainer";
inventory = new Inventory(rg, inventorySize);
initHUD();
Drop drop = null;
for (int i = 0; i < drops.size(); i++) {
drop = drops.get(i);
inventory.addToInventory(0, drop.getItemName(), drop.getQty(), drop.getLevel());
}
}
public ItemContainer(PlaceableManager pm, Registry rg, String sm, String am, int x, int y, Placeable.State cs, int i) {
super(pm, rg, sm, am, x, y, cs);
inventorySize = i;
inventory = new Inventory(rg, inventorySize);
initHUD();
}
protected void initHUD() {
hud = registry.getHUDManager().loadContainerHUD(this);
}
@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);
if (id == null) {
id = UUID.randomUUID().toString();
}
hud = registry.getHUDManager().loadContainerHUD(this);
}
@Override
public void setInventory(Inventory i) {
inventory = i;
}
@Override
public boolean handleRightClick(Point clickPoint) {
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 Inventory getInventory() {
return inventory;
}
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);
}
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) {
if (inventory.addToInventory(slot, 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 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() {
if (inventory.isEmpty()) {
isDirty = true;
if (registry.getGameController().multiplayerMode != registry.getGameController().multiplayerMode.NONE && registry.getNetworkThread() != null) {
if (registry.getNetworkThread().readyForUpdates()) {
UpdatePlaceable up = new UpdatePlaceable(this.getId());
up.action = "IsDirty";
registry.getNetworkThread().sendData(up);
}
}
}
if (!hud.getShouldRender()) {
idleTime += registry.getImageLoader().getPeriod();
if ((idleTime / 1000) >= MAX_IDLE_TIME) {
isDirty = true;
}
} else {
idleTime = 0;
}
super.update();
}
}