//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); } } }
/// <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(); }
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); }
private static extern void Internal_create0(ParticleGravity managedInstance);
private static extern void Internal_create(ParticleGravity managedInstance, ref ParticleGravityOptions desc);
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(); }