private void OnTriggerEnter2D(Collider2D coll)
    {
        if (coll.tag != photonTag)
        {
            return;
        }

        Photon      photon          = coll.transform.GetComponent <Photon>();
        Rigidbody2D photonRb        = coll.transform.GetComponent <Rigidbody2D>();
        Transform   photonTransform = coll.transform;
        GameObject  photonGO        = coll.gameObject;

        if (!photon.canScatter || photon.curEnergy < minScatterEnergy || photon.lastScatterColl)
        {
            return;
        }

        Vector3 veloDir = photonRb.velocity.normalized;

        float veloIncomingAngle = Vector3.Angle(veloDir, transform.right);

        if (veloIncomingAngle > 90f)
        {
            veloIncomingAngle = 180f - veloIncomingAngle;
        }

        //Debug.Log(veloIncomingAngle);
        if (veloIncomingAngle < minScatterAngle)
        {
            return;
        }

        Vector3 normal;

        if (Vector3.Dot(veloDir, transform.up) > 0)
        {
            normal = transform.up;
        }
        else
        {
            normal = -transform.up;
        }

        if (!doubleSided && Vector3.Dot(veloDir, transform.up) < 0f)
        {
            return;
        }


        // this photon could be scattered

        //Debug.Log(transform.rotation.eulerAngles);
        if (ps)
        {
            ParticleSystem newPs = Instantiate(ps, coll.transform.position,
                                               Quaternion.Euler(
                                                   transform.rotation.eulerAngles.x,
                                                   transform.rotation.eulerAngles.y,
                                                   transform.rotation.eulerAngles.z + 90));

            // newPs.transform.parent = transform;
        }

        float deltaAngle      = scatterAngle / (scatterCount - 1);
        float startAngle      = -scatterAngle / 2f;
        float scatteredEnergy = photon.curEnergy / scatterCount;



        for (int i = 0; i < scatterCount; ++i)
        {
            float currentAngle = startAngle + i * deltaAngle;

            Quaternion scatterRot   = Quaternion.Euler(0f, 0f, currentAngle);
            Vector3    scatteredDir = scatterRot * normal;
            Quaternion newRot       = Quaternion.FromToRotation(Vector3.up, scatteredDir);

            GameObject newPhotonGO = Instantiate(photonGO, photonTransform.position, newRot);
            Photon     newPhoton   = newPhotonGO.GetComponent <Photon>();
            newPhoton.StartScatterImmune(scatterImmuneTime);
            newPhoton.lastScatterColl = scatterColl;
            newPhoton.curEnergy       = scatteredEnergy;
        }

        photon.lastScatterColl = scatterColl;
        photon.InstantDead();
    }