| 82 | std::unordered_map<df::coord, df::job*> jobs; |
| 83 | public: |
| 84 | void load(MapExtras::MapCache &map) { |
| 85 | designations.clear(); |
| 86 | DEBUG(general).print("DesignationJobs: reading jobs list\n"); |
| 87 | df::job_list_link* node = df::global::world->jobs.list.next; |
| 88 | while (node) { |
| 89 | df::job* job = node->item; |
| 90 | node = node->next; |
| 91 | |
| 92 | if(!job || !Maps::isValidTilePos(job->pos)) |
| 93 | continue; |
| 94 | |
| 95 | df::tile_designation td = map.designationAt(job->pos); |
| 96 | df::tile_occupancy to = map.occupancyAt(job->pos); |
| 97 | const auto ctd = td.whole; |
| 98 | const auto cto = to.whole; |
| 99 | switch (job->job_type){ |
| 100 | case job_type::Dig: |
| 101 | td.bits.dig = tile_dig_designation::Default; |
| 102 | break; |
| 103 | case job_type::DigChannel: |
| 104 | td.bits.dig = tile_dig_designation::Channel; |
| 105 | break; |
| 106 | case job_type::CarveRamp: |
| 107 | td.bits.dig = tile_dig_designation::Ramp; |
| 108 | break; |
| 109 | case job_type::CarveUpwardStaircase: |
| 110 | td.bits.dig = tile_dig_designation::UpStair; |
| 111 | break; |
| 112 | case job_type::CarveDownwardStaircase: |
| 113 | td.bits.dig = tile_dig_designation::DownStair; |
| 114 | break; |
| 115 | case job_type::CarveUpDownStaircase: |
| 116 | td.bits.dig = tile_dig_designation::UpDownStair; |
| 117 | break; |
| 118 | case job_type::SmoothWall: |
| 119 | case job_type::SmoothFloor: |
| 120 | td.bits.smooth = 1; |
| 121 | break; |
| 122 | case job_type::CarveTrack: |
| 123 | to.bits.carve_track_north = job->specflag.carve_track_flags.bits.carve_track_north; |
| 124 | to.bits.carve_track_south = job->specflag.carve_track_flags.bits.carve_track_south; |
| 125 | to.bits.carve_track_west = job->specflag.carve_track_flags.bits.carve_track_west; |
| 126 | to.bits.carve_track_east = job->specflag.carve_track_flags.bits.carve_track_east; |
| 127 | break; |
| 128 | default: |
| 129 | break; |
| 130 | } |
| 131 | if (ctd != td.whole || cto != to.whole) { |
| 132 | // we found a designation job |
| 133 | designations.emplace(job->pos, designation(job->pos, td, to)); |
| 134 | jobs.emplace(job->pos, job); |
| 135 | } |
| 136 | } |
| 137 | DEBUG(general).print("DesignationJobs: DONE reading jobs list\n"); |
| 138 | } |
| 139 | void remove(const df::coord &pos) { |
| 140 | if(jobs.count(pos)) { |
| 141 | Job::removeJob(jobs[pos]); |
no test coverage detected