servicepoint-tanks/TanksServer/TickSteps/ShootFromTanks.cs

39 lines
1.1 KiB
C#
Raw Normal View History

2024-04-07 20:16:22 +02:00
using TanksServer.Models;
using TanksServer.Services;
2024-04-07 19:52:16 +02:00
namespace TanksServer.TickSteps;
internal sealed class ShootFromTanks(
2024-04-09 22:38:56 +02:00
TankManager tanks,
IOptions<TanksConfiguration> options,
BulletManager bulletManager
2024-04-07 19:52:16 +02:00
) : ITickStep
{
private readonly TanksConfiguration _config = options.Value;
public Task TickAsync()
{
foreach (var tank in tanks.Where(t => !t.Moved))
Shoot(tank);
return Task.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 angle = tank.Rotation / 16 * 2 * Math.PI;
var position = new FloatPosition(
X: tank.Position.X + MapService.TileSize / 2d + Math.Sin(angle) * _config.BulletSpeed,
Y: tank.Position.Y + MapService.TileSize / 2d - Math.Cos(angle) * _config.BulletSpeed
);
bulletManager.Spawn(new Bullet(tank.Owner, position, tank.Rotation));
}
2024-04-09 22:38:56 +02:00
}