mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-01 12:24:16 +00:00
117 lines
5.9 KiB
C#
117 lines
5.9 KiB
C#
using System;
|
|
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
using ProjectZ.Base.UI;
|
|
using ProjectZ.InGame.SaveLoad;
|
|
using ProjectZ.InGame.Things;
|
|
|
|
namespace ProjectZ.InGame.Overlay
|
|
{
|
|
public class HudOverlay
|
|
{
|
|
private readonly ItemSlotOverlay _itemSlotOverlay = new ItemSlotOverlay();
|
|
|
|
private readonly UiRectangle _heartBackground;
|
|
private readonly UiRectangle _rubeeBackground;
|
|
|
|
private readonly DictAtlasEntry _saveIcon;
|
|
|
|
private Rectangle _gameUiWindow;
|
|
|
|
private Point _heartPosition;
|
|
private Point _rubeePosition;
|
|
private Vector2 _saveIconPosition;
|
|
|
|
private const int FadeOffsetBackground = 10;
|
|
private const int FadeOffset = 13;
|
|
|
|
private const int SaveIconTime = 1000;
|
|
private float _saveIconTransparency;
|
|
private float _saveIconCounter;
|
|
|
|
public HudOverlay()
|
|
{
|
|
_heartBackground = new UiRectangle(Rectangle.Empty, "heart", Values.ScreenNameGame, Values.OverlayBackgroundColor, Values.OverlayBackgroundBlurColor, null) { Radius = Values.UiBackgroundRadius };
|
|
Game1.EditorUi.AddElement(_heartBackground);
|
|
|
|
_rubeeBackground = new UiRectangle(Rectangle.Empty, "rubee", Values.ScreenNameGame, Values.OverlayBackgroundColor, Values.OverlayBackgroundBlurColor, null) { Radius = Values.UiBackgroundRadius };
|
|
Game1.EditorUi.AddElement(_rubeeBackground);
|
|
|
|
_saveIcon = Resources.GetSprite("save_icon");
|
|
}
|
|
|
|
public void Update(float fadePercentage, float transparency)
|
|
{
|
|
_saveIconCounter -= Game1.DeltaTime;
|
|
if (_saveIconCounter < 0)
|
|
_saveIconCounter = 0;
|
|
_saveIconTransparency = Math.Min(Math.Clamp(_saveIconCounter / 100, 0, 1), Math.Clamp((SaveIconTime - _saveIconCounter) / 100, 0, 1));
|
|
|
|
// TODO_Opt: maybe add settings for wide screen positioning
|
|
var scale = Math.Min(Game1.WindowWidth / (float)Values.MinWidth, Game1.WindowHeight / (float)Values.MinHeight);
|
|
|
|
// not so gud
|
|
_gameUiWindow.Width = (int)(Values.MinWidth * scale);
|
|
_gameUiWindow.Height = (int)(Values.MinHeight * scale);
|
|
|
|
var ar = MathHelper.Clamp(Game1.WindowWidth / (float)Game1.WindowHeight, 1, 2);
|
|
|
|
_gameUiWindow.Width = MathHelper.Clamp((int)(Game1.WindowHeight * ar), 0, Game1.WindowWidth);
|
|
_gameUiWindow.Height = MathHelper.Clamp((int)(Game1.WindowWidth / ar), 0, Game1.WindowHeight);
|
|
_gameUiWindow.X = Game1.WindowWidth / 2 - _gameUiWindow.Width / 2;
|
|
_gameUiWindow.Y = Game1.WindowHeight / 2 - _gameUiWindow.Height / 2;
|
|
|
|
// top left
|
|
_heartPosition = new Point(_gameUiWindow.X + 16 * Game1.UiScale, _gameUiWindow.Y + 16 * Game1.UiScale);
|
|
_heartBackground.Rectangle = ItemDrawHelper.GetHeartRectangle(_heartPosition, Game1.UiScale);
|
|
_heartBackground.Rectangle.X -= (int)(fadePercentage * FadeOffsetBackground * Game1.UiScale);
|
|
_heartBackground.BackgroundColor = Values.OverlayBackgroundColor * transparency;
|
|
_heartBackground.BlurColor = Values.OverlayBackgroundBlurColor * transparency;
|
|
|
|
// top right
|
|
_rubeePosition = new Point(
|
|
_gameUiWindow.X + _gameUiWindow.Width - ItemDrawHelper.RubeeSize.X * Game1.UiScale - 16 * Game1.UiScale,
|
|
_gameUiWindow.Y + 16 * Game1.UiScale);
|
|
_rubeeBackground.Rectangle = ItemDrawHelper.GetRubeeRectangle(new Point(_rubeePosition.X, _rubeePosition.Y), Game1.UiScale);
|
|
_rubeeBackground.Rectangle.X += (int)(fadePercentage * FadeOffsetBackground * Game1.UiScale);
|
|
_rubeeBackground.BackgroundColor = Values.OverlayBackgroundColor * transparency;
|
|
_rubeeBackground.BlurColor = Values.OverlayBackgroundBlurColor * transparency;
|
|
|
|
// bottom left
|
|
_itemSlotOverlay.UpdatePositions(_gameUiWindow, new Point(-(int)(fadePercentage * FadeOffsetBackground * Game1.UiScale), 0), Game1.UiScale);
|
|
_itemSlotOverlay.SetTransparency(transparency);
|
|
|
|
// bottom right
|
|
_saveIconPosition = new Vector2(
|
|
_gameUiWindow.X + _gameUiWindow.Width - _saveIcon.SourceRectangle.Width * Game1.UiScale - 16 * Game1.UiScale,
|
|
_gameUiWindow.Y + _gameUiWindow.Height - _saveIcon.SourceRectangle.Height * Game1.UiScale - 16 * Game1.UiScale);
|
|
}
|
|
|
|
public void DrawTop(SpriteBatch spriteBatch, float fadePercentage, float transparency)
|
|
{
|
|
// draw the item slots
|
|
ItemSlotOverlay.Draw(spriteBatch, _itemSlotOverlay.ItemSlotPosition - new Point((int)(fadePercentage * FadeOffset * Game1.UiScale), 0), Game1.UiScale, transparency);
|
|
|
|
//DrawHelper.DrawSmallKeys(spriteBatch, _keyPosition, Game1.UiScale, Color.White * transparency);
|
|
|
|
// draw the rubees
|
|
ItemDrawHelper.DrawRubee(spriteBatch, _rubeePosition + new Point((int)(fadePercentage * FadeOffset * Game1.UiScale), 0), Game1.UiScale, Color.Black * transparency);
|
|
|
|
// draw the heart position
|
|
ItemDrawHelper.DrawHearts(spriteBatch, _heartPosition - new Point((int)(fadePercentage * FadeOffset * Game1.UiScale), 0), Game1.UiScale, Color.White * transparency);
|
|
}
|
|
|
|
public void DrawBlur(SpriteBatch spriteBatch)
|
|
{
|
|
// draw the save icon
|
|
Resources.RoundedCornerBlurEffect.Parameters["blurColor"].SetValue((Values.OverlayBackgroundBlurColor * _saveIconTransparency).ToVector4());
|
|
DrawHelper.DrawNormalized(spriteBatch, _saveIcon.Texture, _saveIconPosition, _saveIcon.ScaledRectangle, Values.OverlayBackgroundColor * _saveIconTransparency, Game1.UiScale);
|
|
}
|
|
|
|
public void ShowSaveIcon()
|
|
{
|
|
_saveIconCounter = SaveIconTime;
|
|
}
|
|
}
|
|
}
|