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

Method refreshUnitVision

game/state/battle/battleunit.cpp:612–709  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

610}
611
612void BattleUnit::refreshUnitVision(GameState &state, bool forceBlind,
613 StateRef<BattleUnit> targetUnit)
614{
615 auto &battle = *state.current_battle;
616 auto lastVisibleUnits = visibleUnits;
617 auto ticks = state.gameTime.getTicks();
618 visibleUnits.clear();
619 visibleEnemies.clear();
620
621 // Vision is actually updated only if conscious, otherwise we clear visible units and that's it
622 if (isConscious())
623 {
624 if (!targetUnit)
625 {
626 if (!forceBlind)
627 {
628 calculateVisionToTerrain(state);
629 calculateVisionToUnits(state);
630 }
631 }
632 else
633 {
634 visibleUnits = lastVisibleUnits;
635 if (!forceBlind && calculateVisionToUnit(state, *targetUnit))
636 {
637 if (visibleUnits.find(targetUnit) == visibleUnits.end())
638 {
639 visibleUnits.insert(targetUnit);
640 }
641 }
642 else
643 {
644 if (visibleUnits.find(targetUnit) != visibleUnits.end())
645 {
646 visibleUnits.erase(targetUnit);
647 }
648 }
649 }
650 }
651
652 // Add newly visible units to owner's list and enemy list
653 for (auto &vu : visibleUnits)
654 {
655 // owner's visible units list
656 if (lastVisibleUnits.find(vu) == lastVisibleUnits.end() &&
657 battle.visibleUnits[owner].find(vu) == battle.visibleUnits[owner].end())
658 {
659 battle.visibleUnits[owner].insert(vu);
660 if (owner == state.current_battle->currentPlayer &&
661 owner->isRelatedTo(vu->owner) == Organisation::Relation::Hostile &&
662 (battle.lastVisibleTime[owner].find(vu) == battle.lastVisibleTime[owner].end() ||
663 battle.lastVisibleTime[owner][vu] + TICKS_SUPPRESS_SPOTTED_MESSAGES <= ticks))
664 {
665 vu->sendAgentEvent(state, GameEventType::HostileSpotted);
666 state.current_battle->notifyAction(vu->position, vu);
667 }
668 }
669 // battle and units's visible enemies list (Do not count civilians as enemy)

Callers 3

initBattleMethod · 0.80
updateVisionMethod · 0.80
refreshUnitVisibilityMethod · 0.80

Calls 9

getTicksMethod · 0.80
endMethod · 0.80
insertMethod · 0.80
isRelatedToMethod · 0.80
sendAgentEventMethod · 0.80
notifyActionMethod · 0.80
getAITypeMethod · 0.80
getPlayerMethod · 0.80
clearMethod · 0.45

Tested by

no test coverage detected