/// <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); } }
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; }); } }
/// <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; }