/// <summary> /// Tries to attach the given siren to the vehicle, replacing any existing siren. /// </summary> /// <param name="aVehicle">The vehicle.</param> /// <param name="aSiren">The siren.</param> /// <param name="anInitialState">The initial siren state.</param> /// <param name="aPlayer">The calling player.</param> private void AttachSirens(BaseVehicle aVehicle, Siren aSiren, SirenController.States anInitialState, IPlayer aPlayer = null) { DetachSirens(aVehicle); SirenController theController = CreateSirenController(aVehicle, aSiren); if (aVehicle as ModularCar) { if (aSiren.Modules == null) { Message(aPlayer, I18N_NOT_SUPPORTED, aSiren.Name, KEY_MODULAR_CAR); DetachSirens(aVehicle); return; } foreach (BaseVehicleModule eachModule in aVehicle.GetComponentsInChildren <BaseVehicleModule>()) { SpawnAttachments(aSiren.Modules, aPlayer, theController, eachModule); } } else if (!SpawnAttachments(aSiren.Vehicles, aPlayer, theController, aVehicle)) { Message(aPlayer, I18N_NOT_SUPPORTED, aSiren.Name, aVehicle.PrefabName); DetachSirens(aVehicle); return; } theController.SetState(anInitialState); }
/// <summary> /// Detaches the siren from a vehicle and removes all corresponding entities. /// </summary> /// <param name="aVehicle"> The vehicle.</param> /// <returns>True, if a siren was removed.</returns> private bool DetachSirens(BaseVehicle aVehicle) { SirenController theController = aVehicle.GetComponent <SirenController>(); if (theController) { foreach (BaseEntity eachEntity in aVehicle.GetComponentsInChildren <BaseEntity>()) { if (theController.NetIDs.Contains(eachEntity.net.ID)) { Destroy(eachEntity); } } UnityEngine.Object.DestroyImmediate(theController); return(true); } return(false); }