public static ParticleState GetRandom(float minVel, float maxVel)
        {
            var state = new ParticleState();
            state.Velocity = rand.NextVector2(minVel, maxVel);
            state.Type = ParticleType.None;
            state.LengthMultiplier = 1;

            return state;
        }
Exemple #2
0
        public override void Update()
        {
            var entities = EntityManager.GetNearbyEntities(Position, 250);

            foreach (var entity in entities)
            {
                if (entity is Enemy && !(entity as Enemy).IsActive)
                    continue;

                // bullets are repelled by black holes and everything else is attracted
                if (entity is Projectile)
                    entity.Velocity += (entity.Position - Position).ScaleTo(1f);
                else
                {
                    var dPos = Position - entity.Position;
                    var length = dPos.Length();

                    entity.Velocity += dPos.ScaleTo(MathHelper.Lerp(2, 0, length / 250f));
                }
            }

            // The black holes spray some orbiting particles. The spray toggles on and off every quarter second.
            if ((GameplayScreen.GameTime.TotalGameTime.Milliseconds / 250) % 2 == 0)
            {
                Vector2 sprayVel = Methods.FromPolar(sprayAngle, rand.NextFloat(12, 15));
                Color color = Methods.HSVToColor(5, 0.5f, 0.8f);	// light purple
                Vector2 pos = Position + 2f * new Vector2(sprayVel.Y, -sprayVel.X) + rand.NextVector2(4, 8);
                var state = new ParticleState()
                {
                    Velocity = sprayVel,
                    LengthMultiplier = 1,
                    Type = ParticleType.Enemy
                };

                GameplayScreen.ParticleManager.CreateParticle(GameplayScreen.ParticleTexture, pos, color, 190, 1.5f, state);
            }

            // rotate the spray direction
            sprayAngle -= MathHelper.TwoPi / 50f;

            GameplayScreen.GridManager.ApplyImplosiveForce((float)Math.Sin(sprayAngle / 2) * 10 + 20, Position, 40);
        }
Exemple #3
0
        public void Kill()
        {
            PlayerStatus.RemoveLife();

            framesUntilRespawn = PlayerStatus.IsGameOver ? 100 : 120;

            float hue1 = rand.NextFloat(0, 6);
            Color explosionColor = Methods.HSVToColor(hue1, 0.5f, 1);

            for (int i = 0; i < 1200; i++)
            {
                float speed = 18f * (1f - 1 / rand.NextFloat(1f, 10f));
                Color color = Color.Lerp(Color.Blue, explosionColor, rand.NextFloat(0, 1));
                var state = new ParticleState()
                {
                    Velocity = rand.NextVector2(speed, speed),
                    Type = ParticleType.None,
                    LengthMultiplier = 1
                };

                GameplayScreen.ParticleManager.CreateParticle(GameplayScreen.ParticleTexture, Position, color, 190, 1.5f, state);
            }
            GameplayScreen.cue = GameplayScreen.soundBank.GetCue("explode");
            GameplayScreen.cue.Apply3D(GameplayScreen.listener, GameplayScreen.emitter);
            GameplayScreen.cue.Play();
        }
Exemple #4
0
        public void WasShot()
        {
            IsDestroyed = true;
            PlayerStatus.AddPoints(PointValue);

            float hue1 = rand.NextFloat(0, 6);
            float hue2 = (hue1 + rand.NextFloat(0, 2)) % 6f;
            Color color1 = Methods.HSVToColor(hue1, 0.5f, 1);
            Color color2 = Methods.HSVToColor(hue2, 0.5f, 1);

            for (int i = 0; i < 120; i++)
            {
                float speed = 18f * (1f - 1 / rand.NextFloat(1, 10));
                var state = new ParticleState()
                {
                    Velocity = rand.NextVector2(speed, speed),
                    Type = ParticleType.Enemy,
                    LengthMultiplier = 1
                };

                Color color = Color.Lerp(color1, color2, rand.NextFloat(0, 1));
                GameplayScreen.ParticleManager.CreateParticle(GameplayScreen.ParticleTexture, Position, color, 190, 1.5f, state);
            }

            GameplayScreen.cue = GameplayScreen.soundBank.GetCue("explode");
            GameplayScreen.cue.Apply3D(GameplayScreen.listener, GameplayScreen.emitter);
            GameplayScreen.cue.Play();
        }
Exemple #5
0
        public void WasShot()
        {
            hitpoints--;
            if (hitpoints <= 0)
            {
                IsDestroyed = true;
                PlayerStatus.AddPoints(200);
                PlayerStatus.IncreaseMultiplier();
            }

            float hue = (float)((3 * GameplayScreen.GameTime.TotalGameTime.TotalSeconds) % 6);
            Color color = Methods.HSVToColor(hue, 0.25f, 1);
            const int numParticles = 100;
            float startOffset = rand.NextFloat(0, MathHelper.TwoPi / numParticles);

            for (int i = 0; i < numParticles; i++)
            {
                Vector2 sprayVel = Methods.FromPolar(MathHelper.TwoPi * i / numParticles + startOffset, rand.NextFloat(8, 16));
                Vector2 pos = Position + 2f * sprayVel;
                var state = new ParticleState()
                {
                    Velocity = sprayVel,
                    LengthMultiplier = 1,
                    Type = ParticleType.IgnoreGravity
                };

                GameplayScreen.ParticleManager.CreateParticle(GameplayScreen.ParticleTexture, pos, color, 90, 1.5f, state);
            }

               // Sound.Explosion.Play(0.5f, rand.NextFloat(-0.2f, 0.2f), 0);
        }