Skip to content

Commit

Permalink
Merge pull request #1 from DanielMcAssey/dev/handle-actor-actions
Browse files Browse the repository at this point in the history
feat(actioner): move actioner to a seperate class for easier structuring
  • Loading branch information
DanielMcAssey authored Jan 13, 2025
2 parents 88a08c1 + 3113642 commit 3f2b4ad
Show file tree
Hide file tree
Showing 11 changed files with 227 additions and 106 deletions.
175 changes: 175 additions & 0 deletions GLOKON.Baiters.Core/ActorActioner.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,175 @@
using GLOKON.Baiters.Core.Enums.Networking;
using GLOKON.Baiters.Core.Models.Game;
using System.Numerics;

namespace GLOKON.Baiters.Core
{
public sealed class ActorActioner(BaitersServer server)
{
public void SendTalk(char letter, float pitch = 1.5f, ulong? steamId = null)
{
server.SendPacket(new("actor_action")
{
["action"] = "_talk",
["actor_id"] = (long)server.ServerId,
["params"] = new object[]
{
letter.ToString(),
pitch,
},
}, DataChannel.Speech, steamId);
}

public void PlayGuitarStrum(string guitarString, int guitarFret, float volume, ulong? steamId = null)
{
server.SendPacket(new("actor_action")
{
["action"] = "_sync_strum",
["actor_id"] = (long)server.ServerId,
["params"] = new object[]
{
guitarString,
guitarFret,
volume,
},
}, DataChannel.Guitar, steamId);
}

public void PlayGuitarHammer(string guitarString, int guitarFret, ulong? steamId = null)
{
server.SendPacket(new("actor_action")
{
["action"] = "_sync_hammer",
["actor_id"] = (long)server.ServerId,
["params"] = new object[]
{
guitarString,
guitarFret,
},
}, DataChannel.Guitar, steamId);
}

public void PlayParticle(string id, Vector3 offset, bool global, ulong? steamId = null)
{
server.SendPacket(new("actor_action")
{
["action"] = "_play_particle",
["actor_id"] = (long)server.ServerId,
["params"] = new object[]
{
id,
offset,
global,
},
}, DataChannel.Speech, steamId);
}

public void PlaySFX(string id, Vector3? position = null, float pitch = 1.0f, ulong? steamId = null)
{
server.SendPacket(new("actor_action")
{
["action"] = "_play_sfx",
["actor_id"] = (long)server.ServerId,
["params"] = new object[]
{
id,
position.HasValue ? position.Value : null,

Check warning on line 76 in GLOKON.Baiters.Core/ActorActioner.cs

View workflow job for this annotation

GitHub Actions / build_and_release

Possible null reference assignment.

Check warning on line 76 in GLOKON.Baiters.Core/ActorActioner.cs

View workflow job for this annotation

GitHub Actions / Build Server (ubuntu-latest, linux-x64) / build-server

Possible null reference assignment.

Check warning on line 76 in GLOKON.Baiters.Core/ActorActioner.cs

View workflow job for this annotation

GitHub Actions / Build Server (windows-latest, win-x64) / build-server

Possible null reference assignment.
pitch,
},
}, DataChannel.Speech, steamId);
}

public void MovePlayer(ulong steamId, Vector3 position, Vector3? rotation = null)
{
if (server.TryGetPlayer(steamId, out var player) && player != null && player.ActorId.HasValue)
{
player.Position = position;

if (rotation.HasValue)
{
player.Rotation = rotation.Value;
}

server.SendActorUpdate(player.ActorId.Value, player);
}
}

public void SendLetter(ulong toSteamId, string header, string body, string closing, string[]? items = null)
{
// NOTE: Typo in "received" is in WebFishing not here
server.SendPacket(new("letter_recieved")
{
["to"] = toSteamId.ToString(),
["data"] = new Dictionary<string, object>()
{
["letter_id"] = new Random().Next(),
["to"] = toSteamId.ToString(),
["from"] = server.ServerId.ToString(),
["header"] = header,
["body"] = body,
["closing"] = closing,
["items"] = items ?? [],
},
}, DataChannel.GameState, toSteamId);
}

public void SetPlayerCosmetics(ulong steamId, Cosmetics cosmetics)
{
if (server.TryGetPlayer(steamId, out var player) && player != null && player.ActorId.HasValue)
{
player.Cosmetics = cosmetics;
var cosmeticsPkt = new Dictionary<string, object>()
{
["title"] = cosmetics.Title,
["eye"] = cosmetics.Eye,
["nose"] = cosmetics.Nose,
["mouth"] = cosmetics.Mouth,
["undershirt"] = cosmetics.Undershirt,
["overshirt"] = cosmetics.Overshirt,
["legs"] = cosmetics.Legs,
["hat"] = cosmetics.Hat,
["species"] = cosmetics.Species,
["accessory"] = cosmetics.Accessory,
["pattern"] = cosmetics.Pattern,
["primary_color"] = cosmetics.PrimaryColor,
["secondary_color"] = cosmetics.SecondaryColor,
["tail"] = cosmetics.Tail,
};

if (!string.IsNullOrWhiteSpace(cosmetics.Bobber))
{
cosmeticsPkt.Add("bobber", cosmetics.Bobber);
}

server.SendPacket(new("actor_action")
{
["action"] = "_update_cosmetics",
["actor_id"] = player.ActorId.Value,
["params"] = new object[] { cosmeticsPkt, },
}, DataChannel.ActorAction);
}
}

public void SetPlayerHeldItem(ulong steamId, HeldItem? item = null)
{
if (server.TryGetPlayer(steamId, out var player) && player != null && player.ActorId.HasValue)
{
player.HeldItem = item;
var heldItemPkt = new Dictionary<string, object>();
if (item != null)
{
heldItemPkt.Add("id", item.Id);
heldItemPkt.Add("size", item.Size);
heldItemPkt.Add("quality", item.Quality);
}

server.SendPacket(new("actor_action")
{
["action"] = "_update_held_item",
["actor_id"] = player.ActorId.Value,
["params"] = new object[] { heldItemPkt, },
}, DataChannel.ActorAction);
}
}
}
}
79 changes: 0 additions & 79 deletions GLOKON.Baiters.Core/BaitersServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
using Steamworks.Data;
using System.Collections.Concurrent;
using GLOKON.Baiters.Core.Enums.Networking;
using GLOKON.Baiters.Core.Models.Game;

namespace GLOKON.Baiters.Core
{
Expand Down Expand Up @@ -234,25 +233,6 @@ public void SendMessage(string message, string color = MessageColour.Default, ul
}, DataChannel.GameState, steamId);
}

public void SendLetter(ulong toSteamId, string header, string body, string closing, string user)
{
SendPacket(new("letter_received")
{
["to"] = toSteamId.ToString(),
["data"] = new Dictionary<string, object>()
{
["to"] = toSteamId.ToString(),
["from"] = ServerId.ToString(),
["header"] = header,
["body"] = body,
["closing"] = closing,
["user"] = user,
["letter_id"] = new Random().Next(),
["items"] = Array.Empty<object>(),
},
}, DataChannel.GameState, toSteamId);
}

public void SendPacket(Packet packet, DataChannel channel, ulong? steamId = null)
{
byte[] data = packet.ToBytes();
Expand All @@ -269,65 +249,6 @@ public void SendPacket(Packet packet, DataChannel channel, ulong? steamId = null
}
}

public void SetPlayerCosmetics(ulong steamId, Cosmetics cosmetics)
{
if (TryGetPlayer(steamId, out var player) && player != null)
{
player.Cosmetics = cosmetics;
var cosmeticsPkt = new Dictionary<string, object>()
{
["title"] = cosmetics.Title,
["eye"] = cosmetics.Eye,
["nose"] = cosmetics.Nose,
["mouth"] = cosmetics.Mouth,
["undershirt"] = cosmetics.Undershirt,
["overshirt"] = cosmetics.Overshirt,
["legs"] = cosmetics.Legs,
["hat"] = cosmetics.Hat,
["species"] = cosmetics.Species,
["accessory"] = cosmetics.Accessory,
["pattern"] = cosmetics.Pattern,
["primary_color"] = cosmetics.PrimaryColor,
["secondary_color"] = cosmetics.SecondaryColor,
["tail"] = cosmetics.Tail,
};

if (!string.IsNullOrWhiteSpace(cosmetics.Bobber))
{
cosmeticsPkt.Add("bobber", cosmetics.Bobber);
}

SendPacket(new("actor_action")
{
["action"] = "_update_cosmetics",
["actor_id"] = (long)steamId,
["params"] = new object[] { cosmeticsPkt, },
}, DataChannel.ActorAction);
}
}

public void SetPlayerHeldItem(ulong steamId, HeldItem? item = null)
{
if (TryGetPlayer(steamId, out var player) && player != null)
{
player.HeldItem = item;
var heldItemPkt = new Dictionary<string, object>();
if (item != null)
{
heldItemPkt.Add("id", item.Id);
heldItemPkt.Add("size", item.Size);
heldItemPkt.Add("quality", item.Quality);
}

SendPacket(new("actor_action")
{
["action"] = "_update_held_item",
["actor_id"] = (long)steamId,
["params"] = new object[] { heldItemPkt, },
}, DataChannel.ActorAction);
}
}

public bool IsAdmin(ulong steamId)
{
return options.Admins.Contains(steamId);
Expand Down
5 changes: 4 additions & 1 deletion GLOKON.Baiters.Core/GameManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ public sealed class GameManager(
PacketManager packet,
ChatManager chat,
BaitersServer server,
ActorSpawner spawner)
ActorSpawner spawner,
ActorActioner actioner)
{
private readonly WebFishingOptions options = _options.Value;

Expand All @@ -23,6 +24,8 @@ public sealed class GameManager(

public ActorSpawner Spawner => spawner;

public ActorActioner Actioner => actioner;

public ChatManager Chat => chat;

public void Setup()
Expand Down
2 changes: 2 additions & 0 deletions GLOKON.Baiters.Core/Models/Actor/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ public sealed class Player(ulong steamId, string fisherName, bool isAdmin = fals

public long? ActorId { get; set; }

public string? LastEmote { get; set; }

public Cosmetics? Cosmetics { get; set; }

public HeldItem? HeldItem { get; set; }
Expand Down
2 changes: 1 addition & 1 deletion GLOKON.Baiters.Core/Models/Game/HeldItem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ public sealed class HeldItem
{
public required string Id { get; set; }

public required float Size { get; set; }
public required double Size { get; set; }

public ItemQuality Quality { get; set; } = ItemQuality.Normal;
}
Expand Down
Loading

0 comments on commit 3f2b4ad

Please sign in to comment.