Exemple #1
0
    private void Split(NvBlastActor actor)
    {
        NvBlastActorSplitEvent split = new NvBlastActorSplitEvent();

        split.newActors = _newActorsBuffer;
        var count = actor.Split(split, _leafChunkCount);

        Vector3    localPosition = Vector3.zero;
        Quaternion localRotation = Quaternion.identity;

        if (split.deletedActor != IntPtr.Zero)
        {
            if (actor.userData != null)
            {
                var parentRigidbody = (actor.userData as Rigidbody);
                localPosition = parentRigidbody.transform.localPosition;
                localRotation = parentRigidbody.transform.localRotation;
            }
            OnActorDestroyed(actor);
        }
        for (int i = 0; i < count; i++)
        {
            int elementSize = Marshal.SizeOf(typeof(IntPtr));
            var ptr         = Marshal.ReadIntPtr(split.newActors, elementSize * i);
            OnActorCreated(new NvBlastActor(_blastFamily, ptr), localPosition, localRotation);
        }
    }
    public UInt32 Split(NvBlastActorSplitEvent result, UInt32 newActorsMaxCount)
    {
        var    scratchSize    = NvBlastActorGetRequiredScratchForSplit(ptr, NvBlastWrapper.Log);
        UInt32 newActorsCount = NvBlastActorSplit(result, ptr, newActorsMaxCount, NvBlastWrapper.GetScratch((int)scratchSize), NvBlastWrapper.Log, null);

        if (result.deletedActor != IntPtr.Zero)
        {
            ResetPtr();
        }
        return(newActorsCount);
    }
 static extern UInt32 NvBlastActorSplit([In, Out] NvBlastActorSplitEvent result, IntPtr actor, UInt32 newActorsMaxCount, IntPtr scratch, NvBlastWrapper.NvBlastLog logFn, NvBlastTimers timers);