/// <summary> /// Check that a CrewMember name is unique within this Team /// </summary> internal void UniqueNameCheck(CrewMember cm) { var unqiue = false; var partialFailCount = 0; //if the name is already in use by another character, reset their name while (!unqiue) { if (partialFailCount < 5) { partialFailCount++; var firstNames = crewMembers.Select(c => c.Value.FirstName).Concat(RetiredCrew.Select(c => c.Value.FirstName)).Concat(Recruits.Select(c => c.Value.FirstName)).ToList(); var lastNames = crewMembers.Select(c => c.Value.LastName).Concat(RetiredCrew.Select(c => c.Value.LastName)).Concat(Recruits.Select(c => c.Value.LastName)).ToList(); if (firstNames.Contains(cm.FirstName) || lastNames.Contains(cm.LastName) || cm.Name == ManagerName) { cm.SelectRandomName(); } else { unqiue = true; } } else { if (crewMembers.ContainsKey(cm.Name) || RetiredCrew.ContainsKey(cm.Name) || Recruits.ContainsKey(cm.Name) || cm.Name == ManagerName) { cm.SelectRandomName(); } else { unqiue = true; } } } }
/// <summary> /// Retire a CrewMember, meaning they can no longer be assigned to a position (mostly used for historical positions) /// </summary> internal void RetireCrew(CrewMember crewMember) { var current = Boat.GetCrewMemberPosition(crewMember); if (current != Position.Null) { Boat.AssignCrewMember(current, null); } crewMembers.Remove(crewMember.Name); RetiredCrew.Add(crewMember.Name, crewMember); crewMember.Retire(); foreach (var cm in crewMembers.Values) { cm.CrewOpinions.Remove(crewMember.Name); cm.RevealedCrewOpinions.Remove(crewMember.Name); } }