/// <summary> /// Calculate split goals based upon configured values /// </summary> /// <returns>SplitGoals or null if no goals</returns> public static SplitGoals GetSplitGoals() { Splits splits = ZAMsettings.Settings.Splits; if (!splits.ShowSplits || !splits.CalculateGoal) { return(null); } double numSplits = splits.GoalDistance / splits.SplitDistance; if (numSplits < 1) { return(null); } if (splits.GoalTime.TotalSeconds < 1) { return(null); } double goalSpeed = Math.Round((splits.GoalDistance / splits.GoalTime.TotalSeconds) * 3600, 1); double goalDistance = Math.Round(splits.GoalDistance, 1); SplitGoals splitGoals = new SplitGoals(goalSpeed, goalDistance, splits.SplitsInKm, splits.GoalTime); TimeSpan splitTime = new TimeSpan(0, 0, (int)Math.Round(splits.GoalTime.TotalSeconds / numSplits, 0)); int curDistance = 0; TimeSpan curTime = new TimeSpan(); for (int i = 0; i < (int)numSplits; i++) { int totalDistance = curDistance + splits.SplitDistance; TimeSpan totalTime = curTime.Add(splitTime); SplitGoal item = new SplitGoal(splits.SplitDistance, splitTime, totalDistance, totalTime, splits.SplitsInKm); splitGoals.Goals.Add(item); curDistance = totalDistance; curTime = totalTime; } if (numSplits != (int)numSplits) { double lastSplitDistance = Math.Round(splits.GoalDistance - curDistance, 1); TimeSpan lastSplitTime = splits.GoalTime.Subtract(curTime); SplitGoal item = new SplitGoal(lastSplitDistance, lastSplitTime, goalDistance, splits.GoalTime, splits.SplitsInKm); splitGoals.Goals.Add(item); } return(splitGoals); }
public void Start() { if (!m_started) { m_splits = ZAMsettings.Settings.Splits; m_splitGoals = SplitsManager.GetSplitGoals(); // returns null if no goals m_eventCount = 0; m_splitCount = 0; m_startTime = DateTime.Now; m_splitStartTime = m_startTime; m_lastSplitMeters = 0; m_started = true; } }