Some work on flamethrower sounds, also refactored sound system to allow for multiple sounds from a single object reference (to allow flamethrower and jetpack sounds to work simultaneously)
This commit is contained in:
parent
6e5eca9d4e
commit
be7ea115b6
9 changed files with 181 additions and 76 deletions
|
@ -80,8 +80,8 @@ import mekanism.client.render.tileentity.RenderRotaryCondensentrator;
|
|||
import mekanism.client.render.tileentity.RenderSalinationController;
|
||||
import mekanism.client.render.tileentity.RenderSeismicVibrator;
|
||||
import mekanism.client.render.tileentity.RenderTeleporter;
|
||||
import mekanism.client.sound.Sound;
|
||||
import mekanism.client.sound.SoundHandler;
|
||||
import mekanism.client.sound.SoundMap;
|
||||
import mekanism.common.CommonProxy;
|
||||
import mekanism.common.IElectricChest;
|
||||
import mekanism.common.IInvConfiguration;
|
||||
|
@ -185,13 +185,13 @@ public class ClientProxy extends CommonProxy
|
|||
}
|
||||
|
||||
@Override
|
||||
public void registerSound(Object obj)
|
||||
public void registerSound(TileEntity tileEntity)
|
||||
{
|
||||
if(MekanismClient.enableSounds && MekanismClient.audioHandler != null)
|
||||
{
|
||||
synchronized(MekanismClient.audioHandler.sounds)
|
||||
synchronized(MekanismClient.audioHandler.soundMaps)
|
||||
{
|
||||
MekanismClient.audioHandler.register(obj);
|
||||
MekanismClient.audioHandler.registerTileSound(tileEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -201,11 +201,11 @@ public class ClientProxy extends CommonProxy
|
|||
{
|
||||
if(MekanismClient.enableSounds && MekanismClient.audioHandler != null)
|
||||
{
|
||||
synchronized(MekanismClient.audioHandler.sounds)
|
||||
synchronized(MekanismClient.audioHandler.soundMaps)
|
||||
{
|
||||
if(MekanismClient.audioHandler.getFrom(tileEntity) != null)
|
||||
if(MekanismClient.audioHandler.getMap(tileEntity) != null)
|
||||
{
|
||||
MekanismClient.audioHandler.getFrom(tileEntity).remove();
|
||||
MekanismClient.audioHandler.getMap(tileEntity).kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -504,17 +504,17 @@ public class ClientProxy extends CommonProxy
|
|||
{
|
||||
if(MekanismClient.audioHandler != null)
|
||||
{
|
||||
synchronized(MekanismClient.audioHandler.sounds)
|
||||
synchronized(MekanismClient.audioHandler.soundMaps)
|
||||
{
|
||||
HashMap<Object, Sound> sounds = new HashMap<Object, Sound>();
|
||||
sounds.putAll(MekanismClient.audioHandler.sounds);
|
||||
HashMap<Object, SoundMap> mapsCopy = new HashMap<Object, SoundMap>();
|
||||
mapsCopy.putAll(MekanismClient.audioHandler.soundMaps);
|
||||
|
||||
for(Sound sound : sounds.values())
|
||||
for(SoundMap map : mapsCopy.values())
|
||||
{
|
||||
sound.remove();
|
||||
map.kill();
|
||||
}
|
||||
|
||||
MekanismClient.audioHandler.sounds.clear();
|
||||
MekanismClient.audioHandler.soundMaps.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -387,22 +387,26 @@ public class ClientTickHandler
|
|||
{
|
||||
for(String username : Mekanism.jetpackOn)
|
||||
{
|
||||
if(mc.theWorld.getPlayerEntityByName(username) != null)
|
||||
EntityPlayer player = mc.theWorld.getPlayerEntityByName(username);
|
||||
|
||||
if(player != null)
|
||||
{
|
||||
if(MekanismClient.audioHandler.getFrom(mc.theWorld.getPlayerEntityByName(username)) == null)
|
||||
if(MekanismClient.audioHandler.getMap(player) == null)
|
||||
{
|
||||
new JetpackSound(MekanismClient.audioHandler.getIdentifier(), mc.theWorld.getPlayerEntityByName(username));
|
||||
new JetpackSound(MekanismClient.audioHandler.getIdentifier(player), player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(String username : Mekanism.gasmaskOn)
|
||||
{
|
||||
if(mc.theWorld.getPlayerEntityByName(username) != null)
|
||||
EntityPlayer player = mc.theWorld.getPlayerEntityByName(username);
|
||||
|
||||
if(player != null)
|
||||
{
|
||||
if(MekanismClient.audioHandler.getFrom(mc.theWorld.getPlayerEntityByName(username)) == null)
|
||||
if(MekanismClient.audioHandler.getMap(player) == null)
|
||||
{
|
||||
new GasMaskSound(MekanismClient.audioHandler.getIdentifier(), mc.theWorld.getPlayerEntityByName(username));
|
||||
new GasMaskSound(MekanismClient.audioHandler.getIdentifier(player), player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -411,7 +415,10 @@ public class ClientTickHandler
|
|||
{
|
||||
if(hasFlamethrower(player))
|
||||
{
|
||||
new FlamethrowerSound(MekanismClient.audioHandler.getIdentifier(), player);
|
||||
if(MekanismClient.audioHandler.getMap(player) == null)
|
||||
{
|
||||
new FlamethrowerSound(MekanismClient.audioHandler.getIdentifier(player), player);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -546,7 +553,7 @@ public class ClientTickHandler
|
|||
|
||||
public static boolean hasFlamethrower(EntityPlayer player)
|
||||
{
|
||||
if(player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemJetpack)
|
||||
if(player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof ItemFlamethrower)
|
||||
{
|
||||
ItemFlamethrower flamethrower = (ItemFlamethrower)player.getCurrentEquippedItem().getItem();
|
||||
|
||||
|
@ -563,7 +570,7 @@ public class ClientTickHandler
|
|||
{
|
||||
if(MekanismClient.audioHandler != null)
|
||||
{
|
||||
synchronized(MekanismClient.audioHandler.sounds)
|
||||
synchronized(MekanismClient.audioHandler.soundMaps)
|
||||
{
|
||||
MekanismClient.audioHandler.onTick();
|
||||
}
|
||||
|
|
|
@ -2,7 +2,6 @@ package mekanism.client.sound;
|
|||
|
||||
import mekanism.client.ClientTickHandler;
|
||||
import mekanism.common.item.ItemFlamethrower;
|
||||
import mekanism.common.item.ItemJetpack;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
|
@ -12,7 +11,7 @@ public class FlamethrowerSound extends PlayerSound
|
|||
|
||||
public FlamethrowerSound(String id, EntityPlayer entity)
|
||||
{
|
||||
super(id, "Flamethrower.ogg", entity);
|
||||
super(id, getSound(getInUse(entity)), entity);
|
||||
|
||||
inUse = getInUse(entity);
|
||||
}
|
||||
|
@ -35,16 +34,22 @@ public class FlamethrowerSound extends PlayerSound
|
|||
|
||||
if(isPlaying)
|
||||
{
|
||||
System.out.println(getLocation());
|
||||
ticksSincePlay++;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean getInUse(EntityPlayer player)
|
||||
private static boolean getInUse(EntityPlayer player)
|
||||
{
|
||||
ItemFlamethrower flamethrower = (ItemFlamethrower)player.getCurrentEquippedItem().getItem();
|
||||
|
||||
return flamethrower.getInUse(player.getCurrentEquippedItem());
|
||||
}
|
||||
|
||||
private static String getSound(boolean inUse)
|
||||
{
|
||||
return inUse ? "FlamethrowerActive.ogg" : "FlamethrowerIdle.ogg";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -33,12 +33,12 @@ public abstract class Sound
|
|||
*/
|
||||
public Sound(String id, String sound, Object obj, Pos3D loc)
|
||||
{
|
||||
if(MekanismClient.audioHandler.getFrom(obj) != null)
|
||||
if(MekanismClient.audioHandler.getMap(obj) != null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
synchronized(MekanismClient.audioHandler.sounds)
|
||||
synchronized(MekanismClient.audioHandler.soundMaps)
|
||||
{
|
||||
prevSoundPath = sound;
|
||||
identifier = id;
|
||||
|
@ -58,7 +58,7 @@ public abstract class Sound
|
|||
SoundHandler.getSoundSystem().activate(id);
|
||||
}
|
||||
|
||||
MekanismClient.audioHandler.sounds.put(obj, this);
|
||||
MekanismClient.audioHandler.registerSound(objRef, prevSoundPath, this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -67,7 +67,7 @@ public abstract class Sound
|
|||
*/
|
||||
public void play()
|
||||
{
|
||||
synchronized(MekanismClient.audioHandler.sounds)
|
||||
synchronized(MekanismClient.audioHandler.soundMaps)
|
||||
{
|
||||
if(isPlaying)
|
||||
{
|
||||
|
@ -91,7 +91,7 @@ public abstract class Sound
|
|||
*/
|
||||
public void stopLoop()
|
||||
{
|
||||
synchronized(MekanismClient.audioHandler.sounds)
|
||||
synchronized(MekanismClient.audioHandler.soundMaps)
|
||||
{
|
||||
if(!isPlaying)
|
||||
{
|
||||
|
@ -113,14 +113,14 @@ public abstract class Sound
|
|||
*/
|
||||
public void remove()
|
||||
{
|
||||
synchronized(MekanismClient.audioHandler.sounds)
|
||||
synchronized(MekanismClient.audioHandler.soundMaps)
|
||||
{
|
||||
if(isPlaying)
|
||||
{
|
||||
stopLoop();
|
||||
}
|
||||
|
||||
MekanismClient.audioHandler.sounds.remove(objRef);
|
||||
MekanismClient.audioHandler.removeSound(objRef, prevSoundPath);
|
||||
|
||||
if(SoundHandler.getSoundSystem() != null)
|
||||
{
|
||||
|
@ -158,7 +158,7 @@ public abstract class Sound
|
|||
*/
|
||||
public void updateVolume()
|
||||
{
|
||||
synchronized(MekanismClient.audioHandler.sounds)
|
||||
synchronized(MekanismClient.audioHandler.soundMaps)
|
||||
{
|
||||
try {
|
||||
float multiplier = getMultiplier();
|
||||
|
|
|
@ -44,7 +44,7 @@ import cpw.mods.fml.relauncher.SideOnly;
|
|||
public class SoundHandler
|
||||
{
|
||||
/** All the sound references in the Minecraft game. */
|
||||
public Map<Object, Sound> sounds = Collections.synchronizedMap(new HashMap<Object, Sound>());
|
||||
public Map<Object, SoundMap> soundMaps = Collections.synchronizedMap(new HashMap<Object, SoundMap>());
|
||||
|
||||
public static Minecraft mc = Minecraft.getMinecraft();
|
||||
|
||||
|
@ -173,7 +173,7 @@ public class SoundHandler
|
|||
*/
|
||||
public void onTick()
|
||||
{
|
||||
synchronized(sounds)
|
||||
synchronized(soundMaps)
|
||||
{
|
||||
if(getSoundSystem() != null)
|
||||
{
|
||||
|
@ -184,17 +184,20 @@ public class SoundHandler
|
|||
|
||||
if(FMLClientHandler.instance().getClient().thePlayer != null && world != null)
|
||||
{
|
||||
for(Sound sound : sounds.values())
|
||||
for(SoundMap map : soundMaps.values())
|
||||
{
|
||||
if(!sound.update(world))
|
||||
for(Sound sound : map)
|
||||
{
|
||||
soundsToRemove.add(sound);
|
||||
continue;
|
||||
}
|
||||
if(!sound.update(world))
|
||||
{
|
||||
soundsToRemove.add(sound);
|
||||
continue;
|
||||
}
|
||||
|
||||
if(sound.isPlaying)
|
||||
{
|
||||
sound.updateVolume();
|
||||
if(sound.isPlaying)
|
||||
{
|
||||
sound.updateVolume();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -205,12 +208,9 @@ public class SoundHandler
|
|||
}
|
||||
}
|
||||
else {
|
||||
for(Sound sound : sounds.values())
|
||||
for(SoundMap map : soundMaps.values())
|
||||
{
|
||||
if(sound.isPlaying)
|
||||
{
|
||||
sound.stopLoop();
|
||||
}
|
||||
map.stopLoops();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -220,39 +220,67 @@ public class SoundHandler
|
|||
}
|
||||
}
|
||||
|
||||
public void removeSound(Object ref, String path)
|
||||
{
|
||||
if(soundMaps.get(ref) == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
soundMaps.get(ref).remove(path);
|
||||
}
|
||||
|
||||
public void registerSound(Object ref, String path, Sound sound)
|
||||
{
|
||||
if(soundMaps.get(ref) == null)
|
||||
{
|
||||
soundMaps.put(ref, new SoundMap(ref, path, sound));
|
||||
return;
|
||||
}
|
||||
|
||||
soundMaps.get(ref).add(path, sound);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a sound object from a specific TileEntity, null if there is none.
|
||||
* @param tileEntity - the holder of the sound
|
||||
* @return Sound instance
|
||||
*/
|
||||
public Sound getFrom(Object obj)
|
||||
public SoundMap getMap(Object obj)
|
||||
{
|
||||
synchronized(sounds)
|
||||
synchronized(soundMaps)
|
||||
{
|
||||
return sounds.get(obj);
|
||||
return soundMaps.get(obj);
|
||||
}
|
||||
}
|
||||
|
||||
public Sound getSound(Object obj, String path)
|
||||
{
|
||||
if(soundMaps.get(obj) == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return soundMaps.get(obj).getSound(path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create and return an instance of a Sound.
|
||||
* @param tileEntity - the holder of this sound.
|
||||
* @return Sound instance
|
||||
*/
|
||||
public void register(Object obj)
|
||||
public void registerTileSound(TileEntity tile)
|
||||
{
|
||||
if(obj instanceof TileEntity && !(obj instanceof IHasSound))
|
||||
if(!(tile instanceof IHasSound))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
synchronized(sounds)
|
||||
synchronized(soundMaps)
|
||||
{
|
||||
if(getFrom(obj) == null)
|
||||
if(getMap(tile) == null)
|
||||
{
|
||||
if(obj instanceof TileEntity)
|
||||
{
|
||||
new TileSound(getIdentifier(), HolidayManager.filterSound(((IHasSound)obj).getSoundPath()), (TileEntity)obj);
|
||||
}
|
||||
new TileSound(getIdentifier(tile), HolidayManager.filterSound(((IHasSound)tile).getSoundPath()), tile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -263,19 +291,11 @@ public class SoundHandler
|
|||
* number between 0 and 10,000. Example: "Mekanism_6_6123"
|
||||
* @return unique identifier
|
||||
*/
|
||||
public String getIdentifier()
|
||||
public String getIdentifier(Object obj)
|
||||
{
|
||||
synchronized(sounds)
|
||||
synchronized(soundMaps)
|
||||
{
|
||||
String toReturn = "Mekanism_" + sounds.size() + "_" + new Random().nextInt(10000);
|
||||
|
||||
for(Sound sound : sounds.values())
|
||||
{
|
||||
if(sound.identifier.equals(toReturn))
|
||||
{
|
||||
return getIdentifier();
|
||||
}
|
||||
}
|
||||
String toReturn = "Mekanism_" + soundMaps.size() + "_" + new Random().nextInt(10000);
|
||||
|
||||
return toReturn;
|
||||
}
|
||||
|
@ -350,11 +370,11 @@ public class SoundHandler
|
|||
|
||||
if(tileEntity instanceof IHasSound)
|
||||
{
|
||||
if(getFrom(tileEntity) != null)
|
||||
if(getMap(tileEntity) != null)
|
||||
{
|
||||
if(sounds.containsKey(tileEntity))
|
||||
if(soundMaps.containsKey(tileEntity))
|
||||
{
|
||||
getFrom(tileEntity).remove();
|
||||
getMap(tileEntity).kill();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
73
src/main/java/mekanism/client/sound/SoundMap.java
Normal file
73
src/main/java/mekanism/client/sound/SoundMap.java
Normal file
|
@ -0,0 +1,73 @@
|
|||
package mekanism.client.sound;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import mekanism.client.MekanismClient;
|
||||
|
||||
public class SoundMap implements Iterable<Sound>
|
||||
{
|
||||
public Map<String, Sound> soundMap = new HashMap<String, Sound>();
|
||||
|
||||
public Object objRef;
|
||||
|
||||
public SoundMap(Object obj)
|
||||
{
|
||||
objRef = obj;
|
||||
}
|
||||
|
||||
public SoundMap(Object obj, String path, Sound sound)
|
||||
{
|
||||
this(obj);
|
||||
|
||||
soundMap.put(path, sound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterator<Sound> iterator()
|
||||
{
|
||||
return soundMap.values().iterator();
|
||||
}
|
||||
|
||||
public Sound getSound(String path)
|
||||
{
|
||||
return soundMap.get(path);
|
||||
}
|
||||
|
||||
public boolean hasSound(String path)
|
||||
{
|
||||
return soundMap.containsKey(path);
|
||||
}
|
||||
|
||||
public void remove(String path)
|
||||
{
|
||||
soundMap.remove(path);
|
||||
}
|
||||
|
||||
public void add(String path, Sound sound)
|
||||
{
|
||||
soundMap.put(path, sound);
|
||||
}
|
||||
|
||||
public void stopLoops()
|
||||
{
|
||||
for(Sound sound : soundMap.values())
|
||||
{
|
||||
if(sound.isPlaying)
|
||||
{
|
||||
sound.stopLoop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void kill()
|
||||
{
|
||||
for(Sound sound : soundMap.values())
|
||||
{
|
||||
sound.remove();
|
||||
}
|
||||
|
||||
MekanismClient.audioHandler.soundMaps.remove(objRef);
|
||||
}
|
||||
}
|
|
@ -142,9 +142,9 @@ public class CommonProxy
|
|||
|
||||
/**
|
||||
* Registers a client-side sound, assigned to a TileEntity.
|
||||
* @param obj - TileEntity who is registering the sound
|
||||
* @param tile - TileEntity who is registering the sound
|
||||
*/
|
||||
public void registerSound(Object obj) {}
|
||||
public void registerSound(TileEntity tileEntity) {}
|
||||
|
||||
/**
|
||||
* Unregisters a client-side sound, assigned to a TileEntity;
|
||||
|
|
BIN
src/main/resources/assets/mekanism/sounds/FlamethrowerActive.ogg
Normal file
BIN
src/main/resources/assets/mekanism/sounds/FlamethrowerActive.ogg
Normal file
Binary file not shown.
BIN
src/main/resources/assets/mekanism/sounds/FlamethrowerIdle.ogg
Normal file
BIN
src/main/resources/assets/mekanism/sounds/FlamethrowerIdle.ogg
Normal file
Binary file not shown.
Loading…
Reference in a new issue