fix(watch): advance rep based on distance swum instead of lap count
This commit is contained in:
@@ -11,7 +11,7 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
|
||||
@Published var selectedWorkout: StoredWorkout?
|
||||
@Published var currentSetIndex = 0
|
||||
@Published var currentRep = 0
|
||||
@Published var currentLapDistance = 0
|
||||
@Published var currentRepDistanceSwum: Int = 0
|
||||
@Published var elapsedSeconds: TimeInterval = 0
|
||||
@Published var heartRate: Double = 0
|
||||
@Published var activeCalories: Double = 0
|
||||
@@ -157,6 +157,7 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
|
||||
completedLaps = []
|
||||
healthKitLapCount = 0
|
||||
currentStrokeCount = 0
|
||||
currentRepDistanceSwum = 0
|
||||
|
||||
startHealthKitWorkout(poolLength: selectedWorkout?.poolLength ?? 25)
|
||||
startHeartRateQuery()
|
||||
@@ -235,6 +236,8 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
|
||||
guard let workout = selectedWorkout else { return }
|
||||
let currentSet = workout.sets[currentSetIndex]
|
||||
|
||||
currentRepDistanceSwum = 0
|
||||
|
||||
if currentRep + 1 < currentSet.repCount {
|
||||
currentRep += 1
|
||||
lapStartTime = Date()
|
||||
@@ -296,10 +299,9 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
|
||||
}
|
||||
|
||||
var currentSetDistanceSwum: Double {
|
||||
guard let workout = selectedWorkout, currentSetIndex < workout.sets.count else { return 0 }
|
||||
let setDistance = workout.sets[currentSetIndex].distancePerRep
|
||||
let completedInSet = completedLaps.filter { $0.setPosition == currentSetIndex + 1 }.count
|
||||
return Double(setDistance) * Double(completedInSet)
|
||||
completedLaps
|
||||
.filter { $0.setPosition == currentSetIndex + 1 }
|
||||
.reduce(0) { $0 + Double($1.distance) }
|
||||
}
|
||||
|
||||
var currentSetTotalDistance: Double {
|
||||
@@ -490,11 +492,12 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
|
||||
|
||||
let now = Date()
|
||||
let duration = lapStartTime.map { now.timeIntervalSince($0) } ?? 0
|
||||
let lapDistance = Int(workout.poolLength)
|
||||
|
||||
let lap = CompletedLap(
|
||||
setPosition: currentSetIndex + 1,
|
||||
repNumber: currentRep + 1,
|
||||
distance: workout.sets[currentSetIndex].distancePerRep,
|
||||
distance: lapDistance,
|
||||
duration: duration,
|
||||
heartRate: Int(heartRate),
|
||||
strokeType: workout.sets[currentSetIndex].stroke,
|
||||
@@ -503,6 +506,8 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
|
||||
completedLaps.append(lap)
|
||||
currentStrokeCount = 0
|
||||
|
||||
currentRepDistanceSwum += lapDistance
|
||||
|
||||
WKInterfaceDevice.current().play(.click)
|
||||
|
||||
DispatchQueue.main.async {
|
||||
@@ -512,7 +517,9 @@ class WorkoutManager: NSObject, ObservableObject, HKLiveWorkoutBuilderDelegate {
|
||||
self.lapDetected = false
|
||||
}
|
||||
|
||||
advanceToNextRep()
|
||||
if currentRepDistanceSwum >= workout.sets[currentSetIndex].distancePerRep {
|
||||
advanceToNextRep()
|
||||
}
|
||||
lapStartTime = Date()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user