… | |
… | |
65 | "$path/gridmap.regn.png", |
65 | "$path/gridmap.regn.png", |
66 | ], |
66 | ], |
67 | 1 => sub { |
67 | 1 => sub { |
68 | my ($src) = @_; |
68 | my ($src) = @_; |
69 | |
69 | |
70 | my $map = cf::from_json $src->[0]; |
70 | my $map = cf::decode_json $src->[0]; |
71 | |
71 | |
72 | my $size = $map->{tile_w} * $map->{tile_h} * $map->{grid_w} * $map->{grid_h} |
72 | my $size = $map->{tile_w} * $map->{tile_h} * $map->{grid_w} * $map->{grid_h} |
73 | or cf::cleanup "$path/gridmap.meta: empty gridmap?"; |
73 | or cf::cleanup "$path/gridmap.meta: empty gridmap?"; |
74 | |
74 | |
75 | ($map->{arc_data}, $map->{arc_plt}) = load_indexed "$path/gridmap.arch", $size; |
75 | ($map->{arc_data}, $map->{arc_plt}) = load_indexed "$path/gridmap.arch", $size; |
… | |
… | |
81 | Coro::Storable::thaw $map |
81 | Coro::Storable::thaw $map |
82 | } |
82 | } |
83 | |
83 | |
84 | sub reload() { |
84 | sub reload() { |
85 | $WORLD = load_gridmap "$MAPDIR/world"; |
85 | $WORLD = load_gridmap "$MAPDIR/world"; |
86 | warn "worldmap gridmap loaded."; |
86 | warn "worldmap gridmap loaded.\n"; |
87 | } |
87 | } |
88 | |
88 | |
89 | # this is contorted, but likely the correct way to acquire the lock :) |
89 | { |
90 | cf::sync_job { |
|
|
91 | my $guard = cf::lock_acquire "ext::world_gridmap"; |
90 | my $guard = cf::lock_acquire "ext::world_gridmap"; |
|
|
91 | |
|
|
92 | cf::post_init { |
92 | cf::async_ext { |
93 | cf::async_ext { |
|
|
94 | $Coro::current->{desc} = "worldmap loader"; |
93 | reload; |
95 | reload; |
94 | undef $guard; |
96 | undef $guard; |
|
|
97 | }; |
95 | }; |
98 | }; |
96 | }; |
99 | } |
97 | |
100 | |
98 | sub wxwy { |
101 | sub wxwy { |
99 | $_[0]->path =~ m{/world/world_(\d\d\d)_(\d\d\d)$} |
102 | $_[0]->path =~ m{/world/world_(\d\d\d)_(\d\d\d)$} |
100 | ? ($1, $2) |
103 | ? ($1, $2) |
101 | : (0, 0) |
104 | : (0, 0) |
… | |
… | |
132 | } |
135 | } |
133 | |
136 | |
134 | sub fill { |
137 | sub fill { |
135 | my ($self) = @_; |
138 | my ($self) = @_; |
136 | |
139 | |
137 | $self->add_underlay ("\x00" x ($WORLD->{tile_w} * $WORLD->{tile_h}), 0, $WORLD->{tile_w}, $WORLD->{arc_plt}); |
140 | $self->add_underlay ("\x00" x ($WORLD->{tile_w} * $WORLD->{tile_h}), 0, $WORLD->{tile_w}, $WORLD->{arc_plt});#d# |
138 | $self->default_region (cf::region::find $WORLD->{reg_plt}[0]); |
141 | $self->default_region (cf::region::find $WORLD->{reg_plt}[0]); |
139 | } |
142 | } |
140 | |
143 | |
141 | sub load { |
144 | sub load { |
142 | my ($self) = @_; |
145 | my ($self) = @_; |
… | |
… | |
144 | if ($self->{load_path}) { |
147 | if ($self->{load_path}) { |
145 | $self->SUPER::load; |
148 | $self->SUPER::load; |
146 | } else { |
149 | } else { |
147 | $self->alloc; |
150 | $self->alloc; |
148 | $self->fill; |
151 | $self->fill; |
149 | $self->in_memory (cf::MAP_IN_MEMORY); |
152 | $self->in_memory (cf::MAP_ACTIVE); |
150 | $self->activate; |
153 | $self->activate; |
151 | } |
154 | } |
152 | } |
155 | } |
153 | |
156 | |
154 | sub post_load { |
157 | sub post_load { |