变量模块;Element启用控制
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Ichni.Editor;
|
||||
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)
|
||||
{
|
||||
if (EditorManager.instance.backgroundSetter != null)
|
||||
{
|
||||
LogWindow.Log("There is already a Background Setter in the scene.", Color.red);
|
||||
return null;
|
||||
}
|
||||
|
||||
BackgroundSetter backgroundSetter = Instantiate(EditorManager.instance.basePrefabs.emptyObject)
|
||||
.AddComponent<BackgroundSetter>();
|
||||
EditorManager.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()
|
||||
{
|
||||
EditorManager.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 override void SetUpInspector()
|
||||
{
|
||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||
var container = inspector.GenerateContainer("Background Setter");
|
||||
var useSkyboxToggle = inspector.GenerateToggle(this, container, "Use Skybox", nameof(useSkybox));
|
||||
var skyboxThemeBundleField = inspector.GenerateInputField(this, container, "Skybox Theme Bundle", nameof(skyboxThemeBundleName));
|
||||
var skyboxMaterialNameField = inspector.GenerateInputField(this, container, "Skybox Material", nameof(skyboxMaterialName));
|
||||
var backgroundSpriteField = inspector.GenerateInputField(this, container, "Background Sprite", nameof(backgroundSpriteName));
|
||||
var applyButton = inspector.GenerateButton(this, container, "Apply", Refresh);
|
||||
|
||||
void SetInputFields(bool value) // 根据是否使用Skybox设置输入框的可交互性
|
||||
{
|
||||
skyboxThemeBundleField.inputField.interactable = value;
|
||||
skyboxMaterialNameField.inputField.interactable = value;
|
||||
backgroundSpriteField.inputField.interactable = !value;
|
||||
}
|
||||
|
||||
SetInputFields(useSkybox);
|
||||
|
||||
useSkyboxToggle.AddListenerFunction(() => EditorManager.instance.backgroundController.EnableBackground(!useSkybox));
|
||||
useSkyboxToggle.AddListenerFunction(() => SetInputFields(useSkybox));
|
||||
}
|
||||
}
|
||||
|
||||
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 = EditorManager.instance.basePrefabs.defaultSkyboxMaterial;
|
||||
EditorManager.instance.backgroundController.SetSkybox(skyboxMaterial);
|
||||
}
|
||||
|
||||
private void SetBackgroundSprite(string spriteName)
|
||||
{
|
||||
string path = EditorManager.instance.projectInformation.projectPath + "/Sprites/" + spriteName + ".png";
|
||||
backgroundSprite = ES3.FileExists(path) ? ES3.Load<Sprite>(path) : EditorManager.instance.basePrefabs.defaultBackground;
|
||||
EditorManager.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0bfee67d496ae4f609383bce72ee88fe
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,111 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Ichni.Editor;
|
||||
using Ichni.RhythmGame.Beatmap;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Ichni.RhythmGame
|
||||
{
|
||||
public partial class VariablesContainer : GameElement
|
||||
{
|
||||
public Dictionary<string, int> originalVariables;
|
||||
public Dictionary<string, int> currentVariables;
|
||||
|
||||
public static VariablesContainer GenerateElement(string elementName, Guid id, List<string> tags, bool isFirstGenerated,
|
||||
GameElement parentElement, Dictionary<string, int> variables)
|
||||
{
|
||||
if (EditorManager.instance.variablesContainer != null)
|
||||
{
|
||||
LogWindow.Log("There is already a Variables Container in the scene.", Color.red);
|
||||
return null;
|
||||
}
|
||||
|
||||
VariablesContainer variablesContainer =
|
||||
Instantiate(EditorManager.instance.basePrefabs.emptyObject).AddComponent<VariablesContainer>();
|
||||
|
||||
EditorManager.instance.variablesContainer = variablesContainer;
|
||||
variablesContainer.Initialize(elementName, id, tags, isFirstGenerated, parentElement);
|
||||
variablesContainer.originalVariables = new Dictionary<string, int>(variables);
|
||||
variablesContainer.currentVariables = new Dictionary<string, int>(variables);
|
||||
|
||||
return variablesContainer;
|
||||
}
|
||||
|
||||
public void SetVariable(string variableName, int value)
|
||||
{
|
||||
currentVariables[variableName] = value;
|
||||
}
|
||||
|
||||
public int GetVariable(string variableName)
|
||||
{
|
||||
return currentVariables[variableName];
|
||||
}
|
||||
|
||||
public void RevertVariable(string variableName)
|
||||
{
|
||||
currentVariables[variableName] = originalVariables[variableName];
|
||||
}
|
||||
|
||||
public void RevertAllVariables()
|
||||
{
|
||||
currentVariables = new Dictionary<string, int>(originalVariables);
|
||||
}
|
||||
}
|
||||
|
||||
public partial class VariablesContainer
|
||||
{
|
||||
public override void SaveBM()
|
||||
{
|
||||
matchedBM = new VariablesContainer_BM(elementName, elementGuid, tags, null, originalVariables);
|
||||
}
|
||||
|
||||
public override void SetUpInspector()
|
||||
{
|
||||
IHaveInspection inspector = EditorManager.instance.uiManager.inspector;
|
||||
var container = inspector.GenerateContainer("Variables Container");
|
||||
var originalVariablesButton = inspector.GenerateButton(this, container, "Original Variables", () =>
|
||||
{
|
||||
var ov = inspector.GenerateCompositeParameterWindow(this, "Original Variables List", nameof(originalVariables));
|
||||
ov.SetAsStringIntDictionary();
|
||||
ov.AddListenerFunction(RevertAllVariables);
|
||||
});
|
||||
|
||||
var currentVariablesButton = inspector.GenerateButton(this, container, "Current Variables", () =>
|
||||
{
|
||||
inspector.GenerateCompositeParameterWindow(this, "Current Variables List", nameof(currentVariables)).SetAsStringIntDictionary();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
namespace Beatmap
|
||||
{
|
||||
public class VariablesContainer_BM : GameElement_BM
|
||||
{
|
||||
public Dictionary<string, int> originalVariables;
|
||||
|
||||
public VariablesContainer_BM()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public VariablesContainer_BM(string elementName, Guid elementGuid, List<string> tags, GameElement_BM parentElement,
|
||||
Dictionary<string, int> originalVariables) : base(elementName, elementGuid, tags, parentElement)
|
||||
{
|
||||
this.originalVariables = new Dictionary<string, int>(originalVariables);
|
||||
}
|
||||
|
||||
public override void ExecuteBM()
|
||||
{
|
||||
matchedElement = VariablesContainer.GenerateElement(elementName, elementGuid, tags, false,
|
||||
GetElement(attachedElementGuid), originalVariables);
|
||||
}
|
||||
|
||||
public override GameElement DuplicateBM(GameElement attached)
|
||||
{
|
||||
return VariablesContainer.GenerateElement(elementName, Guid.NewGuid(), tags, false, attached, originalVariables);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3635ae4e7b31f4ae7a942151377c59f6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user