summaryrefslogtreecommitdiff
path: root/Oneko.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Oneko.cs')
-rw-r--r--Oneko.cs33
1 files changed, 27 insertions, 6 deletions
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()