/// <summary> /// Assign a CrewMember to a Position /// </summary> public void AssignCrewMember(Position position, CrewMember crewMember) { if (position != Position.Null) { //if a Position is provided and has a CrewMember already assigned to it, remove them from that position if (PositionCrew.ContainsKey(position)) { AssignCrewMember(Position.Null, PositionCrew[position]); } } if (crewMember != null) { //if a CrewMember is provided and is assigned to a position, remove them from that position var current = GetCrewMemberPosition(crewMember); if (current != Position.Null) { PositionCrew.Remove(current); PositionScores.Remove(current); } if (position != Position.Null) { //add combination of CrewMember and Position to PositionCrew dictionary PositionCrew.Add(position, crewMember); PositionScores.Add(position, 0); crewMember.UpdateSingleBelief(NPCBelief.Position, position); } else { crewMember.UpdateSingleBelief(NPCBelief.Position); } } }
/// <summary> /// Update the score in each Position in order to get the score for this Boat /// </summary> internal void UpdateScore(string managerName) { foreach (var position in Positions) { if (PositionCrew.ContainsKey(position)) { UpdateCrewMemberScore(position, PositionCrew[position], managerName); } } Score = PositionScores.Values.Sum(); }
/// <summary> /// Get the CrewMember (if any) in this Position /// </summary> public static CrewMember CurrentCrewMember(this Position position) { return(PositionCrew.ContainsKey(position) ? PositionCrew[position] : null); }
/// <summary> /// Get the current Position (if any) of a CrewMember /// </summary> public Position GetCrewMemberPosition(CrewMember crewMember) { return(PositionCrew.SingleOrDefault(pair => pair.Value == crewMember).Key); }