show tank infos in client
This commit is contained in:
parent
a50a9770c9
commit
0f4eec6343
9 changed files with 73 additions and 26 deletions
|
@ -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))
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue