/// <summary>
 /// A MissionModel indicates some action the user wishes to occur, such as moving an entity to a target destination.
 /// </summary>
 /// <param name="action">what will happen</param>
 /// <param name="protagonist">who will do the action</param>
 /// <param name="startTime">when the mission can be started</param>
 /// <param name="start">entity target start state</param>
 /// <param name="finishTime">when the mission should be finished</param>
 /// <param name="destination">entity target finish state</param>
 /// <param name="lateFee">how important it is to finish on time</param>
 public MissionModel(int id, EnumMissionAction action, FSharpSet<int> doerIds,
     DateTime startTime, FSharpSet<int> targets, DateTime finishTime, Vector3D destination, float lateFee)
 {
     Id = id;
     Owner = String.Empty;
     Action = action;
     DoerIds = doerIds;
     StartTime = startTime;
     Targets = targets;
     FinishTime = finishTime;
     Destination = destination;
     LateFee = LateFee;
 }
 public void CreateMission(int id, EnumMissionAction action, FSharpSet<int> doerIds, DateTime startTime, FSharpSet<int> targets, DateTime finishTime, Vector3D destination, float lateFee)
 {
     Send(new CreateMission(new MissionModel(id, action, doerIds, startTime, targets, finishTime, destination, lateFee)));
 }
 // convenience constructor often only one actor is involved
 public MissionModel(int id, EnumMissionAction action, int doerId,
     DateTime startTime, FSharpSet<int> targets, DateTime finishTime, Vector3D destination, float lateFee)
     : this(id, action, new FSharpSet<int>(new[] { doerId }), startTime, targets, finishTime, destination, lateFee) { }