138 lines
4.7 KiB
Java
138 lines
4.7 KiB
Java
package net.machinemuse.general.gui.frame;
|
|
|
|
import net.machinemuse.numina.geometry.Colour;
|
|
import net.machinemuse.numina.geometry.MusePoint2D;
|
|
import net.machinemuse.numina.geometry.MuseRelativeRect;
|
|
import net.machinemuse.powersuits.client.render.modelspec.ModelRegistry;
|
|
import net.machinemuse.powersuits.client.render.modelspec.ModelSpec;
|
|
import net.minecraft.item.ItemStack;
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
import javax.annotation.Nullable;
|
|
import java.util.ArrayList;
|
|
import java.util.Collection;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Author: MachineMuse (Claire Semple)
|
|
* Created: 6:39 PM, 29/04/13
|
|
*
|
|
* Ported to Java by lehjr on 11/9/16.
|
|
*/
|
|
public class PartManipContainer extends ScrollableFrame {
|
|
public ItemSelectionFrame itemSelect;
|
|
public ColourPickerFrame colourSelect;
|
|
public MusePoint2D topleft;
|
|
public MusePoint2D bottomright;
|
|
public Integer lastItemSlot;
|
|
public int lastColour;
|
|
public int lastColourIndex;
|
|
public List<PartManipSubFrame> modelframes = new ArrayList<>();
|
|
|
|
public PartManipContainer(ItemSelectionFrame itemSelect,
|
|
ColourPickerFrame colourSelect,
|
|
MusePoint2D topleft,
|
|
MusePoint2D bottomright,
|
|
Colour borderColour,
|
|
Colour insideColour) {
|
|
super(topleft, bottomright, borderColour, insideColour);
|
|
|
|
this.itemSelect = itemSelect;
|
|
this.colourSelect = colourSelect;
|
|
this.topleft = topleft;
|
|
this.bottomright = bottomright;
|
|
this.lastItemSlot = null;
|
|
this.lastColour = this.getColour();
|
|
this.lastColourIndex = this.getColourIndex();
|
|
this.modelframes = getModelframes();
|
|
}
|
|
|
|
@Nullable
|
|
public ItemStack getItem() {
|
|
return (itemSelect.getSelectedItem() != null) ? itemSelect.getSelectedItem().getItem() : null;
|
|
}
|
|
|
|
@Nullable
|
|
public Integer getItemSlot() {
|
|
return (itemSelect.getSelectedItem() != null) ? itemSelect.getSelectedItem().inventorySlot : null;
|
|
}
|
|
|
|
public int getColour() {
|
|
if (getItem() == null)
|
|
return Colour.WHITE.getInt();
|
|
if(colourSelect.selectedColour < colourSelect.colours().length && colourSelect.selectedColour >= 0)
|
|
return colourSelect.colours()[colourSelect.selectedColour];
|
|
else
|
|
return Colour.WHITE.getInt();
|
|
}
|
|
|
|
public int getColourIndex() {
|
|
return this.colourSelect.selectedColour;
|
|
}
|
|
|
|
public List<PartManipSubFrame> getModelframes() {
|
|
List<PartManipSubFrame> modelframesList = new ArrayList<>();
|
|
Collection<ModelSpec> specCollection = ModelRegistry.getInstance().apply().values();
|
|
|
|
PartManipSubFrame prev = null;
|
|
PartManipSubFrame newframe = null;
|
|
for (ModelSpec modelspec : specCollection) {
|
|
newframe = createNewFrame(modelspec, prev);
|
|
prev = newframe;
|
|
modelframesList.add(newframe);
|
|
}
|
|
return modelframesList;
|
|
}
|
|
|
|
public PartManipSubFrame createNewFrame(ModelSpec modelspec, PartManipSubFrame prev) {
|
|
MuseRelativeRect newborder = new MuseRelativeRect(this.topleft.x() + 4, this.topleft.y() + 4, this.bottomright.x(), this.topleft.y() + 10);
|
|
newborder.setBelow((prev!= null) ? prev.border : null);
|
|
return new PartManipSubFrame(modelspec, this.colourSelect, this.itemSelect, newborder);
|
|
}
|
|
|
|
@Override
|
|
public void onMouseDown(double x, double y, int button) {
|
|
if (button == 0) {
|
|
for (PartManipSubFrame frame : modelframes) {
|
|
frame.tryMouseClick(x, y + currentscrollpixels);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void update(double mousex, double mousey) {
|
|
super.update(mousex, mousey);
|
|
if (lastItemSlot != getItemSlot()) {
|
|
lastItemSlot = getItemSlot();
|
|
colourSelect.refreshColours();
|
|
|
|
double x = 0;
|
|
for (PartManipSubFrame subframe : modelframes) {
|
|
subframe.updateItems();
|
|
x += subframe.border.bottom();
|
|
}
|
|
this.totalsize = (int) x;
|
|
}
|
|
if (colourSelect.decrAbove > -1) {
|
|
decrAbove(colourSelect.decrAbove);
|
|
this.colourSelect.decrAbove = -1;
|
|
}
|
|
}
|
|
|
|
public void decrAbove(int index) {
|
|
for(PartManipSubFrame frame : modelframes) frame.decrAbove(index);
|
|
}
|
|
|
|
@Override
|
|
public void draw() {
|
|
super.preDraw();
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0.0, (double)(-this.currentscrollpixels), 0.0);
|
|
for (PartManipSubFrame f : modelframes) {
|
|
f.drawPartial(currentscrollpixels + 4 + border.top(), this.currentscrollpixels + border.bottom() - 4);
|
|
|
|
}
|
|
GL11.glPopMatrix();
|
|
super.postDraw();
|
|
}
|
|
} |