public void Initialize() { effect = VehicleEffectsMod.FindEffect(effectName) as SoundEffect; if (effect == null) { Logging.LogWarning("Could not find effect: " + effectName + " for sound effect options"); return; } EventSlide(savedVolume.value); }
private void OnVehicleUpdateFinished() { try { eventVehicleUpdateFinished?.Invoke(); } catch (Exception e) { Logging.LogWarning("Caught an exception when running a VehicleUpdateFinished event on a plugin\nThe exception was:"); Logging.LogException(e); } }
public override void OnFileFound(string path, string name, bool isMod) { SoundEffectsDefinition soundDef = null; var xmlSerializer = new XmlSerializer(typeof(SoundEffectsDefinition)); try { using (var streamReader = new System.IO.StreamReader(path)) { soundDef = xmlSerializer.Deserialize(streamReader) as SoundEffectsDefinition; } } catch (Exception e) { Logging.LogException(e); vehicleEffectsDefParseErrors.Add(name + " - " + e.Message); return; } // We can create the effects during loading. This also means that they will be ready when the // vehicle definitions get parsed because that only happens after all files have been loaded foreach (var effect in soundDef.Effects) { effect.SoundFile = Path.Combine(Path.GetDirectoryName(path), effect.SoundFile); var sound = effect.CreateEffect(); if (sound == null) { vehicleEffectsDefParseErrors.Add(name + " - Unable to create sound effect, see output_log.txt for more details."); continue; } if (!manager.AddEffect(sound)) { if (isMod) { // Only show duplicate effects included with mods as errors to allow authors to include the same effect with multiple assets // Also, mods are loaded first so a mod containing the same effect as an asset will always take priority vehicleEffectsDefParseErrors.Add(name + " - Duplicate sound effect name, ignoring effect."); } Logging.LogWarning("Duplicate Custom Sound Effect " + sound.name + " found and ignored from " + name); GameObject.Destroy(sound.gameObject); continue; } Logging.Log("Loaded Custom Sound Effect " + sound.name + " from " + name); } }
/// <summary> /// Applies a vehicle definition vehicle entry. /// </summary> /// <param name="vehicleDef">Vehicle definition to parse.</param> /// <param name="packageName">Package name used in error messages.</param> /// <param name="backup">Used to store original effect array.</param> /// <param name="parseErrors">HashSet to add parse errors to.</param> /// <param name="noParseErrors">Optional: If true no vehicle related parse errors are given.</param> /// <param name="vehicleDefPrefab">Optional: VehicleInfo to apply definition to.</param> public static void ParseVehicleDefinition(VehicleEffectsDefinition.Vehicle vehicleDef, string packageName, ref Dictionary <VehicleInfo, VehicleInfo.Effect[]> backup, ref HashSet <string> parseErrors, bool noParseErrors = false, VehicleInfo vehicleDefPrefab = null) { if (vehicleDef?.Name == null) { if (!noParseErrors) { parseErrors.Add(packageName + " - Vehicle name missing."); } return; } if (vehicleDefPrefab == null) { vehicleDefPrefab = FindVehicle(vehicleDef.Name, packageName); } if (vehicleDefPrefab == null) { if (!noParseErrors) { parseErrors.Add(packageName + " - Vehicle with name " + vehicleDef.Name + " not loaded."); } return; } if (vehicleDef.Effects == null || vehicleDef.Effects.Count == 0) { if (!noParseErrors) { parseErrors.Add(packageName + " - No effects specified for " + vehicleDef.Name + "."); } return; } if (vehicleDef.ApplyToTrailersOnly) { HashSet <VehicleInfo> trailers = new HashSet <VehicleInfo>(); foreach (var trailer in vehicleDefPrefab.m_trailers) { if (!trailers.Contains(trailer.m_info)) { trailers.Add(trailer.m_info); } } foreach (var trailer in trailers) { var trailerDef = new VehicleEffectsDefinition.Vehicle(); trailerDef.Name = trailer.name; trailerDef.Effects = vehicleDef.Effects; ParseVehicleDefinition(trailerDef, packageName, ref backup, ref parseErrors, noParseErrors, trailer); } return; } // Backup default effects array if (!backup.ContainsKey(vehicleDefPrefab)) { var effects = new VehicleInfo.Effect[vehicleDefPrefab.m_effects.Length]; vehicleDefPrefab.m_effects.CopyTo(effects, 0); backup.Add(vehicleDefPrefab, effects); } var vehicleEffectsList = new List <VehicleInfo.Effect>(); vehicleEffectsList.AddRange(vehicleDefPrefab.m_effects); foreach (var effectDef in vehicleDef.Effects) { ParseEffectDefinition(vehicleDef, effectDef, vehicleEffectsList, ref parseErrors); } // Remove and log null effects for (int i = vehicleEffectsList.Count - 1; i >= 0; i--) { if (vehicleEffectsList[i].m_effect == null) { Logging.LogWarning("Found effect that is NULL for vehicle " + vehicleDef.Name + " at index " + i + ", removing."); vehicleEffectsList.RemoveAt(i); } } // Update the VehicleInfo with the new effects vehicleDefPrefab.m_effects = vehicleEffectsList.ToArray(); // taken from VehicleInfo.InitializePrefab if (vehicleDefPrefab.m_effects != null) { for (int j = 0; j < vehicleDefPrefab.m_effects.Length; j++) { if (vehicleDefPrefab.m_effects[j].m_effect != null) { vehicleDefPrefab.m_effects[j].m_effect.InitializeEffect(); } } } }