package mods.eln.transparentnode.waterturbine; import mods.eln.misc.Coordonate; import mods.eln.misc.Direction; import mods.eln.misc.RcInterpolator; import mods.eln.misc.Utils; import mods.eln.node.transparent.TransparentNodeDescriptor; import mods.eln.node.transparent.TransparentNodeElementInventory; import mods.eln.node.transparent.TransparentNodeElementRender; import mods.eln.node.transparent.TransparentNodeEntity; import mods.eln.sound.SoundCommand; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import java.io.DataInputStream; import java.io.IOException; public class WaterTurbineRender extends TransparentNodeElementRender { public WaterTurbineRender(TransparentNodeEntity tileEntity, TransparentNodeDescriptor descriptor) { super(tileEntity, descriptor); this.descriptor = (WaterTurbineDescriptor) descriptor; } Coordonate waterCoord, waterCoordRight; RcInterpolator powerFactorFilter = new RcInterpolator(1); RcInterpolator dirFilter = new RcInterpolator(0.5f); WaterTurbineDescriptor descriptor; float alpha = (float) (Math.random() * 360); boolean soundPlaying = false; @Override public void draw() { // front.glRotateXnRef(); front.glRotateXnRef(); descriptor.draw(alpha); } public void refresh(float deltaT) { float flowDir = waterCoord.getMeta() > waterCoordRight.getMeta() ? 1 : -1; if (Utils.isWater(waterCoord) == false) flowDir = 0; dirFilter.setTarget(flowDir); dirFilter.step(deltaT); powerFactorFilter.setTarget((float) (dirFilter.get() * Math.sqrt(powerFactor))); powerFactorFilter.step(deltaT); // Utils.println(powerFactorFilter.get()); float alphaN_1 = alpha; alpha += deltaT * descriptor.speed * powerFactorFilter.get(); if (alpha > 360) alpha -= 360; if (alpha < 0) alpha += 360; if ((int) (alpha / 45) != (int) (alphaN_1 / 45) && soundPlaying == false) { Coordonate coord = coordonate(); play(new SoundCommand(descriptor.soundName) .mulVolume(descriptor.nominalVolume * (0.007f + 0.2f * (float) powerFactorFilter.get() * (float) powerFactorFilter.get()), 1.1f)); //SoundClient.playFromBlock(tileEntity.worldObj,coord.x, coord.y, coord.z, descriptor.soundName,1,1,5,15); soundPlaying = true; } else soundPlaying = false; } TransparentNodeElementInventory inventory = new TransparentNodeElementInventory(0, 64, this); private float water; private float powerFactor; @Override public GuiScreen newGuiDraw(Direction side, EntityPlayer player) { return new WaterTurbineGuiDraw(player, inventory, this); } @Override public boolean cameraDrawOptimisation() { return false; } @Override public void networkUnserialize(DataInputStream stream) { super.networkUnserialize(stream); try { powerFactor = stream.readFloat(); } catch (IOException e) { e.printStackTrace(); } waterCoord = this.descriptor.getWaterCoordonate(tileEntity.getWorldObj()); waterCoord.setWorld(tileEntity.getWorldObj()); waterCoord.applyTransformation(front, coordonate()); waterCoordRight = new Coordonate(waterCoord); waterCoordRight.setWorld(tileEntity.getWorldObj()); waterCoordRight.move(front.right()); } }