Exemplo n.º 1
0
        private static void MouseButtonUp(InputSimulator inputSimulator, SimulatedMouseButton mouseButton)
        {
            switch (mouseButton)
            {
            case SimulatedMouseButton.Left:
                inputSimulator.Mouse.LeftButtonUp();
                break;

            case SimulatedMouseButton.Right:
                inputSimulator.Mouse.RightButtonUp();
                break;

            case SimulatedMouseButton.XButton1:
                inputSimulator.Mouse.XButtonUp(XButton1);
                break;

            case SimulatedMouseButton.XButton2:
                inputSimulator.Mouse.XButtonUp(XButton2);
                break;

            default:
                Console.WriteLine($"Unrecognized mouse button {mouseButton}");
                break;
            }
        }
Exemplo n.º 2
0
        private static void Main(
            UserIndex controllerIndex        = UserIndex.One,
            SimulatedMouseButton mouseButton = SimulatedMouseButton.Left,
            int thresholdPercent             = 70)
        {
            var settings = Settings.Default;

            if (thresholdPercent < 1 || thresholdPercent > 100)
            {
                Console.WriteLine(settings.ThresholdError);
                Console.ReadKey();
                return;
            }

            Console.WriteLine(settings.Instructions);
            Console.WriteLine();

            var controller = new Controller(controllerIndex);

            var isConnected = controller.IsConnected;

            if (!isConnected)
            {
                Console.WriteLine(settings.ControllerError);
                Console.ReadKey();
                return;
            }

            Console.WriteLine(settings.Started);
            Console.WriteLine();

            var cancellationTokenSource = new CancellationTokenSource();

            Task.Run(
                () =>
            {
                Console.ReadKey();
                cancellationTokenSource.Cancel();
            });

            var controllerMod = new ControllerMod();

            // Start always sprint modification
            controllerMod.AlwaysSprintAsync(controller, mouseButton, thresholdPercent, cancellationTokenSource.Token).Wait();
        }
Exemplo n.º 3
0
        public async Task AlwaysSprintAsync(
            Controller controller,
            SimulatedMouseButton mouseButton,
            int thresholdPercent,
            CancellationToken cancellationToken)
        {
            try
            {
                var inputSimulator = new InputSimulator();

                var sprintIndex         = 0;
                var totalSprintDuration = new TimeSpan();
                var sprintStarted       = DateTime.Now;

                var settings = Settings.Default;

                var sprintActive = false;
                while (true)
                {
                    if (cancellationToken.IsCancellationRequested)
                    {
                        return;
                    }

                    // Get current controller state
                    var state   = controller.GetState();
                    var gamepad = state.Gamepad;

                    // Get thumbstick radius from the center
                    var radius = GetRadius(gamepad.LeftThumbX, gamepad.LeftThumbY);

                    // Sprint when thumbstick radius is more than 70% of max
                    // Radius in X or Y direction is 32767, but in 45 degree angle it's over 37000...(?)
                    // The difference is not that big, to calculate percentage value from "normal" max value
                    var shouldSprint = radius >= thresholdPercent / 100f * short.MaxValue;
                    if (shouldSprint && !sprintActive)
                    {
                        sprintActive  = true;
                        sprintStarted = DateTime.Now;

                        var sprintIndexString = (++sprintIndex).ToString("N0", CultureInfo.InvariantCulture);
                        Console.Write($"{settings.Sprint} #{sprintIndexString} {DateTime.Now:HH:mm:ss} >> ");

                        // Simulate mouse button down
                        MouseButtonDown(inputSimulator, mouseButton);
                    }
                    else if (!shouldSprint && sprintActive)
                    {
                        sprintActive = false;
                        var sprintDuration = DateTime.Now - sprintStarted;
                        totalSprintDuration = totalSprintDuration.Add(sprintDuration);
                        var averageDuration = totalSprintDuration.TotalSeconds / sprintIndex;

                        Console.WriteLine(
                            $"{DateTime.Now:HH:mm:ss} {settings.Duration}={sprintDuration.TotalSeconds:F2}s ({settings.AverageDuration}={averageDuration:F2}s)");

                        // Simulate mouse button up
                        MouseButtonUp(inputSimulator, mouseButton);
                    }

                    // Wait before getting controller state again
                    await Task.Delay(ControllerPollInterval, cancellationToken).ConfigureAwait(false);
                }
            }
            catch (TaskCanceledException)
            {
            }
        }