Пример #1
0
    public void C**k()
    {
        if (cockTimer > 0)
        {
            return;
        }
        if (Player && revolver.play)
        {
            return;
        }

        if (!cocked)
        {
            Sfx(Sound.C**k);
            if (Player)
            {
                revolver.Reset(1);
            }
        }

        cocked    = true;
        cockTimer = Global.Values.roc;
    }
Пример #2
0
        public override void HandleInput(InputState input)
        {
            if (!Active)
            {
                return;
            }

            Speed.X = MathHelper.Lerp(Speed.X, 0f, 0.01f);
            Speed.Y = MathHelper.Lerp(Speed.Y, 0f, 0.01f);

            Rectangle particleRect = underWater ? new Rectangle(128, 0, 16, 16) : new Rectangle(0, 0, 3, 3);

            engineLoop.Pause();

            if (input.CurrentKeyboardState.IsKeyDown(Keys.Left) ||
                input.CurrentKeyboardState.IsKeyDown(Keys.A) ||
                input.CurrentGamePadState.ThumbSticks.Left.X < -0.2f)
            {
                Speed.X -= 0.05f;
                faceDir  = -1;
                if (!underWater)
                {
                    ParticleController.Instance.Add(Position + new Vector2(5f, 0f),
                                                    new Vector2(Helper.RandomFloat(0f, 1f), Helper.RandomFloat(-0.2f, 0.2f)),
                                                    0, Helper.RandomFloat(500, 1000), 500,
                                                    false, true,
                                                    particleRect,
                                                    new Color(new Vector3(1f) * (0.5f + Helper.RandomFloat(0.5f))),
                                                    ParticleFunctions.Smoke,
                                                    underWater ? 0.3f : 1f, 0f, Helper.RandomFloat(-0.1f, 0.1f), 0, ParticleBlend.Alpha);
                }
                ParticleController.Instance.Add(Position + new Vector2(5f, 0f),
                                                new Vector2(Helper.RandomFloat(0f, 0.2f), Helper.RandomFloat(-0.2f, 0.2f)),
                                                0, underWater ? Helper.RandomFloat(500, 1000) : Helper.RandomFloat(50, 150), 50,
                                                false, true,
                                                particleRect,
                                                underWater ? Color.White : Color.Orange,
                                                ParticleFunctions.FadeInOut,
                                                underWater ? 0.3f : 1f, 0f, Helper.RandomFloat(-0.1f, 0.1f), 0, ParticleBlend.Alpha);

                engineLoop.Resume();
            }
            if (input.CurrentKeyboardState.IsKeyDown(Keys.Right) ||
                input.CurrentKeyboardState.IsKeyDown(Keys.D) ||
                input.CurrentGamePadState.ThumbSticks.Left.X > 0.2f)
            {
                Speed.X += 0.05f;
                faceDir  = 1;
                if (!underWater)
                {
                    ParticleController.Instance.Add(Position + new Vector2(-5f, 0f),
                                                    new Vector2(Helper.RandomFloat(0f, -1f), Helper.RandomFloat(-0.2f, 0.2f)),
                                                    0, Helper.RandomFloat(500, 1000), 500,
                                                    false, true,
                                                    particleRect,
                                                    new Color(new Vector3(1f) * (0.5f + Helper.RandomFloat(0.5f))),
                                                    ParticleFunctions.Smoke,
                                                    underWater ? 0.3f : 1f, 0f, Helper.RandomFloat(-0.1f, 0.1f), 0, ParticleBlend.Alpha);
                }
                ParticleController.Instance.Add(Position + new Vector2(-5f, 0f),
                                                new Vector2(Helper.RandomFloat(0f, -0.2f), Helper.RandomFloat(-0.2f, 0.2f)),
                                                0, underWater ? Helper.RandomFloat(500, 1000) : Helper.RandomFloat(50, 150), 50,
                                                false, true,
                                                particleRect,
                                                underWater ? Color.White : Color.Orange,
                                                ParticleFunctions.FadeInOut,
                                                underWater ? 0.3f : 1f, 0f, Helper.RandomFloat(-0.1f, 0.1f), 0, ParticleBlend.Alpha);

                engineLoop.Resume();
            }

            _idleAnim.CurrentFrame = 0;
            if (input.CurrentKeyboardState.IsKeyDown(Keys.Up) ||
                input.CurrentKeyboardState.IsKeyDown(Keys.W) ||
                input.CurrentGamePadState.ThumbSticks.Left.Y > 0.2f)
            {
                Speed.Y -= 0.05f;
                _upAnim.Play();
                _upHitAnim.Play();
                if (!underWater)
                {
                    ParticleController.Instance.Add(Position + new Vector2(0f, 3f),
                                                    new Vector2(Helper.RandomFloat(-0.3f, 0.3f), Helper.RandomFloat(0f, 1f)),
                                                    0, Helper.RandomFloat(500, 1000), 500,
                                                    false, true,
                                                    particleRect,
                                                    new Color(new Vector3(1f) * (0.5f + Helper.RandomFloat(0.5f))),
                                                    ParticleFunctions.Smoke,
                                                    underWater ? 0.3f : 1f, 0f, Helper.RandomFloat(-0.1f, 0.1f), 0, ParticleBlend.Alpha);
                }
                ParticleController.Instance.Add(Position + new Vector2(0f, 3f),
                                                new Vector2(Helper.RandomFloat(-0.3f, 0.3f), Helper.RandomFloat(0f, 0.2f)),
                                                0, underWater ? Helper.RandomFloat(500, 1000) : Helper.RandomFloat(50, 150), 50,
                                                false, true,
                                                particleRect,
                                                underWater ? Color.White : Color.Orange,
                                                ParticleFunctions.FadeInOut,
                                                underWater ? 0.2f : 0.75f, 0f, Helper.RandomFloat(-0.1f, 0.1f), 0, ParticleBlend.Alpha);

                engineLoop.Resume();
            }
            else
            {
                _upAnim.Reset();
                _upHitAnim.Reset();
            }
            if (input.CurrentKeyboardState.IsKeyDown(Keys.Down) ||
                input.CurrentKeyboardState.IsKeyDown(Keys.S) ||
                input.CurrentGamePadState.ThumbSticks.Left.Y < -0.2f)
            {
                Speed.Y += 0.05f;
                _downAnim.Play();
                _downHitAnim.Play();
                if (!underWater)
                {
                    ParticleController.Instance.Add(Position + new Vector2(0f, -3f),
                                                    new Vector2(Helper.RandomFloat(-0.3f, 0.3f), Helper.RandomFloat(0f, -1f)),
                                                    0, Helper.RandomFloat(500, 1000), 500,
                                                    false, true,
                                                    particleRect,
                                                    new Color(new Vector3(1f) * (0.5f + Helper.RandomFloat(0.5f))),
                                                    ParticleFunctions.Smoke,
                                                    underWater ? 0.3f : 1f, 0f, Helper.RandomFloat(-0.1f, 0.1f), 0, ParticleBlend.Alpha);
                }
                ParticleController.Instance.Add(Position + new Vector2(0f, -3f),
                                                new Vector2(Helper.RandomFloat(-0.3f, 0.3f), Helper.RandomFloat(0f, -0.2f)),
                                                0, underWater ? Helper.RandomFloat(500, 1000) : Helper.RandomFloat(50, 150), 50,
                                                false, true,
                                                particleRect,
                                                underWater ? Color.White : Color.Orange,
                                                ParticleFunctions.FadeInOut,
                                                underWater ? 0.2f : 0.75f, 0f, Helper.RandomFloat(-0.1f, 0.1f), 0, ParticleBlend.Alpha);

                engineLoop.Resume();
            }
            else
            {
                _downAnim.Reset();
                _downHitAnim.Reset();
            }



            if (input.CurrentKeyboardState.IsKeyDown(Keys.X) ||
                input.CurrentKeyboardState.IsKeyDown(Keys.Space) ||
                input.CurrentGamePadState.Buttons.A == ButtonState.Pressed ||
                input.CurrentGamePadState.Triggers.Right > 0.2f)
            {
                if (projectileTime1 <= 0)
                {
                    projectileTime1 = projectileCoolDown1;


                    if (PowerUpLevel != 1)
                    {
                        ProjectileController.Instance.Spawn(entity =>
                        {
                            ((Projectile)entity).Type       = ProjectileType.Forward1;
                            ((Projectile)entity).SourceRect = new Rectangle(8, 8, 20, 8);
                            ((Projectile)entity).Life       = 1000;
                            ((Projectile)entity).EnemyOwner = false;
                            ((Projectile)entity).Damage     = 1f;
                            entity.Speed    = new Vector2(6f * faceDir, 0f);
                            entity.Position = Position + new Vector2(faceDir * 10, 0);
                        });
                    }

                    if (PowerUpLevel == 1)
                    {
                        ProjectileController.Instance.Spawn(entity =>
                        {
                            ((Projectile)entity).Type       = ProjectileType.Forward1;
                            ((Projectile)entity).SourceRect = new Rectangle(8, 8, 20, 8);
                            ((Projectile)entity).Life       = 1000;
                            ((Projectile)entity).EnemyOwner = false;
                            ((Projectile)entity).Damage     = 1f;
                            entity.Speed    = new Vector2(6f * faceDir, 0f);
                            entity.Position = Position + new Vector2(faceDir * 10, -2);
                        });
                        ProjectileController.Instance.Spawn(entity =>
                        {
                            ((Projectile)entity).Type       = ProjectileType.Forward1;
                            ((Projectile)entity).SourceRect = new Rectangle(8, 8, 20, 8);
                            ((Projectile)entity).Life       = 1000;
                            ((Projectile)entity).EnemyOwner = false;
                            ((Projectile)entity).Damage     = 1f;
                            entity.Speed    = new Vector2(6f * faceDir, 0f);
                            entity.Position = Position + new Vector2(faceDir * 10, 2);
                        });
                    }

                    if (PowerUpLevel >= 2)
                    {
                        ProjectileController.Instance.Spawn(entity =>
                        {
                            ((Projectile)entity).Type       = ProjectileType.Forward1;
                            ((Projectile)entity).SourceRect = new Rectangle(8, 8, 20, 8);
                            ((Projectile)entity).Life       = 1000;
                            ((Projectile)entity).EnemyOwner = false;
                            ((Projectile)entity).Damage     = 1f;
                            entity.Speed    = new Vector2(6f * faceDir, -0.5f);
                            entity.Position = Position + new Vector2(faceDir * 10, 0);
                        });
                        ProjectileController.Instance.Spawn(entity =>
                        {
                            ((Projectile)entity).Type       = ProjectileType.Forward1;
                            ((Projectile)entity).SourceRect = new Rectangle(8, 8, 20, 8);
                            ((Projectile)entity).Life       = 1000;
                            ((Projectile)entity).EnemyOwner = false;
                            ((Projectile)entity).Damage     = 1f;
                            entity.Speed    = new Vector2(6f * faceDir, 0.5f);
                            entity.Position = Position + new Vector2(faceDir * 10, 0);
                        });
                    }
                }

                if (projectileTime2 <= 0)
                {
                    projectileTime2 = projectileCoolDown2;

                    if (PowerUpLevel >= 3)
                    {
                        ProjectileController.Instance.Spawn(entity =>
                        {
                            ((Projectile)entity).Type       = ProjectileType.Bomb;
                            ((Projectile)entity).SourceRect = new Rectangle(16, 0, 8, 8);
                            ((Projectile)entity).Life       = 5000;
                            ((Projectile)entity).Scale      = 0.5f;
                            ((Projectile)entity).EnemyOwner = false;
                            ((Projectile)entity).Damage     = 20f;
                            entity.Speed    = new Vector2(1f * faceDir, 0f);
                            entity.Position = Position + new Vector2(0, 5);
                        });
                    }
                }

                if (projectileTime3 <= 0)
                {
                    projectileTime3 = projectileCoolDown3;

                    if (PowerUpLevel >= 4)
                    {
                        AudioController.PlaySFX("seeker", 0.5f, -0.1f, 0.1f);

                        ProjectileController.Instance.Spawn(entity =>
                        {
                            ((Projectile)entity).Type       = ProjectileType.Seeker;
                            ((Projectile)entity).SourceRect = new Rectangle(1, 18, 8, 4);
                            ((Projectile)entity).Life       = 3000;
                            ((Projectile)entity).Scale      = 1f;
                            ((Projectile)entity).EnemyOwner = false;
                            ((Projectile)entity).Damage     = 5f;
                            ((Projectile)entity).Target     = Position + new Vector2(faceDir * 300, 0);
                            ;
                            entity.Speed    = new Vector2(0f, -0.5f);
                            entity.Position = Position + new Vector2(0, 0);
                        });
                    }
                }

                isFiring = true;
                gunLoop.Resume();
            }
            else if (isFiring)
            {
                isFiring = false;
                gunLoop.Pause();
                AudioController.PlaySFX("gun_winddown", gunLoop.Volume, -0.1f, 0.1f);
            }

            base.HandleInput(input);
        }