private void ApplyRadialDamage(NvBlastActor actor, Vector3 localPosition, float minRadius, float maxRadius, float compressive) { _fractureBuffers.chunkFractureCount = _cubeAsset.solverAssetDesc.chunkCount; _fractureBuffers.bondFractureCount = _cubeAsset.solverAssetDesc.bondCount; NvBlastExtRadialDamageDesc desc = new NvBlastExtRadialDamageDesc(); desc.minRadius = minRadius; desc.maxRadius = maxRadius; desc.damage = compressive; desc.p0 = localPosition.x; desc.p1 = localPosition.y; desc.p2 = localPosition.z; IntPtr dam = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(NvBlastExtRadialDamageDesc))); Marshal.StructureToPtr(desc, dam, false); var damP = new NvBlastDamageProgram() { graphShaderFunction = NvBlastExtShadersWrapper.NvBlastExtFalloffGraphShader, subgraphShaderFunction = NvBlastExtShadersWrapper.NvBlastExtFalloffSubgraphShader }; var programParams = new NvBlastExtProgramParams() { damageDescBuffer = dam, material = IntPtr.Zero, accelerator = IntPtr.Zero }; actor.GenerateFracture(_fractureBuffers, damP, programParams); actor.ApplyFracture(_fractureBuffers); if (_fractureBuffers.bondFractureCount + _fractureBuffers.chunkFractureCount > 0) { Split(actor); } Marshal.FreeHGlobal(dam); }
public void GenerateFracture(NvBlastFractureBuffers buffers, NvBlastDamageProgram program, NvBlastExtProgramParams programParams) { NvBlastActorGenerateFracture(buffers, ptr, program, programParams, NvBlastWrapper.Log, null); }
static extern void NvBlastActorGenerateFracture(NvBlastFractureBuffers commandBuffers, IntPtr actor, NvBlastDamageProgram program, NvBlastExtProgramParams programParams, NvBlastWrapper.NvBlastLog logFn, NvBlastTimers timers);