| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Microsoft.Xna.Framework;
- using Microsoft.Xna.Framework.Content;
- using Microsoft.Xna.Framework.Graphics;
- using Microsoft.Xna.Framework.Input;
- using Tutorial029.Controls;
- using Tutorial029.Misc;
- using Tutorial029.Models;
- using Tutorial029.Sprites;
- namespace Tutorial029.States
- {
- public class LevelSelectionState : State
- {
- private List<LevelSelector> _components;
- private SpriteFont _font;
- private Player _player;
- public LevelSelectionState(GameModel gameModel)
- : base(gameModel)
- {
- _font = _content.Load<SpriteFont>("Fonts/Font");
- _player = new Player(_content.Load<Texture2D>("Player/boy"))
- {
- Layer = 1.0f,
- Position = new Vector2(50, 500),
- };
- var levelModel1 = new LevelModel()
- {
- Name = "Mountains",
- ScrollingBackgrounds = new List<ScrollingBackground>()
- {
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Trees"), _player, 60f)
- {
- Layer = 0.99f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Floor"), _player, 60f)
- {
- Layer = 0.9f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Hills_Front"), _player, 40f)
- {
- Layer = 0.8f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Hills_Middle"), _player, 30f)
- {
- Layer = 0.79f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Clouds_Fast"), _player, 25f, true)
- {
- Layer = 0.78f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Hills_Back"), _player, 0f)
- {
- Layer = 0.77f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Clouds_Slow"), _player, 10f, true)
- {
- Layer = 0.7f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Sky"), _player, 0f)
- {
- Layer = 0.1f,
- },
- },
- };
- var levelModel2 = new LevelModel()
- {
- Name = "Snowy Mountains",
- ScrollingBackgrounds = new List<ScrollingBackground>()
- {
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Trees"), _player, 60f)
- {
- Layer = 0.99f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Floor"), _player, 60f)
- {
- Layer = 0.9f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Hills_Front"), _player, 40f)
- {
- Layer = 0.8f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Hills_Middle"), _player, 30f)
- {
- Layer = 0.79f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Clouds_Fast"), _player, 25f, true)
- {
- Layer = 0.78f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Hills_Back"), _player, 0f)
- {
- Layer = 0.77f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Clouds_Slow"), _player, 10f, true)
- {
- Layer = 0.7f,
- },
- new ScrollingBackground(_content.Load<Texture2D>("ScrollingBackgrounds/Sky"), _player, 0f)
- {
- Layer = 0.1f,
- },
- },
- };
- _components = new List<LevelSelector>()
- {
- new LevelSelector(_player, levelModel1)
- {
- Scale = 0.25f,
- Position = new Vector2(50, 50),
- },
- new LevelSelector(_player, levelModel2)
- {
- Scale = 0.25f,
- Position = new Vector2(420, 50),
- },
- };
- }
- public override void LoadContent()
- {
- }
- public override void Update(GameTime gameTime)
- {
- foreach (var component in _components)
- {
- component.IsMouseHovering = false;
- var mouseRectangle = new Rectangle(Mouse.GetState().X, Mouse.GetState().Y, 1, 1);
- if (mouseRectangle.Intersects(new Rectangle(component.Viewport.X, component.Viewport.Y, component.Viewport.Width, component.Viewport.Height)))
- component.IsMouseHovering = true;
- component.Update(gameTime);
- }
- }
- public override void Draw(GameTime gameTime)
- {
- var originalViewport = _graphics.GraphicsDevice.Viewport;
- foreach (var component in _components)
- {
- _spriteBatch.Begin();
- _spriteBatch.DrawString(_font, component.Name, component.Position - new Vector2(-5, 25), Color.Black);
- _spriteBatch.End();
- _graphics.GraphicsDevice.Viewport = new Viewport((int)component.Position.X, (int)component.Position.Y, 320, 180);
- var scaleX = (float)_graphics.GraphicsDevice.Viewport.Width / Game1.ScreenWidth;
- var scaleY = (float)_graphics.GraphicsDevice.Viewport.Height / Game1.ScreenHeight;
- var scaleMatrix = Matrix.CreateScale(scaleX, scaleY, 1.0f);
- _spriteBatch.Begin(SpriteSortMode.FrontToBack, transformMatrix: scaleMatrix);
- component.Draw(gameTime, _spriteBatch);
- _spriteBatch.End();
- _graphics.GraphicsDevice.Viewport = originalViewport;
- }
- }
- }
- }
|