70 lines
1.8 KiB
C#
70 lines
1.8 KiB
C#
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Content;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
|
|
namespace AlienAttack.MonoGame.View;
|
|
|
|
public class ViewTransform(Game game, GraphicsDeviceManager graphics)
|
|
{
|
|
public readonly GameWindow Window = game.Window;
|
|
public readonly ContentManager Content = game.Content;
|
|
public readonly GraphicsDeviceManager Graphics = graphics;
|
|
public readonly GraphicsDevice GraphicsDevice = game.GraphicsDevice;
|
|
public readonly SpriteBatch SpriteBatch;
|
|
|
|
public float ScaleX => (float)WindowWidth / Graphics.PreferredBackBufferWidth;
|
|
public float ScaleY => (float)WindowHeight / Graphics.PreferredBackBufferHeight;
|
|
public float ScaleMin => MathHelper.Min(ScaleX, ScaleY);
|
|
|
|
public float OffsetX => KeepAspectRatio ? MathHelper.Max(ScaleX - ScaleY, 0) * ScreenWidth : 0;
|
|
public float OffsetY => KeepAspectRatio ? MathHelper.Max(ScaleY - ScaleX, 0) * ScreenHeight : 0;
|
|
|
|
public bool KeepAspectRatio = true;
|
|
|
|
public int ScreenWidth
|
|
{
|
|
get
|
|
{
|
|
return Graphics.PreferredBackBufferWidth;
|
|
}
|
|
}
|
|
|
|
public int ScreenHeight
|
|
{
|
|
get
|
|
{
|
|
return Graphics.PreferredBackBufferHeight;
|
|
}
|
|
}
|
|
|
|
public int WindowWidth
|
|
{
|
|
get
|
|
{
|
|
return Window.ClientBounds.Width;
|
|
}
|
|
}
|
|
|
|
public int WindowHeight
|
|
{
|
|
get
|
|
{
|
|
return Window.ClientBounds.Height;
|
|
}
|
|
}
|
|
|
|
public Matrix ViewMatrix
|
|
{
|
|
get
|
|
{
|
|
if (KeepAspectRatio)
|
|
{
|
|
return Matrix.CreateScale(ScaleMin, ScaleMin, 1.0f) * Matrix.CreateTranslation(OffsetX / 2, OffsetY / 2, 0);
|
|
}
|
|
else
|
|
{
|
|
return Matrix.CreateScale(ScaleX, ScaleY, 1.0f);
|
|
}
|
|
}
|
|
}
|
|
} |