예제 #1
0
    public ExposedDelegateEditor(UtilityAIActionEditor utilityAIActionEditor, ExposedDelegate exposedDelegate)
    {
        this.utilityAIActionEditor = utilityAIActionEditor;
        this.exposedDelegate       = exposedDelegate;

        VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/UtilityAI/Scripts/Editor/Exposed Delegate Editor/ExposedDelegateEditor.uxml");

        visualTree.CloneTree(this);

        StyleSheet stylesheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/UtilityAI/Scripts/Editor/Exposed Delegate Editor/ExposedDelegateEditor.uss");

        this.styleSheets.Add(stylesheet);

        this.AddToClassList("exposedDelegateEditor");

        Button btnAddDelegateEntry = this.Query <Button>("btnAddNewMethod").First();

        btnAddDelegateEntry.BringToFront();
        btnAddDelegateEntry.clickable.clicked += AddDelegateEntry;

        Button btnRemoveAllDelegateEntries = this.Query <Button>("btnRemoveAllMethods").First();

        btnRemoveAllDelegateEntries.BringToFront();
        btnRemoveAllDelegateEntries.clickable.clicked += RemoveAllDelegateEntries;

        delegateEntriesList = this.Query <Foldout>("delegateEntries");
        delegateEntriesList.Query <Toggle>().First().AddToClassList("delegateEntryFoldout");

        delegateEntriesContainer = delegateEntriesList.Query <VisualElement>("delegateEntriesContainer").First();

        UpdateDelegateEntries();
    }
 public void UpdateActions()
 {
     actionContainer.Clear();
     foreach (UtilityAIAction action in utilityAIAgent.actions)
     {
         UtilityAIActionEditor utilityAIActionEditor = new UtilityAIActionEditor(this, action);
         actionContainer.Add(utilityAIActionEditor);
     }
 }
    public UtilityAIConsiderationEditor(UtilityAIActionEditor utilityAIActionEditor, UtilityAIConsideration consideration)
    {
        this.consideration         = consideration;
        this.utilityAIActionEditor = utilityAIActionEditor;

        VisualTreeAsset visualTree = AssetDatabase.LoadAssetAtPath <VisualTreeAsset>("Assets/UtilityAI/Scripts/Editor/Utility AI Consideration Editor/UtilityAIConsiderationEditor.uxml");

        visualTree.CloneTree(this);

        StyleSheet stylesheet = AssetDatabase.LoadAssetAtPath <StyleSheet>("Assets/UtilityAI/Scripts/Editor/Utility AI Consideration Editor/UtilityAIConsiderationEditor.uss");

        this.styleSheets.Add(stylesheet);

        this.AddToClassList("utilityAIActionEditor");

        Button moveUpButton = this.Query <Button>("moveUpButton").First();

        moveUpButton.BringToFront();
        moveUpButton.clickable.clicked += MoveConsiderationUp;

        Button moveDownButton = this.Query <Button>("moveDownButton").First();

        moveDownButton.BringToFront();
        moveDownButton.clickable.clicked += MoveConsiderationDown;

        Button deleteButton = this.Query <Button>("deleteButton").First();

        deleteButton.BringToFront();
        deleteButton.clickable.clicked += DeleteConsideration;

        considerationContainerFoldout      = this.Query <Foldout>("consideration").First();
        considerationContainerFoldout.text = consideration.name + ": ";

        considerationContainerFoldout.Query <Toggle>().First().AddToClassList("considerationFoldout");

        responseCurveContainer = this.Query <VisualElement>("responseCurve").First();

        TextField nameField = this.Query <TextField>("considerationName").First();

        nameField.value = consideration.name;
        nameField.RegisterCallback <ChangeEvent <string> >(
            e =>
        {
            if (e.newValue != "")
            {
                consideration.name = (string)e.newValue;
                considerationContainerFoldout.text = (string)e.newValue + ":";
            }
        }
            );

        Toggle enabledField = this.Query <Toggle>("considerationEnabled").First();

        enabledField.value = consideration.enabled;
        enabledField.RegisterCallback <ChangeEvent <bool> >(
            e =>
        {
            consideration.enabled = (bool)e.newValue;
        }
            );

        VisualElement     inputFieldContainer                  = this.Query <VisualElement>("considerationInput").First();
        List <GameObject> considerationInputsPrefabs           = FindPrefabsWithComponent <UtilityAIConsiderationInput>();
        List <UtilityAIConsiderationInput> considerationInputs = new List <UtilityAIConsiderationInput>();

        foreach (GameObject prefab in considerationInputsPrefabs)
        {
            considerationInputs.Add(prefab.GetComponent <UtilityAIConsiderationInput>());
        }
        if (consideration.considerationInput == null)
        {
            consideration.considerationInput = considerationInputs[0];
        }
        Debug.Log(consideration.considerationInput);
        int currentIndex = considerationInputs.IndexOf(consideration.considerationInput);
        PopupField <UtilityAIConsiderationInput> inputFieldPopup = new PopupField <UtilityAIConsiderationInput>("Consideration Inputs: ", considerationInputs, currentIndex);

        inputFieldPopup.RegisterCallback <ChangeEvent <UtilityAIConsiderationInput> >(
            e =>
        {
            consideration.considerationInput = (UtilityAIConsiderationInput)e.newValue;
        }
            );
        inputFieldContainer.Add(inputFieldPopup);

        UpdateResponseCurve();
    }