void UpdateSolver() { m_particleData.container = this; m_particleData.particleData = FlexExt.MapParticleData(m_containerHandle); UpdateBuffer(m_particleData.particleData); #if UNITY_EDITOR if (m_showTimers) { Flex.GetTimers(m_solverHandle, ref m_timers); } #endif FlexExt.UpdateInstances(m_containerHandle); UpdateDrawFluid(m_particleData); UpdateDetectShapes(m_particleData); m_fluidIndexCount = 0; if (onFlexUpdate != null) { onFlexUpdate(m_particleData); } FlexExt.UnmapParticleData(m_containerHandle); #if UNITY_EDITOR FlexExt.TickContainer(m_containerHandle, Time.fixedDeltaTime, m_substepCount, m_showTimers); #else FlexExt.TickContainer(m_containerHandle, Time.fixedDeltaTime, m_substepCount); #endif }
public void TestCreateDestroyInstance() { Flex.Library lib = Flex.Init(Flex.FLEX_VERSION, ErrorCallback); Flex.SolverDesc slvDsc = default(Flex.SolverDesc); Flex.SetSolverDescDefaults(ref slvDsc); slvDsc.maxParticles = 1000; Flex.Solver solver = Flex.CreateSolver(lib, ref slvDsc); FlexExt.Container container = FlexExt.CreateContainer(lib, solver, 1000); FlexExt.Asset.Handle asset = CreateTestClothAsset(); FlexExt.ParticleData data = FlexExt.MapParticleData(container); Matrix4x4 transform = Matrix4x4.identity; FlexExt.Instance.Handle instance = FlexExt.CreateInstance(container, ref data, asset, ref transform, 1.0f, 1.0f, 1.0f, Flex.MakePhase(1, Flex.Phase.Default), 1.0f); Assert.AreEqual(asset.asset.numParticles, instance.instance.numParticles); FlexExt.DestroyInstance(container, instance); FlexExt.UnmapParticleData(container); FlexExt.DestroyAsset(asset); FlexExt.DestroyContainer(container); Flex.DestroySolver(solver); Flex.Shutdown(lib); }
public FlexExt.Instance.Handle CreateInstance(FlexExt.Asset.Handle _assetHandle, Matrix4x4 _location, Vector3 _velocity, int _phase, float _massScale) { FlexExt.ParticleData particleData = FlexExt.MapParticleData(m_containerHandle); FlexExt.Instance.Handle instanceHandle = FlexExt.CreateInstance(m_containerHandle, ref particleData, _assetHandle, ref _location, _velocity.x, _velocity.y, _velocity.z, _phase, 1.0f / _massScale); UpdateBuffer(particleData); FlexExt.UnmapParticleData(m_containerHandle); return(instanceHandle); }
void UpdateSolverEditor() { FlexExt.TickContainer(m_containerHandle, Time.fixedDeltaTime, 0); ParticleData particleData = new ParticleData(); particleData.container = this; particleData.particleData = FlexExt.MapParticleData(m_containerHandle); UpdateBuffer(particleData.particleData); m_fluidIndexCount = 0; if (onFlexUpdate != null) { onFlexUpdate(particleData); } UpdateDrawFluid(particleData); FlexExt.UnmapParticleData(m_containerHandle); }
public void TestLockUnlockParticleData() { Flex.Library lib = Flex.Init(Flex.FLEX_VERSION, ErrorCallback); Flex.SolverDesc slvDsc = default(Flex.SolverDesc); Flex.SetSolverDescDefaults(ref slvDsc); slvDsc.maxParticles = 1000; Flex.Solver solver = Flex.CreateSolver(lib, ref slvDsc); FlexExt.Container container = FlexExt.CreateContainer(lib, solver, 1000); FlexExt.ParticleData data = FlexExt.MapParticleData(container); Assert.AreNotEqual(IntPtr.Zero, data.particles); FlexExt.UnmapParticleData(container); FlexExt.DestroyContainer(container); Flex.DestroySolver(solver); Flex.Shutdown(lib); }