# SenseGlove Unreal Engine Plugin
## ⚠️ DISCLAIMER: Experimental Release
This is an initial experimental release for public evaluation and may not be considered *production ready*, yet. This repository is under active development and there might be known or unknown bugs lurking around. Use it at your own risk.
## Platform Support Matrix
| | **Windows
(MSVC 2019)** | **Windows
(MSVC 2022)** | **Linux
(Native Toolchain)** | **macOS** | **Oculus Mobile
(Android NDK r21b)** |
|----------|:--------------------------:|:--------------------------:|:-------------------------------:|:---------:|:---------------------------------------:|
| **4.22** | ✅ | ❌ | ✅ | ❌ | ❌ |
| **4.23** | ✅ | ❌ | ✅ | ❌ | ❌ |
| **4.24** | ✅ | ❌ | ✅ | ❌ | ❌ |
| **4.25** | ✅ | ❌ | ✅ | ❌ | ❓ |
| **4.26** | ✅ | ❌ | ✅ | ❌ | ❓ |
| **4.27** | ✅ | ✅ | ✅ | ❌ | ❓ |
| **5.0** | ✅ | ✅ | ✅ | ❌ | ❓ |
| **5.1** | ✅ | ✅ | ✅ | ❌ | ❓ |
* ✅ Supported
* ❌ Not Supported
* ❓ Unknown or Untested
Remarks:
* Microsoft Visual Studio 2022 is not supported by Unreal Engine 4.22 through 4.26.
* All third-party libraries on Windows built against Windows SDK 10.0.
* Oculus support is only provided through the recommended Android NDK r21b by Epic Games.
* Supporting Unreal Engine 4.22 through 4.24 for Oculus development is a huge challenge due to limited Android NDK support (r14b to r18b); firstly, because of uncomplete C++11 standard library support, and second, as a result of a known bug in Unreal Engine, which falsely detects NDK r18b as unsupported r18c. Thus, only Unreal Engine 4.25+ support is provided for Android/Oculus development. Third, [wjwwood/serial](https://github.com/wjwwood/serial) requires Android NDK API Level 28+ in order to be built successfully, thus some older NDKs such as r14b, which is the recommended NDK by Epic Games for 4.22 to 4.24 cannot build the serial library.
* All third-party libraries target Android NDK API Level 29, thus any project relying on the plug-in should be build with the same NDK API Level.
## Documentation
The Blueprints documentation will be coming soon.
For the C++ documentation, since this plugin builds on top of [SGConnect](https://senseglove.gitlab.io/SenseGloveDocs/native/core-api-intro.html#sgconnect) and [SGCoreCpp](https://senseglove.gitlab.io/SenseGloveDocs/native/core-api-intro.html#sgcorecpp) third-party C++ libraries, please refer to [the upstream documentation](https://senseglove.gitlab.io/SenseGloveDocs/native/cpp-reference.html).
Also, you could refer to the header files in every module for extensive documentation, or the equivalent Blueprints documentation.
The following modules are intended to be used by the C++ users of this plugin:
* SenseGloveConnect module which only uses a very small subset of the Core SGConnect libary.
* SenseGloveCore module which is mostly a one-on-one wrapper call to most of the SGCoreCpp library with slight differences.
Please note that modules postfixed with **Impl** are intended for interal use and are discouraged to be used by the users of the API. The modules postfixed with **Kismet** are exposing the functionality of the equivalent modules to Blueprints. For other modules descriptions, please see [the Directory Structure section](#directory-structure).
## Directory Structure
```
Source
│
├── Resources
│
├── Source (various plug-in modules)
│ │
│ ├── SenseGlove (the UE-specific high-level API)
│ │
│ ├── SenseGloveBuildHacks (uses Excepttions and RTTI, internally used for compiler-specific build hacks)
│ │
│ ├── SenseGloveConnect (exposes part of the SGConnect low-level API to C++ and Blueprints)
│ │
│ ├── SenseGloveConnectImpl (uses Excepttions and RTTI, intended for internal use only)
│ │
│ ├── SenseGloveConnectKismet (SGConnect functionality exposed to Blueprints)
│ │
│ ├── SenseGloveCore (exposes part of the SGCoreCpp low-level API to C++ and Blueprints)
│ │
│ ├── SenseGloveCoreImpl (uses Excepttions and RTTI, intended for internal use only)
│ │
│ ├── SenseGloveCoreKismet (SGCoreCpp functionality exposed to Blueprints)
│ │
│ ├── SenseGloveEditor (the Editor module)
│ │
│ ├── SenseGloveInterop (internally used for interoperability between RTTI disabled/enabled modules)
│ │
│ ├── SenseGloveKismet(exposes Blueprints-specific functionality from the SenseGlove module)
│ │
│ ├── SenseGloveLog (internal log module)
│ │
│ ├── SenseGloveTypes (exposes various enums from the backend libraries)
│ │
│ └── SenseGloveUtils (internal utility module)
│
└── ThirdParty (3rd-party dependencies)
│
├── include (header files)
│ │
│ ├── boost
│ │
│ ├── SenseGlove
│ │ │
│ │ ├── Connect (SGConnect headers)
│ │ │
│ │ └── Core (SGCoreCpp headers)
│ │
│ └── serial
│
└── lib (platform-specific pre-built binary dependencies)
│
├── linux
│ │
│ ├── v13 (UE 4.22 Linux dependencies)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ ├── v15 (UE 4.23 and 4.24 Linux dependencies)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ ├── v16 (UE 4.25 Linux dependencies)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ ├── v17 (UE 4.26 Linux dependencies)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ ├── v19 (UE 4.27 Linux dependencies)
│ │ │
│ │ ├── debug
│ │ │
│ │ └── release
│ │
│ └── v20 (UE 5.0 Linux dependencies)
│ │
│ ├── debug
│ │
│ └── release
│
├── oculus
│ │
│ ├── debug
│ │
│ └── release
│
└── win64
│
├── msvc142 (Microsoft Visual Studio 2019 dependencies)
│ │
│ ├── debug
│ │
│ └── release
│
└── msvc143 (Microsoft Visual Studio 2022 dependencies)
│
├── debug
│
└── release
```
## Licenses
### SenseGlove Unreal Engine Plug-in License
The SenseGlove plug-in for Unreal Engine is licensed under the terms of the [MIT License](LICENSE.md).
### Third-Party Licenses
Please note that while the SenseGlove plug-in for Unreal Engine is made available under the [MIT License](LICENSE.md), it utilizes a few third-party libraries with permissive free licenses as well, in order to power various components. For a list of these libraries and their own respective open-source licenses take a look at [LICENSE-THIRD-PARTY.md](LICENSE-THIRD-PARTY.md), please.