electrodynamics/src/main/scala/edx/electrical/circuit/source/TileThermopile.scala

124 lines
3.4 KiB
Scala
Raw Normal View History

2015-01-27 10:05:20 +01:00
package edx.electrical.circuit.source
2014-08-06 13:57:45 +02:00
2015-01-14 12:06:03 +01:00
import cpw.mods.fml.relauncher.{Side, SideOnly}
import edx.core.Reference
2014-08-06 13:57:45 +02:00
import net.minecraft.block.material.Material
import net.minecraft.client.renderer.texture.IIconRegister
import net.minecraft.init.Blocks
import net.minecraft.util.IIcon
import net.minecraftforge.common.util.ForgeDirection
2015-01-26 12:40:32 +01:00
import resonantengine.lib.content.prefab.TIO
import resonantengine.lib.grid.energy.electric.NodeElectricComponent
2015-01-26 13:28:38 +01:00
import resonantengine.lib.modcontent.block.{ResonantBlock, ResonantTile}
import resonantengine.prefab.block.impl.TBlockNodeProvider
2014-08-06 13:57:45 +02:00
2015-01-23 16:23:46 +01:00
import scala.collection.convert.wrapAll._
2014-08-06 13:57:45 +02:00
2015-01-26 11:17:24 +01:00
class TileThermopile extends ResonantTile(Material.rock) with TBlockNodeProvider with TIO
2015-01-23 16:23:46 +01:00
{
2015-01-14 12:06:03 +01:00
/**
* The amount of ticks the thermopile will use the temperature differences before turning all
* adjacent sides to thermal equilibrium.
*/
2015-01-23 16:23:46 +01:00
private val maxTicks = 120 * 20
2015-01-26 11:13:56 +01:00
private val electricNode = new NodeElectricComponent(this)
2015-01-23 16:23:46 +01:00
private var ticksUsed = 0
2015-01-14 12:06:03 +01:00
2015-01-23 16:23:46 +01:00
ioMap = 728
nodes.add(electricNode)
electricNode.dynamicTerminals = true
2015-01-24 10:38:01 +01:00
electricNode.setPositives(Set(ForgeDirection.NORTH, ForgeDirection.EAST))
electricNode.setNegatives(Set(ForgeDirection.SOUTH, ForgeDirection.WEST))
2015-01-23 16:23:46 +01:00
override def update()
2015-01-14 12:06:03 +01:00
{
2015-01-23 16:23:46 +01:00
super.update()
if (!world.isRemote)
2015-01-14 12:06:03 +01:00
{
2015-01-23 16:23:46 +01:00
var heatSources = 0
var coolingSources = 0
2015-01-14 12:06:03 +01:00
for (dir <- ForgeDirection.VALID_DIRECTIONS)
{
2021-04-05 14:41:30 +02:00
val checkPos = toVectorWorld + dir
2015-01-23 16:23:46 +01:00
val block = checkPos.getBlock
if (block == Blocks.water || block == Blocks.flowing_water)
2015-01-14 12:06:03 +01:00
{
2014-08-06 13:57:45 +02:00
coolingSources += 1
}
2015-01-23 16:23:46 +01:00
else if (block == Blocks.snow)
2015-01-14 12:06:03 +01:00
{
2014-08-06 13:57:45 +02:00
coolingSources += 2
}
2015-01-23 16:23:46 +01:00
else if (block == Blocks.ice)
2015-01-14 12:06:03 +01:00
{
2014-08-06 13:57:45 +02:00
coolingSources += 2
}
2015-01-23 16:23:46 +01:00
else if (block == Blocks.fire)
2015-01-14 12:06:03 +01:00
{
2014-08-06 13:57:45 +02:00
heatSources += 1
}
2015-01-23 16:23:46 +01:00
else if (block == Blocks.lava || block == Blocks.flowing_lava)
2015-01-14 12:06:03 +01:00
{
2014-08-06 13:57:45 +02:00
heatSources += 2
}
}
2015-01-23 16:23:46 +01:00
val multiplier = 3 - Math.abs(heatSources - coolingSources)
2015-01-14 12:06:03 +01:00
if (multiplier > 0 && coolingSources > 0 && heatSources > 0)
{
2015-01-23 16:23:46 +01:00
electricNode.generateVoltage(0.1 * multiplier)
ticksUsed += 1
if (ticksUsed >= maxTicks)
2015-01-14 12:06:03 +01:00
{
for (dir <- ForgeDirection.VALID_DIRECTIONS)
{
2021-04-05 14:41:30 +02:00
val checkPos = toVectorWorld.add(dir)
2015-01-23 16:23:46 +01:00
val block = checkPos.getBlock(worldObj)
if (block == Blocks.water || block == Blocks.flowing_water)
2015-01-14 12:06:03 +01:00
{
2014-08-06 13:57:45 +02:00
checkPos.setBlockToAir(worldObj)
}
2015-01-23 16:23:46 +01:00
else if (block == Blocks.ice)
2015-01-14 12:06:03 +01:00
{
2014-08-06 13:57:45 +02:00
checkPos.setBlock(worldObj, Blocks.water)
}
2015-01-23 16:23:46 +01:00
else if (block == Blocks.fire)
2015-01-14 12:06:03 +01:00
{
2014-08-06 13:57:45 +02:00
checkPos.setBlockToAir(worldObj)
}
2015-01-23 16:23:46 +01:00
else if (block == Blocks.lava || block == Blocks.flowing_lava)
2015-01-14 12:06:03 +01:00
{
2014-08-06 13:57:45 +02:00
checkPos.setBlock(worldObj, Blocks.stone)
}
}
2015-01-23 16:23:46 +01:00
ticksUsed = 0
2014-08-06 13:57:45 +02:00
}
}
}
}
2015-01-23 16:23:46 +01:00
@SideOnly(Side.CLIENT)
override def registerIcons(iconReg: IIconRegister)
2014-08-06 13:57:45 +02:00
{
2015-01-26 11:17:24 +01:00
ResonantBlock.icon.put("thermopile_top", iconReg.registerIcon(Reference.prefix + "thermopile_top"))
2014-08-06 13:57:45 +02:00
super.registerIcons(iconReg)
}
2015-01-23 16:23:46 +01:00
@SideOnly(Side.CLIENT)
override def getIcon(side: Int, meta: Int): IIcon =
2014-08-06 13:57:45 +02:00
{
if (side == 1)
{
2015-01-26 11:17:24 +01:00
return ResonantBlock.icon.get("thermopile_top")
2014-08-06 13:57:45 +02:00
}
2015-01-23 16:23:46 +01:00
2014-08-06 13:57:45 +02:00
return super.getIcon(side, meta)
}
2021-04-05 14:41:30 +02:00
}