Example #1
0
    //pretty sure this calls at the start of each frame so error with increaing partRegLen might be in here
    void Start()
    {
        float      x;
        float      y;
        float      z;
        GameObject prefab = new GameObject();

        prefab = this.part;
        MyVector3       myVector = new MyVector3();
        MyVector3       VectGrav = new MyVector3(0, 1f, 0);
        ParticleGravity grav     = new ParticleGravity(VectGrav);
        Vector3         vector;

        //world.startFrame ();
        //creates particles and keeps track of them
        while (numParticles < maxNumParticles)
        {
            ///create particle with random position

            myVector = createRandomVector();

            //add to particle list in this classs for display compatibility reasons
            vector = myVector.convertToVector3();
            particleList.Add(prefab);
            _particleList.Add(prefab);

            /*
             * particleList[numParticles].setInverseMassWithMass (0.5f);
             * particleList[numParticles].affectedByGravity (true);
             * particleList[numParticles].checkGravity();
             */

            particleList[numParticles] = Instantiate(_particleList[numParticles], vector, Quaternion.identity, gameObject.transform);

            //create particle and add it to the registry in the world
            world.particle.setPosition(myVector);
            world.particle.setInverseMass(0.2f);
            world.addToParitcleReg(world.particle);

            myVector = createRandomVector();
            Move force = new Move(myVector.getComponentX(), myVector.getComponentY(), myVector.getComponentZ());
            world.registry.add(world.particleReg[numParticles], force);
            world.registry.add(world.particleReg[numParticles], grav);
            //print ("Force added to particle");

            numParticles++;
        }
        print("The length of the world registry is " + (world.registry.getLength()));
        //Write function and throw this into Particle World Class!!!! possibly
        for (int i = 0; i < numParticles - 1; i++)
        {
            for (int j = i + 1; j < numParticles; j++)
            {
                world.thisContact.addParticle(world.particleReg[i], world.particleReg[j]);
                world.contacts.Add(world.thisContact);
            }
        }
    }
Example #2
0
        /// <summary>
        /// Run the application
        /// </summary>
        public void Go()
        {
            // Make the particle emitter.
            emit              = new ParticleRectangleEmitter(particles);
            emit.Frequency    = 50000; // 100000 every 1000 updates.
            emit.LifeFullMin  = 20;
            emit.LifeFullMax  = 50;
            emit.LifeMin      = 10;
            emit.LifeMax      = 30;
            emit.DirectionMin = -2; // shoot up in radians.
            emit.DirectionMax = -1;
            emit.ColorMin     = Color.DarkBlue;
            emit.ColorMax     = Color.LightBlue;
            emit.SpeedMin     = 5;
            emit.SpeedMax     = 20;
            emit.MaxSize      = new SizeF(5, 5);
            emit.MinSize      = new SizeF(1, 1);

            // Make the first particle (a pixel)
            ParticlePixel first = new ParticlePixel(Color.White, 100, 200, new Vector(0, 0, 0), -1);

            particles.Add(first); // Add it to the system

            if (File.Exists(Path.Combine(dataDirectory, "marble1.png")))
            {
                filePath = "";
            }

            // Make the second particle (an animated sprite)
            AnimationCollection anim     = new AnimationCollection();
            SurfaceCollection   surfaces = new SurfaceCollection();

            surfaces.Add(Path.Combine(filePath, Path.Combine(dataDirectory, "marble1.png")), new Size(50, 50));
            anim.Add(surfaces, 1);
            AnimatedSprite marble = new AnimatedSprite(anim);

            marble.Animate = true;
            ParticleSprite second = new ParticleSprite(marble, 200, 200, new Vector(-7, -9, 0), 500);

            second.Life = -1;
            particles.Add(second); // Add it to the system

            // Add some manipulators to the particle system.
            ParticleGravity grav = new ParticleGravity(0.5f);

            particles.Manipulators.Add(grav);                                                       // Gravity of 0.5f
            particles.Manipulators.Add(new ParticleFriction(0.1f));                                 // Slow down particles
            particles.Manipulators.Add(vort);                                                       // A particle vortex fixed on the mouse
            particles.Manipulators.Add(new ParticleBoundary(SdlDotNet.Graphics.Video.Screen.Size)); // fix particles on screen.


            Events.Run();
        }
Example #3
0
        protected virtual Animation CreateAnimPosition(Animator animator)
        {
            double angle = ScrollableGame.Rnd.NextDouble() * Math.PI * 2;

            var     spreadX  = (float)(ParticleSpread.X * (1 + ScrollableGame.Rnd.NextDouble()));
            var     spreadY  = (float)(ParticleSpread.Y * (1 + ScrollableGame.Rnd.NextDouble()));
            Vector2 posFinal = DrawableTex.Position + new Vector2((float)Math.Cos(angle) * ParticleDistance + (spreadX * 2), (float)Math.Sin(angle) * ParticleDistance + (spreadY * 2));

            Animation animPos = new SimpleVector2Animation(DrawableTex, DrawableTex.Position, posFinal, DurationPos);

            if (ParticleGravity.Length() > 0)
            {
                animPos.EventoAnimFrame += animPos_EventoAnimFrame;
            }
            return(animPos);
        }
        public void TestApplyTo()
        {
            var force    = new ParticleGravity(new Vector2D(0, 9.8));
            var particle = new Particle
            {
                Mass = 2
            };

            force.Add(particle);
            force.Apply(1);
            particle.Update(1);
            Assert.AreEqual(new Vector2D(0, 9.8), particle.Acceleration, "根据公式计算物体所应受到的重力");

            particle.InverseMass = 0;
            force.Apply(1);
            particle.Update(1);
            Assert.AreEqual(new Vector2D(0, 0), particle.Acceleration, "质量无限大的物体设定为不受重力影响");

            force.Remove(particle);
            force.Apply(1);
            particle.Update(1);
            Assert.AreEqual(new Vector2D(0, 0), particle.Acceleration, "被从作用力发生器中移除的物体不受重力影响");
        }
        public void TestConstructor()
        {
            var force = new ParticleGravity(new Vector2D(0, 9.8));

            Assert.IsNotNull(force);
        }
Example #6
0
 private static extern void Internal_create0(ParticleGravity managedInstance);
Example #7
0
 private static extern void Internal_create(ParticleGravity managedInstance, ref ParticleGravityOptions desc);
Example #8
0
        public void initialize()
        {
            Random rnd          = new Random();
            int    numParticles = particleArray.Length;

            //lines

            float startX    = 400.0f;
            float startY    = 300.0f;
            float distanceX = 20.0f;
            float distanceY = 20.0f;
            float radius    = 8.0f;
            int   stride    = 4;


            int cableCounter = 0;

            for (int i = 0; i < (numParticles - freeParticles); ++i)
            {
                int row    = i / stride;
                int column = i - (stride * row);

                float x = startX + distanceX * ((float)(column));
                float y = startY + distanceY * ((float)(row));

                particleArray[i].setPosition(x, y, 0.0f);
                particleArray[i].Mass   = 1.0f;
                particleArray[i].Radius = radius;
                //particleArray[i].setVelocity(20.0f, 90.0f + (float)(i * 10 * rnd.Next() % 20), 0.0f);
                particleArray[i].setVelocity(0.0f, 0.0f, 0.0f);
                particleArray[i].setAcceleration(0.0f, 0.0f, 0.0f);
                particleArray[i].Damping = 0.99f;
                particleArray[i].clearAccumulator();


                if (row != 0 && column != 0)
                {
                    // --
                    particleRods[cableCounter]              = new ParticleRod();
                    particleRods[cableCounter].length       = distanceX;
                    particleRods[cableCounter].particles[0] = particleArray[i];
                    particleRods[cableCounter].particles[1] = particleArray[i - 1];

                    world1.getContactGenerators().Add(particleRods[cableCounter]);

                    ++cableCounter;

                    // \
                    particleRods[cableCounter]              = new ParticleRod();
                    particleRods[cableCounter].length       = (float)Math.Sqrt(distanceX * distanceX + distanceY * distanceY);
                    particleRods[cableCounter].particles[0] = particleArray[i];
                    particleRods[cableCounter].particles[1] = particleArray[i - stride - 1];

                    world1.getContactGenerators().Add(particleRods[cableCounter]);

                    ++cableCounter;

                    // /
                    particleRods[cableCounter]              = new ParticleRod();
                    particleRods[cableCounter].length       = (float)Math.Sqrt(distanceX * distanceX + distanceY * distanceY);
                    particleRods[cableCounter].particles[0] = particleArray[i - 1];
                    particleRods[cableCounter].particles[1] = particleArray[i - stride];

                    world1.getContactGenerators().Add(particleRods[cableCounter]);

                    ++cableCounter;
                }
                else
                {
                    if (row != 0 && column == 0)
                    {
                        // --
                        particleRods[cableCounter]              = new ParticleRod();
                        particleRods[cableCounter].length       = distanceX;
                        particleRods[cableCounter].particles[0] = particleArray[i];
                        particleRods[cableCounter].particles[1] = particleArray[i + 1];

                        world1.getContactGenerators().Add(particleRods[cableCounter]);

                        ++cableCounter;
                    }
                }

                if (i >= stride)
                {
                    if (row != 0)
                    {
                        // |
                        particleRods[cableCounter]              = new ParticleRod();
                        particleRods[cableCounter].length       = distanceY;
                        particleRods[cableCounter].particles[0] = particleArray[i - stride];
                        particleRods[cableCounter].particles[1] = particleArray[i];

                        world1.getContactGenerators().Add(particleRods[cableCounter]);

                        ++cableCounter;
                    }
                }

                particleGravityArray[i] = new ParticleGravity(new Vec3(0.0f, 9.8f * 10.0f, 0.0f));
                world1.getForceRegistry().add(particleArray[i], particleGravityArray[i]);
            }


            for (int i = particleCount; i < (particleCount + freeParticles); ++i)
            {
                int   randX = Math.Abs(rnd.Next() % 36);
                float x     = 15.0f + (float)((i - freeParticles) * 40);
                float y     = 0.0f + (i - freeParticles);
                particleArray[i].setPosition(x, y, 0.0f);
                particleArray[i].Mass   = 10.0f;
                particleArray[i].Radius = 20.0f + 3.0f * (float)(rnd.Next() % 3);
                particleArray[i].setVelocity(20.0f * (i % 2 == 0 ? -1.0f : 1.0f), 90.0f + (float)(i * 10 * rnd.Next() % 20), 0.0f);
                particleArray[i].setAcceleration(0.0f, 0.0f, 0.0f);
                particleArray[i].Damping = 0.99f;
                particleArray[i].clearAccumulator();

                particleGravityArray[i] = new ParticleGravity(new Vec3(0.0f, 9.8f * 40.0f, 0.0f));

                world1.getForceRegistry().add(particleArray[i], particleGravityArray[i]);
            }

            loadTextures();
            loadModels();
            buildGeometry();
            buildCamera();
        }