| 577 | } |
| 578 | |
| 579 | void 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 | |
| 618 | float Organisation::updateRelations(StateRef<Organisation> &playerOrg) |
| 619 | { |