public FleetViewModel(Fleet fleet) { this.Source = fleet; this.IsFirstFleet = Visibility.Collapsed; if (this.Source.Id > 1) { IsFirstFleet = Visibility.Visible; this.ResultList = this.MakeResultList(); this.ExpeditionId = this.ResultList.First().ToString(); } else IsFirstFleet = Visibility.Collapsed; this.CompositeDisposable.Add(new PropertyChangedEventListener(fleet) { (sender, args) => this.RaisePropertyChanged(args.PropertyName), }); this.CompositeDisposable.Add(new PropertyChangedEventListener(fleet.State) { { "Situation", (sender, args) => this.RaisePropertyChanged("QuickStateView") }, }); this.State = new FleetStateViewModel(fleet.State); this.CompositeDisposable.Add(this.State); this.Expedition = new ExpeditionViewModel(fleet.Expedition); this.CompositeDisposable.Add(this.Expedition); }
public HomeportViewModel(Fleet fleet) { this.Fleet = fleet; this.Condition = new ConditionViewModel(fleet.Condition); this.CompositeDisposable.Add(this.Condition); }
public FleetViewModel(Fleet fleet) { this.source = fleet; this.CompositeDisposable.Add(new PropertyChangedEventListener(fleet) { { (sender, args) => this.RaisePropertyChanged(args.PropertyName) }, }); this.Expedition = new ExpeditionViewModel(fleet.Expedition); }
public ReSortieBarViewModel(Fleet fleet) { var minCondition = fleet.GetShips().Select(s => s.Condition).Min(); if (minCondition >= 40) { this.CanReSortie = true; } else { this.period = DateTimeOffset.Now.Add(TimeSpan.FromMinutes(40 - minCondition)); } }
public FleetViewModel(Fleet fleet) { this.source = fleet; this.CompositeDisposable.Add(new PropertyChangedEventListener(fleet) { (sender, args) => this.RaisePropertyChanged(args.PropertyName), { () => fleet.Ships, (sender, args) => this.RaisePropertyChanged("Planes") }, }); this.ReSortie = new ReSortieBarViewModel(this, fleet.ReSortie); this.CompositeDisposable.Add(this.ReSortie); this.Expedition = new ExpeditionViewModel(fleet.Expedition); this.CompositeDisposable.Add(this.Expedition); }
private void UpdateFleet(Fleet fleet) { if (fleet.Ships != null) { if (!FleetsDic.ContainsKey(fleet.Id)) { FleetsDic.Add(fleet.Id, new List<Ship>()); } var ships = FleetsDic[fleet.Id]; ships.Clear(); var showlist = fleet.Ships.Where(s => s.HP.ShipStatus() == Plugins.Core.Enums.ShipStatus.SevereDamage); ships.AddRange(showlist); OnShipsChange(); } }
public FleetViewModel(Fleet fleet) { this.Source = fleet; this.CompositeDisposable.Add(new PropertyChangedEventListener(fleet) { (sender, args) => this.RaisePropertyChanged(args.PropertyName), }); this.CompositeDisposable.Add(new PropertyChangedEventListener(fleet.State) { { "Situation", (sender, args) => this.RaisePropertyChanged("QuickStateView") }, }); this.State = new FleetStateViewModel(fleet.State); this.CompositeDisposable.Add(this.State); this.Expedition = new ExpeditionViewModel(fleet.Expedition); this.CompositeDisposable.Add(this.Expedition); }
public override double Calc(Fleet[] fleets) { if (fleets == null || fleets.Length == 0) return 0; var ships = this.GetTargetShips(fleets) .Where(x => !x.Situation.HasFlag(ShipSituation.Evacuation)) .Where(x => !x.Situation.HasFlag(ShipSituation.Tow)) .ToArray(); if (!ships.Any()) return 0; var itemScore = ships .SelectMany(x => x.EquippedSlots) .Select(x => x.Item) .Sum(x => (x.Info.SightRange + GetLevelCoefficient(x)) * GetTypeCoefficient(x.Info.Type)); var shipScore = ships .Select(x => x.ViewRange - x.EquippedSlots.Sum(s => s.Item.Info.RawData.api_saku)) .Sum(x => Math.Sqrt(x)); var admiralScore = Math.Ceiling(KanColleClient.Current.Homeport.Admiral.Level * 0.4); var isCombined = 1 < fleets.Count() && KanColleClient.Current.Settings.IsViewRangeCalcIncludeFirstFleet && KanColleClient.Current.Settings.IsViewRangeCalcIncludeSecondFleet; var vacancyScore = ((isCombined ? 12 : 6) - ships.Length) * 2; return itemScore + shipScore - admiralScore + vacancyScore; }
private Ship[] GetTargetShips(Fleet[] fleets) { if (fleets.Count() == 1) return fleets.Single().Ships; if(KanColleClient.Current.Settings.IsViewRangeCalcIncludeFirstFleet && KanColleClient.Current.Settings.IsViewRangeCalcIncludeSecondFleet) return fleets.SelectMany(x => x.Ships).ToArray(); if (KanColleClient.Current.Settings.IsViewRangeCalcIncludeFirstFleet) return fleets.First().Ships; if (KanColleClient.Current.Settings.IsViewRangeCalcIncludeSecondFleet) return fleets.Last().Ships; return new Ship[0]; }
public override double Calc(Fleet[] fleets) { if (fleets == null || fleets.Length == 0) return 0; var ships = fleets.SelectMany(x => x.Ships).ToArray(); // http://wikiwiki.jp/kancolle/?%C6%EE%C0%BE%BD%F4%C5%E7%B3%A4%B0%E8#area5 // [索敵装備と装備例] によって示されている計算式 // stype=7 が偵察機 (2 倍する索敵値)、stype=8 が電探 var spotter = ships.SelectMany( x => x.EquippedSlots .Where(s => s.Item.Info.RawData.api_type.Get(1) == 7) .Where(s => s.Current > 0) .Select(s => s.Item.Info.RawData.api_saku) ).Sum(); var radar = ships.SelectMany( x => x.EquippedSlots .Where(s => s.Item.Info.RawData.api_type.Get(1) == 8) .Select(s => s.Item.Info.RawData.api_saku) ).Sum(); return (spotter * 2) + radar + (int)Math.Sqrt(ships.Sum(x => x.ViewRange) - spotter - radar); }
public override double Calc(Fleet[] fleets) { if (fleets == null || fleets.Length == 0) return 0; var ships = fleets.SelectMany(x => x.Ships).ToArray(); // http://wikiwiki.jp/kancolle/?%C6%EE%C0%BE%BD%F4%C5%E7%B3%A4%B0%E8#search-calc // > 2-5式では説明出来ない事象を解決するため膨大な検証報告数より導き出した新式。2014年11月に改良され精度があがった。 // > 索敵スコア // > = 艦上爆撃機 × (1.04) // > + 艦上攻撃機 × (1.37) // > + 艦上偵察機 × (1.66) // > + 水上偵察機 × (2.00) // > + 水上爆撃機 × (1.78) // > + 小型電探 × (1.00) // > + 大型電探 × (0.99) // > + 探照灯 × (0.91) // > + √(各艦毎の素索敵) × (1.69) // > + (司令部レベルを5の倍数に切り上げ) × (-0.61) var itemScore = ships .SelectMany(x => x.EquippedSlots) .Select(x => x.Item.Info) .GroupBy( x => x.Type, x => x.RawData.api_saku, (type, scores) => new { type, score = scores.Sum() }) .Aggregate(.0, (score, item) => score + GetScore(item.type, item.score)); var shipScore = ships .Select(x => x.ViewRange - x.EquippedSlots.Sum(s => s.Item.Info.RawData.api_saku)) .Select(x => Math.Sqrt(x)) .Sum() * 1.69; var level = (((KanColleClient.Current.Homeport.Admiral.Level + 4) / 5) * 5); var admiralScore = level * -0.61; return itemScore + shipScore + admiralScore; }
public abstract double Calc(Fleet[] fleets);
public override double Calc(Fleet[] fleets) { if (fleets == null || fleets.Length == 0) return 0; return fleets.SelectMany(x => x.Ships).Sum(x => x.ViewRange); }
internal FleetCondition(Fleet fleet) { this.fleet = fleet; }
public SortieViewModel(Fleet fleet) { this.Fleet = fleet; }
/// <summary> /// 指定した艦隊に、現在入渠中の艦娘がいるかどうかを確認します。 /// </summary> public bool CheckRepairing(Fleet fleet) { var repairingShipIds = this.Docks.Values.Where(x => x.Ship != null).Select(x => x.Ship.Id).ToArray(); return fleet.Ships.Any(x => repairingShipIds.Any(id => id == x.Id)); }
internal FleetCondition(Fleet fleet) { this.fleet = fleet; }
private FleetViewModel ToViewModel(Fleet fleet) { var vm = new FleetViewModel(fleet).AddTo(this.fleetListeners); fleet.Subscribe(nameof(Fleet.ShipsUpdated), () => { if (KanColleSettings.AutoFleetSelectWhenShipsChanged) this.SelectedFleet = vm; }, false).AddTo(this.fleetListeners); fleet.Subscribe(nameof(Fleet.IsInSortie), () => { if (KanColleSettings.AutoFleetSelectWhenSortie) this.SelectedFleet = vm; }, false).AddTo(this.fleetListeners); return vm; }
void loggerViewModel_ShipsChange(object sender, Fleet e) { var item = Helper.BattleLogsHelper.Current.GetLastItem(); if (item != null && !item.IsSetAfterHP()) { if (item.SetFleetAfterHP(KanColleClient.Current)) { Helper.BattleLogsHelper.Current.UpdateItem(item); this.battleLogViewModel.UpdateReload(); } } }
public Expedition(Fleet fleet) { this.fleet = fleet; }
public RepairingBarViewModel(Fleet fleet) { this.source = fleet; }
private void OnShipsChange(Fleet fleet) { if (ShipsChange != null) ShipsChange(this, fleet); }
public Expedition(Fleet fleet) { this.fleet = fleet; }
public abstract double Calc(Fleet fleet);