using System.Numerics; using OnekoOnline.Net; using Raylib_cs; namespace OnekoOnline; class OnekoNet : Oneko { readonly User MyUser; public static Dictionary NetNekos = []; public OnekoNet(Bitmap bitmap, User user) : base(bitmap) { MyUser = user; Name = user.Username!; Client.UserDisconnected += disconnectedUser => { if (disconnectedUser == MyUser) Dispose(); }; Client.PacketRecived += (reader, user, packetType) => { if (user != MyUser) return; if (packetType == PacketType.OnekoTargetPosition) TargetPosition = reader.GetVector2(); }; Client.ServerDisconnected += Dispose; } public static void SpawnNetNeko(User user) { if (!NetNekos.ContainsKey(user.Id)) { Bitmap spriteSheet = Bitmap.Deserialize(user.SpriteSheet); NetNekos.Add(user.Id, new OnekoNet(spriteSheet, user)); } } public override void Dispose() { NetNekos.Remove(MyUser.Id); base.Dispose(); } public static void DisconnectAll() { foreach (OnekoNet neko in NetNekos.Values) neko.Dispose(); } }