electrodynamics/src/main/scala/edx/electrical/circuit/component/laser/TileLaserReceiver.scala

113 lines
3.3 KiB
Scala
Raw Normal View History

2015-01-27 10:05:20 +01:00
package edx.electrical.circuit.component.laser
2014-10-25 14:31:19 +02:00
import cpw.mods.fml.client.FMLClientHandler
import cpw.mods.fml.relauncher.{Side, SideOnly}
2015-01-14 12:06:03 +01:00
import edx.core.Reference
2021-04-06 11:51:35 +02:00
import edx.electrical.Models
2014-10-25 14:31:19 +02:00
import net.minecraft.block.BlockPistonBase
import net.minecraft.block.material.Material
import net.minecraft.entity.EntityLivingBase
import net.minecraft.item.ItemStack
import net.minecraft.util.{MovingObjectPosition, ResourceLocation}
import net.minecraftforge.common.util.ForgeDirection
import org.lwjgl.opengl.GL11._
2015-01-26 12:40:32 +01:00
import resonantengine.lib.grid.energy.electric.NodeElectricComponent
2015-01-26 13:28:38 +01:00
import resonantengine.lib.modcontent.block.ResonantTile
2015-01-26 12:40:32 +01:00
import resonantengine.lib.render.RenderUtility
import resonantengine.lib.transform.vector.Vector3
import resonantengine.prefab.block.impl.{TBlockNodeProvider, TRotatable}
2014-10-25 14:31:19 +02:00
2015-01-25 09:58:35 +01:00
import scala.collection.convert.wrapAll._
2014-10-25 14:31:19 +02:00
/**
* A block that receives laser light and generates a voltage.
* @author Calclavia
*/
object TileLaserReceiver
{
2021-04-06 11:57:37 +02:00
val texture = new ResourceLocation(Reference.domain, Reference.modelPath + "laserReceiver.png")
2014-10-25 14:31:19 +02:00
}
2015-01-26 11:17:24 +01:00
class TileLaserReceiver extends ResonantTile(Material.rock) with ILaserHandler with TBlockNodeProvider with TRotatable
2014-10-25 14:31:19 +02:00
{
2015-01-25 09:58:35 +01:00
val electricNode = new NodeElectricComponent(this)
2014-10-25 14:31:19 +02:00
private var energy = 0D
domain = ""
textureName = "stone"
normalRender = false
isOpaqueCube = false
2015-01-25 09:58:35 +01:00
nodes.add(electricNode)
2014-10-25 14:31:19 +02:00
2015-01-25 09:58:35 +01:00
electricNode.dynamicTerminals = true
electricNode.setPositives(Set(ForgeDirection.NORTH, ForgeDirection.EAST))
electricNode.setNegatives(Set(ForgeDirection.SOUTH, ForgeDirection.WEST))
2014-10-25 14:31:19 +02:00
2015-01-25 09:58:35 +01:00
override def canUpdate: Boolean = false
2014-10-25 14:31:19 +02:00
override def onLaserHit(renderStart: Vector3, incident: Vector3, hit: MovingObjectPosition, color: Vector3, energy: Double): Boolean =
{
if (hit.sideHit == getDirection.ordinal)
{
2015-01-25 09:58:35 +01:00
electricNode.generatePower(energy)
2014-10-25 14:31:19 +02:00
}
return false
}
override def onPlaced(entityLiving: EntityLivingBase, itemStack: ItemStack)
{
2021-04-05 14:41:30 +02:00
val l = BlockPistonBase.determineOrientation(world, x.toInt, y.toInt, z.toInt, entityLiving)
world.setBlockMetadataWithNotify(x.toInt, y.toInt, z.toInt, l, 2)
2014-10-25 14:31:19 +02:00
}
2015-01-09 05:10:44 +01:00
2014-10-25 14:31:19 +02:00
@SideOnly(Side.CLIENT)
override def renderDynamic(pos: Vector3, frame: Float, pass: Int)
{
glPushMatrix()
glTranslated(pos.x + 0.5, pos.y + 0.5, pos.z + 0.5)
RenderUtility.enableBlending()
getDirection match
{
case ForgeDirection.UNKNOWN =>
case ForgeDirection.UP => glRotatef(-90, 1, 0, 0)
case ForgeDirection.DOWN => glRotatef(90, 1, 0, 0)
case ForgeDirection.NORTH => glRotatef(90, 0, 1, 0)
case ForgeDirection.SOUTH => glRotatef(-90, 0, 1, 0)
case ForgeDirection.WEST => glRotatef(-180, 0, 1, 0)
case ForgeDirection.EAST => glRotatef(0, 0, 1, 0)
}
if (getDirection.offsetY == 0)
glRotatef(-90, 0, 1, 0)
else
glRotatef(180, 1, 0, 0)
FMLClientHandler.instance.getClient.renderEngine.bindTexture(TileLaserReceiver.texture)
2021-04-06 11:51:35 +02:00
Models.laserreceiver.renderAll()
2014-10-25 14:31:19 +02:00
RenderUtility.disableBlending()
glPopMatrix()
}
@SideOnly(Side.CLIENT)
override def renderInventory(itemStack: ItemStack)
{
glPushMatrix()
glRotated(180, 0, 1, 0)
RenderUtility.enableBlending()
FMLClientHandler.instance.getClient.renderEngine.bindTexture(TileLaserReceiver.texture)
2021-04-06 11:51:35 +02:00
Models.laserreceiver.renderAll()
2014-10-25 14:31:19 +02:00
RenderUtility.disableBlending()
glPopMatrix()
}
}