| 236 | } |
| 237 | |
| 238 | void Military::updateRoomAssignments(int32_t squad_id, int32_t civzone_id, df::squad_use_flags flags) |
| 239 | { |
| 240 | df::squad* squad = df::squad::find(squad_id); |
| 241 | df::building* bzone = df::building::find(civzone_id); |
| 242 | |
| 243 | df::building_civzonest* zone = strict_virtual_cast<df::building_civzonest>(bzone); |
| 244 | |
| 245 | if (squad == nullptr || zone == nullptr) |
| 246 | return; |
| 247 | |
| 248 | df::squad_barracks_infost* room_from_squad = nullptr; |
| 249 | df::building_squad_infost* room_from_building = nullptr; |
| 250 | |
| 251 | for (auto room : squad->rooms) |
| 252 | { |
| 253 | if (room->building_id == civzone_id) |
| 254 | { |
| 255 | room_from_squad = room; |
| 256 | break; |
| 257 | } |
| 258 | } |
| 259 | |
| 260 | for (auto room : zone->squad_room_info) |
| 261 | { |
| 262 | if (room->squad_id == squad_id) |
| 263 | { |
| 264 | room_from_building = room; |
| 265 | break; |
| 266 | } |
| 267 | } |
| 268 | |
| 269 | if (flags.whole == 0 && room_from_squad == nullptr && room_from_building == nullptr) |
| 270 | return; |
| 271 | |
| 272 | //if we're setting 0 flags, and there's no room already, don't set a room |
| 273 | bool avoiding_squad_roundtrip = flags.whole == 0 && room_from_squad == nullptr; |
| 274 | |
| 275 | if (!avoiding_squad_roundtrip && room_from_squad == nullptr) |
| 276 | { |
| 277 | room_from_squad = new df::squad_barracks_infost(); |
| 278 | room_from_squad->building_id = civzone_id; |
| 279 | |
| 280 | insert_into_vector(squad->rooms, &df::squad_barracks_infost::building_id, room_from_squad); |
| 281 | } |
| 282 | |
| 283 | if (room_from_building == nullptr) |
| 284 | { |
| 285 | room_from_building = new df::building_squad_infost(); |
| 286 | room_from_building->squad_id = squad_id; |
| 287 | |
| 288 | insert_into_vector(zone->squad_room_info, &df::building_squad_infost::squad_id, room_from_building); |
| 289 | } |
| 290 | |
| 291 | if (room_from_squad) |
| 292 | room_from_squad->mode = flags; |
| 293 | |
| 294 | room_from_building->mode = flags; |
| 295 |
nothing calls this directly
no test coverage detected