show tank infos in client

This commit is contained in:
Vinzenz Schroeter 2024-04-22 19:44:28 +02:00
parent a50a9770c9
commit 0f4eec6343
9 changed files with 73 additions and 26 deletions

View file

@ -1,12 +1,14 @@
using System.Net.WebSockets;
using System.Text.Json;
using TanksServer.GameLogic;
namespace TanksServer.Interactivity;
internal sealed class PlayerInfoConnection(
Player player,
ILogger logger,
WebSocket rawSocket
WebSocket rawSocket,
MapEntityManager entityManager
) : WebsocketServerConnection(logger, new ByteChannelWebSocket(rawSocket, logger, 0)), IDisposable
{
private readonly SemaphoreSlim _wantedFrames = new(1);
@ -45,7 +47,11 @@ internal sealed class PlayerInfoConnection(
private byte[]? GetMessageToSend()
{
var info = new PlayerInfo(player.Name, player.Scores, player.Controls);
var tank = entityManager.GetCurrentTankOfPlayer(player);
var tankInfo = tank != null
? new TankInfo(tank.Orientation, tank.ExplosiveBullets, tank.Position.ToPixelPosition(), tank.Moving)
: null;
var info = new PlayerInfo(player.Name, player.Scores, player.Controls, tankInfo);
var response = JsonSerializer.SerializeToUtf8Bytes(info, _context.PlayerInfo);
if (response.SequenceEqual(_lastMessage))

View file

@ -7,7 +7,8 @@ namespace TanksServer.Interactivity;
internal sealed class PlayerServer(
ILogger<PlayerServer> logger,
ILogger<PlayerInfoConnection> connectionLogger,
TankSpawnQueue tankSpawnQueue
TankSpawnQueue tankSpawnQueue,
MapEntityManager entityManager
) : WebsocketServer<PlayerInfoConnection>(logger), ITickStep
{
private readonly ConcurrentDictionary<string, Player> _players = new();
@ -46,7 +47,7 @@ internal sealed class PlayerServer(
public IEnumerable<Player> GetAll() => _players.Values;
public Task HandleClientAsync(WebSocket webSocket, Player player)
=> HandleClientAsync(new PlayerInfoConnection(player, connectionLogger, webSocket));
=> HandleClientAsync(new PlayerInfoConnection(player, connectionLogger, webSocket, entityManager));
public Task TickAsync(TimeSpan delta)
=> ParallelForEachConnectionAsync(connection => connection.OnGameTickAsync());