Skip to content

Commit

Permalink
Limit max polling rate (#142)
Browse files Browse the repository at this point in the history
* limit max swipe polling rate

* move polling rate limit to ControlMode
  • Loading branch information
XuYicong committed Jun 3, 2024
1 parent 73c3be7 commit 7c16782
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
1 change: 1 addition & 0 deletions PlayTools/Controls/Backend/Action/PlayAction.swift
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,7 @@ class SwipeAction: Action {
counter += 1
self.location.x += deltaX
self.location.y -= deltaY

Toucher.touchcam(point: self.location, phase: UITouch.Phase.moved, tid: &id)
}

Expand Down
30 changes: 27 additions & 3 deletions PlayTools/Controls/Frontend/ControlMode.swift
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,8 @@ public class ControlMode: Equatable {
})
}

AKInterface.shared!.setupMouseMoved({deltaX, deltaY in
self.mouseAdapter.handleMove(deltaX: deltaX, deltaY: deltaY)
})
// Mouse polling rate as high as 1000 causes issue to some games
setupMouseMoved(maxPollingRate: 125)

AKInterface.shared!.setupMouseButton(left: true, right: false, {_, pressed in
self.mouseAdapter.handleLeftButton(pressed: pressed)
Expand All @@ -90,6 +89,31 @@ public class ControlMode: Equatable {
ActionDispatcher.build()
}

private func setupMouseMoved(maxPollingRate: Int) {
let minMoveInterval =
DispatchTimeInterval.milliseconds(1000/maxPollingRate)
var lastMoveWhen = DispatchTime.now()
// Repeat the return value of last processed event
var consumed = true
var movement: CGVector = CGVector()

AKInterface.shared!.setupMouseMoved({deltaX, deltaY in
// limit move frequency
let now = DispatchTime.now()
movement.dy += deltaY
movement.dx += deltaX
if now < lastMoveWhen.advanced(by: minMoveInterval) {
return consumed
}

lastMoveWhen = now
consumed = self.mouseAdapter.handleMove(deltaX: movement.dx, deltaY: movement.dy)
movement.dy = 0
movement.dx = 0
return consumed
})
}

public func set(_ mode: ControlModeLiteral) {
let wasHidden = mouseAdapter?.cursorHidden() ?? false
let first = mouseAdapter == nil
Expand Down

0 comments on commit 7c16782

Please sign in to comment.