Example #1
0
        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);
        }
Example #2
0
 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);
     }
 }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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];
                        }
                    }
                }
            }
        }