ModularPowersuits/src/main/scala/net/machinemuse/general/gui/frame/PartManipContainer.scala

78 lines
2.7 KiB
Scala

package net.machinemuse.general.gui.frame
import net.machinemuse.numina.geometry.{Colour, MusePoint2D, MuseRelativeRect}
import net.machinemuse.powersuits.client.render.modelspec.{ModelRegistry, ModelSpec}
import org.lwjgl.opengl.GL11._
/**
* Author: MachineMuse (Claire Semple)
* Created: 6:39 PM, 29/04/13
*/
class PartManipContainer(val itemSelect: ItemSelectionFrame, val colourSelect: ColourPickerFrame, topleft: MusePoint2D, bottomright: MusePoint2D, borderColour: Colour, insideColour: Colour)
extends ScrollableFrame(topleft, bottomright, borderColour, insideColour) {
def getItem = Option(itemSelect.getSelectedItem).map(e => e.getItem)
def getItemSlot = Option(itemSelect.getSelectedItem).map(e => e.inventorySlot)
var lastItemSlot: Option[Int] = None
def getColour = if(getItem != None && colourSelect.selectedColour < colourSelect.colours.size && colourSelect.selectedColour >= 0) colourSelect.colours(colourSelect.selectedColour) else Colour.WHITE.getInt
var lastColour = getColour
def getColourIndex = colourSelect.selectedColour
var lastColourIndex = getColourIndex
val modelframes: Seq[PartManipSubFrame] =
((Seq.empty[PartManipSubFrame], None: Option[PartManipSubFrame]) /: ModelRegistry.apply.values) {
case ((frameseq, prev), modelspec: ModelSpec) => {
val newframe = createNewFrame(modelspec, prev)
(frameseq :+ newframe, Some(newframe))
}
}._1
def createNewFrame(modelspec: ModelSpec, prev: Option[PartManipSubFrame]) = {
val newborder = new MuseRelativeRect(topleft.x + 4, topleft.y + 4, bottomright.x, topleft.y + 10)
newborder.setBelow(prev.map(e => e.border) getOrElse null)
new PartManipSubFrame(modelspec, colourSelect, itemSelect, newborder)
}
override def onMouseDown(x: Double, y: Double, button: Int) {
if (button == 0) {
for (frame <- modelframes) {
frame.tryMouseClick(x, y + currentscrollpixels)
}
}
}
override def update(mousex: Double, mousey: Double) {
super.update(mousex, mousey)
if (lastItemSlot != getItemSlot) {
lastItemSlot = getItemSlot
colourSelect.refreshColours()
this.totalsize = (0.0 /: modelframes) {
(acc, subframe) => subframe.updateItems(); subframe.border.bottom()
}.toInt
}
if(colourSelect.decrAbove > -1) {
decrAbove(colourSelect.decrAbove)
colourSelect.decrAbove = -1
}
}
def decrAbove(index:Int) {for(frame<-modelframes) frame.decrAbove(index)}
override def draw() {
super.preDraw()
glPushMatrix()
glTranslated(0, -currentscrollpixels, 0)
for (f <- modelframes) {
f.drawPartial(currentscrollpixels + 4 + border.top, this.currentscrollpixels + border.bottom - 4)
}
glPopMatrix()
super.postDraw()
}
}