void Select_Delete (void) { brush_t *brush; g_ptrSelectedFaces.RemoveAll(); g_ptrSelectedFaceBrushes.RemoveAll(); //selected_face = NULL; clearSelection(); g_qeglobals.d_select_count = 0; g_qeglobals.d_num_move_points = 0; while (selected_brushes.next != &selected_brushes) { brush = selected_brushes.next; if (brush->patchBrush) { //Patch_Delete(brush->nPatchID); Patch_Delete(brush->pPatch); } if (brush->terrainBrush) { Terrain_Delete(brush->pTerrain ); } Brush_Free (brush); } // FIXME: remove any entities with no brushes Sys_UpdateWindows (W_ALL); }
brush_t *Terrain_Parse( void ) { terrainMesh_t *pm; terrainVert_t *vert; int w; int h; GetToken( true ); if ( strcmp( token, "{" ) ) { return NULL; } // get width GetToken( false ); w = atoi( token ); // get height GetToken( false ); h = atoi( token ); pm = MakeNewTerrain( w, h ); // get scale_x GetToken( false ); pm->scale_x = atoi( token ); // get scale_y GetToken( false ); pm->scale_y = atoi( token ); // get origin GetToken( true ); pm->origin[ 0 ] = atoi( token ); GetToken( false ); pm->origin[ 1 ] = atoi( token ); GetToken( false ); pm->origin[ 2 ] = atoi( token ); // get the height map vert = pm->heightmap; for( h = 0; h < pm->height; h++ ) { for( w = 0; w < pm->width; w++, vert++ ) { GetToken( true ); vert->height = atoi( token ); if ( !Terrain_ParseFace( &vert->tri ) ) { Terrain_Delete( pm ); return NULL; } Terrain_AddTexture( pm, vert->tri.texture ); } } GetToken( true ); if ( strcmp( token, "}" ) ) { Terrain_Delete( pm ); return NULL; } return AddBrushForTerrain( pm, false ); }