private void DrawAISelector(int idx) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("AI", _aiNames[idx]); if (GUILayout.Button(SharedStyles.changeSelectionTooltip, SharedStyles.BuiltIn.changeButtonSmall)) { GUI.changed = false; var aiCfg = _target.aiConfigs[idx]; var screenPos = EditorGUIUtility.GUIToScreenPoint(Event.current.mousePosition); var win = AISelectorWindow.Get( screenPos, (ai) => { if (aiCfg.aiId != ai.aiId) { if (_target.aiConfigs.Any(cfg => cfg.aiId == ai.aiId)) { EditorUtility.DisplayDialog("Duplicate AI", "The selected AI is already part of this client.", "OK"); return; } _aiNames[idx] = ai.name; aiCfg.aiId = ai.aiId; EditorUtility.SetDirty(_target); } }); var curSelectedId = aiCfg.aiId; win.Preselect((ai) => ai.aiId == curSelectedId); } EditorGUILayout.EndHorizontal(); }
internal static void ShowCanvasMenu(AIUI ui, Vector2 mousePos) { var menu = new GenericMenu(); var screenPos = EditorGUIUtility.GUIToScreenPoint(mousePos); menu.AddItem(new GUIContent("Add Selector"), false, () => AIEntitySelectorWindow.Get <Selector>(screenPos, (selectorType) => { ui.AddSelector(mousePos, selectorType); })); menu.AddItem(new GUIContent("Add AI Link"), false, () => AISelectorWindow.Get(screenPos, (storedAI) => { ui.AddAILink(mousePos, storedAI.aiId); })); AddSharedItems(menu, ui, true, mousePos); }
private void ShowChangeLinkMenu(AILinkView lv) { Action <AIStorage> cb = (ai) => { lv.parent.ChangeAILink(lv, new Guid(ai.aiId)); }; // We do not want the button click itself to count as a change. GUI.changed = false; var screenPos = EditorGUIUtility.GUIToScreenPoint(Event.current.mousePosition); AISelectorWindow.Get(screenPos, cb); }
private void DrawAISelector() { EditorGUILayout.BeginHorizontal(); _relevantAIValue.text = _relevantAiName; EditorGUILayout.LabelField(_relevantAILabel, _relevantAIValue); if (GUILayout.Button(SharedStyles.changeSelectionTooltip, SharedStyles.BuiltIn.changeButtonSmall)) { GUI.changed = false; var screenPos = EditorGUIUtility.GUIToScreenPoint(Event.current.mousePosition); var win = AISelectorWindow.Get( screenPos, (ai) => { if (ai == null) { if (!string.IsNullOrEmpty(_target.relevantAIId)) { _relevantAiName = "All"; _target.relevantAIId = null; EditorUtility.SetDirty(_target); } } else if (_target.relevantAIId != ai.aiId) { _relevantAiName = ai.name; _target.relevantAIId = ai.aiId; EditorUtility.SetDirty(_target); } }, true); var curSelectedId = _target.relevantAIId; win.Preselect((ai) => ai.aiId == curSelectedId); } EditorGUILayout.EndHorizontal(); }
internal static void ShowViewMenu(AIUI ui, Vector2 mousePos) { var menu = new GenericMenu(); var screenPos = EditorGUIUtility.GUIToScreenPoint(mousePos); bool allowDelete = true; if (ui.currentAction != null) { var qv = ui.currentQualifier; Action <Type> cb = (t) => { var newInstance = (IAction)Activator.CreateInstance(t); ui.ReplaceAction(qv, newInstance); }; menu.AddItem(new GUIContent("Change Type"), false, () => AIEntitySelectorWindow.Get <IAction>(screenPos, cb)); } else if (ui.currentQualifier != null) { string label = (ui.currentAction == null && ui.currentQualifier.actionView == null) ? "Add Action" : "Replace Action"; menu.AddItem(new GUIContent(label), false, () => AIEntitySelectorWindow.Get <IAction>(screenPos, (actionType) => { ui.SetAction(actionType); })); menu.AddItem(new GUIContent("Add Qualifier (sibling)"), false, () => AIEntitySelectorWindow.Get <IQualifier>(screenPos, (qualifierType) => { ui.AddQualifier(qualifierType); })); var qv = ui.currentQualifier; if (qv.isDefault) { allowDelete = false; } else { Action <Type> cb = (t) => { var newInstance = (IQualifier)Activator.CreateInstance(t); ui.ReplaceQualifier(qv, newInstance); }; menu.AddSeparator(string.Empty); menu.AddItem(new GUIContent("Change Type"), false, () => AIEntitySelectorWindow.Get <IQualifier>(screenPos, cb)); } } else if (ui.currentSelector != null) { var sv = ui.currentSelector; menu.AddItem(new GUIContent("Add Qualifier"), false, () => AIEntitySelectorWindow.Get <IQualifier>(screenPos, (qualifierType) => { ui.AddQualifier(qualifierType); })); menu.AddSeparator(string.Empty); if (sv.isRoot) { allowDelete = false; } else { menu.AddItem(new GUIContent("Set as Root"), false, () => ui.SetRoot(sv.selector)); } Action <Type> cb = (t) => { var newInstance = (Selector)Activator.CreateInstance(t); ui.ReplaceSelector(sv, newInstance); }; menu.AddItem(new GUIContent("Change Type"), false, () => AIEntitySelectorWindow.Get <Selector>(screenPos, cb)); } else if (ui.currentAILink != null) { var alv = ui.currentAILink; Action <AIStorage> cb = (ai) => { ui.ChangeAILink(alv, new Guid(ai.aiId)); }; menu.AddItem(new GUIContent("Change AI"), false, () => AISelectorWindow.Get(screenPos, cb)); } AddSharedItems(menu, ui, allowDelete, mousePos); }
private void AddNew() { var screenPos = EditorGUIUtility.GUIToScreenPoint(Event.current.mousePosition); AISelectorWindow.Get(screenPos, DoAddNew); }