Esempio n. 1
0
        public void Update()
        {
            time++;
            if (super.gps.IsConnected || (super.kbs.IsKeyDown(Keys.Enter) && !super.okbs.IsKeyDown(Keys.Enter)))
            {
                if (super.gps.Buttons.Start == ButtonState.Pressed || super.kbs.IsKeyDown(Keys.Enter))
                {
                    super.restart();
                }
            }
            if (dead)
            {
                return;
            }
            //logic
            bulletTimer -= 1;
            if (bulletTimer <= 0)
            {
                bullets     = bulletsMax;
                bulletTimer = bulletTimerFreq;
            }

            if (rollTimer > 0)
            {
                rollTimer -= 1;
            }
            if (rollTimer <= 0 && rolling)
            {
                rollframe += rolldir;
                if (rolldir == -1 && rollframe == 1)
                {
                    rolling   = false;
                    rollframe = 1;
                }
                if (rolldir == 1 && rollframe == 5)
                {
                    rolling   = false;
                    rollframe = 1;
                }
                rollTimer = rollTimerFreq;
            }

            for (int i = 0; i < super.bullets.Count; i++)
            {
                Bullet b = super.bullets[i];
                if (b.playerBullet)
                {
                    continue;
                }
                if (!(
                        position.X - size.X / 2 > b.position.X + b.size.X / 2 ||
                        position.X + size.X / 2 < b.position.X - b.size.X / 2 ||
                        position.Y - size.Y / 2 > b.position.Y + b.size.Y / 2 ||
                        position.Y + size.Y / 2 < b.position.Y - b.size.Y / 2))
                {
                    if (!rolling)
                    {
                        hit();
                        super.bullets.Remove(b);
                    }
                    else
                    {
                        super.score += (int)(graceScore * super.multiplier);
                    }
                }
            }

            for (int i = 0; i < super.enemies.Count; i++)
            {
                Enemy e = super.enemies[i];
                if (!(
                        position.X - size.X / 2 > e.position.X + e.size.X / 2 ||
                        position.X + size.X / 2 < e.position.X - e.size.X / 2 ||
                        position.Y - size.Y / 2 > e.position.Y + e.size.Y / 2 ||
                        position.Y + size.Y / 2 < e.position.Y - e.size.Y / 2))
                {
                    if (!rolling)
                    {
                        hit();
                        e.die();
                    }
                    else
                    {
                        super.score += (int)(graceScore * super.multiplier);
                    }
                }
            }

            for (int i = 0; i < super.asteroids.Count; i++)
            {
                Asteroid a = super.asteroids[i];
                if (!(
                        position.X - size.X / 2 > a.position.X + a.size.X / 2 ||
                        position.X + size.X / 2 < a.position.X - a.size.X / 2 ||
                        position.Y - size.Y / 2 > a.position.Y + a.size.Y / 2 ||
                        position.Y + size.Y / 2 < a.position.Y - a.size.Y / 2))
                {
                    if (!rolling)
                    {
                        hit();
                        super.asteroids.Remove(a);
                    }
                    else
                    {
                        super.score += (int)(graceScore * super.multiplier);
                    }
                }
            }


            //input
            Vector2 velocity = Vector2.Zero;

            if (super.gps.IsConnected)
            {
                velocity = new Vector2(
                    super.gps.ThumbSticks.Left.X * speed * (rolling?1.5f:1),
                    -super.gps.ThumbSticks.Left.Y * speed * (rolling?1.5f:1));
            }

            if (super.kbs.IsKeyDown(Keys.Down))
            {
                velocity = new Vector2(0, speed * (rolling?1.5f:1));
            }
            if (super.kbs.IsKeyDown(Keys.Up))
            {
                velocity = new Vector2(0, -speed * (rolling?1.5f:1));
            }
            if (super.kbs.IsKeyDown(Keys.Left))
            {
                velocity = new Vector2(-speed * (rolling?1.5f:1), 0);
            }
            if (super.kbs.IsKeyDown(Keys.Right))
            {
                velocity = new Vector2(speed * (rolling?1.5f:1), 0);
            }

            position += (drunken?-1:1) * velocity;

            if (position.X > super.roomSize.X || position.X < 0)
            {
                position.X -= (drunken?-1:1) * velocity.X;
            }
            if (position.Y > super.roomSize.Y || position.Y < 0)
            {
                position.Y -= (drunken?-1:1) * velocity.Y;
            }

            for (int i = 0; i < 8; i++)
            {
                Particle p = new Particle(
                    super, 4, position - new Vector2(4, 0), -velocity - new Vector2(1, 1) + new Vector2((float)super.random.NextDouble(), (float)super.random.NextDouble()), new Vector2(2, 2));
                p.color = i > 4?new Color(1f, 0f, 0f):new Color(1f, 1f, 0f);
                super.particles.Add(p);
            }

            if (super.gps.IsConnected || super.kbs.IsKeyDown(Keys.Z))
            {
                if (super.gps.Buttons.A == ButtonState.Pressed || super.kbs.IsKeyDown(Keys.Z))
                {
                    if (bullets > 0 && !rolling)
                    {
                        Bullet b = new Bullet(super, position, new Vector2(8, 0), new Vector2(8, 8));
                        b.texture      = super.texture_bullet1;
                        b.playerBullet = true;
                        super.bullets.Add(b);
                        bullets -= 1;
                        float pitch = (float)Math.Sin(MathHelper.ToRadians(5f * 60 * (time % 60)));
                        super.sound_shot.Play(1.0f, pitch, 0f);
                    }
                }
            }

            if (super.gps.IsConnected || super.kbs.IsKeyDown(Keys.X))
            {
                if ((super.gps.Buttons.B == ButtonState.Pressed || super.kbs.IsKeyDown(Keys.X)) && !rolling)
                {
                    if (Math.Abs(super.gps.ThumbSticks.Left.Y) > 0.4 || super.kbs.IsKeyDown(Keys.X))
                    {
                        rolldir   = Math.Sign(super.gps.ThumbSticks.Left.Y) == -1?(short)1:(short)-1;
                        rollframe = rolldir == -1?4:2;
                        rollTimer = rollTimerFreq;
                        rolling   = true;
                        super.sound_roll.Play(super.EffectVolume, 0f, 0f);
                    }
                }
            }
        }