BITFALL/Assets/GSpawn - Level Designer/Scripts/Prefs/ObjectPrefs.cs

66 lines
3.4 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using UnityEngine.UIElements;
namespace GSpawn
{
public class ObjectPrefs : Prefs<ObjectPrefs>
{
[SerializeField][UIFieldConfig("Up axis", "The object local axis that should be treated as up for terrain meshes.", "Terrain mesh", false)]
private Axis _terrainMeshUpAxis = defaultTerrainMeshUpAxis;
[SerializeField][UIFieldConfig("Invert axis", "If checked, the terrain mesh up axis is inverted.")]
private bool _invertTerrainMeshUpAxis = defaultInvertTerrainMeshUpAxis;
public Axis terrainMeshUpAxis { get { return _terrainMeshUpAxis; } set { UndoEx.record(this); _terrainMeshUpAxis = value; EditorUtility.SetDirty(this); } }
public bool invertTerrainMeshUpAxis { get { return _invertTerrainMeshUpAxis; } set { UndoEx.record(this); _invertTerrainMeshUpAxis = value; EditorUtility.SetDirty(this); } }
public static Axis defaultTerrainMeshUpAxis { get { return Axis.Y; } }
public static bool defaultInvertTerrainMeshUpAxis { get { return false; } }
public Vector3 getTerrainMeshUp(GameObject terrainMeshObject)
{
if (_terrainMeshUpAxis == Axis.Y) return invertTerrainMeshUpAxis ? -terrainMeshObject.transform.up : terrainMeshObject.transform.up;
if (_terrainMeshUpAxis == Axis.X) return invertTerrainMeshUpAxis ? -terrainMeshObject.transform.right : terrainMeshObject.transform.right;
return invertTerrainMeshUpAxis ? -terrainMeshObject.transform.forward : terrainMeshObject.transform.forward;
}
public Plane getTerrainMeshHorizontalPlane(GameObject terrainMeshObject)
{
if (_terrainMeshUpAxis == Axis.Y) return new Plane(invertTerrainMeshUpAxis ? -terrainMeshObject.transform.up : terrainMeshObject.transform.up, terrainMeshObject.transform.position);
if (_terrainMeshUpAxis == Axis.X) return new Plane(invertTerrainMeshUpAxis ? -terrainMeshObject.transform.right : terrainMeshObject.transform.right, terrainMeshObject.transform.position);
return new Plane(invertTerrainMeshUpAxis ? -terrainMeshObject.transform.forward : terrainMeshObject.transform.forward, terrainMeshObject.transform.position);
}
public override void useDefaults()
{
terrainMeshUpAxis = defaultTerrainMeshUpAxis;
invertTerrainMeshUpAxis = defaultInvertTerrainMeshUpAxis;
EditorUtility.SetDirty(this);
}
}
class ObjectPrefsProvider : SettingsProvider
{
public ObjectPrefsProvider(string path, SettingsScope scope)
: base(path, scope) { }
public override void OnActivate(string searchContext, VisualElement rootElement)
{
UI.createPrefsTitleLabel("Object", rootElement);
ObjectPrefs.instance.buildDefaultUI(rootElement, PluginSettingsUIBuildConfig.defaultConfig);
const float labelWidth = 155.0f;
rootElement.Query<Label>().ForEach(item => item.setChildLabelWidth(labelWidth));
}
[SettingsProvider]
public static SettingsProvider create()
{
if (GSpawn.active == null) return null;
return new ObjectPrefsProvider("Preferences/" + GSpawn.pluginName + "/Object", SettingsScope.User);
}
}
}
#endif