void UpdateFleets(IEnumerable <Fleet> rpFleets) { Fleets = KanColleGame.Current.Port.Fleets.Table.Values.Select(r => new FleetViewModel(r)).ToList(); SelectedFleet = Fleets.FirstOrDefault(); r_Parent.Overview.Fleets = Fleets; }
public NavalBase(IGameProvider listener, ILocalizationService localization) { Localization = localization; MasterData = new MasterDataRoot(listener, localization); Quests = new QuestManager(listener, localization); _allEquipment = new IdTable<EquipmentId, Equipment, IRawEquipment, NavalBase>(this); _buildingDocks = new IdTable<BuildingDockId, BuildingDock, IRawBuildingDock, NavalBase>(this); _repairingDocks = new IdTable<RepairingDockId, RepairingDock, IRawRepairingDock, NavalBase>(this); _useItems = new IdTable<UseItemId, UseItemCount, IRawUseItemCount, NavalBase>(this); _allShips = new IdTable<ShipId, Ship, IRawShip, NavalBase>(this); _fleets = new IdTable<FleetId, Fleet, IRawFleet, NavalBase>(this); _maps = new IdTable<MapId, Map, IRawMap, NavalBase>(this); _airForce = new IdTable<(MapAreaId MapArea, AirForceGroupId GroupId), AirForceGroup, IRawAirForceGroup, NavalBase>(this); listener.AllEquipmentUpdated += (t, msg) => _allEquipment.BatchUpdate(msg, t); listener.BuildingDockUpdated += (t, msg) => _buildingDocks.BatchUpdate(msg, t); listener.UseItemUpdated += (t, msg) => _useItems.BatchUpdate(msg, t); listener.AdmiralUpdated += (t, msg) => { if (Admiral?.Id != msg.Id) { var @new = new Admiral(msg, this, t); AdmiralChanging?.Invoke(t, Admiral, @new); Admiral = @new; NotifyPropertyChanged(nameof(Admiral)); } else Admiral.Update(msg, t); }; listener.MaterialsUpdated += (t, msg) => { var materials = Materials; msg.Apply(ref materials); if (Materials != materials) { Materials = materials; MaterialsUpdating?.Invoke(t, Materials, materials, msg.Reason); } }; listener.HomeportReturned += (t, msg) => _allShips.BatchUpdate(msg.Ships, t); listener.CompositionChanged += (t, msg) => { var fleet = Fleets[msg.FleetId]; if (msg.ShipId is ShipId shipId) { var ship = AllShips[shipId]; fleet.ChangeComposition(msg.Index, ship, Fleets.FirstOrDefault(x => x.Ships.Contains(ship))); } else fleet.ChangeComposition(msg.Index, null, null); }; listener.FleetsUpdated += (t, msg) => _fleets.BatchUpdate(msg, t); listener.FleetPresetSelected += (t, msg) => Fleets[msg.Id].Update(msg, t); listener.ShipEquipmentUdated += (t, msg) => AllShips[msg.ShipId].UpdateEquipments(msg.EquipmentIds); listener.ShipExtraSlotOpened += (t, msg) => AllShips[msg].ExtraSlot = new Slot(); listener.PartialFleetsUpdated += (t, msg) => _fleets.BatchUpdate(msg, t, removal: false); listener.PartialShipsUpdated += (t, msg) => _allShips.BatchUpdate(msg, t, removal: false); listener.RepairingDockUpdated += (t, msg) => _repairingDocks.BatchUpdate(msg, t); listener.ShipSupplied += (t, msg) => { foreach (var raw in msg) AllShips[raw.ShipId]?.Supply(raw); }; listener.RepairStarted += (t, msg) => { if (msg.InstantRepair) AllShips[msg.ShipId]?.SetRepaired(); }; listener.InstantRepaired += (t, msg) => { var dock = RepairingDocks[msg]; dock.State = RepairingDockState.Empty; dock.RepairingShip = null; }; listener.InstantBuilt += (t, msg) => BuildingDocks[msg].State = BuildingDockState.BuildCompleted; listener.ShipBuildCompleted += (t, msg) => { _allEquipment.BatchUpdate(msg.Equipments, t, removal: false); _allShips.Add(msg.Ship, t); }; listener.EquipmentCreated += (t, msg) => { if (msg.IsSuccess) _allEquipment.Add(msg.Equipment, t); }; listener.ShipDismantled += (t, msg) => ShipDismantling?.Invoke(t, RemoveShips(msg.ShipIds, msg.DismantleEquipments, t), msg.DismantleEquipments); listener.EquipmentDismantled += (t, msg) => EquipmentDismantling?.Invoke(t, RemoveEquipments(msg, t)); listener.EquipmentImproved += (t, msg) => { var consumed = RemoveEquipments(msg.ConsumedEquipmentIds, t); var original = AllEquipment[msg.EquipmentId]; EquipmentImproving?.Invoke(t, original, msg.UpdatedTo, consumed, msg.IsSuccess); if (msg.IsSuccess) original.Update(msg.UpdatedTo, t); }; listener.ShipPoweruped += (t, msg) => { var consumed = RemoveShips(msg.ConsumedShipIds, true, t); var original = AllShips[msg.ShipId]; ShipPoweruping?.Invoke(t, original, msg.UpdatedTo, consumed); original.Update(msg.UpdatedTo, t); }; listener.MapsUpdated += (t, msg) => _maps.BatchUpdate(msg, t); listener.AirForceUpdated += (t, msg) => _airForce.BatchUpdate(msg, t); listener.AirForcePlaneSet += (t, msg) => { var group = AirForce[(msg.MapAreaId, msg.GroupId)]; group.Distance = msg.NewDistance; group.squadrons.BatchUpdate(msg.UpdatedSquadrons, t, removal: false); };