# 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. |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://motion.docs.regensturm.com/components/bp_crouchingcomponent.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
