mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-01 04:14:22 +00:00
173 lines
7.7 KiB
C#
173 lines
7.7 KiB
C#
using System;
|
|
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Content;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
using ProjectZ.InGame.Controls;
|
|
using ProjectZ.InGame.GameObjects.Base;
|
|
using ProjectZ.InGame.Pages;
|
|
using ProjectZ.InGame.SaveLoad;
|
|
using ProjectZ.InGame.Things;
|
|
|
|
namespace ProjectZ.InGame.Screens
|
|
{
|
|
public class MenuScreen : Screen
|
|
{
|
|
private Matrix _animationMatrix => Game1.GetMatrix * Matrix.CreateScale(Game1.UiScale);
|
|
private Animator _linkAnimation = new Animator();
|
|
private Texture2D _sprBackground;
|
|
private Rectangle _menuRectangle;
|
|
|
|
private Vector2 _linkPosition;
|
|
private bool _linkVisible;
|
|
|
|
private int _scale = 3;
|
|
private int _menuWidth;
|
|
private int _menuHeight;
|
|
private int _backgroundWidth;
|
|
|
|
private int _leftBar;
|
|
private int _rightBar;
|
|
private int _topBar;
|
|
private int _bottomBar;
|
|
private int _posX;
|
|
|
|
public MenuScreen(string screenId) : base(screenId) { }
|
|
|
|
public override void Load(ContentManager content)
|
|
{
|
|
_sprBackground = content.Load<Texture2D>("Menu/menuBackground");
|
|
|
|
_linkAnimation = AnimatorSaveLoad.LoadAnimator("menu_link");
|
|
_linkAnimation.Play("idle");
|
|
|
|
_menuWidth = Values.MinWidth - 32;
|
|
_menuHeight = Values.MinHeight - 32;
|
|
}
|
|
|
|
public override void OnLoad()
|
|
{
|
|
Game1.UiPageManager.ClearStack();
|
|
Game1.UiPageManager.ChangePage(typeof(MainMenuPage), null, PageManager.TransitionAnimation.TopToBottom, PageManager.TransitionAnimation.TopToBottom);
|
|
|
|
Game1.GameManager.ResetMusic();
|
|
Game1.GameManager.SetMusic(16, 0);
|
|
|
|
Game1.GbsPlayer.SetVolumeMultiplier(1.0f);
|
|
Game1.GbsPlayer.Play();
|
|
}
|
|
|
|
public override void Update(GameTime gameTime)
|
|
{
|
|
_scale = Game1.UiScale;
|
|
|
|
if (_scale <= 0)
|
|
_scale = 1;
|
|
|
|
_backgroundWidth = (int)Math.Ceiling(Game1.WindowWidth / (double)(32 * _scale) + 1) * 32 * _scale;
|
|
|
|
_menuRectangle = new Rectangle(
|
|
Game1.WindowWidth / 2 - _menuWidth * _scale / 2,
|
|
Game1.WindowHeight / 2 - _menuHeight * _scale / 2, _menuWidth * _scale, _menuHeight * _scale);
|
|
|
|
_menuRectangle.X = _menuRectangle.X / _scale * _scale;
|
|
_menuRectangle.Y = _menuRectangle.Y / _scale * _scale;
|
|
|
|
_topBar = (int)Math.Ceiling((Game1.WindowHeight / 2 - _menuHeight * _scale / 2) / (float)_scale / _sprBackground.Height) * _sprBackground.Height;
|
|
_bottomBar = (int)Math.Ceiling((Game1.WindowHeight / 2 - _menuHeight * _scale / 2) / (float)_scale / _sprBackground.Height) * _sprBackground.Height;
|
|
|
|
_posX = (int)Math.Ceiling(_menuRectangle.X / (float)_scale / 32) * 32 - _menuRectangle.X / _scale;
|
|
|
|
_leftBar = (int)Math.Ceiling((Game1.WindowWidth / 2 - _menuWidth * _scale / 2) / (float)_scale / _sprBackground.Width) * _sprBackground.Width;
|
|
_rightBar = _leftBar;
|
|
|
|
{
|
|
// update the animation
|
|
_linkAnimation.Update();
|
|
|
|
_linkVisible = false;
|
|
var mainMenuPage = (MainMenuPage)Game1.UiPageManager.GetPage(typeof(MainMenuPage));
|
|
|
|
if (Game1.UiPageManager.PageStack.Count == 1)
|
|
foreach (var saveButton in mainMenuPage.SaveEntries)
|
|
{
|
|
if (saveButton.Selected)
|
|
{
|
|
_linkVisible = true;
|
|
_linkPosition = new Vector2(saveButton.Position.X + 22, saveButton.Position.Y + 22);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void Draw(SpriteBatch spriteBatch)
|
|
{
|
|
spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointWrap, null, null, null, Game1.GetMatrix);
|
|
|
|
// draw the black background
|
|
spriteBatch.Draw(Resources.SprWhite, _menuRectangle, Color.Black);
|
|
|
|
// input helper
|
|
{
|
|
var backStr = "";
|
|
if (ControlHandler.LastKeyboardDown && ControlHandler.ButtonDictionary[CButtons.B].Keys.Length > 0)
|
|
backStr = ControlHandler.ButtonDictionary[CButtons.B].Keys[0].ToString();
|
|
if (!ControlHandler.LastKeyboardDown && ControlHandler.ButtonDictionary[CButtons.B].Buttons.Length > 0)
|
|
backStr = ControlHandler.ButtonDictionary[CButtons.B].Buttons[0].ToString();
|
|
var backHelp = backStr + " Back";
|
|
|
|
var backTextSize = Resources.GameFont.MeasureString(backHelp);
|
|
spriteBatch.DrawString(Resources.GameFont, backHelp,
|
|
new Vector2(_menuRectangle.X + 2 * _scale, _menuRectangle.Bottom - backTextSize.Y * _scale), Color.White, 0, Vector2.Zero, _scale, SpriteEffects.None, 0);
|
|
}
|
|
|
|
{
|
|
var selectStr = "";
|
|
if (ControlHandler.LastKeyboardDown && ControlHandler.ButtonDictionary[CButtons.A].Keys.Length > 0)
|
|
selectStr = ControlHandler.ButtonDictionary[CButtons.A].Keys[0].ToString();
|
|
if (!ControlHandler.LastKeyboardDown && ControlHandler.ButtonDictionary[CButtons.A].Buttons.Length > 0)
|
|
selectStr = ControlHandler.ButtonDictionary[CButtons.A].Buttons[0].ToString();
|
|
var inputHelper = selectStr + " Select";
|
|
|
|
var selectTextSize = Resources.GameFont.MeasureString(inputHelper);
|
|
spriteBatch.DrawString(Resources.GameFont, inputHelper,
|
|
new Vector2(_menuRectangle.Right - (selectTextSize.X + 2) * _scale, _menuRectangle.Bottom - 9 * _scale), Color.White, 0, Vector2.Zero, _scale, SpriteEffects.None, 0);
|
|
}
|
|
|
|
spriteBatch.End();
|
|
}
|
|
|
|
public override void DrawTop(SpriteBatch spriteBatch)
|
|
{
|
|
spriteBatch.End();
|
|
spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointWrap, null, null, null, Game1.GetMatrix);
|
|
|
|
// top
|
|
spriteBatch.Draw(_sprBackground, new Rectangle(
|
|
-_posX * _scale, _menuRectangle.Y - _topBar * _scale, _backgroundWidth, _topBar * _scale),
|
|
new Rectangle(0, 0, _backgroundWidth / _scale, _topBar), Color.White);
|
|
// bottom
|
|
spriteBatch.Draw(_sprBackground, new Rectangle(
|
|
-_posX * _scale, _menuRectangle.Bottom, _backgroundWidth, _bottomBar * _scale),
|
|
new Rectangle(0, 0, _backgroundWidth / _scale, _bottomBar), Color.White);
|
|
|
|
// left
|
|
spriteBatch.Draw(_sprBackground, new Rectangle(
|
|
_menuRectangle.X - _leftBar * _scale, _menuRectangle.Y, _leftBar * _scale, _menuHeight * _scale),
|
|
new Rectangle(0, 0, _leftBar, _menuHeight), Color.White);
|
|
// right
|
|
spriteBatch.Draw(_sprBackground, new Rectangle(
|
|
_menuRectangle.Right, _menuRectangle.Y, _rightBar * _scale, _menuHeight * _scale),
|
|
new Rectangle(0, 0, _rightBar, _menuHeight), Color.White);
|
|
|
|
spriteBatch.End();
|
|
spriteBatch.Begin(SpriteSortMode.Deferred, null, SamplerState.PointWrap, null, null, null, _animationMatrix);
|
|
|
|
//if (_linkVisible)
|
|
// _linkAnimation.Draw(spriteBatch, new Vector2(
|
|
// _menuRectangle.X / _scale + _linkPosition.X + 8, _menuRectangle.Y / _scale + _linkPosition.Y + 32), Color.White);
|
|
|
|
spriteBatch.End();
|
|
spriteBatch.Begin();
|
|
}
|
|
}
|
|
} |