ModularPowersuits/src/main/java/net/machinemuse/general/gui/frame/ItemModelViewFrame.java

140 lines
4.9 KiB
Java

package net.machinemuse.general.gui.frame;
import net.machinemuse.general.gui.clickable.ClickableItem;
import net.machinemuse.numina.general.MuseMathUtils;
import net.machinemuse.numina.geometry.Colour;
import net.machinemuse.numina.geometry.DrawableMuseRect;
import net.machinemuse.numina.geometry.MusePoint2D;
import net.machinemuse.powersuits.client.render.item.ArmorModel$;
import net.machinemuse.powersuits.item.ItemPowerArmor;
import net.machinemuse.utils.MuseItemUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11;
import scala.None$;
import java.util.List;
/**
* Author: MachineMuse (Claire Semple)
* Created: 12:25 PM, 5/2/13
*
* Ported to Java by lehjr on 11/2/16.
*/
public class ItemModelViewFrame implements IGuiFrame
{
private final ItemSelectionFrame itemSelector;
private final DrawableMuseRect border;
private double anchorx;
private double anchory;
private int dragging;
private double lastdWheel;
private double rotx;
private double roty;
private double offsetx;
private double offsety;
private double zoom;
public ItemModelViewFrame(final ItemSelectionFrame itemSelector, final MusePoint2D topleft, final MusePoint2D bottomright, final Colour borderColour, final Colour insideColour) {
this.itemSelector = itemSelector;
this.border = new DrawableMuseRect(topleft, bottomright, borderColour, insideColour);
this.anchorx = 0.0;
this.anchory = 0.0;
this.dragging = -1;
this.lastdWheel = 0.0;
this.rotx = 0.0;
this.roty = 0.0;
this.offsetx = 0.0;
this.offsety = 0.0;
this.zoom = 64.0;
}
public int getArmorSlot() {
return ((ItemPowerArmor)this.getSelectedItem().getItem().getItem()).armorType;
}
public ClickableItem getSelectedItem() {
return this.itemSelector.getSelectedItem();
}
public NBTTagCompound getRenderTag() {
return MuseItemUtils.getMuseRenderTag(this.getSelectedItem().getItem(), this.getArmorSlot());
}
@Override
public void onMouseDown(final double x, final double y, final int button) {
if (this.border.containsPoint(x, y)) {
this.dragging = button;
this.anchorx = x;
this.anchory = y;
}
}
@Override
public void onMouseUp(final double x, final double y, final int button) {
this.dragging = -1;
}
@Override
public void update(final double mousex, final double mousey) {
if (this.border.containsPoint(mousex, mousey)) {
final double dscroll = (this.lastdWheel - Mouse.getDWheel()) / 120;
this.zoom = (this.zoom * Math.pow(1.1, dscroll));
this.lastdWheel = Mouse.getDWheel();
}
final double dx = mousex - this.anchorx;
final double dy = mousey - this.anchory;
switch (this.dragging) {
default: {
final None$ module$ = None$.MODULE$;
break;
}
case 1: {
this.offsetx = this.offsetx + dx;
this.offsety = this.offsety + dy;
this.anchorx = mousex;
this.anchory = mousey;
break;
}
case 0: {
this.rotx = MuseMathUtils.clampDouble(this.rotx + dy, -90.0, 90.0);
this.roty = this.roty - dx;
this.anchorx = mousex;
this.anchory = mousey;
break;
}
case -1: {
final None$ module$2 = None$.MODULE$;
break;
}
}
}
@Override
public void draw() {
final Minecraft mc = Minecraft.getMinecraft();
this.border.draw();
if (this.itemSelector.getSelectedItem() != null && this.getSelectedItem().getItem().getItem() instanceof ItemPowerArmor) {
GL11.glPushMatrix();
ArmorModel$.MODULE$.instance().renderSpec_$eq(MuseItemUtils.getMuseRenderTag(this.getSelectedItem().getItem(), this.getArmorSlot()));
ArmorModel$.MODULE$.instance().visibleSection_$eq(this.getArmorSlot());
GL11.glTranslated(this.border.centerx() + this.offsetx, this.border.centery() + this.offsety, 0.0);
GL11.glScaled(this.zoom, this.zoom, this.zoom);
GL11.glClear(256);
GL11.glDisable(2884);
GL11.glRotatef((float)this.rotx, 1.0f, 0.0f, 0.0f);
GL11.glRotatef((float)this.roty, 0.0f, 1.0f, 0.0f);
GL11.glTranslated(0.0, -this.getArmorSlot() / 2.0, 0.0);
((ModelBiped)ArmorModel$.MODULE$.instance()).render((Entity)mc.thePlayer, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0625f);
GL11.glPopMatrix();
}
}
@Override
public List<String> getToolTip(final int x, final int y) {
return null;
}
}