Ejemplo n.º 1
0
        /// <summary>
        /// Замена конструктора, процедура инициализации компонента отображения
        /// </summary>
        /// <param name="parModelSideProviderComponent">Связанный компонент на стороне модели</param>
        /// <param name="parLinkedEventsHandler">Связанный обработчик событий отображения</param>
        public override void InitAndLink(ViewProviderComponent parModelSideProviderComponent,
                                         ViewEventsOpenTkHandler parLinkedEventsHandler)
        {
            base.InitAndLink(parModelSideProviderComponent, parLinkedEventsHandler);
            _modelProviderComponent = (PocketGameViewProvider)parModelSideProviderComponent;

            _choosingShotAnimationInfobar =
                new PlayableAnimationObject(ActualSubassetsDataLibrary.GetAnimation(ANIM_INFOBAR_SHOT));

            _choosingShotPlayerCueAnimation =
                new PlayableAnimationObject(ActualSubassetsDataLibrary.GetAnimation(SHOT_HAND_CUE_ANIM));
        }
        /// <summary>
        /// Замена конструктора, процедура инициализации компонента отображения
        /// </summary>
        /// <param name="parModelSideProviderComponent">Связанный компонент на стороне модели</param>
        /// <param name="parLinkedEventsHandler">Связанный обработчик событий отображения</param>
        public override void InitAndLink(
            ViewProviderComponent parModelSideProviderComponent, ViewEventsOpenTkHandler parLinkedEventsHandler)
        {
            base.InitAndLink(parModelSideProviderComponent, parLinkedEventsHandler);

            _modelProviderComponent = (IntroViewProviderComponent)parModelSideProviderComponent;

            _currentAnimSheetIndex = ANIM_NAME_INTRO_CUTSCENE_INDEX_FROM;
            // TODO null setting is not nessesary
            _currentSpriteRenderingData = null;
            _introCutsceneAnimation     = null;

            ProcessNextAnimationSheet();
        }
        /// <summary>
        /// Обработать следующую анимацию
        /// </summary>
        private void ProcessNextAnimationSheet()
        {
            void PlayNextSheet()
            {
                string animationAssetName =
                    $"{ANIM_NAME_INTRO_CUTSCENE_START}{_currentAnimSheetIndex}{ANIM_NAME_INTRO_CUTSCENE_END}";

                _introCutsceneAnimation =
                    new PlayableAnimationObject(ActualSubassetsDataLibrary.GetAnimation(animationAssetName), 60);
                _introCutsceneAnimation.EventFullAnimCompleted += ProcessNextAnimationSheet;
            }

            _isAnimInProgress = true;
            if (_introCutsceneAnimation == null)
            {
                PlayNextSheet();
            }
            else
            {
                _currentFrameTotal += _introCutsceneAnimation.FrameCount;
                _introCutsceneAnimation.EventFullAnimCompleted -= ProcessNextAnimationSheet;
                _introCutsceneAnimation = null;

                _currentAnimSheetIndex++;


                if (_currentAnimSheetIndex > ANIM_NAME_INTRO_CUTSCENE_INDEX_TO)
                {
                    _isAnimInProgress = false;
                    _modelProviderComponent.OnIntroCutsceneEndedPerform?.Invoke();
                }
                else
                {
                    PlayNextSheet();
                }
            }
        }