Files
ichni_Official/Assets/Scripts/Game/GameElements/Environment/BackgroundSetter.cs
SoulliesOfficial 1bc9af280b 同步
2026-04-03 10:53:11 -04:00

75 lines
3.0 KiB
C#

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<string> tags,
bool isFirstGenerated, GameElement parentElement, bool useSkybox, string skyboxThemeBundleName,
string skyboxMaterialName, string backgroundSpriteName)
{
BackgroundSetter backgroundSetter = Instantiate(GameManager.Instance.basePrefabs.emptyObject)
.AddComponent<BackgroundSetter>();
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<Material>(themeBundleName, materialName);
if (skyboxMaterial != null) 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<Sprite>(path) : GameManager.Instance.basePrefabs.defaultBackground;
GameManager.Instance.backgroundController.SetBackground(backgroundSprite);
}
}
#endregion
}