void Update() { // Get input data InputData inputData = playerInputDecoder.GetData(); // Set maximum delta time to prevent very quick movement when freezes happens if (inputData.DeltaTime > 0.05f) { inputData.DeltaTime = 0.05f; } // Get movement vector Vector3 move = player.forward * inputData.Axis.y + player.right * inputData.Axis.x; // Normalize if greater than 1 if (move.magnitude > 1) { move.Normalize(); } // Apply speed mod move *= speedMod * SPEED_MOD_CONST * inputData.DeltaTime; // Apply sprint if (inputData.Sprint && canSprint) { move *= sprintSpeedMod; } // Apply jump if (inputData.Jump && canJump) { move.y = jumpSpeed; } // Toggle map if (inputData.Map && canOpenMap) { mapSystem.ToggleMap(); } // Zoom if (canZoom && inputData.Zoom != 0) { bool quickZoom = inputData.Sprint && quickZoomOnSprintKey; if (inputData.Zoom > 0) { cam.Zoom(quickZoom); } else { cam.UnZoom(quickZoom); } } // Do simple move (with gravity) controller.SimpleMove(move); // Shoot with left click if (inputData.LeftClick) { weaponSystem.Shoot(raycastSystem.lastHit.point); } }