/// <summary> /// Creates a device baed on description. /// </summary> /// <param name="desc"></param> /// <returns></returns> public InputDevice CreateDevice(InputDeviceDescriptor desc) { lock (syncRoot) { AssertInitialized(); InputDevice.DeviceBucket bucket; // We first search in cache. if (inputDevices.TryGetValue(desc, out bucket)) { lock (bucket) { if (bucket.UseCount > 0) { bucket.UseCount++; return(new InputDevice(this, bucket, desc)); } } } // Otherwise, we create it. bucket = new InputDevice.DeviceBucket(); bucket.Device = inputService.Create(desc); inputDevices[desc] = bucket; return(new InputDevice(this, bucket, desc)); } }
internal InputDevice(InputService service, DeviceBucket bucket, InputDeviceDescriptor desc) { this.service = service; this.bucket = bucket; this.desc = desc; this.buttonStates = new bool[desc.ButtonCount]; this.axisStates = new long[desc.AxisCount]; }