using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using QFramework;
using HighlightingSystem;
using Sirenix.OdinInspector;
public enum ShowState
{
///
/// 隐藏
///
Hide,
///
/// 透明
///
Tran
}
public class PartMark : MonoBehaviour
{
///
/// 子物体
///
public List m_ChildPartMarks;
///
/// 初始材质球
///
public Dictionary m_DicOldMeshRender;
///
/// 目前的状态
///
private bool m_CurrentState;
private void Awake()
{
m_ChildPartMarks = new List();
m_DicOldMeshRender = new Dictionary();
InitData();
AddMeshColliders();
}
///
/// 初始化
///
public void InitData()
{
MeshRenderer tmpSelfMeshRender = transform.GetComponent();
if (tmpSelfMeshRender != null) m_DicOldMeshRender.Add(tmpSelfMeshRender, tmpSelfMeshRender.material);
for (int i = 0; i < transform.childCount; i++)
{
if (transform.GetChild(i).GetComponent() != null) m_ChildPartMarks.Add(transform.GetChild(i).GetComponent());
}
GetAllChildMeshRender(transform);
}
///
/// 添加碰撞体
///
public void AddMeshColliders()
{
MeshRenderer[] meshRenderers = GetComponentsInChildren();
foreach (var item in meshRenderers)
{
if (item.GetComponent() == null)
{
item.gameObject.AddComponent();
}
}
}
///
/// 设置状态
///
///
public void SetState(bool state)
{
SetInitState();
//如果是点击半透模式
if (DeviceController.instance.m_ShowState == ShowState.Tran)
{
Material tmpTransMaterial = Resources.Load("Trans");
foreach (var item in m_DicOldMeshRender)
{
if (state)
{
item.Key.material = item.Value;
}
else
{
item.Key.material = tmpTransMaterial;
if (item.Key.GetComponent()) item.Key.GetComponent().enabled = false;
}
}
}
else //点击隐藏模式
{
this.gameObject.SetActive(state);
}
m_CurrentState = state;
}
///
/// 获取子级不携带PartMark标签的子级材质球
///
///
private void GetAllChildMeshRender(Transform target)
{
for (int i = 0; i < target.childCount; i++)
{
if (target.GetChild(i).GetComponent() == null)
{
MeshRenderer tmpMeshRender = target.GetChild(i).GetComponent();
if (tmpMeshRender != null)
{
m_DicOldMeshRender.Add(tmpMeshRender, tmpMeshRender.material);
}
else
{
GetAllChildMeshRender(target.GetChild(i));
}
}
}
}
///
/// 切换到正常状态
///
public void SetInitState()
{
foreach (var item in m_DicOldMeshRender)
{
item.Key.material = item.Value;
if (item.Key.GetComponent()) item.Key.GetComponent().enabled = true;
}
this.gameObject.SetActive(true);
}
public List GetMeshRender(Transform target)
{
List tmpMeshRenders = new List();
if (m_CurrentState)
{
if (target.GetComponent() != null) tmpMeshRenders.Add(target.GetComponent());
for (int i = 0; i < target.childCount; i++)
{
Transform tmpChild = target.GetChild(i);
if (tmpChild.GetComponent() == null)
{
if (tmpChild.GetComponent())
{
tmpMeshRenders.Add(tmpChild.GetComponent());
}else
{
tmpMeshRenders.AddRange(GetMeshRender(tmpChild));
}
}
}
}
return tmpMeshRenders;
}
}