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; } }
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); }
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)); }