/*
* This file is part of Vanilla.
*
* Copyright (c) 2011 Spout LLC <http://www.spout.org/>
* Vanilla is licensed under the Spout License Version 1.
*
* Vanilla is free software: you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option)
* any later version.
*
* In addition, 180 days after any changes are published, you can use the
* software, incorporating those changes, under the terms of the MIT license,
* as described in the Spout License Version 1.
*
* Vanilla is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
* more details.
*
* You should have received a copy of the GNU Lesser General Public License,
* the MIT license and the Spout License Version 1 along with this program.
* If not, see <http://www.gnu.org/licenses/> for the GNU Lesser General Public
* License and see <http://spout.in/licensev1> for the full license, including
* the MIT license.
*/
package org.spout.vanilla.inventory.util;
import org.spout.api.Client;
import org.spout.api.inventory.Inventory;
import org.spout.api.inventory.Slot;
import org.spout.api.inventory.shape.Grid;
import org.spout.api.inventory.util.GridIterator;
import org.spout.math.vector.Vector2f;
import org.spout.vanilla.VanillaPlugin;
import org.spout.vanilla.inventory.window.gui.RenderSlot;
/**
* Represents an {@link InventoryConverter} that converts slots given the length of a grid in an inventory.
*/
public class GridInventoryConverter extends InventoryConverter {
public static final float SLOT_WIDTH = 0.1f;
public static final float SLOT_HEIGHT = 0.14f;
private final Grid grid;
private final Vector2f pos;
public GridInventoryConverter(Inventory inventory, int length, int offset, Vector2f pos) {
super(inventory, new int[inventory.size()], new Vector2f[inventory.size()], offset);
this.grid = inventory.grid(length);
this.pos = pos;
GridIterator iter = grid.iterator();
while (iter.hasNext()) {
int i = iter.next(), x = iter.getX(), y = iter.getY(), size = grid.getSize();
slots[i] = (offset + size) - (length * y) - (length - x);
if (VanillaPlugin.getInstance().getEngine() instanceof Client) {
RenderSlot slot = widgets[i].get(RenderSlot.class);
slot.setSlot(new Slot(inventory, i));
slot.setPosition(pos.add(x * SLOT_WIDTH, y * SLOT_HEIGHT));
}
}
}
public GridInventoryConverter(Inventory inventory, int length, Vector2f pos) {
this(inventory, length, 0, pos);
}
public GridInventoryConverter translate(int offset) {
return new GridInventoryConverter(inventory, grid.getLength(), this.offset + offset, pos);
}
/**
* Returns the grid associated with this converter.
*
* @return grid
*/
public Grid getGrid() {
return grid;
}
}