MCPcopy Create free account
hub / github.com/OGSR/OGSR-Engine / ExplodeWaveProcessObject

Method ExplodeWaveProcessObject

ogsr_engine/xrGame/Explosive.cpp:662–710  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

660 pos.add(m_vExplodePos);
661}
662void CExplosive::ExplodeWaveProcessObject(collide::rq_results& storage, CPhysicsShellHolder* l_pGO)
663{
664 Fvector l_goPos;
665 if (l_pGO->Visual())
666 l_pGO->Center(l_goPos);
667 else
668 return; //мне непонятно зачем наносить хит от взрыва по объектам не имеющим вижуал - поэтому игнорируем
669
670#ifdef DEBUG
671 if (ph_dbg_draw_mask.test(phDbgDrawExplosions))
672 {
673 DBG_OpenCashedDraw();
674 }
675#endif
676
677 float l_effect = ExplosionEffect(storage, this, l_pGO, m_vExplodePos, m_fBlastRadius);
678 float l_impuls = m_fBlastHitImpulse * l_effect;
679 float l_hit = m_fBlastHit * l_effect;
680
681 if (l_impuls > .001f || l_hit > 0.001)
682 {
683 Fvector l_dir;
684 l_dir.sub(l_goPos, m_vExplodePos);
685
686 float rmag = _sqrt(m_fUpThrowFactor * m_fUpThrowFactor + 1.f + 2.f * m_fUpThrowFactor * l_dir.y);
687 l_dir.y += m_fUpThrowFactor;
688 // rmag -модуль l_dir после l_dir.y += m_fUpThrowFactor, модуль=_sqrt(l_dir^2+y^2+2.*(l_dir,y)),y=(0,m_fUpThrowFactor,0) (до этого модуль l_dir =1)
689 l_dir.mul(1.f / rmag); //перенормировка
690 NET_Packet P;
691 SHit HS;
692 HS.GenHeader(GE_HIT, l_pGO->ID()); // cast_game_object()->u_EventGen (P,GE_HIT,l_pGO->ID());
693 HS.whoID = Initiator(); // P.w_u16 (Initiator());
694 HS.weaponID = cast_game_object()->ID(); // P.w_u16 (cast_game_object()->ID());
695 HS.dir = l_dir; // P.w_dir (l_dir);
696 HS.power = l_hit; // P.w_float (l_hit);
697 HS.p_in_bone_space = l_goPos; // P.w_vec3 (l_goPos);
698 HS.impulse = l_impuls; // P.w_float (l_impuls);
699 HS.hit_type = (m_eHitTypeBlast); // P.w_u16 (u16(m_eHitTypeBlast));
700 HS.boneID = 0; // P.w_s16 (0);
701 HS.Write_Packet(P);
702 cast_game_object()->u_EventSend(P);
703 }
704#ifdef DEBUG
705 if (ph_dbg_draw_mask.test(phDbgDrawExplosions))
706 {
707 DBG_ClosedCashedDraw(100000);
708 }
709#endif
710}
711struct SRemovePred
712{
713 bool operator()(CGameObject* O) { return !!O->getDestroy(); }

Callers

nothing calls this directly

Calls 12

DBG_OpenCashedDrawFunction · 0.85
_sqrtFunction · 0.85
DBG_ClosedCashedDrawFunction · 0.85
VisualMethod · 0.80
GenHeaderMethod · 0.80
Write_PacketMethod · 0.80
cast_game_objectFunction · 0.70
CenterMethod · 0.45
testMethod · 0.45
subMethod · 0.45
mulMethod · 0.45
u_EventSendMethod · 0.45

Tested by

no test coverage detected