S&box Wiki

Revision Difference

style-video#562833

<cat>UI.Styles</cat>⤶ <title>Video Backgrounds</title>⤶ ⤶ # Video Backgrounds⤶ ⤶ To play a video in the background of a panel, set the background-image property to the path of an MP4 or WebM file.⤶ ⤶ ```⤶ MyVideoPanel {⤶ // This path is relative to the Assets folder of your project.⤶ background-image: url("ui/video/my_video.mp4");⤶ }⤶ ```⤶ ⤶ To allow a video of any aspect ratio to fit snugly within the panel, set these properties like so:⤶ ⤶ ```⤶ background-size: contain;⤶ background-position: center;⤶ background-repeat: no-repeat;⤶ ```⤶ ⤶ The video will play once the panel is created. No audio will play, and the video will loop whenever it reaches the end.⤶ ⤶ <note>⤶ The playback progress of background-image videos will persist between rebuilds of the UI, only restarting once the underlying VideoPlayer is garbage collected.⤶ </note>⤶ ⤶ # Using a VideoPlayer Texture⤶ ⤶ For more control over video playback and audio, you'll need to set the background image of the panel to the texture of a VideoPlayer that you control.⤶ ⤶ ```cs⤶ using Sandbox.UI;⤶ ⤶ public partial class VideoPlayerPanel : Panel⤶ {⤶ public bool ShouldLoop { get; set; } = true;⤶ ⤶ private VideoPlayer _player;⤶ ⤶ public VideoPlayerPanel()⤶ {⤶ _player = new VideoPlayer();⤶ // When this video plays, its audio will also automatically play.⤶ _player.Play( FileSystem.Mounted, "ui/video/my_video.mp4" );⤶ // Set the background-image property of the style to the VideoPlayer's Texture.⤶ Style.SetBackgroundImage( _player.Texture );⤶ // Pause or unpause the video when this panel is clicked.⤶ AddEventListener( "onclick", _ => _player?.TogglePause() );⤶ }⤶ ⤶ public override void Tick()⤶ {⤶ if ( _player is null )⤶ return;⤶ ⤶ // The VideoPlayer texture will not update unless Present is called.⤶ _player.Present();⤶ ⤶ // Loop when the video concludes.⤶ if ( ShouldLoop && _player.PlaybackTime >= _player.Duration )⤶ {⤶ _player.Seek( 0f );⤶ }⤶ }⤶ }⤶ ⤶ ```