/// <summary> /// Hides the dialog. /// </summary> /// <param name="content">Content.</param> public void HideDialog(Type uiType) { if (IsInDialogTransition) { EnqueueDialog(uiType, UITransitionType.HIDE, null, null); return; } UIManDialog dialog = null; if (dialogDict.TryGetValue(uiType, out dialog)) { if (dialog.State == UIState.HIDE) { return; } if (activeDialog.Count > 0) { activeDialog.Pop(); } BringToLayer(dialogRoot, cover, cover.GetSiblingIndex() - 1); BringToLayer(dialogRoot, dialog.transform, cover.GetSiblingIndex() - 1); UIManDialog prevDialog = null; if (activeDialog.Count > 0) { dialogDict.TryGetValue(activeDialog.Peek(), out prevDialog); } if (prevDialog != null && prevDialog.useCover) { cover.gameObject.SetActive(true); } else { cover.gameObject.SetActive(false); } IsInDialogTransition = true; dialog.OnHide(); OnHideUI(dialog); DoAnimHide(dialog); } else { UnuLogger.LogFormatWarning("There are no UI of {0} has been show!", uiType.Name); return; } }
public override void OnInspectorGUI() { DrawDefaultInspector(); UIManBase uiManBase = (UIManBase)target; if (uiManBase is UIManDialog) { UIManDialog dialog = (UIManDialog)uiManBase; dialog.useCover = EditorGUILayout.Toggle(cover, dialog.useCover); EditorUtility.SetDirty(target); } if (uiManBase.motionShow == UIMotion.CUSTOM_MECANIM_ANIMATION || uiManBase.motionHide == UIMotion.CUSTOM_MECANIM_ANIMATION) { if (uiManBase.gameObject != null) { uiManBase.animRoot = uiManBase.gameObject.GetComponent <Animator> (); } uiManBase.animRoot = EditorGUILayout.ObjectField(animator, uiManBase.animRoot, typeof(Animator), true) as Animator; if (uiManBase.animRoot == null || uiManBase.animRoot.runtimeAnimatorController == null) { if (GUILayout.Button("Generate Animator")) { AnimationEditorUtils.GenerateAnimator(uiManBase.gameObject, UIManDefine.ANIM_SHOW, UIManDefine.ANIM_HIDE, UIManDefine.ANIM_IDLE); } } } uiManBase.motionShow = (UIMotion)EditorGUILayout.EnumPopup(show, uiManBase.motionShow); uiManBase.motionHide = (UIMotion)EditorGUILayout.EnumPopup(hide, uiManBase.motionHide); uiManBase.motionIdle = (UIMotion)EditorGUILayout.EnumPopup(idle, uiManBase.motionIdle); uiManBase.animTime = EditorGUILayout.FloatField(time, uiManBase.animTime); uiManBase.showPosition = EditorGUILayout.Vector3Field(position, uiManBase.showPosition); if (GUILayout.Button("Edit Logic")) { string handler = CodeGenerationHelper.GetScriptPathByType(target.GetType()); handler = handler.Replace(".cs", ".Handler.cs"); UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(handler, 1); } }
/// <summary> /// Shows the dialog. /// </summary> /// <param name="type">Type.</param> /// <param name="callbacks">Callbacks.</param> /// <param name="args">Arguments.</param> void ShowDialog(Type uiType, UICallback callbacks, params object[] args) { if (IsInDialogTransition || IsLoadingDialog) { EnqueueDialog(uiType, UITransitionType.SHOW, args, callbacks); return; } UIManDialog dialog = null; if (!dialogDict.TryGetValue(uiType, out dialog)) { IsLoadingDialog = true; string prefabPath = Path.Combine(GetUIPrefabPath(uiType, true), uiType.Name); ResourceFactory.LoadAsync <GameObject> (prefabPath, PreprocessUI, uiType, callbacks, args); return; } if (dialog.IsActive) { return; } if (dialog.useCover) { cover.gameObject.SetActive(true); BringToFront(dialogRoot, cover, 1); } BringToFront(dialogRoot, dialog.transform, 2); activeDialog.Enqueue(uiType); IsInDialogTransition = true; dialog.SetCallbacks(callbacks); dialog.OnShow(args); OnShowUI(dialog, args); DoAnimShow(dialog); }
public override void OnInspectorGUI() { GUILayout.BeginHorizontal("Box"); LabelHelper.HeaderLabel("UIMan View Model"); GUILayout.EndHorizontal(); LineHelper.Draw(Color.gray); UIManBase uiManBase = (UIManBase)target; EditorGUILayout.Space(); LabelHelper.HeaderLabel("General"); GUILayout.BeginVertical("Box"); if (uiManBase is UIManDialog) { UIManDialog dialog = (UIManDialog)uiManBase; dialog.useCover = EditorGUILayout.Toggle(cover, dialog.useCover); EditorUtility.SetDirty(target); } else if (uiManBase is UIManBase) { UIManScreen screen = (UIManScreen)uiManBase; screen.useBackground = EditorGUILayout.Toggle(background, screen.useBackground); if (screen.useBackground) { screen.backgroundType = EditorGUILayout.TextField(screen.backgroundType); } EditorUtility.SetDirty(target); } if (uiManBase.motionShow == UIMotion.CUSTOM_MECANIM_ANIMATION || uiManBase.motionHide == UIMotion.CUSTOM_MECANIM_ANIMATION) { if (uiManBase.gameObject != null) { uiManBase.animRoot = uiManBase.gameObject.GetComponent <Animator> (); } uiManBase.animRoot = EditorGUILayout.ObjectField(animator, uiManBase.animRoot, typeof(Animator), true) as Animator; if (uiManBase.animRoot == null || uiManBase.animRoot.runtimeAnimatorController == null) { if (GUILayout.Button("Generate Animator")) { AnimationEditorUtils.GenerateAnimator(uiManBase.gameObject, UIManDefine.ANIM_SHOW, UIManDefine.ANIM_HIDE, UIManDefine.ANIM_IDLE); } } } uiManBase.motionShow = (UIMotion)EditorGUILayout.EnumPopup(show, uiManBase.motionShow); uiManBase.motionHide = (UIMotion)EditorGUILayout.EnumPopup(hide, uiManBase.motionHide); uiManBase.motionIdle = (UIMotion)EditorGUILayout.EnumPopup(idle, uiManBase.motionIdle); UIMotion[] motions = new UIMotion[3] { uiManBase.motionShow, uiManBase.motionHide, uiManBase.motionIdle }; bool haveMecanimAnim = false; bool haveTweenAnim = false; foreach (UIMotion m in motions) { if ((int)m == 7) { haveMecanimAnim = true; } else { haveTweenAnim = true; } } if (haveTweenAnim && haveMecanimAnim) { GUILayout.BeginHorizontal("Box"); EditorGUILayout.LabelField("<color=red><b>Warning: </b>Your motion type is not match with each others so it maybe cause unexpected error!\nPlease select all motion type as Mecanim if you want to make you animation manually with Unity animation editor!</color>", EditorGUIHelper.RichText(true)); GUILayout.EndHorizontal(); } if (uiManBase.motionIdle != UIMotion.CUSTOM_MECANIM_ANIMATION && uiManBase.motionIdle != UIMotion.NONE) { GUILayout.BeginHorizontal("Box"); EditorGUILayout.LabelField("<color=red><b>Warning: </b>Idle motion is now only support Mecanim animation!</color>", EditorGUIHelper.RichText(true)); GUILayout.EndHorizontal(); } uiManBase.animTime = EditorGUILayout.FloatField(time, uiManBase.animTime); uiManBase.showPosition = EditorGUILayout.Vector3Field(position, uiManBase.showPosition); GUILayout.EndVertical(); LineHelper.Draw(Color.gray); EditorGUILayout.Space(); LabelHelper.HeaderLabel("Custom fields"); GUILayout.BeginVertical("Box"); DrawDefaultInspector(); GUILayout.EndVertical(); EditorGUILayout.Space(); if (GUILayout.Button("Edit View (UI)", GUILayout.Height(25))) { GameObject prefabInstance; UnityEngine.Object obj = FindObjectOfType(uiManBase.UIType); if (obj != null) { prefabInstance = ((MonoBehaviour)obj).gameObject; } else { bool isDialog = uiManBase.GetUIBaseType() == UIBaseType.DIALOG; // string prefabFolder = GetUIPrefabPath (selectedType, isDialog); // string prefabFile = selectedType.Name + PREFAB_EXT; // string prefabPath = Path.Combine (prefabFolder, prefabFile); // GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject> (prefabPath); // if (prefab == null) { // prefab = FindAssetObject<GameObject> (selectedType.Name, PREFAB_EXT); // } prefabInstance = PrefabUtility.InstantiatePrefab(uiManBase.gameObject) as GameObject; if (isDialog) { prefabInstance.transform.SetParent(UIMan.Instance.dialogRoot, false); } else { prefabInstance.transform.SetParent(UIMan.Instance.screenRoot, false); } } Selection.activeGameObject = prefabInstance; } if (GUILayout.Button("Edit View Logic (Handler)", GUILayout.Height(25))) { string handler = CodeGenerationHelper.GetScriptPathByType(target.GetType()); handler = handler.Replace(".cs", ".Handler.cs"); UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(handler, 1); } }