コード例 #1
0
        public bool IsChampionAvailable(SmartEntity building)
        {
            BuildingTypeVO buildingType = building.BuildingComp.BuildingType;
            TroopTypeVO    troopTypeVO  = this.FindChampionTypeIfPlatform(buildingType);

            return(troopTypeVO != null && this.PlayerHasChampion(troopTypeVO));
        }
コード例 #2
0
        public void UpdateBuildingHighlightForPerks(Entity building)
        {
            if (building == null)
            {
                return;
            }
            bool flag  = ContractUtils.IsBuildingUpgrading(building);
            bool flag2 = ContractUtils.IsBuildingConstructing(building);

            if (flag2 | flag)
            {
                return;
            }
            PerkManager       perkManager  = Service.Get <PerkManager>();
            IState            currentState = Service.Get <GameStateMachine>().CurrentState;
            BuildingComponent buildingComp = ((SmartEntity)building).BuildingComp;

            if ((currentState is ApplicationLoadState || currentState is HomeState || currentState is EditBaseState || currentState is BaseLayoutToolState) && buildingComp != null)
            {
                BuildingTypeVO buildingType = buildingComp.BuildingType;
                if (perkManager.IsPerkAppliedToBuilding(buildingType))
                {
                    this.entityShaderSwapper.HighlightForPerk(building);
                    return;
                }
                bool flag3 = this.entityShaderSwapper.ResetToOriginal(building);
                if (flag3)
                {
                    Service.Get <EventManager>().SendEvent(EventId.ShaderResetOnEntity, building);
                }
            }
        }
コード例 #3
0
        public void StartClearingSelectedBuilding()
        {
            Entity         selectedBuilding = this.buildingSelector.SelectedBuilding;
            BuildingTypeVO buildingType     = selectedBuilding.Get <BuildingComponent>().BuildingType;

            if (buildingType.Type == BuildingType.Clearable)
            {
                int           credits       = buildingType.Credits;
                int           materials     = buildingType.Materials;
                int           contraband    = buildingType.Contraband;
                string        text          = StringUtils.ToLowerCaseUnderscoreSeperated(buildingType.Type.ToString());
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append(text);
                stringBuilder.Append("|");
                stringBuilder.Append(buildingType.BuildingID);
                stringBuilder.Append("|");
                stringBuilder.Append(buildingType.SizeX * buildingType.SizeY);
                if (PayMeScreen.ShowIfNotEnoughCurrency(credits, materials, contraband, stringBuilder.ToString(), new OnScreenModalResult(this.OnPayMeForCurrencyResult)))
                {
                    return;
                }
                if (PayMeScreen.ShowIfNoFreeDroids(new OnScreenModalResult(this.OnPayMeForDroidResult), selectedBuilding))
                {
                    return;
                }
                this.ConfirmClearingBuilding(selectedBuilding);
            }
        }
コード例 #4
0
        public Dictionary <BuildingTypeVO, int> GetBuildingsUnlockedBy(BuildingTypeVO reqBuilding)
        {
            Dictionary <BuildingTypeVO, int> dictionary             = new Dictionary <BuildingTypeVO, int>();
            StaticDataController             staticDataController   = Service.StaticDataController;
            BuildingUpgradeCatalog           buildingUpgradeCatalog = Service.BuildingUpgradeCatalog;

            foreach (BuildingTypeVO current in staticDataController.GetAll <BuildingTypeVO>())
            {
                if (current.BuildingRequirement == reqBuilding.Uid || current.BuildingRequirement2 == reqBuilding.Uid)
                {
                    BuildingTypeVO minLevel       = buildingUpgradeCatalog.GetMinLevel(current);
                    BuildingTypeVO buildingTypeVO = (current.Lvl <= minLevel.Lvl) ? null : buildingUpgradeCatalog.GetByLevel(current, current.Lvl - 1);
                    int            num            = (buildingTypeVO != null) ? buildingTypeVO.MaxQuantity : 0;
                    int            num2           = current.MaxQuantity - num;
                    if (num2 > 0)
                    {
                        if (dictionary.ContainsKey(minLevel))
                        {
                            Dictionary <BuildingTypeVO, int> dictionary2;
                            BuildingTypeVO key;
                            (dictionary2 = dictionary)[key = minLevel] = dictionary2[key] + num2;
                        }
                        else
                        {
                            dictionary.Add(minLevel, num2);
                        }
                    }
                }
            }
            return(dictionary);
        }
コード例 #5
0
        private NotificationObject CreateBuildingNotification(string productUid, int remainingTime, string buildingKey)
        {
            BuildingTypeVO buildingTypeVO      = Service.Get <IDataController>().Get <BuildingTypeVO>(productUid);
            string         buildingDisplayName = LangUtils.GetBuildingDisplayName(buildingTypeVO);

            return(this.CreateSupportNotification(productUid, remainingTime, buildingKey, "notif1", buildingDisplayName, buildingTypeVO.Lvl));
        }
コード例 #6
0
        public static int GetPerkAdjustSecondsTillFull(BuildingTypeVO buildingVO, float remainingAmountTillFull, uint currentTime, List <ActivatedPerkData> allPerks)
        {
            int   num  = 0;
            float num2 = ResourceGenerationPerkUtils.BaseCurrencyRate(buildingVO);

            if (allPerks != null && allPerks.Count > 0)
            {
                List <CurrencyPerkEffectDataTO> allCurrencyPerksEffectsActiveDuringTimeWindow = ResourceGenerationPerkUtils.GetAllCurrencyPerksEffectsActiveDuringTimeWindow(buildingVO.Currency, currentTime, currentTime, allPerks);
                allCurrencyPerksEffectsActiveDuringTimeWindow.Sort(new Comparison <CurrencyPerkEffectDataTO>(ResourceGenerationPerkUtils.EndTimeCompare));
                List <CurrencyPerkEffectDataTO> list = ResourceGenerationPerkUtils.CombineOverlappingPerkEffectsIntoFinalList(allCurrencyPerksEffectsActiveDuringTimeWindow, currentTime, 4294967295u);
                int count = list.Count;
                int num3  = 0;
                while (num3 < count && remainingAmountTillFull > 0f)
                {
                    CurrencyPerkEffectDataTO currencyPerkEffectDataTO = list[num3];
                    int   num4 = currencyPerkEffectDataTO.Duration;
                    float num5 = (1f + currencyPerkEffectDataTO.RateBonus) * num2;
                    float num6 = num5 * (float)num4;
                    if (num6 > remainingAmountTillFull)
                    {
                        num6 = remainingAmountTillFull;
                        num4 = Mathf.FloorToInt(num6 / num5);
                    }
                    remainingAmountTillFull -= num6;
                    num += num4;
                    num3++;
                }
            }
            if (remainingAmountTillFull > 0f)
            {
                num += Mathf.FloorToInt(remainingAmountTillFull / num2);
            }
            return(num);
        }
コード例 #7
0
        public static void ProcessResouceGenPerkEffectsIntoStorage(List <ActivatedPerkData> allPerks)
        {
            ISupportController           supportController = Service.Get <ISupportController>();
            NodeList <GeneratorViewNode> nodeList          = Service.Get <EntityController>().GetNodeList <GeneratorViewNode>();

            for (GeneratorViewNode generatorViewNode = nodeList.Head; generatorViewNode != null; generatorViewNode = generatorViewNode.Next)
            {
                BuildingComponent buildingComp = generatorViewNode.BuildingComp;
                Building          buildingTO   = buildingComp.BuildingTO;
                BuildingTypeVO    buildingType = buildingComp.BuildingType;
                Contract          contract     = supportController.FindCurrentContract(buildingComp.BuildingTO.Key);
                if (buildingType.Type == BuildingType.Resource && contract == null)
                {
                    uint time            = ServerTime.Time;
                    uint lastCollectTime = buildingTO.LastCollectTime;
                    buildingTO.LastCollectTime = time;
                    int perkAdjustedAccruedCurrency = ResourceGenerationPerkUtils.GetPerkAdjustedAccruedCurrency(buildingType, lastCollectTime, time, allPerks);
                    buildingTO.CurrentStorage += perkAdjustedAccruedCurrency;
                    if (buildingTO.CurrentStorage > buildingType.Storage)
                    {
                        buildingTO.CurrentStorage = buildingType.Storage;
                    }
                    buildingTO.AccruedCurrency = buildingTO.CurrentStorage;
                }
            }
        }
コード例 #8
0
        private void UpdateBuildings(FactionType newFaction)
        {
            StaticDataController  staticDataController = Service.StaticDataController;
            List <BuildingTypeVO> list = new List <BuildingTypeVO>();

            foreach (BuildingTypeVO current in staticDataController.GetAll <BuildingTypeVO>())
            {
                list.Add(current);
            }
            List <BuildingTypeVO> arg_69_0 = list;

            if (ChooseFactionScreen.< > f__mg$cache0 == null)
            {
                ChooseFactionScreen.< > f__mg$cache0 = new Comparison <BuildingTypeVO>(GameUtils.SortBuildingByUID);
            }
            arg_69_0.Sort(ChooseFactionScreen.< > f__mg$cache0);
            List <Building> buildings = Service.CurrentPlayer.Map.Buildings;

            for (int i = 0; i < buildings.Count; i++)
            {
                Building       building       = buildings[i];
                BuildingTypeVO buildingTypeVO = staticDataController.Get <BuildingTypeVO>(building.Uid);
                if (buildingTypeVO.Faction != FactionType.Neutral)
                {
                    building.Uid = GameUtils.GetEquivalentFromPreSortedList(list, buildingTypeVO, newFaction);
                }
            }
            list.Clear();
            list = null;
        }
コード例 #9
0
        private void RecalculateXP()
        {
            GamePlayer worldOwner                  = GameUtils.GetWorldOwner();
            Inventory  inventory                   = worldOwner.Inventory;
            int        num                         = -worldOwner.CurrentXPAmount;
            NodeList <BuildingNode> nodeList       = Service.Get <EntityController>().GetNodeList <BuildingNode>();
            IDataController         dataController = Service.Get <IDataController>();

            for (BuildingNode buildingNode = nodeList.Head; buildingNode != null; buildingNode = buildingNode.Next)
            {
                BuildingTypeVO buildingType = buildingNode.BuildingComp.BuildingType;
                if (!ContractUtils.IsBuildingConstructing(buildingNode.Entity))
                {
                    num += buildingType.Xp;
                }
            }
            foreach (TroopTypeVO current in dataController.GetAll <TroopTypeVO>())
            {
                if (current.PlayerFacing && worldOwner.UnlockedLevels.Troops.GetLevel(current.UpgradeGroup) == current.Lvl && worldOwner.Faction == current.Faction && this.unlockController.IsTroopUnlocked(worldOwner, current))
                {
                    num += current.Xp;
                }
            }
            foreach (SpecialAttackTypeVO current2 in dataController.GetAll <SpecialAttackTypeVO>())
            {
                if (current2.PlayerFacing && worldOwner.UnlockedLevels.Starships.GetLevel(current2.UpgradeGroup) == current2.Lvl && worldOwner.Faction == current2.Faction && this.unlockController.IsSpecialAttackUnlocked(worldOwner, current2))
                {
                    num += current2.Xp;
                }
            }
            inventory.ModifyXP(num);
        }
コード例 #10
0
        public static bool CanApplyEffect(PerkEffectVO perkEffectVO, BuildingTypeVO contractBuildingVO)
        {
            string       type         = perkEffectVO.Type;
            BuildingType perkBuilding = perkEffectVO.PerkBuilding;

            return(contractBuildingVO != null && (type == "contractCost" && perkBuilding == contractBuildingVO.Type));
        }
コード例 #11
0
        private void UpdateShieldRange(int sliderIndex)
        {
            ShieldController       shieldController       = Service.Get <ShieldController>();
            BuildingUpgradeCatalog buildingUpgradeCatalog = Service.Get <BuildingUpgradeCatalog>();
            BuildingTypeVO         maxLevel = buildingUpgradeCatalog.GetMaxLevel(this.buildingInfo.UpgradeGroup);
            int num  = shieldController.PointsToRange[this.buildingInfo.ShieldRangePoints];
            int num2 = shieldController.PointsToRange[maxLevel.ShieldRangePoints];

            this.sliders[sliderIndex].CurrentSlider.Value = ((num2 == 0) ? 0f : ((float)num / (float)num2));
            if (this.useUpgradeGroup)
            {
                BuildingTypeVO nextLevel = buildingUpgradeCatalog.GetNextLevel(this.buildingInfo);
                int            num3      = shieldController.PointsToRange[nextLevel.ShieldRangePoints];
                this.sliders[sliderIndex].CurrentLabel.Text = this.lang.ThousandsSeparated(num);
                this.sliders[sliderIndex].NextLabel.Text    = this.lang.Get("PLUS", new object[]
                {
                    this.lang.ThousandsSeparated(num3 - num)
                });
                this.sliders[sliderIndex].NextSlider.Value = ((num2 == 0) ? 0f : ((float)num3 / (float)num2));
                return;
            }
            this.sliders[sliderIndex].CurrentLabel.Text = this.lang.Get("FRACTION", new object[]
            {
                this.lang.ThousandsSeparated(num),
                this.lang.ThousandsSeparated(num2)
            });
        }
コード例 #12
0
        private bool IsBuildingValid(BuildingTypeVO vo)
        {
            if (vo.Type == BuildingType.Clearable)
            {
                return(false);
            }
            if (this.any)
            {
                return(true);
            }
            if (vo.Lvl >= this.level)
            {
                switch (this.matchType)
                {
                case ConditionMatchType.Uid:
                    return(vo.Uid == this.buildingId);

                case ConditionMatchType.Id:
                    return(vo.UpgradeGroup == this.buildingId);

                case ConditionMatchType.Type:
                    return(vo.Type == StringUtils.ParseEnum <BuildingType>(this.buildingId));
                }
            }
            return(false);
        }
コード例 #13
0
        public void StartChampionRepair(SmartEntity building)
        {
            BuildingTypeVO buildingType = building.BuildingComp.BuildingType;

            this.repairChampionType = this.FindChampionTypeIfPlatform(buildingType);
            if (this.repairChampionType == null)
            {
                return;
            }
            int credits    = this.repairChampionType.Credits;
            int materials  = this.repairChampionType.Materials;
            int contraband = this.repairChampionType.Contraband;

            if (credits != 0 || materials != 0 || contraband != 0)
            {
                string purchaseContext = string.Format("{0}|{1}|{2}|{3}", new object[]
                {
                    StringUtils.ToLowerCaseUnderscoreSeperated(this.repairChampionType.Type.ToString()),
                    this.repairChampionType.TroopID,
                    this.repairChampionType.Lvl,
                    "repair"
                });
                if (PayMeScreen.ShowIfNotEnoughCurrency(credits, materials, contraband, purchaseContext, new OnScreenModalResult(this.OnPayMeForCurrencyResult)))
                {
                    return;
                }
            }
            if (PayMeScreen.ShowIfNoFreeDroids(new OnScreenModalResult(this.OnPayMeForDroidResult), null))
            {
                return;
            }
            this.ConfirmRepair();
        }
コード例 #14
0
        private void UpgradeChampionToMatchPlatform(SmartEntity building)
        {
            BuildingTypeVO buildingType = building.BuildingComp.BuildingType;
            TroopTypeVO    troopTypeVO  = this.FindChampionTypeIfPlatform(buildingType);

            if (troopTypeVO == null)
            {
                return;
            }
            BuildingUpgradeCatalog buildingUpgradeCatalog = Service.Get <BuildingUpgradeCatalog>();
            BuildingTypeVO         nextLevel    = buildingUpgradeCatalog.GetNextLevel(buildingType);
            TroopTypeVO            troopTypeVO2 = this.FindChampionTypeIfPlatform(nextLevel);

            if (troopTypeVO2 == null)
            {
                return;
            }
            this.AddChampionToInventoryIfAlive(building, false);
            CurrentPlayer currentPlayer = Service.Get <CurrentPlayer>();

            UnlockedLevelData.UpgradeTroopsOrStarshipsInventory(currentPlayer.Inventory.Champion, false, troopTypeVO2.UpgradeGroup, troopTypeVO2.Uid);
            this.DestroyChampionEntity(troopTypeVO);
            if (Service.Get <GameStateMachine>().CurrentState is HomeState)
            {
                this.CreateChampionEntity(troopTypeVO2, building);
            }
        }
コード例 #15
0
        public static int GetBuildingContractTotalTime(string buildingContractUid, DeliveryType type)
        {
            if (type == DeliveryType.UpgradeTroop)
            {
                TroopTypeVO optional = Service.Get <IDataController>().GetOptional <TroopTypeVO>(buildingContractUid);
                return(optional.UpgradeTime);
            }
            if (type == DeliveryType.UpgradeStarship)
            {
                SpecialAttackTypeVO optional2 = Service.Get <IDataController>().GetOptional <SpecialAttackTypeVO>(buildingContractUid);
                return(optional2.UpgradeTime);
            }
            if (type == DeliveryType.UpgradeEquipment)
            {
                EquipmentVO optional3 = Service.Get <IDataController>().GetOptional <EquipmentVO>(buildingContractUid);
                return(optional3.UpgradeTime);
            }
            BuildingTypeVO buildingTypeVO = Service.Get <IDataController>().Get <BuildingTypeVO>(buildingContractUid);

            switch (type)
            {
            case DeliveryType.Building:
            case DeliveryType.UpgradeBuilding:
            case DeliveryType.ClearClearable:
                return(buildingTypeVO.Time);

            case DeliveryType.SwapBuilding:
                return(buildingTypeVO.SwapTime);
            }
            return(0);
        }
コード例 #16
0
        private void SetupItemGrid()
        {
            this.itemGrid = base.GetElement <UXGrid>("UnlockItemsGrid");
            this.itemGrid.SetTemplateItem("UnlockItemsTemplate");
            BuildingLookupController         buildingLookupController = Service.BuildingLookupController;
            Dictionary <BuildingTypeVO, int> buildingsUnlockedBy      = buildingLookupController.GetBuildingsUnlockedBy(this.headQuarter);
            int num = 0;

            foreach (KeyValuePair <BuildingTypeVO, int> current in buildingsUnlockedBy)
            {
                BuildingTypeVO key   = current.Key;
                int            value = current.Value;
                if (key.Type == BuildingType.Turret && key.BuildingRequirement != this.headQuarter.Uid)
                {
                    if (num == 0)
                    {
                        num = value;
                    }
                }
                else
                {
                    string          uid             = key.Uid;
                    UXElement       item            = this.itemGrid.CloneTemplateItem(uid);
                    UXSprite        subElement      = this.itemGrid.GetSubElement <UXSprite>(uid, "SpriteItemImage");
                    ProjectorConfig projectorConfig = ProjectorUtils.GenerateBuildingConfig(key, subElement);
                    projectorConfig.AnimPreference = AnimationPreference.AnimationPreferred;
                    ProjectorUtils.GenerateProjector(projectorConfig);
                    UXLabel subElement2 = this.itemGrid.GetSubElement <UXLabel>(uid, "LabelUnlockCount");
                    if (key.Type == BuildingType.Turret)
                    {
                        subElement2.Visible = false;
                    }
                    else
                    {
                        subElement2.Text = this.lang.Get("TROOP_MULTIPLIER", new object[]
                        {
                            value
                        });
                    }
                    this.itemGrid.AddItem(item, key.Order);
                }
            }
            UXElement item2       = this.itemGrid.CloneTemplateItem("TURRETS");
            UXSprite  subElement3 = this.itemGrid.GetSubElement <UXSprite>("TURRETS", "SpriteItemImage");

            subElement3.Visible = false;
            UXLabel subElement4 = this.itemGrid.GetSubElement <UXLabel>("TURRETS", "LabelUnlockCount");

            subElement4.Visible = false;
            UXLabel subElement5 = this.itemGrid.GetSubElement <UXLabel>("TURRETS", "LabelTurrets");

            subElement5.Visible = true;
            subElement5.Text    = this.lang.Get("HQ_UPGRADE_TURRETS_UNLOCKED", new object[]
            {
                num
            });
            this.itemGrid.AddItem(item2, 99999999);
            this.itemGrid.RepositionItems();
            this.itemGrid.Scroll((this.itemGrid.Count <= 7) ? 0.5f : 0f);
        }
コード例 #17
0
 public NavigationCenterUpgradeScreen(SmartEntity selectedBuilding, BuildingTypeVO buildingTypeVO, OnScreenModalResult callback) : base(selectedBuilding)
 {
     this.buildingInfo    = buildingTypeVO;
     this.callback        = callback;
     this.tutorialMode    = true;
     this.useUpgradeGroup = false;
 }
コード例 #18
0
        private bool CanPlaceAllRewardBuildings(string[] rewardBuildings)
        {
            bool result = true;
            BuildingController buildingController = Service.Get <BuildingController>();
            int i   = 0;
            int num = rewardBuildings.Length;

            while (i < num)
            {
                string[] array = rewardBuildings[i].Split(new char[]
                {
                    ':'
                });
                int            num2     = Convert.ToInt32(array[1], CultureInfo.InvariantCulture);
                string         uid      = array[0];
                BuildingTypeVO optional = Service.Get <IDataController>().GetOptional <BuildingTypeVO>(uid);
                if (optional != null)
                {
                    for (int j = 0; j < num2; j++)
                    {
                        if (!buildingController.FoundFirstEmptySpaceFor(optional))
                        {
                            result = false;
                            break;
                        }
                    }
                }
                i++;
            }
            return(result);
        }
コード例 #19
0
        public static int GetPerkAdjustedAccruedCurrency(BuildingTypeVO buildingVO, uint startTime, uint endTime, List <ActivatedPerkData> allPerks)
        {
            int   num  = 0;
            int   num2 = (int)(endTime - startTime);
            float num3 = ResourceGenerationPerkUtils.BaseCurrencyRate(buildingVO);

            if (allPerks != null && allPerks.Count > 0)
            {
                List <CurrencyPerkEffectDataTO> allCurrencyPerksEffectsActiveDuringTimeWindow = ResourceGenerationPerkUtils.GetAllCurrencyPerksEffectsActiveDuringTimeWindow(buildingVO.Currency, startTime, endTime, allPerks);
                allCurrencyPerksEffectsActiveDuringTimeWindow.Sort(new Comparison <CurrencyPerkEffectDataTO>(ResourceGenerationPerkUtils.StartTimeCompare));
                List <CurrencyPerkEffectDataTO> list = ResourceGenerationPerkUtils.CombineOverlappingPerkEffectsIntoFinalList(allCurrencyPerksEffectsActiveDuringTimeWindow, startTime, endTime);
                int count = list.Count;
                int num4  = 0;
                while (num4 < count && num2 > 0)
                {
                    CurrencyPerkEffectDataTO currencyPerkEffectDataTO = list[num4];
                    int num5 = currencyPerkEffectDataTO.Duration;
                    if (num5 > num2)
                    {
                        num5 = num2;
                    }
                    float num6 = (1f + currencyPerkEffectDataTO.RateBonus) * num3;
                    num  += Mathf.FloorToInt(num6 * (float)num5);
                    num2 -= num5;
                    num4++;
                }
            }
            if (num2 > 0)
            {
                num += Mathf.FloorToInt(num3 * (float)num2);
            }
            return(num);
        }
コード例 #20
0
        private bool IsBuildingValid(BuildingComponent component)
        {
            BuildingTypeVO buildingType = component.BuildingType;

            if (this.any && GameUtils.IsBuildingTypeValidForBattleConditions(component.BuildingType.Type))
            {
                return(true);
            }
            if (buildingType.Lvl >= this.level)
            {
                ConditionMatchType conditionMatchType = this.matchType;
                if (conditionMatchType == ConditionMatchType.Uid)
                {
                    return(buildingType.Uid == this.buildingId);
                }
                if (conditionMatchType == ConditionMatchType.Id)
                {
                    return(buildingType.UpgradeGroup == this.buildingId);
                }
                if (conditionMatchType == ConditionMatchType.Type)
                {
                    return(buildingType.Type == StringUtils.ParseEnum <BuildingType>(this.buildingId));
                }
            }
            return(false);
        }
コード例 #21
0
        public int GetBuildingMaxPurchaseQuantity(BuildingTypeVO building, int haveReqBuildingLvl)
        {
            BuildingTypeVO buildingTypeVO = this.GetBuildingConstructionRequirement(building);

            if (buildingTypeVO == null)
            {
                return(building.MaxQuantity);
            }
            if (haveReqBuildingLvl >= buildingTypeVO.Lvl || this.HasConstructedBuilding(buildingTypeVO))
            {
                BuildingUpgradeCatalog buildingUpgradeCatalog = Service.BuildingUpgradeCatalog;
                int lvl  = buildingUpgradeCatalog.GetMinLevel(building.UpgradeGroup).Lvl;
                int lvl2 = buildingUpgradeCatalog.GetMaxLevel(building.UpgradeGroup).Lvl;
                for (int i = lvl2; i > lvl; i--)
                {
                    BuildingTypeVO byLevel = buildingUpgradeCatalog.GetByLevel(building.UpgradeGroup, i);
                    if (byLevel != null)
                    {
                        buildingTypeVO = this.GetRequiredBuilding(byLevel.BuildingRequirement);
                        if (buildingTypeVO == null || haveReqBuildingLvl >= buildingTypeVO.Lvl || this.HasConstructedBuilding(buildingTypeVO))
                        {
                            return(byLevel.MaxQuantity);
                        }
                    }
                }
                BuildingTypeVO minLevel = buildingUpgradeCatalog.GetMinLevel(building);
                return(minLevel.MaxQuantity);
            }
            if (Service.UnlockController.HasUnlockedBuildingByReward(building))
            {
                return(1);
            }
            return(0);
        }
コード例 #22
0
        private BoardCell <Entity> CanConnect(Entity wall)
        {
            if (wall == null)
            {
                return(null);
            }
            BuildingComponent buildingComponent = wall.Get <BuildingComponent>();

            if (buildingComponent == null)
            {
                return(null);
            }
            BuildingTypeVO buildingType = buildingComponent.BuildingType;

            if (buildingType == null)
            {
                return(null);
            }
            if (buildingType.Connectors == null)
            {
                return(null);
            }
            BoardItemComponent boardItemComponent = wall.Get <BoardItemComponent>();

            if (boardItemComponent == null)
            {
                return(null);
            }
            return(boardItemComponent.BoardItem.CurrentCell);
        }
コード例 #23
0
        private BuildingTypeVO GetBuildingConstructionRequirement(BuildingTypeVO building)
        {
            BuildingUpgradeCatalog buildingUpgradeCatalog = Service.BuildingUpgradeCatalog;
            BuildingTypeVO         minLevel = buildingUpgradeCatalog.GetMinLevel(building);

            return(this.GetRequiredBuilding(minLevel.BuildingRequirement));
        }
コード例 #24
0
    public void UpdateFillStateFX(Entity entity, BuildingTypeVO buildingVO, float currentFullnessPercent, float previousFullnessPercent)
    {
        float collectNotificationPercentage = this.GetCollectNotificationPercentage(buildingVO);

        if (Service.PostBattleRepairController.IsEntityInRepair(entity))
        {
            if (previousFullnessPercent >= collectNotificationPercentage)
            {
                Service.FXManager.RemoveAttachedFXFromEntity(entity, "fillState");
            }
            return;
        }
        if (currentFullnessPercent == previousFullnessPercent)
        {
            return;
        }
        if (currentFullnessPercent >= collectNotificationPercentage && previousFullnessPercent < collectNotificationPercentage)
        {
            Service.FXManager.CreateAndAttachFXToEntity(entity, buildingVO.FillStateAssetName, "fillState", new FXManager.AttachedFXLoadedCallback(this.OnFillStateLoaded), currentFullnessPercent, false, Vector3.zero);
        }
        else if (currentFullnessPercent >= collectNotificationPercentage)
        {
            GameObject attachedGameObject = entity.Get <GameObjectViewComponent>().GetAttachedGameObject("fillState");
            if (attachedGameObject != null)
            {
                this.UpdateFillStateMeshes(attachedGameObject, entity, currentFullnessPercent);
            }
        }
        else if (currentFullnessPercent < collectNotificationPercentage && previousFullnessPercent >= collectNotificationPercentage)
        {
            Service.FXManager.RemoveAttachedFXFromEntity(entity, "fillState");
        }
    }
コード例 #25
0
        public BuildingController()
        {
            Service.Set <BuildingController>(this);
            this.buildingSelector       = new BuildingSelector();
            this.buildingMover          = new BuildingMover(this.buildingSelector);
            this.entityShaderSwapper    = new EntityShaderSwapper();
            this.purchasingBuilding     = false;
            this.purchasingStampable    = 0;
            this.purchasingBuildingType = null;
            this.UnstashStampingEnabled = false;
            this.stampingCellsX         = new int[2];
            this.stampingCellsZ         = new int[2];
            this.ResetStampLocations();
            this.edgeRotations = new int[4, 2, 2];
            int num  = 1;
            int num2 = 0;

            for (int i = 0; i < 4; i++)
            {
                this.edgeRotations[i, 0, 0] = num;
                this.edgeRotations[i, 0, 1] = -num2;
                this.edgeRotations[i, 1, 0] = num2;
                this.edgeRotations[i, 1, 1] = num;
                int num3 = num;
                num  = -num2;
                num2 = num3;
            }
            EventManager eventManager = Service.Get <EventManager>();

            eventManager.RegisterObserver(this, EventId.BuildingLevelUpgraded, EventPriority.Default);
            eventManager.RegisterObserver(this, EventId.BuildingSwapped, EventPriority.Default);
            eventManager.RegisterObserver(this, EventId.ClearableCleared, EventPriority.Default);
            eventManager.RegisterObserver(this, EventId.ContractCompletedForStoryAction, EventPriority.Default);
            eventManager.RegisterObserver(this, EventId.ContractCompleted, EventPriority.Default);
        }
コード例 #26
0
        public List <ActivatedPerkData> GetPerksAppliedToBuilding(BuildingTypeVO vo)
        {
            List <ActivatedPerkData> list = new List <ActivatedPerkData>();
            StaticDataController     staticDataController = Service.StaticDataController;
            List <ActivatedPerkData> playerActivatedPerks = this.GetPlayerActivatedPerks();
            int i     = 0;
            int count = playerActivatedPerks.Count;

            while (i < count)
            {
                ActivatedPerkData activatedPerkData = playerActivatedPerks[i];
                PerkVO            perkVO            = staticDataController.Get <PerkVO>(activatedPerkData.PerkId);
                if (activatedPerkData.EndTime > ServerTime.Time)
                {
                    int j   = 0;
                    int num = perkVO.PerkEffects.Length;
                    while (j < num)
                    {
                        PerkEffectVO perkEffectVO = staticDataController.Get <PerkEffectVO>(perkVO.PerkEffects[j]);
                        bool         flag         = this.IsPerkEffectAppliedToBuilding(perkEffectVO, vo);
                        if (flag)
                        {
                            list.Add(activatedPerkData);
                            break;
                        }
                        j++;
                    }
                }
                i++;
            }
            return(list);
        }
コード例 #27
0
        public bool isOverlapping(Building thisBuilding, BuildingTypeVO buildingType, int x, int z)
        {
            BuildingTypeVO optional = Service.Get <IDataController>().GetOptional <BuildingTypeVO>(thisBuilding.Uid);
            int            num      = optional.SizeX;
            int            num2     = optional.SizeY;
            int            num3     = buildingType.SizeX;
            int            num4     = buildingType.SizeY;
            BuildingType   type     = optional.Type;
            BuildingType   type2    = buildingType.Type;
            bool           flag     = type == BuildingType.Wall || type == BuildingType.Trap;
            bool           flag2    = type2 == BuildingType.Wall || type2 == BuildingType.Trap;

            if (!(flag & flag2))
            {
                if (num == 1 && num2 == 1)
                {
                    num++;
                    num2++;
                }
                if (num3 == 1 && num4 == 1)
                {
                    num3++;
                    num4++;
                }
            }
            return(thisBuilding.X < x + num3 && thisBuilding.X + num > x && thisBuilding.Z < z + num4 && thisBuilding.Z + num2 > z);
        }
コード例 #28
0
        public static DeliveryType GetDeliveryTypeForTroopContract(BuildingTypeVO building)
        {
            BuildingType type = building.Type;

            switch (type)
            {
            case BuildingType.Barracks:
                return(DeliveryType.Infantry);

            case BuildingType.Factory:
                return(DeliveryType.Vehicle);

            case BuildingType.FleetCommand:
                return(DeliveryType.Starship);

            case BuildingType.HeroMobilizer:
                return(DeliveryType.Hero);

            case BuildingType.ChampionPlatform:
                return(DeliveryType.Champion);

            default:
                if (type != BuildingType.Cantina)
                {
                    return(DeliveryType.Invalid);
                }
                return(DeliveryType.Mercenary);
            }
        }
コード例 #29
0
        private void FinishContract(object result, object cookie)
        {
            if (this.activeContract == null || result == null)
            {
                return;
            }
            int crystalCostToFinishContract = ContractUtils.GetCrystalCostToFinishContract(this.activeContract);

            if (!GameUtils.SpendCrystals(crystalCostToFinishContract))
            {
                return;
            }
            Service.ISupportController.BuyOutCurrentBuildingContract(this.selectedBuilding, true);
            BuildingComponent buildingComp = this.selectedBuilding.BuildingComp;

            if (buildingComp != null)
            {
                BuildingTypeVO buildingType = buildingComp.BuildingType;
                if (buildingType != null)
                {
                    int    currencyAmount = -crystalCostToFinishContract;
                    string itemType       = StringUtils.ToLowerCaseUnderscoreSeperated(buildingType.Type.ToString());
                    string buildingID     = buildingType.BuildingID;
                    int    itemCount      = 1;
                    string type           = "speed_up_upgrade";
                    string subType        = "equipment";
                    Service.DMOAnalyticsController.LogInAppCurrencyAction(currencyAmount, itemType, buildingID, itemCount, type, subType);
                }
            }
            this.CloseFromResearchScreen();
        }
コード例 #30
0
        private SupportViewComponentState GetBubbleViewComponentStateBasedOnBuilding(SmartEntity building)
        {
            SupportViewComponentState result = SupportViewComponentState.Bubble;

            if (building == null)
            {
                return(result);
            }
            BuildingComponent buildingComp = building.BuildingComp;

            if (buildingComp == null)
            {
                return(result);
            }
            BuildingTypeVO buildingType = buildingComp.BuildingType;

            if (buildingType.Type == BuildingType.HQ)
            {
                return(SupportViewComponentState.BubbleHQ);
            }
            if (buildingType.Type == BuildingType.Armory && this.ShouldBadgeArmoryBuilding())
            {
                result = SupportViewComponentState.BubbleArmoryUpgrade;
            }
            if (buildingType.Type == BuildingType.TroopResearch && this.ShouldBadgeResearchBuilding())
            {
                result = SupportViewComponentState.BubbleShardUpgrade;
            }
            return(result);
        }