using System;
using System.Collections;
using UnityEngine;
using Random = UnityEngine.Random;

namespace UnityStandardAssets.Effects
{
    public class ExplosionFireAndDebris : MonoBehaviour
    {
        public Transform[] debrisPrefabs;
        public Transform firePrefab;
        public int numDebrisPieces = 0;
        public int numFires = 0;


        private IEnumerator Start()
        {
            float multiplier = GetComponent<ParticleSystemMultiplier>().multiplier;

            for (int n = 0; n < numDebrisPieces*multiplier; ++n)
            {
                var prefab = debrisPrefabs[Random.Range(0, debrisPrefabs.Length)];
                Vector3 pos = transform.position + Random.insideUnitSphere*3*multiplier;
                Quaternion rot = Random.rotation;
                Instantiate(prefab, pos, rot);
            }

            // wait one frame so these new objects can be picked up in the overlapsphere function
            yield return null;

            float r = 10*multiplier;
            var cols = Physics.OverlapSphere(transform.position, r);
            foreach (var col in cols)
            {
                if (numFires > 0)
                {
                    RaycastHit fireHit;
                    Ray fireRay = new Ray(transform.position, col.transform.position - transform.position);
                    if (col.Raycast(fireRay, out fireHit, r))
                    {
                        AddFire(col.transform, fireHit.point, fireHit.normal);
                        numFires--;
                    }
                }
            }

            float testR = 0;
            while (numFires > 0 && testR < r)
            {
                RaycastHit fireHit;
                Ray fireRay = new Ray(transform.position + Vector3.up, Random.onUnitSphere);
                if (Physics.Raycast(fireRay, out fireHit, testR))
                {
                    AddFire(null, fireHit.point, fireHit.normal);
                    numFires--;
                }
                testR += r*.1f;
            }
        }


        private void AddFire(Transform t, Vector3 pos, Vector3 normal)
        {
            pos += normal*0.5f;
            Transform fire = (Transform) Instantiate(firePrefab, pos, Quaternion.identity);
            fire.parent = t;
        }
    }
}