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: 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:
 * 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
 * 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.

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
Computer Screen UI
 * 2D Plot Spline
 * TV Plot
 * 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