/// <summary>
 /// 停止播放背景音乐
 /// </summary>
 public void StopBackgroundMusic()
 {
     if (BackgroundSource.isPlaying)
     {
         BackgroundSource.Stop();
     }
 }
        /// <summary>
        /// 播放背景音乐
        /// </summary>
        /// <param name="clip">音乐剪辑</param>
        public void PlayBackgroundMusic(AudioClip clip)
        {
            if (BackgroundSource.isPlaying)
            {
                BackgroundSource.Stop();
            }

            BackgroundSource.clip = clip;
            BackgroundSource.Play();
        }
示例#3
0
        public UniversalSteamMetadataSettings(UniversalSteamMetadata plugin)
        {
            this.plugin = plugin;
            var savedSettings = plugin.LoadPluginSettings <UniversalSteamMetadataSettings>();

            if (savedSettings != null)
            {
                DownloadVerticalCovers = savedSettings.DownloadVerticalCovers;
                BackgroundSource       = savedSettings.BackgroundSource;
            }
        }
        /// <summary>
        /// 播放背景音乐
        /// </summary>
        /// <param name="clip">音乐剪辑</param>
        /// <param name="isLoop">是否循环</param>
        /// <param name="speed">播放速度</param>
        public void PlayBackgroundMusic(AudioClip clip, bool isLoop = true, float speed = 1)
        {
            if (BackgroundSource.isPlaying)
            {
                BackgroundSource.Stop();
            }

            BackgroundSource.clip  = clip;
            BackgroundSource.loop  = isLoop;
            BackgroundSource.pitch = speed;
            BackgroundSource.Play();
        }
示例#5
0
        public void TestBackgroundDoesntReloadOnNoChange(BackgroundSource source, Type backgroundType)
        {
            setSourceMode(source);
            setSupporter(true);
            if (source == BackgroundSource.Skin)
            {
                setCustomSkin();
            }

            AddUntilStep("wait for beatmap background to be loaded", () => (getCurrentBackground())?.GetType() == backgroundType);
            AddAssert("next doesn't load new background", () => screen.Next() == false);
        }
        /// <summary>
        /// 播放背景音乐
        /// </summary>
        /// <param name="clip">音乐剪辑</param>
        public void PlayBackgroundMusic(AudioClip clip)
        {
            BackgroundSource.DOKill();

            if (BackgroundSource.isPlaying)
            {
                BackgroundSource.Stop();
            }

            BackgroundSource.clip   = clip;
            BackgroundSource.volume = BackgroundVolume;
            BackgroundSource.Play();
        }
        public override int GetHashCode()
        {
            unchecked
            {
                int hash = 17;

                hash = (hash * 23) + TintColor.GetHashCode();
                hash = (hash * 23) + TintOpacity.GetHashCode();
                hash = (hash * 23) + BackgroundSource.GetHashCode();
                hash = (hash * 23) + FallbackColor.GetHashCode();
                hash = (hash * 23) + MaterialColor.GetHashCode();

                return(hash);
            }
        }
示例#8
0
        /// <summary>
        /// 恢复播放背景音乐
        /// </summary>
        /// <param name="isGradual">是否渐进式</param>
        public void ResumeBackgroundMusic(bool isGradual = true)
        {
            BackgroundSource.DOKill();

            if (isGradual)
            {
                BackgroundSource.volume = 0;
                BackgroundSource.UnPause();
                BackgroundSource.DOFade(BackgroundVolume, 2);
            }
            else
            {
                BackgroundSource.UnPause();
                BackgroundSource.volume = BackgroundVolume;
            }
        }
示例#9
0
        public void TestBackgroundDoesntReloadOnNoChange(BackgroundSource source, Type backgroundType)
        {
            Graphics.Backgrounds.Background last = null;

            setSourceMode(source);
            setSupporter(true);
            if (source == BackgroundSource.Skin)
            {
                setCustomSkin();
            }

            AddUntilStep("wait for beatmap background to be loaded", () => (last = getCurrentBackground())?.GetType() == backgroundType);
            AddAssert("next doesn't load new background", () => screen.Next() == false);

            // doesn't really need to be checked but might as well.
            AddWaitStep("wait a bit", 5);
            AddUntilStep("ensure same background instance", () => last == getCurrentBackground());
        }
示例#10
0
        /// <summary>
        /// 暂停播放背景音乐
        /// </summary>
        /// <param name="isGradual">是否渐进式</param>
        public void PauseBackgroundMusic(bool isGradual = true)
        {
            BackgroundSource.DOKill();

            if (isGradual)
            {
                BackgroundSource.DOFade(0, 2).OnComplete(() =>
                {
                    BackgroundSource.Pause();
                    BackgroundSource.volume = BackgroundVolume;
                });
            }
            else
            {
                BackgroundSource.Pause();
                BackgroundSource.volume = BackgroundVolume;
            }
        }
示例#11
0
        /// <summary>
        /// 播放背景音乐
        /// </summary>
        /// <param name="clip">音乐剪辑</param>
        /// <param name="isLoop">是否循环</param>
        /// <param name="speed">播放速度</param>
        public void PlayBackgroundMusic(AudioClip clip, bool isLoop = true, float speed = 1)
        {
            if (clip == null)
            {
                return;
            }

            BackgroundSource.DOKill();

            if (BackgroundSource.isPlaying)
            {
                BackgroundSource.Stop();
            }

            BackgroundSource.clip   = clip;
            BackgroundSource.loop   = isLoop;
            BackgroundSource.pitch  = speed;
            BackgroundSource.volume = BackgroundVolume;
            BackgroundSource.Play();
        }
示例#12
0
        /// <summary>
        /// 恢复播放背景音乐
        /// </summary>
        /// <param name="isGradual">是否渐进式</param>
        public void UnPauseBackgroundMusic(bool isGradual = true)
        {
            if (_bgPauseTweener != null)
            {
                _bgPauseTweener.Kill();
                _bgPauseTweener = null;
            }

            if (isGradual)
            {
                BackgroundSource.volume = 0;
                BackgroundSource.UnPause();
                _bgPauseTweener = BackgroundSource.DOFade(BackgroundVolume, 2).OnComplete(() =>
                {
                    _bgPauseTweener = null;
                });
            }
            else
            {
                BackgroundSource.UnPause();
                BackgroundSource.volume = BackgroundVolume;
            }
        }
示例#13
0
        public SteamGameMetadata GetGameMetadata(
            uint appId,
            BackgroundSource backgroundSource,
            bool downloadVerticalCovers)
        {
            var downloadedMetadata = DownloadGameMetadata(appId, backgroundSource, downloadVerticalCovers);
            var gameInfo           = new GameInfo
            {
                Name  = downloadedMetadata.ProductDetails?["common"]["name"]?.Value ?? downloadedMetadata.StoreDetails?.name,
                Links = new List <Link>()
                {
                    new Link(ResourceProvider.GetString("LOCSteamLinksCommunityHub"), $"https://steamcommunity.com/app/{appId}"),
                    new Link(ResourceProvider.GetString("LOCSteamLinksDiscussions"), $"https://steamcommunity.com/app/{appId}/discussions/"),
                    new Link(ResourceProvider.GetString("LOCSteamLinksGuides"), $"https://steamcommunity.com/app/{appId}/guides/"),
                    new Link(ResourceProvider.GetString("LOCCommonLinksNews"), $"https://store.steampowered.com/news/?appids={appId}"),
                    new Link(ResourceProvider.GetString("LOCCommonLinksStorePage"), $"https://store.steampowered.com/app/{appId}"),
                    new Link("PCGamingWiki", $"https://pcgamingwiki.com/api/appid.php?appid={appId}")
                }
            };

            downloadedMetadata.GameInfo = gameInfo;

            var metadata = new GameMetadata()
            {
                GameInfo        = gameInfo,
                Icon            = downloadedMetadata.Icon,
                CoverImage      = downloadedMetadata.CoverImage,
                BackgroundImage = downloadedMetadata.BackgroundImage
            };

            if (downloadedMetadata.StoreDetails?.categories?.FirstOrDefault(a => a.id == 22) != null)
            {
                gameInfo.Links.Add(new Link(ResourceProvider.GetString("LOCCommonLinksAchievements"), GetAchievementsUrl(appId)));
            }

            if (downloadedMetadata.StoreDetails?.categories?.FirstOrDefault(a => a.id == 30) != null)
            {
                gameInfo.Links.Add(new Link(ResourceProvider.GetString("LOCSteamLinksWorkshop"), GetWorkshopUrl(appId)));
            }

            if (downloadedMetadata.StoreDetails != null)
            {
                gameInfo.Description = ParseDescription(downloadedMetadata.StoreDetails.detailed_description);
                var cultInfo = new CultureInfo("en-US", false).TextInfo;
                gameInfo.ReleaseDate = downloadedMetadata.StoreDetails.release_date.date;
                gameInfo.CriticScore = downloadedMetadata.StoreDetails.metacritic?.score;
                if (downloadedMetadata.UserReviewDetails != null)
                {
                    gameInfo.CommunityScore = CalculateUserScore(downloadedMetadata.UserReviewDetails);
                }

                if (downloadedMetadata.StoreDetails.publishers.HasNonEmptyItems())
                {
                    gameInfo.Publishers = new List <string>(downloadedMetadata.StoreDetails.publishers);
                }

                if (downloadedMetadata.StoreDetails.developers.HasNonEmptyItems())
                {
                    gameInfo.Developers = new List <string>(downloadedMetadata.StoreDetails.developers);
                }

                if (downloadedMetadata.StoreDetails.categories.HasItems())
                {
                    gameInfo.Features = new List <string>();
                    foreach (var category in downloadedMetadata.StoreDetails.categories)
                    {
                        // Ignore VR category, will be set from appinfo
                        if (category.id == 31)
                        {
                            continue;
                        }

                        if (category.description == "Steam Cloud")
                        {
                            category.description = "Cloud Saves";
                        }

                        gameInfo.Features.Add(cultInfo.ToTitleCase(category.description.Replace("steam", "", StringComparison.OrdinalIgnoreCase).Trim()));
                    }
                }

                if (downloadedMetadata.StoreDetails.genres.HasItems())
                {
                    gameInfo.Genres = new List <string>(downloadedMetadata.StoreDetails.genres.Select(a => a.description));
                }
            }

            if (downloadedMetadata.ProductDetails != null)
            {
                var tasks      = new List <GameAction>();
                var launchList = downloadedMetadata.ProductDetails["config"]["launch"].Children;
                foreach (var task in launchList.Skip(1))
                {
                    var properties = task["config"];
                    if (properties.Name != null)
                    {
                        if (properties["oslist"].Name != null)
                        {
                            if (properties["oslist"].Value != "windows")
                            {
                                continue;
                            }
                        }
                    }

                    // Ignore action without name  - shoudn't be visible to end user
                    if (task["description"].Name != null)
                    {
                        var newTask = new GameAction()
                        {
                            Name              = task["description"].Value,
                            Arguments         = task["arguments"].Value ?? string.Empty,
                            Path              = task["executable"].Value,
                            IsHandledByPlugin = false,
                            WorkingDir        = ExpandableVariables.InstallationDirectory
                        };

                        tasks.Add(newTask);
                    }
                }

                var manual = downloadedMetadata.ProductDetails["extended"]["gamemanualurl"];
                if (manual.Name != null)
                {
                    tasks.Add((new GameAction()
                    {
                        Name = "Manual",
                        Type = GameActionType.URL,
                        Path = manual.Value,
                        IsHandledByPlugin = false
                    }));
                }

                gameInfo.OtherActions = tasks;

                // VR features
                var vrSupport = false;
                foreach (var vrArea in downloadedMetadata.ProductDetails["common"]["playareavr"].Children)
                {
                    if (vrArea.Name == "seated" && vrArea.Value == "1")
                    {
                        gameInfo.Features.Add("VR Seated");
                        vrSupport = true;
                    }
                    else if (vrArea.Name == "standing" && vrArea.Value == "1")
                    {
                        gameInfo.Features.Add("VR Standing");
                        vrSupport = true;
                    }
                    if (vrArea.Name.Contains("roomscale"))
                    {
                        gameInfo.Features.AddMissing("VR Room-Scale");
                        vrSupport = true;
                    }
                }

                foreach (var vrArea in downloadedMetadata.ProductDetails["common"]["controllervr"].Children)
                {
                    if (vrArea.Name == "kbm" && vrArea.Value == "1")
                    {
                        gameInfo.Features.Add("VR Keyboard / Mouse");
                        vrSupport = true;
                    }
                    else if (vrArea.Name == "xinput" && vrArea.Value == "1")
                    {
                        gameInfo.Features.Add("VR Gamepad");
                        vrSupport = true;
                    }
                    if ((vrArea.Name == "oculus" && vrArea.Value == "1") ||
                        (vrArea.Name == "steamvr" && vrArea.Value == "1"))
                    {
                        gameInfo.Features.Add("VR Motion Controllers");
                        vrSupport = true;
                    }
                }

                if (vrSupport)
                {
                    gameInfo.Features.Add("VR");
                }
            }

            return(downloadedMetadata);
        }
示例#14
0
 void Awake()
 {
     instance = this;
     backgroundSource = GetComponent<AudioSource> ();
 }
示例#15
0
 private void setSourceMode(BackgroundSource source) =>
 AddStep($"set background mode to {source}", () => config.SetValue(OsuSetting.MenuBackgroundSource, source));
示例#16
0
        internal SteamGameMetadata DownloadGameMetadata(uint appId, BackgroundSource backgroundSource)
        {
            var metadata    = new SteamGameMetadata();
            var productInfo = GetAppInfo(appId);

            metadata.ProductDetails = productInfo;

            try
            {
                metadata.StoreDetails = GetStoreData(appId);
            }
            catch (Exception e)
            {
                logger.Error(e, $"Failed to download Steam store metadata {appId}");
            }

            // Icon
            if (productInfo != null)
            {
                var iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.ico";
                var icon     = productInfo["common"]["clienticon"];
                var iconUrl  = string.Empty;
                if (!string.IsNullOrEmpty(icon.Value))
                {
                    iconUrl = string.Format(iconRoot, appId, icon.Value);
                }
                else
                {
                    var newIcon = productInfo["common"]["icon"];
                    if (!string.IsNullOrEmpty(newIcon.Value))
                    {
                        iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg";
                        iconUrl  = string.Format(iconRoot, appId, newIcon.Value);
                    }
                }

                // There might be no icon assigned to game
                if (!string.IsNullOrEmpty(iconUrl))
                {
                    metadata.Icon = new MetadataFile(iconUrl);
                }
            }

            // Image
            var imageRoot = @"https://steamcdn-a.akamaihd.net/steam/apps/{0}/header.jpg";
            var imageUrl  = string.Format(imageRoot, appId);

            if (HttpDownloader.GetResponseCode(imageUrl) == HttpStatusCode.OK)
            {
                metadata.CoverImage = new MetadataFile(imageUrl);
            }
            else
            {
                if (productInfo != null)
                {
                    imageRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg";
                    var image = productInfo["common"]["logo"];
                    if (!string.IsNullOrEmpty(image.Value))
                    {
                        imageUrl            = string.Format(imageRoot, appId, image.Value);
                        metadata.CoverImage = new MetadataFile(imageUrl);
                    }
                }
            }

            // Background Image
            switch (backgroundSource)
            {
            case BackgroundSource.Image:
                metadata.BackgroundImage = new MetadataFile(GetGameBackground(appId));
                break;

            case BackgroundSource.StoreScreenshot:
                if (metadata.StoreDetails != null)
                {
                    metadata.BackgroundImage = new MetadataFile(Regex.Replace(metadata.StoreDetails.screenshots.First().path_full, "\\?.*$", ""));
                }
                break;

            case BackgroundSource.StoreBackground:
                metadata.BackgroundImage = new MetadataFile(string.Format(@"https://steamcdn-a.akamaihd.net/steam/apps/{0}/page_bg_generated_v6b.jpg", appId));
                break;

            default:
                break;
            }

            return(metadata);
        }
 public static void SetBackgroundSource(BindableObject view, BackgroundSource value) =>
 view.SetValue(BackgroundSourceProperty, value);
示例#18
0
        internal SteamGameMetadata DownloadGameMetadata(uint appId, BackgroundSource backgroundSource)
        {
            var metadata    = new SteamGameMetadata();
            var productInfo = GetAppInfo(appId);

            metadata.ProductDetails = productInfo;
            metadata.StoreDetails   = GetStoreData(appId);

            // Icon
            if (productInfo != null)
            {
                var iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.ico";
                var icon     = productInfo["common"]["clienticon"];
                var iconUrl  = string.Empty;
                if (!string.IsNullOrEmpty(icon.Value))
                {
                    iconUrl = string.Format(iconRoot, appId, icon.Value);
                }
                else
                {
                    var newIcon = productInfo["common"]["icon"];
                    if (!string.IsNullOrEmpty(newIcon.Value))
                    {
                        iconRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg";
                        iconUrl  = string.Format(iconRoot, appId, newIcon.Value);
                    }
                }

                // There might be no icon assigned to game
                if (!string.IsNullOrEmpty(iconUrl))
                {
                    var iconName = Path.GetFileName(new Uri(iconUrl).AbsolutePath);
                    var iconData = HttpDownloader.DownloadData(iconUrl);
                    metadata.Icon = new MetadataFile(iconName, iconData);
                }
            }

            // Image
            var imageRoot = @"http://cdn.akamai.steamstatic.com/steam/apps/{0}/header.jpg";
            var imageUrl  = string.Format(imageRoot, appId);

            byte[] imageData = null;

            try
            {
                imageData = HttpDownloader.DownloadData(imageUrl);
            }
            catch (WebException e)
            {
                var response = (HttpWebResponse)e.Response;
                if (response.StatusCode == HttpStatusCode.NotFound)
                {
                    if (productInfo != null)
                    {
                        imageRoot = @"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/apps/{0}/{1}.jpg";
                        var image = productInfo["common"]["logo"];
                        if (!string.IsNullOrEmpty(image.Value))
                        {
                            imageUrl  = string.Format(imageRoot, appId, image.Value);
                            imageData = HttpDownloader.DownloadData(imageUrl);
                        }
                    }
                }
                else
                {
                    throw;
                }
            }

            if (imageData != null)
            {
                var imageName = Path.GetFileName(new Uri(imageUrl).AbsolutePath);
                metadata.Image = new MetadataFile(imageName, imageData);
            }

            // Background Image
            switch (backgroundSource)
            {
            case BackgroundSource.Image:
                metadata.BackgroundImage = GetGameBackground(appId);
                break;

            case BackgroundSource.StoreScreenshot:
                metadata.BackgroundImage = Regex.Replace(metadata.StoreDetails.screenshots.First().path_full, "\\?.*$", "");
                break;

            case BackgroundSource.StoreBackground:
                metadata.BackgroundImage = string.Format(@"https://steamcdn-a.akamaihd.net/steam/apps/{0}/page_bg_generated_v6b.jpg", appId);
                break;

            default:
                break;
            }

            return(metadata);
        }
示例#19
0
 void Awake()
 {
     instance         = this;
     backgroundSource = GetComponent <AudioSource> ();
 }