Skip to content

Commit

Permalink
Add radianDifference into StickManager.swift
Browse files Browse the repository at this point in the history
  • Loading branch information
tekezo committed Dec 24, 2023
1 parent 3486646 commit 82f0bbf
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 10 deletions.
28 changes: 19 additions & 9 deletions appendix/GamePadViewer/src/StickManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ public class StickManager: ObservableObject {
let updateTimerInterval = 0.02 // 20 ms
var previousHorizontalDoubleValue = 0.0
var previousVerticalDoubleValue = 0.0
var previousMagnitude = 0.0

var deadzoneTask: Task<(), Never>?
var updateTimer: Cancellable?
Expand Down Expand Up @@ -102,11 +103,7 @@ public class StickManager: ObservableObject {
}

if deltaMagnitude > 0 {
radianDiff = abs(deltaRadian - radian).truncatingRemainder(
dividingBy: 2 * Double.pi)
if radianDiff > Double.pi {
radianDiff = 2 * Double.pi - radianDiff
}
radianDiff = StickManager.radianDifference(deltaRadian, radian)

if !accelerationFixed {
let threshold = 0.174533 // 10 degree
Expand Down Expand Up @@ -146,14 +143,27 @@ public class StickManager: ObservableObject {
}
}

pointerX += deltaMagnitude * cos(deltaRadian)
pointerX = max(0.0, min(1.0, pointerX))
pointerY += deltaMagnitude * sin(deltaRadian)
pointerY = max(0.0, min(1.0, pointerY))
if magnitude >= previousMagnitude {
let scale = 1.0 / 64

pointerX += deltaMagnitude * cos(deltaRadian) * scale
pointerX = max(0.0, min(1.0, pointerX))
pointerY -= deltaMagnitude * sin(deltaRadian) * scale
pointerY = max(0.0, min(1.0, pointerY))
}

previousHorizontalDoubleValue = horizontal.lastDoubleValue
previousVerticalDoubleValue = vertical.lastDoubleValue
previousMagnitude = magnitude
}
}

static public func radianDifference(_ r1: Double, _ r2: Double) -> Double {
let diff = abs(r1 - r2).truncatingRemainder(dividingBy: 2 * Double.pi)
if diff > Double.pi {
return 2 * Double.pi - diff
}
return diff
}

@Published var rightStick = Stick()
Expand Down
7 changes: 6 additions & 1 deletion appendix/GamePadViewer/src/View/ContentView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@ struct InformationView: View {
Text("deltaRadian: \(rightStick.deltaRadian)")
Text("deltaMagnitude: \(rightStick.deltaMagnitude)")
}
Divider()
Group {
Text("pointerX \(rightStick.pointerX)")
Text("pointerY \(rightStick.pointerY)")
}
}
.frame(width: 350)
}
Expand Down Expand Up @@ -76,7 +81,7 @@ struct StickView: View {
)
.padding(
.top,
circleSize / 2.0 + sin(rightStick.radian)
circleSize / 2.0 - sin(rightStick.radian)
* rightStick.magnitude * circleSize / 2.0 - indicatorSize / 2.0
)
}
Expand Down

0 comments on commit 82f0bbf

Please sign in to comment.