using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using MonoGameLibrary; using MonoGameLibrary.Graphics; using MonoGameLibrary.Input; namespace FNAF_Clone.GUI; public class UIElement { public bool Active { get; set; } = false; public bool Pressable { get; set; } = false; private (Point, Point) bounds; // TODO: Change this to support non-rectangular hitboxes private List textures = new(); private int currentTextureId = 0; private float _scaleMultiplier = 1; public float ScaleMultiplier{ get{ return _scaleMultiplier; } set{ _scaleMultiplier = value; LoadPixelScaleMultiplier(); } } private float pixelScaleMultiplier = 1; private void LoadPixelScaleMultiplier() { pixelScaleMultiplier = UIManager.GlobalPixelMultiplier * _scaleMultiplier; } public UIElement(TextureRegion texture, Point position) { textures.Add(texture); bounds = (position, position + new Point(texture.Width, texture.Height)); LoadPixelScaleMultiplier(); } public UIElement(TextureRegion[] textures, Point position) { this.textures.AddRange(textures); bounds = (position, position + new Point(textures[0].Width, textures[0].Height)); LoadPixelScaleMultiplier(); } public void SetTexture(int textureId) { if (textureId >= textures.Count){ Console.WriteLine($"WARNING: TEXTURE {textureId} OUT OF BOUNDS"); return; } currentTextureId = textureId; } public void Update() { } public bool IsWithinBounds(Point pos) { return pos.X >= Math.Min(bounds.Item1.X, bounds.Item2.X) && pos.X <= Math.Max(bounds.Item1.X, bounds.Item2.X) && pos.Y >= Math.Min(bounds.Item1.Y, bounds.Item2.Y) && pos.Y <= Math.Max(bounds.Item1.Y, bounds.Item2.Y); } public Action OnMousePress{ get; set; } // public virtual void OnMousePress() { } public virtual void OnMouseRelease() { } public virtual void OnMouseHold() { } public void Draw(SpriteBatch spriteBatch) { textures[currentTextureId].Draw(spriteBatch, bounds.Item1.ToVector2(), Color.White, 0, Vector2.Zero, pixelScaleMultiplier, SpriteEffects.None, 0); // texture.Draw(spriteBatch, bounds.Item1.ToVector2(), Color.White); } }