Example #1
0
 private void UpdateGameState(AgricolaGame game, IClientGameUpdate update)
 {
     foreach (var player in game.AgricolaPlayers)
     {
         if (!game.FamilyMode)
         {
             update.MyHand = player.Hand;
         }
         Clients.Client(player.Player.ConnectionId.ToString()).update(update);
     }
 }
Example #2
0
        public bool CompleteHarvest(AgricolaPlayer player, HarvestData data, out IClientGameUpdate update, out List <GameActionNotice> notices)
        {
            if (Mode == GameMode.Harvest && player.Harvesting && CanCompleteHarvest(player, data))
            {
                var conversions = data.FeedResources;
                var feedNotice  = new List <INoticePredicate>();
                int begAmount;
                player.FeedFamily(data.FeedResources, feedNotice, out begAmount);

                notices = new List <GameActionNotice>();
                ActionService.AssignAnimals(player, data.AnimalData, notices);

                UpdateScorecards();

                if (begAmount > 0)
                {
                    feedNotice.Add(new IdPredicate(begAmount));
                }

                notices.Add(new GameActionNotice(player.Name, NoticeVerb.Fed.ToString(), feedNotice));
                if (IsHarvestComplete())
                {
                    update = StartNextRound(notices);
                }
                else
                {
                    update = new PartialGameUpdate();
                    ((PartialGameUpdate)update).AddPlayer(player);
                }
                return(true);
            }

            update  = null;
            notices = null;
            return(false);
        }
Example #3
0
        public bool TakeAction(AgricolaPlayer player, Int32 actionId, GameActionData param, out IClientGameUpdate update, out List <GameActionNotice> notices)
        {
            if (Interrupt != null)
            {
                return(TakeInterruptAction(player, actionId, param, out update, out notices));
            }

            var action = roundActions[roundActionIndices[actionId]];

            if (action != null)
            {
                if (Mode == GameMode.Work &&
                    players[ActivePlayerIndex] == player)
                {
                    GameAction updatedAction;
                    if (action.TryExecute(player, param, out updatedAction))
                    {
                        UpdateScorecards();
                        if (!CheckForInterrupt())
                        {
                            if (NextActivePlayer(action.ResultingNotices))
                            {
                                update = BuildPartialUpdate(player, action);
                            }
                            else
                            {
                                update = StartNextRound(action.ResultingNotices);
                            }
                        }
                        else
                        {
                            update = BuildPartialUpdate(player, action);
                        }
                        notices = action.ResultingNotices;

                        return(true);
                    }
                }
            }
            update  = null;
            notices = null;
            return(false);
        }
Example #4
0
        private bool TakeInterruptAction(AgricolaPlayer player, Int32 actionId, GameActionData param, out IClientGameUpdate update, out List <GameActionNotice> notices)
        {
            if (player == Interrupt.Player)
            {
                var        interrupt = this.Interrupt;
                GameAction action    = interrupt;
                if (action != null)
                {
                    GameAction updatedAction;
                    if (action.TryExecute(player, param, out updatedAction))
                    {
                        this.Interrupt = null;
                        if (!CheckForInterrupt() && this.Mode == GameMode.Work)
                        {
                            if (NextActivePlayer(action.ResultingNotices))
                            {
                                update = BuildPartialUpdate(player, action);
                            }
                            else
                            {
                                update = StartNextRound(action.ResultingNotices);
                            }
                        }
                        else
                        {
                            update = BuildPartialUpdate(player, action);
                        }
                        notices = action.ResultingNotices;

                        return(true);
                    }
                }
            }
            update  = null;
            notices = null;
            return(false);
        }
Example #5
0
        /// <summary>
        /// Executes the requested anytime action id.
        /// </summary>
        /// <param name="player"></param>
        /// <param name="actionId"></param>
        /// <param name="cardId"></param>
        /// <param name="param"></param>
        /// <param name="update"></param>
        /// <param name="notices"></param>
        /// <returns></returns>
        public bool TakeAnytimeAction(AgricolaPlayer player, Int32 actionId, int cardId, GameActionData param, out IClientGameUpdate update, out List <GameActionNotice> notices)
        {
            if (player.OwnedCardIds.Contains(cardId))
            {
                var card = GetCard(cardId);
                if (card.AnytimeAction?.Id == actionId)
                {
                    var        action = card.AnytimeAction;
                    GameAction outAction;
                    if (action.TryExecute(player, param, out outAction))
                    {
                        UpdateScorecards();
                        notices = action.ResultingNotices;
                        CheckForInterrupt();

                        update = BuildPartialUpdate(player, action);
                        return(true);
                    }
                }
            }
            update  = null;
            notices = null;
            return(false);
        }