public void Missions(JournalMissions m) { List <string> toresurrect = new List <string>(); foreach (var mi in m.ActiveMissions) { string kn = MissionList.Key(mi.MissionID, mi.Name); if (missionlist.Missions.ContainsKey(kn)) { MissionState ms = missionlist.Missions[kn]; if (ms.State == MissionState.StateTypes.Died) // if marked died... { System.Diagnostics.Debug.WriteLine("Missions in active list but marked died" + kn); toresurrect.Add(kn); } } } if (toresurrect.Count > 0) // if any.. { missionlist = new MissionList(missionlist); // shallow copy missionlist.Resurrect(toresurrect); } }
public void Missions(JournalMissions m) { List <string> toresurrect = new List <string>(); HashSet <string> active = new HashSet <string>(); List <string> failed = new List <string>(); List <string> completed = new List <string>(); List <string> disappeared = new List <string>(); foreach (var mi in m.ActiveMissions) { string kn = Key(mi.MissionID, mi.Name); active.Add(kn); //System.Diagnostics.Debug.WriteLine(m.EventTimeUTC.ToStringZulu() + " Mission " + kn + " is active"); if (history.ContainsKey(kn)) { MissionState ms = history.GetLast(kn); if (ms.State == MissionState.StateTypes.Died) // if marked died... { System.Diagnostics.Debug.WriteLine("Missions in active list but marked died" + kn); toresurrect.Add(kn); } } else { System.Diagnostics.Debug.WriteLine("Active mission '" + kn + "' But no Mission accepted"); } } foreach (var mi in m.FailedMissions) { string kn = Key(mi.MissionID, mi.Name); failed.Add(kn); } foreach (var mi in m.CompletedMissions) { string kn = Key(mi.MissionID, mi.Name); completed.Add(kn); } foreach (var kvp in history.GetLast()) { if (!active.Contains(kvp.Key) && !failed.Contains(kvp.Key) && !completed.Contains(kvp.Key) && kvp.Value.State == MissionState.StateTypes.InProgress) { System.Diagnostics.Debug.WriteLine(m.EventTimeUTC.ToStringZulu() + " Mission " + kvp.Value.Mission.EventTimeUTC.ToStringZulu() + " " + kvp.Key + " disappeared ****"); disappeared.Add(kvp.Key); } } if (toresurrect.Count > 0) // if any.. { Resurrect(toresurrect); } if (disappeared.Count > 0) { Disappeared(disappeared, m.EventTimeUTC); } if (failed.Count > 0) { ChangeStateIfInProgress(failed, MissionState.StateTypes.Failed, m.EventTimeUTC); } if (completed.Count > 0) { ChangeStateIfInProgress(failed, MissionState.StateTypes.Completed, m.EventTimeUTC); } }