public void SetFailureInfo(BaseFailure thisFailure) { if (this.thisFailure == null) { this.thisFailure = thisFailure; } }
public void OnTriggerEnter(Collider thingICollidedWith) { if (thingICollidedWith.transform.root == playersVehicle.transform) { Health health = Traverse.Create(playeractor).Field("h").GetValue() as Health; if (health.currentHealth > 10) { playeractor.health.Damage(birdDamage, new Vector3(0, 0, 0), Health.DamageTypes.Impact, birdActor, "Bird Strike"); } Debug.Log("Bird Strike!!"); squawk.Play(); BaseFailure fail = getRandomFailure(); System.Random rand = new System.Random(); double chance = rand.NextDouble(); if (fail.failureName.Contains("Engine Failure") && chance <= engineFailureRate) { fail.runFailure(); } else { Debug.Log($"Is {chance} <= {fail.failureRate * failureRateMultiplier}?"); if (chance <= fail.failureRate * failureRateMultiplier) { Debug.Log($"Triggering failure {fail.failureName}"); fail.runFailure(null, true); } } } }
private Dictionary <string, List <BaseFailure> > GetFailures() { // Getting standard asset bundle which contains some warning sounds and etc string assetPath = Path.Combine(Application.dataPath, "Managed", "basefailure.dll"); AssetBundle baseFailureAssetBundle = AssetBundle.LoadFromFile(assetPath); AudioClip genericWarning = baseFailureAssetBundle.LoadAsset <AudioClip>("ttsw_warning"); // The parent object we want to get the objects from Type parentType = typeof(BaseFailure); // Getting list of all subtypes of BaseFailure Assembly assembly = Assembly.GetExecutingAssembly(); Type[] types = assembly.GetTypes(); IEnumerable <Type> subclasses = types.Where(t => t.BaseType == parentType); // List of failures after theyre created Dictionary <string, List <BaseFailure> > failures = new Dictionary <string, List <BaseFailure> >(); Log("Getting available failures..."); foreach (Type source in subclasses) { Log($"Creating Game Object {source.Name}"); GameObject newFailure = new GameObject(source.Name, source); Log($"Creating BaseFailure"); BaseFailure failure = newFailure.GetComponent <BaseFailure>(); failure.warningAudio = genericWarning; failure.baseFailureAssetBundle = baseFailureAssetBundle; DontDestroyOnLoad(failure); Log($"Done loading."); if (failures.ContainsKey(failure.failureCategory)) { failures[failure.failureCategory].Add(failure); } else { List <BaseFailure> newlist = new List <BaseFailure>(1) { failure }; failures.Add(failure.failureCategory, newlist); } } Log("Done getting Failures!"); return(failures); }