Пример #1
0
    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);
        }
    }