Exemple #1
0
        public override void Update()
        {
            if (occupant != null)
            {
                // update occupant
                occupant.Update();

                // check for reaping
                if (occupant is TempSprite sprite && sprite.ShouldReap())
                {
                    occupant = null;
                }
            }
        }
Exemple #2
0
        public override void Update(GameTime gameTime)
        {
            timer.Update();

            elapsed = gameTime.ElapsedGameTime.Milliseconds;

            background.Update();

            tweener.Update();

            if (Input.KeyPressed(Key.Escape))
            {
                Game.Quit();
            }


            if (Input.KeyPressed(Key.F11))
            {
                Game.ToggleFullscreen();
            }
            else if (Input.KeyPressed(Key.D1))
            {
                Game.ScreenSize = new Size(size.W, size.H);
            }
            else if (Input.KeyPressed(Key.D2))
            {
                Game.ScreenSize = new Size(size.W * 2, size.H * 2);
            }
            else if (Input.KeyPressed(Key.D3))
            {
                Game.ScreenSize = new Size(size.W * 3, size.H * 3);
            }

            if (Input.KeyDown(Key.Left))
            {
                particle_dx -= speed;
            }

            if (Input.KeyDown(Key.Right))
            {
                particle_dx += speed;
            }

            if (Input.KeyDown(Key.Up))
            {
                particle_dy -= speed;
            }

            if (Input.KeyDown(Key.Down))
            {
                particle_dy += speed;
            }

            particle_dx *= friction;
            particle_dy *= friction;

            if (particle_dx > 0.05f && particle_dx < 0.05f || particle_dx < 0 && particle_dx > -0.05f)
            {
                particle_dx = 0;
            }

            if (particle_dy > 0.05f && particle_dy < 0.05f || particle_dy < 0.05f && particle_dy > -0.05f)
            {
                particle_dy = 0;
            }

            particle_x += particle_dx;
            particle_y += particle_dy;

            if (particle_x > Canvas.Width - 16)
            {
                particle_x  = Canvas.Width - 16;
                particle_dx = -particle_dx;
                PlayBump();
            }
            else if (particle_x < 16)
            {
                particle_x  = 16;
                particle_dx = -particle_dx;
                PlayBump();
            }

            if (particle_y > Canvas.Height - 16)
            {
                particle_y  = Canvas.Height - 16;
                particle_dy = -particle_dy;
                PlayBump();
            }
            else if (particle_y < 16)
            {
                particle_y  = 16;
                particle_dy = -particle_dy;
                PlayBump();
            }

            bool up    = Input.KeyDown(Key.W);
            bool down  = Input.KeyDown(Key.S);
            bool left  = Input.KeyDown(Key.A);
            bool right = Input.KeyDown(Key.D);

            if (left)
            {
                if (!up && !down)
                {
                    char_sx  = -5.0f;
                    char_dir = CharDir.Left;
                }
                else
                {
                    char_sx = -4.0f;
                }
            }
            else if (right)
            {
                if (!up && !down)
                {
                    char_sx  = 5.0f;
                    char_dir = CharDir.Right;
                }
                else
                {
                    char_sx = 4.0f;
                }
            }

            if (up)
            {
                if (!left && !right)
                {
                    char_sy  = -5.0f;
                    char_dir = CharDir.Up;
                }
                else
                {
                    char_sy = -4.0f;
                }
            }
            else if (down)
            {
                if (!left && !right)
                {
                    char_sy  = 5.0f;
                    char_dir = CharDir.Down;
                }
                else
                {
                    char_sy = 4.0f;
                }
            }

            switch (char_dir)
            {
            case CharDir.Left:
                animated_sprite.SetAnimation("walk_horiz");
                animated_sprite.SetFlipH(true);
                break;

            case CharDir.Right:
                animated_sprite.SetAnimation("walk_horiz");
                animated_sprite.SetFlipH(false);
                break;

            case CharDir.Up:
                animated_sprite.SetAnimation("walk_up");
                animated_sprite.SetFlipH(false);
                break;

            case CharDir.Down:
                animated_sprite.SetAnimation("walk_down");
                animated_sprite.SetFlipH(false);
                break;
            }


            if (!left && !right)
            {
                char_sx = 0.0f;
            }

            if (!up && !down)
            {
                char_sy = 0.0f;
            }

            char_x += char_sx;
            char_y += char_sy;

            if (char_sx == 0.0f && char_sy == 0.0f)
            {
                switch (char_dir)
                {
                case CharDir.Left:
                case CharDir.Right:
                    animated_sprite.SetAnimation("idle_horiz");
                    break;

                case CharDir.Up:
                    animated_sprite.SetAnimation("idle_up");
                    break;

                case CharDir.Down:
                    animated_sprite.SetAnimation("idle_down");
                    break;
                }
            }

            float dt = (float)gameTime.ElapsedGameTime.TotalSeconds;

            animated_sprite.Update();

            _trail.MoveTo(particle_x, particle_y);
            _trail.Update(dt);
            _explosion.Update(dt);


            if (Input.MousePressed(MouseButton.Left))
            {
                _explosion.FireAt(Input.MousePos.X, Input.MousePos.Y);
            }
        }