using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; public class TooRoomMannger : SingletonMono { public List allTMDs; public Transform toolParent; public Transform headSlot; public Transform bodySlot; public Transform handSlot; public Transform shoesSlot; public Transform glassSlot;//护目镜 public CabinetController cabinetController; private List _cancel; //未穿戴材质球 private List _wear; //穿戴材质球 private FirstPersonController firstPersonController; private Vector3 lastPlayerPos = new Vector3(); private Vector3 lastPlayerAngle = new Vector3(); private float lastFOV; private Vector3 lastPlayerCameraAngle = new Vector3(); void Start() { allTMDs = toolParent.GetComponentsInChildren(true).ToList(); firstPersonController = GameObject.FindGameObjectWithTag("Player").GetComponent(); GameManager.EventMgr.AddEventListener(Enum_EventType.PlayerCanMove, SwitchFirstPersonControllerMove); _cancel = new List(); _wear = new List(); _cancel = Resources.LoadAll("Materials/CharacterEquip/Cancel").ToList(); _wear = Resources.LoadAll("Materials/CharacterEquip/Wear").ToList(); foreach (var tmd in allTMDs) { tmd.GetInfo(); } RemoveRepeat(); CheckWearByWearDic(); } public void SetFirstPersonTransform(Vector3 _pos, Vector3 _angle, bool isSetFOVAndUpDownView = false, float fov = 0, Vector3 _camareAngle = new Vector3(), bool isRecord = false) { if (isRecord) { lastPlayerPos = firstPersonController.transform.position; lastPlayerAngle = firstPersonController.transform.eulerAngles; lastFOV = firstPersonController.playerCamera.fieldOfView; lastPlayerCameraAngle = firstPersonController.playerCamera.transform.localEulerAngles; } firstPersonController.transform.position = _pos; firstPersonController.transform.eulerAngles = _angle; if (isSetFOVAndUpDownView) { firstPersonController.playerCamera.fieldOfView = fov; firstPersonController.playerCamera.transform.localEulerAngles = _camareAngle; } firstPersonController.yaw = 0; firstPersonController.pitch = 0; } /// /// 通过wearDic数据检测是否穿衣 /// public void CheckWearByWearDic() { var wearData = GameManager.PacksackBagMgr.wearDic; if (wearData.Count > 0) { foreach (var item in wearData) { Wear(item.Key, true); } } else { Wear("国网安全帽", false); Wear("工作服", false); Wear("编织手套", false); Wear("绝缘靴", false); Wear("护目镜", false); } } public void SwitchFirstPersonControllerMove(bool isMove) { firstPersonController.playerCanMove = isMove; } /// /// /移除重复问题 /// public void RemoveRepeat() { var bagDatas = GameManager.PacksackBagMgr.GetCurrentBagData(); foreach (var item in bagDatas.Values) { foreach (var itemI in item) { for (int i = 0; i < allTMDs.Count; i++) { int index = i; if (Vector3.Distance(itemI.selfPosInToolRoom, allTMDs[index].itemInfo.selfPosInToolRoom) < 0.1f) { float itI_x = Mathf.Round(itemI.selfPosInToolRoom.x * 100.0f) / 100.0f; float itI_y = Mathf.Round(itemI.selfPosInToolRoom.y * 100.0f) / 100.0f; float itI_z = Mathf.Round(itemI.selfPosInToolRoom.z * 100.0f) / 100.0f; float alT_x = Mathf.Round(allTMDs[index].itemInfo.selfPosInToolRoom.x * 100.0f) / 100.0f; float alT_y = Mathf.Round(allTMDs[index].itemInfo.selfPosInToolRoom.y * 100.0f) / 100.0f; float alT_z = Mathf.Round(allTMDs[index].itemInfo.selfPosInToolRoom.z * 100.0f) / 100.0f; if (Vector3.Distance(new Vector3(itI_x, itI_y, itI_z), new Vector3(alT_x, alT_y, alT_z)) < 0.005f) { Destroy(allTMDs[index].gameObject); allTMDs.Remove(allTMDs[index]); } } } } } } public void CreateTool() { var bagDatas = GameManager.PacksackBagMgr.GetCurrentBagData(); var wearDate = GameManager.PacksackBagMgr.wearDic; foreach (var item in bagDatas.Keys) { List temp = bagDatas[item]; for (int j = 0; j < temp.Count; j++) { int indexJ = j; if (temp[indexJ].selfPosInToolRoom != Vector3.zero) { GameObject obj = Instantiate(temp[indexJ].objPrefab, toolParent); obj.name = temp[indexJ].toolName; obj.transform.position = temp[indexJ].selfPosInToolRoom; obj.transform.eulerAngles = temp[indexJ].selfAngleInToolRoom; obj.GetComponent().itemInfo = temp[indexJ]; obj.GetComponent().GetInfo(); } } } allTMDs.Clear(); allTMDs = toolParent.GetComponentsInChildren(true).ToList(); } /// /// 与模型联动 /// /// /// public void Wear(string equipName, bool isChange) { Material ma = null; if (isChange) { ma = _wear.SingleOrDefault(s => s.name == equipName); } else { ma = _cancel.SingleOrDefault(s => s.name == equipName); } switch (equipName) { case "国网安全帽": headSlot.GetComponent().material = ma; break; case "工作服": bodySlot.GetComponent().material = ma; break; case "编织手套": handSlot.GetComponent().material = ma; break; case "绝缘靴": shoesSlot.GetComponent().material = ma; break; case "护目镜": glassSlot.GetComponent().material = ma; break; } } /// /// 获取场景中ItemInfo (仅在在工具间场景调用) /// /// /// public List GetItemInfoByName(List objNamelist) { List tmps = new List(); objNamelist.ForEach(objName => { Tool_SelectComponent tmp = allTMDs.Find(a => a != null && a.gameObject.name == objName).GetComponent(); tmps.Add(tmp); }); return tmps; } //public void ResetManWear() //{ // headSlot.GetComponent().material = _cancel.SingleOrDefault(s => s.name == "国网安全帽"); // bodySlot.GetComponent().material = _cancel.SingleOrDefault(s => s.name == "工作服"); // handSlot.GetComponent().material = _cancel.SingleOrDefault(s => s.name == "编织手套"); // shoesSlot.GetComponent().material = _cancel.SingleOrDefault(s => s.name == "绝缘靴"); //} private void OnDestroy() { GameManager.EventMgr.RemoveEventListener(Enum_EventType.PlayerCanMove, SwitchFirstPersonControllerMove); GameManager.UIMgr.toolTips.HideTips(); GameManager.UIMgr.imageTips.HideTips(); if (GameManager.UIMgr.GetPanel()) { GameManager.UIMgr.HidePanel(); } Debug.Log("toolroomManager disable"); } } /// /// 工具架工具配置 /// //public class ToolRoomSettingData //{ // public string objname; // public Vector3 initPostion; // public ToolRoomSettingData(string objname, Vector3 initPostion) // { // this.e_ToolOrDeviceOrMaterials = e_toolOrDeviceOrMaterials; // this.initPostion = initPostion; // } //}