// // MessageBox.cs // // Author: // fjy // // Copyright (c) 2020 fjy // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. using ET; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Object = UnityEngine.Object; public class MessageBox : IEnumerator { public bool isOk { get; private set; } private bool _visible = true; #region IEnumerator implementation public bool MoveNext() { return _visible; } public void Reset() { } public object Current { get { return null; } } #endregion private GameObject gameObject { get; set; } private Text _title; private Text _content; private Text _textOk; private Text _textNo; private static readonly GameObject _prefab = Resources.Load("MessageBox"); private static readonly List _showed = new List(); private static readonly List _hidden = new List(); public static void Dispose() { foreach (MessageBox item in _hidden) { item.Destroy(); } _hidden.Clear(); foreach (MessageBox item in _showed) { item.Destroy(); } _showed.Clear(); } public static void CloseAll() { for (int index = 0; index < _showed.Count; index++) { MessageBox messageBox = _showed[index]; messageBox.Hide(); _hidden.Add(messageBox); } _showed.Clear(); } public static MessageBox Show(string title, string content, string ok = "确定", string no = "取消") { if (_hidden.Count > 0) { MessageBox mb = _hidden[0]; mb.Init(title, content, ok, no); mb.gameObject.SetActive(true); _hidden.RemoveAt(0); return mb; } else { return new MessageBox(title, content, ok, no); } } private void Destroy() { _title = null; _textOk = null; _textNo = null; _content = null; Object.DestroyImmediate(gameObject); gameObject = null; } private MessageBox(string title, string content, string ok, string no) { gameObject = Object.Instantiate(_prefab); gameObject.name = title; _title = GetComponent("Title"); _content = GetComponent("Content/Text"); _textOk = GetComponent("Buttons/Ok/Text"); _textNo = GetComponent("Buttons/No/Text"); Button ok1 = GetComponent