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; } [Net] public Minigame LoadedMinigame { get; private set; }
private List<Minigame> AvailableMinigames { get; set; } private List<Minigame> AvailableMinigames { get; set; }
private List<Lucker> InvolvedPlayers { get; set; }
public override void Spawn() public override void Spawn()
{ {
@@ -23,6 +24,7 @@ public partial class MinigameManager : Entity
public void StartMinigame(List<Lucker> players, string minigameName = null) public void StartMinigame(List<Lucker> players, string minigameName = null)
{ {
InvolvedPlayers = players.ToList();
if (CheckForMinigames()) if (CheckForMinigames())
{ {
LoadedMinigame = string.IsNullOrEmpty( minigameName ) ? AvailableMinigames.OrderBy( _ => Guid.NewGuid() ).FirstOrDefault() : TypeLibrary.Create<Minigame>( minigameName ); LoadedMinigame = string.IsNullOrEmpty( minigameName ) ? AvailableMinigames.OrderBy( _ => Guid.NewGuid() ).FirstOrDefault() : TypeLibrary.Create<Minigame>( minigameName );
@@ -55,12 +57,34 @@ public partial class MinigameManager : Entity
FindMinigames(); FindMinigames();
} }
public void Tick() private void cleanupPlayerPawns()
{
InvolvedPlayers.ForEach( player =>
{
player.Pawn.Delete();
player.Pawn = null;
} );
}
/// <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 } ) 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 ) 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; RoundState = RoundState.InProgress;
Players = All.OfType<Lucker>().ToList(); Players = All.OfType<Lucker>().ToList();
Players.ForEach( player =>
{
player.Ready = false;
} );
MinigamesLeftInRound = MinigamesPerRound;
MinigameManager.StartMinigame( Players, minigameName ); MinigameManager.StartMinigame( Players, minigameName );
} }

View File

@@ -21,7 +21,8 @@ public abstract class Minigame : Entity
/// <summary> /// <summary>
/// Once a minigame is loaded and initialized, this method is called once per server tick. /// Once a minigame is loaded and initialized, this method is called once per server tick.
/// </summary> /// </summary>
public abstract void Tick(); /// <returns>true if the minigame has ended, false otherwise</returns>
public abstract bool Tick();
/// <summary> /// <summary>
/// Cleans up any entities and components created by this minigame. /// Cleans up any entities and components created by this minigame.

View File

@@ -16,8 +16,10 @@ public class RussianRouletteMinigame : Minigame
public override string Name => "Russian Roulette"; public override string Name => "Russian Roulette";
private List<Lucker> Players { get; set; } private List<Lucker> Players { get; set; }
private Pawn Shooter { get; set; } private Pawn Shooter { get; set; }
private const float ShooterDistance = 80f; private const float ShooterDistance = 80f;
private const float TimeBetweenShots = 7f; private const float TimeBetweenShots = 7f;
private const float TimeBetweenDeathAndEnd = 5f;
private int Taunted = 0; private int Taunted = 0;
private List<Pawn> DeadVictims => Players private List<Pawn> DeadVictims => Players
@@ -26,6 +28,7 @@ public class RussianRouletteMinigame : Minigame
.ToList(); .ToList();
private TimeSince TimeSinceShot { get; set; } private TimeSince TimeSinceShot { get; set; }
private TimeSince TimeSinceDeadVictim { get; set; }
public override void Initialize( List<Lucker> players ) public override void Initialize( List<Lucker> players )
{ {
@@ -60,7 +63,7 @@ public class RussianRouletteMinigame : Minigame
TimeSinceShot = 0; TimeSinceShot = 0;
} }
public override void Tick() public override bool Tick()
{ {
if ( DeadVictims.Any() ) if ( DeadVictims.Any() )
{ {
@@ -68,10 +71,14 @@ public class RussianRouletteMinigame : Minigame
{ {
ChatBox.AddChatEntry( To.Everyone, "Shooter", "Heh, nothing personnel, kid." ); ChatBox.AddChatEntry( To.Everyone, "Shooter", "Heh, nothing personnel, kid." );
Taunted = int.MaxValue; Taunted = int.MaxValue;
TimeSinceDeadVictim = 0;
} }
return; else if(TimeSinceDeadVictim > TimeBetweenDeathAndEnd)
{
return true;
} }
if ( TimeSinceShot > TimeBetweenShots ) }
else if ( TimeSinceShot > TimeBetweenShots )
{ {
TimeSinceShot = 0; TimeSinceShot = 0;
Taunted = 0; Taunted = 0;
@@ -95,6 +102,8 @@ public class RussianRouletteMinigame : Minigame
ChatBox.AddChatEntry( To.Everyone, "Shooter", "Im gettin' ready!" ); ChatBox.AddChatEntry( To.Everyone, "Shooter", "Im gettin' ready!" );
Taunted++; Taunted++;
} }
return false;
} }
public override void Cleanup() public override void Cleanup()