Ejemplo n.º 1
0
    void Shoot()
    {
        Vector2 mousePosition     = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y);
        Vector2 firePointPosition = new Vector2(firePoint.position.x, firePoint.position.y);

        Vector2 shotDir = new Vector2();

        if (Vector2.Distance(mousePosition, firePointPosition) > 0.5f)
        {
            shotDir = mousePosition - firePointPosition;
        }
        else
        {
            shotDir = firePoint.parent.up;
        }

        shotDir.Normalize();

        shotDir.x += Random.Range(-PlayerStats.playerAimOffset, PlayerStats.playerAimOffset);
        shotDir.y += Random.Range(-PlayerStats.playerAimOffset, PlayerStats.playerAimOffset);

        shotDir.Normalize();

        RaycastHit2D hit = Physics2D.Raycast(firePointPosition, shotDir, 100, whatToHit);

        if (Time.time >= timeToSpawnEffect)
        {
            if (hit.collider != null)
            {
                Effect(hit);
            }
            else
            {
                Effect(new Vector3(shotDir.x, shotDir.y, 0));
            }
            timeToSpawnEffect = Time.time + 1 / effectSpawnRate;
        }
        Debug.DrawLine(firePointPosition, shotDir * 100, Color.cyan);
        if (hit.collider != null)
        {
            Debug.DrawLine(firePointPosition, hit.point, Color.red);
            //Debug.Log ("We hit " + hit.collider.name + " and did " + damage + " damage.");

            if (hit.collider.tag == "Enemy")
            {
                EnemyMaster em = hit.collider.GetComponent <EnemyMaster>();
                em.AdjustHealth(DoDamageCalculation());
                hit.collider.GetComponent <Rigidbody2D>().AddForce(transform.up * enemyKnockBack, ForceMode2D.Impulse);
            }
        }

        rb.AddRelativeForce(-transform.up * knockBack, fMode);
    }