> For the complete documentation index, see [llms.txt](https://motion.docs.regensturm.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://motion.docs.regensturm.com/components/bp_crouchingcomponent.md).

# BP\_CrouchingComponent

This page describes the Crouching Component that ships with Motion. The Crouching Component provides smooth crouching and uncrouching for characters.

It also provides floor & ceiling detection to prevent the capsule from expanding too much when uncrouching, but still allowing for partial uncrouching if the ceiling height allows it. A speed penalty is applied when being fully crouched.

### Dependencies

* requires BP\_JumpingComponent.

### Methods

#### Crouch Handlers

| Name              | Description                                      |
| ----------------- | ------------------------------------------------ |
| DoCrouch          | Logic for Crouching. See comments for details.   |
| DoUncrouch        | Logic for Uncrouching. See comments for details. |
| HandleCrouchInput | Handles input set by player input                |
| SetCrouch         | Updates crouch states. Used by input events.     |

#### Getters

| Name                         | Description                                                                 |
| ---------------------------- | --------------------------------------------------------------------------- |
| GetCapsuleOverlapCheckResult | Checks if the player would be still enroached if we'd adjust their position |
| GetCharacterVelocity         | Returns the player speed in units per second.                               |

#### Event Handler

| Name                        | Description                                                                                                                                       |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| HandleOnCrouchCrouched      | Called whenever the crouch position updates. Calls event for other components that listen to crouch changes. Useful for implementing sliding.     |
| HandleOnCrouchPressed       | Upon crouch key-press, mark the character as wanting to crouch                                                                                    |
| HandleOnCrouchReleased      | When releasing the crouch button, update crouch intention state                                                                                   |
| HandleOnCrouchUncrouched    | Called whenever the uncrouch position updates. Calls event for other components that listen to uncrouch changes. Useful for implementing sliding. |
| HandleOnEventBeginPlay      | Called when "Event Begin Play" gets called. Sets up events and saves base values.                                                                 |
| HandleOnEventTick           | Core logic handlers. Handles Crouch Inputs and prints Debug information                                                                           |
| HandleOnMovementModeChanged | Handles all Movement related changes                                                                                                              |

#### Event Dispatchers

| Name                    | Description                                                              |
| ----------------------- | ------------------------------------------------------------------------ |
| OnCrouchUpdate          | Triggered when the capsule size changes due to crouching or uncrouching. |
| OnCrouchFullyCrouched   | Triggered when the player is fully crouched.                             |
| OnCrouchFullyUncrouched | Triggered when the player is fully uncrouched.                           |

#### Debug

| Name                  | Description                                                     |
| --------------------- | --------------------------------------------------------------- |
| PrintDebugInformation | Prints useful information on the screen. Helpful for debugging. |

#### Manipulators

| Name              | Description                        |
| ----------------- | ---------------------------------- |
| ResetMaxWalkSpeed | Removes the crouch speed modifiers |

***

### Variables

#### Configuration

| Name                         | Description                                                                                                                            |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| TargetCrouchCameraOffset     | Camera Offset to add when the player is crouching.                                                                                     |
| ClassExceptionListForOverlap | Array of Actor classes that are being ignored in ceiling checks.                                                                       |
| bIsInputToggle               | If true, the input key is used as toggle. This is especially useful for use on gamepads where it is more tiring to hold down a button. |
| bShowDebugInformation        | If true, various useful variables will be printed on the screen to help with debugging.                                                |
| bIsEnabled                   | If false, the component will only print debug data and not update any other values.                                                    |

#### Component Data

| Name              | Description                                                         |
| ----------------- | ------------------------------------------------------------------- |
| OverlapActorTypes | Actor Types that are used for collision detection when uncrouching. |

#### Event Dispatcher

| Name                    | Description                                                              |
| ----------------------- | ------------------------------------------------------------------------ |
| OnCrouchFullyUncrouched | Triggered when the player is fully uncrouched.                           |
| OnCrouchFullyCrouched   | Triggered when the player is fully crouched.                             |
| OnCrouchUpdate          | Triggered when the capsule size changes due to crouching or uncrouching. |

#### States

| Name                         | Description                                                                                                     |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------- |
| bCrouchMaintainsBaseLocation | If true, crouching should keep the base of the capsule in place by lowering the center of the shrunken capsule. |
| bIsCrouched                  | If true, the player is fully crouched.                                                                          |
| bIsInCrouch                  | If true, the player is currently transitioning in a crouch.                                                     |
| bWantsToCrouch               | If true, the player signalised, usually by pressing the crouch button, that they want to crouch.                |

#### Default

| Name             | Description                         |
| ---------------- | ----------------------------------- |
| JumpingComponent | Reference to the jumping component. |
