using System.Diagnostics; namespace TanksServer.GameLogic; internal sealed class ShootFromTanks( IOptions options, MapEntityManager entityManager ) : ITickStep { private readonly GameRules _config = options.Value; public ValueTask TickAsync(TimeSpan _) { foreach (var tank in entityManager.Tanks.Where(t => !t.Moving)) Shoot(tank); return ValueTask.CompletedTask; } private void Shoot(Tank tank) { if (!tank.Owner.Controls.Shoot) return; if (tank.NextShotAfter >= DateTime.Now) return; tank.NextShotAfter = DateTime.Now.AddMilliseconds(_config.ShootDelayMs); var explosive = tank.ExplosiveBullets > 0; if (explosive) tank.ExplosiveBullets--; tank.Owner.Scores.ShotsFired++; entityManager.SpawnBullet(tank.Owner, tank.Position, tank.Orientation / 16d, explosive); } }