示例#1
0
void load_world( CHAR_DATA * ch )
{
   FILE *mobfp;
   FILE *shipfp;
   char file1[256];
   char file2[256];
   const char *word;
   int done = 0;
   bool mobfile = FALSE;
   bool shipfile = FALSE;

   snprintf( file1, 256, "%s%s", SYSTEM_DIR, MOB_FILE );
   if( ( mobfp = fopen( file1, "r" ) ) == NULL )
   {
      bug( "%s", "load_world: fopen mob file" );
      perror( file1 );
   }
   else
      mobfile = TRUE;

   snprintf( file2, 256, "%s%s", SYSTEM_DIR, SHIP_FILE );
   if( ( shipfp = fopen( file2, "r" ) ) == NULL )
   {
      bug( "%s", "load_world: fopen ship file" );
      perror( file1 );
   }
   else
      shipfile = TRUE;

   if( mobfile )
   {
      log_string( "World state: loading mobs" );
      while( done == 0 )
      {
         if( feof( mobfp ) )
            done++;
         else
         {
            word = fread_word( mobfp );
            if( str_cmp( word, "#END" ) )
               load_mobile( mobfp );
            else
               done++;
         }
      }
      FCLOSE( mobfp );
   }

   load_obj_files(  );

   if( shipfile )
   {
      done = 0;
      log_string( "World state: loading ships" );
      while( done == 0 )
      {
         if( feof( shipfp ) )
            done++;
         else
         {
            word = fread_word( shipfp );
            if( str_cmp( word, "#END" ) )
               load_ship( shipfp );
            else
               done++;
         }
      }
      FCLOSE( shipfp );
   }

   /*
    * Once loaded, the data needs to be purged in the event it causes a crash so that it won't try to reload 
    */
   unlink( file1 );
   unlink( file2 );
   return;
}
示例#2
0
void main_game::init_ship_models() {
	auto basic_block = std::make_shared<ship_block_definition>();

	basic_block->verticies.push_back(vec2(-10.f, -10.f));
	basic_block->verticies.push_back(vec2(-10.f,  10.f));
	basic_block->verticies.push_back(vec2( 10.f, -10.f));
	basic_block->verticies.push_back(vec2( 10.f,  10.f));

	basic_block->indicies.push_back(0);
	basic_block->indicies.push_back(2);
	basic_block->indicies.push_back(1);

	basic_block->indicies.push_back(1);
	basic_block->indicies.push_back(2);
	basic_block->indicies.push_back(3);

    basic_block->aabb.size.height = 20.f;
    basic_block->aabb.size.width = 20.f;
    basic_block->aabb.position.x = -10.f;
    basic_block->aabb.position.y = -10.f;

	basic_block->signature.push_back(vec2(0, 0));

	basic_block->name = "basic_block";
	basic_block->display_name = "basic block";
	basic_block->group_name = "basics structures";

    auto big_basic_block = std::make_shared<ship_block_definition>();

    big_basic_block->verticies.push_back(vec2(-20.f, -20.f));
    big_basic_block->verticies.push_back(vec2(-20.f, 20.f));
    big_basic_block->verticies.push_back(vec2(20.f, -20.f));
    big_basic_block->verticies.push_back(vec2(20.f, 20.f));

    big_basic_block->indicies.push_back(0);
    big_basic_block->indicies.push_back(2);
    big_basic_block->indicies.push_back(1);

    big_basic_block->indicies.push_back(1);
    big_basic_block->indicies.push_back(2);
    big_basic_block->indicies.push_back(3);

    big_basic_block->signature.push_back(vec2(0, 0));
    big_basic_block->signature.push_back(vec2(1, 0));
    big_basic_block->signature.push_back(vec2(0, 1));
    big_basic_block->signature.push_back(vec2(1, 1));

    big_basic_block->aabb.size.height = 40.f;
    big_basic_block->aabb.size.width = 40.f;
    big_basic_block->aabb.position.x = -20.f;
    big_basic_block->aabb.position.y = -20.f;

    big_basic_block->name = "big_basic_block";
    big_basic_block->display_name = "big basic block";
    big_basic_block->group_name = "basics structures";    
    
    auto basic_tri_block = std::make_shared<ship_block_definition>();

    basic_tri_block->verticies.push_back(vec2(-10.f, -10.f));
    basic_tri_block->verticies.push_back(vec2(-10.f, 10.f));
    basic_tri_block->verticies.push_back(vec2(10.f, -10.f));

    basic_tri_block->indicies.push_back(0);
    basic_tri_block->indicies.push_back(2);
    basic_tri_block->indicies.push_back(1);

    basic_tri_block->aabb.size.height = 20.f;
    basic_tri_block->aabb.size.width = 20.f;
    basic_tri_block->aabb.position.x = -10.f;
    basic_tri_block->aabb.position.y = -10.f;

    basic_tri_block->signature.push_back(vec2(0, 0));

    basic_tri_block->name = "basic_tri_block";
    basic_tri_block->display_name = "basic triangle";
    basic_tri_block->group_name = "basics structures";

    auto big_basic_tri_block = std::make_shared<ship_block_definition>();

    big_basic_tri_block->verticies.push_back(vec2(-20.f, -20.f));
    big_basic_tri_block->verticies.push_back(vec2(-20.f, 20.f));
    big_basic_tri_block->verticies.push_back(vec2(20.f, -20.f));

    big_basic_tri_block->indicies.push_back(0);
    big_basic_tri_block->indicies.push_back(2);
    big_basic_tri_block->indicies.push_back(1);


    big_basic_tri_block->signature.push_back(vec2( 10.f, 0.f));
    big_basic_tri_block->signature.push_back(vec2(-10.f, 0.f));
    big_basic_tri_block->signature.push_back(vec2(0.f,  10.f));
    big_basic_tri_block->signature.push_back(vec2(0.f, -10.f));

    big_basic_tri_block->aabb.size.height = 40.f;
    big_basic_tri_block->aabb.size.width = 40.f;
    big_basic_tri_block->aabb.position.x = -20.f;
    big_basic_tri_block->aabb.position.y = -20.f;

    big_basic_tri_block->name = "big_basic_tri_block";
    big_basic_tri_block->display_name = "big basic triangle";
    big_basic_tri_block->group_name = "basics structures";    
    
    auto huge_basic_tri_block = std::make_shared<ship_block_definition>();

    huge_basic_tri_block->verticies.push_back(vec2(-30.f, -30.f));
    huge_basic_tri_block->verticies.push_back(vec2(-30.f, 30.f));
    huge_basic_tri_block->verticies.push_back(vec2(30.f, -30.f));

    huge_basic_tri_block->indicies.push_back(0);
    huge_basic_tri_block->indicies.push_back(2);
    huge_basic_tri_block->indicies.push_back(1);


    huge_basic_tri_block->signature.push_back(vec2(0, 0));
    huge_basic_tri_block->signature.push_back(vec2(1, 0));
    huge_basic_tri_block->signature.push_back(vec2(0, 1));
    huge_basic_tri_block->signature.push_back(vec2(1, 1));

    huge_basic_tri_block->aabb.size.height = 60.f;
    huge_basic_tri_block->aabb.size.width = 60.f;
    huge_basic_tri_block->aabb.position.x = -30.f;
    huge_basic_tri_block->aabb.position.y = -30.f;

    huge_basic_tri_block->name = "huge_basic_tri_block";
    huge_basic_tri_block->display_name = "huge basic triangle";
    huge_basic_tri_block->group_name = "basics structures";

    ship_sys.block_definitions[basic_block->name] = basic_block;
    ship_sys.block_definitions[big_basic_block->name] = big_basic_block;
    ship_sys.block_definitions[basic_tri_block->name] = basic_tri_block;
    ship_sys.block_definitions[big_basic_tri_block->name] = big_basic_tri_block;
    ship_sys.block_definitions[huge_basic_tri_block->name] = huge_basic_tri_block;

    std::ifstream stream("data/ships.json");
    auto ship_list_root = io::json_io::read(stream);

    for (auto& ship_path : ship_list_root["ships"]) {
        load_ship(ship_path);
    }
}