states/GameState.cs
using Sandbox;
using System.Linq;
namespace Facepunch.BombRoyale;
public class GameState : BaseState
{
public override string Name => "FIGHT";
public override int TimeLeft => RoundEndTime.Relative.CeilToInt();
[Sync] private TimeUntil RoundEndTime { get; set; }
private SoundHandle Music { get; set; }
protected override void OnEnter()
{
if ( Networking.IsHost )
{
foreach ( var player in BombRoyale.Players )
{
player.Respawn();
}
RoundEndTime = 180f;
}
Sound.Play( "round.start" );
Music = Sound.Play( "battle.music" );
}
protected override void OnUpdate()
{
if ( Networking.IsHost )
{
var alivePlayers = BombRoyale.Players
.Count( p => p.LifeState == LifeState.Alive );
if ( RoundEndTime || ( Connection.All.Count > 1 && alivePlayers <= 1 ) )
{
StateSystem.Set<SummaryState>();
}
}
base.OnUpdate();
}
protected override void OnLeave()
{
Music?.Stop();
Music = null;
}
}