150 lines
4.7 KiB
Java
150 lines
4.7 KiB
Java
package net.machinemuse.general.gui.frame;
|
|
|
|
import net.machinemuse.general.gui.clickable.ClickableItem;
|
|
import net.machinemuse.general.sound.SoundDictionary;
|
|
import net.machinemuse.numina.geometry.Colour;
|
|
import net.machinemuse.numina.geometry.FlyFromPointToPoint2D;
|
|
import net.machinemuse.numina.geometry.GradientAndArcCalculator;
|
|
import net.machinemuse.numina.geometry.MusePoint2D;
|
|
import net.machinemuse.numina.sound.Musique;
|
|
import net.machinemuse.utils.MuseItemUtils;
|
|
import net.machinemuse.utils.render.MuseRenderer;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
|
|
public class ItemSelectionFrame extends ScrollableFrame {
|
|
protected List<ClickableItem> itemButtons;
|
|
protected int selectedItemStack = -1;
|
|
protected EntityPlayer player;
|
|
protected List<MusePoint2D> itemPoints;
|
|
|
|
public ItemSelectionFrame(MusePoint2D topleft, MusePoint2D bottomright,
|
|
Colour borderColour, Colour insideColour, EntityPlayer player) {
|
|
super(topleft, bottomright, borderColour, insideColour);
|
|
this.player = player;
|
|
List<Integer> slots = MuseItemUtils
|
|
.getModularItemSlotsInInventory(player.inventory);
|
|
loadPoints(slots.size());
|
|
loadItems();
|
|
}
|
|
|
|
private void loadPoints(int num) {
|
|
double centerx = (border.left() + border.right()) / 2;
|
|
double centery = (border.top() + border.bottom()) / 2;
|
|
itemPoints = new ArrayList();
|
|
List<MusePoint2D> targetPoints = GradientAndArcCalculator.pointsInLine(num,
|
|
new MusePoint2D(centerx, border.bottom()),
|
|
new MusePoint2D(centerx, border.top()));
|
|
for (MusePoint2D point : targetPoints) {
|
|
// Fly from middle over 200 ms
|
|
itemPoints.add(new FlyFromPointToPoint2D(
|
|
new MusePoint2D(centerx, centery),
|
|
point, 200));
|
|
}
|
|
}
|
|
|
|
private void loadItems() {
|
|
if (player != null) {
|
|
itemButtons = new ArrayList<ClickableItem>();
|
|
double centerx = (border.left() + border.right()) / 2;
|
|
double centery = (border.top() + border.bottom()) / 2;
|
|
List<Integer> slots = MuseItemUtils
|
|
.getModularItemSlotsInInventory(player.inventory);
|
|
if (slots.size() > itemPoints.size()) {
|
|
loadPoints(slots.size());
|
|
}
|
|
if (slots.size() > 0) {
|
|
Iterator<MusePoint2D> pointiterator = itemPoints.iterator();
|
|
|
|
for (int slot : slots) {
|
|
ClickableItem clickie = new ClickableItem(
|
|
player.inventory.getStackInSlot(slot),
|
|
pointiterator.next(), slot);
|
|
itemButtons.add(clickie);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void update(double mousex, double mousey) {
|
|
loadItems();
|
|
|
|
}
|
|
|
|
@Override
|
|
public void draw() {
|
|
drawBackground();
|
|
drawItems();
|
|
drawSelection();
|
|
}
|
|
|
|
private void drawBackground() {
|
|
super.draw();
|
|
}
|
|
|
|
private void drawItems() {
|
|
for (ClickableItem item : itemButtons) {
|
|
item.draw();
|
|
}
|
|
}
|
|
|
|
private void drawSelection() {
|
|
if (selectedItemStack != -1) {
|
|
MuseRenderer.drawCircleAround(
|
|
Math.floor(itemButtons.get(selectedItemStack).getPosition().x()),
|
|
Math.floor(itemButtons.get(selectedItemStack).getPosition().y()),
|
|
10);
|
|
}
|
|
}
|
|
|
|
public boolean hasNoItems() {
|
|
return itemButtons.size() == 0;
|
|
}
|
|
|
|
public ClickableItem getSelectedItem() {
|
|
if (itemButtons.size() > selectedItemStack && selectedItemStack != -1) {
|
|
return itemButtons.get(selectedItemStack);
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onMouseDown(double x, double y, int button) {
|
|
int i = 0;
|
|
for (ClickableItem item : itemButtons) {
|
|
if (item.hitBox(x, y)) {
|
|
Musique.playClientSound(SoundDictionary.SOUND_GUI_SELECT, 1);
|
|
selectedItemStack = i;
|
|
break;
|
|
} else {
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public List<String> getToolTip(int x, int y) {
|
|
int itemHover = -1;
|
|
int i = 0;
|
|
for (ClickableItem item : itemButtons) {
|
|
if (item.hitBox(x, y)) {
|
|
itemHover = i;
|
|
break;
|
|
} else {
|
|
i++;
|
|
}
|
|
}
|
|
if (itemHover > -1) {
|
|
return itemButtons.get(itemHover).getToolTip();
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
}
|