From 17b4c527070f73a9fbe2cda8ddcf0347baf5b6d8 Mon Sep 17 00:00:00 2001 From: George Paton Date: Tue, 23 Jan 2024 17:14:03 +1100 Subject: [PATCH] Add audio to the Fusion Reactor, with spool up/down --- .../tileentity/machine/TileEntityChungus.java | 2 + .../tileentity/machine/TileEntityITER.java | 61 ++++++++++++++++-- .../TileEntityMachineLargeTurbine.java | 2 + src/main/resources/assets/hbm/sounds.json | 1 + .../hbm/sounds/block/fusionReactorSpin.ogg | Bin 0 -> 20235 bytes 5 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/assets/hbm/sounds/block/fusionReactorSpin.ogg diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java index d0c3e0527..e32a41fb8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityChungus.java @@ -316,6 +316,8 @@ public class TileEntityChungus extends TileEntityLoadedBase implements IFluidAcc @Override public void onChunkUnload() { + super.onChunkUnload(); + if(audio != null) { audio.stopSound(); audio = null; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java index 59f759c71..4a7e3de46 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityITER.java @@ -24,6 +24,7 @@ import com.hbm.lib.Library; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; +import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; import com.hbm.util.fauxpointtwelve.DirPos; @@ -63,6 +64,10 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyUser public float lastRotor; public boolean isOn; + private float rotorSpeed = 0F; + + private AudioWrapper audio; + public TileEntityITER() { super(5); tanks = new FluidTank[2]; @@ -181,16 +186,38 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyUser /// END Notif packets /// } else { - + this.lastRotor = this.rotor; + this.rotor += this.rotorSpeed; + + if(this.rotor >= 360) { + this.rotor -= 360; + this.lastRotor -= 360; + } - if(this.isOn && this.power >= this.powerReq) { + if(this.isOn && this.power >= powerReq) { + this.rotorSpeed = Math.max(0F, Math.min(15F, this.rotorSpeed + 0.05F)); + + if(audio == null) { + audio = MainRegistry.proxy.getLoopedSound("hbm:block.fusionReactorRunning", xCoord, yCoord, zCoord, 1.0F, 30F, 1.0F); + audio.startSound(); + } + + float rotorSpeed = this.rotorSpeed / 15F; + audio.updateVolume(getVolume(0.5f * rotorSpeed)); + audio.updatePitch(0.25F + 0.75F * rotorSpeed); + } else { + this.rotorSpeed = Math.max(0F, Math.min(15F, this.rotorSpeed - 0.1F)); - this.rotor += 15F; - - if(this.rotor >= 360) { - this.rotor -= 360; - this.lastRotor -= 360; + if(audio != null) { + if(this.rotorSpeed > 0) { + float rotorSpeed = this.rotorSpeed / 15F; + audio.updateVolume(getVolume(0.5f * rotorSpeed)); + audio.updatePitch(0.25F + 0.75F * rotorSpeed); + } else { + audio.stopSound(); + audio = null; + } } } } @@ -477,6 +504,26 @@ public class TileEntityITER extends TileEntityMachineBase implements IEnergyUser return 0; } + @Override + public void onChunkUnload() { + super.onChunkUnload(); + + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + + @Override + public void invalidate() { + super.invalidate(); + + if(audio != null) { + audio.stopSound(); + audio = null; + } + } + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java index 5df34faa2..885408284 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineLargeTurbine.java @@ -324,6 +324,8 @@ public class TileEntityMachineLargeTurbine extends TileEntityMachineBase impleme @Override public void onChunkUnload() { + super.onChunkUnload(); + if(audio != null) { audio.stopSound(); audio = null; diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 0ef66227c..2e3958e45 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -61,6 +61,7 @@ "block.hornFarSingle": {"category": "block", "sounds": [{"name": "block/hornFarSingle", "stream": false}]}, "block.hornFarDual": {"category": "block", "sounds": [{"name": "block/hornFarDual", "stream": false}]}, "block.reactorLoop": {"category": "block", "sounds": [{"name": "block/reactorLoop", "stream": false}]}, + "block.fusionReactorRunning": {"category": "block", "sounds": [{"name": "block/fusionReactorSpin", "stream": false}]}, "block.fel": {"category": "block", "sounds": [{"name": "block/fel", "stream": false}]}, "door.TransitionSealOpen": {"category": "block", "sounds": [{"name": "block/door/transition_seal_open", "stream": true}]}, diff --git a/src/main/resources/assets/hbm/sounds/block/fusionReactorSpin.ogg b/src/main/resources/assets/hbm/sounds/block/fusionReactorSpin.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b3752f91c97ed3979c9289bfd1d37bd3537976e0 GIT binary patch literal 20235 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 Ohi$oBF7MwRDc2I~@ZGfl literal 0 HcmV?d00001