private void DriftModeFlow()
    {
        var inputVec = new Vector2(
            Input.GetAxisRaw("Horizontal"),
            Input.GetAxisRaw("Vertical"));

        var acceleratePressed = Input.GetButtonDown("Accelerate");
        var accelerateHeld    = Input.GetButton("Accelerate");

        var inputHeld = inputVec.sqrMagnitude > 0f;

        if (accelerateHeld && fuelInSeconds > 0f)
        {
            thruster.TryStartThrusting();

            var inputPressed = Input.GetButtonDown("Up") || Input.GetButtonDown("Right") ||
                               Input.GetButtonDown("Left") || Input.GetButtonDown("Down");

            // once reason for weirdness is that when this is pressed before accelerate removed, shit gets weird

            /*var inputPressed = Input.GetButtonDown("Up") || Input.GetButtonDown("Right")
            || Input.GetButtonDown("Left") || Input.GetButtonDown("Down") ||
            ||  Input.GetButtonUp("Up") || Input.GetButtonUp("Right")
            || Input.GetButtonUp("Left") || Input.GetButtonUp("Down");*/

            var unitDirection = inputHeld
                ? inputVec.normalized
                : new Vector2(mostRecentHorzX, 0f);

            if (acceleratePressed || inputPressed)
            {
                var dotProd = Vector2.Dot(unitDirection, currentPlayerDriftVelocity.Value.normalized);

                var driftSpeedToUse = Mathf.Approximately(dotProd, 1f)
                    ? currentPlayerDriftVelocity.Value.magnitude
                    : dotProd > 0f
                        ? currentPlayerDriftVelocity.Value.magnitude * acuteDirectionRatio
                        : Mathf.Approximately(dotProd, 0f) ? currentPlayerDriftVelocity.Value.magnitude * 0.5f : minDriftSpeed;


                currentPlayerDriftVelocity.Value = unitDirection * driftSpeedToUse;
            }

            // average turn is 0.25 seconds?
            // average acceleration turn might be change of 5 / 5 ... 1 second?

            var fuelToUse        = Mathf.Min(fuelInSeconds.Value, Time.deltaTime);
            var changeInVelocity = unitDirection * driftAcceleration.Value * fuelToUse;

            currentPlayerDriftVelocity.Value = Vector2.ClampMagnitude(
                currentPlayerDriftVelocity + changeInVelocity,
                maxDriftSpeed);

            fuelInSeconds.Value = Mathf.Max(0f, fuelInSeconds.Value - fuelToUse);
            if (Mathf.Approximately(fuelInSeconds.Value, 0f))
            {
                Debug.Log("fuel is gone");
                fuelDepletedEvent.Raise();
            }
        }
        else
        {
            thruster.TryStopThrusting();
        }

        mostRecentHorzX = Mathf.Approximately(inputVec.x, 0f)
            ? mostRecentHorzX
            : inputVec.x;

        prevDirection = inputHeld
            ? inputVec
            : prevDirection;

        var displacement = currentPlayerDriftVelocity.Value * Time.deltaTime;

        transform.Translate(displacement);
    }