/// <summary>
        /// 基地航空隊の制空戦力を求めます。
        /// </summary>
        /// <param name="aircorps">対象の基地航空隊。</param>
        public static int GetAirSuperiority(BaseAirCorpsData aircorps)
        {
            if (aircorps == null)
            {
                return(0);
            }

            return(aircorps.Squadrons.Values.Sum(sq => GetAirSuperiority(sq, aircorps.ActionKind == 2)));
        }
Example #2
0
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            var corps      = KCDatabase.Instance.BaseAirCorps;
            int aircorpsID = BaseAirCorpsData.GetID(data);

            if (corps.ContainsKey(aircorpsID))
            {
                corps[aircorpsID].LoadFromRequest(APIName, data);
            }

            base.OnRequestReceived(data);
        }
        public void SetSlotList(BaseAirCorpsData corps)
        {
            int slotLength = corps?.Squadrons?.Count() ?? 0;

            if (SlotList.Length != slotLength)
            {
                SlotList = new SlotItem[slotLength];
                for (int i = 0; i < SlotList.Length; i++)
                {
                    SlotList[i] = new SlotItem();
                }
            }

            for (int i = 0; i < SlotList.Length; i++)
            {
                var squadron = corps[i + 1];
                var eq       = squadron.EquipmentInstance;

                switch (squadron.State)
                {
                case 0:                             // 未配属
                case 2:                             // 配置転換中
                default:
                    SlotList[i].EquipmentID               = -1;
                    SlotList[i].AircraftCurrent           =
                        SlotList[i].AircraftMax           =
                            SlotList[i].Level             =
                                SlotList[i].AircraftLevel = 0;
                    break;

                case 1:                             // 配属済み
                    if (eq == null)
                    {
                        goto case 0;
                    }
                    SlotList[i].EquipmentID     = eq.EquipmentID;
                    SlotList[i].AircraftCurrent = squadron.AircraftCurrent;
                    SlotList[i].AircraftMax     = squadron.AircraftMax;
                    SlotList[i].Level           = eq.Level;
                    SlotList[i].AircraftLevel   = eq.AircraftLevel;
                    break;
                }
            }

            _slotSize = slotLength;

            PropertyChanged();
        }
Example #4
0
        /// <summary>
        /// 基地航空隊の制空戦力を求めます。
        /// </summary>
        /// <param name="aircorps">対象の基地航空隊。</param>
        public static int GetAirSuperiority(BaseAirCorpsData aircorps)
        {
            if (aircorps == null)
            {
                return(0);
            }

            int    air  = 0;
            double rate = 1.0;

            foreach (var sq in aircorps.Squadrons.Values)
            {
                if (sq == null || sq.State != 1)
                {
                    continue;
                }

                air += GetAirSuperiority(sq, aircorps.ActionKind == 2);

                if (aircorps.ActionKind != 2)
                {
                    continue;
                }

                // 偵察機補正計算
                int category = sq.EquipmentInstanceMaster.CategoryType;
                int losrate  = Math.Min(Math.Max(sq.EquipmentInstanceMaster.LOS - 7, 0), 2);                            // ~7, 8, 9~

                switch (category)
                {
                case 10:                                // 水上偵察機
                case 41:                                // 大型飛行艇
                    rate = Math.Max(rate, 1.1 + losrate * 0.03);
                    break;

                case 9:                                 // 艦上偵察機
                    rate = Math.Max(rate, 1.2 + losrate * 0.05);
                    break;
                }
            }

            return((int)(air * rate));
        }
        public override void OnResponseReceived(dynamic data)
        {
            var db = KCDatabase.Instance;

            foreach (var elem in data)
            {
                int id = (int)elem.api_rid;

                if (!db.BaseAirCorps.ContainsKey(id))
                {
                    var a = new BaseAirCorpsData();
                    a.LoadFromResponse(APIName, elem);
                    db.BaseAirCorps.Add(a);
                }
                else
                {
                    db.BaseAirCorps[id].LoadFromResponse(APIName, elem);
                }
            }

            base.OnResponseReceived((object)data);
        }
Example #6
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;

            // 旧データとの互換性確保
            var list = data.api_map_info() ? data.api_map_info : data;

            foreach (var elem in list)
            {
                int id = (int)elem.api_id;

                if (db.MapInfo[id] != null)
                {
                    db.MapInfo[id].LoadFromResponse(APIName, elem);
                }
            }

            if (data.api_air_base())
            {
                db.BaseAirCorps.Clear();
                foreach (var elem in data.api_air_base)
                {
                    int id = BaseAirCorpsData.GetID(elem);

                    if (db.BaseAirCorps[id] == null)
                    {
                        var inst = new BaseAirCorpsData();
                        inst.LoadFromResponse(APIName, elem);
                        db.BaseAirCorps.Add(inst);
                    }
                    else
                    {
                        db.BaseAirCorps[id].LoadFromResponse(APIName, elem);
                    }
                }
            }

            base.OnResponseReceived((object)data);
        }
Example #7
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;

            foreach (var elem in data)
            {
                int id = BaseAirCorpsData.GetID(elem);

                if (db.BaseAirCorps[id] == null)
                {
                    var inst = new BaseAirCorpsData();
                    inst.LoadFromResponse(APIName, elem);
                    db.BaseAirCorps.Add(inst);
                }
                else
                {
                    db.BaseAirCorps[id].LoadFromResponse(APIName, elem);
                }
            }

            base.OnResponseReceived((object)data);
        }
Example #8
0
            private string GetEquipmentString(BaseAirCorpsData corps)
            {
                var sb = new StringBuilder();

                if (corps == null)
                {
                    return("(未開放)\r\n");
                }

                foreach (var squadron in corps.Squadrons.Values)
                {
                    if (squadron == null)
                    {
                        continue;
                    }

                    var eq = squadron.EquipmentInstance;

                    switch (squadron.State)
                    {
                    case 0:                                 // 未配属
                    default:
                        sb.AppendLine("(なし)");
                        break;

                    case 1:                                 // 配属済み
                        if (eq == null)
                        {
                            goto case 0;
                        }
                        sb.AppendFormat("[{0}/{1}] ",
                                        squadron.AircraftCurrent,
                                        squadron.AircraftMax);

                        switch (squadron.Condition)
                        {
                        case 1:
                        default:
                            break;

                        case 2:
                            sb.Append("[疲労] ");
                            break;

                        case 3:
                            sb.Append("[過労] ");
                            break;
                        }

                        sb.AppendFormat("{0} (半径: {1})\r\n", eq.NameWithLevel, eq.MasterEquipment.AircraftDistance);
                        break;

                    case 2:                                 // 配置転換中
                        sb.AppendFormat("配置転換中 (開始時刻: {0})\r\n",
                                        DateTimeHelper.TimeToCSVString(squadron.RelocatedTime));
                        break;
                    }
                }

                return(sb.ToString());
            }
Example #9
0
        public override void OnRequestReceived(Dictionary <string, string> data)
        {
            _aircorpsID = BaseAirCorpsData.GetID(data);

            base.OnRequestReceived(data);
        }
Example #10
0
        public override void OnResponseReceived(dynamic data)
        {
            KCDatabase db = KCDatabase.Instance;


            //api_material
            db.Material.LoadFromResponse(APIName, data.api_material);

            //api_basic
            db.Admiral.LoadFromResponse(APIName, data.api_basic);

            //api_ship
            db.Ships.Clear();
            foreach (var elem in data.api_ship)
            {
                var a = new ShipData();
                a.LoadFromResponse(APIName, elem);
                db.Ships.Add(a);
            }


            //api_ndock
            foreach (var elem in data.api_ndock)
            {
                int id = (int)elem.api_id;

                if (!db.Docks.ContainsKey(id))
                {
                    var a = new DockData();
                    a.LoadFromResponse(APIName, elem);
                    db.Docks.Add(a);
                }
                else
                {
                    db.Docks[id].LoadFromResponse(APIName, elem);
                }
            }

            //api_deck_port
            db.Fleet.LoadFromResponse(APIName, data.api_deck_port);
            db.Fleet.CombinedFlag = data.api_combined_flag() ? (int)data.api_combined_flag : 0;


            // 基地航空隊 配置転換系の処理
            if (data.api_event_object() && data.api_event_object.api_base_convert_slot())
            {
                var prev = new HashSet <int>(BaseAirCorpsData.RelocatedEquipments);
                BaseAirCorpsData.SetRelocatedEquipments((int[])data.api_event_object.api_base_convert_slot);

                foreach (int deleted in prev.Except(BaseAirCorpsData.RelocatedEquipments))
                {
                    db.Equipments[deleted].RelocatedTime = DateTime.MinValue;
                }

                foreach (int added in BaseAirCorpsData.RelocatedEquipments.Except(prev))
                {
                    db.Equipments[added].RelocatedTime = DateTime.Now;
                }
            }
            else
            {
                foreach (int deleted in BaseAirCorpsData.RelocatedEquipments)
                {
                    db.Equipments[deleted].RelocatedTime = DateTime.MinValue;
                }

                BaseAirCorpsData.RelocatedEquipments.Clear();
            }

            db.Battle.LoadFromResponse(APIName, data);

            base.OnResponseReceived((object)data);
        }