void UpdateFootPlanting(
            Transform transform, PlayerFoley playerFoley, float speedSqr, float speedScalar, bool isJumping)
        {
            if (isJumping)
            {
                if ((_feetPlanted & 8) == 0)
                {
                    _feetPlanted = 0;
                }
            }
            else
            {
                var position          = transform.position;
                var footPlantPosition = new Vector3(position.x, 0f, position.z);

                float walkStepSqr = footPlanting.walkStepDistance * footPlanting.walkStepDistance;
                float runStepSqr  = footPlanting.runStepDistance * footPlanting.runStepDistance;
                float stepSqr     = (footPlantPosition - _lastFootPlantPosition).sqrMagnitude;
                float needStepSqr = Mathf.Lerp(walkStepSqr, runStepSqr, speedScalar);

                _feetPlanted &= ~8;

                if (_feetPlanted == 0)
                {
                    _feetPlanted            = 1;
                    _lastFootPlantPosition  = footPlantPosition;
                    _lastVegetationPosition = footPlantPosition;

                    Vector3        normal;
                    PhysicMaterial physicalMaterial;
                    FindFootPlacement(ref position, out normal, out physicalMaterial);
                    playerFoley.PlayFootstep(
                        transform, position, normal, physicalMaterial, _jumpSpeedScalar, landing: true);
                }
                else if (speedSqr <= footPlanting.stopSpeedThreshold * footPlanting.stopSpeedThreshold)
                {
                    if (_feetPlanted != 2)
                    {
                        _feetPlanted           = 2;
                        _lastFootPlantPosition = footPlantPosition;

                        Vector3        normal;
                        PhysicMaterial physicalMaterial;
                        FindFootPlacement(ref position, out normal, out physicalMaterial);
                        playerFoley.PlayFootstep(transform, position, normal, physicalMaterial, speedScalar: 0f);
                    }
                }
                else if (stepSqr >= needStepSqr)
                {
                    _feetPlanted           = 1;
                    _lastFootPlantPosition = footPlantPosition;

                    Vector3        normal;
                    PhysicMaterial physicalMaterial;
                    FindFootPlacement(ref position, out normal, out physicalMaterial);
                    playerFoley.PlayFootstep(transform, position, normal, physicalMaterial, speedScalar);
                }
                else if (playerFoley.intersectingVegetation)
                {
                    var vegDistSqr = (footPlantPosition - _lastVegetationPosition).sqrMagnitude;

                    if (vegDistSqr >= needStepSqr * 0.3f)
                    {
                        _lastVegetationPosition = footPlantPosition;

                        Vector3        normal;
                        PhysicMaterial physicalMaterial;
                        FindFootPlacement(ref position, out normal, out physicalMaterial);
                        playerFoley.PlayVegetation(transform, position, speedScalar);
                    }
                }
            }
        }