oriash93 / AutoClicker

AutoClicker is a useful simple tool for automating mouse clicks.
MIT License
282 stars 118 forks source link

Add Random Interval #62

Open bnn678 opened 2 years ago

bnn678 commented 2 years ago

Updated the UI to include a new section that allows users to specify a maximum and minimum interval.

image

To use the randomized interval, simply set a value in the maximum and minimum input boxes where the sum of the maximum values is greater than than the minimum values.

NOTE: The randomized interval will only be used if the Click Interval is set to 0. If any value is entered in the Click Interval, the Click Interval will be used instead

Desired Future Updates

  1. Add some indication in the UI that only the Click Interval or Randomized Click Interval can be used (not both). Possibly disable the input box when either has a non-zero value?
    This was added using the IsRandomizedIntervalEnabled AutoClickerSetting, an explicit call to OnPropertyChanged, and the IsEnabled property.
  2. Fix the new horizontal spacing issue. I introduced a bug that caused the hortizontal spacing to "squish" a bit. I don't have enough experience with XAML to quickly fix this bug. The most obvious sign of this new bug is that the input boxes no longer have a right border
bnn678 commented 2 years ago

Just discovered a bug. The interval is not reset after the mouse click action in the current implementation. I need to move the interval update logic into the OnClickTimerElapsed function

james-s-w-clark commented 2 years ago
  1. Add some indication in the UI that only the Click Interval or Randomized Click Interval can be used (not both). Possibly disable the input box when either has a non-zero value?

I like this idea. It should possibly be part of this PR because without an indication in the UI, it's a bit more confusing to get expected results from this application.

bnn678 commented 2 years ago
  1. Add some indication in the UI that only the Click Interval or Randomized Click Interval can be used (not both). Possibly disable the input box when either has a non-zero value?

I like this idea. It should possibly be part of this PR because without an indication in the UI, it's a bit more confusing to get expected results from this application.

I agree. I also think that the horizontal spacing issue should be fixed before this PR is merged. Unforunately I have no experience with XAML so I htink someone else would be better equiped to add these features

oriash93 commented 2 years ago

@bnn678 First of all, thanks for taking the time of making a PR and putting effort into this, it's really appreciated. 🙏🏽 @IdiosApps I also appreciate the thought put into your review.

I was considering adding a separate flag to enable/disable random intervals. I agree. Maybe go with the same concept as switching between the "Click Repeat" methods or the "Click Position" methods. This might require a workaround to include a RadioButton inside a GroupBox's header, but we'll figure it out.

Regarding all other things discussed, take your time. That's why drafts are for :) I will try to pitch in the next few days when I have time off work, to leave review notes and see what can I do to help.

KronkIV commented 2 years ago

May I suggest a simpler implementation? Use the Click Interval fields as the minimum, and rather than specifying the maximum the user specifies the random range. Leave the original Click Interval section alone and add a single set of Random Interval fields. When these are non-zero, a random value between 0 and the Random Interval total is added to the Click Interval.

bnn678 commented 2 years ago

@KronkIV I considered using the existing Click Interval as a portion of the input, but I ultimately decided against because it is more ambiguous. Without additional UI information, it's not inherently obvious to a user what each of the components would be for. I believe that the current UI implementation makes it instantly obvious how the Randomized Click Interval should be used.

@oriash93 Thanks! I plan to update this PR over the time I have off around Christmas.

bnn678 commented 2 years ago

@IdiosApps @oriash93 I have attempted to disable the inputs at an appropriate time, but unforunately I can't figure out why the disabled state of the input won't update after the program is stared. Does anyone have suggestions?

oriash93 commented 2 years ago

@bnn678 Are you still working on this?

bnn678 commented 2 years ago

Here is what the interface looks like when the Click Interval is set to 0

image

And here is the appearance when there is a non-zero Click Interval

image

In the current implementation, the IsEnabled property is used instead of the IsReadOnly property because the "grey-out" effect makes it more obvious to users that the randomized interval is disregarded if a standard interval is provided.

TriforceSeeker commented 1 year ago

Probably should have checked existing PRs as I just opened one for this. My only gripe is that a real human clicking so fast, produces something closer to a normal distribution, rather than a uniformly distributed random range.

If I was reviewing someone's click action/statistics and saw a perfectly uniform random distribution for some duration of time that is neatly windowed, it'd be a huge red flag. A lot of human action/response times tend to be closer to normal, skewed, and multimodal distributions.

Also curious, have you noticed whether the new logic adds considerable delays, possibly requiring compensation, to achieve same CPS w/o the added logic?

bnn678 commented 1 year ago

human action/response times tend to be closer to normal, skewed, and multimodal distributions

Thats a very intereting point and something I hadn't considered.

have you noticed whether the new logic adds considerable delays,

I haven't noticed any delays, but I also ddn't do any actual performance testing. I can make no guarenteed promises, but it appears to perform reasonably.

boazfionic commented 3 months ago

Great work!