62 lines
2.7 KiB
Scala
62 lines
2.7 KiB
Scala
package edx.mechanical.mech.process.crusher
|
|
|
|
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
|
import edx.core.Reference
|
|
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer
|
|
import net.minecraft.tileentity.TileEntity
|
|
import net.minecraft.util.ResourceLocation
|
|
import net.minecraftforge.client.model.{AdvancedModelLoader, IModelCustom}
|
|
import net.minecraftforge.common.util.ForgeDirection
|
|
import org.apache.commons.lang3.ArrayUtils
|
|
import org.lwjgl.opengl.GL11
|
|
import resonantengine.lib.render.RenderUtility
|
|
|
|
@SideOnly(Side.CLIENT) object RenderMechanicalPiston
|
|
{
|
|
final val MODEL: IModelCustom = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.domain, Reference.modelPath + "piston/mechanicalPiston.tcn"))
|
|
var TEXTURE: ResourceLocation = new ResourceLocation(Reference.domain, Reference.modelPath + "piston/mechanicalPiston_iron.png")
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT) class RenderMechanicalPiston extends TileEntitySpecialRenderer
|
|
{
|
|
private[crusher] final val staticParts: Array[String] = Array("baseRing", "leg1", "leg2", "leg3", "leg4", "connector", "basePlate", "basePlateTop", "connectorBar", "centerPiston")
|
|
private[crusher] final val shaftParts: Array[String] = Array("topPlate", "outerPiston")
|
|
|
|
def renderTileEntityAt(tileEntity: TileEntity, x: Double, y: Double, z: Double, f: Float)
|
|
{
|
|
GL11.glPushMatrix
|
|
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5)
|
|
val tile: TileMechanicalPiston = tileEntity.asInstanceOf[TileMechanicalPiston]
|
|
GL11.glRotated(-90, 0, 1, 0)
|
|
GL11.glRotated(180, 0, 0, 1)
|
|
if (tile.getWorldObj != null)
|
|
{
|
|
if (tile.getDirection == ForgeDirection.NORTH || tile.getDirection == ForgeDirection.SOUTH) RenderUtility.rotateBlockBasedOnDirection(tile.getDirection.getOpposite)
|
|
else RenderUtility.rotateBlockBasedOnDirection(tile.getDirection)
|
|
}
|
|
RenderUtility.bind(RenderMechanicalPiston.TEXTURE)
|
|
val angle: Double = tile.mechanicalNode.angle
|
|
GL11.glPushMatrix
|
|
GL11.glRotated(-Math.toDegrees(angle), 0, 0, 1)
|
|
RenderMechanicalPiston.MODEL.renderAllExcept(ArrayUtils.addAll(shaftParts, staticParts: _*): _*)
|
|
GL11.glPopMatrix
|
|
GL11.glPushMatrix
|
|
if (tile.getWorldObj != null)
|
|
{
|
|
val dir: ForgeDirection = tile.getDirection
|
|
if (tile.world.isAirBlock((tile.x + dir.offsetX).toInt, (tile.y + dir.offsetY).toInt, (tile.z + dir.offsetZ).toInt))
|
|
{
|
|
GL11.glTranslated(0, 0, (0.4 * Math.sin(angle)) - 0.5)
|
|
}
|
|
else
|
|
{
|
|
GL11.glTranslated(0, 0, (0.06 * Math.sin(angle)) - 0.03)
|
|
}
|
|
}
|
|
RenderMechanicalPiston.MODEL.renderOnly(shaftParts: _*)
|
|
GL11.glPopMatrix
|
|
RenderMechanicalPiston.MODEL.renderOnly(staticParts: _*)
|
|
GL11.glPopMatrix
|
|
}
|
|
}
|