Basic round loop done

This commit is contained in:
gamer147
2023-08-03 11:45:09 -04:00
parent 39b9f71801
commit 686edc85a3
4 changed files with 59 additions and 8 deletions

View File

@@ -14,6 +14,7 @@ public partial class MinigameManager : Entity
{
[Net] public Minigame LoadedMinigame { get; private set; }
private List<Minigame> AvailableMinigames { get; set; }
private List<Lucker> InvolvedPlayers { get; set; }
public override void Spawn()
{
@@ -23,6 +24,7 @@ public partial class MinigameManager : Entity
public void StartMinigame(List<Lucker> players, string minigameName = null)
{
InvolvedPlayers = players.ToList();
if (CheckForMinigames())
{
LoadedMinigame = string.IsNullOrEmpty( minigameName ) ? AvailableMinigames.OrderBy( _ => Guid.NewGuid() ).FirstOrDefault() : TypeLibrary.Create<Minigame>( minigameName );
@@ -54,13 +56,35 @@ public partial class MinigameManager : Entity
{
FindMinigames();
}
private void cleanupPlayerPawns()
{
InvolvedPlayers.ForEach( player =>
{
player.Pawn.Delete();
player.Pawn = null;
} );
}
public void Tick()
/// <summary>
/// Called once per tick by the RoundManager. Ticks any running minigame.
/// </summary>
/// <returns>true if the current minigame has ended, else false</returns>
public bool Tick()
{
if ( LoadedMinigame is not { IsValid: true } )
{
return;
return false;
}
LoadedMinigame.Tick();
var ended = LoadedMinigame.Tick();
if ( !ended )
{
return false;
}
LoadedMinigame.Cleanup();
LoadedMinigame = null;
return true;
}
}

View File

@@ -76,7 +76,19 @@ public partial class RoundManager : Entity
if ( RoundState == RoundState.InProgress )
{
MinigameManager.Tick();
var ended = MinigameManager.Tick();
if ( ended )
{
MinigamesLeftInRound--;
if ( MinigamesLeftInRound > 0 )
{
MinigameManager.StartMinigame( Players );
}
else
{
RoundState = RoundState.NotStarted;
}
}
}
}
@@ -120,6 +132,11 @@ public partial class RoundManager : Entity
RoundState = RoundState.InProgress;
Players = All.OfType<Lucker>().ToList();
Players.ForEach( player =>
{
player.Ready = false;
} );
MinigamesLeftInRound = MinigamesPerRound;
MinigameManager.StartMinigame( Players, minigameName );
}