Beispiel #1
0
 public SupportPhase(SupportFireType type, MasterDataRoot masterData, Side enemy, RawSupportPhase raw)
     : base(Initialze(masterData, raw, new Builder(enemy, MapTypeStatic(type))))
 {
     Type = type;
 }
 public BattleParticipantCollection(IReadOnlyList <RawShipInBattle> rawShips, MasterDataRoot masterData, int startIndex, bool isEnemy)
     : base(BuildFromRaw(rawShips, masterData, startIndex, isEnemy, out var ships))
 {
     FleetInfo = new ImplicitFleet(ships);
 }
Beispiel #3
0
 public ExpeditionInfo(IRawExpeditionInfo raw, MasterDataRoot owner, DateTimeOffset timeStamp) : this(raw.Id, owner) => UpdateProps(raw, timeStamp);
Beispiel #4
0
 public UseItemInfo(UseItemId id, MasterDataRoot owner) : base(id)
 {
     this.owner      = owner;
     NameTranslation = owner.Localization?.GetLocalized("UseItem", id.ToString());
     CreateDummy();
 }
Beispiel #5
0
 public MapAreaInfo(MapAreaId id, MasterDataRoot owner) : base(id)
 {
     this.owner      = owner;
     NameTranslation = owner.Localization?.GetLocalized("MapArea", id.ToString());
     CreateDummy();
 }
Beispiel #6
0
 public TorpedoPhase(MasterDataRoot masterData, Side ally, Side enemy, RawTorpedoPhase raw, bool isOpening)
     : base(Initialze(masterData, raw, new Builder(ally, enemy)))
     => IsOpening = isOpening;
Beispiel #7
0
 public EquipmentTypeInfo(EquipmentTypeId id, MasterDataRoot owner) : base(id)
 {
     this.owner      = owner;
     NameTranslation = owner.Localization?.GetLocalized("EquipType", id.ToString());
     CreateDummy();
 }
Beispiel #8
0
 public ShipTypeInfo(ShipTypeId id, MasterDataRoot owner) : base(id)
 {
     this.owner = owner;
     CreateDummy();
 }
Beispiel #9
0
 public AerialSide(MasterDataRoot masterData, in RawAerialSide raw, Side side)
Beispiel #10
0
 protected static IEnumerable <Attack> Initialze <TBuilder>(MasterDataRoot masterData, RawBattlePhase raw, TBuilder builder)
     where TBuilder : IBattlePhaseBuilder
 => from attack in raw.Attacks
 let source = attack.SourceIndex is int s?builder.MapShip(s, attack.EnemyAttacks) : null
Beispiel #11
0
 public ShipInfo(ShipInfoId id, MasterDataRoot owner) : base(id)
 {
     this.owner = owner;
     Introduction.Translation = owner.Localization?.GetLocalized("ShipIntro", id.ToString());
     CreateDummy();
 }
Beispiel #12
0
 public LandBasePhase(int index, MasterDataRoot masterData, Side enemy, RawLandBaseAerialPhase raw)
     : base(index, masterData, null, enemy, raw)
 {
 }
Beispiel #13
0
 public NightEffects(MasterDataRoot masterData, IReadOnlyList <BattleParticipant> fleet, in RawNightEffects raw)
        private static BattleParticipant[] BuildFromRaw(IReadOnlyList <RawShipInBattle> raw, MasterDataRoot masterData, int startIndex, bool isEnemy, out Ship[] ships)
        {
            ships = new Ship[raw.Count];
            var result = new BattleParticipant[raw.Count];

            for (int i = 0; i < raw.Count; i++)
            {
                ships[i]  = new BattlingShip(masterData, raw[i]);
                result[i] = new BattleParticipant(startIndex + i, ships[i], raw[i], isEnemy);
            }
            return(result);
        }
Beispiel #15
0
 public ShellingPhase(int index, MasterDataRoot masterData, Side ally, Side enemy, RawShellingPhase raw, bool useFleet2 = false)
     : base(raw.OldSchema
           ? Initialze(masterData, raw, new OldBuilder(useFleet2 ? ally.Fleet2 : ally.Fleet, enemy.Fleet))
           : Initialze(masterData, raw, new Builder(ally, enemy)), index)
 {
 }
Beispiel #16
0
 public NpcPhase(MasterDataRoot masterData, IReadOnlyList <BattleParticipant> npcFleet, Side enemy, RawNightPhase raw)
     : base(0, masterData, npcFleet, enemy, raw)
     => NpcFleet = npcFleet;
Beispiel #17
0
 public OpeningAswPhase(MasterDataRoot masterData, Side ally, Side enemy, RawShellingPhase raw)
     : base(0, masterData, ally, enemy, raw, true)
 {
 }
Beispiel #18
0
 public NightPhase(MasterDataRoot masterData, Side ally, Side enemy, RawNightPhase raw)
     : base(Initialze(masterData, raw, new Builder(SelectFleet(ally, raw.Ally.ActiveFleet), SelectFleet(enemy, raw.Enemy.ActiveFleet))))
 {
     Ally  = new NightEffects(masterData, SelectFleet(ally, raw.Ally.ActiveFleet), raw.Ally);
     Enemy = new NightEffects(masterData, SelectFleet(enemy, raw.Enemy.ActiveFleet), raw.Enemy);
 }
Beispiel #19
0
 public ShipTypeInfo(IRawShipTypeInfo raw, MasterDataRoot owner, DateTimeOffset timeStamp) : this(raw.Id, owner) => UpdateProps(raw, timeStamp);
Beispiel #20
0
 protected NightPhase(int index, MasterDataRoot masterData, IReadOnlyList <BattleParticipant> ally, RawNightPhase raw, IEnumerable <Attack> attacks)
     : base(attacks, index)
 {
     Ally  = new NightEffects(masterData, ally, raw.Ally);
     Enemy = new NightEffects(masterData, null, raw.Enemy);
 }
Beispiel #21
0
 public EquipmentInfo(IRawEquipmentInfo raw, MasterDataRoot owner, DateTimeOffset timeStamp) : this(raw.Id, owner) => UpdateProps(raw, timeStamp);
Beispiel #22
0
 public CombinedNightPhase(int index, MasterDataRoot masterData, IReadOnlyList <BattleParticipant> ally, Side enemy, RawNightPhase raw)
     : base(index, masterData, ally, raw, Initialze(masterData, raw, new Builder(ally, enemy)))
 {
 }
Beispiel #23
0
 public UseItemInfo(IRawUseItem raw, MasterDataRoot owner, DateTimeOffset timeStamp) : this(raw.Id, owner) => UpdateProps(raw, timeStamp);
Beispiel #24
0
        public void Append(MasterDataRoot masterData, RawBattle raw)
        {
            using (EnterBatchNotifyScope())
            {
                HasStarted = true;
                Engagement = raw.Engagement;
                Ally.Load(raw.Ally);
                if (Enemy is null)
                {
                    Enemy = new Side(masterData, raw.Enemy, true);
                }
                else
                {
                    Enemy.Load(raw.Enemy);
                }
                Incomplete = raw.HasNextPart;

                if (Kind == BattleKind.CombinedNightToDay)
                {
                    if (raw.SupportPhase != null)
                    {
                        phases.Add(SupportPhase = new SupportPhase(raw.SupportFireType, masterData, Enemy, raw.SupportPhase));
                    }
                    else if (raw.AerialSupportPhase != null)
                    {
                        phases.Add(SupportPhase = new SupportPhase(raw.SupportFireType, masterData, Enemy, raw.AerialSupportPhase));
                    }

                    if (raw.NightPhase1 != null)
                    {
                        phases.Add(CombinedNightPhase1 = new CombinedNightPhase(1, masterData, Ally.Fleet, Enemy, raw.NightPhase1));
                    }
                    if (raw.NightPhase2 != null)
                    {
                        phases.Add(CombinedNightPhase2 = new CombinedNightPhase(2, masterData, Ally.Fleet, Enemy, raw.NightPhase2));
                    }
                }

                if (raw.LandBaseJetPhase != null)
                {
                    phases.Add(LandBaseJetPhase = new JetPhase(masterData, Ally, Enemy, raw.LandBaseJetPhase, true));
                }
                if (raw.JetPhase != null)
                {
                    phases.Add(JetPhase = new JetPhase(masterData, Ally, Enemy, raw.AerialPhase, false));
                }

                if (raw.LandBasePhases != null)
                {
                    phases.AddRange(LandBasePhases = raw.LandBasePhases.Select((x, i) => new LandBasePhase(i + 1, masterData, Enemy, x)).ToArray());
                }

                if (raw.AerialPhase != null)
                {
                    phases.Add(AerialPhase = new AerialPhase(1, masterData, Ally, Enemy, raw.AerialPhase));
                }
                if (raw.AerialPhase2 != null)
                {
                    phases.Add(AerialPhase2 = new AerialPhase(2, masterData, Ally, Enemy, raw.AerialPhase2));
                }

                if (Kind != BattleKind.CombinedNightToDay)
                {
                    if (raw.SupportPhase != null)
                    {
                        phases.Add(SupportPhase = new SupportPhase(raw.SupportFireType, masterData, Enemy, raw.SupportPhase));
                    }
                    else if (raw.AerialSupportPhase != null)
                    {
                        phases.Add(SupportPhase = new SupportPhase(raw.SupportFireType, masterData, Enemy, raw.AerialSupportPhase));
                    }

                    if (raw.NpcFleet != null)
                    {
                        NpcFleet = new BattleParticipantCollection(raw.NpcFleet, masterData, 1, false);
                        if (raw.NpcPhase != null)
                        {
                            phases.Add(NpcPhase = new NpcPhase(masterData, NpcFleet, Enemy, raw.NpcPhase));
                        }
                    }
                    if (raw.NightPhase != null)
                    {
                        phases.Add(NightPhase = new NightPhase(masterData, Ally, Enemy, raw.NightPhase));
                    }
                }

                if (raw.OpeningAswPhase != null)
                {
                    phases.Add(OpeningAswPhase = new OpeningAswPhase(masterData, Ally, Enemy, raw.OpeningAswPhase));
                }
                if (raw.OpeningTorpedoPhase != null)
                {
                    phases.Add(OpeningTorpedoPhase = new TorpedoPhase(masterData, Ally, Enemy, raw.OpeningTorpedoPhase, true));
                }

                if (Kind == BattleKind.Combined)
                {
                    switch (FleetType)
                    {
                    case CombinedFleetType.None:
                        if (raw.ShellingPhase1 != null)
                        {
                            phases.Add(ShellingPhase1 = new ShellingPhase(1, masterData, Ally, Enemy, raw.ShellingPhase1));
                        }
                        if (raw.ClosingTorpedoPhase != null)
                        {
                            phases.Add(ClosingTorpedoPhase = new TorpedoPhase(masterData, Ally, Enemy, raw.ClosingTorpedoPhase, false));
                        }
                        if (raw.ShellingPhase2 != null)
                        {
                            phases.Add(ShellingPhase2 = new ShellingPhase(2, masterData, Ally, Enemy, raw.ShellingPhase2));
                        }
                        if (raw.ShellingPhase3 != null)
                        {
                            phases.Add(ShellingPhase3 = new ShellingPhase(3, masterData, Ally, Enemy, raw.ShellingPhase3));
                        }
                        break;

                    case CombinedFleetType.CarrierTaskForceFleet:
                    case CombinedFleetType.TransportEscortFleet:
                        if (raw.ShellingPhase1 != null)
                        {
                            phases.Add(ShellingPhase1 = new ShellingPhase(1, masterData, Ally, Enemy, raw.ShellingPhase1));
                        }
                        if (raw.ShellingPhase2 != null)
                        {
                            phases.Add(ShellingPhase2 = new ShellingPhase(2, masterData, Ally, Enemy, raw.ShellingPhase2));
                        }
                        if (raw.ClosingTorpedoPhase != null)
                        {
                            phases.Add(ClosingTorpedoPhase = new TorpedoPhase(masterData, Ally, Enemy, raw.ClosingTorpedoPhase, false));
                        }
                        if (raw.ShellingPhase3 != null)
                        {
                            phases.Add(ShellingPhase3 = new ShellingPhase(3, masterData, Ally, Enemy, raw.ShellingPhase3));
                        }
                        break;

                    case CombinedFleetType.SurfaceTaskForceFleet:
                        if (raw.ShellingPhase1 != null)
                        {
                            phases.Add(ShellingPhase1 = new ShellingPhase(1, masterData, Ally, Enemy, raw.ShellingPhase1));
                        }
                        if (raw.ShellingPhase2 != null)
                        {
                            phases.Add(ShellingPhase2 = new ShellingPhase(2, masterData, Ally, Enemy, raw.ShellingPhase2));
                        }
                        if (raw.ShellingPhase3 != null)
                        {
                            phases.Add(ShellingPhase3 = new ShellingPhase(3, masterData, Ally, Enemy, raw.ShellingPhase3));
                        }
                        if (raw.ClosingTorpedoPhase != null)
                        {
                            phases.Add(ClosingTorpedoPhase = new TorpedoPhase(masterData, Ally, Enemy, raw.ClosingTorpedoPhase, false));
                        }
                        break;
                    }
                }
                else
                {
                    switch (FleetType)
                    {
                    case CombinedFleetType.None:
                        if (raw.ShellingPhase1 != null)
                        {
                            phases.Add(ShellingPhase1 = new ShellingPhase(1, masterData, Ally, Enemy, raw.ShellingPhase1));
                        }
                        if (raw.ShellingPhase2 != null)
                        {
                            phases.Add(ShellingPhase2 = new ShellingPhase(2, masterData, Ally, Enemy, raw.ShellingPhase2));
                        }
                        if (raw.ClosingTorpedoPhase != null)
                        {
                            phases.Add(ClosingTorpedoPhase = new TorpedoPhase(masterData, Ally, Enemy, raw.ClosingTorpedoPhase, false));
                        }
                        break;

                    case CombinedFleetType.CarrierTaskForceFleet:
                    case CombinedFleetType.TransportEscortFleet:
                        if (raw.ShellingPhase1 != null)
                        {
                            phases.Add(ShellingPhase1 = new ShellingPhase(1, masterData, Ally, Enemy, raw.ShellingPhase1, true));
                        }
                        if (raw.ClosingTorpedoPhase != null)
                        {
                            phases.Add(ClosingTorpedoPhase = new TorpedoPhase(masterData, Ally, Enemy, raw.ClosingTorpedoPhase, false));
                        }
                        if (raw.ShellingPhase2 != null)
                        {
                            phases.Add(ShellingPhase2 = new ShellingPhase(2, masterData, Ally, Enemy, raw.ShellingPhase2, false));
                        }
                        if (raw.ShellingPhase3 != null)
                        {
                            phases.Add(ShellingPhase3 = new ShellingPhase(3, masterData, Ally, Enemy, raw.ShellingPhase3, false));
                        }
                        break;

                    case CombinedFleetType.SurfaceTaskForceFleet:
                        if (raw.ShellingPhase1 != null)
                        {
                            phases.Add(ShellingPhase1 = new ShellingPhase(1, masterData, Ally, Enemy, raw.ShellingPhase1, false));
                        }
                        if (raw.ShellingPhase2 != null)
                        {
                            phases.Add(ShellingPhase2 = new ShellingPhase(2, masterData, Ally, Enemy, raw.ShellingPhase2, false));
                        }
                        if (raw.ShellingPhase3 != null)
                        {
                            phases.Add(ShellingPhase3 = new ShellingPhase(3, masterData, Ally, Enemy, raw.ShellingPhase3, true));
                        }
                        if (raw.ClosingTorpedoPhase != null)
                        {
                            phases.Add(ClosingTorpedoPhase = new TorpedoPhase(masterData, Ally, Enemy, raw.ClosingTorpedoPhase, false));
                        }
                        break;
                    }
                }

                Ally.Fleet?.CompleteAppendBattlePart();
                Ally.Fleet2?.CompleteAppendBattlePart();
                Enemy.Fleet?.CompleteAppendBattlePart();
                Enemy.Fleet2?.CompleteAppendBattlePart();
                Ally.UpdateDamageRate();
                Enemy.UpdateDamageRate();

                switch (Kind)
                {
                case BattleKind.AirDefence:
                case BattleKind.RadarDefence:
                    Rank = Ally.DamageRate switch
                    {
                        var r when r <= 0 => BattleRank.Perfect,
                        var r when r < 0.1 => BattleRank.A,
                        var r when r < 0.2 => BattleRank.B,
                        var r when r < 0.5 => BattleRank.C,
                        var r when r < 0.8 => BattleRank.D,
                                   _ => BattleRank.E,
                    };
                    break;

                default:
                    int allyPercentage  = (int)(Ally.DamageRate * 100);
                    int enemyPercentage = (int)(Enemy.DamageRate * 100);
                    if (Ally.SunkCount == 0)
                    {
                        if (Enemy.SunkCount == Enemy.Count)
                        {
                            Rank = Ally.DamageRate <= 0 ? BattleRank.Perfect : BattleRank.S;
                        }
                        else if (Enemy.SunkCount >= Math.Round(Enemy.Count * 0.625))
                        {
                            Rank = BattleRank.A;
                        }
                        else if (Enemy.Fleet[0].IsSunk)
                        {
                            Rank = BattleRank.B;
                        }
                        else if (enemyPercentage > allyPercentage * 2.5)
                        {
                            Rank = BattleRank.B;
                        }
                        else if (enemyPercentage > allyPercentage * 0.9)
                        {
                            Rank = BattleRank.C;
                        }
                        else
                        {
                            Rank = BattleRank.D;
                        }
                    }
                    else
                    {
                        if (Enemy.SunkCount == Enemy.Count)
                        {
                            Rank = BattleRank.B;
                        }
                        else if (Enemy.Fleet[0].IsSunk && Ally.SunkCount < Enemy.SunkCount)
                        {
                            Rank = BattleRank.B;
                        }
                        else if (enemyPercentage > allyPercentage * 2.5)
                        {
                            Rank = BattleRank.B;
                        }
                        else if (enemyPercentage > allyPercentage * 0.9)
                        {
                            Rank = BattleRank.C;
                        }
                        else if (Ally.SunkCount < Math.Round(Ally.Count * 0.625))
                        {
                            Rank = BattleRank.D;
                        }
                        else
                        {
                            Rank = BattleRank.E;
                        }
                    }
                    break;
                }
            }
        }
Beispiel #25
0
 public MapAreaInfo(IRawMapArea raw, MasterDataRoot owner, DateTimeOffset timeStamp) : this(raw.Id, owner) => UpdateProps(raw, timeStamp);
Beispiel #26
0
 public MasterDataView(NavalBase navalBase)
 {
     MasterData = navalBase.MasterData;
     InitializeComponent();
 }