Beispiel #1
0
        /// <summary>
        /// 制空値を計算します
        /// </summary>
        /// <param name="itemdata">アイテムのデータ</param>
        /// <param name="withdrawnArray">護衛退避の情報</param>
        /// <param name="deckports">艦隊の情報</param>
        /// <returns>制空値</returns>
        public AirSupResult GetAirSupValue(Dictionary<int, SlotItem> itemdata, bool[,] withdrawnArray, List<ApiDeckPort> deckports)
        {
            lock (_lockObject)
            {
                //計算が必要かどうか
                bool calcrequired = false;
                if (_airsup == null) calcrequired = true;//キャッシュされていない場合
                else if (_lastWithdrawnArray == null || _lastWithdrawnArray != withdrawnArray) calcrequired = true;
                //再計算が必要な場合
                if (calcrequired)
                {
                    _airsup = new AirSupResult();

                    //護衛退避しているかどうか
                    bool iswithdrawn = false;
                    foreach (int i in Enumerable.Range(0, deckports.Count))
                    {
                        var d = deckports[i];
                        foreach (int j in Enumerable.Range(0, d.api_ship.Count))
                        {
                            var shipid = d.api_ship[j];
                            //艦隊リストの中に該当艦を発見した場合
                            if (shipid == this.api_id)
                            {
                                if (i >= 0 && i < withdrawnArray.GetLength(0) && j >= 0 && j < withdrawnArray.GetLength(1))
                                {
                                    iswithdrawn = withdrawnArray[i, j];
                                    break;
                                }
                            }
                        }
                        if (iswithdrawn) break;
                    }

                    //退避していない場合に限り制空を計算
                    if (!iswithdrawn)
                    {
                        var oslots = GetOSlotitems(itemdata);
                        var dslots = GetDSlotitems(itemdata);

                        foreach (int i in Enumerable.Range(0, dslots.Count))
                        {
                            var oequip = oslots[i];
                            var equip = dslots[i];
                            //このスロットの制空値
                            var slot_airsup = AirSupResult.SingleSlotitemAirSup(equip, api_onslot[i], oequip.api_alv);

                            //全体にマージ
                            _airsup = _airsup.Merge(slot_airsup);
                        }
                    }

                    _lastWithdrawnArray = withdrawnArray;
                }
                return _airsup;
            }
        }
Beispiel #2
0
        /// <summary>
        /// 中隊(航空機)あたりの制空値を計算します
        /// </summary>
        /// <param name="slotData">装備データ</param>
        /// <returns>中隊あたりの制空値</returns>
        public AirSupResult GetPlaneAirSup(Dictionary<int, SlotItem> slotData)
        {
            if (_airsup == null)
            {
                if (slotData == null)
                {
                    throw new NullReferenceException("GetPlaneAirSup で slotDataがNullです");
                }

                if (mstSlot == null)
                {
                    if (oslot == null)
                    {
                        if (!slotData.TryGetValue(_api_slot_id, out oslot)) throw new KeyNotFoundException("GetPlaneAirSup で 対象の装備データを取得できません");
                    }
                    mstSlot = oslot.DSlotitem;
                    if (mstSlot == null)
                    {
                        throw new KeyNotFoundException("GetPlaneAirSup で 対象のマスターデータを取得できません");
                    }
                }

                _airsup = AirSupResult.SingleSlotitemAirSup(mstSlot, (double)_api_count, oslot.api_alv);
            }

            return _airsup;
        }
Beispiel #3
0
        /// <summary>
        /// 基地航空隊の制空値を計算します
        /// </summary>
        /// <param name="slotData">装備データ</param>
        /// <returns>基地航空隊の制空値</returns>
        public AirSupResult GetBaseAirSup(Dictionary<int, SlotItem> slotData)
        {
            var result = new AirSupResult();
            if (api_plane_info == null) return result;

            foreach(var plane in api_plane_info)
            {
                result = result.Merge(plane.GetPlaneAirSup(slotData));
            }
            return result;
        }
Beispiel #4
0
            public ViewStatus()
            {
                SquadronView = new ApiPlaneInfo.ViewStatus[NumOfSquadron];

                TotalAirSup = new AirSupResult();
            }
Beispiel #5
0
 public ViewStatus()
 {
     AirSup = new AirSupResult();
 }