/// <summary> /// Start a timer /// </summary> public static void Start(Timing timing) { var existingTimer = Timings.Find(t => t.Name == timing.Name); if (existingTimer == null) { timing.Start(); timing.IsDirty = true; Timings.Add(timing); if (QuestToolsSettings.Instance.DebugEnabled) Logger.Debug("Starting Timer (New) Name={0} Group={1}", timing.Name, timing.Group); } else { existingTimer.Start(); existingTimer.IsDirty = true; if (QuestToolsSettings.Instance.DebugEnabled) Logger.Debug("Starting Timer (Known) '{0}' Group:{1}", timing.Name, timing.Group); } }
/// <summary> /// Load timing data from file /// </summary> private static List<Timing> Load() { Logger.Debug(">> Loading Timings"); var output = new List<Timing>(); try { if (File.Exists(FilePath) && LockManager.GetLock()) { var lines = File.ReadAllLines(FilePath); // Check file format; .Contains avoids having to filter out BOM if (lines.First().Contains(FileHeaderLabels)) { Logger.Log("{0}", lines.First()); Logger.Log("{0}", FileHeaderLabels); Logger.Warn("TimeTracker.csv data format doesn't match, all old timing data will be lost on save"); return output; } foreach (var line in lines.Skip(1)) { var tokens = line.Split(','); var t = new Timing { Name = tokens[0], Group = tokens[1], MinTimeSeconds = tokens[3].ChangeType<int>(), MaxTimeSeconds = tokens[4].ChangeType<int>(), TimesTimed = tokens[5].ChangeType<int>(), TotalTimeSeconds = tokens[6].ChangeType<int>(), FailedCount = tokens[7].ChangeType<int>(), ObjectiveCount = tokens[8].ChangeType<int>() }; t.DebugPrint("Loaded: "); output.Add(t); } LastLoad = DateTime.UtcNow; _loadFailed = false; } else { LockManager.ReleaseLock(); } } catch (Exception ex) { Logger.Log("Load Exception, data will not be saved this game: {0}", ex); _loadFailed = true; LockManager.ReleaseLock(); } return output; }
/// <summary> /// Adds this timer to another timer /// </summary> public Timing Add(Timing timer) { timer.TimesTimed += this.TimesTimed; timer.TotalTimeSeconds += this.TotalTimeSeconds; timer.MaxTimeSeconds = this.MaxTimeSeconds > timer.MaxTimeSeconds ? this.MaxTimeSeconds : timer.MaxTimeSeconds; timer.MinTimeSeconds = timer.MinTimeSeconds == 0 || this.MinTimeSeconds < timer.MinTimeSeconds ? this.MinTimeSeconds : timer.MinTimeSeconds; timer.ObjectiveCount = this.ObjectiveCount > timer.ObjectiveCount ? this.ObjectiveCount : timer.ObjectiveCount; return timer; }