MCPcopy Create free account
hub / github.com/OpenApoc/OpenApoc / updateInfiltration

Method updateInfiltration

game/state/shared/organisation.cpp:579–616  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

577}
578
579void Organisation::updateInfiltration(GameState &state)
580{
581 StateRef<Organisation> org = {&state, id};
582 if (org == state.getPlayer() || org == state.getAliens())
583 {
584 return;
585 }
586
587 if (org->takenOver)
588 {
589 org->infiltrationValue = 200;
590 return;
591 }
592
593 // FIXME: Properly read incursions value and difficulty
594 int ufoIncursions = 1;
595 int divizor = 42 - ufoIncursions;
596
597 // Calculate infiltration modifier
598 int infiltrationModifier = 0;
599 for (auto &b : buildings)
600 {
601 int infiltrationBuilding = 0;
602 for (auto alien : b->current_crew)
603 {
604 infiltrationBuilding += alien.second * alien.first->infiltrationSpeed;
605 }
606 infiltrationBuilding *= b->function->infiltrationSpeed * org->infiltrationSpeed;
607 infiltrationModifier += infiltrationBuilding;
608 }
609 infiltrationModifier /= divizor;
610 infiltrationModifier -= state.difficulty;
611 if (state.gameTime.getHours() % 2)
612 {
613 infiltrationModifier--;
614 }
615 org->infiltrationValue = clamp(org->infiltrationValue + infiltrationModifier, 0, 200);
616}
617
618float Organisation::updateRelations(StateRef<Organisation> &playerOrg)
619{

Callers

nothing calls this directly

Calls 4

clampFunction · 0.85
getPlayerMethod · 0.80
getAliensMethod · 0.80
getHoursMethod · 0.80

Tested by

no test coverage detected