Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 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)));
 }
Exemplo n.º 4
0
 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());
         }
     }
 }
Exemplo n.º 5
0
 private void FireAttack(sortie_battle.fire api, ShipInBattle[] fleet) => FireAttack(api, fleet, EnemyFleet);