/// <summary> /// Merges otherAchievement into achievement /// </summary> public static void MergeAchievement(AchievementOptions achievement, AchievementOptions otherAchievement) { if (achievement == null || otherAchievement == null) { throw new ArgumentNullException(); } //Gather all non-default sounds from both achievements var soundsToAdd = new List <BasicAchievementSound>(); soundsToAdd.AddRange(GetAllNonDefaultSounds(achievement)); soundsToAdd.AddRange(GetAllNonDefaultSounds(otherAchievement)); if (soundsToAdd.Count == 1) { //Create old style one sound achievement achievement.fileSoundPath = soundsToAdd[0].soundFile; achievement.pakSoundPath = soundsToAdd[0].pakSoundFile; achievement.dynamicSounds = null; } else if (soundsToAdd.Count > 1) { //Create dynamicSounds multi sound achievement achievement.fileSoundPath = _defaultfileSoundPath; achievement.pakSoundPath = null; if (achievement.dynamicSounds == null) { achievement.dynamicSounds = new BasicDynamicSoundManager(); } achievement.dynamicSounds.sounds = soundsToAdd.ToArray(); } //else if soundsToAdd.Count == 0, there is nothing to change, achievement has a default sound already (it is added during loading) }
/// <summary> /// Helper function that checks equality of the soundfilenames fo the voicepack when it has 1+ sounds /// </summary> /// <param name="lhs">left hand side</param> /// <param name="rhs">right hand side</param> /// <returns></returns> public static bool AchievementOptionsDynamicSoundsEqual(AchievementOptions lhs, AchievementOptions rhs) { if (rhs?.dynamicSounds?.sounds == null && lhs?.dynamicSounds?.sounds == null) { return(true); } if (rhs?.dynamicSounds?.sounds == null || lhs?.dynamicSounds?.sounds == null) { return(false); } if (rhs.dynamicSounds.sounds.Length != lhs.dynamicSounds.sounds.Length) { return(false); } foreach (var sound in rhs.dynamicSounds.sounds) { //try to find other sound according to lambda var otherSound = lhs.dynamicSounds.sounds.SingleOrDefault( item => item.pakSoundFile == sound.pakSoundFile && item.soundFile == sound.soundFile); if (otherSound == null) { return(false); } } return(true); }
public static AchievementOptions CreateOneSoundAchievement(string pakSoundPath, string fileSoundPath) { var oneSoundAchievement = new AchievementOptions(); oneSoundAchievement.Initialize(); oneSoundAchievement.fileSoundPath = fileSoundPath; oneSoundAchievement.pakSoundPath = pakSoundPath; return(oneSoundAchievement); }
public void MergeOneSoundAchievementWithDefault() { var defaultAchievement = new AchievementOptions(); defaultAchievement.Initialize(); var oneSoundAchievement = VoicepackSampleCreator.CreateOneSoundAchievement("pakSoundPath", "fileSoundPath"); VoicepackMerger.MergeAchievement(defaultAchievement, oneSoundAchievement); var expectedAchievement = oneSoundAchievement; Assert.IsTrue(VoicepackComparer.AchievementOptionsOneSoundEqual(expectedAchievement, defaultAchievement)); }
/// <summary> /// expects pakAndSoundFiles as an array of dimension [x,2] with x the number of sounds to add /// it expects this format: {{pakSoundfile, SoundFile}, {pakSoundFile,..}, ..} /// </summary> /// <param name="pakAndSoundFiles"></param> /// <returns></returns> public static AchievementOptions CreateDynamicSoundsAchievement(string[,] pakAndSoundFiles) { var nrOfSounds = pakAndSoundFiles.GetLength(0); var dynamicSoundsAchievment = new AchievementOptions(); dynamicSoundsAchievment.Initialize(); var sounds = dynamicSoundsAchievment.dynamicSounds.sounds = new BasicAchievementSound[nrOfSounds]; for (int i = 0; i < nrOfSounds; i++) { sounds[i] = new BasicAchievementSound { pakSoundFile = pakAndSoundFiles[i, 0], soundFile = pakAndSoundFiles[i, 1] }; } return(dynamicSoundsAchievment); }
/// <summary> /// Helper function that gathers all sounds from a achievement, be it old style one sound, or multiple dynamicsounds /// and returns them in one IEnumerable. /// </summary> private static IEnumerable <BasicAchievementSound> GetAllNonDefaultSounds(AchievementOptions achievement) { var sounds = new List <BasicAchievementSound>(); //Add old style one sound if (achievement.fileSoundPath.ToLower().Trim() != _defaultfileSoundPath) { var soundToAdd = new BasicAchievementSound { pakSoundFile = achievement.pakSoundPath, soundFile = achievement.fileSoundPath }; sounds.Add(soundToAdd); } //Add dynamic sounds if (achievement.dynamicSounds?.sounds != null) { sounds.AddRange(achievement.dynamicSounds.sounds); } return(sounds); }
/// <summary> /// Helper function that checks equality of the soundfilenames of the voicepack when it has only 1 sound /// </summary> /// <param name="lhs">left hand side, assumed not to be null</param> /// <param name="rhs">right hand side, assumed not to be null</param> public static bool AchievementOptionsOneSoundEqual(AchievementOptions lhs, AchievementOptions rhs) { return(lhs.fileSoundPath == rhs.fileSoundPath && lhs.pakSoundPath == rhs.pakSoundPath); }