Movement Definition Creator Added
This commit is contained in:
parent
93793e1762
commit
b6dbfea477
|
@ -135,14 +135,5 @@ namespace Syntriax.Modules.Movement.Config
|
||||||
foreach (string monoBehaviours in definition.MonoBehaviours)
|
foreach (string monoBehaviours in definition.MonoBehaviours)
|
||||||
MovementFactory.Instance.AddToGameObject(gameObject, monoBehaviours);
|
MovementFactory.Instance.AddToGameObject(gameObject, monoBehaviours);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if UNITY_EDITOR
|
|
||||||
public static void SaveMovementDefinition(MovementDefinition definition)
|
|
||||||
{
|
|
||||||
string jsonText = JsonUtility.ToJson(definition, true);
|
|
||||||
string path = $"Assets/Resources/{ResourceDirectoryToDefinitions}{definition.Name}.json";
|
|
||||||
System.IO.File.WriteAllText(path, jsonText);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ namespace Syntriax.Modules.Movement.Config
|
||||||
return gameObject.AddComponent(Types[name]);
|
return gameObject.AddComponent(Types[name]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetTypeName(Type type)
|
public static string GetTypeName(Type type)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(type.Namespace))
|
if (string.IsNullOrEmpty(type.Namespace))
|
||||||
return type.Name;
|
return type.Name;
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
using UnityEngine;
|
|
||||||
using UnityEditor;
|
|
||||||
using UnityEditorInternal;
|
|
||||||
|
|
||||||
namespace Syntriax.Modules.Movement.Editor
|
|
||||||
{
|
|
||||||
public class CreateMovementDefinitionEditor : EditorWindow
|
|
||||||
{
|
|
||||||
ReorderableList list;
|
|
||||||
|
|
||||||
[MenuItem("Syntriax/Modules/Create Movement Definition")]
|
|
||||||
private static void ShowWindow()
|
|
||||||
{
|
|
||||||
var window = GetWindow<CreateMovementDefinitionEditor>();
|
|
||||||
window.titleContent = new GUIContent("Create Movement Definition");
|
|
||||||
window.Show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnGUI()
|
|
||||||
{
|
|
||||||
GUILayout.Label("Definition Name");
|
|
||||||
string definitionName = GUILayout.TextField("Movement Definition");
|
|
||||||
|
|
||||||
GUILayout.Space(10);
|
|
||||||
bool createButtonPressed = GUILayout.Button("Create");
|
|
||||||
|
|
||||||
if (!createButtonPressed)
|
|
||||||
return;
|
|
||||||
|
|
||||||
string resourceDirectoryToDefinitions = Movement.Config.MovementDefinitionFactory.ResourceDirectoryToDefinitions;
|
|
||||||
string[] folders = resourceDirectoryToDefinitions.Split('/');
|
|
||||||
|
|
||||||
string currentPath = "Assets/Resources";
|
|
||||||
CreateSubFolder("Assets", "Resources");
|
|
||||||
foreach (string folder in folders)
|
|
||||||
{
|
|
||||||
CreateSubFolder(currentPath, folder);
|
|
||||||
currentPath += $"/{folder}";
|
|
||||||
}
|
|
||||||
|
|
||||||
currentPath += $"/{definitionName}.json";
|
|
||||||
Movement.Config.MovementDefinitionFactory.SaveMovementDefinition(new Config.MovementDefinition(definitionName, new Config.MovementConfig[0], new string[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void CreateSubFolder(string parentFolder, string subFolder)
|
|
||||||
{
|
|
||||||
if (!AssetDatabase.IsValidFolder($"{parentFolder}/{subFolder}"))
|
|
||||||
AssetDatabase.CreateFolder(parentFolder, subFolder);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEditor;
|
||||||
|
using UnityEditorInternal;
|
||||||
|
using Syntriax.Modules.Movement.Config;
|
||||||
|
|
||||||
|
namespace Syntriax.Modules.Movement.Editor
|
||||||
|
{
|
||||||
|
public class DefinitionCreatorEditor : EditorWindow
|
||||||
|
{
|
||||||
|
ReorderableList list;
|
||||||
|
public MovementDefinition movementDefinition = new MovementDefinition();
|
||||||
|
private SerializedObject serializedObject;
|
||||||
|
|
||||||
|
[MenuItem("Syntriax/Modules/Movement/Definition Creator")]
|
||||||
|
private static void ShowWindow()
|
||||||
|
{
|
||||||
|
var window = GetWindow<DefinitionCreatorEditor>();
|
||||||
|
window.titleContent = new GUIContent("Definition Creator");
|
||||||
|
window.Reset();
|
||||||
|
window.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Reset()
|
||||||
|
{
|
||||||
|
movementDefinition.Name = "Example Movement Definition";
|
||||||
|
movementDefinition.MovementConfigs = new MovementConfig[] { new MovementConfig(MovementFactory.GetTypeName(typeof(Implementations.GroundMovement1D)), 5f) };
|
||||||
|
movementDefinition.MonoBehaviours = new string[] { MovementFactory.GetTypeName(typeof(MovementController)) };
|
||||||
|
|
||||||
|
serializedObject = new SerializedObject(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnEnable() => serializedObject = new SerializedObject(this);
|
||||||
|
|
||||||
|
private void OnGUI()
|
||||||
|
{
|
||||||
|
GUILayout.Space(10);
|
||||||
|
|
||||||
|
SerializedProperty movementDefinitionProperty = serializedObject.FindProperty("movementDefinition");
|
||||||
|
SerializedProperty movementName = movementDefinitionProperty.FindPropertyRelative("Name");
|
||||||
|
SerializedProperty movementMovementConfigs = movementDefinitionProperty.FindPropertyRelative("MovementConfigs");
|
||||||
|
SerializedProperty movementMonoBehaviours = movementDefinitionProperty.FindPropertyRelative("MonoBehaviours");
|
||||||
|
|
||||||
|
// EditorGUILayout.PropertyField(movementDefinitionProperty, new GUIContent("New Movement Definition"), true);
|
||||||
|
EditorGUILayout.PropertyField(movementName);
|
||||||
|
EditorGUILayout.PropertyField(movementMovementConfigs, true);
|
||||||
|
EditorGUILayout.PropertyField(movementMonoBehaviours);
|
||||||
|
serializedObject.ApplyModifiedProperties();
|
||||||
|
|
||||||
|
GUILayout.Space(10);
|
||||||
|
|
||||||
|
bool createButtonPressed = GUILayout.Button("Create");
|
||||||
|
GUILayout.Label($"Will be saved to Assets/Resources/{MovementDefinitionFactory.ResourceDirectoryToDefinitions}{movementName.stringValue}.json");
|
||||||
|
|
||||||
|
GUILayout.Space(10);
|
||||||
|
|
||||||
|
GUILayout.Label("Tip: MovementConfigs->TypeName and MonoBehaviours have the same naming system");
|
||||||
|
GUILayout.Label("If under a namespace: \"Namespace.ClassName\"");
|
||||||
|
GUILayout.Label("If not under a namespace: \"ClassName\"");
|
||||||
|
|
||||||
|
if (!createButtonPressed)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(movementName.stringValue))
|
||||||
|
{
|
||||||
|
EditorUtility.DisplayDialog("Empty Name Field", "Name field must be not empty", "OK");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string resourceDirectoryToDefinitions = MovementDefinitionFactory.ResourceDirectoryToDefinitions;
|
||||||
|
string[] folders = resourceDirectoryToDefinitions.Split('/');
|
||||||
|
|
||||||
|
string currentPath = "Assets/Resources";
|
||||||
|
CreateSubFolder("Assets", "Resources");
|
||||||
|
foreach (string folder in folders)
|
||||||
|
{
|
||||||
|
CreateSubFolder(currentPath, folder);
|
||||||
|
currentPath += $"/{folder}";
|
||||||
|
}
|
||||||
|
|
||||||
|
currentPath += $"/{movementName.stringValue}.json";
|
||||||
|
SaveMovementDefinition(movementDefinition);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CreateSubFolder(string parentFolder, string subFolder)
|
||||||
|
{
|
||||||
|
if (!AssetDatabase.IsValidFolder($"{parentFolder}/{subFolder}"))
|
||||||
|
AssetDatabase.CreateFolder(parentFolder, subFolder);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveMovementDefinition(MovementDefinition definition)
|
||||||
|
{
|
||||||
|
string jsonText = JsonUtility.ToJson(definition, true);
|
||||||
|
string path = $"Assets/Resources/{MovementDefinitionFactory.ResourceDirectoryToDefinitions}{definition.Name}.json";
|
||||||
|
|
||||||
|
if (!EditorUtility.DisplayDialog("Conflict", $"\"{path}\" already exists, do you want to overwrite?", "Overwrite", "Cancel"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
System.IO.File.WriteAllText(path, jsonText);
|
||||||
|
AssetDatabase.Refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
fileFormatVersion: 2
|
fileFormatVersion: 2
|
||||||
guid: 4e6c6eea597fd2d4e96946897f9a0bd6
|
guid: 66c563464d207f24999eef31c43f1fc8
|
||||||
MonoImporter:
|
MonoImporter:
|
||||||
externalObjects: {}
|
externalObjects: {}
|
||||||
serializedVersion: 2
|
serializedVersion: 2
|
Loading…
Reference in New Issue