Ejemplo n.º 1
0
 void PlayerCheckIfShooting()
 {
     if (Input.GetButton("Fire2") && player.isDead == false) // Holding right click
     {
         Vector2 mousePosition = new Vector2(Camera.main.ScreenToWorldPoint(Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y);
         if (Vector2.Distance(mousePosition, player.transform.position) > 0.4 && isBroken == false && currentAmmoAmount > 0)
         {
             if (fireRate == 1)
             {
                 // print("fire rate is 1");
                 if (Input.GetButtonDown("Fire1") && coolDownFinished) // Left click while holding right click
                 {
                     Shoot();
                     DecreaseAmmo();
                     DecreaseDurability();
                     if (isShotgun || isBoltAction)
                     {
                         coolDownFinished = false;
                         Invoke("CooledDown", coolDownTime);
                     }
                     produceSoundTriggerScript.SoundTrigger(soundRadius);
                     audioManager.PlaySound(gunfireSoundName);
                 }
             }
             else
             {
                 if (Input.GetButton("Fire1") && Time.time > timeToFire) // For automatic guns
                 {
                     timeToFire = Time.time + 1 / fireRate;
                     Shoot();
                     DecreaseAmmo();
                     DecreaseDurability();
                     produceSoundTriggerScript.SoundTrigger(soundRadius);
                     audioManager.PlaySound(gunfireSoundName);
                 }
             }
         }
         else if (Input.GetButtonDown("Fire1") && (isBroken || currentAmmoAmount <= 0))
         {
             audioManager.PlaySound("Empty Clip");
         }
     }
 }
Ejemplo n.º 2
0
    IEnumerator EnemyShoot()
    {
        StartCoroutine(Wait());

        Vector2 firePointPosition = new Vector2(firePoint.position.x, firePoint.position.y);
        Vector2 playerPosition    = new Vector2(player.transform.position.x, player.transform.position.y);

        if (enemyMovementScript.enemyToAttack != null && enemyMovementScript.currentTarget != null && enemyMovementScript.currentTarget != player.transform)
        {
            Vector2 enemyToAttackPosition = new Vector2(enemyMovementScript.enemyToAttack.position.x, enemyMovementScript.enemyToAttack.position.y);
            hit = Physics2D.Raycast(firePointPosition, (enemyToAttackPosition - firePointPosition), 100f, whatToHitWhileHacked);
        }
        else if (enemyScript.distanceToPlayer < 2f)
        {
            hit = Physics2D.Raycast(firePointPosition, (playerPosition - firePointPosition), 100f, whatToHit);
        }
        else
        {
            hit = Physics2D.Raycast(firePointPosition, (playerPosition - firePointPosition) + new Vector2(0, Random.Range(-finalAccuracyFactor, finalAccuracyFactor)), 100f, whatToHit);
        }

        Vector3 hitPos;
        Vector3 hitNormal;

        if (initialWaitToShootTime == 0)
        {
            if (hit.collider != null)
            {
                Player player = hit.collider.GetComponent <Player>();
                Victim victim = hit.collider.GetComponent <Victim>();
                Enemy  enemy  = hit.collider.GetComponent <Enemy>();

                if (player != null || victim != null || enemy != null)
                {
                    hitPos    = hit.point;
                    hitNormal = hit.normal;

                    if (isShotgun)
                    {
                        if (Vector2.Distance(firePointPosition, hitPos) >= 3.2 && Vector2.Distance(firePointPosition, hitPos) < 5)
                        {
                            if (player != null)
                            {
                                player.DamagePlayer(damage / 2);
                            }
                            else if (victim != null)
                            {
                                victim.DamageVictim(damage / 2);
                            }
                            else if (enemy != null)
                            {
                                enemy.DamageEnemy(damage / 2);
                                if (enemy.isDead == false)
                                {
                                    enemy.GetComponent <EnemyMovement>().currentState  = EnemyMovement.State.Attack;
                                    enemy.GetComponent <EnemyMovement>().enemyToAttack = transform.root.transform;
                                }
                            }
                            // Debug.Log("We hit " + hit.collider.name + " and did " + damage / 2 + " damage.");
                        }
                        else if (Vector2.Distance(firePointPosition, hitPos) >= 5)
                        {
                            if (player != null)
                            {
                                player.DamagePlayer(1);
                            }
                            else if (victim != null)
                            {
                                victim.DamageVictim(1);
                            }
                            else if (enemy != null)
                            {
                                enemy.DamageEnemy(1);
                                if (enemy.isDead == false)
                                {
                                    enemy.GetComponent <EnemyMovement>().currentState  = EnemyMovement.State.Attack;
                                    enemy.GetComponent <EnemyMovement>().enemyToAttack = transform.root.transform;
                                }
                            }
                            // Debug.Log("We hit " + hit.collider.name + " and did " + 1 + " damage.");
                        }
                        else
                        {
                            if (player != null)
                            {
                                player.DamagePlayer(damage);
                            }
                            else if (victim != null)
                            {
                                victim.DamageVictim(damage);
                            }
                            else if (enemy != null)
                            {
                                enemy.DamageEnemy(damage);
                                if (enemy.isDead == false)
                                {
                                    enemy.GetComponent <EnemyMovement>().currentState  = EnemyMovement.State.Attack;
                                    enemy.GetComponent <EnemyMovement>().enemyToAttack = transform.root.transform;
                                }
                            }
                            // Debug.Log("We hit " + hit.collider.name + " and did " + damage + " damage.");
                        }
                    }
                    else
                    {
                        if (player != null)
                        {
                            player.DamagePlayer(damage);
                        }
                        else if (victim != null)
                        {
                            victim.DamageVictim(damage);
                        }
                        else if (enemy != null)
                        {
                            enemy.DamageEnemy(damage);
                            if (enemy.isDead == false)
                            {
                                enemy.GetComponent <EnemyMovement>().currentState  = EnemyMovement.State.Attack;
                                enemy.GetComponent <EnemyMovement>().enemyToAttack = transform.root.transform;
                            }
                        }
                        // Debug.Log("We hit " + hit.collider.name + " and did " + damage + " damage.");
                    }

                    CreateHitParticle(hitPos, hitNormal);
                }
            }

            if (Time.time >= timeToSpawnEffect)
            {
                if (hit.collider == null)
                {
                    hitPos    = (playerPosition - firePointPosition) * 9999;
                    hitNormal = new Vector3(9999, 9999, 9999);
                }
                else
                {
                    hitPos    = hit.point;
                    hitNormal = hit.normal;
                }

                Effect(hitPos, hitNormal);
                timeToSpawnEffect = Time.time + 1 / effectSpawnRate;
            }

            produceSoundTriggerScript.SoundTrigger(soundRadius);
            audioManager.PlaySound(gunfireSoundName);

            DecreaseAmmo();
            DecreaseDurability();

            isCoolingDown = true;
            yield return(new WaitForSeconds(coolDownTime));

            isCoolingDown = false;
        }
    }