states/SummaryState.cs
using Sandbox;
using System.Linq;
namespace Facepunch.BombRoyale;
public class SummaryState : BaseState
{
public override string Name => "END";
public override int TimeLeft => RoundEndTime.Relative.CeilToInt();
public override bool IsPaused => true;
[Sync] public string WinnerName { get; private set; }
[Sync] public int WinnerIndex { get; private set; }
[Sync] private TimeUntil RoundEndTime { get; set; }
protected override void OnEnter()
{
if ( Networking.IsHost )
{
var winner = BombRoyale.Players
.Where( p => p.LifeState == LifeState.Alive )
.MaxBy( p => p.MaxBombs + p.BombRange + p.SpeedBoosts );
if ( winner.IsValid() )
{
winner.ConsecutiveWins++;
WinnerName = winner.Network.Owner.DisplayName;
WinnerIndex = winner.PlayerSlot;
if ( winner.ConsecutiveWins >= 3 )
winner.UnlockAchievement( "win_3x" );
}
foreach ( var player in BombRoyale.Players )
{
if ( player == winner ) continue;
player.ConsecutiveWins = 0;
}
foreach ( var bomb in Scene.GetAllComponents<Bomb>() )
{
if ( bomb.IsPlaced )
{
bomb.GameObject.Destroy();
}
}
RoundEndTime = 10f;
}
var localPlayer = Player.Me;
if ( localPlayer.IsValid() && WinnerIndex > 0 && WinnerIndex == localPlayer.PlayerSlot )
Sound.Play( "round.win" );
else
Sound.Play( "round.end" );
}
protected override void OnUpdate()
{
if ( Networking.IsHost && RoundEndTime )
{
StateSystem.Set<LobbyState>();
}
base.OnUpdate();
}
}