Update of /cvsroot/gcblue/gcb_wx/src/ai
In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv6071/src/ai
Modified Files:
tcCAPMission.cpp tcMission.cpp tcMissionManager.cpp
Log Message:
Airbase automation updates
Index: tcMission.cpp
===================================================================
RCS file: /cvsroot/gcblue/gcb_wx/src/ai/tcMission.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** tcMission.cpp 28 Sep 2006 02:01:54 -0000 1.1
--- tcMission.cpp 1 Oct 2006 21:07:40 -0000 1.2
***************
*** 35,38 ****
--- 35,63 ----
unsigned long tcMission::nextId = 1;
+ /**
+ * @return true if all mission aircraft do not exist within flightport
+ * Normally this occurs when all have launched (could also be due to damage)
+ */
+ bool tcMission::AllMissionAircraftDeparted() const
+ {
+ for (size_t n=0; n<missionAircraft.size(); n++)
+ {
+ if (missionManager->GetAircraft(missionAircraft[n]) != 0)
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * End mission (safely deletes from mission manager)
+ */
+ void tcMission::EndMission()
+ {
+ missionManager->DeleteMission(id);
+ }
+
unsigned int tcMission::GetId() const
{
Index: tcCAPMission.cpp
===================================================================
RCS file: /cvsroot/gcblue/gcb_wx/src/ai/tcCAPMission.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** tcCAPMission.cpp 28 Sep 2006 02:01:53 -0000 1.1
--- tcCAPMission.cpp 1 Oct 2006 21:07:40 -0000 1.2
***************
*** 101,104 ****
--- 101,108 ----
{
// verify all aircraft have launched and end mission
+ if (AllMissionAircraftDeparted())
+ {
+ EndMission();
+ }
}
Index: tcMissionManager.cpp
===================================================================
RCS file: /cvsroot/gcblue/gcb_wx/src/ai/tcMissionManager.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** tcMissionManager.cpp 28 Sep 2006 02:01:54 -0000 1.1
--- tcMissionManager.cpp 1 Oct 2006 21:07:40 -0000 1.2
***************
*** 45,48 ****
--- 45,53 ----
}
+ void tcMissionManager::DeleteMission(unsigned int missionId)
+ {
+ missionsToDelete.push_back(missionId);
+ }
+
tcAirObject* tcMissionManager::GetAircraft(long id)
{
***************
*** 95,98 ****
--- 100,134 ----
+ /**
+ * Called internally to perform queued deletions
+ */
+ void tcMissionManager::PerformDeletions()
+ {
+ if (missionsToDelete.size() == 0) return;
+
+ std::vector<tcMission*> temp;
+
+ for (size_t n=0; n<missions.size(); n++)
+ {
+ unsigned int missionId = missions[n]->GetId();
+ bool deleteMatch = false;
+ for (size_t k=0; (k<missionsToDelete.size()) && (!deleteMatch); k++)
+ {
+ if (missionsToDelete[k] == missionId) deleteMatch = true;
+ }
+
+ if (!deleteMatch)
+ {
+ temp.push_back(missions[n]);
+ }
+ else
+ {
+ delete missions[n];
+ }
+ }
+
+ missions = temp;
+ }
+
void tcMissionManager::Update(double t)
{
***************
*** 104,107 ****
--- 140,147 ----
missions[n]->Update(t);
}
+
+ PerformDeletions();
+
+ UpdateReserved();
}
|