/// <summary>
 /// 装備と搭載数を指定して、スロット単位の制空能力を計算します。
 /// </summary>
 public static int GetAirSuperiorityPotential(this SlotItem slotItem, int onslot, AirSuperiorityCalculationOptions options = AirSuperiorityCalculationOptions.Default)
 {
     var calculator = slotItem.GetCalculator();
     return options.HasFlag(calculator.Options()) && onslot >= 1
         ? calculator.GetAirSuperiority(slotItem, onslot, options)
         : 0;
 }
Exemplo n.º 2
0
            public int GetAirSuperiority(SlotItem slotItem, int onslot, AirSuperiorityCalculationOptions options)
            {
                // 装備の対空値とスロットの搭載数による制空値
                var airSuperiority = this.GetAirSuperiority(slotItem, onslot);

                // 装備の熟練度による制空値ボーナス
                airSuperiority += this.GetProficiencyBonus(slotItem, options);

                return((int)airSuperiority);
            }
Exemplo n.º 3
0
            public int GetAirSuperiority(SlotItem slotItem, int onslot, AirSuperiorityCalculationOptions options)
            {
                // 장비 대공치와 슬롯 탑재량 수치
                var airSuperiority = this.GetAirSuperiority(slotItem, onslot);

                // 장비 숙련도 제공 보너스
                airSuperiority += this.GetProficiencyBonus(slotItem, options);

                return((int)airSuperiority);
            }
Exemplo n.º 4
0
 /// <summary>
 /// 内部熟練度値を取得します。
 /// </summary>
 public int GetInternalValue(AirSuperiorityCalculationOptions options)
 {
     if (options.HasFlag(AirSuperiorityCalculationOptions.InternalProficiencyMinValue))
     {
         return(this.internalMinValue);
     }
     if (options.HasFlag(AirSuperiorityCalculationOptions.InternalProficiencyMaxValue))
     {
         return(this.internalMaxValue);
     }
     return((this.internalMaxValue + this.internalMinValue) / 2);
 }
Exemplo n.º 5
0
        private static Proficiency GetProficiency(this SlotItemInfo slotItem, AirSuperiorityCalculationOptions options)
        {
            int lv;

            if (options.HasFlag(AirSuperiorityCalculationOptions.ProficiencyMin))
            {
                lv = 0;
            }
            else if (options.HasFlag(AirSuperiorityCalculationOptions.ProficiencyMax))
            {
                lv = 7;
            }
            else
            {
                lv = 4;
            }

            return(proficiencies[Math.Max(Math.Min(lv, 7), 0)]);
        }
Exemplo n.º 6
0
        public static double GetAirSuperiorityPotential(this PresetShipModel ship, AirSuperiorityCalculationOptions option)
        {
            var slots = new PresetShipData(ship).Ship.RawData.api_maxeq;

            return(ship.Slots
                   .Select((x, y) =>
            {
                var calc = new PresetSlotData(x).Item?.Type.GetCalculator() ?? EmptyCalculator.Instance;

                if (slots[y] <= 0)
                {
                    return 0;
                }
                if (!option.HasFlag(calc.Options))
                {
                    return 0;
                }

                return calc.GetAirSuperiority(x, slots[y], option);
            })
                   .Sum());
        }
Exemplo n.º 7
0
            protected override double GetProficiencyBonus(PresetSlotModel slotItem, AirSuperiorityCalculationOptions options)
            {
                var proficiency = slotItem.GetProficiency();

                return(Math.Sqrt(proficiency.GetInternalValue(options) / 10.0));
            }
Exemplo n.º 8
0
            protected override double GetAirSuperiorityInternal(SlotItemInfo slotItem, int onslot, AirSuperiorityCalculationOptions options)
            {
                int level;

                if (options.HasFlag(AirSuperiorityCalculationOptions.LevelMax))
                {
                    level = 10;
                }
                else if (options.HasFlag(AirSuperiorityCalculationOptions.LevelMin))
                {
                    level = 0;
                }
                else
                {
                    level = 5;
                }
                // 装備改修による対空値加算 (★ x 0.2)
                return((slotItem.AA + level * 0.2) * Math.Sqrt(onslot));
            }
Exemplo n.º 9
0
 /// <summary>
 /// 艦娘の制空能力を計算します。
 /// </summary>
 public static int GetAirSuperiorityPotential(this Ship ship, AirSuperiorityCalculationOptions options = AirSuperiorityCalculationOptions.Default)
 {
     return(ship.EquippedSlots
            .Select(x => GetAirSuperiorityPotential(x.Item, x.Current, options))
            .Sum());
 }
Exemplo n.º 10
0
 protected override double GetProficiencyBonus(SlotItem slotItem, AirSuperiorityCalculationOptions options)
 {
     return(0.0);
 }
 protected abstract double GetProficiencyBonus(SlotItem slotItem, AirSuperiorityCalculationOptions options);
            public int GetAirSuperiority(SlotItem slotItem, int onslot, AirSuperiorityCalculationOptions options)
            {
                // 装備の対空値とスロットの搭載数による制空値
                var airSuperiority = this.GetAirSuperiority(slotItem, onslot);

                // 装備の熟練度による制空値ボーナス
                airSuperiority += this.GetProficiencyBonus(slotItem, options);

                return (int)airSuperiority;
            }
Exemplo n.º 13
0
 public static int GetAirSuperiorityPotential(this OrganizationSlotItemInfo info, AirSuperiorityCalculationOptions options)
 {
     return(info.SlotItemInfo.GetAirSuperiorityPotential(info.Slot, options));
 }
Exemplo n.º 14
0
 protected override double GetProficiencyBonus(SlotItemInfo slotItem, AirSuperiorityCalculationOptions options) => .0;
Exemplo n.º 15
0
 protected override double GetAirSuperiorityInternal(SlotItemInfo slotItem, int onslot, AirSuperiorityCalculationOptions options) => .0;
Exemplo n.º 16
0
 protected override double GetProficiencyBonus(PresetSlotModel slotItem, AirSuperiorityCalculationOptions options) => .0;
Exemplo n.º 17
0
            protected override double GetProficiencyBonus(SlotItem slotItem, AirSuperiorityCalculationOptions options)
            {
                var proficiency = slotItem.GetProficiency();

                return(Math.Sqrt(proficiency.GetInternalValue(options) / 10.0) + proficiency.SeaplaneBomberBonus);
            }
 protected override double GetProficiencyBonus(SlotItem slotItem, AirSuperiorityCalculationOptions options)
 {
     return 0.0;
 }
 /// <summary>
 /// 内部熟練度値を取得します。
 /// </summary>
 public int GetInternalValue(AirSuperiorityCalculationOptions options)
 {
     if (options.HasFlag(AirSuperiorityCalculationOptions.InternalProficiencyMinValue)) return this.internalMinValue;
     if (options.HasFlag(AirSuperiorityCalculationOptions.InternalProficiencyMaxValue)) return this.internalMaxValue;
     return (this.internalMaxValue + this.internalMinValue) / 2;
 }
 protected override double GetProficiencyBonus(SlotItem slotItem, AirSuperiorityCalculationOptions options)
 {
     var proficiency = slotItem.GetProficiency();
     return Math.Sqrt(proficiency.GetInternalValue(options) / 10.0) + proficiency.SeaplaneBomberBonus;
 }
Exemplo n.º 21
0
        /// <summary>
        /// 装備と搭載数を指定して、スロット単位の制空能力を計算します。
        /// </summary>
        public static int GetAirSuperiorityPotential(this SlotItem slotItem, int onslot, AirSuperiorityCalculationOptions options = AirSuperiorityCalculationOptions.Default)
        {
            var calculator = slotItem.GetCalculator();

            return(options.HasFlag(calculator.Options()) && onslot >= 1
                                ? calculator.GetAirSuperiority(slotItem, onslot, options)
                                : 0);
        }
 /// <summary>
 /// 艦娘の制空能力を計算します。
 /// </summary>
 public static int GetAirSuperiorityPotential(this Ship ship, AirSuperiorityCalculationOptions options = AirSuperiorityCalculationOptions.Default)
 {
     return ship.EquippedSlots
         .Select(x => GetAirSuperiorityPotential(x.Item, x.Current, options))
         .Sum();
 }
Exemplo n.º 23
0
 protected abstract double GetProficiencyBonus(SlotItem slotItem, AirSuperiorityCalculationOptions options);
Exemplo n.º 24
0
 protected virtual double GetAirSuperiorityInternal(SlotItemInfo slotItem, int onslot, AirSuperiorityCalculationOptions options)
 {
     return(slotItem.AA * Math.Sqrt(onslot));
 }