public ECFireCombat(Battle battle, sortie_battle.fire api) { var result = new List <Attack>(); for (int i = 0; i < api.api_df_list.Length; i++) { int sourceidx = api.api_at_list[i + 1]; bool direction = api.api_at_eflag[i + 1] == 0; var source = direction ? FindShip(sourceidx, battle.Fleet1, battle.Fleet2) : FindShip(sourceidx, battle.EnemyFleet, battle.EnemyFleet2); for (int j = 0; j < api.api_df_list[i].Length; j++) { int destidx = api.api_df_list[i][j]; var dest = direction ? FindShip(destidx, battle.EnemyFleet, battle.EnemyFleet2) : FindShip(destidx, battle.Fleet1, battle.Fleet2); var damage = Attack.ParseDamage(api.api_damage[i][j]); (var friend, var enemy) = direction ? (source, dest) : (dest, source); result.Add(new Attack { Friend = friend, Enemy = enemy, Direction = direction, Damage = damage.damage, IsCritical = api.api_cl_list[i][j] == 2, Shield = damage.shield }); } } ApplyAttacks(result); }
public FireCombat(sortie_battle.fire api, ShipInBattle[] friends, ShipInBattle[] enemies) { var result = new List <Attack>(); for (int i = 0; i < api.api_df_list.Length; i++) { int sourceidx = api.api_at_list[i + 1]; bool direction = sourceidx <= 6; var source = FindShip(sourceidx, friends, enemies); for (int j = 0; j < api.api_df_list[i].Length; j++) { int destidx = api.api_df_list[i][0]; var dest = FindShip(destidx, friends, enemies); var damage = Attack.ParseDamage(api.api_damage[i][j]); (var friend, var enemy) = direction ? (source, dest) : (dest, source); result.Add(new Attack { Friend = friend, Enemy = enemy, Direction = direction, Damage = damage.damage, IsCritical = api.api_cl_list[i][j] == 2, Shield = damage.shield }); } } ApplyAttacks(result); }
private void FireAttack(sortie_battle.fire api, ShipInBattle[] fleet, ShipInBattle[] enemy) { if (api == null) { return; } api.api_df_list.ZipEach(api.api_damage, (x, y) => x.ZipEach(y, (a, b) => Delegates.SetDamage(FindShip(a, fleet, enemy), b))); api.api_damage.ArrayZip(api.api_at_list, 1, (x, y) => x.ForEach(d => Delegates.SetGiveDamage(FindShip(y, fleet, enemy), d))); }
private void ECFireAttack(sortie_battle.fire api) { if (api == null) { return; } for (int i = 1; i < api.api_at_eflag.Length; i++) { if (api.api_at_eflag[i] == 0) { api.api_df_list[i - 1].ZipEach(api.api_damage[i - 1], (x, y) => Delegates.SetDamage(FindEnemy(x), y)); Delegates.SetGiveDamage(FindFriend(api.api_at_list[i]), api.api_damage[i - 1].Sum()); } else { api.api_df_list[i - 1].ZipEach(api.api_damage[i - 1], (x, y) => Delegates.SetDamage(FindFriend(x), y)); Delegates.SetGiveDamage(FindEnemy(api.api_at_list[i]), api.api_damage[i - 1].Sum()); } } }
private void FireAttack(sortie_battle.fire api, ShipInBattle[] fleet) => FireAttack(api, fleet, EnemyFleet);