static void Main(string[] args) { ClientContext.PreloadNativeLibraries(); using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter()) using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.ButtonCallback")) { // This is just one of the paths: specifically, the Hydra's left // controller's button labelled "1". More are in the docs and/or listed on // startup #if NET20 using (var button1 = ButtonInterface.GetInterface(context, "/controller/left/1")) #else using (var button1 = context.GetButtonInterface("/controller/left/1")) #endif { button1.StateChanged += button1_StateChanged; // Pretend that this is your application's main loop for (int i = 0; i < 1000000; ++i) { context.update(); } Console.WriteLine("Library shut down; exiting."); } } }
public static void Main(string[] args) { ClientContext.PreloadNativeLibraries(); using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter()) using (ClientContext context = new ClientContext("com.osvr.exampleclients.managed.TrackerCallback")) { #if NET20 using (var button1 = ButtonInterface.GetInterface(context, "/controller/left/1")) using (var button2 = ButtonInterface.GetInterface(context, "/controller/left/2")) #else using (var button1 = context.GetButtonInterface("/controller/left/1")) using (var button2 = context.GetButtonInterface("/controller/left/2")) #endif { // Pretend that this is your application's main loop for (int i = 0; i < 1000000; ++i) { context.update(); // getting the current state calls into the native DLL, so // try to get the state only once per frame. var button1State = button1.GetState(); var button2State = button2.GetState(); if (button1State.Value == ButtonInterface.Pressed) { Console.WriteLine("Pressing button 1!"); } // re-using button1State if (button1State.Value == ButtonInterface.Pressed && button2State.Value == ButtonInterface.Pressed) { Console.WriteLine("Pressing both button 1 and 2!"); } } Console.WriteLine("Library shut down; exiting."); } } }