Loaded sounds are properly freed, ObjectProperty optimization, expanded skill effects (rangedweapon accuracy, welding efficiency, electrical shocks), armored wearables + ballistic vest & helmet

This commit is contained in:
Regalis
2015-09-28 19:48:31 +03:00
parent 97c3ac1412
commit cc16bb3ad7
34 changed files with 411 additions and 183 deletions

View File

@@ -21,6 +21,8 @@ namespace Subsurface
string filePath;
private int alSourceId;
private bool destroyOnGameEnd;
//public float Volume
@@ -28,6 +30,25 @@ namespace Subsurface
// set { SoundManager.Volume(sourceIndex, value); }
//}
private Sound(string file, bool destroyOnGameEnd)
{
filePath = file;
foreach (Sound loadedSound in loadedSounds)
{
if (loadedSound.filePath == file) oggSound = loadedSound.oggSound;
}
if (oggSound == null)
{
oggSound = OggSound.Load(file);
}
this.destroyOnGameEnd = destroyOnGameEnd;
loadedSounds.Add(this);
}
public string FilePath
{
get { return filePath; }
@@ -43,32 +64,15 @@ namespace Subsurface
SoundManager.Init();
}
public static Sound Load(string file)
public static Sound Load(string file, bool destroyOnGameEnd = true)
{
if (!File.Exists(file))
{
DebugConsole.ThrowError("File ''" + file + "'' not found!");
return null;
}
Sound s = new Sound();
s.filePath = file;
foreach (Sound loadedSound in loadedSounds)
{
if (loadedSound.filePath == file) s.oggSound = loadedSound.oggSound;
}
if (s.oggSound == null)
{
s.oggSound = OggSound.Load(file);
}
loadedSounds.Add(s);
return s;
return new Sound(file, destroyOnGameEnd);
}
public int Play(float volume = 1.0f)
@@ -212,12 +216,27 @@ namespace Subsurface
//{
// SoundManager.Stop(this);
//}
public static void OnGameEnd()
{
List<Sound> removableSounds = loadedSounds.FindAll(s => s.destroyOnGameEnd);
foreach (Sound sound in removableSounds)
{
sound.Remove();
}
}
public void Remove()
{
loadedSounds.Remove(this);
System.Diagnostics.Debug.WriteLine(AlBufferId);
System.Diagnostics.Debug.WriteLine("Removing sound " + filePath + " (buffer id" + AlBufferId + ")");
if (alSourceId>0 && SoundManager.IsPlaying(alSourceId))
{
SoundManager.Stop(alSourceId);
}
foreach (Sound s in loadedSounds)
{