protected void ParseAttacks(Battle battle, sortie_battle.airbattle api, ShipInBattle friendtorpedo, ShipInBattle friendbomb, ShipInBattle enemytorpedo, ShipInBattle enemybomb) { var result = Enumerable.Empty <Attack>(); void ParseStage3(sortie_battle.airbattle.stage3 stage3, ShipInBattle[] friend, ShipInBattle[] enemy) { if (stage3 == null) { return; } if (stage3.api_fdam != null) { result = result.Concat(ParseAttack(stage3.api_fdam, stage3.api_frai_flag, stage3.api_fbak_flag, stage3.api_fcl_flag, false, friend, enemytorpedo, enemybomb)); } if (stage3.api_edam != null) { result = result.Concat(ParseAttack(stage3.api_edam, stage3.api_erai_flag, stage3.api_ebak_flag, stage3.api_ecl_flag, true, enemy, friendtorpedo, friendbomb)); } } ParseStage3(api.api_stage3, battle.Fleet1, battle.EnemyFleet); ParseStage3(api.api_stage3_combined, battle.Fleet2, battle.EnemyFleet2); ApplyAttacks(result, battle); }
protected AerialBase(sortie_battle.airbattle api) { if (api.api_stage1 != null) { FriendStage1 = new LimitedValue(api.api_stage1.api_f_count - api.api_stage1.api_f_lostcount, api.api_stage1.api_f_count); EnemyStage1 = new LimitedValue(api.api_stage1.api_e_count - api.api_stage1.api_e_lostcount, api.api_stage1.api_e_count); } if (api.api_stage2 != null) { FriendStage2 = new LimitedValue(api.api_stage2.api_f_count - api.api_stage2.api_f_lostcount, api.api_stage2.api_f_count); EnemyStage2 = new LimitedValue(api.api_stage2.api_e_count - api.api_stage2.api_e_lostcount, api.api_stage2.api_e_count); } }
public AirBaseAttack(Battle battle, sortie_battle.airbattle api) : base(api) { //SquadronList = api.api_squadron_plane.Select(x => new Squadron //{ // Plane = Staff.Current.MasterData.EquipInfo[x.api_mst_id], // Count = x.api_count //}).ToArray(); if (api.api_stage1 != null) { AirControl = (AirControl)api.api_stage1.api_disp_seiku; } ParseAttacks(battle, api, null, null, null, null); }
public AerialSupport(Battle battle, sortie_battle.airbattle api) : base(api) { if (api.api_stage1 != null) { AirControl = (AirControl)api.api_stage1.api_disp_seiku; } ShipInBattle enemytorpedo = null, enemybomb = null; enemytorpedo = battle.EnemyFleet.Where(x => x.CanAerialTorpedo).TakeIfSingle(); enemybomb = battle.EnemyFleet.Where(x => x.CanAerialBomb).TakeIfSingle(); ParseAttacks(battle, api, null, null, enemytorpedo, enemybomb); }
public JetPlaneAttack(Battle battle, sortie_battle.airbattle api, bool isSupport) : base(api) { ShipInBattle friendjet = null, enemyjet = null; if (!isSupport) { if (api.api_plane_from[0]?.Length == 1 && api.api_plane_from[0][0] > 0) { friendjet = battle.Fleet1[api.api_plane_from[0][0] - 1]; } if (api.api_plane_from.Length >= 2 && api.api_plane_from[1]?.Length == 1 && api.api_plane_from[1][0] > 0) { enemyjet = battle.EnemyFleet[api.api_plane_from[1][0] - 1]; } } ParseAttacks(battle, api, null, friendjet, null, enemyjet); }
public AerialCombat(Battle battle, sortie_battle.airbattle api) : base(api) { if (api.api_stage1 != null) { AirControl = (AirControl)api.api_stage1.api_disp_seiku; FriendTouch = Staff.Current.MasterData.EquipInfo[api.api_stage1.api_touch_plane[0]]; EnemyTouch = Staff.Current.MasterData.EquipInfo[api.api_stage1.api_touch_plane[1]]; } if (api.api_stage2?.api_air_fire != null) { AntiAir = new AntiAirCutin(battle, api.api_stage2.api_air_fire); } ShipInBattle friendtorpedo = null, friendbomb = null, enemytorpedo = null, enemybomb = null; friendtorpedo = battle.Fleet1.Where(x => x.CanAerialTorpedo).TakeIfSingle(); friendbomb = battle.Fleet1.Where(x => x.CanAerialBomb).TakeIfSingle(); enemytorpedo = battle.EnemyFleet.Where(x => x.CanAerialTorpedo).TakeIfSingle(); enemybomb = battle.EnemyFleet.Where(x => x.CanAerialBomb).TakeIfSingle(); ParseAttacks(battle, api, friendtorpedo, friendbomb, enemytorpedo, enemybomb); }
private AirCombat AirBattle(sortie_battle.airbattle api, bool issupport) { if (api == null) { return(null); } AirCombat combat = new AirCombat(); ShipInBattle friendtorpedo = null, friendbomb = null, enemytorpedo = null, enemybomb = null; if (!issupport) { if (api.api_stage1 != null)//stage1一直都有吧 { combat.AirControl = (AirControl)api.api_stage1.api_disp_seiku; combat.FriendStage1 = new LimitedValue(api.api_stage1.api_f_count - api.api_stage1.api_f_lostcount, api.api_stage1.api_f_count); combat.EnemyStage1 = new LimitedValue(api.api_stage1.api_e_count - api.api_stage1.api_e_lostcount, api.api_stage1.api_e_count); } if (api.api_stage2 != null) { combat.FriendStage2 = new LimitedValue(api.api_stage2.api_f_count - api.api_stage2.api_f_lostcount, api.api_stage2.api_f_count); combat.EnemyStage2 = new LimitedValue(api.api_stage2.api_e_count - api.api_stage2.api_e_lostcount, api.api_stage2.api_e_count); } friendtorpedo = Fleet1.Where(x => x.CanAerialTorpedo).TakeIfSingle(); friendbomb = Fleet1.Where(x => x.CanAerialBomb).TakeIfSingle(); enemytorpedo = EnemyFleet.Where(x => x.CanAerialTorpedo).TakeIfSingle(); enemybomb = EnemyFleet.Where(x => x.CanAerialBomb).TakeIfSingle(); } if (api.api_stage3 != null) { if (!issupport) { Fleet1.ArrayZip(api.api_stage3.api_fdam, 1, Delegates.SetDamage); } EnemyFleet.ArrayZip(api.api_stage3.api_edam, 1, Delegates.SetDamage); if (!issupport) { for (int i = 1; i < api.api_stage3.api_fdam.Length; i++) { if (api.api_stage3.api_frai_flag[i] != 0) { if (api.api_stage3.api_fbak_flag[i] != 0) { if (enemytorpedo == enemybomb && enemytorpedo != null) { enemytorpedo.DamageGiven += (int)api.api_stage3.api_fdam[i]; } else { AnonymousEnemyDamage += (int)api.api_stage3.api_fdam[i]; } } else if (enemytorpedo != null) { enemytorpedo.DamageGiven += (int)api.api_stage3.api_fdam[i]; } else { AnonymousEnemyDamage += (int)api.api_stage3.api_fdam[i]; } } else if (api.api_stage3.api_fbak_flag[i] != 0) { if (enemybomb != null) { enemybomb.DamageGiven += (int)api.api_stage3.api_fdam[i]; } else { AnonymousEnemyDamage += (int)api.api_stage3.api_fdam[i]; } } } for (int i = 1; i < api.api_stage3.api_edam.Length; i++) { if (api.api_stage3.api_erai_flag[i] != 0) { if (api.api_stage3.api_ebak_flag[i] != 0) { if (friendtorpedo == friendbomb && friendtorpedo != null) { friendtorpedo.DamageGiven += (int)api.api_stage3.api_edam[i]; } else { AnonymousFriendDamage += (int)api.api_stage3.api_edam[i]; } } else if (friendtorpedo != null) { friendtorpedo.DamageGiven += (int)api.api_stage3.api_edam[i]; } else { AnonymousFriendDamage += (int)api.api_stage3.api_edam[i]; } } else if (api.api_stage3.api_ebak_flag[i] != 0) { if (friendbomb != null) { friendbomb.DamageGiven += (int)api.api_stage3.api_edam[i]; } else { AnonymousFriendDamage += (int)api.api_stage3.api_edam[i]; } } } } } if (api.api_stage3_combined != null) { if (api.api_stage3_combined.api_fdam != null) { Fleet2?.ArrayZip(api.api_stage3_combined.api_fdam, 1, Delegates.SetDamage); for (int i = 1; i < api.api_stage3_combined.api_fdam.Length; i++) { if (api.api_stage3_combined.api_frai_flag[i] != 0) { if (api.api_stage3_combined.api_fbak_flag[i] != 0) { if (enemytorpedo == enemybomb && enemytorpedo != null) { enemytorpedo.DamageGiven += (int)api.api_stage3_combined.api_fdam[i]; } else { AnonymousEnemyDamage += (int)api.api_stage3_combined.api_fdam[i]; } } else if (enemytorpedo != null) { enemytorpedo.DamageGiven += (int)api.api_stage3_combined.api_fdam[i]; } else { AnonymousEnemyDamage += (int)api.api_stage3_combined.api_fdam[i]; } } else if (api.api_stage3_combined.api_fbak_flag[i] != 0) { if (enemybomb != null) { enemybomb.DamageGiven += (int)api.api_stage3_combined.api_fdam[i]; } else { AnonymousEnemyDamage += (int)api.api_stage3_combined.api_fdam[i]; } } } } if (api.api_stage3_combined.api_edam != null) { EnemyFleet2?.ArrayZip(api.api_stage3_combined.api_edam, 1, Delegates.SetDamage); for (int i = 1; i < api.api_stage3_combined.api_edam.Length; i++) { if (api.api_stage3_combined.api_erai_flag[i] != 0) { if (api.api_stage3_combined.api_ebak_flag[i] != 0) { if (friendtorpedo == friendbomb && friendtorpedo != null) { friendtorpedo.DamageGiven += (int)api.api_stage3_combined.api_edam[i]; } else { AnonymousFriendDamage += (int)api.api_stage3_combined.api_edam[i]; } } else if (friendtorpedo != null) { friendtorpedo.DamageGiven += (int)api.api_stage3_combined.api_edam[i]; } else { AnonymousFriendDamage += (int)api.api_stage3_combined.api_edam[i]; } } else if (api.api_stage3_combined.api_ebak_flag[i] != 0) { if (friendbomb != null) { friendbomb.DamageGiven += (int)api.api_stage3_combined.api_edam[i]; } else { AnonymousFriendDamage += (int)api.api_stage3_combined.api_edam[i]; } } } } } return(combat); }
private void JetAttack(sortie_battle.airbattle api) { if (api == null) { return; } ShipInBattle friendattack = null, enemyattack = null; if (api.api_plane_from[0]?.Length == 1 && api.api_plane_from[0][0] > 0) { friendattack = Fleet1[api.api_plane_from[0][0] - 1]; } if (api.api_plane_from.Length >= 2 && api.api_plane_from[1]?.Length == 1 && api.api_plane_from[1][0] > 0) { enemyattack = EnemyFleet[api.api_plane_from[1][0] - 1]; } if (api.api_stage3 != null) { if (api.api_stage3.api_edam != null) { EnemyFleet.ArrayZip(api.api_stage3.api_edam, 1, Delegates.SetDamage); for (int i = 1; i < api.api_stage3.api_edam.Length; i++) { if (friendattack != null) { friendattack.DamageGiven += (int)api.api_stage3.api_edam[i]; } else { AnonymousEnemyDamage += (int)api.api_stage3.api_edam[i]; } } } if (api.api_stage3.api_fdam != null) { Fleet1.ArrayZip(api.api_stage3.api_fdam, 1, Delegates.SetDamage); for (int i = 1; i < api.api_stage3.api_fdam.Length; i++) { if (enemyattack != null) { enemyattack.DamageGiven += (int)api.api_stage3.api_fdam[i]; } else { AnonymousEnemyDamage += (int)api.api_stage3.api_fdam[i]; } } } } if (api.api_stage3_combined != null) { if (api.api_stage3_combined.api_fdam != null) { Fleet2?.ArrayZip(api.api_stage3.api_fdam, 1, Delegates.SetDamage); for (int i = 1; i < api.api_stage3.api_fdam.Length; i++) { if (enemyattack != null) { enemyattack.DamageGiven += (int)api.api_stage3.api_fdam[i]; } else { AnonymousEnemyDamage += (int)api.api_stage3.api_fdam[i]; } } } if (api.api_stage3_combined.api_edam != null) { EnemyFleet2?.ArrayZip(api.api_stage3.api_edam, 1, Delegates.SetDamage); for (int i = 1; i < api.api_stage3.api_edam.Length; i++) { if (friendattack != null) { friendattack.DamageGiven += (int)api.api_stage3.api_edam[i]; } else { AnonymousEnemyDamage += (int)api.api_stage3.api_edam[i]; } } } } }