public void Play(HougekiModel hougeki, int nCurrentShellingCnt, bool isNextAttack, Action onFinished)
        {
            if (hougeki == null)
            {
                this.OnShellingFinished();
            }
            this._clsHougekiModel = hougeki;
            this._isFinished      = false;
            this._isPlaying       = true;
            this._actCallback     = onFinished;
            switch (hougeki.AttackType)
            {
            case BattleAttackKind.Normal:
                if (this._clsHougekiModel.GetRocketEffenct())
                {
                    if (this._prodAntiGroundAttack == null)
                    {
                        this._prodAntiGroundAttack = new ProdAntiGroundAttack();
                    }
                    this._clsStatement.AddState(new DelProdShellingAttack(this._prodAntiGroundAttack.PlayAttack), new DelProdShellingUpdate(this._prodAntiGroundAttack.Update), new DelProdShellingClear(this._prodAntiGroundAttack.Clear));
                }
                else
                {
                    if (this._prodNormalAttack == null)
                    {
                        this._prodNormalAttack = new ProdNormalAttack();
                    }
                    this._clsStatement.AddState(new DelProdShellingAttack(this._prodNormalAttack.PlayAttack), new DelProdShellingUpdate(this._prodNormalAttack.Update), new DelProdShellingClear(this._prodNormalAttack.Clear));
                }
                break;

            case BattleAttackKind.Bakurai:
                if (this._prodDepthChargeAttack == null)
                {
                    this._prodDepthChargeAttack = new ProdDepthChargeAttack();
                }
                this._clsStatement.AddState(new DelProdShellingAttack(this._prodDepthChargeAttack.PlayAttack), new DelProdShellingUpdate(this._prodDepthChargeAttack.Update), new DelProdShellingClear(this._prodDepthChargeAttack.Clear));
                break;

            case BattleAttackKind.Gyorai:
                if (this._prodTorpedoAttack == null)
                {
                    this._prodTorpedoAttack = new ProdTorpedoAttack();
                }
                this._clsStatement.AddState(new DelProdShellingAttack(this._prodTorpedoAttack.PlayAttack), new DelProdShellingUpdate(this._prodTorpedoAttack.Update), new DelProdShellingClear(this._prodTorpedoAttack.Clear));
                break;

            case BattleAttackKind.AirAttack:
                if (this._prodAircraftAttack == null)
                {
                    this._prodAircraftAttack = new ProdAircraftAttack();
                }
                this._clsStatement.AddState(new DelProdShellingAttack(this._prodAircraftAttack.PlayAttack), new DelProdShellingUpdate(this._prodAircraftAttack.Update), new DelProdShellingClear(this._prodAircraftAttack.Clear));
                break;

            case BattleAttackKind.Laser:
                if (this._prodLaserAttack == null)
                {
                    this._prodLaserAttack = new ProdLaserAttack();
                }
                this._clsStatement.AddState(new DelProdShellingAttack(this._prodLaserAttack.PlayAttack), new DelProdShellingUpdate(this._prodLaserAttack.Update), new DelProdShellingClear(this._prodLaserAttack.Clear));
                break;

            case BattleAttackKind.Renzoku:
                if (this._prodSuccessiveAttack == null)
                {
                    this._prodSuccessiveAttack = new ProdSuccessiveAttack();
                }
                this._clsStatement.AddState(new DelProdShellingAttack(this._prodSuccessiveAttack.PlayAttack), new DelProdShellingUpdate(this._prodSuccessiveAttack.Update), new DelProdShellingClear(this._prodSuccessiveAttack.Clear));
                break;

            case BattleAttackKind.Sp1:
            case BattleAttackKind.Sp2:
            case BattleAttackKind.Sp3:
            case BattleAttackKind.Sp4:
                if (this._prodObservedShellingAttack == null)
                {
                    this._prodObservedShellingAttack = new ProdObservedShellingAttack();
                }
                this._clsStatement.AddState(new DelProdShellingAttack(this._prodObservedShellingAttack.PlayAttack), new DelProdShellingUpdate(this._prodObservedShellingAttack.Update), new DelProdShellingClear(this._prodObservedShellingAttack.Clear));
                break;

            case BattleAttackKind.Syu_Rai:
            case BattleAttackKind.Rai_Rai:
            case BattleAttackKind.Syu_Syu_Fuku:
            case BattleAttackKind.Syu_Syu_Syu:
                if (this._prodTranscendenceAttack == null)
                {
                    this._prodTranscendenceAttack = new ProdTranscendenceAttack();
                }
                this._clsStatement.AddState(new DelProdShellingAttack(this._prodTranscendenceAttack.PlayAttack), new DelProdShellingUpdate(this._prodTranscendenceAttack.Update), new DelProdShellingClear(this._prodTranscendenceAttack.Clear));
                break;
            }
            this._clsStatement.Init(this._clsHougekiModel, nCurrentShellingCnt, isNextAttack, this._dicAttackFleet.get_Item((!this.hougekiModel.Attacker.IsFriend()) ? FleetType.Enemy : FleetType.Friend), new Action(this.OnShellingFinished));
        }
        public void Play(HougekiModel hougeki, int nCurrentShellingCnt, bool isNextAttack, Action onFinished)
        {
            if (hougeki == null)
            {
                OnShellingFinished();
            }
            _clsHougekiModel = hougeki;
            _isFinished      = false;
            _isPlaying       = true;
            _actCallback     = onFinished;
            switch (hougeki.AttackType)
            {
            case BattleAttackKind.Normal:
                if (_clsHougekiModel.GetRocketEffenct())
                {
                    if (_prodAntiGroundAttack == null)
                    {
                        _prodAntiGroundAttack = new ProdAntiGroundAttack();
                    }
                    Statement             clsStatement5         = _clsStatement;
                    ProdAntiGroundAttack  prodAntiGroundAttack  = _prodAntiGroundAttack;
                    DelProdShellingAttack initdelegate5         = prodAntiGroundAttack.PlayAttack;
                    ProdAntiGroundAttack  prodAntiGroundAttack2 = _prodAntiGroundAttack;
                    DelProdShellingUpdate updatedelegate5       = prodAntiGroundAttack2.Update;
                    ProdAntiGroundAttack  prodAntiGroundAttack3 = _prodAntiGroundAttack;
                    clsStatement5.AddState(initdelegate5, updatedelegate5, prodAntiGroundAttack3.Clear);
                }
                else
                {
                    if (_prodNormalAttack == null)
                    {
                        _prodNormalAttack = new ProdNormalAttack();
                    }
                    Statement             clsStatement6     = _clsStatement;
                    ProdNormalAttack      prodNormalAttack  = _prodNormalAttack;
                    DelProdShellingAttack initdelegate6     = prodNormalAttack.PlayAttack;
                    ProdNormalAttack      prodNormalAttack2 = _prodNormalAttack;
                    DelProdShellingUpdate updatedelegate6   = prodNormalAttack2.Update;
                    ProdNormalAttack      prodNormalAttack3 = _prodNormalAttack;
                    clsStatement6.AddState(initdelegate6, updatedelegate6, prodNormalAttack3.Clear);
                }
                break;

            case BattleAttackKind.Bakurai:
            {
                if (_prodDepthChargeAttack == null)
                {
                    _prodDepthChargeAttack = new ProdDepthChargeAttack();
                }
                Statement             clsStatement9          = _clsStatement;
                ProdDepthChargeAttack prodDepthChargeAttack  = _prodDepthChargeAttack;
                DelProdShellingAttack initdelegate9          = prodDepthChargeAttack.PlayAttack;
                ProdDepthChargeAttack prodDepthChargeAttack2 = _prodDepthChargeAttack;
                DelProdShellingUpdate updatedelegate9        = prodDepthChargeAttack2.Update;
                ProdDepthChargeAttack prodDepthChargeAttack3 = _prodDepthChargeAttack;
                clsStatement9.AddState(initdelegate9, updatedelegate9, prodDepthChargeAttack3.Clear);
                break;
            }

            case BattleAttackKind.Gyorai:
            {
                if (_prodTorpedoAttack == null)
                {
                    _prodTorpedoAttack = new ProdTorpedoAttack();
                }
                Statement             clsStatement7      = _clsStatement;
                ProdTorpedoAttack     prodTorpedoAttack  = _prodTorpedoAttack;
                DelProdShellingAttack initdelegate7      = prodTorpedoAttack.PlayAttack;
                ProdTorpedoAttack     prodTorpedoAttack2 = _prodTorpedoAttack;
                DelProdShellingUpdate updatedelegate7    = prodTorpedoAttack2.Update;
                ProdTorpedoAttack     prodTorpedoAttack3 = _prodTorpedoAttack;
                clsStatement7.AddState(initdelegate7, updatedelegate7, prodTorpedoAttack3.Clear);
                break;
            }

            case BattleAttackKind.AirAttack:
            {
                if (_prodAircraftAttack == null)
                {
                    _prodAircraftAttack = new ProdAircraftAttack();
                }
                Statement             clsStatement3       = _clsStatement;
                ProdAircraftAttack    prodAircraftAttack  = _prodAircraftAttack;
                DelProdShellingAttack initdelegate3       = prodAircraftAttack.PlayAttack;
                ProdAircraftAttack    prodAircraftAttack2 = _prodAircraftAttack;
                DelProdShellingUpdate updatedelegate3     = prodAircraftAttack2.Update;
                ProdAircraftAttack    prodAircraftAttack3 = _prodAircraftAttack;
                clsStatement3.AddState(initdelegate3, updatedelegate3, prodAircraftAttack3.Clear);
                break;
            }

            case BattleAttackKind.Laser:
            {
                if (_prodLaserAttack == null)
                {
                    _prodLaserAttack = new ProdLaserAttack();
                }
                Statement             clsStatement2    = _clsStatement;
                ProdLaserAttack       prodLaserAttack  = _prodLaserAttack;
                DelProdShellingAttack initdelegate2    = ((BaseProdAttackShelling)prodLaserAttack).PlayAttack;
                ProdLaserAttack       prodLaserAttack2 = _prodLaserAttack;
                DelProdShellingUpdate updatedelegate2  = prodLaserAttack2.Update;
                ProdLaserAttack       prodLaserAttack3 = _prodLaserAttack;
                clsStatement2.AddState(initdelegate2, updatedelegate2, prodLaserAttack3.Clear);
                break;
            }

            case BattleAttackKind.Renzoku:
            {
                if (_prodSuccessiveAttack == null)
                {
                    _prodSuccessiveAttack = new ProdSuccessiveAttack();
                }
                Statement             clsStatement8         = _clsStatement;
                ProdSuccessiveAttack  prodSuccessiveAttack  = _prodSuccessiveAttack;
                DelProdShellingAttack initdelegate8         = prodSuccessiveAttack.PlayAttack;
                ProdSuccessiveAttack  prodSuccessiveAttack2 = _prodSuccessiveAttack;
                DelProdShellingUpdate updatedelegate8       = prodSuccessiveAttack2.Update;
                ProdSuccessiveAttack  prodSuccessiveAttack3 = _prodSuccessiveAttack;
                clsStatement8.AddState(initdelegate8, updatedelegate8, prodSuccessiveAttack3.Clear);
                break;
            }

            case BattleAttackKind.Sp1:
            case BattleAttackKind.Sp2:
            case BattleAttackKind.Sp3:
            case BattleAttackKind.Sp4:
            {
                if (_prodObservedShellingAttack == null)
                {
                    _prodObservedShellingAttack = new ProdObservedShellingAttack();
                }
                Statement clsStatement4 = _clsStatement;
                ProdObservedShellingAttack prodObservedShellingAttack = _prodObservedShellingAttack;
                DelProdShellingAttack      initdelegate4 = prodObservedShellingAttack.PlayAttack;
                ProdObservedShellingAttack prodObservedShellingAttack2 = _prodObservedShellingAttack;
                DelProdShellingUpdate      updatedelegate4             = prodObservedShellingAttack2.Update;
                ProdObservedShellingAttack prodObservedShellingAttack3 = _prodObservedShellingAttack;
                clsStatement4.AddState(initdelegate4, updatedelegate4, prodObservedShellingAttack3.Clear);
                break;
            }

            case BattleAttackKind.Syu_Rai:
            case BattleAttackKind.Rai_Rai:
            case BattleAttackKind.Syu_Syu_Fuku:
            case BattleAttackKind.Syu_Syu_Syu:
            {
                if (_prodTranscendenceAttack == null)
                {
                    _prodTranscendenceAttack = new ProdTranscendenceAttack();
                }
                Statement clsStatement = _clsStatement;
                ProdTranscendenceAttack prodTranscendenceAttack  = _prodTranscendenceAttack;
                DelProdShellingAttack   initdelegate             = prodTranscendenceAttack.PlayAttack;
                ProdTranscendenceAttack prodTranscendenceAttack2 = _prodTranscendenceAttack;
                DelProdShellingUpdate   updatedelegate           = prodTranscendenceAttack2.Update;
                ProdTranscendenceAttack prodTranscendenceAttack3 = _prodTranscendenceAttack;
                clsStatement.AddState(initdelegate, updatedelegate, prodTranscendenceAttack3.Clear);
                break;
            }
            }
            _clsStatement.Init(_clsHougekiModel, nCurrentShellingCnt, isNextAttack, _dicAttackFleet[(!hougekiModel.Attacker.IsFriend()) ? FleetType.Enemy : FleetType.Friend], OnShellingFinished);
        }