75 lines
3.0 KiB
C#
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
|
|
|
|
} |