… | |
… | |
103 | $PREFETCHING = 0; |
103 | $PREFETCHING = 0; |
104 | } |
104 | } |
105 | |
105 | |
106 | my %MAP_EXITS; |
106 | my %MAP_EXITS; |
107 | |
107 | |
108 | sub prefetch_map { |
108 | sub prefetch_map($) { |
109 | my ($map) = @_; |
109 | my ($map) = @_; |
110 | |
110 | |
111 | my $exit = $MAP_EXITS{$map->path} ||= find_exits $map; |
111 | my $exit = $MAP_EXITS{$map->path} ||= find_exits $map; |
112 | prefetch map => $_ for @$exit; |
112 | prefetch map => $_ for @$exit; |
113 | } |
113 | } |
… | |
… | |
125 | Event->timer (interval => 0.2, cb => sub { |
125 | Event->timer (interval => 0.2, cb => sub { |
126 | @players = map $_->ob->name, cf::player::list unless @players; |
126 | @players = map $_->ob->name, cf::player::list unless @players; |
127 | my $player = cf::player::find pop @players |
127 | my $player = cf::player::find pop @players |
128 | or return; |
128 | or return; |
129 | |
129 | |
|
|
130 | if (my $map = $player->ob->map) { |
130 | prefetch_map $player->ob->map; |
131 | prefetch_map $map; |
|
|
132 | } |
|
|
133 | |
131 | prefetch map => +($player->get_savebed)[0]; |
134 | prefetch map => +($player->get_savebed)[0]; |
132 | }); |
135 | }); |
133 | } |
136 | } |
134 | |
137 | |
135 | # prefetch all .pl files every few minutes (thats only a "few" megabytes) |
138 | # prefetch all .pl files every few minutes (thats only a "few" megabytes) |