/// <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))); }
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(); }
/// <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); }
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); }
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); }
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()); }
public override void OnRequestReceived(Dictionary <string, string> data) { _aircorpsID = BaseAirCorpsData.GetID(data); base.OnRequestReceived(data); }
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); }