using System; using System.Collections; using System.Collections.Generic; using Ichni.RhythmGame.Beatmap; using UnityEngine; namespace Ichni.RhythmGame { public partial class BackgroundSetter : GameElement { #region [暴露属性字段] Settings & Sprites public bool useSkybox; public string skyboxThemeBundleName; public string skyboxMaterialName; public Material skyboxMaterial; public string backgroundSpriteName; public Sprite backgroundSprite; #endregion #region [关联组件] Related References public SkyboxSubsetter skyboxSubsetter; #endregion #region [生命周期] Lifecycle & Factory public static BackgroundSetter GenerateElement(string elementName, Guid id, List tags, bool isFirstGenerated, GameElement parentElement, bool useSkybox, string skyboxThemeBundleName, string skyboxMaterialName, string backgroundSpriteName) { BackgroundSetter backgroundSetter = Instantiate(GameManager.Instance.basePrefabs.emptyObject) .AddComponent(); GameManager.Instance.backgroundSetter = backgroundSetter; backgroundSetter.Initialize(elementName, id, tags, isFirstGenerated, parentElement); backgroundSetter.useSkybox = useSkybox; backgroundSetter.skyboxThemeBundleName = skyboxThemeBundleName; backgroundSetter.skyboxMaterialName = skyboxMaterialName; backgroundSetter.backgroundSpriteName = backgroundSpriteName; return backgroundSetter; } public override void Refresh() { GameManager.Instance.backgroundController.EnableBackground(!useSkybox); if (useSkybox && skyboxSubsetter == null) { SetSkybox(skyboxThemeBundleName, skyboxMaterialName); } else { SetBackgroundSprite(backgroundSpriteName); } } #endregion } #region [私有业务方法] Private Utilities public partial class BackgroundSetter { private void SetSkybox(string themeBundleName, string materialName) { skyboxThemeBundleName = themeBundleName; skyboxMaterialName = materialName; skyboxMaterial = ThemeBundleManager.instance.GetObject(themeBundleName, materialName); if (skyboxMaterial == null) skyboxMaterial = GameManager.Instance.basePrefabs.defaultSkyboxMaterial; GameManager.Instance.backgroundController.SetSkybox(skyboxMaterial); } private void SetBackgroundSprite(string spriteName) { string path = GameManager.Instance.projectInformation.projectPath + "/Sprites/" + spriteName + ".png"; backgroundSprite = ES3.FileExists(path) ? ES3.Load(path) : GameManager.Instance.basePrefabs.defaultBackground; GameManager.Instance.backgroundController.SetBackground(backgroundSprite); } } #endregion }