2015-01-14 12:06:03 +01:00
|
|
|
package edx.quantum.machine.fulmination
|
2014-09-29 21:10:58 +02:00
|
|
|
|
2014-11-19 02:57:27 +01:00
|
|
|
import java.util.{ArrayList, List}
|
2014-09-29 21:10:58 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Atomic Science Event Handling.
|
|
|
|
*/
|
|
|
|
object FulminationHandler
|
|
|
|
{
|
2015-01-14 12:06:03 +01:00
|
|
|
final val INSTANCE: FulminationHandler = new FulminationHandler
|
|
|
|
final val list: List[TileFulmination] = new ArrayList[TileFulmination]
|
2014-09-29 21:10:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
class FulminationHandler
|
|
|
|
{
|
2015-01-14 12:06:03 +01:00
|
|
|
def register(tileEntity: TileFulmination)
|
|
|
|
{
|
|
|
|
if (!FulminationHandler.list.contains(tileEntity))
|
2014-09-29 21:10:58 +02:00
|
|
|
{
|
2015-01-14 12:06:03 +01:00
|
|
|
FulminationHandler.list.add(tileEntity)
|
2014-09-29 21:10:58 +02:00
|
|
|
}
|
2015-01-14 12:06:03 +01:00
|
|
|
}
|
2014-09-29 21:10:58 +02:00
|
|
|
|
2015-01-14 12:06:03 +01:00
|
|
|
def unregister(tileEntity: TileFulmination)
|
|
|
|
{
|
|
|
|
FulminationHandler.list.remove(tileEntity)
|
|
|
|
}
|
2014-09-29 21:10:58 +02:00
|
|
|
|
2014-11-19 02:57:27 +01:00
|
|
|
/**
|
2015-01-14 12:06:03 +01:00
|
|
|
//@SubscribeEvent def BaoZha(evt: ExplosionEvent.DoExplosionEvent)
|
2014-09-29 21:10:58 +02:00
|
|
|
{
|
|
|
|
if (evt.iExplosion != null)
|
|
|
|
{
|
|
|
|
if (evt.iExplosion.getRadius > 0 && evt.iExplosion.getEnergy > 0)
|
|
|
|
{
|
|
|
|
val avaliableGenerators: HashSet[TileFulmination] = new HashSet[TileFulmination]
|
|
|
|
import scala.collection.JavaConversions._
|
|
|
|
for (tileEntity <- FulminationHandler.list)
|
|
|
|
{
|
|
|
|
if (tileEntity != null)
|
|
|
|
{
|
|
|
|
if (!tileEntity.isInvalid)
|
|
|
|
{
|
2014-11-08 13:58:31 +01:00
|
|
|
val tileDiDian: Vector3 = tileEntity.toVector3
|
2014-09-29 21:10:58 +02:00
|
|
|
tileDiDian.add(0.5f)
|
|
|
|
val juLi: Double = tileDiDian.distance(new Vector3(evt.x, evt.y, evt.z))
|
|
|
|
if (juLi <= evt.iExplosion.getRadius && juLi > 0)
|
|
|
|
{
|
|
|
|
val miDu: Float = evt.world.getBlockDensity(Vec3.createVectorHelper(evt.x, evt.y, evt.z), AtomicContent.blockFulmination.getCollisionBoundingBoxFromPool(evt.world, tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord))
|
|
|
|
if (miDu < 1)
|
|
|
|
{
|
|
|
|
avaliableGenerators.add(tileEntity)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val totalEnergy: Float = evt.iExplosion.getEnergy
|
|
|
|
val maxEnergyPerGenerator: Float = totalEnergy / avaliableGenerators.size
|
|
|
|
import scala.collection.JavaConversions._
|
|
|
|
for (tileEntity <- avaliableGenerators)
|
|
|
|
{
|
|
|
|
val density: Float = evt.world.getBlockDensity(Vec3.createVectorHelper(evt.x, evt.y, evt.z), AtomicContent.blockFulmination.getCollisionBoundingBoxFromPool(evt.world, tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord))
|
2014-11-08 13:58:31 +01:00
|
|
|
val juLi: Double = tileEntity.toVector3.distance(new Vector3(evt.x, evt.y, evt.z))
|
2014-09-29 21:10:58 +02:00
|
|
|
var energy: Long = Math.min(maxEnergyPerGenerator, maxEnergyPerGenerator / (juLi / evt.iExplosion.getRadius)).asInstanceOf[Long]
|
|
|
|
energy = Math.max((1 - density) * energy, 0).asInstanceOf[Long]
|
|
|
|
tileEntity.energy.receiveEnergy(energy, true)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2014-11-19 02:57:27 +01:00
|
|
|
} */
|
2014-09-29 21:10:58 +02:00
|
|
|
}
|