Esempio n. 1
0
 public FocusBarUpgradeResponse(bool hasUpgraded, FocusBarModel focusBarModel, FocusCardModel oldTech, FocusCardModel newTech)
 {
     HasUpgraded      = hasUpgraded;
     UpgradedFocusBar = focusBarModel;
     OldTechnology    = oldTech;
     NewTechnology    = newTech;
 }
        private FocusCardModel GetFocusCardToUpgrade(FocusBarModel activeFocusBar)
        {
            var lowestTechLevel      = activeFocusBar.ActiveFocusSlots.Min(x => x.Value.Level);
            var lowestTechFocusCards = activeFocusBar.ActiveFocusSlots.Where(x => x.Value.Level == lowestTechLevel).ToList();
            var focusCardToUpgrade   = lowestTechFocusCards.ElementAt(_randomService.Next(lowestTechFocusCards.Count - 1));

            return(focusCardToUpgrade.Value);
        }
Esempio n. 3
0
        public FocusBarUpgradeResponse ResolveFreeTechnologyUpdate(FocusBarModel activeFocusBar)
        {
            // DBr: this wrapper method feels forced : rational was to prevent a new dependency going into the consumer
            //      as the consumer would already have a dependency on this guy (which already has a dependency on our focusbar guy)
            //      smells a little bit tho - perhaps we strip this method out and let the consumer have an additonal dependency

            if (!activeFocusBar.ActiveFocusSlots.All(x => x.Value.Level == FocusLevel.Lvl4))
            {
                return(_focusBarTechnologyUpgradeResolver.RegenerateFocusBarLowestTechnologyLevelUpgrade(activeFocusBar));
            }
            return(new FocusBarUpgradeResponse(false, activeFocusBar, null, null));
        }
        public FocusBarModel ResetFocusBarForNextMove(FocusBarModel activeFocusBar)
        {
            // shift all cards up by 1 with slot resolved this turn being reset to first slot

            var tmpSlot2    = activeFocusBar.FocusSlot1;
            var newFocusBar = new Dictionary <int, FocusCardModel>();

            newFocusBar.Add(0, activeFocusBar.FocusSlot5);
            newFocusBar.Add(4, activeFocusBar.FocusSlot4);
            newFocusBar.Add(3, activeFocusBar.FocusSlot3);
            newFocusBar.Add(2, activeFocusBar.FocusSlot2);
            newFocusBar.Add(1, tmpSlot2);
            return(new FocusBarModel(new ReadOnlyDictionary <int, FocusCardModel>(newFocusBar)));
        }
        public FocusType ResolveSmallestTokenPile(FocusBarModel activeFocusBar, Dictionary <FocusType, int> tradeTokenPiles)
        {
            var smallestPileValue = 0;
            var smallestPileType  = FocusType.Culture;

            foreach (var x in activeFocusBar.ActiveFocusSlots)
            {
                var tokenpile = tradeTokenPiles[x.Value.Type];
                if (tokenpile <= smallestPileValue)
                {
                    smallestPileType = x.Value.Type;
                }
            }
            return(smallestPileType);
        }
        public FocusBarModel ResetFocusBarForSubMove(FocusBarModel activeFocusBar, FocusType focusType)
        {
            var slotIndexToReset = activeFocusBar.ActiveFocusSlots.First(x => x.Value.Type == focusType).Key;

            if (slotIndexToReset == 0)
            {
                return(activeFocusBar);
            }

            var newFocusBar = new Dictionary <int, FocusCardModel>();

            if (slotIndexToReset == 1)
            {
                var tmpSlot2 = activeFocusBar.FocusSlot1;
                newFocusBar.Add(0, activeFocusBar.ActiveFocusSlots[slotIndexToReset]);
                newFocusBar.Add(1, tmpSlot2);
                newFocusBar.Add(2, activeFocusBar.ActiveFocusSlots[2]);
                newFocusBar.Add(3, activeFocusBar.ActiveFocusSlots[3]);
                newFocusBar.Add(4, activeFocusBar.ActiveFocusSlots[4]);
            }
            else
            {
                var tmpSlot2 = activeFocusBar.FocusSlot1;
                newFocusBar.Add(0, activeFocusBar.ActiveFocusSlots[slotIndexToReset]);

                var slotPointer = 0;
                for (int i = slotIndexToReset - 1; i > 1; i--)
                {
                    newFocusBar.Add(i, activeFocusBar.ActiveFocusSlots[i - 1]);
                    slotPointer++;
                }
                newFocusBar.Add(1, tmpSlot2);

                for (int i = slotIndexToReset; i < 5; i++)
                {
                    newFocusBar.Add(i, activeFocusBar.ActiveFocusSlots[i]);
                    slotPointer++;
                }

                // TODO: we need to add the unaffected cards after slot index
            }
            return(new FocusBarModel(new ReadOnlyDictionary <int, FocusCardModel>(newFocusBar)));
        }
        private FocusBarUpgradeResponse CreateUpgradedFocusBar(FocusBarModel activeFocusBar, FocusCardModel focusCardToUpgrade, FocusCardModel upgradeFocusCard)
        {
            Dictionary <int, FocusCardModel> newFocusBarCards = new Dictionary <int, FocusCardModel>();

            foreach (var fs in activeFocusBar.ActiveFocusSlots)
            {
                if (fs.Value.Name == focusCardToUpgrade.Name)
                {
                    newFocusBarCards.Add(fs.Key, upgradeFocusCard);
                }
                else
                {
                    newFocusBarCards.Add(fs.Key, fs.Value);
                }
            }
            var upgradedFocusBar = new FocusBarModel(new ReadOnlyDictionary <int, FocusCardModel>(newFocusBarCards));

            return(new FocusBarUpgradeResponse(true, upgradedFocusBar, focusCardToUpgrade, upgradeFocusCard));
        }
Esempio n. 8
0
        public TechnologyUpgradeResponse ResolveTechnologyLevelUpdates(int currentTechLevel, int techLevelIncrement, FocusBarModel activeFocusBar)
        {
            var encounteredBreakthroughs = new List <BreakthroughModel>();
            var breakThroughResponse     = _technologyBreakthroughResolver.ResolveTechnologyBreakthrough(currentTechLevel, techLevelIncrement);

            if (breakThroughResponse != null) // TODO: do we have better than null check here to define if no breakthrough??
            {
                foreach (var breakthroughLevel in breakThroughResponse)
                {
                    if (!activeFocusBar.ActiveFocusSlots.All(x => x.Value.Level == FocusLevel.Lvl4))
                    {
                        var techUpgradeResponse = _focusBarTechnologyUpgradeResolver.RegenerateFocusBarLowestTechnologyLevelUpgrade(activeFocusBar, breakthroughLevel);
                        activeFocusBar = techUpgradeResponse.UpgradedFocusBar;
                        encounteredBreakthroughs.Add(new BreakthroughModel(techUpgradeResponse.OldTechnology, techUpgradeResponse.NewTechnology));
                    }
                }
            }
            var newTechLevelPoints = currentTechLevel + techLevelIncrement;

            return(new TechnologyUpgradeResponse(newTechLevelPoints, activeFocusBar, encounteredBreakthroughs));
        }
 public TechnologyUpgradeResponse(int newTechnologyLevel, FocusBarModel focusBarModel, IReadOnlyCollection <BreakthroughModel> encounteredBreakthroughs)
 {
     NewTechnologyLevelPoints = newTechnologyLevel;
     UpgradedFocusBar         = focusBarModel;
     EncounteredBreakthroughs = encounteredBreakthroughs;
 }
        public FocusBarUpgradeResponse RegenerateFocusBarSpecificTechnologyLevelUpgrade(FocusBarModel activeFocusBar, FocusType focusType)
        {
            var focusCardToUpgrade = activeFocusBar.ActiveFocusSlots.First(x => x.Value.Type == focusType).Value;
            var upgradeFocusCard   = GetUpgradeFocusCard(focusCardToUpgrade, focusCardToUpgrade.Level + 1);

            return(CreateUpgradedFocusBar(activeFocusBar, focusCardToUpgrade, upgradeFocusCard));
        }
        public FocusBarUpgradeResponse RegenerateFocusBarLowestTechnologyLevelUpgrade(FocusBarModel activeFocusBar)
        {
            var focusCardToUpgrade = GetFocusCardToUpgrade(activeFocusBar);
            var targetLevel        = DetermineNextTechnologyLevelForFocusCard(focusCardToUpgrade);

            var upgradeFocusCard = GetUpgradeFocusCard(focusCardToUpgrade, targetLevel);

            return(CreateUpgradedFocusBar(activeFocusBar, focusCardToUpgrade, upgradeFocusCard));
        }
        public FocusBarUpgradeResponse RegenerateFocusBarLowestTechnologyLevelUpgrade(FocusBarModel activeFocusBar, FocusLevel levelBarrierHit)
        {
            var focusCardToUpgrade = GetFocusCardToUpgrade(activeFocusBar);
            var upgradeFocusCard   = GetUpgradeFocusCard(focusCardToUpgrade, levelBarrierHit);

            return(CreateUpgradedFocusBar(activeFocusBar, focusCardToUpgrade, upgradeFocusCard));
        }