| 437 | } |
| 438 | |
| 439 | static void get_dwarf_buckets(color_ostream &out, |
| 440 | vector<df::unit*> &citizen_combat_units, |
| 441 | vector<df::unit*> &other_combat_units, |
| 442 | vector<df::unit*> &nicknamed_units, |
| 443 | vector<df::unit*> &job_units, |
| 444 | vector<df::unit*> &other_units) |
| 445 | { |
| 446 | for (auto unit : world->units.active) { |
| 447 | if (Units::isDead(unit) || !Units::isActive(unit) || unit->flags1.bits.caged || unit->flags1.bits.chained || Units::isHidden(unit)) |
| 448 | continue; |
| 449 | if (!config.include_animals && Units::isAnimal(unit)) |
| 450 | continue; |
| 451 | if (!config.include_hostiles && Units::isDanger(unit)) |
| 452 | continue; |
| 453 | if (!config.include_visitors && Units::isVisitor(unit)) |
| 454 | continue; |
| 455 | if (!config.include_wildlife && Units::isWildlife(unit)) |
| 456 | continue; |
| 457 | |
| 458 | if (is_in_combat(unit)) { |
| 459 | TRACE(cycle, out).print("unit {} is in combat: {}\n", unit->id, DF2CONSOLE(Units::getReadableName(unit))); |
| 460 | if (Units::isCitizen(unit, true) || Units::isResident(unit, true)) |
| 461 | citizen_combat_units.push_back(unit); |
| 462 | else |
| 463 | other_combat_units.push_back(unit); |
| 464 | } else if (config.prefer_nicknamed && !unit->name.nickname.empty()) { |
| 465 | nicknamed_units.push_back(unit); |
| 466 | } else if (unit->job.current_job && !boring_jobs.contains(unit->job.current_job->job_type)) { |
| 467 | job_units.push_back(unit); |
| 468 | } else { |
| 469 | other_units.push_back(unit); |
| 470 | } |
| 471 | } |
| 472 | } |
| 473 | |
| 474 | static void add_bucket_to_vectors(const vector<df::unit*> &bucket, vector<df::unit*> &units, vector<float> &intervals, vector<float> &weights, float weight) { |
| 475 | if (bucket.empty()) |
no test coverage detected