Esempio n. 1
0
        void queryAABB(FluidFixtureParticleQueryCallback callback, FluidAABB aabb)
        {
            if (iterationIndex == 0)
            {
                triggerContactBuffer.Clear();
            }
            for (int i = 0; i < fixtureBuffer.Count; i++)
            {
                FluidFixtureShape fixture = fixtureBuffer [i];
                if (fixture != null)
                {
                    if (fixture.enabled && fixture.gameObject.activeInHierarchy)
                    {
                        if (!fixture.isTrigger() || iterationIndex == 0)
                        {
                            FluidAABB fixtureAABB = fixture.getAABB();
                            if (fixtureAABB.isOverlap(aabb))
                            {
                                int lowerTag = computeTag(inverseDiameter * fixtureAABB.lowerBound.x - 1,
                                                          inverseDiameter * fixtureAABB.upperBound.y + 1);
                                int upperTag = computeTag(inverseDiameter * fixtureAABB.upperBound.x + 1,
                                                          inverseDiameter * fixtureAABB.lowerBound.y - 1);

                                int beginProxy = 0;
                                int endProxy   = count - 1;
                                int firstProxy = findLowerBoundProxy(beginProxy, endProxy, lowerTag);
                                int lastProxy  = findUpperBoundProxy(beginProxy, endProxy, upperTag);

                                for (int j = firstProxy; j < lastProxy; j++)
                                {
                                    callback.reportFixtureAndParticle(fixture, proxyBuffer [j].fp);
                                }
                            }
                        }
                    }
                }
                else
                {
//					removeFixture(fi
                    fixtureBuffer.RemoveAt(i);
                    i--;
                }
            }
        }
Esempio n. 2
0
        public void createParticlesFillShapeForGroup(FluidFixtureShape shape, FluidParticleDef def)
        {
            float     stride = getParticleStride();
            FluidAABB aabb   = shape.getAABB();

//			Color c = def.color;
            for (float y = Mathf.Floor(aabb.lowerBound.y / stride) * stride; y < aabb.upperBound.y; y += stride)
            {
                for (float x = Mathf.Floor(aabb.lowerBound.x / stride) * stride; x < aabb.upperBound.x; x += stride)
                {
                    Vector2 p = new Vector2(x, y);
                    if (shape.testPoint(p))
                    {
                        def.position = p;
//						def.color = new Color(Random.Range(0,2),Random.Range(0,2),Random.Range(0,2));
                        createParticle(def);
                    }
                }
            }
//			def.color = c;
        }