public override void OnInspectorGUI() { MovementStateMachine tar = target as MovementStateMachine; var playerProp = serializedObject.FindProperty(tar.PlayerPropertyName); EditorGUILayout.ObjectField(playerProp, new GUIContent("Player: ")); MovementStateMachineData data = tar.Data; data = EditorGUILayout.ObjectField("Data:", data, typeof(MovementStateMachineData), false) as MovementStateMachineData; if (data != null) { tar.MovementStateMachineDataAssetPath = AssetDatabase.GetAssetPath(data); } EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Save")) { MovementStateMachineData.Save(tar); } if (GUILayout.Button("Reload")) { tar.ReloadFromData(); } EditorGUILayout.EndHorizontal(); }
/// <summary> /// tries to load machine data form asset path /// editor loads from asset datapath /// game from Resources /// </summary> private void TryLoadData() { IsLoaded = false; #if UNITY_EDITOR data = UnityEditor.AssetDatabase.LoadAssetAtPath <MovementStateMachineData>(MovementStateMachineDataAssetPath); #else data = Resources.Load <MovementStateMachineData>(MovementStateMachineDataAssetPath); #endif }
public static MovementStateMachineData CreateAssetAndSave(MovementStateMachine machine, string assetStoragePath) { MovementStateMachineData data = CreateInstance <MovementStateMachineData>(); machine.FillDataObject(data); AssetDatabase.CreateAsset(data, assetStoragePath); AssetDatabase.Refresh(); return(data); }
/// <summary> /// fills a data object with all the data of the machine /// </summary> /// <param name="data">the data object needing filling</param> public void FillDataObject(MovementStateMachineData data) { for (int i = 0; i < generalMovementOptions.Count; i++) { data.AddGeneralMovementOption(generalMovementOptions[i]); } for (int i = 0; i < StateCount; i++) { data.AddState(movementStates[i]); } }
public static bool Save(MovementStateMachine machine, out MovementStateMachineData data) { string path = EditorUtility.SaveFilePanelInProject("Save Data", $"StateMachine{machine.StateCount}", "asset", "Create Data Object"); if (path.Length != 0) { //Success data = machine.Save(path); return(true); } data = null; return(false); }
private void HandleStates(MovementStateMachineData data) { if (data.States == null) { return; } statesFoldOut = EditorGUILayout.Foldout(statesFoldOut, "States:"); if (statesFoldOut) { for (int i = 0; i < data.States.Count; i++) { var st = data.States[i]; HandleState(st, i); } } }
private void DrawGUI() { if (StateMachine == null) { return; } //TODO if (GUILayout.Button("Save")) { MovementStateMachineData data = null; MovementStateMachineData.Save(StateMachine, out data); if (data != null) { StateMachine.MovementStateMachineDataAssetPath = AssetDatabase.GetAssetPath(data); } } }
void HandleGeneralMovementOptions(MovementStateMachineData data) { if (data.GeneralOptionsData == null) { return; } var content = new GUIContent("Machine Movement Options:"); var style = new GUIStyle("BoldLabel"); style.wordWrap = true; generaldataFoldOut = EditorGUILayout.Foldout(generaldataFoldOut, content, style); if (generaldataFoldOut) { EditorGUI.indentLevel += 1; for (int i = 0; i < data.GeneralOptionsData.Count; i++) { EditorGUILayout.LabelField(data.GeneralOptionsData[i]); EditorGUIDrawUtility.DrawHorizontalLine(); } EditorGUI.indentLevel -= 1; } }
/// <summary> /// saves the machine to a location /// </summary> /// <param name="path">the location where to save to</param> /// <returns>the serialized object created where the machine is saved</returns> public MovementStateMachineData Save(string path) { return(MovementStateMachineData.CreateAssetAndSave(this, path)); }