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

Method explode

game/state/shared/aequipment.cpp:640–725  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

638}
639
640void AEquipment::explode(GameState &state)
641{
642 Vec3<float> position;
643 auto item = ownerItem.lock();
644 if (item)
645 {
646 position = item->position;
647 }
648 else
649 {
650 position = ownerAgent->unit->position;
651 }
652 if (ownerAgent)
653 {
654 if (!ownerUnit)
655 {
656 ownerUnit = ownerAgent->unit;
657 }
658 ownerAgent->removeEquipment(state, shared_from_this());
659 }
660 switch (type->type)
661 {
662 case AEquipmentType::Type::Grenade:
663 state.current_battle->addExplosion(
664 state, position, type->explosion_graphic, type->damage_type, type->damage,
665 type->explosion_depletion_rate,
666 ownerUnit ? ownerUnit->owner : (ownerAgent ? ownerAgent->owner : ownerOrganisation),
667 ownerUnit);
668 break;
669 case AEquipmentType::Type::Weapon:
670 case AEquipmentType::Type::Ammo:
671 {
672 auto payload = getPayloadType();
673 // If no payload or brainsucker then nothing
674 if (!payload || payload->damage_type->effectType == DamageType::EffectType::Brainsucker)
675 {
676 break;
677 }
678 if (!config().getBool("OpenApoc.NewFeature.PayloadExplosion"))
679 {
680 break;
681 }
682 // If explosive just blow up
683 if (payload->damage_type->explosive)
684 {
685 state.current_battle->addExplosion(
686 state, position, payload->explosion_graphic, payload->damage_type,
687 payload->damage, payload->explosion_depletion_rate,
688 ownerUnit ? ownerUnit->owner
689 : (ownerAgent ? ownerAgent->owner : ownerOrganisation),
690 ownerUnit);
691 break;
692 }
693 // Otherwise shoot stray shots into air
694 auto shots = std::min(ammo, (int)MAX_PAYLOAD_EXPLOSION_SHOTS);
695 auto bItem = ownerItem.lock();
696 if (!bItem)
697 {

Callers 2

dieMethod · 0.80
applyEnzymeEffectMethod · 0.80

Calls 6

randBoundsInclusiveFunction · 0.85
addExplosionMethod · 0.80
getBoolMethod · 0.80
addObjectToMapMethod · 0.80
insertMethod · 0.80
removeEquipmentMethod · 0.45

Tested by

no test coverage detected