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);
         }
     }
 }