first commit
This commit is contained in:
97
Assets/Core/UI/Editor/Scripts/PlayerEditorWindow.cs
Normal file
97
Assets/Core/UI/Editor/Scripts/PlayerEditorWindow.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
using UnityEditor.UIElements;
|
||||
using UnityEngine.UIElements;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
// TODO: Move to same document as WildsEditorWindow
|
||||
// Core editor interface for holding folder and stylesheet information
|
||||
public interface IWildsEditor{
|
||||
public string layoutsFolder{ get; }
|
||||
public string stylesheetsFolder{ get; }
|
||||
}
|
||||
|
||||
// TODO: Move to own document
|
||||
// Core editor window for all classes in document
|
||||
public abstract class WildsEditorWindow : Editor, IWildsEditor{
|
||||
public abstract string layoutsFolder { get; }
|
||||
public abstract string stylesheetsFolder { get; }
|
||||
|
||||
string coreLayoutsFolder = "Assets/Core/UI/Editor/Layouts/";
|
||||
//string coreStylesheetsFolder = "Assets/Core/UI/Editor/Stylesheets/";
|
||||
|
||||
public override VisualElement CreateInspectorGUI(){
|
||||
VisualElement newEditorWindow = GetVisualElement();
|
||||
|
||||
VisualElement inspectorFoldout = AssetDatabase
|
||||
.LoadAssetAtPath<VisualTreeAsset>(coreLayoutsFolder + "/Common/DefaultInspectorFoldout.uxml").Instantiate();
|
||||
|
||||
newEditorWindow.Add(inspectorFoldout);
|
||||
|
||||
AddOriginalInspector(inspectorFoldout);
|
||||
|
||||
return newEditorWindow;
|
||||
}
|
||||
|
||||
public VisualElement GetVisualElement(){
|
||||
VisualElement myInspector = null;
|
||||
|
||||
string GetVisualTreeString(){
|
||||
return coreLayoutsFolder + layoutsFolder + "/" + this.GetType().FullName + ".uxml";
|
||||
}
|
||||
|
||||
try {
|
||||
myInspector = AssetDatabase.LoadAssetAtPath<VisualTreeAsset>(GetVisualTreeString()).Instantiate();
|
||||
} catch {
|
||||
Debug.LogError($"Failed to find the following layout: {GetVisualTreeString()}");
|
||||
}
|
||||
|
||||
BindEditor(myInspector);
|
||||
|
||||
return myInspector;
|
||||
}
|
||||
|
||||
public abstract void BindEditor(VisualElement element);
|
||||
|
||||
public void AddOriginalInspector(VisualElement foldout){
|
||||
// Attach a default Inspector to the Foldout.
|
||||
InspectorElement.FillDefaultInspector(foldout.Q("DefaultFoldout"), serializedObject, this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Core editor window for all player classes in document. Mainly just so if I change the player folder I don't have to change every classes layoutsFolder, just this one. (or whatever class)
|
||||
public abstract class PlayerEditorWindow : WildsEditorWindow{
|
||||
public override string layoutsFolder{ get; } = "Player";
|
||||
public override string stylesheetsFolder{ get; } = "";
|
||||
}
|
||||
|
||||
[CustomEditor(typeof(PlayerControls))]
|
||||
public class PlayerControlsInspector: PlayerEditorWindow{
|
||||
public PlayerControls script;
|
||||
public Object player;
|
||||
|
||||
public override void BindEditor(VisualElement element){
|
||||
SerializedObject so = new (player);
|
||||
element.dataSource = player;
|
||||
}
|
||||
|
||||
void OnEnable(){
|
||||
player = target;
|
||||
}
|
||||
}
|
||||
|
||||
[CustomEditor(typeof(PlayerMovement))]
|
||||
public class PlayerMovementInspector : PlayerEditorWindow{
|
||||
public PlayerControls script;
|
||||
public Object player;
|
||||
|
||||
public override void BindEditor(VisualElement element){
|
||||
SerializedObject so = new (player);
|
||||
element.dataSource = player;
|
||||
}
|
||||
|
||||
void OnEnable(){
|
||||
player = target;
|
||||
}
|
||||
}
|
||||
2
Assets/Core/UI/Editor/Scripts/PlayerEditorWindow.cs.meta
Normal file
2
Assets/Core/UI/Editor/Scripts/PlayerEditorWindow.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: be70d6f2acc39ce408b051148cef730c
|
||||
39
Assets/Core/UI/Editor/Scripts/UIConverters.cs
Normal file
39
Assets/Core/UI/Editor/Scripts/UIConverters.cs
Normal file
@@ -0,0 +1,39 @@
|
||||
using UnityEditor;
|
||||
using UnityEditor.UIElements;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UIElements;
|
||||
using UnityEngine.UIElements.Experimental;
|
||||
|
||||
public class UIConverters
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
[InitializeOnLoadMethod]
|
||||
#else
|
||||
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
|
||||
#endif
|
||||
public static void InitConverters(){
|
||||
var group = new ConverterGroup("Normalized to Percent");
|
||||
group.AddConverter<float, StyleLength >((ref float input) => Length.Percent(input * 100));
|
||||
ConverterGroups.RegisterConverterGroup(group);
|
||||
|
||||
var invert = new ConverterGroup("Normalized to Percent (Inverted)");
|
||||
invert.AddConverter<float, StyleLength>((ref float input) => Length.Percent(-input * 100f));
|
||||
ConverterGroups.RegisterConverterGroup(invert);
|
||||
|
||||
var boolColorConverter = new ConverterGroup("Bool to Color");
|
||||
boolColorConverter.AddConverter<bool, StyleColor>(((ref bool input) => boolToColor(input)));
|
||||
ConverterGroups.RegisterConverterGroup(boolColorConverter);
|
||||
|
||||
return;
|
||||
|
||||
StyleColor boolToColor(bool value){
|
||||
if (value == true) {
|
||||
return new Color(113, 113, 113);
|
||||
}
|
||||
|
||||
return new Color(73, 132, 99);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
2
Assets/Core/UI/Editor/Scripts/UIConverters.cs.meta
Normal file
2
Assets/Core/UI/Editor/Scripts/UIConverters.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ecdfab6df41ac144282b331ee296a5fd
|
||||
Reference in New Issue
Block a user