internal SortieConsumptionRecord(SQLiteDataReader rpReader) : base(rpReader)
        {
            ID = rpReader.GetInt64("id");

            var rMapMaxHP = rpReader.GetInt32Optional("map_max_hp");
            if (rMapMaxHP.HasValue)
            {
                var rMapHP = rpReader.GetInt32Optional("map_hp");
                if (rMapHP.HasValue)
                    MapHP = new ClampedValue(rMapMaxHP.Value, rMapHP.Value);
            }

            Fuel = rpReader.GetInt32("fuel");
            Bullet = rpReader.GetInt32("bullet");
            Steel = rpReader.GetInt32("steel");
            Bauxite = rpReader.GetInt32("bauxite");
            Bucket = rpReader.GetInt32("bucket");

            RankingPoint = rpReader.GetDoubleOptional("ranking_point");
        }
예제 #2
0
        protected override void OnRawDataUpdated()
        {
            ShipInfo rInfo;

            if (!KanColleGame.Current.MasterInfo.Ships.TryGetValue(RawData.ShipID, out rInfo))
            {
                Info = ShipInfo.Dummy;
            }
            else
            {
                if (Info?.ID != RawData.ShipID)
                {
                    r_EquipmentIDs = null;
                    r_Slots        = null;
                }

                Info = rInfo;
                OnPropertyChanged(nameof(Info));
            }

            HP     = new ClampedValue(RawData.HPMaximum, RawData.HPCurrent);
            Fuel   = new ClampedValue(Info.MaxFuelConsumption, RawData.Fuel);
            Bullet = new ClampedValue(Info.MaxBulletConsumption, RawData.Bullet);

            Condition = RawData.Condition;

            var rPort = KanColleGame.Current.Port;

            if (KanColleGame.Current.Sortie != null && rPort.EvacuatedShipIDs.Contains(ID))
            {
                State |= ShipState.Evacuated;
            }
            else
            {
                State &= ~ShipState.Evacuated;
            }

            if (rPort.RepairDocks.Values.Any(r => r.Ship == this))
            {
                State |= ShipState.Repairing;
            }
            else
            {
                State &= ~ShipState.Repairing;

                var rShips = OwnerFleet?.AnchorageRepair.RepairingShips;
                UpdateAnchorageRepairStatus(rShips != null && rShips.Any(r => r.Item1 == this));
            }

            if (RawData.ModernizedStatus?.Length >= 5)
            {
                Status.Update(Info, RawData);
            }

            if (RawData.Equipment != null)
            {
                UpdateSlots();
            }

            CombatAbility.Update();

            IsLocked = RawData.IsLocked;

            OnPropertyChanged(nameof(Level));
            OnPropertyChanged(nameof(ExperienceToNextLevel));
            OnPropertyChanged(nameof(Status));
        }