示例#1
0
        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);
    }
示例#3
0
        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);
        }
示例#4
0
        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);
    }