package mods.eln.misc; import mods.eln.sim.IProcess; import net.minecraft.nbt.NBTTagCompound; public class WindProcess implements IProcess, INBTTReady { double windHit = 5; double windTarget = 5; double windVariation = 0; double windTargetNoose = 0; RcInterpolator windTargetFiltred = new RcInterpolator(60); @Override public void process(double time) { double varF = 0.01; windHit += windVariation * time; windVariation += (getTarget() - windHit) * varF * time + (Math.random() * 2 - 1) * 0.1 * time; windVariation *= (1 - 0.01 * time); if (Math.random() < time / 1200) { newWindTarget(); } if (Math.random() < time / 120) { windTargetNoose = (Math.random() * 2 - 1) * 1.2; } //windLast = windHit; //weather.setTarget(Utils.getWeather(world)) windTargetFiltred.setTarget((float) windTarget); windTargetFiltred.step((float) time); //Utils.println("WIND : " + windHit + " TARGET : " + getTarget()); } public void newWindTarget() { float next = (float) (Math.pow(Math.random(), 3.0) * 20); windTarget += (next - windTarget) * 0.7; } public double getTarget() { return windTargetNoose + windTargetFiltred.get(); } public double getTargetNotFiltred() { return windTargetNoose + windTargetFiltred.getTarget(); } public double getWind(int y) { y = Math.min(y, 100); return Math.max(0, windHit * y / 100); } @Override public void readFromNBT(NBTTagCompound nbt, String str) { windHit = nbt.getDouble(str + "windHit"); windTarget = nbt.getDouble(str + "windTarget"); windVariation = nbt.getDouble(str + "windVariation"); windTargetFiltred.setValue(nbt.getFloat(str + "windTargetFiltred")); } @Override public void writeToNBT(NBTTagCompound nbt, String str) { nbt.setDouble(str + "windHit", windHit); nbt.setDouble(str + "windTarget", windTarget); nbt.setDouble(str + "windVariation", windVariation); nbt.setFloat(str + "windTargetFiltred", windTargetFiltred.get()); } }