--- deliantra/server/socket/request.C 2007/01/08 18:18:36 1.61 +++ deliantra/server/socket/request.C 2007/01/20 13:47:17 1.64 @@ -1,26 +1,26 @@ /* - CrossFire, A Multiplayer game for X-windows - - Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team - Copyright (C) 2001 Mark Wedel - Copyright (C) 1992 Frank Tore Johansen - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - The author can be reached via e-mail to -*/ + * CrossFire, A Multiplayer game for X-windows + * + * Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team + * Copyright (C) 2001 Mark Wedel + * Copyright (C) 1992 Frank Tore Johansen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * The author can be reached via e-mail to + */ /** * \file @@ -1554,6 +1554,28 @@ return result; } +// prefetch (and touch) all maps within a specific distancd +static void +prefetch_surrounding_maps (maptile *map, int distance) +{ + map->last_access = runtime; + + if (--distance) + for (int dir = 4; --dir; ) + if (const shstr &path = map->tile_path [dir]) + if (maptile *&neigh = map->tile_map [dir]) + prefetch_surrounding_maps (neigh, distance); + else + neigh = maptile::find_async (path, map); +} + +// prefetch a generous area around the player +static void +prefetch_surrounding_maps (object *op) +{ + prefetch_surrounding_maps (op->map, 3); +} + /** * This function uses the new map1 protocol command to send the map * to the client. It is necessary because the old map command supports @@ -1594,6 +1616,7 @@ return; check_map_change (pl->contr); + prefetch_surrounding_maps (pl); packet sl (socket.mapmode == Map1Cmd ? "map1" : "map1a"); packet esl; @@ -1971,8 +1994,8 @@ { int i, j; sint16 ax, ay, nx, ny; /* ax and ay goes from 0 to max-size of arrays */ - New_Face *face, *floor; - New_Face *floor2; + facetile *face, *floor; + facetile *floor2; int d, mflags; struct Map newmap; maptile *m, *pm;