public override IEnumerable<Particle> OperateOn(Particle p)
        {
            if ((p as ParticleAttractor) != null) this.currAttractors.Add(p as ParticleAttractor);
            else this.currParticles.Add(p);

            return base.OperateOn(p);
        }
示例#2
0
        static Particle GenerateRandomParticle(ParticleEmitter emitterParam)
        {
            MatrixCoords particlePosition = emitterParam.Position;

            int particleRowSpeed = emitterParam.RandGenerator.Next(emitterParam.MinSpeedCoord, emitterParam.MaxSpeedCoord + 1);
            int particleColSpeed = emitterParam.RandGenerator.Next(emitterParam.MinSpeedCoord, emitterParam.MaxSpeedCoord + 1);

            var particleSpeed = new MatrixCoords(particleRowSpeed, particleColSpeed);

            Particle particleGenerated = null;
            int particleTypeIndex = emitterParam.RandGenerator.Next(0, 2);

            switch (particleTypeIndex)
            {
                case 0:
                    particleGenerated = new Particle(particlePosition, particleSpeed);
                    break;
                case 1:
                    particleGenerated = new DyingParticle(particlePosition, particleSpeed, (uint) emitterParam.RandGenerator.Next(8));
                    break;
                default:
                    throw new Exception("No such particle for this particle type index!");
            }

            return particleGenerated;
        }
 private static bool IsInRange(Particle particle, ParticleRepeller repeller)
 {
     return particle.Position.Row > repeller.Position.Row - repeller.RepulsionRadius
            && particle.Position.Row < repeller.Position.Row + repeller.RepulsionRadius
            && particle.Position.Col > repeller.Position.Col - repeller.RepulsionRadius
            && particle.Position.Col < repeller.Position.Col + repeller.RepulsionRadius;
 }
        static Particle GenerateRandomParticle(ParticleEmitter emitterParameter)
        {
            MatrixCoords particlePos = emitterParameter.Position;

            int particleRowSpeed = emitterParameter.RandomGenerator.Next(emitterParameter.MinSpeedCoord, emitterParameter.MaxSpeedCoord + 1);
            int particleColSpeed = emitterParameter.RandomGenerator.Next(emitterParameter.MinSpeedCoord, emitterParameter.MaxSpeedCoord + 1);

            MatrixCoords particleSpeed = new MatrixCoords(particleRowSpeed, particleColSpeed);

            Particle generated = null;

            int particleTypeIndex = emitterParameter.RandomGenerator.Next(0, 3);
            switch (particleTypeIndex)
            {
                case 0: generated = new Particle(particlePos, particleSpeed); break;
                case 1:
                    uint lifespan = (uint)emitterParameter.RandomGenerator.Next(8);
                    generated = new DyingParticle(particlePos, particleSpeed, lifespan);
                    break;
                case 2:
                    generated = new ChaoticParticle(particlePos, particleSpeed,RandomGenerator);
                    break;
                case 3:
                    generated = new ChickenParticle(particlePos, particleSpeed, RandomGenerator);
                    break;
                default:
                    throw new Exception("No such particle for this particleTypeIndex");
            }
            return generated;
        }
 public override IEnumerable<Particle> OperateOn(Particle p)
 {
     var potentialRepeller = p as RepellerParticle;
     if (potentialRepeller != null)
     {
         currentTickRepellers.Add(potentialRepeller);
     }
     return base.OperateOn(p);
 }
        private static MatrixCoords GetAccelerationFromParticleAwayToReppeler(ParticleRepeller repeler, Particle particle)
        {
            var currParticleToReppelerVector = particle.Position - repeler.Position;

            int ptoReppRow = currParticleToReppelerVector.Row;
            ptoReppRow = DecreaseVectorCoordToPower(repeler, ptoReppRow);

            int ptoReppCol = currParticleToReppelerVector.Col;
            ptoReppCol = DecreaseVectorCoordToPower(repeler, ptoReppCol);

            var currAcceleration = new MatrixCoords(ptoReppRow, ptoReppCol);
            return currAcceleration;
        }
 public override IEnumerable<Particle> OperateOn(Particle p)
 {
     var particleAsReppeler = p as ParticleRepeller;
     if (particleAsReppeler != null)
     {
         this.repellers.Add(particleAsReppeler);
     }
     else
     {
         this.allOtherParticles.Add(p);
     }
     return base.OperateOn(p);
 }
        private static MatrixCoords GetAccelerationFromParticleToAttractor(ParticleAttractor attractor, Particle particle)
        {
            var currParticleToAttractorVector = attractor.Position - particle.Position;

            int pToAttrRow = currParticleToAttractorVector.Row;
            pToAttrRow = DecreaseVectorCoordToPower(attractor, pToAttrRow);

            int pToAttrCol = currParticleToAttractorVector.Col;
            pToAttrCol = DecreaseVectorCoordToPower(attractor, pToAttrCol);

            var currAcceleration = new MatrixCoords(pToAttrRow, pToAttrCol);
            return currAcceleration;
        }
        public override IEnumerable<Particle> OperateOn(Particle p)
        {
            var reppelerCandidate = p as ParticleRepeller;
            if (reppelerCandidate == null)
            {
                return base.OperateOn(p);
            }
            else
            {
                this.repellers.Add(reppelerCandidate);
            }

            return p.Update();
        }
        public override IEnumerable<Particle> OperateOn(Particle p)
        {
            var attractorCandidate = p as ParticleAttractor;
            if (attractorCandidate == null)
            {
                this.particles.Add(p);
            }
            else
            {
                this.attractors.Add(attractorCandidate);
            }

            return base.OperateOn(p);
        }
        public override IEnumerable<Particle> OperateOn(Particle p)
        {
            var potentialAttractor = p as ParticleAttractor;
            if (potentialAttractor != null)
            {
                currentTickAttractors.Add(potentialAttractor);
            }
            else
            {
                this.currentTickParticles.Add(p);
            }

            return base.OperateOn(p);
        }
        public override IEnumerable<Particle> OperateOn(Particle p)
        {
            var repeller = p as ParticleRepeller;
            if (repeller == null)
            {
                this.particles.Add(p);
            }
            else
            {
                this.repellers.Add(repeller);
            }

            return base.OperateOn(p);
        }
        public override IEnumerable<Particle> OperateOn(Particle p)
        {
            var reppelerParticle = p as ParticleRepeller;

            if (reppelerParticle != null)
            {
                this.currentTickRepellers.Add(reppelerParticle);
            }
            else
            {
                this.currentTickPartciles.Add(p);
            }
            return base.OperateOn(p);
        }
        public override IEnumerable<Particle> OperateOn(Particle p)
        {
            var pottentialRepeller = p as ParticleRepeller;
            if (pottentialRepeller != null)
            {
                currentTickRepellers.Add(pottentialRepeller);
            }
            else
            {
                this.currentTickParticles.Add(p);
            }


            return base.OperateOn(p);
        }
        private List<Particle> particles = new List<Particle>(); // for current tick

        public override IEnumerable<Particle> OperateOn(Particle p)
        {
            //find attractors
            var repellerCandidate = p as ParticleRepeller;

            if (repellerCandidate == null)
            {
                this.particles.Add(p);
            }
            else
            {
                this.repellers.Add(repellerCandidate);
            }

            return base.OperateOn(p);
        }
示例#16
0
        private MatrixCoords GetAccelerationFromParticleToRepeller(ParticleRepeller repeller, Particle particle)
        {
            var currParticleToRepellerVector = repeller.Position - particle.Position;
            var currAcceleration = new MatrixCoords();


            int pToRepRow = currParticleToRepellerVector.Row;
            pToRepRow = -DecreaseVectorCoordToPower(repeller, pToRepRow);

            int pToRepCol = currParticleToRepellerVector.Col;
            pToRepCol = -DecreaseVectorCoordToPower(repeller, pToRepCol);

            currAcceleration = new MatrixCoords(pToRepRow, pToRepCol);


            return currAcceleration;
        }
        private void Reppel(Particle particle, ParticleRepeller repeller)
        {
            var yDirection = repeller.RepulsionPower;
            var xDirection = repeller.RepulsionPower;

            if (particle.Position.Row - repeller.Position.Row < 0)
            {
                yDirection = -yDirection;
            }

            if (particle.Position.Col - repeller.Position.Col < 0)
            {
                xDirection = -xDirection;
            }

            particle.Accelerate(new MatrixCoords(yDirection, xDirection));
        }
        private static void GenerateParticle(Engine engine)
        {
            engine.AddParticle(new Particle(
                new MatrixCoords(15, 0),
                new MatrixCoords(0, 1)
                ));

            engine.AddParticle(new DyingParticle(
                new MatrixCoords(0, 15),
                new MatrixCoords(1, 0),
                8
                ));
            var emitterPosition = new MatrixCoords(15, 15);

            var emitterSpeed = new MatrixCoords(0, 0);

            var emitter = new ParticleEmiter(emitterPosition, emitterSpeed, RandomGenerator, 5, 2, (emitterParameter) =>
            {
                MatrixCoords particlePos = emitterParameter.Position;

                int particleRowSpeed = emitterParameter.Generator.Next(emitterParameter.MinSpeedCoord, emitterParameter.MaxSpeedCoord + 1);
                int particleColSpeed = emitterParameter.Generator.Next(emitterParameter.MinSpeedCoord, emitterParameter.MaxSpeedCoord + 1);

                MatrixCoords particleSpeed = new MatrixCoords(particleRowSpeed,particleColSpeed);

                Particle generated = null;

                int particleTypeIndex = emitterParameter.Generator.Next(0, 2);
                switch (particleTypeIndex)
                {
                    case 0: generated = new Particle(particlePos, particleSpeed); break;
                    case 1:
                        uint lifespan = (uint)emitterParameter.Generator.Next(8);
                        generated = new DyingParticle(particlePos,particleSpeed,lifespan);
                        break;
                    default:
                        throw new ArgumentException("Invalid Type");
                }
                return generated;
            }
            );
            engine.AddParticle(emitter);
        }
示例#19
0
        public override IEnumerable<Particle> Update()
        {
            if (this.Freezed)
            {
                this.framesFreezedCount++;
                if (this.framesFreezedCount == this.FreezeTime)
                {
                    this.Freezed = false;
                    this.framesFreezedCount = 0;
                    this.ProducedEggs = false;
                }

                List<Particle> produced = new List<Particle>();
                int r = this.rand.Next(-1, 2);
                if (!this.ProducedEggs)
                {

                    for (int i = 0; i <= ChickenParticle.maxEggsToProducePerTick; i++)
                    {
                        int dir = this.rand.Next(-1, 2);
                        int dir2 = this.rand.Next(-1, 2);
                        Particle p = new Particle(this.Position, new MatrixCoords(dir, dir2));
                        produced.Add(p);
                    }
                    var baseProduced = base.Update();
                    produced.AddRange(baseProduced);
                    this.ProducedEggs = true;
                    return produced;
                }
            }

            this.framesMovingCount++;
            if (this.framesMovingCount == this.FreezeAfter)
            {
                this.Freezed = true;
                this.framesMovingCount = 0;
            }
            return base.Update();
        }
 public virtual IEnumerable<Particle> OperateOn(Particle p)
 {
     return p.Update();
 }
示例#21
0
 private double Range(Particle p1, Particle p2)
 {
     int cols = p1.Position.Col - p2.Position.Col;
     int rows = p1.Position.Row - p2.Position.Row;
     return Math.Sqrt(cols * cols + rows * rows);
 }
 public bool IsInRange(Particle p)
 {
     return Math.Sqrt(Math.Pow((this.Position.Row - p.Position.Row), 2) + Math.Pow((this.Position.Col - p.Position.Col), 2)) < this.Range;
 }
示例#23
0
		public void InitParticle(ref Particle particle)
		{
			Random random = MathF.Rnd;

			if (this.depthMult != 0.0f)
			{
				particle.Position	= this.basePos + random.NextVector3(this.randomPos.MinValue, this.randomPos.MaxValue) * new Vector3(1.0f, 1.0f, this.depthMult);
				particle.Velocity	= this.baseVel + random.NextVector3(this.randomVel.MinValue, this.randomVel.MaxValue) * new Vector3(1.0f, 1.0f, this.depthMult);
			}
			else
			{
				particle.Position	= this.basePos + new Vector3(random.NextVector2(this.randomPos.MinValue, this.randomPos.MaxValue));
				particle.Velocity	= this.baseVel + new Vector3(random.NextVector2(this.randomVel.MinValue, this.randomVel.MaxValue));
			}

			particle.Angle			= random.NextFloat(this.randomAngle.MinValue, this.randomAngle.MaxValue);
			particle.AngleVelocity	= random.NextFloat(this.randomAngleVel.MinValue, this.randomAngleVel.MaxValue);
			particle.TimeToLive		= random.NextFloat(this.particleLifetime.MinValue, this.particleLifetime.MaxValue);
			particle.SpriteIndex	= random.Next((int)this.spriteIndex.MinValue, (int)this.spriteIndex.MaxValue);
			particle.Color			= random.NextColorHsva(this.minColor, this.maxColor).ToRgba();
			particle.AgeFactor		= 0.0f;
		}
 public IEnumerable<Particle> OperateOn(Particle p)
 {
     // TODO: OperateOn
     return p.Update();
 }
示例#25
0
 public void AddParticle(Particle p)
 {
     this.particles.Add(p);
 }
 private static int Distance(Particle p1, Particle p2)
 {
     return (int)Math.Sqrt((p1.Position.Row - p2.Position.Row) * (p1.Position.Row - p2.Position.Row) + (p1.Position.Col - p2.Position.Col) * (p1.Position.Col - p2.Position.Col));
 }