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

Method ExplosionHit

ogsr_engine/xrGame/ShellHit.cpp:30–64  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

28}
29
30void CPHShell::ExplosionHit(const Fvector& pos, const Fvector& dir, float val, const u16 id)
31{
32 if (!isActive())
33 return;
34 EnableObject(0);
35 // Fvector local_pos;local_pos.set(0.f,0.f,0.f);
36 ELEMENT_I i = elements.begin(), e = elements.end();
37 float impulse = val / _sqrt(_sqrt((float)elements.size()));
38 for (; i != e; i++)
39 {
40 // Fvector max_area_dir;
41 CPHElement* element = (*i);
42 // element->get_MaxAreaDir(max_area_dir);
43 // float sign=max_area_dir.dotproduct(dir)>0.f ? 1.f : -1.f;
44 // max_area_dir.mul(sign);
45 u16 gn = element->CPHGeometryOwner::numberOfGeoms();
46 float g_impulse = impulse / gn;
47 for (u16 j = 0; j < gn; ++j)
48 {
49 Fvector r_dir, r_pos, r_box;
50 float rad = element->getRadius();
51 r_box.set(rad, rad, rad);
52 r_pos.random_point(r_box);
53 r_dir.random_dir();
54 if (!fis_zero(pos.magnitude(), EPS_L))
55 {
56 r_dir.mul(0.5f);
57 r_dir.add(dir);
58 }
59
60 r_dir.normalize_safe(); // safe???
61 element->applyImpulseTrace(r_pos, r_dir, g_impulse, element->CPHGeometryOwner::Geom(j)->bone_id());
62 }
63 }
64}

Callers

nothing calls this directly

Calls 15

_sqrtFunction · 0.85
fis_zeroFunction · 0.85
random_pointMethod · 0.80
random_dirMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45
getRadiusMethod · 0.45
setMethod · 0.45
magnitudeMethod · 0.45
mulMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected