public override void Activate()
    {
        if (isActive)
        {
            Deactivate();
            shouldActivate = 10;
            return;
        }
        if (shouldActivate > 0)
        {
            shouldActivate = 0;
        }
        isActive = true;
        if (currentMagic != null)
        {
            currentMagic.Deactivate();
        }
        print("emissionRate: " + emissionRate);
        magicParent = new GameObject(myElement.ToString() + " Magic Parent");
        magicParent.transform.position = transform.position;
        GameObject magic = Instantiate(MagicList.elementMagicList[myElement], magicParent.transform) as GameObject;

        magic.name   = myElement.ToString() + " Magic PS";
        currentMagic = magic.GetComponent <ParticleMagic>();
        currentMagic.SetElement(myElement);
        ClipperTest ct = magic.GetComponent <ClipperTest>();

        if (ct == null)
        {
            magic.AddComponent <ClipperTest>();
        }
        magicCollider = magic.GetComponent <Collider2D>();
        if (currentMagic != null)
        {
            Debug.Log("Activating the " + myElement.ToString() + " Magic");
            if (autoActivate)
            {
                Debug.Log("There ain't no shape, so we just shooting the magic");
                currentMagic.Activate();
            }
            else
            {
                Debug.Log("Waiting for the Form MC to activate the magic");
            }
        }
        else
        {
            Debug.LogError("YO, you forgot to put the ParticleMagic on " + myElement.ToString());
        }
    }
    void OnParticleCollision(GameObject other)
    {
        ParticlePhysicsExtensions.GetCollisionEvents(ps, other, psCollisionEvents);
        ParticleMagic pm = other.gameObject.GetComponent <ParticleMagic>();

        if (pm != null)
        {
            solidMagicCollision          = true;
            solidMagicCollisionResetTime = .1f;
            ActivateOnCollision.Value()();

            //     // List<Vector3> collisionPoints = new List<Vector3>( psCollisionEvents.Count );
            for (int i = 0; i < psCollisionEvents.Count; i++)
            {
                ParticleCollisionData pcd = new ParticleCollisionData();
                pcd.pointOfCollision = psCollisionEvents[i].intersection;
                pcd.velocity         = psCollisionEvents[i].velocity;
                if (myCollider.isTrigger)
                {
                    ClipperTest ct = other.gameObject.GetComponent <ClipperTest>();
                    pcd.elementCollision = myMagic.GetElement();
                    ct.AddCollisionPoints(pcd);
                    // print("ADDING TO OTHER CT");
                }
                else
                {
                    pcd.elementCollision = pm.GetElement();
                    collisionPoints.Add(pcd);
                }
                float markerLength = .2f;
                Debug.DrawLine(psCollisionEvents[i].intersection - Vector3.up * markerLength / 2, psCollisionEvents[i].intersection + Vector3.up * markerLength / 2, Color.blue);
                Debug.DrawLine(psCollisionEvents[i].intersection - Vector3.right * markerLength / 2, psCollisionEvents[i].intersection + Vector3.right * markerLength / 2, Color.blue);
                // print("ParticleCollision object " + psCollisionEvents[i].intersection );
            }
        }
    }