using System; using System.Collections; using System.Collections.Generic; using Ichni.RhythmGame.Beatmap; using UnityEngine; namespace Ichni.RhythmGame { public partial class BackgroundSetter : GameElement { public bool useSkybox; public string skyboxThemeBundleName; public string skyboxMaterialName; public Material skyboxMaterial; public string backgroundSpriteName; public Sprite backgroundSprite; public SkyboxSubsetter skyboxSubsetter; 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); } } } public partial class BackgroundSetter { public override void SaveBM() { matchedBM = new BackgroundSetter_BM(elementName, elementGuid, tags, null, useSkybox, skyboxThemeBundleName, skyboxMaterialName, backgroundSpriteName); } } 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); } } namespace Beatmap { public class BackgroundSetter_BM : GameElement_BM { public bool useSkybox; public string skyboxThemeBundleName; public string skyboxMaterialName; public string backgroundSpriteName; public BackgroundSetter_BM() { } public BackgroundSetter_BM(string elementName, Guid elementGuid, List tags, GameElement_BM attachedElement, bool useSkybox, string skyboxThemeBundleName, string skyboxMaterialName, string backgroundSpriteName) : base(elementName, elementGuid, tags, attachedElement) { this.useSkybox = useSkybox; this.skyboxThemeBundleName = skyboxThemeBundleName; this.skyboxMaterialName = skyboxMaterialName; this.backgroundSpriteName = backgroundSpriteName; } public override void ExecuteBM() { matchedElement = BackgroundSetter.GenerateElement(elementName, elementGuid, tags, false, GetElement(attachedElementGuid), useSkybox, skyboxThemeBundleName, skyboxMaterialName, backgroundSpriteName); } } } }