Torna al Thread
[Serializable]
public class Missions
{
#region Fields (2)
private List<Mission> activeMissions;
private DateTime lastRead;
#endregion Fields
#region Constructors (1)
public Missions()
{
activeMissions = new List<Mission>();
}
#endregion Constructors
#region Properties (6)
public List<Mission> ActiveMissions
{
get
{
return activeMissions;
}
set
{
lastRead = DateTime.Now;
activeMissions = value;
}
}
/// <summary>
/// Returns the number of active missions after having cleaned the list.
/// </summary>
public int CountColonisationMissions
{
get
{
int count = 0;
CleanList();
foreach (Mission item in activeMissions)
{
if (item.Type == MissionType.Colonize)
count++;
}
return count;
}
}
/// <summary>
/// Coutns epionage missions
/// </summary>
public int CountEspioMissions
{
get
{
int count = 0;
CleanList();
foreach (Mission item in activeMissions)
{
if (item.Type == MissionType.Spy)
count++;
}
return count;
}
}
public int CountFarmingMissions
{
get
{
int count = 0;
CleanList();
foreach (Mission item in activeMissions)
{
if (item.Type == MissionType.Farm)
count++;
}
return count;
}
}
public DateTime LastRead
{
get
{
return lastRead;
}
}
public int NumActiveMissions
{
get
{
//CleanList(); //Used to remove events already terminated
return activeMissions.Count;
}
}
#endregion Properties
#region Methods (5)
// Public Methods (4)
public Mission GetFirstMissionToTarget(Planet planet, out DateTime _when)
{
Mission answer = null;
_when = DateTime.MaxValue;
foreach (Mission mis in activeMissions)
{
if (CriptOClock.ActualTime < mis.ArrivalTime && mis.ToPLanet == planet.Position)
{
if (_when > mis.ArrivalTime)
{
_when = mis.ArrivalTime;
answer = mis;
}
}
if (CriptOClock.ActualTime < mis.ReturnTime && mis.FromPLanet == planet.Position)
{
if (_when > mis.ReturnTime)
{
_when = mis.ReturnTime;
answer = mis;
}
}
}
return answer;
}
public Resources GetResourcesComingToPlanet(Planet pla, DateTime withinTime)
{
Resources answer = new Resources();
DateTime when;
foreach (Mission mis in ActiveMissions)
{
answer += mis.GetResourcesComingToPlanet(pla, withinTime, out when);
}
return answer;
}
public List<DateTime> GetTimesOfIncomingResources(Planet pla)
{
List<DateTime> answer = new List<DateTime>();
foreach (Mission mis in ActiveMissions)
{
DateTime timeArriving;
if (mis.GetResourcesComingToPlanet(pla, DateTime.MaxValue, out timeArriving).EquivalentMetal > 0)
{
answer.Add(timeArriving);
}
}
answer.Sort();
return answer;
}
public bool ThereIsAMissionArrivingToPlanet(Planet planet)
{
foreach (Mission mis in activeMissions)
{
if (mis.ToPLanet == planet.Position && mis.ArrivalTime > CriptOClock.ActualTime)
return true;
if (mis.ArrivalTime < CriptOClock.ActualTime && mis.FromPLanet == planet.Position)
return true;
}
return false;
}
private void CleanList()
{
bool exitCondition = true;
Mission toRemove = new Mission(MissionType.Null);
while (exitCondition)
{
exitCondition = false;
foreach (Mission item in ActiveMissions)
{
if (item.ReturnTime > CriptOClock.ActualTime)
{
exitCondition = true;
toRemove = item;
}
}
if (exitCondition)
ActiveMissions.Remove(toRemove);
}
}
#endregion Methods
} //ENd of class Missions