예제 #1
0
파일: MusicPlayer.cs 프로젝트: Jc54/PlayMe
        public void PlayTrack(QueuedTrack trackToPlay)
        {
            logger.Trace("MusicService.PlayTrack");
            logger.Debug("Attempting to play track {0}", trackToPlay.ToLoggerFriendlyTrackName());

            //Reset the paused data
            lastPaused = null;
            totalPausedDuration = 0;

            currentProvider = musicProviderFactory.GetMusicProviderByIdentifier(trackToPlay.Track.MusicProvider.Identifier);

            //Either play the original queued track or the Big Rick if tthe track is rickrolled
            var rickRollTrack = rickRollService.RickRoll(trackToPlay.Track, trackToPlay.User);

            currentProvider.PlayTrack(rickRollTrack);
            trackToPlay.StartedPlayingDateTime = nowHelper.Now;
            queuedTrackDataService.InsertOrUpdate(trackToPlay);
            int total;
            var recentlyPlayed = queuedTrackDataService.GetAll()
                .GetQueuedTracksByUser(null, 1, 5, out total)
                .Select(r => alreadyQueuedHelper.ResetAlreadyQueued(r, trackToPlay.User)).ToList();

            callbackClient.TrackHistoryChanged(new PagedResult<QueuedTrack> { HasMorePages = false, PageData = recentlyPlayed });

            currentlyPlayingTrack = trackToPlay;
            callbackClient.PlayingTrackChanged(CurrentlyPlayingTrack);
            logger.Debug("Playing track {0} queued by {1}", trackToPlay.ToLoggerFriendlyTrackName(), trackToPlay.User);
        }
예제 #2
0
        public void PlayTrack(QueuedTrack trackToPlay)
        {
            logger.Trace("MusicService.PlayTrack");
            logger.Debug("Attempting to play track {0}", trackToPlay.ToLoggerFriendlyTrackName());

            //Reset the paused data
            lastPaused          = null;
            totalPausedDuration = 0;

            currentProvider = musicProviderFactory.GetMusicProviderByIdentifier(trackToPlay.Track.MusicProvider.Identifier);

            //Either play the original queued track or the Big Rick if tthe track is rickrolled
            var rickRollTrack = rickRollService.RickRoll(trackToPlay.Track, trackToPlay.User);

            currentProvider.PlayTrack(rickRollTrack);
            trackToPlay.StartedPlayingDateTime = nowHelper.Now;
            queuedTrackDataService.InsertOrUpdate(trackToPlay);
            int total;
            var recentlyPlayed = queuedTrackDataService.GetAll()
                                 .GetQueuedTracksByUser(null, 1, 5, out total)
                                 .Select(r => alreadyQueuedHelper.ResetAlreadyQueued(r, trackToPlay.User)).ToList();

            callbackClient.TrackHistoryChanged(new PagedResult <QueuedTrack> {
                HasMorePages = false, PageData = recentlyPlayed
            });

            currentlyPlayingTrack = trackToPlay;
            callbackClient.PlayingTrackChanged(CurrentlyPlayingTrack);
            logger.Debug("Playing track {0} queued by {1}", trackToPlay.ToLoggerFriendlyTrackName(), trackToPlay.User);
        }
예제 #3
0
            /// <summary>
            /// 从当前Assembly加载
            /// </summary>
            /// <returns></returns>
            private static MusicProviders Load()
            {
                Assembly    assembly  = Assembly.GetExecutingAssembly();
                List <Type> hostTypes = new List <Type>();

                foreach (var type in assembly.GetExportedTypes())
                {
                    if (type.Name == "MusicProviders")
                    {
                        continue;
                    }
                    //确定type为类并且继承自(实现)IMyInstance
                    if (type.IsClass && typeof(IMusicProvider).IsAssignableFrom(type) && !type.IsAbstract)
                    {
                        hostTypes.Add(type);
                    }
                }

                MusicProviders musicProviders = new MusicProviders();

                foreach (var type in hostTypes)
                {
                    IMusicProvider instance = (IMusicProvider)Activator.CreateInstance(type);
                    musicProviders.AddMusicProvider(instance);
                }

                return(musicProviders);
            }
예제 #4
0
 public SearchController(
     SearchResultsViewModel.Factory searchViewModelFactory,
     IMusicProvider musicProvider)
 {
     _searchViewModelFactory = searchViewModelFactory;
     _musicProvider = musicProvider;
 }
예제 #5
0
        public QueuedTrack Execute(QueuedTrack trackToQueue)
        {
            if (trackToQueue.Track.MusicProvider == null || trackToQueue.Track.MusicProvider.Identifier != "sp") return trackToQueue;

            if (DateTime.Now.Second%settings.RandomizerRatio == 0)
            {
                return trackToQueue;
            }

            musicProvider = musicProviderFactory.GetMusicProviderByIdentifier(trackToQueue.Track.MusicProvider.Identifier);

            var album = trackToQueue.Track.Album;

            if (album == null) return trackToQueue;

            var tracks = musicProvider.BrowseAlbum(album.Link, trackToQueue.User);

            if (tracks.Tracks != null && tracks.Tracks.Any())
            {
                var track = tracks.Tracks.Random().FirstOrDefault();

                if (track != null)
                {
                    logger.Debug("Off Same Album Randomizer, converting track {0}", trackToQueue.ToLoggerFriendlyTrackName());

                    trackToQueue.Track = track;
                    trackToQueue.Track.Album = album;
                    trackToQueue.User = "******";
                    trackToQueue.Id = DataObject.GenerateId(); //if you don't do this then the autoplayed song will update over the user requested song
                }
            }


            return trackToQueue;
        }
예제 #6
0
 private void InitializeProviders()
 {
     _musicProvider  = new MusicProvider(_httpRequestProcessor);
     _artistProvider = new ArtistProvider(_httpRequestProcessor);
     _albumProvider  = new AlbumProvider(_httpRequestProcessor);
     _searchProvider = new SearchProvider(_httpRequestProcessor);
 }
예제 #7
0
 public AlbumController(
     IMusicProvider musicProvider,
     AlbumViewModel.Factory albumViewModelFactory)
 {
     _musicProvider = musicProvider;
     _albumViewModelFactory = albumViewModelFactory;
 }
예제 #8
0
 public Alarm(IMusicProvider musicProvider, DateTime alarmTime)
 {
     this.musicProvider = musicProvider;
     this.alarmTime     = alarmTime;
     timer = new Timer((alarmTime - DateTime.Now).Milliseconds);
     timer.Start();
     timer.Elapsed += timer_Elapsed;
 }
예제 #9
0
 public ArtistsController(
     IMusicProvider musicProvider,
     ArtistsViewModel.Factory artistsViewModelFactory,
     AlbumViewModel.Factory albumViewModelFactory,
     ArtistViewModel.Factory artistViewModelFactory)
 {
     _musicProvider = musicProvider;
     _artistsViewModelFactory = artistsViewModelFactory;
     _albumViewModelFactory = albumViewModelFactory;
     _artistViewModelFactory = artistViewModelFactory;
 }
예제 #10
0
        public QueuedTrack Execute(QueuedTrack trackToQueue)
        {
            if (DateTime.Now.Second % settings.RandomizerRatio == 0)
            {
                return(trackToQueue);
            }

            if (trackToQueue.Track.MusicProvider == null || trackToQueue.Track.MusicProvider.Identifier != "sp")
            {
                return(trackToQueue);
            }

            musicProvider = musicProviderFactory.GetMusicProviderByIdentifier(trackToQueue.Track.MusicProvider.Identifier);

            var browse = musicProvider.BrowseArtist(trackToQueue.Track.Artists.First().Link, false);
            var artist = browse.Profile.SimilarArtists.Random().FirstOrDefault();

            if (artist == null)
            {
                return(trackToQueue);
            }

            var randomAlbum = musicProvider.BrowseArtist(artist.Link, false).Albums.Random().Take(1).ToList();

            if (randomAlbum.Any())
            {
                var albumLink = randomAlbum.Random().First();
                var tracks    = musicProvider.BrowseAlbum(albumLink.Link, trackToQueue.User);

                if (tracks.Tracks != null && tracks.Tracks.Any())
                {
                    var track = tracks.Tracks.Random().FirstOrDefault();

                    if (track != null)
                    {
                        logger.Debug("Similar Artist Randomizer, converting track {0}", trackToQueue.ToLoggerFriendlyTrackName());

                        trackToQueue.Track       = track;
                        trackToQueue.Track.Album = albumLink;
                        trackToQueue.User        = "******";
                        trackToQueue.Id          = DataObject.GenerateId(); //if you don't do this then the autoplayed song will update over the user requested song
                    }
                }
            }

            return(trackToQueue);
        }
예제 #11
0
        public QueuedTrack Execute(QueuedTrack trackToQueue)
        {
            if (DateTime.Now.Second%settings.RandomizerRatio == 0)
            {
                return trackToQueue;
            }

            if (trackToQueue.Track.MusicProvider == null || trackToQueue.Track.MusicProvider.Identifier != "sp") return trackToQueue;

            musicProvider = musicProviderFactory.GetMusicProviderByIdentifier(trackToQueue.Track.MusicProvider.Identifier);

            var browse = musicProvider.BrowseArtist(trackToQueue.Track.Artists.First().Link, false);
            var artist = browse.Profile.SimilarArtists.Random().FirstOrDefault();

            if (artist == null) return trackToQueue;

            var randomAlbum = musicProvider.BrowseArtist(artist.Link, false).Albums.Random().Take(1).ToList();

            if (randomAlbum.Any())
            {
                var albumLink = randomAlbum.Random().First();
                var tracks = musicProvider.BrowseAlbum(albumLink.Link, trackToQueue.User);

                if (tracks.Tracks != null && tracks.Tracks.Any())
                {
                    var track = tracks.Tracks.Random().FirstOrDefault();

                    if (track != null)
                    {
                        logger.Debug("Similar Artist Randomizer, converting track {0}", trackToQueue.ToLoggerFriendlyTrackName());

                        trackToQueue.Track = track;
                        trackToQueue.Track.Album = albumLink;
                        trackToQueue.User = "******";
                        trackToQueue.Id = DataObject.GenerateId(); //if you don't do this then the autoplayed song will update over the user requested song
                    }
                }
            }

            return trackToQueue;
        }
예제 #12
0
        public QueuedTrack Execute(QueuedTrack trackToQueue)
        {
            if (trackToQueue.Track.MusicProvider == null || trackToQueue.Track.MusicProvider.Identifier != "sp")
            {
                return(trackToQueue);
            }

            if (DateTime.Now.Second % settings.RandomizerRatio == 0)
            {
                return(trackToQueue);
            }

            musicProvider = musicProviderFactory.GetMusicProviderByIdentifier(trackToQueue.Track.MusicProvider.Identifier);

            var album = trackToQueue.Track.Album;

            if (album == null)
            {
                return(trackToQueue);
            }

            var tracks = musicProvider.BrowseAlbum(album.Link, trackToQueue.User);

            if (tracks.Tracks != null && tracks.Tracks.Any())
            {
                var track = tracks.Tracks.Random().FirstOrDefault();

                if (track != null)
                {
                    logger.Debug("Off Same Album Randomizer, converting track {0}", trackToQueue.ToLoggerFriendlyTrackName());

                    trackToQueue.Track       = track;
                    trackToQueue.Track.Album = album;
                    trackToQueue.User        = "******";
                    trackToQueue.Id          = DataObject.GenerateId(); //if you don't do this then the autoplayed song will update over the user requested song
                }
            }


            return(trackToQueue);
        }
예제 #13
0
        public SelectHeroClass(
            IRenderWindow renderWindow,
            IPaletteProvider paletteProvider,
            IMPQProvider mpqProvider,
            IMouseInfoProvider mouseInfoProvider,
            IMusicProvider musicProvider,
            ISceneManager sceneManager,
            Func <eButtonType, IButton> createButton,
            Func <ITextBox> createTextBox,
            ITextDictionary textDictionary,
            IKeyboardInfoProvider keyboardInfoProvider,
            IGameState gameState
            )
        {
            this.renderWindow         = renderWindow;
            this.paletteProvider      = paletteProvider;
            this.mpqProvider          = mpqProvider;
            this.mouseInfoProvider    = mouseInfoProvider;
            this.sceneManager         = sceneManager;
            this.textDictionary       = textDictionary;
            this.keyboardInfoProvider = keyboardInfoProvider;
            this.gameState            = gameState;


            backgroundSprite     = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBackground, Palettes.Fechar);
            campfireSprite       = renderWindow.LoadSprite(ResourcePaths.CharacterSelectCampfire, Palettes.Fechar, new Point(380, 335));
            campfireSprite.Blend = true;

            heroRenderInfo[eHero.Barbarian] = new HeroRenderInfo
            {
                Stance                   = eHeroStance.Idle,
                IdleSprite               = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBarbarianUnselected, Palettes.Fechar, new Point(400, 330)),
                IdleSelectedSprite       = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBarbarianUnselectedH, Palettes.Fechar, new Point(400, 330)),
                ForwardWalkSprite        = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBarbarianForwardWalk, Palettes.Fechar, new Point(400, 330)),
                ForwardWalkSpriteOverlay = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBarbarianForwardWalkOverlay, Palettes.Fechar, new Point(400, 330)),
                SelectedSprite           = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBarbarianSelected, Palettes.Fechar, new Point(400, 330)),
                BackWalkSprite           = renderWindow.LoadSprite(ResourcePaths.CharacterSelectBarbarianBackWalk, Palettes.Fechar, new Point(400, 330)),
                SelectionBounds          = new Rectangle(364, 201, 90, 170),
                ForwardWalkTimeMs        = 3000,
                BackWalkTimeMs           = 1000
            };

            heroRenderInfo[eHero.Sorceress] = new HeroRenderInfo
            {
                Stance                   = eHeroStance.Idle,
                IdleSprite               = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressUnselected, Palettes.Fechar, new Point(626, 352)),
                IdleSelectedSprite       = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressUnselectedH, Palettes.Fechar, new Point(626, 352)),
                ForwardWalkSprite        = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressForwardWalk, Palettes.Fechar, new Point(626, 352)),
                ForwardWalkSpriteOverlay = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressForwardWalkOverlay, Palettes.Fechar, new Point(626, 352)),
                SelectedSprite           = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressSelected, Palettes.Fechar, new Point(626, 352)),
                SelectedSpriteOverlay    = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressSelectedOverlay, Palettes.Fechar, new Point(626, 352)),
                BackWalkSprite           = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressBackWalk, Palettes.Fechar, new Point(626, 352)),
                BackWalkSpriteOverlay    = renderWindow.LoadSprite(ResourcePaths.CharacterSelecSorceressBackWalkOverlay, Palettes.Fechar, new Point(626, 352)),
                SelectionBounds          = new Rectangle(580, 240, 65, 160),
                ForwardWalkTimeMs        = 3000,
                BackWalkTimeMs           = 1200
            };
            heroRenderInfo[eHero.Sorceress].SelectedSpriteOverlay.Blend    = true;
            heroRenderInfo[eHero.Sorceress].ForwardWalkSpriteOverlay.Blend = true;
            heroRenderInfo[eHero.Sorceress].BackWalkSpriteOverlay.Blend    = true;


            heroRenderInfo[eHero.Necromancer] = new HeroRenderInfo
            {
                Stance                   = eHeroStance.Idle,
                IdleSprite               = renderWindow.LoadSprite(ResourcePaths.CharacterSelectNecromancerUnselected, Palettes.Fechar, new Point(300, 335)),
                IdleSelectedSprite       = renderWindow.LoadSprite(ResourcePaths.CharacterSelectNecromancerUnselectedH, Palettes.Fechar, new Point(300, 335)),
                ForwardWalkSprite        = renderWindow.LoadSprite(ResourcePaths.CharacterSelecNecromancerForwardWalk, Palettes.Fechar, new Point(300, 335)),
                ForwardWalkSpriteOverlay = renderWindow.LoadSprite(ResourcePaths.CharacterSelecNecromancerForwardWalkOverlay, Palettes.Fechar, new Point(300, 335)),
                SelectedSprite           = renderWindow.LoadSprite(ResourcePaths.CharacterSelecNecromancerSelected, Palettes.Fechar, new Point(300, 335)),
                SelectedSpriteOverlay    = renderWindow.LoadSprite(ResourcePaths.CharacterSelecNecromancerSelectedOverlay, Palettes.Fechar, new Point(300, 335)),
                BackWalkSprite           = renderWindow.LoadSprite(ResourcePaths.CharacterSelecNecromancerBackWalk, Palettes.Fechar, new Point(300, 335)),
                BackWalkSpriteOverlay    = renderWindow.LoadSprite(ResourcePaths.CharacterSelecNecromancerBackWalkOverlay, Palettes.Fechar, new Point(300, 335)),
                SelectionBounds          = new Rectangle(265, 220, 55, 175),
                ForwardWalkTimeMs        = 2000,
                BackWalkTimeMs           = 1500,
            };
            heroRenderInfo[eHero.Necromancer].ForwardWalkSpriteOverlay.Blend = true;
            heroRenderInfo[eHero.Necromancer].BackWalkSpriteOverlay.Blend    = true;
            heroRenderInfo[eHero.Necromancer].SelectedSpriteOverlay.Blend    = true;

            heroRenderInfo[eHero.Paladin] = new HeroRenderInfo
            {
                Stance                   = eHeroStance.Idle,
                IdleSprite               = renderWindow.LoadSprite(ResourcePaths.CharacterSelectPaladinUnselected, Palettes.Fechar, new Point(521, 338)),
                IdleSelectedSprite       = renderWindow.LoadSprite(ResourcePaths.CharacterSelectPaladinUnselectedH, Palettes.Fechar, new Point(521, 338)),
                ForwardWalkSprite        = renderWindow.LoadSprite(ResourcePaths.CharacterSelecPaladinForwardWalk, Palettes.Fechar, new Point(521, 338)),
                ForwardWalkSpriteOverlay = renderWindow.LoadSprite(ResourcePaths.CharacterSelecPaladinForwardWalkOverlay, Palettes.Fechar, new Point(521, 338)),
                SelectedSprite           = renderWindow.LoadSprite(ResourcePaths.CharacterSelecPaladinSelected, Palettes.Fechar, new Point(521, 338)),
                BackWalkSprite           = renderWindow.LoadSprite(ResourcePaths.CharacterSelecPaladinBackWalk, Palettes.Fechar, new Point(521, 338)),
                SelectionBounds          = new Rectangle(490, 210, 65, 180),
                ForwardWalkTimeMs        = 4000,
                BackWalkTimeMs           = 1300
            };

            heroRenderInfo[eHero.Amazon] = new HeroRenderInfo
            {
                Stance             = eHeroStance.Idle,
                IdleSprite         = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAmazonUnselected, Palettes.Fechar, new Point(100, 339)),
                IdleSelectedSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAmazonUnselectedH, Palettes.Fechar, new Point(100, 339)),
                ForwardWalkSprite  = renderWindow.LoadSprite(ResourcePaths.CharacterSelecAmazonForwardWalk, Palettes.Fechar, new Point(100, 339)),
                //ForwardWalkSpriteOverlay = renderWindow.LoadSprite(ResourcePaths.CharacterSelecAmazonForwardWalkOverlay, Palettes.Fechar, new Point(100, 339)),
                SelectedSprite    = renderWindow.LoadSprite(ResourcePaths.CharacterSelecAmazonSelected, Palettes.Fechar, new Point(100, 339)),
                BackWalkSprite    = renderWindow.LoadSprite(ResourcePaths.CharacterSelecAmazonBackWalk, Palettes.Fechar, new Point(100, 339)),
                SelectionBounds   = new Rectangle(70, 220, 55, 200),
                ForwardWalkTimeMs = 2600,
                BackWalkTimeMs    = 1500
            };

            heroRenderInfo[eHero.Assassin] = new HeroRenderInfo
            {
                Stance             = eHeroStance.Idle,
                IdleSprite         = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAssassinUnselected, Palettes.Fechar, new Point(231, 365)),
                IdleSelectedSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAssassinUnselectedH, Palettes.Fechar, new Point(231, 365)),
                ForwardWalkSprite  = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAssassinForwardWalk, Palettes.Fechar, new Point(231, 365)),
                SelectedSprite     = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAssassinSelected, Palettes.Fechar, new Point(231, 365)),
                BackWalkSprite     = renderWindow.LoadSprite(ResourcePaths.CharacterSelectAssassinBackWalk, Palettes.Fechar, new Point(231, 365)),
                SelectionBounds    = new Rectangle(175, 235, 50, 180),
                ForwardWalkTimeMs  = 3000,
                BackWalkTimeMs     = 1500
            };

            heroRenderInfo[eHero.Druid] = new HeroRenderInfo
            {
                Stance             = eHeroStance.Idle,
                IdleSprite         = renderWindow.LoadSprite(ResourcePaths.CharacterSelectDruidUnselected, Palettes.Fechar, new Point(720, 370)),
                IdleSelectedSprite = renderWindow.LoadSprite(ResourcePaths.CharacterSelectDruidUnselectedH, Palettes.Fechar, new Point(720, 370)),
                ForwardWalkSprite  = renderWindow.LoadSprite(ResourcePaths.CharacterSelectDruidForwardWalk, Palettes.Fechar, new Point(720, 370)),
                SelectedSprite     = renderWindow.LoadSprite(ResourcePaths.CharacterSelectDruidSelected, Palettes.Fechar, new Point(720, 370)),
                BackWalkSprite     = renderWindow.LoadSprite(ResourcePaths.CharacterSelectDruidBackWalk, Palettes.Fechar, new Point(720, 370)),
                SelectionBounds    = new Rectangle(680, 220, 70, 195),
                ForwardWalkTimeMs  = 3000,
                BackWalkTimeMs     = 1500
            };

            headingFont  = renderWindow.LoadFont(ResourcePaths.Font30, Palettes.Units);
            heroDescFont = renderWindow.LoadFont(ResourcePaths.Font16, Palettes.Units);
            uiFont       = renderWindow.LoadFont(ResourcePaths.Font16, Palettes.Units);

            headingLabel          = renderWindow.CreateLabel(headingFont);
            headingLabel.Text     = textDictionary.Translate("strSelectHeroClass");
            headingLabel.Location = new Point(400 - (headingLabel.TextArea.Width / 2), 17);

            heroClassLabel          = renderWindow.CreateLabel(headingFont);
            heroClassLabel.Text     = "";
            heroClassLabel.Location = new Point(400 - (heroClassLabel.TextArea.Width / 2), 65);

            heroDesc1Label = renderWindow.CreateLabel(heroDescFont);
            heroDesc2Label = renderWindow.CreateLabel(heroDescFont);
            heroDesc3Label = renderWindow.CreateLabel(heroDescFont);

            characterNameLabel           = renderWindow.CreateLabel(uiFont);
            characterNameLabel.Text      = textDictionary.Translate("strCharacterName");
            characterNameLabel.Location  = new Point(320, 475);
            characterNameLabel.TextColor = Color.FromArgb(216, 196, 128);

            exitButton            = createButton(eButtonType.Medium);
            exitButton.Text       = textDictionary.Translate("strExit");
            exitButton.Location   = new Point(30, 540);
            exitButton.OnActivate = OnExitClicked;

            okButton            = createButton(eButtonType.Medium);
            okButton.Text       = textDictionary.Translate("strOk");
            okButton.Location   = new Point(630, 540);
            okButton.OnActivate = OnOkclicked;
            okButton.Enabled    = false;

            characterNameTextBox          = createTextBox();
            characterNameTextBox.Text     = "";
            characterNameTextBox.Location = new Point(320, 493);
        }
예제 #14
0
 public MusicPlayerImpl(PlayingMusic playingMusic, IMusicProvider provider, MusicPlayerConfig config = null) : base(playingMusic, provider, config)
 {
 }
예제 #15
0
 public void AddMusicProvider(IMusicProvider provider)
 {
     Providers.Add(provider);
     type2Provider.Add(provider.Name, provider);
 }
예제 #16
0
        public MainMenu(
            IRenderWindow renderWindow,
            IPaletteProvider paletteProvider,
            IMPQProvider mpqProvider,
            IMouseInfoProvider mouseInfoProvider,
            IMusicProvider musicProvider,
            ISceneManager sceneManager,
            IResourceManager resourceManager,
            Func <eButtonType, IButton> createButton,
            Func <string, IScene> getScene // Temporary until SDL load functions are sped up
            )
        {
            this.renderWindow      = renderWindow;
            this.paletteProvider   = paletteProvider;
            this.mpqProvider       = mpqProvider;
            this.mouseInfoProvider = mouseInfoProvider;
            this.sceneManager      = sceneManager;

            backgroundSprite      = renderWindow.LoadSprite(ResourcePaths.GameSelectScreen, Palettes.Sky);
            diabloLogoLeft        = renderWindow.LoadSprite(ResourcePaths.Diablo2LogoFireLeft, Palettes.Units, new Point(400, 120));
            diabloLogoLeft.Blend  = true;
            diabloLogoRight       = renderWindow.LoadSprite(ResourcePaths.Diablo2LogoFireRight, Palettes.Units, new Point(400, 120));
            diabloLogoRight.Blend = true;
            diabloLogoLeftBlack   = renderWindow.LoadSprite(ResourcePaths.Diablo2LogoBlackLeft, Palettes.Units, new Point(400, 120));
            diabloLogoRightBlack  = renderWindow.LoadSprite(ResourcePaths.Diablo2LogoBlackRight, Palettes.Units, new Point(400, 120));

            btnSinglePlayer            = createButton(eButtonType.Wide);
            btnSinglePlayer.Text       = "Single Player".ToUpper();
            btnSinglePlayer.Location   = new Point(264, 290);
            btnSinglePlayer.OnActivate = OnSinglePlayerClicked;

            btnWebsite            = createButton(eButtonType.Wide);
            btnWebsite.Text       = "Visit Github".ToUpper();
            btnWebsite.Location   = new Point(264, 460);
            btnWebsite.OnActivate = OnVisitWebsiteClicked;

            btnExit            = createButton(eButtonType.Wide);
            btnExit.Text       = "Exit Diablo II".ToUpper();
            btnExit.Location   = new Point(264, 500);
            btnExit.OnActivate = OnExitClicked;

            labelFont          = renderWindow.LoadFont(ResourcePaths.Font16, Palettes.Static);
            versionLabel       = renderWindow.CreateLabel(labelFont, new Point(50, 555), "v0.01 Pre-Alpha");
            urlLabel           = renderWindow.CreateLabel(labelFont, new Point(50, 569), "https://github.com/essial/OpenDiablo2/");
            urlLabel.TextColor = Color.Magenta;

            var loadingSprite = renderWindow.LoadSprite(ResourcePaths.LoadingScreen, Palettes.Loading, new Point(300, 400));


            // Pre-load all the scenes for now until we fix the sdl load problem
            var scenesToLoad = new string[] { "Select Hero Class" };

            for (int i = 0; i < scenesToLoad.Count(); i++)
            {
                renderWindow.Clear();
                renderWindow.Draw(loadingSprite, (int)((float)loadingSprite.TotalFrames * ((float)i / (float)scenesToLoad.Count())));
                renderWindow.Sync();
                getScene(scenesToLoad[i]);
            }



            /*
             * musicProvider.LoadSong(mpqProvider.GetStream("data\\global\\music\\introedit.wav"));
             *
             * musicProvider.PlaySong();
             */
        }
예제 #17
0
 /// <summary>
 /// ミュージックプレイヤーを作成します。
 /// </summary>
 public static IMusicPlayer <T> Create <T>(this IMusicProvider <T> self, MusicPlayerConfig config = null)
 {
     return(SoundControl.CreatePlayer(self, config));
 }
예제 #18
0
 private async void DoBackgroundProcessing(IMusicProvider musicProvider)
 {
     await musicProvider.ReScanMusicLibrary();
 }
예제 #19
0
        /// <summary>
        /// 音声プレイヤーを作成します。
        /// </summary>
        public static IMusicPlayer CreatePlayer(IMusicProvider provider, MusicPlayerConfig config = null)
        {
            var list = CreatePlayingMusic(nameof(IMusicPlayer) + ":" + provider);

            return(new MusicPlayerImpl(list, provider, config));
        }