mirror of
https://github.com/AndrioCelos/TableturfBattleApp.git
synced 2026-04-19 15:17:25 -05:00
36 lines
1.5 KiB
C#
36 lines
1.5 KiB
C#
namespace TableturfBattleServer;
|
|
|
|
public class StageSelectionRules(StageSelectionMethod method, int[]? bannedStages) {
|
|
public StageSelectionMethod Method { get; set; } = method;
|
|
public int[] BannedStages { get; set; } = bannedStages ?? Array.Empty<int>();
|
|
|
|
public static StageSelectionRules Default { get; } = new(StageSelectionMethod.Vote, Array.Empty<int>());
|
|
|
|
public void AddUnavailableStages(int maxPlayers) {
|
|
if (maxPlayers == 2) return;
|
|
|
|
var list = new List<int>(this.BannedStages);
|
|
for (var i = 0; i < StageDatabase.Stages.Count; i++) {
|
|
if (maxPlayers > StageDatabase.Stages[i].MaxPlayers)
|
|
list.Add(i);
|
|
}
|
|
this.BannedStages = list.ToArray();
|
|
}
|
|
}
|
|
|
|
public enum StageSelectionMethod {
|
|
/// <summary>The battle will be on the same stage as the last battle. This cannot be used for the first battle.</summary>
|
|
Same,
|
|
/// <summary>Each player votes for a stage, or random. One of the votes, chosen randomly, decides the stage.</summary>
|
|
Vote,
|
|
/// <summary>The stage is chosen randomly. If only one stage is allowed, all battles will be on that stage.</summary>
|
|
Random,
|
|
/// <summary>The loser of the last battle chooses the stage. This cannot be used for the first battle or after a draw.</summary>
|
|
Counterpick,
|
|
/// <summary>
|
|
/// Players take turns to ban stages for the next match, until the final player chooses the stage from among the remaining ones.
|
|
/// For the first battle or after a draw, players vote on who shall strike first. For subsequent battles, the winner of the last battle strikes first.
|
|
/// </summary>
|
|
Strike
|
|
}
|