Ejemplo n.º 1
0
        public override bool CanExecute(AgricolaPlayer player, Data.GameActionData data)
        {
            if (!base.CanExecute(player, data))
            {
                return(false);
            }

            var fgData = (FamilyGrowthActionData)data;

            if (!Curator.CanGrowFamily(player, mode == FamilyGrowthActionMode.WithoutSpace))
            {
                return(false);
            }

            if (mode == FamilyGrowthActionMode.Improvement &&
                fgData.ImprovementData != null &&
                !ActionService.CanBuyImprovement(player, fgData.ImprovementData))
            {
                return(false);
            }

            if (player.FamilySize == 5)
            {
                return(false);
            }

            return(true);
        }
Ejemplo n.º 2
0
        public override bool CanExecute(AgricolaPlayer player, GameActionData data)
        {
            if (!base.CanExecute(player, data))
            {
                return(false);
            }

            return(ActionService.CanBuyImprovement(player, (ImprovementActionData)data));
        }
Ejemplo n.º 3
0
        public override bool CanExecute(AgricolaPlayer player, GameActionData data)
        {
            if (!base.CanExecute(player, data))
            {
                return(false);
            }

            if (!familyMode)
            {
                var improvementData = ((StartingPlayerActionData)data).ImprovementData;
                if (improvementData != null && !ActionService.CanBuyImprovement(player, improvementData))
                {
                    return(false);
                }
            }

            return(true);
        }
Ejemplo n.º 4
0
        public override bool CanExecute(AgricolaPlayer player, Data.GameActionData data)
        {
            if (!base.CanExecute(player, data))
            {
                return(false);
            }

            var renovationData = (RenovationActionData)data;

            ResourceCache[] renovationCosts;
            additionalCosts = null;

            if (!ActionService.CanRenovate(player, out renovationCosts))
            {
                return(false);
            }

            switch (mode)
            {
            case RenovationActionMode.Fences:
                if (!(renovationData.FenceData == null ||
                      renovationData.FenceData.Fences.Length == 0 ||
                      ActionService.CanBuildFences(player, Id, renovationData.FenceData, out this.pastures, out additionalCosts)))
                {
                    return(false);
                }
                break;

            case RenovationActionMode.Improvement:
                if (!(renovationData.ImprovementData == null ||
                      ActionService.CanBuyImprovement(player, renovationData.ImprovementData, out additionalCosts)))
                {
                    return(false);
                }
                break;
            }

            var totalCosts = new Dictionary <Resource, ResourceCache>();

            if (renovationCosts != null)
            {
                foreach (var r in renovationCosts)
                {
                    totalCosts[r.Type] = r;
                }
            }

            if (additionalCosts != null)
            {
                foreach (var cost in additionalCosts)
                {
                    if (totalCosts.ContainsKey(cost.Type))
                    {
                        totalCosts[cost.Type] = totalCosts[cost.Type].updateCount(cost.Count);
                    }
                    else
                    {
                        totalCosts[cost.Type] = cost;
                    }
                }
            }

            return(Curator.CanAfford(player, totalCosts.Values.ToArray()));
        }