예제 #1
0
    /// <summary>
    /// Show the message box using specified param.
    /// </summary>
    /// <returns>The show.</returns>
    /// <param name="param">Parameter.</param>
    public static void Show(MessageBoxParams param)
    {
        if (Instance == null)
        {
            GameObject canvasObject = new GameObject();
            canvasObject.name = "Easy Message Box Canvas";
            canvasObject.AddComponent <Canvas>();
            canvasObject.GetComponent <Canvas>().renderMode = RenderMode.ScreenSpaceOverlay;
            canvasObject.AddComponent <CanvasScaler>();
            canvasObject.AddComponent <GraphicRaycaster>();
            canvasObject.AddComponent <EasyMessageBox>();
            Instance = canvasObject.GetComponent <EasyMessageBox>();
            var messageBoxObject = (GameObject)Instantiate(settings.DefaultPrefab);
            var messageBox       = messageBoxObject.GetComponent <BoxController>();
            messageBoxObject.transform.SetParent(Instance.transform);
            Instance.Templates.Add(messageBox);
            Instance.boxPool.Add(new List <BoxController>());
            Instance.boxPool[0].Add(Instance.Templates[0]);
            (messageBoxObject.transform as RectTransform).anchoredPosition = Vector2.zero;
            (messageBoxObject.transform as RectTransform).sizeDelta        = Vector2.zero;
            messageBoxObject.SetActive(false);
            Debug.Log("No template found in the scene, using default message box template.");
        }
        else if (Instance.Templates == null || /*Instance.Templates.Count - 1 < param.TemplateId*/ Instance.Templates.Count == 0)
        {
            Debug.LogWarning("Cannot find template id " + param.TemplateId.ToString() + ", using default message box. Make sure to add corresponding template in the Inspector of EasyMessageBox object before you call its ID.");
            var messageBoxObject = (GameObject)Instantiate(settings.DefaultPrefab);
            var messageBox       = messageBoxObject.GetComponent <BoxController>();
            messageBoxObject.transform.SetParent(Instance.transform);
            Instance.Templates.Add(messageBox);
            param.TemplateId = 0;
            Instance.boxPool.Add(new List <BoxController>());
            Instance.boxPool[0].Add(Instance.Templates[0]);
            (messageBoxObject.transform as RectTransform).anchoredPosition = Vector2.zero;
            (messageBoxObject.transform as RectTransform).sizeDelta        = Vector2.zero;
            messageBoxObject.SetActive(false);
        }

        if (param.TemplateId > Instance.Templates.Count - 1)
        {
            Debug.Log(string.Format("Cannot find template id {0}, using the first template 0.", param.TemplateId.ToString()));
            param.TemplateId = 0;
        }

        switch (param.MultipleCallBehaviour)
        {
        case MultipleCallBehaviours.ShowNewInstance:
            Instance.ActualShowDialogBox(param);
            break;

        case MultipleCallBehaviours.Queue:
            if (!Instance.hasQueuedBox)
            {
                Instance.ActualShowDialogBox(param);
            }
            else
            {
                BoxQueue.Enqueue(param);
            }
            break;

        default:
            break;
        }
    }