VR part

The Virtual Reality part of the game is entirely made within Unreal Engine 4. This guide will help you understand, maintain and contribute to this part of the code.

It is strongly recommended that before you start you have at least some minimal knowledge of how UE4 works, especially the blueprint visual scripting tool, and a bit of C++. You can find a ton of tutorial on Youtube or on Unreal Engine learning page

*Note: only relevant code sections are documented here. Legacy objects might still be available in the folders but are not documented here.*

## Global Architecture

The various functions have been segmented as follows:

* Assets: that's where all the 3D models and various images are stored
* Materials: for all the cosmetics need.
* Particles: all the particle systems for VFX (sparkles, lasers, flames, smoke...) and associated materials
* PhysicsBP: that's where most of the simulation is handled as far as atoms, bonds and molecules are handled
* UI\_BP: contains everything related to the user interface, from the tools with which the user interacts with the game to the buttons and other texts and displays
* Virtual Reality BP: contains the map, as well as everything related to the VR interaction (pawn and motion controllers), as well as saving.
* NetworkBP: contains the TCP/IP interface handling

 In addition to this, the various "actors" (the UE4 classes that are spawned into the virtual world, see UE4 documentation) that the player can interact with are all inherinting from 3 different parent classes:

* Grabable: these actors are all those that can be grabed and moved by the player. Grabables are typically dropped when the grab button is released.
* Tool: these are all the actors that will allow the user to perform an action such as adding an atom or relaxing molecules. On pickup, the tool replaces the hand and can only be dropped by pressing the drop button.
* UI Bttn: everything clickable (buttons that is)

Typically, when a user moves a round his hands or clicks (*i.e.* presses the trigger of the controller), the MotionControllerPawn in combination with the BP\_MotionController handles the input and acts on the grabable, tool or UI Bttn accordingly. If an atom or molecule is modified, the Simulation container in the PhysicsBP folder will handle the new data.

## Blueprints: Actors, Interfaces, Enums and DataStructures

### Network BP

* Actor TCP
* Net Flags

### Physics BP

* Simulation container
* Grabable
* Lead
* Molecule

* Atom
* Bond
* Electrode
* Session Param

#### Data Structures

* Atom Properties
* Bond Ref
* Connectivity Buffer
* Element LUT
* Max Contrast Color List

#### Enum

* Available Actions

* Mockup For Printer

### UI BP

* Molecule Printer 2
* Loading BP
* Attach Tool Interface

#### Tools

* Tool
* Add Atom Tool
* Electrode Tool
* Force Field Tool
* Remove Atom Tool
* Switch Atom Tool

#### Plotting

* 2D Plot Spline
* TV Plot

Computer Screen UI

* UI Bttn
* UI Computer Bttn
* UI Computer Home Menu
* UI Load Screen
* UI OK Screen
* UI Periodic Table 2
* UI Save Screen
* UI Start Keyboard
* UI Text Display
* UI Undo Bttn
* UI Yes No Screen
* UI Screen 3
* Window Opacifier
* Bttn Clicked Interface
* Bttn Target

### Virtual Reality BP / Blueprints

* Motion Controller Pawn
* BP Motion Controller
* Action
* History Save
* Pick Up Actor Interface
* Grip Enum
* Debug Actor