From fc3874657348bde6ce7e3fab625c92dfec91baaa Mon Sep 17 00:00:00 2001 From: Sarah Bradley Date: Sun, 17 Dec 2023 23:31:40 -0800 Subject: Added Window Scaling, custom mouse, and Neko nametags --- Oneko.cs | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) (limited to 'Oneko.cs') diff --git a/Oneko.cs b/Oneko.cs index 3b9c5bc..361a6e2 100644 --- a/Oneko.cs +++ b/Oneko.cs @@ -1,4 +1,5 @@ using System.Numerics; +using OnekoOnline.Net; using Raylib_cs; namespace OnekoOnline; @@ -6,25 +7,30 @@ namespace OnekoOnline; class Oneko : Drawable { public readonly Bitmap SpriteSheet; - protected Vector2 TargetPosition; OnekoAnimation Animation = ScratchSelf; + public Vector2 TargetPosition; + float updateTimer = 0f; const float updateRate = 1f/5f; int Frame = 0; + float InactivityTimer = 0f; + + public string Name = "Oneko"; + public Oneko() { Size = new(32,32); Position = new(320/2, 240/2); - string SpriteSheetPath = OnekoOnline.Config.GetValue("SpriteSheetPath", "oneko.png"); + string SpriteSheetPath = OnekoOnline.Config.GetValue("SpriteSheetPath", "nekos/oneko.png"); if (File.Exists(SpriteSheetPath) && new FileInfo(SpriteSheetPath).Length < 128*256*3) { SpriteSheet = Bitmap.FromPNGMemory(File.ReadAllBytes(SpriteSheetPath)); } else { Console.WriteLine("Path to spritesheet was invalid, using the default."); - SpriteSheet = Bitmap.FromPNGMemory(EmbeddedResources.GetResource("oneko.png")); + SpriteSheet = Bitmap.FromPNGMemory(EmbeddedResources.GetResource("nekos.oneko.png")); } Drawables.Add(this); @@ -41,27 +47,42 @@ class Oneko : Drawable public override void Draw() { + //Nametag + if (Vector2.Distance(Raylib.GetMousePosition()/OnekoOnline.WindowScale, Position) < 20f) { + Vector2 NametagPosition = new(Position.X-(Name.Length*3)+4, Position.Y-28); + Raylib.DrawTextEx(OnekoOnline.DefaultFont, Name, NametagPosition+Directions.Down, 11, 0, Color.BLACK); //Shadow + Raylib.DrawTextEx(OnekoOnline.DefaultFont, Name, NametagPosition, 11, 0, Color.WHITE); + } + + //The neko Raylib.DrawTexturePro(SpriteSheet.Texture, Animation.GetFrame(Frame), new Rectangle(Position.X, Position.Y, Size.X, Size.Y), Size/2, Rotation, Color.WHITE); } public override void Update(float delta) { + InactivityTimer += delta; updateTimer += delta; if (updateTimer < updateRate) return; - OnekoUpdate(delta); + OnekoUpdate(); updateTimer = 0f; } - public virtual void OnekoUpdate(float delta) + public virtual void OnekoUpdate() { Vector2 TargetDirection = (TargetPosition-Position).LimitLength(10f); - if (TargetDirection.Length() > 1) Animation = GetDirectionalRun(TargetDirection); + if (TargetDirection.Length() > 1) { + Animation = GetDirectionalRun(TargetDirection); + InactivityTimer = 0f; + } else Animation = Idle; Position += TargetDirection; Frame = (Frame + 1) % 2; + + if (InactivityTimer > 3f) Animation = ScratchSelf; + if (InactivityTimer > 5f) Animation = Sleep; } public override void Dispose() -- cgit