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