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); } }
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); }
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); }
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); }
/// <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); }