MCPcopy Create free account
hub / github.com/DFHack/dfhack / updateRoomAssignments

Method updateRoomAssignments

library/modules/Military.cpp:238–308  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

236}
237
238void 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

Callers

nothing calls this directly

Calls 5

insert_into_vectorFunction · 0.85
findFunction · 0.50
sizeMethod · 0.45
eraseMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected