home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 March / Gamestar_82_2006-03_dvd.iso / DVDStar / Editace / quake4_sdkv10.exe / source / game / WorldSpawn.cpp < prev    next >
C/C++ Source or Header  |  2005-11-14  |  2KB  |  108 lines

  1. /*
  2. game_worldspawn.cpp
  3.  
  4. Worldspawn class.  Each map has one worldspawn which handles global spawnargs.
  5.  
  6. */
  7.  
  8. #include "../idlib/precompiled.h"
  9. #pragma hdrstop
  10.  
  11. #include "Game_local.h"
  12.  
  13. /*
  14. ================
  15. idWorldspawn
  16.  
  17. Every map should have exactly one worldspawn.
  18. ================
  19. */
  20. CLASS_DECLARATION( idEntity, idWorldspawn )
  21.     EVENT( EV_Remove,                idWorldspawn::Event_Remove )
  22.     EVENT( EV_SafeRemove,            idWorldspawn::Event_Remove )
  23. END_CLASS
  24.  
  25. /*
  26. ================
  27. idWorldspawn::Spawn
  28. ================
  29. */
  30. void idWorldspawn::Spawn( void ) {
  31.     idStr                scriptname;
  32.     idThread            *thread;
  33.     const function_t    *func;
  34.     const idKeyValue    *kv;
  35.  
  36.     assert( gameLocal.world == NULL );
  37.     gameLocal.world = this;
  38.  
  39.     // load script
  40.     scriptname = gameLocal.GetMapName();
  41.     scriptname.SetFileExtension( ".script" );
  42.     if ( fileSystem->ReadFile( scriptname, NULL, NULL ) > 0 ) {
  43.         gameLocal.program.CompileFile( scriptname );
  44.  
  45.         // call the main function by default
  46.         func = gameLocal.program.FindFunction( "main" );
  47.         if ( func != NULL ) {
  48.             thread = new idThread( func );
  49.             thread->DelayedStart( 0 );
  50.         }
  51.     }
  52.  
  53.     // call any functions specified in worldspawn
  54.     kv = spawnArgs.MatchPrefix( "call" );
  55.     while( kv != NULL ) {
  56.         func = gameLocal.program.FindFunction( kv->GetValue() );
  57.         if ( func == NULL ) {
  58.             gameLocal.Error( "Function '%s' not found in script for '%s' key on worldspawn", kv->GetValue().c_str(), kv->GetKey().c_str() );
  59.         }
  60.  
  61.         thread = new idThread( func );
  62.         thread->DelayedStart( 0 );
  63.         kv = spawnArgs.MatchPrefix( "call", kv );
  64.     }
  65. }
  66.  
  67. /*
  68. =================
  69. idWorldspawn::Save
  70. =================
  71. */
  72. void idWorldspawn::Save( idRestoreGame *savefile ) {
  73. }
  74.  
  75. /*
  76. =================
  77. idWorldspawn::Restore
  78. =================
  79. */
  80. void idWorldspawn::Restore( idRestoreGame *savefile ) {
  81.     assert( gameLocal.world == this );
  82.  
  83. // RAVEN BEGIN
  84. // bdube: gravity change
  85.     g_gravity.SetFloat( spawnArgs.GetFloat( "gravity", va( "%f", DEFAULT_GRAVITY) ) );
  86. // RAVEN END
  87. }
  88.  
  89. /*
  90. ================
  91. idWorldspawn::~idWorldspawn
  92. ================
  93. */
  94. idWorldspawn::~idWorldspawn() {
  95.     if ( gameLocal.world == this ) {
  96.         gameLocal.world = NULL;
  97.     }
  98. }
  99.  
  100. /*
  101. ================
  102. idWorldspawn::Event_Remove
  103. ================
  104. */
  105. void idWorldspawn::Event_Remove( void ) {
  106.     gameLocal.Error( "Tried to remove world" );
  107. }
  108.