private void OnTriggerEnter2D(Collider2D col)
    {
        //collision with a projectile
        //collision with an enemy
        //IceSkullProjectile
        //Enemy_Projectile p
        if (!Launched)
        {
            EnemyProjectile proj = col.gameObject.GetComponent <EnemyProjectile>();
            if ((proj != null) && (proj.enabled) && (proj.Live) && (CanFreezeProjectiles))
            {
                freezeProjectile(proj);
                GameObject.Destroy(proj.gameObject, 10f);

                return;
            }
        }

        GenericEnemy en = col.gameObject.GetComponent <GenericEnemy>();

        if ((en != null) && (en.Alive) && (!col.isTrigger))
        {
            if (!Launched)
            {
                if (BlizzardField)
                {
                    en.freeze(1.2f);
                    FreezePoof.Play();
                }
            }


            return;
        }
    }
    public void freezeProjectile(EnemyProjectile proj)
    {
        proj.Live    = false;
        proj.enabled = false;
        FrozenProjectile frp = GameObject.Instantiate(FrozenProjectilePrefab, proj.transform.position, proj.transform.rotation).GetComponent <FrozenProjectile>();

        FreezePoof.Play();
        foreach (ParticleSystem p in proj.gameObject.GetComponentsInChildren <ParticleSystem>())
        {
            if (!p.transform.Equals(this.transform))
            {
                p.transform.SetParent(null);
                if (p.main.loop)
                {
                    p.Stop();
                }
            }
            else
            {
                //p.enabled = false;
                p.Stop();
            }
            GameObject.Destroy(p.gameObject, p.main.duration);
        }
        Rigidbody2D rb = proj.GetComponent <Rigidbody2D>();

        if (rb != null)
        {
            GameObject.Destroy(rb);
        }
        frp.transform.SetParent(proj.transform);
        frp.transform.position = frp.transform.position + new Vector3(0f, 0f, -2f);
    }
    private void OnCollisionEnter2D(Collision2D col)
    {
        if (removing)
        {
            return;
        }
        //collision with geometry
        //collision.contacts[0].normal

        GenericEnemy en = col.gameObject.GetComponent <GenericEnemy>();

        if ((en != null) && (en.Alive) && (!col.collider.isTrigger))
        {
            if (CanFreezeEnemies)
            {
                if (Launched)
                {
                    en.freeze(1.2f);
                    FreezePoof.Play();
                    Remove();
                }
                else
                {
                    /*
                     * if (FreezeFieldWhileHeld)
                     * {
                     *  en.freeze(1.2f);
                     *  FreezePoof.Play();
                     * }
                     */
                }
            }


            return;
        }

        EnemyProjectile proj = col.gameObject.GetComponent <EnemyProjectile>();

        if ((proj != null) && (proj.enabled) && (proj.Live) && (CanFreezeProjectiles))
        {
            freezeProjectile(proj);
            Remove();
            return;
        }

        Hazard haz = col.gameObject.GetComponent <Hazard>();

        if ((haz != null) && (haz.enabled) && (!haz.Permafrozen))
        {
            if (CanFreezeHazards)
            {
                freezeHazard(haz);
            }
            Remove();
            return;
        }
        //EnvironmentHazard

        if (col.gameObject.layer == LayerMask.NameToLayer("Geometry"))
        {
            //Hit a wall.
            //Create Ice on this wall
            if (FormsIcePillar)
            {
                Vector2   ndir = col.contacts[0].normal;
                IcePillar p    = GameObject.Instantiate(IcePillarPrefab, col.contacts[0].point, Quaternion.LookRotation(ndir, -Vector3.forward)).GetComponent <IcePillar>();
                //p.transform.Rotate(90f,0f,0f,Space.World);
                p.Lifetime = 5f;
            }


            FreezePoof.Play();
            if (BlizzardField)
            {
                explode();
            }
            Remove();
            return;
        }
    }