From 27739bb8279d7b1cad96fd8ad6e30928d4f469f2 Mon Sep 17 00:00:00 2001 From: Johannes Lohrer Date: Sun, 24 Nov 2013 13:18:43 +0100 Subject: [PATCH 1/2] keyboard test --- .../textures/blocks/keyboard.png | Bin 0 -> 189 bytes li/cil/oc/Config.scala | 1 + li/cil/oc/client/Proxy.scala | 11 +- .../tileentity/KeyboardRenderer.scala | 106 ++++++++++++++++++ li/cil/oc/common/block/Keyboard.scala | 12 ++ 5 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 assets/opencomputers/textures/blocks/keyboard.png create mode 100644 li/cil/oc/client/renderer/tileentity/KeyboardRenderer.scala diff --git a/assets/opencomputers/textures/blocks/keyboard.png b/assets/opencomputers/textures/blocks/keyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..7439dde2344d5248318ee42514c5b88a7871dec0 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1quc!5~i;#}Etuy?xPK2NZZ%ia*Qfv1jv2e`u6m z8uVP5@6n1+0wJbro;xM92(^5@(D2bzpwLt8i0tV}o(*ejb|pj_vAsD})|53{hUMwq g7K< CommonProxy} import net.minecraftforge.common.MinecraftForge @@ -20,9 +20,12 @@ private[oc] class Proxy extends CommonProxy { ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.Screen], ScreenRenderer) ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.Computer], ComputerRenderer) ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.PowerDistributor], PowerDistributorRenderer) - + //ClientRegistry.bindTileEntitySpecialRenderer(classOf[tileentity.Keyboard], KeyboardRenderer) + // RenderingRegistry.registerBlockHandler() TickRegistry.registerTickHandler(ScreenRenderer, Side.CLIENT) + Config.blockRenderId =RenderingRegistry.getNextAvailableRenderId + RenderingRegistry.registerBlockHandler(KeyboardRenderer) MinecraftForge.EVENT_BUS.register(gui.Icons) } } \ No newline at end of file diff --git a/li/cil/oc/client/renderer/tileentity/KeyboardRenderer.scala b/li/cil/oc/client/renderer/tileentity/KeyboardRenderer.scala new file mode 100644 index 000000000..50073c7cc --- /dev/null +++ b/li/cil/oc/client/renderer/tileentity/KeyboardRenderer.scala @@ -0,0 +1,106 @@ +package li.cil.oc.client.renderer.tileentity + +import net.minecraft.util.ResourceLocation +import li.cil.oc.Config +import net.minecraft.tileentity.TileEntity +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.{RenderBlocks, Tessellator} +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler +import net.minecraft.block.Block +import net.minecraft.world.IBlockAccess + + +object KeyboardRenderer extends ISimpleBlockRenderingHandler { + + private val frontOn = new ResourceLocation(Config.resourceDomain, "textures/blocks/computer_front.png") + + override def renderInventoryBlock(block: Block, metadata: Int, modelID: Int, renderer: RenderBlocks) { + + } + + override def renderWorldBlock(world: IBlockAccess, x: Int, y: Int, z: Int, block: Block, modelId: Int, renderer: RenderBlocks): Boolean = { +// +// +// // dont create them here, create them in your constructor and save a reference as a member variable please +// val tessellator = Tessellator.instance; +// +// +// +// +// if (this.hasOverrideBlockTexture) { +// icon = this.overrideBlockTexture +// } +// +// +// +// val d5: Double = icon.getMinU.asInstanceOf[Double] +// val d6: Double = icon.getMinV.asInstanceOf[Double] +// val d7: Double = icon.getMaxU.asInstanceOf[Double] +// val d8: Double = icon.getMaxV.asInstanceOf[Double] +// val d9: Double = icon.getInterpolatedU(7.0D).asInstanceOf[Double] +// val d10: Double = icon.getInterpolatedV(6.0D).asInstanceOf[Double] +// val d11: Double = icon.getInterpolatedU(9.0D).asInstanceOf[Double] +// val d12: Double = icon.getInterpolatedV(8.0D).asInstanceOf[Double] +// val d13: Double = icon.getInterpolatedU(7.0D).asInstanceOf[Double] +// val d14: Double = icon.getInterpolatedV(13.0D).asInstanceOf[Double] +// val d15: Double = icon.getInterpolatedU(9.0D).asInstanceOf[Double] +// val d16: Double = icon.getInterpolatedV(15.0D).asInstanceOf[Double] +// tessellator.setBrightness(par1Block.getMixedBrightnessForBlock(renderer.blockAccess, x, y, z)) +// tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F) +// +// //+1 so that our "drawing" appears 1 block over our block (to get a better view) +// // tessellator.startDrawingQuads() +// //back +// tessellator.addVertexWithUV(0, 0, 0, 0, 0) +// tessellator.addVertexWithUV(0, 1, 0, 0, 1) +// tessellator.addVertexWithUV(1, 1, 0, 1, 1) +// tessellator.addVertexWithUV(1, 0, 0, 1, 0) +// +// +// //front +// tessellator.addVertexWithUV(0, 0, 0.5, 0, 0) +// tessellator.addVertexWithUV(1, 0, 0.5, 1, 0) +// tessellator.addVertexWithUV(1, 1, 0.5, 1, 1) +// tessellator.addVertexWithUV(0, 1, 0.5, 0, 1) +// +// //top +// tessellator.addVertexWithUV(0, 1, 0.5, 0, 0) +// tessellator.addVertexWithUV(1, 1, 0.5, 1, 0) +// tessellator.addVertexWithUV(1, 1, 0, 1, 1) +// tessellator.addVertexWithUV(0, 1, 0, 0, 1) +// +// //bottom +// tessellator.addVertexWithUV(0, 0, 0, 0, 1) +// tessellator.addVertexWithUV(1, 0, 0, 1, 1) +// tessellator.addVertexWithUV(1, 0, 0.5, 1, 0) +// tessellator.addVertexWithUV(0, 0, 0.5, 0, 0) +// +// +// //left +// tessellator.addVertexWithUV(0, 0, 0.5, 0, 0) +// tessellator.addVertexWithUV(0, 1, 0.5, 1, 0) +// tessellator.addVertexWithUV(0, 1, 0, 1, 1) +// tessellator.addVertexWithUV(0, 0, 0, 0, 1) +// +// //right +// tessellator.addVertexWithUV(1, 0, 0.5, 0, 0) +// tessellator.addVertexWithUV(1, 0, 0, 0, 1) +// tessellator.addVertexWithUV(1, 1, 0, 1, 1) +// tessellator.addVertexWithUV(1, 1, 0.5, 1, 0) +// +// +// //tessellator.draw() +// + true + } + + override def shouldRender3DInInventory = false + + def getRenderId: Int = Config.blockRenderId + + + def renderTileEntityAt(tileEntity: TileEntity, x: Double, y: Double, z: Double, f: Float) = { + + } + +} diff --git a/li/cil/oc/common/block/Keyboard.scala b/li/cil/oc/common/block/Keyboard.scala index 93c53464c..7e3da89e0 100644 --- a/li/cil/oc/common/block/Keyboard.scala +++ b/li/cil/oc/common/block/Keyboard.scala @@ -3,13 +3,25 @@ package li.cil.oc.common.block import cpw.mods.fml.common.registry.GameRegistry import li.cil.oc.common.tileentity import net.minecraft.world.World +import li.cil.oc.Config +import net.minecraftforge.common.ForgeDirection +import net.minecraft.client.renderer.texture.IconRegister +import net.minecraft.util.Icon class Keyboard(val parent: SpecialDelegator) extends SpecialDelegate { GameRegistry.registerTileEntity(classOf[tileentity.Keyboard], "oc.keyboard") val unlocalizedName = "Keyboard" + var icon:Icon = null + override def icon(side: ForgeDirection) = Some(icon) + override def registerIcons(iconRegister: IconRegister) = { + icon = iconRegister.registerIcon(Config.resourceDomain + ":keyboard") + + } override def hasTileEntity = true override def createTileEntity(world: World) = Some(new tileentity.Keyboard) + + } \ No newline at end of file From 1e3a14a0f9fc5a32d09230d823e652ae70862e24 Mon Sep 17 00:00:00 2001 From: Johannes Lohrer Date: Sun, 24 Nov 2013 15:35:32 +0100 Subject: [PATCH 2/2] keyboard rendering --- .../textures/blocks/keyboard.png | Bin 189 -> 188 bytes .../client/renderer/block/BlockRenderer.scala | 46 +++++++++++++++++- li/cil/oc/common/block/Keyboard.scala | 3 +- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/assets/opencomputers/textures/blocks/keyboard.png b/assets/opencomputers/textures/blocks/keyboard.png index 7439dde2344d5248318ee42514c5b88a7871dec0..3a8b7efd2f00f8bbfb74313dc2e0ba58ab7938e2 100644 GIT binary patch delta 139 zcmdnXxQB6q%0xqn`hyG%d-L15RjOeSEA?V8lq5U ztY@lcXz2dg$sDN4!qdeu#KJ$>!beHsq?Ck&1CNbL3uBVA#vg{=Y#jn>oQVoI1i0)E rEMh!#+*OIW#Lm&+i>Ztq55puWv73C87M}*1!QkoY=d#Wzfw2hy!(l2C delta 137 zcmV;40CxYp0lfi`Bnkm@Qb$4nuFf3kks%v&!vFvd!vV){sAK>D08&XrK~y+Ty^dQ7 zz#t3+bMqW72Wt%*@PQkpQs*NM;;8ZvR5h&ULSTdvg!RyX@ih=}NhZV{%aTcet$ey* rSuzIf%65Wkn;Zn?-Gn&w|Ch{O_XZxk==U1`00000NkvXXu0mjf03bL5 diff --git a/li/cil/oc/client/renderer/block/BlockRenderer.scala b/li/cil/oc/client/renderer/block/BlockRenderer.scala index 90c4e2490..70df06471 100644 --- a/li/cil/oc/client/renderer/block/BlockRenderer.scala +++ b/li/cil/oc/client/renderer/block/BlockRenderer.scala @@ -9,6 +9,8 @@ import net.minecraft.util.Icon import net.minecraft.world.IBlockAccess import net.minecraftforge.common.ForgeDirection import org.lwjgl.opengl.GL11 +import li.cil.oc.common.tileentity + object BlockRenderer extends ISimpleBlockRenderingHandler { var getRenderId = -1 @@ -23,7 +25,7 @@ object BlockRenderer extends ISimpleBlockRenderingHandler { GL11.glTranslatef(-0.5f, -0.5f, -0.5f) CableRenderer.renderCable(ForgeDirection.DOWN.flag) GL11.glTranslatef(0.5f, 0.5f, 0.5f) - // case Some(keyboard: Keyboard) => + case Some(proxy: RobotProxy) => GL11.glTranslatef(0, -0.1f, 0) GL11.glScalef(1.5f, 1.5f, 1.5f) @@ -51,5 +53,45 @@ object BlockRenderer extends ISimpleBlockRenderingHandler { } } - def renderWorldBlock(world: IBlockAccess, x: Int, y: Int, z: Int, block: Block, modelId: Int, renderer: RenderBlocks) = renderer.renderStandardBlock(block, x, y, z) + def renderWorldBlock(world: IBlockAccess, x: Int, y: Int, z: Int, block: Block, modelId: Int, renderer: RenderBlocks) = { + + Delegator.subBlock(block, world.getBlockMetadata(x, y, z)) match { + case Some(keyboard: Keyboard) => + world.getBlockTileEntity(x, y, z) match { + case teK: tileentity.Keyboard => + if (teK.facing == ForgeDirection.UP || teK.facing == ForgeDirection.DOWN) { + teK.yaw match { + case ForgeDirection.NORTH => + renderer.uvRotateTop = 0 + renderer.uvRotateBottom = 0 + case ForgeDirection.EAST => + renderer.uvRotateTop = 1 + renderer.uvRotateBottom = 2 + + case ForgeDirection.SOUTH => + renderer.uvRotateTop = 3 + renderer.uvRotateBottom = 3 + case ForgeDirection.WEST => + renderer.uvRotateTop = 2 + renderer.uvRotateBottom = 1 + case _ => + + } + if (teK.facing == ForgeDirection.DOWN) { + renderer.flipTexture = true + } + // + } + val ret = renderer.renderStandardBlock(block, x, y, z) + renderer.uvRotateTop = 0 + renderer.uvRotateBottom = 0 + renderer.flipTexture = false + ret + case _ => + true + } + case _ => renderer.renderStandardBlock(block, x, y, z) + } + + } } diff --git a/li/cil/oc/common/block/Keyboard.scala b/li/cil/oc/common/block/Keyboard.scala index 7996bc20c..d4e3ba0d6 100644 --- a/li/cil/oc/common/block/Keyboard.scala +++ b/li/cil/oc/common/block/Keyboard.scala @@ -19,10 +19,9 @@ class Keyboard(val parent: SpecialDelegator) extends SpecialDelegate { override def registerIcons(iconRegister: IconRegister) = { icon = iconRegister.registerIcon(Config.resourceDomain + ":keyboard") - } - override def shouldSideBeRendered(world: IBlockAccess, x: Int, y: Int, z: Int, side: ForgeDirection) = false + //override def shouldSideBeRendered(world: IBlockAccess, x: Int, y: Int, z: Int, side: ForgeDirection) = false override def hasTileEntity = true