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

Function follow_a_dwarf

plugins/spectate.cpp:514–558  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

512 }
513
514static void follow_a_dwarf(color_ostream &out) {
515 DEBUG(cycle,out).print("choosing a unit to follow\n");
516
517 vector<df::unit*> citizen_combat_units;
518 vector<df::unit*> other_combat_units;
519 vector<df::unit*> nicknamed_units;
520 vector<df::unit*> job_units;
521 vector<df::unit*> other_units;
522 get_dwarf_buckets(out, citizen_combat_units, other_combat_units, nicknamed_units, job_units, other_units);
523
524 set_next_cycle_unpaused_ms(out, !citizen_combat_units.empty());
525
526 // coalesce the buckets and add weights
527 vector<df::unit*> units;
528 vector<float> intervals;
529 vector<float> weights;
530 intervals.push_back(0);
531 add_bucket(citizen_combat_units, units, intervals, weights, config.prefer_conflict ? CITIZEN_COMBAT_PREFERRED_WEIGHT : JOB_WEIGHT);
532 add_bucket(other_combat_units, units, intervals, weights, config.prefer_conflict ? OTHER_COMBAT_PREFERRED_WEIGHT : JOB_WEIGHT);
533 add_bucket(nicknamed_units, units, intervals, weights, NICKNAMED_CITIZEN_PREFERRED_WEIGHT);
534 add_bucket(job_units, units, intervals, weights, JOB_WEIGHT);
535 add_bucket(other_units, units, intervals, weights, OTHER_WEIGHT);
536
537 if (units.empty()) {
538 DEBUG(cycle,out).print("no units to follow\n");
539 return;
540 }
541
542 std::piecewise_constant_distribution<float> distribution(intervals.begin(), intervals.end(), weights.begin());
543 int unit_idx = distribution(rng);
544 df::unit *unit = units[unit_idx];
545
546 if (debug_cycle.isEnabled(DebugCategory::LDEBUG)) {
547 DUMP_BUCKET(citizen_combat_units);
548 DUMP_BUCKET(other_combat_units);
549 DUMP_BUCKET(nicknamed_units);
550 DUMP_BUCKET(job_units);
551 DUMP_BUCKET(other_units);
552 DUMP_FLOAT_VECTOR(intervals);
553 DUMP_FLOAT_VECTOR(weights);
554 DEBUG(cycle,out).print("selected unit idx {}\n", unit_idx);
555 }
556
557 unit_history.add_and_follow(out, unit);
558}
559
560/////////////////////////////////////////////////////
561// Lua API

Callers 3

scan_forwardMethod · 0.85

Calls 8

get_dwarf_bucketsFunction · 0.85
add_bucketFunction · 0.85
add_and_followMethod · 0.80
printMethod · 0.45
emptyMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected