using Raylib_cs; using System.Collections.ObjectModel; using System.Numerics; namespace OnekoOnline; abstract class Mouse : Drawable { public string Name = "Mouse"; public Bitmap Cursor; protected static List allMice = []; public static ReadOnlyCollection AllMice => allMice.AsReadOnly(); public static Action? Clicked; protected readonly static Image FallbackImg = Raylib.LoadImageFromMemory(".png", EmbeddedResources.GetResource("misc.cursor.png")); public Mouse() : base() { DrawOrder = 100; allMice.Add(this); string CursorPath = OnekoOnline.Config.GetValue("CursorSpritePath", "misc/cursor.png"); if (File.Exists(CursorPath) && new FileInfo(CursorPath).Length < 2500) { Cursor = Bitmap.FromPNGMemory(File.ReadAllBytes(CursorPath), 32, 32); } else { Console.WriteLine("The cursor PNG was either mising or too big. Using the default."); Cursor = new Bitmap(Raylib.ImageCopy(FallbackImg), 32, 32); } } public Mouse(Bitmap cursor) : base() { DrawOrder = 100; allMice.Add(this); Cursor = cursor; } public override void Draw() { Vector2 NametagPosition = new(Position.X-(Name.Length*3)+4, Position.Y-13); Raylib.DrawTextEx(OnekoOnline.DefaultFont, Name, NametagPosition+Directions.Down, 11, 0, Color.Black); //Shadow Raylib.DrawTextEx(OnekoOnline.DefaultFont, Name, NametagPosition, 11, 0, Color.White); Raylib.DrawTexture(Cursor.Texture, (int)Position.X, (int)Position.Y, Color.White); } protected override void Unload() { Cursor.Dispose(); allMice.Remove(this); } }