示例#1
0
 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);
 }
示例#2
0
 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);
     }
 }
示例#3
0
        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);
            }
        }
示例#4
0
        /// <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();
                    }
                }
            }
        }