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); }
public ExpeditionInfo(IRawExpeditionInfo raw, MasterDataRoot owner, DateTimeOffset timeStamp) : this(raw.Id, owner) => UpdateProps(raw, timeStamp);
public UseItemInfo(UseItemId id, MasterDataRoot owner) : base(id) { this.owner = owner; NameTranslation = owner.Localization?.GetLocalized("UseItem", id.ToString()); CreateDummy(); }
public MapAreaInfo(MapAreaId id, MasterDataRoot owner) : base(id) { this.owner = owner; NameTranslation = owner.Localization?.GetLocalized("MapArea", id.ToString()); CreateDummy(); }
public TorpedoPhase(MasterDataRoot masterData, Side ally, Side enemy, RawTorpedoPhase raw, bool isOpening) : base(Initialze(masterData, raw, new Builder(ally, enemy))) => IsOpening = isOpening;
public EquipmentTypeInfo(EquipmentTypeId id, MasterDataRoot owner) : base(id) { this.owner = owner; NameTranslation = owner.Localization?.GetLocalized("EquipType", id.ToString()); CreateDummy(); }
public ShipTypeInfo(ShipTypeId id, MasterDataRoot owner) : base(id) { this.owner = owner; CreateDummy(); }
public AerialSide(MasterDataRoot masterData, in RawAerialSide raw, Side side)
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
public ShipInfo(ShipInfoId id, MasterDataRoot owner) : base(id) { this.owner = owner; Introduction.Translation = owner.Localization?.GetLocalized("ShipIntro", id.ToString()); CreateDummy(); }
public LandBasePhase(int index, MasterDataRoot masterData, Side enemy, RawLandBaseAerialPhase raw) : base(index, masterData, null, enemy, raw) { }
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); }
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) { }
public NpcPhase(MasterDataRoot masterData, IReadOnlyList <BattleParticipant> npcFleet, Side enemy, RawNightPhase raw) : base(0, masterData, npcFleet, enemy, raw) => NpcFleet = npcFleet;
public OpeningAswPhase(MasterDataRoot masterData, Side ally, Side enemy, RawShellingPhase raw) : base(0, masterData, ally, enemy, raw, true) { }
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); }
public ShipTypeInfo(IRawShipTypeInfo raw, MasterDataRoot owner, DateTimeOffset timeStamp) : this(raw.Id, owner) => UpdateProps(raw, timeStamp);
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); }
public EquipmentInfo(IRawEquipmentInfo raw, MasterDataRoot owner, DateTimeOffset timeStamp) : this(raw.Id, owner) => UpdateProps(raw, timeStamp);
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))) { }
public UseItemInfo(IRawUseItem raw, MasterDataRoot owner, DateTimeOffset timeStamp) : this(raw.Id, owner) => UpdateProps(raw, timeStamp);
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; } } }
public MapAreaInfo(IRawMapArea raw, MasterDataRoot owner, DateTimeOffset timeStamp) : this(raw.Id, owner) => UpdateProps(raw, timeStamp);
public MasterDataView(NavalBase navalBase) { MasterData = navalBase.MasterData; InitializeComponent(); }