| 186 | } |
| 187 | |
| 188 | inline void cancel_job(df::job* job) { |
| 189 | if (job) { |
| 190 | const df::coord &pos = job->pos; |
| 191 | df::map_block* job_block = Maps::getTileBlock(pos); |
| 192 | uint16_t x, y; |
| 193 | x = pos.x % 16; |
| 194 | y = pos.y % 16; |
| 195 | df::tile_designation &designation = job_block->designation[x][y]; |
| 196 | auto type = job->job_type; |
| 197 | ChannelManager::Get().jobs.erase(pos); |
| 198 | Job::removeWorker(job); |
| 199 | Job::removePostings(job, true); |
| 200 | Job::removeJob(job); |
| 201 | job_block->flags.bits.designated = true; |
| 202 | job_block->occupancy[x][y].bits.dig_marked = true; |
| 203 | switch (type) { |
| 204 | case job_type::Dig: |
| 205 | designation.bits.dig = df::tile_dig_designation::Default; |
| 206 | break; |
| 207 | case job_type::CarveUpwardStaircase: |
| 208 | designation.bits.dig = df::tile_dig_designation::UpStair; |
| 209 | break; |
| 210 | case job_type::CarveDownwardStaircase: |
| 211 | designation.bits.dig = df::tile_dig_designation::DownStair; |
| 212 | break; |
| 213 | case job_type::CarveUpDownStaircase: |
| 214 | designation.bits.dig = df::tile_dig_designation::UpDownStair; |
| 215 | break; |
| 216 | case job_type::CarveRamp: |
| 217 | designation.bits.dig = df::tile_dig_designation::Ramp; |
| 218 | break; |
| 219 | case job_type::DigChannel: |
| 220 | designation.bits.dig = df::tile_dig_designation::Channel; |
| 221 | break; |
| 222 | default: |
| 223 | designation.bits.dig = df::tile_dig_designation::No; |
| 224 | break; |
| 225 | } |
| 226 | } |
| 227 | } |
| 228 | |
| 229 | inline void cancel_job(const df::coord &map_pos) { |
| 230 | cancel_job(ChannelManager::Get().jobs.find_job(map_pos)); |
no test coverage detected