Compare commits

4 Commits

Author SHA1 Message Date
39b9f71801 Merge pull request 'start_round with minigame name' (#1) from terry-races into master
Reviewed-on: #1
2023-08-03 06:15:15 +00:00
mccarreon
ef88c51454 shortening StartRound 2023-08-02 23:12:31 -07:00
mccarreon
35be78c341 getting rid of unnecessary lines 2023-08-02 22:55:17 -07:00
mccarreon
5c0a454b79 start_round by minigame name 2023-08-02 22:54:05 -07:00
2 changed files with 26 additions and 18 deletions

View File

@@ -21,19 +21,27 @@ public partial class MinigameManager : Entity
FindMinigames(); FindMinigames();
} }
public void StartRandomMinigame(List<Lucker> players) public void StartMinigame(List<Lucker> players, string minigameName = null)
{
if (CheckForMinigames())
{
LoadedMinigame = string.IsNullOrEmpty( minigameName ) ? AvailableMinigames.OrderBy( _ => Guid.NewGuid() ).FirstOrDefault() : TypeLibrary.Create<Minigame>( minigameName );
ChatBox.AddInformation( To.Everyone, $"Starting {LoadedMinigame.Name}" );
LoadedMinigame.Initialize( players );
}
}
private bool CheckForMinigames()
{ {
if ( (AvailableMinigames?.Count ?? 0) == 0 ) if ( (AvailableMinigames?.Count ?? 0) == 0 )
{ {
Log.Error( "Attempted to start minigame, but none available" ); Log.Error( "Attempted to start minigame, but none available" );
return; return false;
} }
LoadedMinigame = AvailableMinigames.OrderBy( _ => Guid.NewGuid() ).FirstOrDefault(); return true;
ChatBox.AddInformation( To.Everyone, $"Starting {LoadedMinigame.Name}" );
LoadedMinigame.Initialize( players );
} }
private void FindMinigames() private void FindMinigames()
{ {
AvailableMinigames = TypeLibrary.GetTypes<Minigame>() AvailableMinigames = TypeLibrary.GetTypes<Minigame>()

View File

@@ -17,7 +17,7 @@ public partial class RoundManager : Entity
/// The minigame manager we should be using to manage minigames /// The minigame manager we should be using to manage minigames
/// </summary> /// </summary>
private MinigameManager MinigameManager { get; set; } private MinigameManager MinigameManager { get; set; }
/// <summary> /// <summary>
/// This percentage of the lobby must be ready to start the countdown for round start /// This percentage of the lobby must be ready to start the countdown for round start
/// </summary> /// </summary>
@@ -27,30 +27,30 @@ public partial class RoundManager : Entity
/// The number of seconds from the timer starting before the round starts /// The number of seconds from the timer starting before the round starts
/// </summary> /// </summary>
private const float RoundStartCountdownSeconds = 5f; private const float RoundStartCountdownSeconds = 5f;
/// <summary> /// <summary>
/// The state of the current round /// The state of the current round
/// </summary> /// </summary>
[Net] public RoundState RoundState { get; private set; } [Net] public RoundState RoundState { get; private set; }
#region Countdown State #region Countdown State
/// <summary> /// <summary>
/// How long since we started counting down to game start. Only useful if in the StartCountdown state. /// How long since we started counting down to game start. Only useful if in the StartCountdown state.
/// </summary> /// </summary>
[Net] public TimeSince TimeSinceCountdownStarted { get; set; } [Net] public TimeSince TimeSinceCountdownStarted { get; set; }
/// <summary> /// <summary>
/// The number of seconds left in the countdown. Only useful if in the StartCountdown state. /// The number of seconds left in the countdown. Only useful if in the StartCountdown state.
/// </summary> /// </summary>
public int SecondsLeftInCountdown => (int)Math.Ceiling( RoundStartCountdownSeconds - TimeSinceCountdownStarted ); public int SecondsLeftInCountdown => (int)Math.Ceiling( RoundStartCountdownSeconds - TimeSinceCountdownStarted );
#endregion #endregion
#region In Progress State #region In Progress State
private const int MinigamesPerRound = 1; private const int MinigamesPerRound = 1;
private int MinigamesLeftInRound { get; set; } private int MinigamesLeftInRound { get; set; }
private List<Lucker> Players { get; set; } private List<Lucker> Players { get; set; }
#endregion #endregion
@@ -110,7 +110,7 @@ public partial class RoundManager : Entity
} }
} }
private void StartRound() private void StartRound( string minigameName = null )
{ {
if ( RoundState == RoundState.InProgress ) if ( RoundState == RoundState.InProgress )
{ {
@@ -120,12 +120,12 @@ public partial class RoundManager : Entity
RoundState = RoundState.InProgress; RoundState = RoundState.InProgress;
Players = All.OfType<Lucker>().ToList(); Players = All.OfType<Lucker>().ToList();
MinigameManager.StartRandomMinigame( Players ); MinigameManager.StartMinigame( Players, minigameName );
} }
[ConCmd.Server("start_round")] [ConCmd.Server( "start_round" )]
public static void ForceStart() public static void ForceStart( string minigameName = null )
{ {
Entity.All.OfType<RoundManager>().FirstOrDefault()?.StartRound(); Entity.All.OfType<RoundManager>().FirstOrDefault()?.StartRound( minigameName );
} }
} }