void AAS_CalcReachAndClusters( struct quakefile_s *qf ) { float time; Log_Print( "loading collision map...\n" ); // if ( !qf->pakfile[0] ) { strcpy( qf->pakfile, qf->filename ); } //load the map CM_LoadMap( (char *) qf, qfalse, &( *aasworld ).bspchecksum ); //get a handle to the world model worldmodel = CM_InlineModel( 0 ); // 0 = world, 1 + are bmodels //initialize bot import structure AAS_InitBotImport(); //load the BSP entity string AAS_LoadBSPFile(); //init physics settings AAS_InitSettings(); //initialize AAS link heap AAS_InitAASLinkHeap(); //initialize the AAS linked entities for the new map AAS_InitAASLinkedEntities(); //reset all reachabilities and clusters ( *aasworld ).reachabilitysize = 0; ( *aasworld ).numclusters = 0; //set all view portals as cluster portals in case we re-calculate the reachabilities and clusters (with -reach) AAS_SetViewPortalsAsClusterPortals(); //calculate reachabilities AAS_InitReachability(); time = 0; while ( AAS_ContinueInitReachability( time ) ) time++; //calculate clusters AAS_InitClustering(); } //end of the function AAS_CalcReachAndClusters
//=========================================================================== // // Parameter: - // Returns: - // Changes Globals: - //=========================================================================== void AAS_ContinueInit(float time) { //if no AAS file loaded if (!aasworld.loaded) return; //if AAS is already initialized if (aasworld.initialized) return; //calculate reachability, if not finished return if (AAS_ContinueInitReachability(time)) return; //initialize clustering for the new map AAS_InitClustering(); //if reachability has been calculated and an AAS file should be written //or there is a forced data optimization if (aasworld.savefile || ((int)LibVarGetValue("forcewrite"))) { //optimize the AAS data if ((int)LibVarValue("aasoptimize", "0")) AAS_Optimize(); //save the AAS file if (AAS_WriteAASFile(aasworld.filename)) { botimport.Print(PRT_MESSAGE, "%s written succesfully\n", aasworld.filename); } //end if else { botimport.Print(PRT_ERROR, "couldn't write %s\n", aasworld.filename); } //end else } //end if //initialize the routing AAS_InitRouting(); //at this point AAS is initialized AAS_SetInitialized(); } //end of the function AAS_ContinueInit