Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
load_mission.h File Reference

Go to the source code of this file.

Functions

void LoadMission (const char *, const std::string &scriptname, bool loadfirst)
 
void delayLoadMission (std::string missionfile)
 
void delayLoadMission (std::string missionfile, string script)
 
void processDelayedMissions ()
 
void UnpickleMission (std::string pickled)
 
std::string PickleAllMissions ()
 
std::string UnpickleAllMissions (FILE *)
 
std::string UnpickleAllMissions (char *&buf)
 
std::string PickledDataSansMissionName (std::string file)
 

Function Documentation

void delayLoadMission ( std::string  missionfile)

Definition at line 93 of file load_mission.cpp.

References delayed_missions.

94 {
95  delayed_missions.push_back( delayed_mission( str, string( "" ) ) );
96 }
void delayLoadMission ( std::string  missionfile,
string  script 
)
void LoadMission ( const char *  ,
const std::string &  scriptname,
bool  loadfirst 
)

Definition at line 231 of file load_mission.cpp.

References _Universe, a, Subcmd::AcceptMission, Universe::AccessCockpit(), active_missions, Universe::activeStarSystem(), StarSystem::AddUnit(), Flightgroup::ainame, benchmark, UnitFactory::createUnit(), Universe::CurrentCockpit(), vs_options::empty_mission, f, Flightgroup::faction, fighter, FactionUtil::GetFactionIndex(), Mission::getNthPlayerMission(), Cockpit::GetParent(), Unit::LoadAIScript(), mission, mission_name, VSFileSystem::MissionFile, Flightgroup::name, Network, Flightgroup::nr_ships, VSFileSystem::Ok, Flightgroup::pos, Unit::Position(), pushSaveString(), QVector, Unit::rSize(), NetServer::sendMission(), SERVER, Unit::SetPosAndCumPos(), Unit::SetTurretAI(), Flightgroup::type, and VSServer.

232 {
233  using namespace VSFileSystem;
234  string mission_name( nission_name );
235  const char *friendly_mission_name = nission_name;
236  if (nission_name[0] == '#') {
237  //Allows you to title a mission without loading that file.
238  mission_name = string();
239  friendly_mission_name++;
240  }
241  if ( mission_name.empty() )
243  printf( "%s", script.c_str() );
244  VSFile f;
245  VSError err = f.OpenReadOnly( mission_name, MissionFile );
246  if (err > Ok)
247  return;
248  f.Close();
250  pushSaveString( _Universe->CurrentCockpit(), "active_scripts", script );
251  pushSaveString( _Universe->CurrentCockpit(), "active_missions", nission_name );
252  }
253  active_missions.push_back( new Mission( mission_name.c_str(), script ) );
254 
255  mission = active_missions.back();
256  active_missions.back()->initMission();
257 
258  char fightername[1024];
259  vector< Flightgroup* >::const_iterator siter;
260  vector< Flightgroup* >fg = active_missions.back()->flightgroups;
261  Unit *fighter;
262  if (Network != NULL) {
263  for (siter = fg.begin(); siter != fg.end(); siter++) {
264  Flightgroup *fg = *siter;
265  string fg_name = fg->name;
266  string fullname = fg->type;
267  strncpy( fightername, fullname.c_str(), 1023 );
268  fightername[1023] = '\0';
269  int a = 0;
270  int tmptarget = 0;
271  string ainame = fg->ainame;
272  float fg_radius = 0.0;
273  for (int s = 0; s < fg->nr_ships; s++) {
274  QVector pox;
275 
276  pox.i = fg->pos.i+s*fg_radius*3;
277  pox.j = fg->pos.i+s*fg_radius*3;
278  pox.k = fg->pos.i+s*fg_radius*3;
279  if (pox.i == pox.j && pox.j == pox.k && pox.k == 0) {
280  pox.i = rand()*10000./RAND_MAX-5000;
281  pox.j = rand()*10000./RAND_MAX-5000;
282  pox.k = rand()*10000./RAND_MAX-5000;
283  }
284  if ( _Universe->AccessCockpit()->GetParent() ) {
286  pox = pox+fposs; //adds our own position onto this
287  }
288  tmptarget = FactionUtil::GetFactionIndex( fg->faction ); //that should not be in xml?
289  string modifications( "" );
290  if (a != 0 || loadFirstUnit)
291  fighter = UnitFactory::createUnit( fightername, false, tmptarget, modifications, fg, s );
292  else
293  continue;
294  fighter->SetPosAndCumPos( pox );
295 
296  fg_radius = fighter->rSize();
297  if (benchmark > 0.0 || a != 0) {
298  fighter->LoadAIScript( ainame );
299  fighter->SetTurretAI();
300  }
302  a++;
303  } //for nr_ships
304  } //end of for flightgroups
305  }
306  if (active_missions.size() > 0)
307  //Give the mission a name.
308  active_missions.back()->mission_name = friendly_mission_name;
309  active_missions.back()->player_num = _Universe->CurrentCockpit();
310  if (SERVER) {
311  int num = active_missions.back()->getPlayerMissionNumber();
312  if (num > 0)
314  friendly_mission_name, num-1 );
315  }
316  active_missions.back()->DirectorInitgame();
318  //return true;
319 }
std::string PickleAllMissions ( )

Definition at line 135 of file load_mission.cpp.

References active_missions, i, lengthify(), and XMLSupport::tostring().

Referenced by SaveGame::WriteDynamicUniverse().

136 {
137  std::string res;
138  int count = 0;
139  for (unsigned int i = 0; i < active_missions.size(); i++) {
140  string tmp = active_missions[i]->Pickle();
141  if (tmp.length() || i == 0) {
142  count++;
143  res += lengthify( tmp );
144  }
145  }
146  return XMLSupport::tostring( count )+" "+res;
147 }
std::string PickledDataSansMissionName ( std::string  file)

Definition at line 23 of file load_mission.cpp.

Referenced by SaveGame::ReloadPickledData(), UnpickleAllMissions(), and UnpickleMission().

24 {
25  string::size_type newline = pickled.find( "\n" );
26  if (newline != string::npos)
27  return pickled.substr( newline+1, pickled.length()-(newline+1) );
28  else
29  return pickled;
30 }
void processDelayedMissions ( )
std::string UnpickleAllMissions ( FILE *  )

Definition at line 183 of file load_mission.cpp.

References active_missions, i, PickledDataSansMissionName(), ReadIntSpace(), XMLSupport::tostring(), UnpickleMission(), and VSFileSystem::vs_read().

Referenced by SaveGame::ReadSavedPackets().

184 {
185  std::string retval;
186  unsigned int nummissions = ReadIntSpace( fp );
187  retval += XMLSupport::tostring( (int) nummissions )+" ";
188  for (unsigned int i = 0; i < nummissions; i++) {
189  unsigned int picklelength = ReadIntSpace( fp );
190  retval += XMLSupport::tostring( (int) picklelength )+" ";
191  char *temp = (char*) malloc( sizeof (char)*(1+picklelength) );
192  temp[0] = 0;
193  temp[picklelength] = 0;
194  VSFileSystem::vs_read( temp, picklelength, 1, fp );
195  retval += temp;
196  if ( i < active_missions.size() )
197  active_missions[i]->SetUnpickleData( PickledDataSansMissionName( temp ) );
198  else
199  UnpickleMission( temp );
200  free( temp );
201  }
202  return retval;
203 }
std::string UnpickleAllMissions ( char *&  buf)

Definition at line 204 of file load_mission.cpp.

References active_missions, i, VsnetOSS::memcpy(), PickledDataSansMissionName(), ReadIntSpace(), XMLSupport::tostring(), and UnpickleMission().

205 {
206  std::string retval;
207  unsigned int nummissions = ReadIntSpace( buf );
208  retval += XMLSupport::tostring( (int) nummissions )+" ";
209  for (unsigned int i = 0; i < nummissions; i++) {
210  unsigned int picklelength = ReadIntSpace( buf );
211  retval += XMLSupport::tostring( (int) picklelength )+" ";
212  char *temp = (char*) malloc( sizeof (char)*(1+picklelength) );
213  temp[0] = 0;
214  temp[picklelength] = 0;
215  memcpy( temp, buf, picklelength );
216  buf += picklelength;
217  //VSFileSystem::vs_read (temp,picklelength,1,fp);
218  retval += temp;
219  if ( i < active_missions.size() )
220  active_missions[i]->SetUnpickleData( PickledDataSansMissionName( temp ) );
221  else
222  UnpickleMission( temp );
223  free( temp );
224  }
225  return retval;
226 }
void UnpickleMission ( std::string  pickled)

Definition at line 119 of file load_mission.cpp.

References active_missions, accountXML::file, PickledDataOnlyMissionName(), and PickledDataSansMissionName().

Referenced by SaveGame::ReloadPickledData(), and UnpickleAllMissions().

120 {
121  std::string file = PickledDataOnlyMissionName( pickled );
122  pickled = PickledDataSansMissionName( pickled );
123  if ( pickled.length() ) {
124  active_missions.push_back( new Mission( file.c_str() ) );
125  active_missions.back()->initMission();
126  active_missions.back()->SetUnpickleData( pickled );
127  }
128 }