178 lines
7.4 KiB
Scala
178 lines
7.4 KiB
Scala
package edx.electrical.multimeter
|
|
|
|
import cpw.mods.fml.relauncher.{Side, SideOnly}
|
|
import edx.core.Reference
|
|
import net.minecraft.client.renderer.texture.TextureMap
|
|
import net.minecraft.init.Blocks
|
|
import net.minecraft.item.ItemStack
|
|
import net.minecraft.util.ResourceLocation
|
|
import net.minecraftforge.client.IItemRenderer
|
|
import net.minecraftforge.common.util.ForgeDirection
|
|
import org.lwjgl.opengl.GL11
|
|
import resonant.api.items.ISimpleItemRenderer
|
|
import resonant.lib.render.RenderUtility
|
|
import resonant.lib.transform.vector.Vector3
|
|
import resonant.lib.utility.LanguageUtility
|
|
|
|
/**
|
|
* Class used to render text onto the multimeter block.
|
|
*
|
|
* The more space we have, the more information and detail we render.
|
|
*
|
|
* @author Calclavia
|
|
*
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
object RenderMultimeter extends ISimpleItemRenderer
|
|
{
|
|
private final val TEXTURE: ResourceLocation = new ResourceLocation(Reference.domain, Reference.modelPath + "multimeter.png")
|
|
|
|
def render(part: PartMultimeter, x: Double, y: Double, z: Double)
|
|
{
|
|
val dir: ForgeDirection = part.getDirection
|
|
GL11.glPushMatrix()
|
|
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5)
|
|
RenderUtility.rotateFaceBlockToSideOutwards(part.getDirection.getOpposite)
|
|
RenderUtility.bind(TextureMap.locationBlocksTexture)
|
|
RenderUtility.renderCube(-0.5, -0.05, -0.5, 0.5, 0.05, 0.5, Blocks.iron_block, RenderUtility.loadedIconMap.get(Reference.prefix + "multimeter_screen"))
|
|
val metadata: Int = 8
|
|
for (i <- 0 until 6)
|
|
{
|
|
|
|
val check: ForgeDirection = ForgeDirection.getOrientation(i)
|
|
if (!part.hasMultimeter(part.x + check.offsetX, part.y + check.offsetY, part.z + check.offsetZ))
|
|
{
|
|
if (dir.offsetX != 0)
|
|
{
|
|
if (check.offsetZ != 0)
|
|
{
|
|
if (dir.offsetX != check.offsetZ) RenderUtility.renderCube(-0.501, -0.0501, -0.501, -0.44, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
else if (dir.offsetX == check.offsetZ) RenderUtility.renderCube(0.44, -0.0501, -0.501, 0.501, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
}
|
|
else if (check.offsetY != 0)
|
|
{
|
|
if (check.offsetY > 0) RenderUtility.renderCube(-0.501, -0.0501, -0.501, 0.501, 0.0501, -0.44, Blocks.iron_block, null, metadata)
|
|
else RenderUtility.renderCube(-0.501, -0.0501, 0.44, 0.501, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
}
|
|
}
|
|
if (dir.offsetZ != 0)
|
|
{
|
|
if (check.offsetX != 0)
|
|
{
|
|
if (dir.offsetZ == check.offsetX) RenderUtility.renderCube(-0.501, -0.0501, -0.501, -0.44, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
else if (dir.offsetZ != check.offsetX) RenderUtility.renderCube(0.44, -0.0501, -0.501, 0.501, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
}
|
|
else if (check.offsetY != 0)
|
|
{
|
|
if (check.offsetY > 0) RenderUtility.renderCube(-0.501, -0.0501, -0.501, 0.501, 0.0501, -0.44, Blocks.iron_block, null, metadata)
|
|
else RenderUtility.renderCube(-0.501, -0.0501, 0.44, 0.501, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
}
|
|
}
|
|
if (dir.offsetY != 0)
|
|
{
|
|
if (check.offsetX != 0)
|
|
{
|
|
if (dir.offsetY != check.offsetX) RenderUtility.renderCube(0.44, -0.0501, -0.501, 0.501, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
else if (dir.offsetY == check.offsetX) RenderUtility.renderCube(-0.501, -0.0501, -0.501, -0.44, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
}
|
|
else if (check.offsetZ != 0)
|
|
{
|
|
if (dir.offsetY != check.offsetZ) RenderUtility.renderCube(-0.501, -0.0501, 0.44, 0.501, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
else if (dir.offsetY == check.offsetZ) RenderUtility.renderCube(-0.501, -0.0501, -0.501, 0.501, 0.0501, -0.44, Blocks.iron_block, null, metadata)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
GL11.glPopMatrix()
|
|
if (part.getGrid.isEnabled && part.isPrimary)
|
|
{
|
|
GL11.glPushMatrix()
|
|
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5)
|
|
val centerTranslation: Vector3 = part.getGrid.center - new Vector3(part.x, part.y, part.z) - 0.5
|
|
GL11.glTranslated(centerTranslation.x, centerTranslation.y, centerTranslation.z)
|
|
RenderUtility.rotateFaceBlockToSideOutwards(part.getDirection.getOpposite)
|
|
if (part.getDirection.offsetY != 0)
|
|
{
|
|
GL11.glRotatef(90, 0, 1, 0)
|
|
RenderUtility.rotateBlockBasedOnDirection(part.getFacing)
|
|
}
|
|
GL11.glTranslated(0, 0.05, 0)
|
|
|
|
var information = Seq.empty[String]
|
|
|
|
for (i <- 0 until part.getGrid.graphs.size)
|
|
{
|
|
if (part.getGrid.graphs(i).head != null && !(part.getGrid.graphs(i).head == part.getGrid.graphs(i).getDefault))
|
|
{
|
|
information :+= part.getGrid.getDisplay(i)
|
|
}
|
|
}
|
|
|
|
if (information.size <= 0) information :+= LanguageUtility.getLocal("tooltip.noInformation")
|
|
|
|
val displacement = 0.72f / information.size
|
|
val maxScale = (part.getGrid.size.x + part.getGrid.size.z).asInstanceOf[Float] * 0.004f
|
|
|
|
GL11.glTranslatef(0, 0, -displacement * (information.size / 2f))
|
|
|
|
for (i <- 0 until information.size)
|
|
{
|
|
val info = information(i)
|
|
GL11.glPushMatrix()
|
|
GL11.glTranslatef(0, 0, displacement * i)
|
|
if (dir.offsetX != 0) RenderUtility.renderText(info, (part.getGrid.size.z * 0.9f).asInstanceOf[Float], maxScale)
|
|
else if (dir.offsetY != 0) RenderUtility.renderText(info, (Math.min(part.getGrid.size.x, part.getGrid.size.z) * 0.9f).asInstanceOf[Float], maxScale)
|
|
else if (dir.offsetZ != 0) RenderUtility.renderText(info, (part.getGrid.size.x * 0.9f).asInstanceOf[Float], maxScale)
|
|
GL11.glPopMatrix()
|
|
}
|
|
GL11.glPopMatrix()
|
|
}
|
|
}
|
|
|
|
def renderInventoryItem(renderType: IItemRenderer.ItemRenderType, itemStack: ItemStack, data: AnyRef*)
|
|
{
|
|
render
|
|
}
|
|
|
|
def render()
|
|
{
|
|
GL11.glPushMatrix()
|
|
GL11.glRotatef(90, 1, 0, 0)
|
|
RenderUtility.bind(TextureMap.locationBlocksTexture)
|
|
RenderUtility.renderCube(-0.5, -0.05, -0.5, 0.5, 0.05, 0.5, Blocks.iron_block, RenderUtility.loadedIconMap.get(Reference.prefix + "multimeter_screen"))
|
|
val dir: ForgeDirection = ForgeDirection.NORTH
|
|
val metadata: Int = 8
|
|
RenderUtility.renderCube(-0.501, -0.0501, -0.501, 0.501, 0.0501, -0.44, Blocks.iron_block, null, metadata)
|
|
RenderUtility.renderCube(-0.501, -0.0501, 0.44, 0.501, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
|
|
for (i <- 0 until 6)
|
|
{
|
|
val check: ForgeDirection = ForgeDirection.getOrientation(i)
|
|
if (dir.offsetX != 0 && check.offsetZ != 0)
|
|
{
|
|
if (dir.offsetX != check.offsetZ)
|
|
{
|
|
RenderUtility.renderCube(-0.501, -0.0501, -0.501, -0.44, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
}
|
|
else if (dir.offsetX == check.offsetZ)
|
|
{
|
|
RenderUtility.renderCube(0.44, -0.0501, -0.501, 0.501, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
}
|
|
}
|
|
if (dir.offsetZ != 0 && check.offsetX != 0)
|
|
{
|
|
if (dir.offsetZ == check.offsetX)
|
|
{
|
|
RenderUtility.renderCube(-0.501, -0.0501, -0.501, -0.44, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
}
|
|
else if (dir.offsetZ != check.offsetX)
|
|
{
|
|
RenderUtility.renderCube(0.44, -0.0501, -0.501, 0.501, 0.0501, 0.501, Blocks.iron_block, null, metadata)
|
|
}
|
|
}
|
|
}
|
|
|
|
GL11.glPopMatrix()
|
|
}
|
|
} |