# General Workflow

The process behind working with Story Framework, and understanding how systems communicate with one another.

***

SF uses [Actor Components](../../core-components) to communicate and drive majority of all systems found within this blueprint framework. These actor components are designed to do all the heavy lifting, keeping 95% of all blueprints and code outside of the player controller and/or player character blueprint class. These actor components are as follows:

* [Interaction Manager](../../core-components/editor)   <sup>(Responsible for</sup> <sup></sup><sup>**all**</sup> <sup></sup><sup>forms of interaction inside of Story Framework)</sup>
* [Inventory Manager](../../core-components/markdown)   <sup>(Used to control the quick-inventory, journal, and memoir systems)</sup>
* [Camera Manager](../../core-components/images-and-media)   <sup>(Controls</sup> <sup></sup><sup>**some**</sup> <sup></sup><sup>of the camera component functions)</sup>
* [Sequence Manager](../../core-components/sequence-manager)   <sup>(Used for cinematics and subtitled voice lines)</sup>
* [Save Manager](../../core-components/saving-loading)   <sup>(Responsible for saving and loading SF data during runtime)</sup>

Understanding that functionality is driven through these Actor Components will make customizing and tweaking core SF logic easier, and faster.

<div align="left" data-full-width="false"><figure><img src="https://3388235609-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUYeqvDsstN2ZNva2Lkl7%2Fuploads%2FLuFKWCS3NKMuIMN2xuAe%2FAC.png?alt=media&#x26;token=a70a733c-3f06-4849-85aa-db9886df9317" alt=""><figcaption></figcaption></figure></div>

***

SF's interaction is utilized by using "Interactables". These interactables contain an `InteractableData_S` structure variable, which holds all of the possible interaction settings and combinations. Alternatively, setting up a custom actor and implementing the `SFInteraction_BPI` blueprint interface (BPI) will register that actor as an "Interactable", allowing you to utilize the `InteractedWith` & `LoadFromDataString` BPI functions.

{% hint style="info" %}
Learn about [Blueprint Interfaces](https://dev.epicgames.com/documentation/en-us/unreal-engine/blueprint-interface-in-unreal-engine) and [Actor Components](https://dev.epicgames.com/documentation/en-us/unreal-engine/components-in-unreal-engine) inside Unreal, and how they're used.
{% endhint %}

***

Player inputs are handled using Input Mapping Contexts (IMC), and swapping between different IMC's depending on the gameplay situation. For instance, when the player opens up their inventory, SF will switch the default "Gameplay\_IMC" to the "Inventory\_IMC". This avoids any overlapping inputs throughout gameplay, and keeps the whole process of creating new IMC's linear and understandable to use.\
\
All of the different input events and functions are called from within the player controller blueprint. Input actions are essentially the only logic inside either of the player character, or player controller blueprints inside SF

<div data-full-width="false"><figure><img src="https://3388235609-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FUYeqvDsstN2ZNva2Lkl7%2Fuploads%2FmS5mxbZNQqAX4TzCbUXz%2FInputEvents.png?alt=media&#x26;token=dad9d18d-83ca-4d4f-b62e-f5bc5dea94bf" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
Find out more about [Enhanced Inputs](https://dev.epicgames.com/documentation/en-us/unreal-engine/enhanced-input-in-unreal-engine) and how they handle input actions within Unreal.
{% endhint %}

***

**Color coded graphs/comments inside SF's blueprints**\
Some of SF's blueprints use orange tinted graphs and comments to indicate that the functionality inside of those graphs/comments are more so for demonstration purposes, meaning that it can be removed or disabled. Graphs/comments that are tinted black should be considered essential to it's functionality, with some exceptions being logic that creates and plays sounds.
