private void Update_LookingForTarget() { if (!agent.isOnNavMesh) { // If agent has fallen off the nav mesh, move forward and attempt to get back on the navmesh. var velocity = transform.forward; var rotation = Quaternion.LookRotation(velocity, Vector3.up); var speed = sprintNext ? MovementSpeed.Sprint : MovementSpeed.Run; movementDriver.ApplyMovement(velocity, rotation, speed, jumpNext); jumpNext = false; agent.Warp(transform.position); } else if (agent.remainingDistance < MinRemainingDistance || agent.pathStatus == NavMeshPathStatus.PathInvalid || !agent.hasPath) { SetRandomDestination(); } else if (agent.pathStatus == NavMeshPathStatus.PathComplete) { var velocity = agent.desiredVelocity; velocity.y = 0; if (velocity != Vector3.zero) { var rotation = Quaternion.LookRotation(velocity, Vector3.up); var speed = sprintNext ? MovementSpeed.Sprint : MovementSpeed.Run; movementDriver.ApplyMovement(velocity, rotation, speed, jumpNext); jumpNext = false; } } agent.nextPosition = transform.position; }
private void MoveTowards(Vector3 destination, MovementSpeed speed, Quaternion rotation, bool jump = false) { var agentPosition = agent.nextPosition; var direction = (destination - agentPosition).normalized; var desiredVelocity = direction * movementDriver.GetSpeed(speed); // Setting nextPosition will move the agent towards destination, but is constrained by the navmesh agent.nextPosition += desiredVelocity * Time.deltaTime; // Getting nextPosition here will return the constrained position of the agent var actualDirection = (agent.nextPosition - agentPosition).normalized; movementDriver.ApplyMovement(actualDirection, rotation, speed, jump); }
private void Update() { if (controller.MenuPressed) { ClientWorkerHandler.ScreenUIController.TryOpenSettingsMenu(); } // Don't allow controls if in the menu. if (ScreenUIController.InEscapeMenu) { // Still apply physics. movement.ApplyMovement(Vector3.zero, transform.rotation, MovementSpeed.Run, false); Animations(false); return; } if (isRequestingRespawn) { return; } if (health.Data.Health == 0) { if (controller.RespawnPressed) { isRequestingRespawn = true; requestingRespawnCoroutine = StartCoroutine(RequestRespawn()); } return; } // Movement var toMove = transform.rotation * controller.Movement; // Rotation var yawDelta = controller.YawDelta; var pitchDelta = controller.PitchDelta; // Modifiers var isAiming = controller.IsAiming; var isSprinting = controller.AreSprinting; var isJumpPressed = controller.JumpPressed; // Events var shootPressed = controller.ShootPressed; var shootHeld = controller.ShootHeld; // Update the pitch speed with that of the gun if aiming. var yawSpeed = cameraSettings.YawSpeed; var pitchSpeed = cameraSettings.PitchSpeed; if (isAiming) { yawSpeed = currentGun.CurrentGunSettings.AimYawSpeed; pitchSpeed = currentGun.CurrentGunSettings.AimPitchSpeed; } //Mediator var movementSpeed = isAiming ? MovementSpeed.Walk : isSprinting ? MovementSpeed.Sprint : MovementSpeed.Run; var yawChange = yawDelta * yawSpeed; var pitchChange = pitchDelta * -pitchSpeed; var currentPitch = pitchTransform.transform.localEulerAngles.x; var newPitch = currentPitch + pitchChange; if (newPitch > 180) { newPitch -= 360; } newPitch = Mathf.Clamp(newPitch, -cameraSettings.MaxPitch, -cameraSettings.MinPitch); pitchTransform.localRotation = Quaternion.Euler(newPitch, 0, 0); var currentYaw = transform.eulerAngles.y; var newYaw = currentYaw + yawChange; var rotation = Quaternion.Euler(newPitch, newYaw, 0); //Check for sprint cooldown if (!movement.HasSprintedRecently) { HandleShooting(shootPressed, shootHeld); } Aiming(isAiming); var wasGroundedBeforeMovement = movement.IsGrounded; movement.ApplyMovement(toMove, rotation, movementSpeed, isJumpPressed); Animations(isJumpPressed && wasGroundedBeforeMovement); }
private void Update() { // Don't allow controls if in the menu. if (ScreenUIController.InEscapeMenu) { // Still apply physics. movement.ApplyMovement(Vector3.zero, transform.rotation, MovementSpeed.Run, false); Animations(false); return; } if (isRequestingRespawn) { return; } if (health.Data.Health == 0) { if (Input.GetKeyDown(KeyCode.Space)) { isRequestingRespawn = true; requestingRespawnCoroutine = StartCoroutine(RequestRespawn()); } return; } // Movement var forward = Input.GetKey(KeyCode.W); var backward = Input.GetKey(KeyCode.S); var left = Input.GetKey(KeyCode.A); var right = Input.GetKey(KeyCode.D); var toMove = transform.rotation * GetDirectionFromCache(forward, backward, left, right); var onlyForward = forward && !(backward || left || right); // Rotation var yawDelta = Input.GetAxis("Mouse X"); var pitchDelta = Input.GetAxis("Mouse Y"); // Modifiers var isAiming = Input.GetMouseButton(1); var isSprinting = Input.GetKey(KeyCode.LeftShift) && onlyForward; var isJumpPressed = Input.GetKeyDown(KeyCode.Space); // Events var shootPressed = Input.GetMouseButtonDown(0); var shootHeld = Input.GetMouseButton(0); // Update the pitch speed with that of the gun if aiming. var yawSpeed = cameraSettings.YawSpeed; var pitchSpeed = cameraSettings.PitchSpeed; if (isAiming) { yawSpeed = currentGun.CurrentGunSettings.AimYawSpeed; pitchSpeed = currentGun.CurrentGunSettings.AimPitchSpeed; } //Mediator var movementSpeed = isAiming ? MovementSpeed.Walk : isSprinting ? MovementSpeed.Sprint : MovementSpeed.Run; var yawChange = yawDelta * yawSpeed; var pitchChange = pitchDelta * -pitchSpeed; var currentPitch = pitchTransform.transform.localEulerAngles.x; var newPitch = currentPitch + pitchChange; if (newPitch > 180) { newPitch -= 360; } newPitch = Mathf.Clamp(newPitch, -cameraSettings.MaxPitch, -cameraSettings.MinPitch); pitchTransform.localRotation = Quaternion.Euler(newPitch, 0, 0); var currentYaw = transform.eulerAngles.y; var newYaw = currentYaw + yawChange; var rotation = Quaternion.Euler(newPitch, newYaw, 0); //Check for sprint cooldown if (!movement.HasSprintedRecently) { HandleShooting(shootPressed, shootHeld); } Aiming(isAiming); var wasGroundedBeforeMovement = movement.IsGrounded; movement.ApplyMovement(toMove, rotation, movementSpeed, isJumpPressed); Animations(isJumpPressed && wasGroundedBeforeMovement); }