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; }
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); } }