package mods.eln.transparentnode.waterturbine; import mods.eln.misc.INBTTReady; import mods.eln.misc.RcRcInterpolator; import mods.eln.misc.Utils; import mods.eln.sim.IProcess; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; public class WaterTurbineSlowProcess implements IProcess, INBTTReady { WaterTurbineElement turbine; public WaterTurbineSlowProcess(WaterTurbineElement turbine) { this.turbine = turbine; } double refreshTimeout = 0; double refreshPeriode = 0.2; RcRcInterpolator filter = new RcRcInterpolator(2, 2); @Override public void process(double time) { WaterTurbineDescriptor d = turbine.descriptor; refreshTimeout -= time; if (refreshTimeout < 0) { refreshTimeout = refreshPeriode; double waterFactor = getWaterFactor(); if (waterFactor < 0) { filter.setValue((float) (filter.get() * (1 - 0.5f * time))); } else { filter.setTarget((float) (waterFactor * d.nominalPower)); filter.step((float) time); } turbine.powerSource.setP(filter.get()); } } double getWaterFactor() { //Block b = turbine.waterCoord.getBlock(); double time = 0; if (turbine.waterCoord.getBlockExist()) { Block block = turbine.waterCoord.getBlock(); int blockMeta = turbine.waterCoord.getMeta(); //Utils.println("WATER : " + b + " " + turbine.waterCoord.getMeta()); if (block != Blocks.flowing_water && block != Blocks.water) return -1; if (blockMeta == 0) return 0; time = Utils.getWorldTime(turbine.world()); } double timeFactor = 1 + 0.2 * Math.sin((time - 0.20) * Math.PI * 2); double weatherFactor = 1 + Utils.getWeatherNoLoad(turbine.coordonate().dimention) * 2; return timeFactor * weatherFactor; } @Override public void readFromNBT(NBTTagCompound nbt, String str) { filter.readFromNBT(nbt, str + "filter"); } @Override public void writeToNBT(NBTTagCompound nbt, String str) { filter.writeToNBT(nbt, str + "filter"); } }