private bool ContainsAbilityReference(List <UnitAbilityReference> ListToCheck, UnitAbilityReference AbilityRef) { foreach (UnitAbilityReference unitAbilityReference in ListToCheck) { if (unitAbilityReference.Name == AbilityRef.Name && unitAbilityReference.Level == AbilityRef.Level) { return(true); } if (unitAbilityReference.Name == AbilityRef.Name && unitAbilityReference.Level == 0 && AbilityRef.Level == -1) { return(true); } } return(false); }
protected override IEnumerator OnShow(params object[] parameters) { if (this.Background != null) { this.Background.TintColor = this.NonEmbarkedBackgroundColor; } this.abilityReferences.Clear(); if (this.context is IUnitAbilityController) { UnitAbilityReference[] abilities = (this.context as IUnitAbilityController).GetAbilities(); if (abilities != null) { UnitAbilityReference[] array = abilities; for (int i = 0; i < array.Length; i++) { UnitAbilityReference ability = array[i]; if (this.abilityReferences.Any((UnitAbilityReference match) => match.Name == ability.Name)) { int index = this.abilityReferences.FindIndex((UnitAbilityReference match) => match.Name == ability.Name); if (ability.Level > this.abilityReferences[index].Level) { this.abilityReferences[index] = ability; } } else { this.abilityReferences.Add(ability); } } } } this.abilityReferences.RemoveAll((UnitAbilityReference match) => !this.unitAbilityDatatable.ContainsKey(match.Name) || this.unitAbilityDatatable.GetValue(match.Name).Hidden); if (this.abilityReferences.Count > this.smallPrefabThreshold && this.abilityReferences.Count <= this.minimalPrefabThreshold && this.ResizeSelf) { if (this.previousSize != PanelFeatureCapacities.CapacityPrefabSizes.Small) { this.CapacitiesTable.DestroyAllChildren(); this.previousSize = PanelFeatureCapacities.CapacityPrefabSizes.Small; } this.CapacitiesTable.ReserveChildren(this.abilityReferences.Count, this.CapacitySmallPrefab, "Item"); } else if (this.abilityReferences.Count > this.minimalPrefabThreshold && this.ResizeSelf) { if (this.previousSize != PanelFeatureCapacities.CapacityPrefabSizes.Minimal) { this.CapacitiesTable.DestroyAllChildren(); this.previousSize = PanelFeatureCapacities.CapacityPrefabSizes.Minimal; } this.CapacitiesTable.ReserveChildren(this.abilityReferences.Count, this.CapacityMinimalPrefab, "Item"); } else { if (this.previousSize != PanelFeatureCapacities.CapacityPrefabSizes.Normal) { this.CapacitiesTable.DestroyAllChildren(); this.previousSize = PanelFeatureCapacities.CapacityPrefabSizes.Normal; } this.CapacitiesTable.ReserveChildren(this.abilityReferences.Count, this.CapacityPrefab, "Item"); } GuiUnit guiUnit = this.context as GuiUnit; Unit unit = this.context as Unit; List <UnitAbilityReference> listToCheck = new List <UnitAbilityReference>(); List <UnitAbilityReference> HeroAbilities = new List <UnitAbilityReference>(); List <UnitAbilityReference> ItemAbilities = new List <UnitAbilityReference>(); UnitDesign unitDesign = null; if (unit != null) { unitDesign = unit.UnitDesign; } if (guiUnit != null) { unitDesign = guiUnit.UnitDesign; } if (unitDesign != null) { if (unitDesign.UnitBodyDefinition.UnitAbilities != null && unitDesign.UnitBodyDefinition.UnitAbilities.Length != 0) { listToCheck = unitDesign.UnitBodyDefinition.UnitAbilities.ToList <UnitAbilityReference>(); } UnitProfile unitProfile = unitDesign as UnitProfile; if (unitProfile != null && unitProfile.ProfileAbilityReferences != null && unitProfile.ProfileAbilityReferences.Length != 0) { HeroAbilities = unitProfile.ProfileAbilityReferences.ToList <UnitAbilityReference>(); } if (unitDesign.UnitEquipmentSet != null) { List <StaticString> list = new List <StaticString>(unitDesign.UnitEquipmentSet.Slots.Length); IDatabase <ItemDefinition> database = Databases.GetDatabase <ItemDefinition>(false); Diagnostics.Assert(database != null); for (int j = 0; j < unitDesign.UnitEquipmentSet.Slots.Length; j++) { UnitEquipmentSet.Slot slot = unitDesign.UnitEquipmentSet.Slots[j]; if (!list.Contains(slot.ItemName)) { StaticString key = slot.ItemName.ToString().Split(DepartmentOfDefense.ItemSeparators)[0]; ItemDefinition itemDefinition; if (database.TryGetValue(key, out itemDefinition)) { Diagnostics.Assert(itemDefinition != null); if (itemDefinition.AbilityReferences != null) { ItemAbilities.AddRange(itemDefinition.AbilityReferences); list.Add(slot.ItemName); } } } } } } this.abilityReferences.Sort(delegate(UnitAbilityReference left, UnitAbilityReference right) { bool flag = !this.ContainsAbilityReference(HeroAbilities, left) && !this.ContainsAbilityReference(ItemAbilities, left); bool flag2 = this.ContainsAbilityReference(HeroAbilities, left); bool flag3 = this.ContainsAbilityReference(ItemAbilities, left); bool flag4 = !this.ContainsAbilityReference(HeroAbilities, right) && !this.ContainsAbilityReference(ItemAbilities, right); bool flag5 = this.ContainsAbilityReference(HeroAbilities, right); bool flag6 = this.ContainsAbilityReference(ItemAbilities, right); string x = left.Name + Mathf.Max((float)left.Level, 0f); string text = ""; GuiElement guiElement; if (this.GuiService.GuiPanelHelper.TryGetGuiElement(x, out guiElement)) { text = AgeLocalizer.Instance.LocalizeString(guiElement.Title); } x = right.Name + Mathf.Max((float)right.Level, 0f); string strB = ""; if (this.GuiService.GuiPanelHelper.TryGetGuiElement(x, out guiElement)) { strB = AgeLocalizer.Instance.LocalizeString(guiElement.Title); } if (flag && flag5) { return(-1); } if (flag && flag6) { return(-1); } if (flag2 && flag4) { return(1); } if (flag3 && flag4) { return(1); } if (flag2 && flag6) { return(-1); } if (flag3 && flag2) { return(1); } if ((flag && flag4) || (flag2 && flag5) || (flag3 && flag6)) { return(text.CompareTo(strB)); } return(0); }); this.CapacitiesTable.RefreshChildrenIList <UnitAbilityReference>(this.abilityReferences, this.refreshAbilityReferenceDelegate, true, false); this.CapacitiesTable.ArrangeChildren(); int num = this.CapacitiesTable.ComputeVisibleChildren(); if (num > 0) { this.CapacitiesTable.Visible = true; AgeTransform ageTransform = this.CapacitiesTable.GetChildren()[num - 1]; this.CapacitiesTable.Height = ageTransform.Y + ageTransform.Height + this.CapacitiesTable.VerticalMargin; this.Title.Text = AgeLocalizer.Instance.LocalizeString("%FeatureCapacitiesTitle"); if (this.ResizeSelf) { base.AgeTransform.Height = this.CapacitiesTable.PixelMarginTop + this.CapacitiesTable.Height + this.CapacitiesTable.PixelMarginBottom; } if (guiUnit != null && (guiUnit.Unit != null || guiUnit.UnitSnapshot != null) && this.Background != null && ((guiUnit.Unit != null && guiUnit.Unit.Embarked) || (guiUnit.UnitSnapshot != null && guiUnit.UnitSnapshot.Embarked))) { this.Title.Text = "%FeatureCapacitiesEmbarkedTitle"; this.Background.TintColor = this.EmbarkedBackgroundColor; } Color tintColor = PanelFeatureCapacities.Colorlist[Amplitude.Unity.Framework.Application.Registry.GetValue <int>(new StaticString("Settings/ELCP/UI/CapacityColor1"), 0)]; Color tintColor2 = PanelFeatureCapacities.Colorlist[Amplitude.Unity.Framework.Application.Registry.GetValue <int>(new StaticString("Settings/ELCP/UI/CapacityColor2"), 2)]; Color tintColor3 = PanelFeatureCapacities.Colorlist[Amplitude.Unity.Framework.Application.Registry.GetValue <int>(new StaticString("Settings/ELCP/UI/CapacityColor3"), 8)]; for (int k = 0; k < this.abilityReferences.Count; k++) { FeatureItemCapacity component = this.CapacitiesTable.GetChildren()[k].GetComponent <FeatureItemCapacity>(); if (component != null && !this.ContainsAbilityReference(listToCheck, this.abilityReferences[k])) { component.Icon.TintColor = tintColor; if (this.ContainsAbilityReference(HeroAbilities, this.abilityReferences[k])) { component.Icon.TintColor = tintColor2; } else if (this.ContainsAbilityReference(ItemAbilities, this.abilityReferences[k])) { component.Icon.TintColor = tintColor3; } else { component.Icon.TintColor = tintColor; } } else if (component != null && this.ContainsAbilityReference(listToCheck, this.abilityReferences[k])) { component.Icon.TintColor = tintColor; } } } else { this.CapacitiesTable.Visible = false; this.Title.Text = AgeLocalizer.Instance.LocalizeString("%FeatureNoCapacitiesTitle"); if (this.ResizeSelf) { base.AgeTransform.Height = this.CapacitiesTable.PixelMarginTop; } } yield return(base.OnShow(parameters)); yield break; }
private void RefreshAbilityReference(AgeTransform tableItem, UnitAbilityReference abilityReference, int index) { tableItem.GetComponent <FeatureItemCapacity>().SetContent(abilityReference, base.GuiService.GuiPanelHelper); }