package org.terasology.rendering.gui.menus;
import org.lwjgl.opengl.Display;
import org.terasology.components.InventoryComponent;
import org.terasology.entitySystem.EntityRef;
import org.terasology.events.input.binds.FrobButton;
import org.terasology.events.inventory.ReceiveItemEvent;
import org.terasology.logic.manager.AssetManager;
import org.terasology.rendering.gui.components.UIInventoryNew;
import org.terasology.rendering.gui.framework.UIDisplayWindow;
import org.terasology.rendering.gui.framework.UIGraphicsElement;
import javax.vecmath.Vector2f;
/**
* Displays two inventories, and allows moving items between them
*
* @author Immortius <immortius@gmail.com>
*/
public class UIContainerScreen extends UIDisplayWindow implements UIInventoryNew.InventorySubscriber {
private static final int CENTER_BORDER = 100;
private static final int OUTER_BORDER = 50;
EntityRef container = EntityRef.NULL;
EntityRef creature = EntityRef.NULL;
private final UIInventoryNew playerInventory;
private final UIInventoryNew containerInventory;
private final UIGraphicsElement background;
public UIContainerScreen() {
background = new UIGraphicsElement(AssetManager.loadTexture("engine:containerWindow"));
background.getTextureSize().set(new Vector2f(256f / 256f, 231f / 256f));
background.getTextureOrigin().set(new Vector2f(0.0f, 0.0f));
addDisplayElement(background);
playerInventory = new UIInventoryNew(4);
playerInventory.setVisible(true);
playerInventory.subscribe(this);
addDisplayElement(playerInventory);
containerInventory = new UIInventoryNew(4);
containerInventory.setVisible(true);
containerInventory.subscribe(this);
addDisplayElement(containerInventory);
background.setVisible(true);
setModal(true);
update();
}
public void openContainer(EntityRef container, EntityRef creature) {
this.container = container;
this.creature = creature;
playerInventory.setEntity(creature);
containerInventory.setEntity(container);
}
@Override
public void update() {
super.update();
playerInventory.setPosition(new Vector2f(0.5f * Display.getWidth() - CENTER_BORDER - playerInventory.getSize().x, 0));
playerInventory.centerVertically();
containerInventory.setPosition(new Vector2f(0.5f * Display.getWidth() + CENTER_BORDER, 0));
containerInventory.centerVertically();
background.setSize(new Vector2f(2 * (CENTER_BORDER + OUTER_BORDER) + playerInventory.getSize().x + containerInventory.getSize().x, 0.8f * Display.getHeight()));
background.center();
}
public boolean processBindButton(String id, boolean pressed) {
if (!isVisible() || !pressed)
return false;
if (FrobButton.ID == id) {
setVisible(false);
return true;
}
return false;
}
public void itemClicked(UIInventoryNew inventoryNew, int slot) {
EntityRef fromEntity = inventoryNew.getEntity();
EntityRef toEntity = (fromEntity.equals(container)) ? creature : container;
InventoryComponent fromInventory = fromEntity.getComponent(InventoryComponent.class);
if (fromInventory == null)
return;
EntityRef itemEntity = fromInventory.itemSlots.get(slot);
toEntity.send(new ReceiveItemEvent(itemEntity));
}
}