Basic round loop done
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
else if(TimeSinceDeadVictim > TimeBetweenDeathAndEnd)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
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()
|
||||||
|
|||||||
Reference in New Issue
Block a user