MCPcopy Create free account
hub / github.com/NVIDIAGameWorks/Blast / DamageToolController

Method DamageToolController

samples/SampleBase/ui/DamageToolController.cpp:64–256  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

62///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
63
64DamageToolController::DamageToolController()
65 : m_damage(100.0f), m_toolColor(1.0f, 1.0f, 1.0f, 0.4f),
66 m_toolRenderMaterial(nullptr), m_sphereToolRenderable(nullptr), m_lineToolRenderable(nullptr),
67 m_explosiveImpulse(100), m_damagerIndex(0), m_stressForceFactor(1.0f), m_isMousePressed(false), m_damageCountWhilePressed(0)
68{
69 // damage amount calc using NvBlastExtMaterial
70 auto getDamageAmountFn = [](const float damage, ExtPxActor* actor)
71 {
72 const NvBlastExtMaterial* material = actor->getFamily().getMaterial();
73 return material ? material->getNormalizedDamage(damage) : 0.f;
74 };
75
76 // Damage functions
77 auto radialDamageExecute = [&](const Damager* damager, ExtPxActor* actor, BlastFamily& family, const Damager::DamageData& data)
78 {
79 const float damage = getDamageAmountFn(m_damage, actor);
80 if (damage > 0.f)
81 {
82 NvBlastExtRadialDamageDesc desc =
83 {
84 damage,
85 { data.hitPosition.x, data.hitPosition.y, data.hitPosition.z },
86 damager->radius,
87 damager->radius * 1.6f
88 };
89
90 getBlastController().deferDamage(actor, family, damager->program, &desc, sizeof(desc));
91 }
92 };
93 auto sliceDamageExecute = [&](const Damager* damager, ExtPxActor* actor, BlastFamily& family, const Damager::DamageData& data)
94 {
95 const float damage = getDamageAmountFn(m_damage, actor);
96 if (damage > 0.f)
97 {
98 PxVec3 farEnd = data.origin + data.weaponDir * 1000.0f;
99 PxVec3 farEndPrev = data.origin + data.previousWeaponDir * 1000.0f;
100
101 NvBlastExtTriangleIntersectionDamageDesc desc =
102 {
103 damage,
104 { data.origin.x, data.origin.y, data.origin.z },
105 { farEnd.x, farEnd.y, farEnd.z },
106 { farEndPrev.x, farEndPrev.y, farEndPrev.z },
107 };
108
109 getBlastController().deferDamage(actor, family, damager->program, &desc, sizeof(desc));
110 }
111 };
112 auto capsuleDamageExecute = [&](const Damager* damager, ExtPxActor* actor, BlastFamily& family, const Damager::DamageData& data)
113 {
114 const float damage = getDamageAmountFn(m_damage, actor);
115 if (damage > 0.f)
116 {
117 PxVec3 dir = (data.hitPosition - data.origin).getNormalized();
118 PxVec3 farEnd = data.origin + dir * 10000.0f;
119
120 NvBlastExtCapsuleRadialDamageDesc desc =
121 {

Callers

nothing calls this directly

Calls 8

getMaterialMethod · 0.80
getFamilyMethod · 0.80
getNormalizedDamageMethod · 0.80
deferDamageMethod · 0.80
getNormalizedMethod · 0.80
immediateDamageMethod · 0.80
stressDamageMethod · 0.80
push_backMethod · 0.80

Tested by

no test coverage detected