Tasks Undertaken
Main Menu Enhancements
- Integrated animation for the steering wheel in the main menu.
- Implemented main menu support to enhance overall functionality.
- Streamlined the cockpit hierarchy for improved organization.
- Introduced pressable buttons for enhanced user interaction.

Async Level Loading Plugin
- Imported and adjusted a plugin facilitating asynchronous level loading.
- Tailored and reworked the plugin to align with specific project needs.
- Integrated the plugin with the main menu to support efficient level loading.

Player Name Feature
- Incorporated the PlayerName variable into both settings and SaveGame.
- Although the keyboard functionality is pending, the groundwork for user-specific names has been

AsyncLevelLoad Plugin Integration
- Added the AsyncLevelLoad plugin to the project's plugin folder.
- This integration eliminates the need for manual installation of the plugin into the engine.

Enhanced Async Level Loading
- Overhauled the AsyncLevelLoading system to support background loading of levels.
- Implemented safeguards to prevent errors during the level-loading process.
- Linked the MainMenu and VRCharacter Blueprints to seamlessly integrate with scene loading.
Double Diamond
In the initial phase of the project, I delved into enhancing the Main Menu experience. This involved incorporating an animation for the steering wheel, integrating main menu support, and reorganizing the cockpit hierarchy for better structure. The objective here was to explore and identify key improvements to the user interface and interaction.

Following the initial discoveries, I honed in on specific features to refine and define their functionalities. This included the import and customization of the Async Level Loading plugin, which aimed at optimizing the efficiency of level loading within the project. Additionally, the introduction of the Player Name feature was outlined, paving the way for personalized user experiences. This phase focused on clearly defining the scope and purpose of each enhancement.

With a well-defined plan, I proceeded to the development stage. I reworked the Async Level Loading plugin to align seamlessly with the project's requirements. The integration of this plugin into the main menu showcased its potential in facilitating background level loading. Simultaneously, I added the AsyncLevelLoad plugin to the project's plugin folder, streamlining the installation process. The implementation of safeguards during level loading further solidified the robustness of the system. In parallel, I introduced pressable buttons to enhance user interaction within the Main Menu. This stage involved a hands-on approach to bringing the defined features to life.

The final phase involved the delivery of the implemented enhancements. The animation for the steering wheel (Figure 1), the organized cockpit hierarchy, and the pressable buttons collectively contributed to an improved Main Menu experience. The Async Level Loading system (Figure 2 & 4), with its tailored plugin and enhanced functionality, was seamlessly integrated into the project. The Player Name feature (Figure 5), although awaiting keyboard functionality, laid the foundation for future personalized user interactions. The project's commit history and blueprints were now a testament to the successful application of improvements identified and defined in the earlier stages.
Last week, I spend a lot of time researching and working on asynchronized level loading. Unreal Engine 4 had this build-in as a blueprint, but removed it in UE 5. So I had to make it myself. With the help of a plugin I found and a YouTube video explaining the core code, I was able to make my own variation of the plugin and link it to our main menu.

- Tycho Tuitert: General feedback, discussions, and help throughout the whole week.
- Daniel Valente de Macedo: Feedback on the 'generated.h' file from Visual Studio, and the linking
   of C++ classes with components.

- Async level load core explanation: ​​​​​​​https://youtu.be/GwCD2WQ7-4U?si=evrORL8Re-oMNsRT
Reflections and Learning
Almost my whole week consisted of working on the asynchronized loading with C++ classes. I didn't really had any experience with C++ classes in Unreal, so I had to figure it all out. It was very interesting to learn. I already have a lot of experience with coding in C++, but it's a little bit different in Unreal. Getting help from YouTube video's and researching the plugin, helped a lot with getting used to the structure.
The async loading code is linked to a 'AsyncLevelLoadScene' component on the player. This allows me to access the code through the player and bind events to it. For example, call an event when the async loading is done (Figure 3). 
I had some issues with compiling the code, since it would compile the whole engine (which takes around 30 minutes), when I would press the recompile button in the editor. This is very time consuming and irritating, since I needed to do this every time I would change something in the code. Tycho suggested to rebuild the whole project in Visual Studio itself. This helped solve the problem, it would now only recompile the class I would change something in. 
I eventually linked the code to the widget, and everything worked as needed. I am planning to optimize in a later stage of the project and also add level streaming to the class.

Figure 1 - Steering wheel animation

Figure 2 - Async loading in playtime

Figure 3 - Async loading done event linked in the blueprint

Figure 4 - CPP code for the Async level loading

Figure 5 - Integration of the player name in the settings

Other projects