… | |
… | |
55 | |
55 | |
56 | 1 |
56 | 1 |
57 | } |
57 | } |
58 | |
58 | |
59 | sub clean_random_maps { |
59 | sub clean_random_maps { |
|
|
60 | return;#d# |
60 | my $files = Coro::AIO::aio_readdir $cf::RANDOMDIR |
61 | my $files = Coro::AIO::aio_readdir $cf::RANDOMDIR |
61 | or return; |
62 | or return; |
62 | |
63 | |
63 | my $META_TIMEOUT = $cf::CFG{map_random_meta_timeout} || 86400 * 7; |
64 | my $META_TIMEOUT = $cf::CFG{map_random_meta_timeout} || 86400 * 7; |
64 | |
65 | |
… | |
… | |
80 | # called by the random map generator |
81 | # called by the random map generator |
81 | sub find_style_; |
82 | sub find_style_; |
82 | sub find_style_($$) { |
83 | sub find_style_($$) { |
83 | my ($path, $difficulty) = @_; |
84 | my ($path, $difficulty) = @_; |
84 | |
85 | |
85 | my $mapdir = cf::datadir . "/" . cf::mapdir; |
|
|
86 | |
|
|
87 | my $map; |
86 | my $map; |
88 | |
87 | |
89 | $map = cf::map::find $path |
88 | $map = cf::map::find $path |
90 | unless aio_stat "$mapdir/$path.map"; |
89 | unless aio_stat "$cf::MAPDIR/$path.map"; |
91 | |
90 | |
92 | unless ($map) { |
91 | unless ($map) { |
93 | # search files and/or dirs |
92 | # search files and/or dirs |
94 | if (my ($dirs, $nondirs) = aio_scandir "$mapdir/$path/", 1) { |
93 | if (my ($dirs, $nondirs) = aio_scandir "$cf::MAPDIR/$path/", 1) { |
95 | my @entries = sort grep s/\.map$//, @$nondirs; |
94 | my @entries = sort grep s/\.map$//, @$nondirs; |
96 | |
95 | |
97 | if ($difficulty < 0) { |
96 | if ($difficulty < 0) { |
98 | # pick a fully random map, but only a map, do not recurse |
97 | # pick a fully random map, but only a map, do not recurse |
99 | $map = cf::map::find "$path/$entries[cf::rmg_rndm scalar @entries]" |
98 | $map = cf::map::find "$path/$entries[cf::rmg_rndm scalar @entries]" |
… | |
… | |
136 | if ($map) { |
135 | if ($map) { |
137 | $map->load; |
136 | $map->load; |
138 | $map->deactivate; |
137 | $map->deactivate; |
139 | } |
138 | } |
140 | |
139 | |
141 | warn "return $dir,$name,$difficulty => $map\n" if $difficulty >= 0;#d# |
140 | #warn "return $dir,$name,$difficulty => $map\n" if $difficulty >= 0;#d# |
142 | $map |
141 | $map |
143 | } |
142 | } |
144 | |
143 | |
145 | # clean up old temp maps regularly |
144 | # clean up old temp maps regularly |
146 | our $CLEAN_RANDOM_MAPS = cf::periodic 3600, Coro::unblock_sub { |
145 | our $CLEAN_RANDOM_MAPS = cf::periodic 3600, Coro::unblock_sub { |
147 | clean_random_maps; |
146 | clean_random_maps; |
148 | }; |
147 | }; |
149 | |
148 | |
150 | # map generator stresstest, NEVER enable under normal circumstances |
149 | # map generator stresstest, NEVER enable under normal circumstances |
151 | if (0) { |
150 | if ($ENV{STRESSTEST}) { |
152 | cf::async { |
151 | cf::async { |
153 | my $seed = 0; |
152 | my $seed = 0; |
154 | while () { |
153 | while () { |
155 | my $map = cf::map::new; |
154 | my $map = cf::map::new; |
156 | $map->generate_random_map ({ |
155 | $map->generate_random_map ({ |
157 | region => "scorn", |
156 | region => "scorn", |
158 | random_seed => $seed++, |
157 | random_seed => $seed++, |
159 | xsize => (int rand 90) + 3, |
158 | xsize => (int rand 100) + 1, |
160 | ysize => (int rand 90) + 3, |
159 | ysize => (int rand 100) + 1, |
161 | }); |
160 | }); |
162 | # warn sprintf "%d: %d %d\n", $seed, $map->width, $map->height;#d# |
161 | warn sprintf "%d: %dx%d o# %d\n", $seed, $map->width, $map->height, &cf::object::objects_size;#d# |
163 | $map->destroy; |
162 | $map->destroy; |
164 | } |
163 | } |
165 | }; |
164 | }; |
166 | } |
165 | } |
167 | |
166 | |