Пример #1
0
        public void Fire()
        {
            var shop  = GameObject.FindGameObjectWithTag("Shop");
            var pause = GameObject.FindGameObjectWithTag("Pause");

            if (weaponType != WeaponType.Melee && weaponType != WeaponType.Grenade && shop == null && pause == null)
            {
                if (Time.time > nextFireTime && !reloading && canShot && !controller.isClimbing) //Allow fire statement
                {
                    if (currentAmmo > 0)
                    {
                        currentAmmo -= 1;

                        PlayFX();

                        //Getting random damage from minimum and maximum damage.
                        calculatedDamage = Random.Range(damageMin, damageMax);

                        ProjectilesManager();

                        recoilComponent.AddRecoil(recoil);

                        //Calculating when next fire call allowed
                        nextFireTime = Time.time + fireRate;
                    }
                    else
                    {
                        if (!reloading && autoReload)
                        {
                            ReloadBegin();
                        }
                        else
                        {
                            audioSource.PlayOneShot(emptySFX);
                        }

                        nextFireTime = Time.time + fireRate;
                    }
                }
            }
            else if (weaponType == WeaponType.Melee)
            {
                if (Time.time > nextFireTime) //Allow fire statement
                {
                    audioSource.Stop();
                    audioSource.PlayOneShot(shotSFX);
                    animator.Play("Attack");
                    Invoke("MeleeHit", meleeHitTime);
                    recoilComponent.AddRecoil(recoil);
                    nextFireTime = Time.time + meleeAttackRate;
                }
            }
            else if (weaponType == WeaponType.Grenade && !isThrowingGrenade)
            {
                animator.SetTrigger("Throw");
                isThrowingGrenade = true;
            }
        }
Пример #2
0
 private IEnumerator ShootContinuoulsy()
 {
     while (ammo.AmmoAmount > 0)
     {
         animator.SetBool("Shoot", true);
         ammo.ReduceAmmoAmount();
         DisplayMuzzleFlash();
         ProcessRayCast();
         RequestBullet();
         recoil.AddRecoil(recoilVector);
         yield return(new WaitForSeconds(0.1f));
     }
     animator.SetBool("Shoot", false);
 }
Пример #3
0
    void Update()
    {
        if (allow)
        {
            bool  clickSwitchGun    = !isPause && Input.GetButtonDown("SwitchGun");
            bool  clickTakeMedicine = !isPause && Input.GetButtonDown("TakeMedicine");
            bool  pressFire         = !isPause && Input.GetKey(KeyCode.Mouse0);
            bool  pressReload       = !isPause && Input.GetKey(KeyCode.R);
            float rotationX         = isPause ? 0 : Input.GetAxis("Mouse X");
            float rotationY         = isPause ? 0 : Input.GetAxis("Mouse Y");
            bool  pressJump         = !isPause && Input.GetKey(KeyCode.Space);
            bool  pressRun          = !isPause && Input.GetKey(KeyCode.LeftShift);
            bool  pressW            = !isPause && Input.GetKey(KeyCode.W);
            bool  pressS            = !isPause && Input.GetKey(KeyCode.S);
            bool  pressA            = !isPause && Input.GetKey(KeyCode.A);
            bool  pressD            = !isPause && Input.GetKey(KeyCode.D);
            bool  pressSight        = !isPause && Input.GetKey(KeyCode.Mouse1);

            if (clickSwitchGun)
            {
                SwitchGun();
            }
            if (clickTakeMedicine)
            {
                character.TakeMedicine();
            }
            float        recoilResult = 0.0f;
            Gun.GunState gunState     = activeGun.Action(pressFire, pressReload, out recoilResult);
            recoil.AddRecoil(recoilResult);
            float recover = recoil.Recover(Time.deltaTime);
            if (sniperSight.GetSight())
            {
                rotationX *= 0.45f;
                rotationY *= 0.45f;
            }
            transform.Rotate(0.0f, rotationX, 0.0f);
            cameraTransform.Rotate(-rotationY - recoilResult + recover, 0.0f, 0.0f);
            if (cameraTransform.localEulerAngles.x <= 180.0f && cameraTransform.localEulerAngles.x > 85.0f)
            {
                cameraTransform.localRotation = Quaternion.Euler(85.0f, 0, 0);
            }
            else if (cameraTransform.localEulerAngles.x > 180.0f && cameraTransform.localEulerAngles.x < 275.0f)
            {
                cameraTransform.localRotation = Quaternion.Euler(275.0f, 0, 0);
            }
            Vector3 velocity;
            bool    isOnGround = characterController.isGrounded;
            if (!isOnGround)
            {
                velocityY += gravity * Time.deltaTime;
            }
            else
            {
                if (pressJump)
                {
                    velocityY = jumpVelocity;
                }
                else
                {
                    velocityY = 0.0f;
                }
            }
            if (velocityY < -maxVelocityY)
            {
                velocityY = -maxVelocityY;
            }
            int direction = 4;
            if (pressW && !pressS)
            {
                if (pressA && !pressD)
                {
                    direction = 0;
                }
                else if (pressD && !pressA)
                {
                    direction = 2;
                }
                else
                {
                    direction = 1;
                }
            }
            else if (pressS && !pressW)
            {
                if (pressA && !pressD)
                {
                    direction = 6;
                }
                else if (pressD && !pressA)
                {
                    direction = 8;
                }
                else
                {
                    direction = 7;
                }
            }
            else
            {
                if (pressA && !pressD)
                {
                    direction = 3;
                }
                else if (pressD && !pressA)
                {
                    direction = 5;
                }
            }
            bool isWalking = direction != 4;
            velocity.x = pressRun ? runScalarVelocityMultiple * walkVelocity [direction].x : walkVelocity [direction].x;
            velocity.z = pressRun ? runScalarVelocityMultiple * walkVelocity [direction].z : walkVelocity [direction].z;
            velocity.y = velocityY;
            characterController.Move(Quaternion.Euler(transform.eulerAngles) * velocity * Time.deltaTime);
            CharacterState characterState;
            if (isWalking)
            {
                if (pressRun)
                {
                    characterState = CharacterState.Run;
                }
                else
                {
                    characterState = CharacterState.Walk;
                }
            }
            else
            {
                characterState = CharacterState.Idle;
            }
            activeGun.GetAnimator().SetState(characterState, gunState);
            characterSound.SetWalkingSoundState(characterState);
            sniperSight.SetSight(activeGun == sniper && characterState != CharacterState.Run && (gunState == Gun.GunState.Fire || gunState == Gun.GunState.Idle) && pressSight);
            Cursor.visible = false;
        }
        else
        {
            inactiveGun.GetAnimator().SetState(CharacterState.Idle, Gun.GunState.Hide);
            activeGun.GetAnimator().SetState(CharacterState.Idle, Gun.GunState.Hide);
            characterSound.SetWalkingSoundState(CharacterState.Idle);
            sniperSight.SetSight(false);
            recoil.Reset();
            Cursor.visible = true;
        }
        if (Input.GetButtonDown("Pause"))
        {
            HandlePauseClick();
        }
        if (isPause)
        {
            Cursor.visible = true;
        }
        gameUIPanel.ShowTask(game.IsStart() && Input.GetKey(KeyCode.Tab));
    }