| 1302 | } |
| 1303 | |
| 1304 | bool MapExtras::MapCache::WriteAll() |
| 1305 | { |
| 1306 | auto world = df::global::world; |
| 1307 | df::job_list_link* job_link = world->jobs.list.next; |
| 1308 | df::job_list_link* next = nullptr; |
| 1309 | for (;job_link;job_link = next) { |
| 1310 | next = job_link->next; |
| 1311 | df::job* job = job_link->item; |
| 1312 | df::coord pos = job->pos; |
| 1313 | df::coord blockpos(pos.x>>4,pos.y>>4,pos.z); |
| 1314 | auto iter = blocks.find(blockpos); |
| 1315 | if (iter == blocks.end()) |
| 1316 | continue; |
| 1317 | df::coord2d bpos(pos.x - (blockpos.x<<4),pos.y - (blockpos.y<<4)); |
| 1318 | auto block = iter->second; |
| 1319 | if (!block->designated_tiles.test(bpos.x+bpos.y*16)) |
| 1320 | continue; |
| 1321 | bool is_designed = ENUM_ATTR(job_type,is_designation,job->job_type); |
| 1322 | if (!is_designed) |
| 1323 | continue; |
| 1324 | // Remove designation job. DF will create a new one in the next tick |
| 1325 | // processing. |
| 1326 | Job::removeJob(job); |
| 1327 | } |
| 1328 | std::map<DFCoord, Block *>::iterator p; |
| 1329 | for(p = blocks.begin(); p != blocks.end(); p++) |
| 1330 | { |
| 1331 | p->second->Write(); |
| 1332 | } |
| 1333 | return true; |
| 1334 | } |
| 1335 | |
| 1336 | MapExtras::Block *MapExtras::MapCache::BlockAt(DFCoord blockcoord) |
| 1337 | { |
no test coverage detected