summaryrefslogtreecommitdiff
path: root/Mouse.cs
blob: fad056e51ec9f9735dc969302c2ba1d5e9429ba2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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<Mouse> allMice = [];
    public static ReadOnlyCollection<Mouse> AllMice => allMice.AsReadOnly();

    public static Action<Mouse>? Clicked;

    public Mouse() : base()
    {
        DrawOrder = 100;
        allMice.Add(this);

        string CursorPath = "mddisc/cursor.png";

        if (File.Exists(CursorPath) && new FileInfo(CursorPath).Length < 12*19*3) {
            Cursor = Bitmap.FromPNGMemory(File.ReadAllBytes(CursorPath));
        } else {
            Console.WriteLine("Path to cursor png was invalid or the file was too big, using the default.");
            Cursor = Bitmap.FromPNGMemory(EmbeddedResources.GetResource("misc.cursor.png"));
        }
    }

    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);
    }

    public override void Dispose()
    {
        Cursor.Dispose();
        allMice.Remove(this);
        base.Dispose();
    }
}