public void OnTriggerEnter2D(Collider2D other)
    {
        Player player = other.GetComponent <Player>();

        if (player == null)
        {
            return;
        }
        PathedProjectile projectile = gameObject.GetComponent <PathedProjectile>();

        if (projectile != null)
        {
            projectile.CreatEffect();
        }

        Debug.Log("Hit Player");
        player.TakeDamage(damageToGive);
        Controller2D controller    = player.GetComponent <Controller2D>();
        Vector2      totalVelocity = (Vector2)player.velocity + velocity;

        ImpactReciever impactReciever = player.GetComponent <ImpactReciever>();
        Vector3        direction      = player.transform.position - transform.position;

        impactReciever.AddImpact(direction, Mathf.Clamp(Mathf.Abs(totalVelocity.magnitude), 10, 20));
    }
Пример #2
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetButton("Fire1"))
        {
            charge = Mathf.Clamp(charge + Time.deltaTime * 4.0f, 1.0f, 5.0f);
        }

        if (Input.GetButtonUp("Fire1"))
        {
            LayerMask layerMask = LayerMask.GetMask("Player", "TransparentFX");
            layerMask = ~layerMask;

            RaycastHit hit;
            if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, Mathf.Infinity, layerMask))
            {
                Vector3 hitPos = hit.point;

                StartCoroutine(DisplayShotRadius(hitPos));

                Collider[] colliders = Physics.OverlapSphere(hitPos, radius * charge);
                foreach (Collider repeledObject in colliders)
                {
                    Rigidbody rb = repeledObject.GetComponent <Rigidbody>();

                    if (rb != null)
                    {
                        rb.AddExplosionForce(charge * 150.0f, hitPos, radius * charge, 1.0f);
                    }
                    else
                    {
                        ImpactReciever impactReciever = repeledObject.GetComponent <ImpactReciever>();

                        if (impactReciever)
                        {
                            Vector3 dir = repeledObject.transform.position - hitPos;
                            //float force = Mathf.Clamp((charge * 150.0f) / 3.0f, 0.0f, 100.0f);
                            impactReciever.AddImpact(dir, charge * 20.0f);
                        }
                    }
                }
            }

            charge = 0.0f;
        }
    }
Пример #3
0
    void Start()
    {
        Collider [] ObjectsColliding = Physics.OverlapSphere(transform.position, radius);
        foreach (Collider objectColliding in ObjectsColliding)
        {
            ImpactReciever ir = objectColliding.GetComponent <ImpactReciever>();
            if (ir != null)
            {
                ir.AddImpact(ir.transform.position - transform.position, force);
                objectColliding.GetComponent <PlayerHealth>().takeDamage(damage);
            }
            else
            {
                Rigidbody rb = objectColliding.GetComponent <Rigidbody>();

                if (rb != null)
                {
                    rb.AddExplosionForce(force, transform.position, radius);
                }
            }
        }
    }