Beispiel #1
0
 void TryDestory(Collision2D coll)
 {
     if (coll.gameObject.tag == photonTag)
     {
         Photon photon = coll.transform.GetComponent<Photon>();
         photon.InstantDead();
     }
 }
Beispiel #2
0
    void OnCollisionEnter2D(Collision2D coll)
    {
        Debug.Log("Hit!");

        if (coll.gameObject.tag == photonTag)
        {
            Photon photon = coll.transform.GetComponent <Photon>();
            photon.InstantDead();
            if (targetStatus != null)
            {
                targetStatus.addScore(1);
            }
        }
    }
Beispiel #3
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == photonTag)
        {
            Photon photon = collision.transform.GetComponent <Photon>();

            points = photon.curEnergy;

            photon.InstantDead();
            if (targetStatus != null && collision.gameObject.GetComponent <Photon>().shooter == shooter)
            {
                //Debug.Log("Hit!");
                //Debug.Log("in");

                //Debug.Log(photon.transform.position);

                //Debug.Log(photon.GetComponent<Rigidbody2D>().velocity);

                RaycastHit2D   hit = Physics2D.Raycast(photon.transform.position, photon.GetComponent <Rigidbody2D>().velocity, 1f);
                ParticleSystem newPs;
                if (hit == true)
                {
                    newPs = Instantiate(ps, (Vector3)hit.point, Quaternion.Euler(0, 0, 0), transform);
                    Destroy(newPs, 1);
                    //Debug.Log("here??");
                    TryPlayHitSound();
                }
                else
                {
                    //hit = Physics2D.Raycast(photon.transform.position, -photon.GetComponent<Rigidbody2D>().velocity, 1f);
                    //if(hit == true)
                    //{
                    //    newPs = Instantiate(ps, (Vector3)hit.point, Quaternion.Euler(0, 0, 0), transform);
                    //    Destroy(newPs, 1);
                    //    //Debug.Log("here?????");
                    //    TryPlayHitSound();
                    //}

                    newPs = Instantiate(ps, collision.transform.position, Quaternion.Euler(0, 0, 0), transform);
                    Destroy(newPs, 1);
                    //Debug.Log("here?????");
                    TryPlayHitSound();
                }
                //Debug.Log("damn");
                selfStatus.MinusHealth(points);
                //targetStatus.addScore(1);
            }
        }
    }
    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();
    }