public void StartTurn() { // Clear the actions for each player TurnActions.Clear(); TurnOutcomes.Clear(); IsMidTurn = true; UnreadiedPlayers = 0; }
public void StartSuddenDeath() { SuddenDeathOn = true; SuddenDeathCanShoot = false; SuddenDeathShot = false; TurnOutcomes.Clear(); IsMidTurn = true; Timer t = new Timer(state => { SuddenDeathCanShoot = true; }, null, TimeSpan.FromSeconds(5), TimeSpan.FromMilliseconds(-1)); }
/// <summary> /// Process the actions taken in a turn, updating the TurnOutcomes with the outcomes of these actions /// </summary> public void ProcessTurn() { var actions = GetActionList(); TurnOutcomes.Clear(); // Figure out who is ducking var duckingPlayers = new HashSet <Player>(); var ducksUsed = new HashSet <Player>(); foreach (Action action in actions) { // Duck only if they have Ducks left if (action.Actor.IsAlive && action.Actor.NumDucks > 0 && action.ActType == Action.ActionType.DUCK) { duckingPlayers.Add(action.Actor); action.Actor.Duck(); } } // Perform shoot actions and generate outcomes foreach (Action action in actions) { if (action.ActType == Action.ActionType.SHOOT) { // Only kill the player if they are alive and not ducking if (action.Target.IsAlive) { if (duckingPlayers.Contains(action.Target)) { TurnOutcomes.Add(new Outcome(action, true, false)); ducksUsed.Add(action.Target); } else { action.Target.Kill(); TurnOutcomes.Add(new Outcome(action, false, true)); } } } } // Remove any disconnected players foreach (Player player in Players) { if (!player.IsActiveUser && player.IsAlive) { TurnOutcomes.Add(new Outcome(new Action(Action.ActionType.SHOOT, player, player), false, true)); } } // Perform duck outcomes for players not shot at foreach (Player player in duckingPlayers) { if (!ducksUsed.Contains(player)) { TurnOutcomes.Add(new Outcome(new Action(Action.ActionType.DUCK, player, player), true, false)); } } IsMidTurn = false; UnreadiedPlayers = GetAlivePlayers().Count; }