mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-13 09:18:05 -04:00
Renderer to indicate block held MFU is bound to (and the face).
This commit is contained in:
parent
330745055f
commit
a84b557e93
@ -12,6 +12,7 @@ import li.cil.oc.Settings
|
|||||||
import li.cil.oc.api
|
import li.cil.oc.api
|
||||||
import li.cil.oc.client
|
import li.cil.oc.client
|
||||||
import li.cil.oc.client.renderer.HighlightRenderer
|
import li.cil.oc.client.renderer.HighlightRenderer
|
||||||
|
import li.cil.oc.client.renderer.MFUTargetRenderer
|
||||||
import li.cil.oc.client.renderer.PetRenderer
|
import li.cil.oc.client.renderer.PetRenderer
|
||||||
import li.cil.oc.client.renderer.TextBufferRenderCache
|
import li.cil.oc.client.renderer.TextBufferRenderCache
|
||||||
import li.cil.oc.client.renderer.WirelessNetworkDebugRenderer
|
import li.cil.oc.client.renderer.WirelessNetworkDebugRenderer
|
||||||
@ -87,6 +88,7 @@ private[oc] class Proxy extends CommonProxy {
|
|||||||
MinecraftForge.EVENT_BUS.register(RackMountableRenderHandler)
|
MinecraftForge.EVENT_BUS.register(RackMountableRenderHandler)
|
||||||
MinecraftForge.EVENT_BUS.register(Sound)
|
MinecraftForge.EVENT_BUS.register(Sound)
|
||||||
MinecraftForge.EVENT_BUS.register(TextBuffer)
|
MinecraftForge.EVENT_BUS.register(TextBuffer)
|
||||||
|
MinecraftForge.EVENT_BUS.register(MFUTargetRenderer)
|
||||||
MinecraftForge.EVENT_BUS.register(WirelessNetworkDebugRenderer)
|
MinecraftForge.EVENT_BUS.register(WirelessNetworkDebugRenderer)
|
||||||
|
|
||||||
NetworkRegistry.INSTANCE.registerGuiHandler(OpenComputers, GuiHandler)
|
NetworkRegistry.INSTANCE.registerGuiHandler(OpenComputers, GuiHandler)
|
||||||
|
155
src/main/scala/li/cil/oc/client/renderer/MFUTargetRenderer.scala
Normal file
155
src/main/scala/li/cil/oc/client/renderer/MFUTargetRenderer.scala
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
package li.cil.oc.client.renderer
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.eventhandler.SubscribeEvent
|
||||||
|
import li.cil.oc.Constants
|
||||||
|
import li.cil.oc.Settings
|
||||||
|
import li.cil.oc.api
|
||||||
|
import li.cil.oc.util.BlockPosition
|
||||||
|
import li.cil.oc.util.RenderState
|
||||||
|
import net.minecraft.client.Minecraft
|
||||||
|
import net.minecraft.item.ItemStack
|
||||||
|
import net.minecraftforge.client.event.RenderWorldLastEvent
|
||||||
|
import net.minecraftforge.common.util.Constants.NBT
|
||||||
|
import org.lwjgl.opengl.GL11
|
||||||
|
|
||||||
|
object MFUTargetRenderer {
|
||||||
|
private val color = 0x00FF00
|
||||||
|
private lazy val mfu = api.Items.get(Constants.ItemName.MFU)
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
def onRenderWorldLastEvent(e: RenderWorldLastEvent) {
|
||||||
|
val mc = Minecraft.getMinecraft
|
||||||
|
val player = mc.thePlayer
|
||||||
|
if (player == null) return
|
||||||
|
player.getHeldItem match {
|
||||||
|
case stack: ItemStack if api.Items.get(stack) == mfu && stack.hasTagCompound =>
|
||||||
|
val data = stack.getTagCompound
|
||||||
|
if (data.hasKey(Settings.namespace + "coord", NBT.TAG_INT_ARRAY)) {
|
||||||
|
val Array(x, y, z, dimension, side) = data.getIntArray(Settings.namespace + "coord")
|
||||||
|
if (player.getEntityWorld.provider.dimensionId != dimension) return
|
||||||
|
if (player.getDistance(x, y, z) > 64) return
|
||||||
|
|
||||||
|
val bounds = BlockPosition(x, y, z).bounds.expand(0.1, 0.1, 0.1)
|
||||||
|
|
||||||
|
val px = player.lastTickPosX + (player.posX - player.lastTickPosX) * e.partialTicks
|
||||||
|
val py = player.lastTickPosY + (player.posY - player.lastTickPosY) * e.partialTicks
|
||||||
|
val pz = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * e.partialTicks
|
||||||
|
|
||||||
|
RenderState.checkError(getClass.getName + ".onRenderWorldLastEvent: entering (aka: wasntme)")
|
||||||
|
|
||||||
|
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS)
|
||||||
|
GL11.glPushMatrix()
|
||||||
|
GL11.glTranslated(-px, -py, -pz)
|
||||||
|
RenderState.makeItBlend()
|
||||||
|
GL11.glDisable(GL11.GL_LIGHTING)
|
||||||
|
GL11.glDisable(GL11.GL_TEXTURE_2D)
|
||||||
|
GL11.glDisable(GL11.GL_DEPTH_TEST)
|
||||||
|
GL11.glDisable(GL11.GL_CULL_FACE)
|
||||||
|
|
||||||
|
GL11.glColor4f(
|
||||||
|
((color >> 16) & 0xFF) / 255f,
|
||||||
|
((color >> 8) & 0xFF) / 255f,
|
||||||
|
((color >> 0) & 0xFF) / 255f,
|
||||||
|
0.25f)
|
||||||
|
GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE)
|
||||||
|
drawBox(bounds.minX, bounds.minY, bounds.minZ, bounds.maxX, bounds.maxY, bounds.maxZ)
|
||||||
|
GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL)
|
||||||
|
drawFace(bounds.minX, bounds.minY, bounds.minZ, bounds.maxX, bounds.maxY, bounds.maxZ, side)
|
||||||
|
|
||||||
|
GL11.glPopMatrix()
|
||||||
|
GL11.glPopAttrib()
|
||||||
|
|
||||||
|
RenderState.checkError(getClass.getName + ".onRenderWorldLastEvent: leaving")
|
||||||
|
}
|
||||||
|
case _ => // Nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private def drawBox(minX: Double, minY: Double, minZ: Double, maxX: Double, maxY: Double, maxZ: Double) {
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(minX, minY, minZ)
|
||||||
|
GL11.glVertex3d(minX, minY, maxZ)
|
||||||
|
GL11.glVertex3d(maxX, minY, maxZ)
|
||||||
|
GL11.glVertex3d(maxX, minY, minZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(minX, minY, minZ)
|
||||||
|
GL11.glVertex3d(maxX, minY, minZ)
|
||||||
|
GL11.glVertex3d(maxX, maxY, minZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, minZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(maxX, maxY, minZ)
|
||||||
|
GL11.glVertex3d(maxX, maxY, maxZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, maxZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, minZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(maxX, maxY, maxZ)
|
||||||
|
GL11.glVertex3d(maxX, minY, maxZ)
|
||||||
|
GL11.glVertex3d(minX, minY, maxZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, maxZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(minX, minY, minZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, minZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, maxZ)
|
||||||
|
GL11.glVertex3d(minX, minY, maxZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(maxX, minY, minZ)
|
||||||
|
GL11.glVertex3d(maxX, minY, maxZ)
|
||||||
|
GL11.glVertex3d(maxX, maxY, maxZ)
|
||||||
|
GL11.glVertex3d(maxX, maxY, minZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
}
|
||||||
|
|
||||||
|
private def drawFace(minX: Double, minY: Double, minZ: Double, maxX: Double, maxY: Double, maxZ: Double, side: Int): Unit = {
|
||||||
|
side match {
|
||||||
|
case 0 => // Down
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(minX, minY, minZ)
|
||||||
|
GL11.glVertex3d(minX, minY, maxZ)
|
||||||
|
GL11.glVertex3d(maxX, minY, maxZ)
|
||||||
|
GL11.glVertex3d(maxX, minY, minZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
case 1 => // Up
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(maxX, maxY, minZ)
|
||||||
|
GL11.glVertex3d(maxX, maxY, maxZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, maxZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, minZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
case 2 => // North
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(minX, minY, minZ)
|
||||||
|
GL11.glVertex3d(maxX, minY, minZ)
|
||||||
|
GL11.glVertex3d(maxX, maxY, minZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, minZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
case 3 => // South
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(maxX, maxY, maxZ)
|
||||||
|
GL11.glVertex3d(maxX, minY, maxZ)
|
||||||
|
GL11.glVertex3d(minX, minY, maxZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, maxZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
case 4 => // East
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(minX, minY, minZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, minZ)
|
||||||
|
GL11.glVertex3d(minX, maxY, maxZ)
|
||||||
|
GL11.glVertex3d(minX, minY, maxZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
case 5 => // West
|
||||||
|
GL11.glBegin(GL11.GL_QUADS)
|
||||||
|
GL11.glVertex3d(maxX, minY, minZ)
|
||||||
|
GL11.glVertex3d(maxX, minY, maxZ)
|
||||||
|
GL11.glVertex3d(maxX, maxY, maxZ)
|
||||||
|
GL11.glVertex3d(maxX, maxY, minZ)
|
||||||
|
GL11.glEnd()
|
||||||
|
case _ => // WTF?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user