260 lines
9.4 KiB
C#
260 lines
9.4 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
/// <summary>
|
|
/// 目前代替实验室
|
|
/// </summary>
|
|
public class TooRoomMannger : SingletonMono<TooRoomMannger>
|
|
{
|
|
public List<BaseToolOrDevice> allTMDs;
|
|
public Transform toolParent;
|
|
public Transform headSlot;
|
|
public Transform bodySlot;
|
|
public Transform handSlot;
|
|
public Transform shoesSlot;
|
|
public Transform glassSlot;//护目镜
|
|
public CabinetController cabinetController;
|
|
|
|
private List<Material> _cancel; //未穿戴材质球
|
|
private List<Material> _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<BaseToolOrDevice>(true).ToList();
|
|
firstPersonController = GameObject.FindGameObjectWithTag("Player").GetComponent<FirstPersonController>();
|
|
|
|
GameManager.EventMgr.AddEventListener<bool>(Enum_EventType.PlayerCanMove, SwitchFirstPersonControllerMove);
|
|
GameManager.EventMgr.AddEventListener(Enum_EventType.InitializationUI, InitializationUI);
|
|
|
|
_cancel = new List<Material>();
|
|
_wear = new List<Material>();
|
|
_cancel = Resources.LoadAll<Material>("Materials/CharacterEquip/Cancel").ToList();
|
|
_wear = Resources.LoadAll<Material>("Materials/CharacterEquip/Wear").ToList();
|
|
|
|
foreach (var tmd in allTMDs)
|
|
{
|
|
tmd.GetInfo();
|
|
}
|
|
RemoveRepeat();
|
|
CheckWearByWearDic();
|
|
InitializationUI();
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 通过wearDic数据检测是否穿衣
|
|
/// </summary>
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// /移除重复问题
|
|
/// </summary>
|
|
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<ItemInfo> 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<Tool_SelectComponent>().itemInfo = temp[indexJ];
|
|
obj.GetComponent<Tool_SelectComponent>().GetInfo();
|
|
}
|
|
}
|
|
}
|
|
allTMDs.Clear();
|
|
allTMDs = toolParent.GetComponentsInChildren<BaseToolOrDevice>(true).ToList();
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 与模型联动
|
|
/// </summary>
|
|
/// <param name="equipName"></param>
|
|
/// <param name="isChange"></param>
|
|
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<SkinnedMeshRenderer>().material = ma;
|
|
break;
|
|
case "工作服":
|
|
bodySlot.GetComponent<SkinnedMeshRenderer>().material = ma;
|
|
break;
|
|
case "编织手套":
|
|
handSlot.GetComponent<SkinnedMeshRenderer>().material = ma;
|
|
break;
|
|
case "绝缘靴":
|
|
shoesSlot.GetComponent<MeshRenderer>().material = ma;
|
|
break;
|
|
case "护目镜":
|
|
glassSlot.GetComponent<MeshRenderer>().material = ma;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取场景中ItemInfo (仅在在工具间场景调用)
|
|
/// </summary>
|
|
/// <param name="objName"></param>
|
|
/// <returns></returns>
|
|
public List<Tool_SelectComponent> GetItemInfoByName(List<string> objNamelist)
|
|
{
|
|
List<Tool_SelectComponent> tmps = new List<Tool_SelectComponent>();
|
|
objNamelist.ForEach(objName =>
|
|
{
|
|
Tool_SelectComponent tmp = allTMDs.Find(a => a != null && a.gameObject.name == objName).GetComponent<Tool_SelectComponent>();
|
|
tmps.Add(tmp);
|
|
});
|
|
return tmps;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
GameManager.EventMgr.RemoveEventListener<bool>(Enum_EventType.PlayerCanMove, SwitchFirstPersonControllerMove);
|
|
GameManager.EventMgr.RemoveEventListener(Enum_EventType.InitializationUI, InitializationUI);
|
|
|
|
GameManager.UIMgr.toolTips.HideTips();
|
|
GameManager.UIMgr.imageTips.HideTips();
|
|
if (GameManager.UIMgr.GetPanel<UI_MiddleTipPanel>())
|
|
{
|
|
GameManager.UIMgr.HidePanel<UI_MiddleTipPanel>();
|
|
}
|
|
Debug.Log("toolroomManager disable");
|
|
}
|
|
|
|
|
|
private void InitializationUI()//在实验室中初始化UI
|
|
{
|
|
if (!GameManager.UIMgr.GetPanel<UI_TaskListPanel>())
|
|
{
|
|
GameManager.UIMgr.ShowPanel<UI_TaskListPanel>(E_UI_Layer.Bot, (panel) =>
|
|
{
|
|
panel.Init(GameManager.ProcessMgr.subProcessId);
|
|
});
|
|
}
|
|
if (GameManager.RunModelMgr.ModeType == E_ModeType.Study)
|
|
{
|
|
GameManager.EventMgr.EventTrigger<string>(Enum_EventType.SwitchSubProcessStepTriggerID, ProcessManager.Instance.subProcessStepTriggerID);
|
|
GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcess, GameManager.ProcessMgr.subProcessId);
|
|
}
|
|
if (!GameManager.UIMgr.GetPanel<UI_MenuBar>())
|
|
{
|
|
GameManager.UIMgr.ShowPanel<UI_MenuBar>(E_UI_Layer.Mid, (panel) =>
|
|
{
|
|
panel.Init();
|
|
GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchScene, GameManager.RunModelMgr.SceneType);
|
|
});
|
|
}
|
|
if (!GameManager.UIMgr.GetPanel<UI_GrowthPeriodPanel>())
|
|
{
|
|
GameManager.UIMgr.ShowPanel<UI_GrowthPeriodPanel>(E_UI_Layer.Mid, (panel) =>
|
|
{
|
|
panel.Init();
|
|
});
|
|
}
|
|
//firstPersonController.gameObject.SetActive(true);
|
|
}
|
|
|
|
}
|