… | |
… | |
21 | for my $map (@$files) { |
21 | for my $map (@$files) { |
22 | utf8::decode $map; |
22 | utf8::decode $map; |
23 | next if $map =~ /\.(?:pst|meta)$/; |
23 | next if $map =~ /\.(?:pst|meta)$/; |
24 | $map =~ s/∕/\//g; |
24 | $map =~ s/∕/\//g; |
25 | cf::map::find $map; |
25 | cf::map::find $map; |
26 | Coro::Timer::sleep 0.3; |
26 | $cf::WAIT_FOR_TICK_ONE->wait; |
27 | } |
27 | } |
28 | |
28 | |
29 | #TODO: should also preload random maps... |
29 | #TODO: should also preload random maps... |
30 | }; |
30 | }; |
31 | |
31 | |
… | |
… | |
68 | } |
68 | } |
69 | }; |
69 | }; |
70 | |
70 | |
71 | $SCHEDULER->prio (-2); |
71 | $SCHEDULER->prio (-2); |
72 | |
72 | |
73 | # map load prefetch for tiled maps, possibly exits, too |
|
|
74 | cf::map->attach ( |
|
|
75 | on_enter => sub { |
|
|
76 | my ($map, $pl) = @_; |
|
|
77 | |
|
|
78 | (cf::async { |
|
|
79 | my @diag; # diagonal neighbours |
|
|
80 | |
|
|
81 | for (0 .. 3) { |
|
|
82 | my $neigh = $map->tile_path ($_) |
|
|
83 | or next; |
|
|
84 | $neigh = cf::map::find $neigh, $map |
|
|
85 | or next; |
|
|
86 | $neigh->load; |
|
|
87 | |
|
|
88 | push @diag, [$neigh->tile_path (($_ + 3) % 4), $neigh], |
|
|
89 | [$neigh->tile_path (($_ + 1) % 4), $neigh]; |
|
|
90 | } |
|
|
91 | |
|
|
92 | for (@diag) { |
|
|
93 | my $neigh = cf::map::find @$_ |
|
|
94 | or next; |
|
|
95 | $neigh->load; |
|
|
96 | } |
|
|
97 | })->prio (2); |
|
|
98 | # higher prio because prefetching is very important |
|
|
99 | # as it prefetches maps that can make the server block |
|
|
100 | }, |
|
|
101 | ); |
|
|
102 | |
|
|