package mods.eln.transparentnode.electricalantennatx;
import mods.eln.Eln;
import mods.eln.misc.Coordonate;
import mods.eln.node.NodeBase;
import mods.eln.node.NodeManager;
import mods.eln.node.transparent.TransparentNode;
import mods.eln.sim.IProcess;
import mods.eln.transparentnode.electricalantennarx.ElectricalAntennaRxElement;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import java.util.List;
public class ElectricalAntennaTxSlowProcess implements IProcess {
ElectricalAntennaTxElement element;
double timeCounter = 0;
final double periode = 2;
public ElectricalAntennaTxSlowProcess(ElectricalAntennaTxElement element) {
this.element = element;
}
@Override
public void process(double time) {
//if(element.rxCoord == null)
World world = element.node.coordonate.world();
if (timeCounter <= 0.0) {
timeCounter = periode;
int rangeMax = element.descriptor.rangeMax;
Coordonate coord = new Coordonate(element.node.coordonate);
int distance = 0;
TransparentNode node = null;
boolean find = false;
//int a = 0,b = 0;
do {
coord.move(element.front);
distance++;
Block block;
if (element.placeBoot || element.rxCoord == null || coord.world().blockExists(coord.x, coord.y, coord.z)) {
// a++;
if ((block = coord.getBlock()) != Blocks.air && block != Blocks.fire) {
if (block == Eln.transparentNodeBlock
&& (node = (TransparentNode) NodeManager.instance.getNodeFromCoordonate(coord)) != null
&& (node.element instanceof ElectricalAntennaRxElement)) {
ElectricalAntennaRxElement rx = (ElectricalAntennaRxElement) node.element;
if (rx.front == element.front.getInverse()) {
find = true;
}
}
break;
}
} else {
// b++;
NodeBase unknowNode = NodeManager.instance.getNodeFromCoordonate(coord);
if (node != null) {
if (unknowNode instanceof TransparentNode
&& (((TransparentNode) unknowNode).element instanceof ElectricalAntennaRxElement)) {
node = (TransparentNode) unknowNode;
ElectricalAntennaRxElement rx = (ElectricalAntennaRxElement) node.element;
if (rx.front == element.front.getInverse()) {
find = true;
}
}
break;
}
}
} while (distance < rangeMax);
if (!find) {
element.txDisconnect();
Coordonate coordCpy = new Coordonate(coord);
coordCpy.move(element.front.getInverse());
if (element.powerResistor.getP() > 50) {
if (coordCpy.world().blockExists(coordCpy.x, coordCpy.y, coordCpy.z)) {
if (coordCpy.getBlock() == Blocks.air) {
coordCpy.world().setBlock(coordCpy.x, coordCpy.y, coordCpy.z, Blocks.fire);
}
}
}
} else {
element.powerEfficency = 1 - (element.descriptor.electricalPowerRatioLostOffset + element.descriptor.electricalPowerRatioLostPerBlock * distance);
if (world.getWorldInfo().isRaining()) element.powerEfficency *= 0.707;
if (world.getWorldInfo().isThundering()) element.powerEfficency *= 0.707;
element.rxCoord = node.coordonate;
element.rxElement = (ElectricalAntennaRxElement) node.element;
}
List list = world.getEntitiesWithinAABBExcludingEntity((Entity) null, Coordonate.getAxisAlignedBB(element.node.coordonate, coord));
for (Object o : list) {
Entity e = (Entity) o;
e.setFire((int) (Math.pow(element.powerResistor.getP() / 100.0, 2) + 0.5));
}
}
if (element.powerResistor.getP() > element.descriptor.electricalMaximalPower) {
element.node.physicalSelfDestruction(2.0f);
}
if (element.powerIn.getU() > element.descriptor.electricalMaximalVoltage) {
element.node.physicalSelfDestruction(2.0f);
}
element.placeBoot = false;
timeCounter -= time;
}
}