protected IEnumerator DemolishStructureOverTime( ) { while (structure == null) { yield return(null); } Debug.Log("Calling destroy structure on " + structure.name + " from demolition controller"); structure.DestroyStructure(); Transform explosionSource = gameObject.FindOrCreateChild("ExplosionSource").transform; double timeStarted = WorldClock.AdjustedRealTime; List <ExplosionTemplate> explosions = new List <ExplosionTemplate> (); explosions.AddRange(State.Explosions); while (explosions.Count > 0) { double currentTime = WorldClock.AdjustedRealTime; for (int i = explosions.LastIndex(); i >= 0; i--) { ExplosionTemplate explosion = explosions [i]; if (explosion.Delay < currentTime - timeStarted) { explosionSource.position = transform.position + explosion.Position; State.ExplosionDamage.Point = explosionSource.position; State.ExplosionDamage.SenderName = "Explosion"; FXManager.Get.SpawnExplosion( explosion.Type, State.ExplosionDamage.Point, explosion.Radius, explosion.ForceAtEdge, explosion.MinimumForce, explosion.Duration, State.ExplosionDamage); MasterAudio.PlaySound(MasterAudio.SoundType.Explosions, explosionSource, explosion.ExplosionSound); Player.Local.DoEarthquake(explosion.Duration, explosion.BombShake); explosions.RemoveAt(i); } } yield return(null); } GameObject.Destroy(explosionSource.gameObject, 0.5f); Finish(); yield break; }
public override void OnEditorRefresh() { State.Explosions.Clear(); foreach (Transform child in transform) { if (child.name.Contains("Explosion")) { ExplosionTemplate explosion = new ExplosionTemplate(); explosion.Delay = float.Parse(child.name.Replace("Explosion ", "")); explosion.Radius = child.transform.localScale.x; explosion.Position = child.position - transform.position; explosion.Duration = 0.25f; explosion.ForceAtEdge = 1f; explosion.Type = ExplosionType.Simple; State.Explosions.Add(explosion); State.TotalDuration = Mathf.Max(State.TotalDuration, explosion.Delay); } } }