using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; using static UnityEngine.Rendering.DebugUI; public class LiveSceneManager : SingletonMono { [HideInInspector] public FirstPersonController firstPersonController; //[HideInInspector] public GameObject currentTool; public Transform spawnToolPos; public Transform tMDTips; public string triggerName; public NPCController npcCustomController; public string playSpeack; //场景中设备控制脚本 public Device_Control device_Control; /// /// 校验仪位置 /// public Transform jiaoYanYiPos; /// /// 万用表位置 /// public Transform wanYongBiaoPos; public Tool_ElectricEnergyMeterCalibrationInstrument jiaoYanYi; /// /// 功率计位置 /// public Transform gongLvJiPos; /// /// 功率计 /// public Tool_PowerMeter powerMeter; private Vector3 lastPlayerPos = new Vector3(); private Vector3 lastPlayerAngle = new Vector3(); private float lastFOV; private Vector3 lastPlayerCameraAngle = new Vector3(); protected override void Awake() { base.Awake(); firstPersonController = GameObject.FindGameObjectWithTag("Player").GetComponent(); tMDTips.gameObject.SetActive(false); GameManager.EventMgr.AddEventListener(Enum_EventType.TakeOutAndRetrievingTheTools, SetSpawnToolInfo); firstPersonController.zoomAction += OnZoom; GameManager.EventMgr.AddEventListener(Enum_EventType.PlayerCanMove, SwitchFirstPersonControllerMove); //基类全部初始化 device_Control.transform.GetComponentsInChildren(true).ToList().ForEach(a => a.Awake()); } public void SwitchFirstPersonControllerMove(bool isMove) { firstPersonController.playerCanMove = isMove; } /// /// /// /// /// /// 是否设置FOV 和 上下视角 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; } public void ResetFirstPersonTransform() { if (lastFOV != 0) { firstPersonController.transform.position = lastPlayerPos; firstPersonController.transform.eulerAngles = lastPlayerAngle; firstPersonController.playerCamera.fieldOfView = lastFOV; firstPersonController.playerCamera.transform.localEulerAngles = lastPlayerCameraAngle; firstPersonController.yaw = 0; firstPersonController.pitch = 0; } } private void OnZoom(float value) { tMDTips.localScale = new Vector3(value, value, value); } public void SetSpawnToolInfo(GameObject tool) { if (tool == null) return; currentTool = tool; currentTool.transform.parent = Camera.main.transform; currentTool.transform.localPosition = spawnToolPos.localPosition; currentTool.transform.localEulerAngles = spawnToolPos.localEulerAngles; if (currentTool.GetComponent()) { currentTool.GetComponent().SetHeadPosAndEulerang(currentTool.transform.localPosition, currentTool.transform.localEulerAngles); currentTool.GetComponent().AddStartAction(() => { tMDTips.gameObject.SetActive(false); }); currentTool.GetComponent().AddEndAction(() => { tMDTips.gameObject.SetActive(true); }); } if (currentTool.GetComponent()) { currentTool.GetComponent().SetHeadPosAndEulerang(currentTool.transform.localPosition, currentTool.transform.localEulerAngles); } tMDTips.gameObject.SetActive(true); if (currentTool.name.Equals("工作证")) { GameManager.UIMgr.ShowPanel(E_UI_Layer.Mid, (p) => { p.Init(currentTool.name, playSpeack, (intTemp) => { //HQB 1120 客户要回答“好的” GameManager.UIMgr.HidePanel(); GameManager.UIMgr.ShowPanel(E_UI_Layer.Mid, (p) => { p.Init(currentTool.name, "好的", "客户", 0, (inttemp) => { GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(currentTool.name, true); ScoreManager.instance.Check(currentTool.name, null); OnCheckSubProcess(); GameManager.UIMgr.HidePanel(); }); }); }, 0); }); tMDTips.gameObject.SetActive(false); currentTool.transform.localEulerAngles = new Vector3(90, 0, 0); } else if (currentTool.name.Equals("三相四线智能电能表") || currentTool.name.Equals("三相四线费控智能电能表")) { tMDTips.gameObject.SetActive(false); currentTool.transform.localPosition = new Vector3(currentTool.transform.localPosition.x, currentTool.transform.localPosition.y, currentTool.transform.localPosition.z + 0.1f); currentTool.transform.localEulerAngles = new Vector3(-90, 180, -180); //核对设备 if (GameManager.RunModelMgr.schemeID == 1002) { CheckDeviceButtonPanel.Show(currentTool.name); tMDTips.gameObject.SetActive(true); } } else if (currentTool.name.Equals("采集器"))//HQB 采集器 { tMDTips.gameObject.SetActive(false); //currentTool.transform.localPosition = new Vector3(currentTool.transform.localPosition.x, currentTool.transform.localPosition.y, currentTool.transform.localPosition.z + 0.1f); currentTool.transform.localEulerAngles = new Vector3(0, 180, 0); //核对设备 if (GameManager.RunModelMgr.schemeID == 4001) { //CheckDeviceButtonPanel.Show(currentTool.name); //tMDTips.gameObject.SetActive(true); } } else if (currentTool.name.Equals("绝缘导线")) { tMDTips.gameObject.SetActive(true); if (GameManager.RunModelMgr.ModeType == E_ModeType.Study && GameManager.RunModelMgr.schemeID == 1002 && ProcessManager.Instance.subProcessStepTriggerID.StartsWith("选择") && ProcessManager.Instance.subProcessStepTriggerID.EndsWith("线")) { currentTool.GetComponent().SetChoeseState(ProcessManager.Instance.subProcessStepTriggerID[2].ToString()); } else currentTool.GetComponent().SetChoeseState(); } else if (currentTool.name.Equals("低压电流互感器")) { currentTool.transform.localPosition = new Vector3(0.148f, -0.023f, 0.399f); //核对设备 if (GameManager.RunModelMgr.schemeID == 1002) { CheckDeviceButtonPanel.Show(currentTool.name); } } else if (currentTool.name.Equals("电能表校验仪器")) { if (jiaoYanYi != null) { //jiaoYanYi.tPEMLineController.WhenToolNull(null); RemoveCuurentJiaoYanYi(); } if (jiaoYanYiPos != null) { tMDTips.gameObject.SetActive(false); currentTool.transform.position = jiaoYanYiPos.position; currentTool.transform.eulerAngles = jiaoYanYiPos.eulerAngles; currentTool.transform.parent = jiaoYanYiPos; jiaoYanYi = currentTool.GetComponent(); currentTool = null; GameManager.UIMgr.GetPanel().TakeOutAndRetrievingTheTools(null); //GameManager.EventMgr?.EventTrigger(Enum_EventType.TakeOutAndRetrievingTheTools, null); } else { Debug.Log("该科目不需要用到校验仪"); TipPanel.ShowTip("该科目不需要用到校验仪"); } } else if (currentTool.name.Equals("万用表")) { if (wanYongBiaoPos != null) { currentTool.transform.position = wanYongBiaoPos.position; currentTool.transform.eulerAngles = wanYongBiaoPos.eulerAngles; currentTool.transform.parent = wanYongBiaoPos; } else { TipPanel.ShowTip("该科目不需要用到校验仪"); Debug.Log("该科目不需要用到校验仪"); } } else if (currentTool.name == "工作牌_在此工作" || currentTool.name == "工作牌_从此进出") { currentTool.transform.localPosition = new Vector3(0.365f, -0.094f, 0.711f); currentTool.transform.localEulerAngles = new Vector3(-57, -68, 71); } else if (currentTool.name.Equals("功率计")) { if (powerMeter != null) { DestroyImmediate(powerMeter.gameObject); powerMeter = null; } if (gongLvJiPos != null) { tMDTips.gameObject.SetActive(false); currentTool.transform.position = gongLvJiPos.position; currentTool.transform.eulerAngles = gongLvJiPos.eulerAngles; currentTool.transform.parent = gongLvJiPos; powerMeter = currentTool.GetComponent(); currentTool = null; GameManager.UIMgr.GetPanel().TakeOutAndRetrievingTheTools(null); } else { Debug.Log("该科目不需要用到功率计"); } } else if (currentTool.name.Equals("盒装封印")) { currentTool.transform.localPosition = new Vector3(0.1862f, -0.0057f, 0.3854f); currentTool.transform.localEulerAngles = new Vector3(-148f, 15f, 0f); } else if (currentTool.name == "分路负荷监测仪") { currentTool.transform.localPosition = new Vector3(0.1702f, 0.041f, 0.33f); currentTool.transform.localEulerAngles = new Vector3(0, -90, 90); } //调用高亮 if (GameManager.RunModelMgr.ModeType == E_ModeType.Study) GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcessStepTriggerID, ProcessManager.Instance.subProcessStepTriggerID); } private void Update() { if (Input.GetKeyDown(KeyCode.Escape)) { if (currentTool != null) { //使用中不能收回 if (currentTool.GetComponent() != null && currentTool.GetComponent().isMoving) return; if (currentTool.GetComponent() != null && currentTool.GetComponent().isMoving) return; if (GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(triggerName, true) == 0) { Debug.Log("Escape"); OnCheckSubProcess(); } } } } public void OnCheckSubProcess(bool ifdestroy = true) { if (currentTool != null) { if (tMDTips != null) tMDTips.gameObject.SetActive(false); if (ifdestroy) DestroyImmediate(currentTool); currentTool = null; GameManager.EventMgr.EventTrigger(Enum_EventType.TakeOutAndRetrievingTheTools, null); } } public void RemoveCuurentJiaoYanYi() { if (jiaoYanYi != null) { jiaoYanYi.tPEMLineController.DestroyAllLineTrigger(); jiaoYanYi.threePhaseEnergyMeterCalibrator.OnCompelete(); DestroyImmediate(jiaoYanYi.gameObject); jiaoYanYi = null; } } /// /// 设置校验仪盒子 线材状态 /// public void SetJiaoYanYiState() { //StopCoroutine(WaitSetJiaoYanYiState()); //StartCoroutine(WaitSetJiaoYanYiState()); jiaoYanYi.GetComponent().enabled = false; jiaoYanYi.OpenGaiZi(1); jiaoYanYi.tPEMLineController.CheckLine(1); } /// /// 设置校验仪仪器 /// public void SetJiaoYanYiYiQiState() { //StopCoroutine(WaitSetJiaoYanYiYiQiState()); //StartCoroutine(WaitSetJiaoYanYiYiQiState()); jiaoYanYi.threePhaseEnergyMeterCalibrator.SwitchPos(1); } public void SetJiaoYanYiScreenState() { //StopCoroutine(WaitSetJiaoYanYiScreenState()); //StartCoroutine(WaitSetJiaoYanYiScreenState()); jiaoYanYi.threePhaseEnergyMeterCalibrator.OpenPower(); jiaoYanYi.threePhaseEnergyMeterCalibrator.SetState(1); } private void OnDestroy() { firstPersonController.zoomAction -= OnZoom; currentTool = null; GameManager.EventMgr.EventTrigger(Enum_EventType.TakeOutAndRetrievingTheTools, null); GameManager.EventMgr.RemoveEventListener(Enum_EventType.PlayerCanMove, SwitchFirstPersonControllerMove); GameManager.EventMgr.RemoveEventListener(Enum_EventType.TakeOutAndRetrievingTheTools, SetSpawnToolInfo); //清空设备铭牌核对选项 if (GameManager.UIMgr.GetPanel()) { GameManager.UIMgr.GetPanel().isCheck互感器A相 = false; GameManager.UIMgr.GetPanel().isCheck互感器B相 = false; GameManager.UIMgr.GetPanel().isCheck互感器C相 = false; GameManager.UIMgr.GetPanel().isCheck电能表 = false; } //删除核对按钮 if (CheckDeviceButtonPanel.instance != null) { CheckDeviceButtonPanel.instance.MyDesTroy(); } //隐藏中间提示面板 if (GameManager.UIMgr.GetPanel()) { GameManager.UIMgr.HidePanel(); } Debug.Log("LiveSceneManager OnDestroy"); } private void OnDisable() { Debug.Log(" OnDisable()"); } }