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();
    }
예제 #2
0
    /// <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
    }
예제 #3
0
    public static MovementStateMachineData CreateAssetAndSave(MovementStateMachine machine, string assetStoragePath)
    {
        MovementStateMachineData data = CreateInstance <MovementStateMachineData>();

        machine.FillDataObject(data);

        AssetDatabase.CreateAsset(data, assetStoragePath);

        AssetDatabase.Refresh();

        return(data);
    }
예제 #4
0
    /// <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]);
        }
    }
예제 #5
0
    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);
         }
     }
 }
예제 #7
0
 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;
        }
    }
예제 #9
0
 /// <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));
 }