Skip to content

KinectToVR/AME2

Repository files navigation

Amethyst 2.0 Avalonia Port

Please use JetBrains Rider, final warning
DEPENDENCIES

On linux, you need to install
libx11-dev
libvlc-dev
vlc
gtk-sharp2

Why? Because linux-first devs are purists and don't care whether an app works on any machine besides their own ones.
Hopefully this can be wrapped in a nice snap or appinstaller script, for you not to care about when installing AME2.
That's also why the whole app is so heavy - we need to ship both it, and every single plugin, with all dependencies.

1. The plan:

1.1. Port existing code to avalonia
1.2. Test and fix broken stuff
1.3. Implement new UI and logic

Planned changes:

Don't get your hopes too high up...

2. Joint management:

2.1. There is no base/override concept anymore → all devices are treated like overrides, and auto-initialized when a joint is in use  
2.2. To accompany for automatic management, "Set as..." will be replaces with "Use this device" triggering a choice "Use for everything" (2.1.) / "Select manually" (2.2.)
    2.2.1. Will go over all pre-defined roles (like base does) and continue with 2.2. for the rest  
    2.2.2. Will EITHER oper a list of pickers from 3. OR go straight to the view from 3.  
2.3. Joint management should be moved to under each joint expander → will open a dedicated device>joint>mode picker (based on the input one)

3. Mixed-mode tracking:

3.1. By re-using the Relay's mechanism, we can allow (selected?) devices to act as providers for sub-devices (please just see how Relay works)
    3.1.1. The contract will include a IsProxyDevice property to mark a device as a nested one rather than somehing used for actual tracking
    3.1.2. Such devices will appear and act normally, but may cause additional unwanted clutter
        3.1.2.1. To prevent such, "sub" devices will be grouped by the provider and presented ina collapsable sub-list
3.2. The 2.3. manager will allow to joints "Mix with" each other based on tracking state [bool], confidence [double], and threshold [double, user]

4. Custom calibration

4.1. The calibration view will allow devices to be calibrated be re-using the "Rotation-only" mode view from the OpenVR Emulation Support patch
    4.1.1. Calibration will be pre-defined and event-driven:
        4.1.1.1. Custom statuses, messages, and instructionc can be displayed and changed
        4.1.1.2. Each defined step may call either for full pose, position, or orientation
        4.1.1.3. Timing- and stability-based capture mode will be selectable, but not overridable

5. Joint-based offsets

5.1. Similar to how owoTrackVR works internally, anchoring virtual its joint to the HMD position
5.2. Ability to set a tracker’s (joint’s) pose to be reported relatively to an other, given one
    5.2.1. Head-based reference anchor may also be used, in case the selected tracking service supports HMD pose reporting

6. Improved guided setup

6.0. In hope of decreasing the general disorientation regarding the setup, some changes need to be made to simplify and streamline the "experience"
    6.0.1. Each plugin can show an information dialog when it is selected to provide extra information about itself. This must not be a 'help' button, but rather something shoved directly in people's faces.
    6.0.2. Similar to points below, plugin_OSC's message should focus on eventual move to SteamVR/OpenVR, while mentioning its desired (proper) use
        6.0.2.1. OpenVR's message may include information regarding HMD emulation and generic setup tips for experiencing less pain in the future
    6.0.3. After showing the message, instead of the 'Next' button, a 'Cancel'/'Ok' model will be used in case of service endpoint setup
6.1. (Making the endpoint set up and installation more foolproof)
    6.1.1. (With a big colored "Which one should I choose?" button that explains you everything)
        6.1.1.1. (SteamVR is always the superior choice whenever possible (so, when VRChat is executed through SteamVR on PC, which is the most used platform))
        6.1.1.2. (OSC has to be used only if you're either playing VRChat from your standalone headset or (for whatever strange reason) you're not executing VRChat through SteamVR)
        6.1.1.3. (Using OSC will make you lose very nice features such as calibration and Standable support (for example))
6.2. ((Maybe) A button for replaying the setup without reinstalling Amethyst)
    6.2.1. (Could be used for a quick re-setup and installation of dependencies)
        6.2.1.1. (Of course you can still set up Amethyst from the normal menus, but maybe the first set up screen can be result simpler for some people...)

Want to add something? Well, go on; it's not like we're going to implement it anyway!

Anyway, thanks for still being here... ❤

Status:

Functional namespaces:

- Amethyst.Contract

- Amethyst.Classes
- Amethyst.MVVM
- Amethyst.Schedulers
- Amethyst.Utils
- Amethyst.Controls
- Amethyst.Popups*
- Amethyst.Installer**
- Amethyst.Pages*,***

*File operations and drag and drop are not implemented yet
**GridView item selection handling is not implemented yet
***Temporary compilation errors due to Windows Language APIs

Left:

- Amethyst.Pages***
- MainWindow*****

- Styles (Classes)
- Animations
- Handlers

***Please have a break every 15 to 20 minutes, stay hydrated, and watch out for your sanity
*****Refer to FACG's page handling; remove all sharp objects from your vicinity before proceeding