electrodynamics/src/main/scala/resonantinduction/mechanical/mech/gearshaft/PartGearShaft.scala

86 lines
2.9 KiB
Scala

package resonantinduction.mechanical.mech.gearshaft
import java.util.{Collection, HashSet, Set}
import codechicken.lib.raytracer.IndexedCuboid6
import codechicken.lib.vec.{Cuboid6, Vector3}
import codechicken.multipart.PartMap
import cpw.mods.fml.relauncher.{Side, SideOnly}
import net.minecraft.item.ItemStack
import net.minecraftforge.common.util.ForgeDirection
import resonantinduction.mechanical.MechanicalContent
import resonantinduction.mechanical.mech.PartMechanical
/**
* We assume all the force acting on the gear is 90 degrees.
*
* @author Calclavia
*/
object PartGearShaft
{
var sides: Array[IndexedCuboid6] = new Array[IndexedCuboid6](7)
//Bound boxes for each side Sides
sides(0) = new IndexedCuboid6(0, new Cuboid6(0.36, 0.000, 0.36, 0.64, 0.36, 0.64))
sides(1) = new IndexedCuboid6(1, new Cuboid6(0.36, 0.64, 0.36, 0.64, 1.000, 0.64))
sides(2) = new IndexedCuboid6(2, new Cuboid6(0.36, 0.36, 0.000, 0.64, 0.64, 0.36))
sides(3) = new IndexedCuboid6(3, new Cuboid6(0.36, 0.36, 0.64, 0.64, 0.64, 1.000))
sides(4) = new IndexedCuboid6(4, new Cuboid6(0.000, 0.36, 0.36, 0.36, 0.64, 0.64))
sides(5) = new IndexedCuboid6(5, new Cuboid6(0.64, 0.36, 0.36, 1.000, 0.64, 0.64))
sides(6) = new IndexedCuboid6(6, new Cuboid6(0.36, 0.36, 0.36, 0.64, 0.64, 0.64))
}
class PartGearShaft extends PartMechanical
{
mechanicalNode = new GearShaftNode(this)
override def preparePlacement(side: Int, itemDamage: Int)
{
val dir: ForgeDirection = ForgeDirection.getOrientation((side ^ 1).asInstanceOf[Byte])
this.placementSide = ForgeDirection.getOrientation(if (!(dir.ordinal % 2 == 0)) dir.ordinal - 1 else dir.ordinal)
tier = itemDamage
}
protected def getItem: ItemStack = new ItemStack(MechanicalContent.itemGearShaft, 1, tier)
@SideOnly(Side.CLIENT)
override def renderDynamic(pos: Vector3, frame: Float, pass: Int)
{
if (pass == 0)
RenderGearShaft.INSTANCE.renderDynamic(this, pos.x, pos.y, pos.z, frame)
}
/**
* Multipart Bounds
*/
def getSlotMask: Int = PartMap.CENTER.mask
def getOcclusionBoxes: java.lang.Iterable[Cuboid6] = getCollisionBoxes
override def getCollisionBoxes: java.lang.Iterable[Cuboid6] =
{
val collisionBoxes: Set[Cuboid6] = new HashSet[Cuboid6]
collisionBoxes.addAll(getSubParts.asInstanceOf[Collection[_ <: Cuboid6]])
return collisionBoxes
}
override def getSubParts: java.lang.Iterable[IndexedCuboid6] =
{
val subParts: Set[IndexedCuboid6] = new HashSet[IndexedCuboid6]
val currentSides: Array[IndexedCuboid6] = PartGearShaft.sides
if (tile != null)
{
for (side <- ForgeDirection.VALID_DIRECTIONS)
{
if (side == placementSide || side == placementSide.getOpposite)
{
subParts.add(currentSides(side.ordinal))
}
}
}
subParts.add(currentSides(6))
return subParts
}
def getBounds: Cuboid6 = new Cuboid6(0.375, 0.375, 0.375, 0.625, 0.625, 0.625)
}