/// <summary>
        /// Called when the user enters the main memory screen.
        /// </summary>
        private async void OnMessage_Received(MainMemoryScreenEnteredMessage message)
        {
            if (m_mediaPlayer == null)
            {
                string musicFile = GetNextMusicFile();
                if (string.IsNullOrEmpty(musicFile)) { return; }

                m_mediaPlayer = new MediaPlayerComponent();
                m_mediaPlayer.VideoClosed += OnMediaPlayer_VideoClosed;

                await m_mediaPlayer.OpenAndShowVideoFileAsync(musicFile);
                m_mediaPlayer.RestartWhenFinished = false;
            }

            // Fade in the video
            m_mediaPlayer.AudioVolume = 0f;
            while (m_mediaPlayer.AudioVolume < 0.3f)
            {
                await Task.Delay(50);
                m_mediaPlayer.AudioVolume = EngineMath.Clamp(m_mediaPlayer.AudioVolume + 0.02f, 0f, 1f);
            }
        }
Ejemplo n.º 2
0
        private void setPlayer()
        {
            MediaPlayerComponent player = new MediaPlayerComponent("Media Player/No Art", "Fonts/MaturaOptions", new Rectangle(52, 60, 160, 160), Color.White);

            player.setText(new Vector2(52, 310), new Vector2(52, 340), new Vector2(52, 280), Color.Red);
            player.setPlayPause(new StateButtonType("Media Player/Play", "Media Player/Pause", new Vector2(102, 242)));
            player.setStop(new ButtonType("Media Player/Stop", "Media Player/Stop Pressed", new Vector2(135, 242)));
            player.setShuffle(new StateButtonType("Media Player/Shuffle Button", "Media Player/Shuffle Pressed", new Vector2(18, 243)));
            player.setRepeat(new StateButtonType("Media Player/Repeat Button", "Media Player/Repeat Pressed", new Vector2(220, 241)));
            player.setNext(new ButtonType("Media Player/Next", "Media Player/Next Pressed", new Vector2(172, 242)));
            player.setPrevious(new ButtonType("Media Player/Previous", "Media Player/Previous Pressed", new Vector2(60, 242)));

            player.setTransitions(new MoveCollection(new Vector2(-200, 0), 15, true), new MoveCollection(new Vector2(200, 0), 15, false));
            addComponent(player);

            TextComponent text = new TextComponent("Fonts/MaturaOptions", "Volume:", new Vector2(52, 370), Color.Red);

            text.setTransitions(new MoveComponent(new Vector2(-200, 0), true, 15), new MoveComponent(new Vector2(200, 0), false, 15));
            addComponent(text);

            NumberSlideComponent slide = new NumberSlideComponent("Menus/Meter", "Menus/Knob", new Vector2(50, 400), new Rectangle(59, 400, 142, 25));

            slide.ChangeValue += ChangeVolume;
            slide.SetValue    += SetVolume;

            slide.setTransitions(new MoveCollection(new Vector2(-200, 0), 15, true), new MoveCollection(new Vector2(200, 0), 15, false));

            addComponent(slide);

            OptionsComponent options = new OptionsComponent("Fonts/MaturaOptions");

            options.addOption(new OptionType("Back", new Vector2(136, 430), Color.Red, OptionAction.previous, true, true, "Menus/Highlighter", new Vector2(137, 430)));
            options.setAlignment(TextAlignment.center);
            options.setTransitions(new MoveCollection(new Vector2(-200, 0), 15, true), new MoveCollection(new Vector2(200, 0), 15, false));
            addComponent(options);
        }
        /// <summary>
        /// Called when we have to unload all referenced resources.
        /// </summary>
        public override void UnloadResources()
        {
            base.UnloadResources();

            // Clear reference to the media player
            MediaPlayerComponent mediaPlayer = m_mediaPlayer;
            m_mediaPlayer = null;

            mediaPlayer.AudioVolume = 0f;
            if (mediaPlayer.State != MediaPlayerState.NothingToDo)
            {
                mediaPlayer.CloseVideoAsync()
                    .ContinueWith((givenTask) =>
                    {
                        m_mediaPlayer = null;
                    });
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Shows the ending image if available.
        /// </summary>
        private async Task ShowEndingImage()
        {
            if (string.IsNullOrEmpty(m_levelData.EndingImage)) { return; }

            // Start media player for background music
            if (!string.IsNullOrEmpty(m_levelData.EndingMusic))
            {
                m_mediaPlayer = new MediaPlayerComponent();
                m_mediaPlayer.RestartWhenFinished = true;
                m_mediaPlayer.AudioVolume = 0f;
                m_mediaPlayer.OpenAndShowVideoFileAsync(m_levelData.EndingMusic)
                    .ContinueWith(async (givenTask) =>
                    {
                        while(m_mediaPlayer.AudioVolume < 1f)
                        {
                            m_mediaPlayer.AudioVolume = EngineMath.Clamp(
                                m_mediaPlayer.AudioVolume + 0.1f,
                                0f, 1f);
                            await Task.Delay(100);
                        }
                    })
                    .FireAndForget();
            }

            // Prepare main variables
            NamedOrGenericKey resEndingImage = NamedOrGenericKey.Empty;
            TexturePainter objVideoPainter = null;

            // Attach the video texture to the scene
            Task imageAnimationTask = null;
            await base.Scene.ManipulateSceneAsync((manipulator) =>
            {
                // Create the layer (if necessary)
                if (!manipulator.ContainsLayer(Constants.GFX_LAYER_VIDEO_FOREGROUND))
                {
                    SceneLayer bgLayer = manipulator.AddLayer(Constants.GFX_LAYER_VIDEO_FOREGROUND);
                    bgLayer.ClearDepthBufferBefreRendering = true;
                    manipulator.SetLayerOrderID(
                        bgLayer,
                        Constants.GFX_LAYER_VIDEO_FOREGROUND_ORDERID);
                }

                // Load the texture painter
                resEndingImage = manipulator.AddResource(
                    () => new StandardTextureResource(m_levelData.EndingImage));
                objVideoPainter = new TexturePainter(resEndingImage);
                objVideoPainter.Scaling = 0.6f;
                objVideoPainter.AccentuationFactor = 1f;
                objVideoPainter.Opacity = 0.0f;
                imageAnimationTask = objVideoPainter.BuildAnimationSequence()
                    .Delay(300)
                    .WaitFinished()
                    .ScaleTo(0.9f, TimeSpan.FromMilliseconds(Constants.FADE_INOUT_ANIM_TIME))
                    .ChangeOpacityTo(1f, TimeSpan.FromMilliseconds(Constants.FADE_INOUT_ANIM_TIME))
                    .WaitFinished()
                    .Delay(10000)
                    .WaitFinished()
                    .ScaleTo(1.5f, TimeSpan.FromMilliseconds(Constants.FADE_INOUT_ANIM_TIME))
                    .ChangeOpacityTo(0f, TimeSpan.FromMilliseconds(Constants.FADE_INOUT_ANIM_TIME))
                    .ApplyAsync();

                manipulator.Add(
                    objVideoPainter,
                    Constants.GFX_LAYER_VIDEO_FOREGROUND);
            });

            // Close media-playing
            if(m_mediaPlayer != null)
            {
                imageAnimationTask.ContinueWith(async (givenTask) =>
                    {
                        while (m_mediaPlayer.AudioVolume > 0f)
                        {
                            m_mediaPlayer.AudioVolume = EngineMath.Clamp(
                                m_mediaPlayer.AudioVolume - 0.1f,
                                0f, 1f);
                            await Task.Delay(100);
                        }
                    })
                    .FireAndForget();
            }

            await imageAnimationTask;
        }