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

Method triggerBrainsuckers

game/state/battle/battleunit.cpp:3770–3810  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3768}
3769
3770void BattleUnit::triggerBrainsuckers(GameState &state)
3771{
3772 // Androids do not trigger brainsuckers
3773 if (this->agent->type->immuneToBrainsuckers)
3774 {
3775 return;
3776 }
3777
3778 StateRef<DamageType> brainsucker = {&state, "DAMAGETYPE_BRAINSUCKER"};
3779 if (brainsucker->dealDamage(100, agent->type->damage_modifier) == 0)
3780 return;
3781
3782 auto it = state.current_battle->items.begin();
3783 while (it != state.current_battle->items.end())
3784 {
3785 auto i = *it++;
3786 if (!i->item->primed || i->item->triggerDelay > 0)
3787 {
3788 continue;
3789 }
3790 if (i->item->triggerType == TriggerType::Proximity &&
3791 i->item->getPayloadType()->damage_type->effectType ==
3792 DamageType::EffectType::Brainsucker &&
3793 BattleUnitTileHelper::getDistanceStatic(position, i->position) <= i->item->triggerRange)
3794 {
3795 auto aliens = state.getAliens();
3796 if (aliens->isRelatedTo(owner) == Organisation::Relation::Hostile)
3797 {
3798 // Sound for hatching
3799 if (state.battle_common_sample_list->brainsuckerHatch)
3800 {
3801 fw().soundBackend->playSample(state.battle_common_sample_list->brainsuckerHatch,
3802 position);
3803 }
3804 state.current_battle->spawnUnit(state, aliens, {&state, "AGENTTYPE_BRAINSUCKER"},
3805 i->position, {0, 1}, BodyState::Throwing);
3806 i->die(state, false);
3807 }
3808 }
3809 }
3810}
3811
3812void BattleUnit::startFalling(GameState &state)
3813{

Callers

nothing calls this directly

Calls 9

dealDamageMethod · 0.80
endMethod · 0.80
getPayloadTypeMethod · 0.80
getAliensMethod · 0.80
isRelatedToMethod · 0.80
spawnUnitMethod · 0.80
beginMethod · 0.45
playSampleMethod · 0.45
dieMethod · 0.45

Tested by

no test coverage detected