RoundManager.cs
using Sandbox;
using System.Collections.Generic;
using System.Linq;
public sealed class RoundManager : Component
{
public static RoundManager Instance { get; private set; }
[Property] public float RoundTime { get; set; } = 30f;
[Sync] public float TimeLeft { get; set; }
[Sync] public bool IsInRound { get; set; }
protected override void OnAwake()
{
Instance = this;
}
public void StartNewRound()
{
TimeLeft = RoundTime;
IsInRound = true;
// Телепортируем всех игроков на точки спавна
RespawnAllPlayers();
}
public void OnPlayerEliminated( GameObject player )
{
if ( !IsInRound ) return;
// Логика выбывания: отключаем игрока или отправляем в наблюдатели
player.Enabled = false;
var activePlayers = Scene.GetAllComponents<PlayerController>()
.Where( p => p.GameObject.Enabled );
if ( activePlayers.Count() <= 1 )
{
EndRound();
}
}
private void EndRound()
{
IsInRound = false;
Log.Info( "Раунд завершен! Перезапуск через 3 секунды..." );
// Запуск следующего раунда с задержкой
Task.DelaySeconds( 3f ).ContinueWith( _ => StartNewRound() );
}
private void RespawnAllPlayers()
{
// Включение объектов игроков и сброс позиций
}
}