Example #1
0
        private IList <BetAction> GetValidBetActions()
        {
            if (BetResult != null)
            {
                return(new List <BetAction>());
            }
            var lastBetAction = GetLastNonPassBetAction();
            var betActionTeam = lastBetAction != null
                ? PlayerGroup.GetTeamOfPlayer(lastBetAction.PlayerInfo.PlayerId)
                : null;

            if (lastBetAction != null && lastBetAction.Type == BetActionType.Barrani)
            {
                //Case Barrani occured
                return(new List <BetAction>());
            }
            if (lastBetAction != null && lastBetAction.Type == BetActionType.Sidi)
            {
                //Case Sidi occured
                var opposingTeam  = PlayerGroup.GetOtherTeam(betActionTeam.TeamId);
                var alreadyPassed = GetFollowedBetActions(lastBetAction)
                                    .Select(a => a.PlayerInfo)
                                    .ToList();
                var betActionList            = new List <BetAction>();
                var nextActiveOpposingPlayer = PlayerGroup
                                               .GetPlayerList(CurrentPlayer.PlayerId)
                                               .FirstOrDefault(p => PlayerGroup.GetTeamOfPlayer(p.PlayerId) == opposingTeam && !alreadyPassed.Contains(p));
                if (!alreadyPassed.Contains(opposingTeam.Player1))
                {
                    betActionList.Add(new BetAction
                    {
                        PlayerInfo = opposingTeam.Player1,
                        Type       = BetActionType.Barrani
                    });
                    if (nextActiveOpposingPlayer == opposingTeam.Player1)
                    {
                        betActionList.Add(new BetAction
                        {
                            PlayerInfo = opposingTeam.Player1,
                            Type       = BetActionType.Pass
                        });
                    }
                }
                if (!alreadyPassed.Contains(opposingTeam.Player2))
                {
                    betActionList.Add(new BetAction
                    {
                        PlayerInfo = opposingTeam.Player2,
                        Type       = BetActionType.Barrani
                    });
                    if (nextActiveOpposingPlayer == opposingTeam.Player2)
                    {
                        betActionList.Add(new BetAction
                        {
                            PlayerInfo = opposingTeam.Player2,
                            Type       = BetActionType.Pass
                        });
                    }
                }
                return(betActionList);
            }
            //Case no Sidi/Barrani occured (lastBetAction is a Bet or null)
            var validNewBets    = GetValidNewBets();
            var validBetActions = validNewBets
                                  .Select(b => new BetAction
            {
                PlayerInfo = CurrentPlayer,
                Type       = BetActionType.Bet,
                Bet        = b
            })
                                  .ToList();

            var generalBetAction = lastBetAction?.Bet != null && lastBetAction.Bet.BetAmount.IsGeneral
                ? lastBetAction
                : null;

            if (generalBetAction != null)
            {
                var opposingTeam  = PlayerGroup.GetOpposingTeamOfPlayer(generalBetAction.PlayerInfo.PlayerId);
                var alreadyPassed = GetFollowedBetActions(generalBetAction)
                                    .Select(a => a.PlayerInfo)
                                    .ToList();
                var nextActiveOpposingPlayer = PlayerGroup
                                               .GetPlayerList(CurrentPlayer.PlayerId)
                                               .FirstOrDefault(p => PlayerGroup.GetTeamOfPlayer(p.PlayerId) == opposingTeam && !alreadyPassed.Contains(p));
                if (nextActiveOpposingPlayer != null)
                {
                    validBetActions.Add(new BetAction
                    {
                        PlayerInfo = nextActiveOpposingPlayer,
                        Type       = BetActionType.Pass
                    });
                }
            }
            else
            {
                validBetActions.Add(new BetAction
                {
                    PlayerInfo = CurrentPlayer,
                    Type       = BetActionType.Pass
                });
            }
            if (lastBetAction != null)
            {
                var opposingTeam            = PlayerGroup.GetOpposingTeamOfPlayer(lastBetAction.PlayerInfo.PlayerId);
                var passingOppositionPlayer = GetFollowedBetActions(lastBetAction)
                                              .Where(a => PlayerGroup.GetTeamOfPlayer(a.PlayerInfo.PlayerId) == opposingTeam && a.Type == BetActionType.Pass)
                                              .Select(a => a.PlayerInfo)
                                              .ToList();
                if (!passingOppositionPlayer.Contains(opposingTeam.Player1))
                {
                    validBetActions.Add(new BetAction
                    {
                        PlayerInfo = opposingTeam.Player1,
                        Type       = BetActionType.Sidi
                    });
                }
                if (!passingOppositionPlayer.Contains(opposingTeam.Player2))
                {
                    validBetActions.Add(new BetAction
                    {
                        PlayerInfo = opposingTeam.Player2,
                        Type       = BetActionType.Sidi
                    });
                }
            }
            return(validBetActions);
        }