Beispiel #1
0
        /// <summary>
        /// Function to enumerate and update the active controllers list.
        /// </summary>
        private void UpdateActiveControllers()
        {
            IReadOnlyList <IGorgonGamingDeviceInfo> controllers = _driver.EnumerateGamingDevices(true);

            // Enumerate the active controllers.  We'll only take 3 of the 4 available xbox controllers, and only if they have the correct capabilities.
            _controllers = controllers.Where(item => (item.Capabilities & GamingDeviceCapabilityFlags.SupportsThrottle) == GamingDeviceCapabilityFlags.SupportsThrottle &&
                                             (item.Capabilities & GamingDeviceCapabilityFlags.SupportsSecondaryXAxis) == GamingDeviceCapabilityFlags.SupportsSecondaryXAxis &&
                                             (item.Capabilities & GamingDeviceCapabilityFlags.SupportsSecondaryYAxis) == GamingDeviceCapabilityFlags.SupportsSecondaryYAxis &&
                                             (item.Capabilities & GamingDeviceCapabilityFlags.SupportsVibration) == GamingDeviceCapabilityFlags.SupportsVibration &&
                                             (item.Capabilities & GamingDeviceCapabilityFlags.SupportsRudder) == GamingDeviceCapabilityFlags.SupportsRudder)
                           .Take(3)
                           .Select(item => _driver.CreateGamingDevice(item)).ToArray();

            for (int i = 0; i < _controllers.Count; i++)
            {
                if (!_controllers[i].IsConnected)
                {
                    continue;
                }

                // Start at a random spot.
                _stickPosition[i] = new Point(GorgonRandom.RandomInt32(64, panelDisplay.ClientSize.Width - 64),
                                              GorgonRandom.RandomInt32(64, panelDisplay.ClientSize.Height - 64));

                // Turn off spray for all controllers.
                _sprayStates[i] = new SprayCan(_controllers[i], i);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Function to draw a spray on the screen.
        /// </summary>
        /// <param name="device">Controller to use for the spray.</param>
        /// <param name="index">Index of the controller.</param>
        private void DrawSpray(IGorgonGamingDevice device, int index)
        {
            SprayCan state = _sprayStates[index];

            // Update the origin of the spray.
            state.Origin = _stickPosition[index];

            GorgonRange throttleRange = device.Info.AxisInfo[GamingDeviceAxis.RightTrigger].Range;

            // Find out if we're spraying.
            if (device.Axis[GamingDeviceAxis.RightTrigger].Value > throttleRange.Minimum)
            {
                if ((!state.IsActive) && (!state.NeedReset))
                {
                    // Convert the throttle value to a unit value.
                    float throttleUnit = ((float)(device.Axis[GamingDeviceAxis.RightTrigger].Value - throttleRange.Minimum) / throttleRange.Range);

                    // Set up the spray state.
                    state.Position        = state.Origin;
                    state.Amount          = throttleRange.Range / 2.0f;
                    state.Time            = throttleUnit * 10.0f;
                    state.VibrationAmount = device.Info.VibrationMotorRanges[1].Maximum;
                    state.SprayAlpha      = (throttleUnit * 239.0f) + 16;
                    state.IsActive        = true;
                }
            }
            else
            {
                state.IsActive = false;
            }

            if (!state.IsActive)
            {
                return;
            }

            // Update the state spray effect.
            state.Update();
            _surface.DrawPoint(Point.Round(state.Position), state.SprayColor, state.SprayPointSize);
        }