using UnityEngine;
using System.Collections;

// This one isn't ready for prime time and is not in the menu. Feel free to modify or complete. :)
[RequireComponent (typeof (Detonator))]
public class DetonatorCloudRing : DetonatorComponent
{
	private float _baseSize = 1f;
	private float _baseDuration = 5f;
	private Vector3 _baseVelocity = new Vector3(155f, 5f, 155f);
	private Color _baseColor = Color.white;
	private Vector3 _baseForce = new Vector3(0.162f, 2.56f, 0f);
	
	private GameObject _cloudRing;
	private DetonatorBurstEmitter _cloudRingEmitter;
	public Material cloudRingMaterial;
	
	override public void Init()
	{
		//make sure there are materials at all
		FillMaterials(false);
		BuildCloudRing();
	}
	
	//if materials are empty fill them with defaults
	public void FillMaterials(bool wipe)
	{
		if (!cloudRingMaterial || wipe)
		{
			cloudRingMaterial = MyDetonator().smokeBMaterial;
		}
	}

	//Build these to look correct at the stock Detonator size of 10m... then let the size parameter
	//cascade through to the emitters and let them do the scaling work... keep these absolute.
    public void BuildCloudRing()
    {
		_cloudRing = new GameObject("CloudRing");
		_cloudRingEmitter = (DetonatorBurstEmitter)_cloudRing.AddComponent("DetonatorBurstEmitter");
		_cloudRing.transform.parent = this.transform;
		_cloudRing.transform.localPosition = localPosition;
		_cloudRingEmitter.material = cloudRingMaterial;
		_cloudRingEmitter.useExplicitColorAnimation = true;
    }
	
	public void UpdateCloudRing()
	{
		_cloudRing.transform.localPosition = Vector3.Scale(localPosition,(new Vector3(size, size, size)));
		
		_cloudRingEmitter.color = color;
		_cloudRingEmitter.duration = duration;
		_cloudRingEmitter.durationVariation = duration/4f;
		_cloudRingEmitter.count = (int)(detail * 50f);
		_cloudRingEmitter.particleSize = 10f;
		_cloudRingEmitter.sizeVariation = 2f;
		_cloudRingEmitter.velocity = velocity;
		_cloudRingEmitter.startRadius = 3f;
		_cloudRingEmitter.size = size;
		_cloudRingEmitter.force = force;
		_cloudRingEmitter.explodeDelayMin = explodeDelayMin;
		_cloudRingEmitter.explodeDelayMax = explodeDelayMax;
		
		//make the starting colors more intense, towards white
		Color color1 = Color.Lerp(color, (new Color(.2f, .2f, .2f, .6f)), 0.5f);
		Color color2 = new Color(.2f, .2f, .2f, .5f);
		Color color3 = new Color(.2f, .2f, .2f, .3f);
		Color color4 = new Color(.2f, .2f, .2f, 0f);
		
		_cloudRingEmitter.colorAnimation[0] = color1;
		_cloudRingEmitter.colorAnimation[1] = color2;
		_cloudRingEmitter.colorAnimation[2] = color2;
		_cloudRingEmitter.colorAnimation[3] = color3;
		_cloudRingEmitter.colorAnimation[4] = color4;
	}

    public void Reset()
    {
		FillMaterials(true);
		on = true;
		size = _baseSize;
		duration = _baseDuration;
		explodeDelayMin = 0f;
		explodeDelayMax = 0f;
		color = _baseColor;
		velocity = _baseVelocity;
		force = _baseForce;
    }

    override public void Explode()
    {
		if (on)
		{
			UpdateCloudRing();
			_cloudRingEmitter.Explode();
		}
    }

}


