> For the complete documentation index, see [llms.txt](https://dante-3.gitbook.io/dante-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dante-3.gitbook.io/dante-docs/modular-input-system/core-concepts/input-config.md).

# Input Config

| Class               | Header                      | Parent              | Create from                                           |
| ------------------- | --------------------------- | ------------------- | ----------------------------------------------------- |
| `UMIPS_InputConfig` | `Config/MIPS_InputConfig.h` | `UPrimaryDataAsset` | **Modular Input System > Data Assets > Input Config** |

***

## Overview

An Input Config answers three questions:

1. **Which actions exist, and what tag does each one go by?** Everything after the config only sees tags.
2. **Which trigger events of each action are routed?** Events left out are never bound.
3. **Which mapping contexts bring those actions to the player?** They are added when the component binds and removed when it unbinds.

It also holds the **buffer window** definitions the component can open by tag.

A component can use several configs at once, for example a shared `DA_InputConfig_Common` plus a per-character one. They are bound in order. Configs can be added and removed at runtime with **Add Input Config** and **Remove Input Config**, and a possessed pawn can contribute its own (see [Input on the Player Controller](/dante-docs/modular-input-system/core-concepts/controller-owned-input.md)).

***

## Properties

### Mapping Contexts

`TArray<FMIPS_MappingContextEntry>`

| Field                           | Description                                                                                                                        |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| **Mapping Context**             | The Input Mapping Context to add to the local player.                                                                              |
| **Priority**                    | Higher-priority contexts win when several map the same key.                                                                        |
| **Register With User Settings** | Registers the context with Enhanced Input's user settings so players can remap its keys. Needed for the key rebinding view models. |

{% hint style="info" %}
The component never adds a context the player already has, and never removes a context it did not add. Contexts added by other systems are left alone.
{% endhint %}

### Input Actions

`TArray<FMIPS_InputActionBinding>`: one row per action.

| Field              | Default                       | Description                                                                                   |
| ------------------ | ----------------------------- | --------------------------------------------------------------------------------------------- |
| **Input Tag**      |                               | The tag the rest of the system uses for this input.                                           |
| **Input Action**   |                               | The Enhanced Input action.                                                                    |
| **Trigger Events** | Started, Triggered, Completed | Which trigger events become input events. Unticked events are not bound at all.               |
| **Track Value**    | Off                           | Keeps the live value of the action readable through **Get Input Value**, even between events. |

Each trigger event gets its own binding. When Started and Triggered fire in the same frame, both arrive as separate events, each carrying its own trigger event.

In the Details panel, each row collapses to a one-line summary, for example `Input.Jump IA_Jump Started, Completed`, with an error or warning icon when:

* the row has no tag or no action,
* the tag is used by more than one row,
* the action is not mapped by any of this config's mapping contexts.

### Buffer Windows

`TArray<FMIPS_BufferWindowDefinition>`: named windows the component can open. Each has a **Window Tag**, the **Accepted Inputs** it works with, a **Lead Time**, whether it **captures** accepted inputs, a **Resolution**, and what happens on close. See [Input Buffer & Buffer Windows](/dante-docs/modular-input-system/core-concepts/input-buffer.md) for every field.

When several configs define the same window tag, the first bound config that defines it wins.

***

## Functions

| Function                      | Blueprint | Description                                 |
| ----------------------------- | --------- | ------------------------------------------- |
| `FindInputAction(InputTag)`   | Pure      | The action bound to a tag, or null.         |
| `FindInputTag(Action)`        | Pure      | The tag an action goes by, or an empty tag. |
| `FindBinding(InputTag)`       | C++       | The first row for a tag, or null.           |
| `FindBufferWindow(WindowTag)` | C++       | The window definition for a tag, or null.   |

***

## Validation

Configs are validated on save and by the data validation commandlet.

| Check                                                                                        | Severity                                       |
| -------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| A mapping context entry is empty                                                             | Error                                          |
| A row has no input tag, or no input action                                                   | Error                                          |
| A tag is used by more than one row (both fire, but value and tag lookups only see the first) | Warning                                        |
| A row binds no trigger events and does not track its value                                   | Warning                                        |
| A buffer window has no tag, or its tag is defined twice                                      | Error                                          |
| A buffer window accepts no inputs                                                            | Warning                                        |
| An action is not mapped by any of the config's mapping contexts                              | Warning                                        |
| A buffer window accepts a tag that no action in this config produces                         | Warning (fine when another config provides it) |

***

## Example

```
DA_InputConfig_Hero
├── Mapping Contexts
│     └── IMC_Hero                 Priority 0   Register With User Settings ✓
├── Input Actions
│     ├── Input.Move      IA_Move      Triggered
│     ├── Input.Look      IA_Look      Triggered
│     ├── Input.Jump      IA_Jump      Started, Completed
│     ├── Input.Attack    IA_Attack    Started
│     └── Input.Block     IA_Block     Started, Completed      Track Value ✓
└── Buffer Windows
      └── Window.Combo    accepts Input.Attack (Started)   Lead Time 0.1 s   Newest
```

***

## Next Steps
