Files
ichni_Official/Assets/Scripts/Game/GameElements/GlobalElements/BackgroundSetter.cs

112 lines
4.5 KiB
C#
Raw Normal View History

2025-06-03 02:42:28 -04:00
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 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)
{
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<Material>(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<Sprite>(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<string> 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);
}
public override GameElement DuplicateBM(GameElement attached)
{
return BackgroundSetter.GenerateElement(elementName, Guid.NewGuid(), tags, false, attached,
useSkybox, skyboxThemeBundleName, skyboxMaterialName, backgroundSpriteName);
}
}
}
}