public StarbaseCategory GenerateCmdCategory(BaseComposition unitComposition) {
     int elementCount = UnitComposition.GetTotalElementsCount();
     D.Log("{0}'s known elements count = {1}.", FullName, elementCount);
     if (elementCount >= 8) {
         return StarbaseCategory.TerritorialBase;
     }
     if (elementCount >= 6) {
         return StarbaseCategory.RegionalBase;
     }
     if (elementCount >= 4) {
         return StarbaseCategory.DistrictBase;
     }
     if (elementCount >= 2) {
         return StarbaseCategory.LocalBase;
     }
     if (elementCount >= 1) {
         return StarbaseCategory.Outpost;
     }
     return StarbaseCategory.None;
 }
 protected override void RefreshComposition() {
     var elementCategories = _elementsData.Cast<FacilityData>().Select(fd => fd.HullCategory);
     UnitComposition = new BaseComposition(elementCategories);
 }
        protected override void AssignValues(AItemData data) {
            var sbData = data as StarbaseCmdData;
            var accessCntlr = sbData.InfoAccessCntlr;

            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.AlertStatus)) {
                AlertStatus = sbData.AlertStatus;
            }

            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.UnitDefense)) {
                UnitDefensiveStrength = sbData.UnitDefensiveStrength;
            }
            else {
                UnitDefensiveStrength = CalcPartialUnitDefensiveStrength(GetElementsData(sbData));
            }

            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.UnitOffense)) {
                UnitOffensiveStrength = sbData.UnitOffensiveStrength;
            }
            else {
                UnitOffensiveStrength = CalcPartialUnitOffensiveStrength(GetElementsData(sbData));
            }

            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.UnitMaxHitPts)) {
                UnitMaxHitPoints = sbData.UnitMaxHitPoints;
            }
            else {
                UnitMaxHitPoints = CalcPartialUnitMaxHitPoints(GetElementsData(sbData));
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.UnitCurrentHitPts)) {
                UnitCurrentHitPoints = sbData.UnitCurrentHitPoints;
            }
            else {
                UnitCurrentHitPoints = CalcPartialUnitCurrentHitPoints(GetElementsData(sbData));
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.UnitHealth)) {
                UnitHealth = sbData.UnitHealth;
            }
            else {
                // Calculate HitPts before attempting calculation of partial unit health
                UnitHealth = CalcPartialUnitHealth(UnitCurrentHitPoints, UnitMaxHitPoints);
            }

            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.UnitScience)) {
                UnitScience = sbData.UnitScience;
            }
            else {
                UnitScience = CalcPartialUnitScience(GetElementsData(sbData));
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.UnitCulture)) {
                UnitCulture = sbData.UnitCulture;
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.UnitNetIncome)) {
                UnitIncome = sbData.UnitIncome;
                UnitExpense = sbData.UnitExpense;
            }

            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.Name)) {
                Name = sbData.Name;
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.ParentName)) {
                ParentName = sbData.ParentName;
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.Position)) {
                Position = sbData.Position;
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.Owner)) {
                Owner = sbData.Owner;
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.CurrentCmdEffectiveness)) {
                CurrentCmdEffectiveness = sbData.CurrentCmdEffectiveness;
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.UnitSensorRange)) {
                UnitSensorRange = sbData.UnitSensorRange;
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.UnitWeaponsRange)) {
                UnitWeaponsRange = sbData.UnitWeaponsRange;
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.SectorID)) {
                SectorID = sbData.SectorID;
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.Formation)) {
                UnitFormation = sbData.UnitFormation;
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.Capacity)) {
                Capacity = sbData.Capacity;
            }
            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.Resources)) {
                Resources = sbData.Resources;
            }

            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.Composition)) { // must precede Category
                UnitComposition = sbData.UnitComposition;
            }
            else {
                UnitComposition = CalcPartialUnitComposition(sbData);
            }

            if (accessCntlr.HasAccessToInfo(Player, ItemInfoID.Category)) {
                Category = sbData.Category;
            }
            else {
                Category = CalcPartialCmdCategory(sbData);
            }
        }
 public SettlementCategory GenerateCmdCategory(BaseComposition unitComposition) {
     int elementCount = unitComposition.GetTotalElementsCount();
     //D.Log(ShowDebugLog, "{0}'s known elements count = {1}.", DebugName, elementCount);
     if (elementCount >= 8) {
         return SettlementCategory.Territory;
     }
     if (elementCount >= 6) {
         return SettlementCategory.Province;
     }
     if (elementCount >= 4) {
         return SettlementCategory.CityState;
     }
     if (elementCount >= 2) {
         return SettlementCategory.City;
     }
     if (elementCount >= 1) {
         return SettlementCategory.Colony;
     }
     return SettlementCategory.None;
 }