potential fix for locking issues

This commit is contained in:
Vinzenz Schroeter 2024-04-28 15:34:32 +02:00
parent 7044ffda79
commit c0172963d5
20 changed files with 112 additions and 141 deletions

View file

@ -4,10 +4,10 @@ internal sealed class CollectPowerUp(
MapEntityManager entityManager
) : ITickStep
{
public Task TickAsync(TimeSpan delta)
public ValueTask TickAsync(TimeSpan delta)
{
entityManager.RemoveWhere(TryCollect);
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
private bool TryCollect(PowerUp obj)

View file

@ -9,12 +9,12 @@ internal sealed class CollideBullets(
{
private const int ExplosionRadius = 3;
public Task TickAsync(TimeSpan _)
public ValueTask TickAsync(TimeSpan _)
{
entityManager.RemoveWhere(BulletHitsTank);
entityManager.RemoveWhere(BulletHitsWall);
entityManager.RemoveWhere(BulletTimesOut);
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
private bool BulletTimesOut(Bullet bullet)

View file

@ -2,5 +2,5 @@ namespace TanksServer.GameLogic;
public interface ITickStep
{
Task TickAsync(TimeSpan delta);
ValueTask TickAsync(TimeSpan delta);
}

View file

@ -5,12 +5,12 @@ internal sealed class MoveBullets(
IOptions<GameRules> config
) : ITickStep
{
public Task TickAsync(TimeSpan delta)
public ValueTask TickAsync(TimeSpan delta)
{
foreach (var bullet in entityManager.Bullets)
MoveBullet(bullet, delta);
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
private void MoveBullet(Bullet bullet, TimeSpan delta)

View file

@ -8,12 +8,12 @@ internal sealed class MoveTanks(
{
private readonly GameRules _config = options.Value;
public Task TickAsync(TimeSpan delta)
public ValueTask TickAsync(TimeSpan delta)
{
foreach (var tank in entityManager.Tanks)
tank.Moving = TryMoveTank(tank, delta);
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
private bool TryMoveTank(Tank tank, TimeSpan delta)

View file

@ -8,7 +8,7 @@ internal sealed class RotateTanks(
{
private readonly GameRules _config = options.Value;
public Task TickAsync(TimeSpan delta)
public ValueTask TickAsync(TimeSpan delta)
{
foreach (var tank in entityManager.Tanks)
{
@ -30,6 +30,6 @@ internal sealed class RotateTanks(
logger.LogTrace("rotated tank to {}", tank.Rotation);
}
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
}

View file

@ -9,12 +9,12 @@ internal sealed class ShootFromTanks(
{
private readonly GameRules _config = options.Value;
public Task TickAsync(TimeSpan _)
public ValueTask TickAsync(TimeSpan _)
{
foreach (var tank in entityManager.Tanks.Where(t => !t.Moving))
Shoot(tank);
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
private void Shoot(Tank tank)

View file

@ -8,14 +8,14 @@ internal sealed class SpawnPowerUp(
private readonly double _spawnChance = options.Value.PowerUpSpawnChance;
private readonly int _maxCount = options.Value.MaxPowerUpCount;
public Task TickAsync(TimeSpan delta)
public ValueTask TickAsync(TimeSpan delta)
{
if (entityManager.PowerUps.Count() >= _maxCount)
return Task.CompletedTask;
return ValueTask.CompletedTask;
if (Random.Shared.NextDouble() > _spawnChance * delta.TotalSeconds)
return Task.CompletedTask;
return ValueTask.CompletedTask;
entityManager.SpawnPowerUp();
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
}

View file

@ -43,12 +43,12 @@ internal sealed class TankSpawnQueue(
return true;
}
public Task TickAsync(TimeSpan _)
public ValueTask TickAsync(TimeSpan _)
{
if (!TryDequeueNext(out var player))
return Task.CompletedTask;
return ValueTask.CompletedTask;
entityManager.SpawnTank(player);
return Task.CompletedTask;
return ValueTask.CompletedTask;
}
}