using DG.Tweening; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; /// /// 主界面建筑 /// public class MainUIBuilder : MonoBehaviour { /// /// 初始化建筑的虚拟相机 /// [SerializeField] private Dictionary m_InitBuilderMCs = new Dictionary(); /// /// 点击建筑的虚拟相机 /// [SerializeField] private Dictionary m_ClickBuildeMCs = new Dictionary(); /// /// 解锁建筑的虚拟相机 /// [SerializeField] private Dictionary m_UnlockBuilderMCs = new Dictionary(); private Dictionary m_UnlockBuilderCollider = new Dictionary(); /// /// 界面渐变过度遮罩 /// [SerializeField] private Image m_BlackBoxs; /// /// UI目标节点列表 /// [SerializeField] private Dictionary m_UiTargetPoints = new Dictionary(); /// /// UI列表 /// //[SerializeField] //private Dictionary m_NameUis = new Dictionary(); private Vector3 originOff; // 当前UI系统(0,0)点 相对于屏幕左下角(0, 0)点的偏移量 public bool isInput; private sm_build buildInfo; private int selectBuildIndex = 0; EventSystem eventSystem; GraphicRaycaster raycastInCanvas; Transform nameUis; private IEnumerator enumerator = null; GameObject m_BG; GameObject _uiCanvas = null; UI_BuildInfo[] buildInfos = null; List builderIDs; //GameObject m_Canvas; //GameObject m_MainCamera; ///// ///// 事件字典,存储注册事件 ///// //private Dictionary EventDic = new Dictionary(); //private bool enableBuilderCollider; private void OnEnable() { m_BG = transform.Find("BG").gameObject; _uiCanvas = transform.Find("Canvas").gameObject; //ShowUICanvas(); //m_Canvas = transform.Find("Canvas").gameObject; //m_MainCamera = transform.Find("Main Camera").gameObject; ///获取所需对象 Transform initBuilderMCs = transform.Find("CMs/InitBuilderMCs"); foreach (Transform child in initBuilderMCs) { UI_BuildInfo info = child.GetComponent(); m_InitBuilderMCs[info.buildId] = child; } Transform clickBuildeMCs = transform.Find("CMs/ClickBuildeMCs"); foreach (Transform child in clickBuildeMCs) { UI_BuildInfo info = child.GetComponent(); m_ClickBuildeMCs[info.buildId] = child; } Transform nlockBuilderMCs = transform.Find("CMs/UnlockBuilderMCs"); foreach (Transform child in nlockBuilderMCs) { UI_BuildInfo info = child.GetComponent(); m_UnlockBuilderMCs[info.buildId] = child; } Transform nlockBuilderCld = transform.Find("BG/Main"); foreach (Transform child in nlockBuilderCld) { UI_BuildInfo info = child.GetComponentInChildren(); if (info == null) { continue; } Collider collider = info.transform.GetComponentInChildren(true); if (collider) { m_UnlockBuilderCollider[info.buildId] = collider.transform; } else { m_UnlockBuilderCollider[info.buildId] = null; } } // 初始化建筑点击回调 buildInfos = gameObject.GetComponentsInChildren(true); if (buildInfos != null) { for (int i = 0; i < buildInfos.Length; i++) { buildInfos[i].touchUpAC = ClickBuildCallback; } } else { Debug.Log("xxxxxxx初始化建筑失败"); } m_BlackBoxs = transform.Find("Canvas/BlackBox").GetComponent(); //ui位置 Transform UiTargetPoints = transform.Find("UiTargetPoints"); foreach (Transform child in UiTargetPoints) { UI_BuildInfo info = child.GetComponent(); m_UiTargetPoints[info.buildId] = child; } originOff = new Vector3(-Screen.width / 2, -Screen.height / 2); raycastInCanvas = this.transform.Find("Canvas").GetComponent(); Reposition(); InitBuilder(); } // Start is called before the first frame update void Start() { isInput = false; //enableBuilderCollider = true; ////事件注册测试,正式版本请删除。 //AddBuiderClickEventListener(1,()=> //{ // Debug.Log("关卡章节界面弹出"); //}); } /// /// 点击建筑回调 /// /// private void ClickBuildCallback(int builID) { List builderIDs = UserProxy.Instance.player.PrivateState.unlockedBuild; if (builderIDs.Contains(builID) == false) { return; } buildInfo = sm_build.GetMoById(builID); if (buildInfo != null) { SelectBuilder(buildInfo.id); } } // Update is called once per frame void Update() { //if(PanelHelper.Instance.GetNowPanelName() != "UI_BaseMainWindow") //{ // HideUICanvas(); //} //else //{ // ShowUICanvas(); //} if (isInput) { return; } Reposition(); } /// /// 初始化建筑 /// /// 当前已解锁到的建筑id public void InitBuilder() { //this.m_BlackBoxs.gameObject.SetActive(true); //显示可视元素 ShowVisible(); //ShowUICanvas(); if (builderIDs == null) { builderIDs = UserProxy.Instance.player.PrivateState.unlockedBuild; if (builderIDs.Count == 0) { builderIDs.Add(0);//添加默认相机id } } ///关闭全部虚拟相机 CloseAllCM(); //foreach (var item in m_NameUis) //{ // item.Value.gameObject.SetActive(false); //} foreach (var item in m_InitBuilderMCs) { item.Value.gameObject.SetActive(false); } foreach (var item in m_ClickBuildeMCs) { item.Value.gameObject.SetActive(false); } foreach (var item in m_UnlockBuilderCollider) { if (item.Value) { item.Value.gameObject.SetActive(true); Animator anim = item.Value.transform.parent.parent.GetComponent(); if (anim) { anim.Play("lock", 0, 0); } } } foreach (var item in builderIDs) { if (m_UnlockBuilderCollider.ContainsKey(item) && m_UnlockBuilderCollider[item]) { m_UnlockBuilderCollider[item].gameObject.SetActive(true); Animator anim = m_UnlockBuilderCollider[item].transform.parent.parent.GetComponent(); if (anim) { anim.Play("unlock", 0, 0); } } } ///画面渐黑效果 if (builderIDs.Count > 0) { m_InitBuilderMCs[builderIDs[builderIDs.Count - 1]].gameObject.SetActive(true); StopCoroutine("_InitBuilder");//停止协成 StartCoroutine(_InitBuilder(builderIDs[builderIDs.Count - 1]));//开始协成 } } IEnumerator _InitBuilder(int builderID) { //m_BlackBoxs.gameObject.SetActive(true); m_BlackBoxs.color = new Color(1, 1, 1, 1); m_BlackBoxs.DOFade(0, 0.5f); yield return new WaitForSeconds(0.5f);//等待间隔时间 //m_BlackBoxs.gameObject.SetActive(false); isInput = false; } private int convertBuildIdToIndex(int buildId) { switch (buildId) { case 1000: return 0; case 1001: return 1; case 1002: return 2; case 1003: return 3; case 1004: return 4; case 1005: return 5; case 1006: return 6; case 1007: return 7; case 1008: return 8; case 1009: return 9; } return 0; } private int convertIndexToBuildId(int index) { switch (index) { case 0: return 1000; case 1: return 1001; case 2: return 1002; case 3: return 1003; case 4: return 1004; case 5: return 1005; case 6: return 1006; case 7: return 1007; case 8: return 1008; case 9: return 1009; } return 0; } /// /// 选择建筑 /// /// public void SelectBuilder(int builderID = 0, Action callback = null) { isInput = true; selectBuildIndex = builderID; buildInfo = sm_build.GetMoById(builderID); //m_BlackBoxs.gameObject.SetActive(true); ///关闭全部虚拟相机 CloseAllCM(); ///开启推进相机 m_ClickBuildeMCs[builderID].gameObject.SetActive(true); ///画面渐黑效果 if (enumerator != null) { StopCoroutine(enumerator);//停止协成 enumerator = null; } enumerator = _SelectBuilder(builderID, callback); StartCoroutine(enumerator);//开始协成 } IEnumerator _SelectBuilder(int builderID, Action callback = null) { //// 界面功能 //if (buildInfo == null) //{ // yield break; //} //关闭名字UI //foreach (var item in m_NameUis) //{ // if (item.Value != null) // { // item.Value.gameObject.SetActive(false); // } //} yield return new WaitForSeconds(1.0f);//等待间隔时间 m_BlackBoxs.DOFade(1, 0.5f);//画面变黑 yield return new WaitForSeconds(0.5f);//等待间隔时间 HideVisible();//隐藏可视元素 ///触发回调函数 if (callback != null) callback(); yield return new WaitForSeconds(0.1f);//等待间隔时间 //m_BlackBoxs.gameObject.SetActive(false); //enableBuilderCollider = false; //this.m_BlackBoxs.gameObject.SetActive(false); if (buildInfo.functionUI != "") { PanelHelper.Instance.ShowPanel(buildInfo.functionUI); PanelHelper.Instance.ClosePanel("UI_BaseMainWindow"); } // 场景功能 else if (buildInfo.sceneRes != "") { //LevelManager.Instance().LoadLevel(E_Level.Battle, buildInfo.sceneRes, buildInfo.id); LevelManager.Instance().LoadLevel(buildInfo.sceneRes, "", buildInfo.id, 0); } // 其他功能 else { PanelHelper.Instance.ShowPanel("UI_BuildDialogWindow", panel => { //panel.GetComponent().Init(buildInfo.info); }, buildInfo.id.ToString()); } Entrance_WorldMap.mainUIBuilder.gameObject.SetActive(false); } /// /// 解锁建筑 /// /// public void UnlockBuilder(int builderID = 0) { m_BlackBoxs.color = new Color(1, 1, 1, 0); ///关闭全部虚拟相机 CloseAllCM(); ///开启解锁相机 m_UnlockBuilderMCs[builderID].gameObject.SetActive(true); if (m_UnlockBuilderCollider[builderID]) { m_UnlockBuilderCollider[builderID].gameObject.SetActive(true); } } /// /// 关闭全部虚拟相机 /// private void CloseAllCM() { foreach (var obj in m_InitBuilderMCs) { obj.Value.gameObject.SetActive(false); } foreach (var obj in m_ClickBuildeMCs) { obj.Value.gameObject.SetActive(false); } foreach (var obj in m_UnlockBuilderMCs) { obj.Value.gameObject.SetActive(false); } foreach (var obj in m_UnlockBuilderCollider) { if (obj.Value) { obj.Value.gameObject.SetActive(false); } } } /// /// 根据目标物体 重定位UI /// private void Reposition() { if (Camera.main == null) { return; } //遍历全部目标 //遍历全部名字ui //foreach (var item in m_UiTargetPoints) //{ // Vector3 position = Camera.main.WorldToScreenPoint(item.Value.position); // position.z = 0; // m_NameUis[item.Key].localPosition = position; //} } /// /// 隐藏可视元素 /// private void HideVisible() { m_BG.SetActive(false); //m_Canvas.SetActive(false); //m_MainCamera.SetActive(false); } /// /// 显示可视元素 /// private void ShowVisible() { m_BG.SetActive(true); //m_Canvas.SetActive(true); //m_MainCamera.SetActive(true); } //public void HideUICanvas() //{ // _uiCanvas.SetActive(false); //} //public void ShowUICanvas() //{ // _uiCanvas.SetActive(true); //} }