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);
//}
}