using HighlightPlus; using Sirenix.Utilities; using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 计量柜 /// public class Device_MeasuringCabinet : MonoBehaviour { /// /// 当前机柜中安装的三相四线电能表 /// public Device_3Phase4WireMeter meteringDevice; /// /// 柜门 /// public Device_CabinetDoor cabinetDoor; /// /// 插座 /// public Device_Socket socket; /// /// 进电开关 /// public Device_Switch inSwitch; /// /// 电能表接线 /// public List jieXian_lines; /// /// 电能表碰撞 /// public BoxCollider dianCollider; /// /// 电能表安装完成后的杂物 /// public Device_Sundries sundries; /// /// 进电开关接线螺丝 /// public List inSwitchScrews; /// /// 接线检查 /// public Check_JieXian check_JieXian; private void Awake() { AddActions(); GameManager.EventMgr.AddEventListener(Enum_EventType.SwitchSubProcessStepTriggerID, SwitchSubProcessStepTriggerID); sundries.gameObject.SetActive(false); } /// /// 添加各种操作回调 /// public void AddActions() { //添加开关切换回调 inSwitch.AddAction(isOpen => { //刷新带电状态 CheckHasElectricity(); }); //添加螺丝拆装回调 meteringDevice.jieXian_screws.ForEach(screw => { screw.AddAction(isinstalled => { //刷新带电状态 CheckHasElectricity(); //判断接线完好显示隐藏 CheckJieXianOk(); }); }); //接线连接和取下回调 jieXian_lines.ForEach(line => { line.AddAction(isConnected => { //刷新带点状态 CheckHasElectricity(); //判断接线完好显示隐藏 CheckJieXianOk(); }); }); } private void SwitchSubProcessStepTriggerID(string arg0) { if (dianCollider.gameObject.name == arg0) { dianCollider.GetComponent().SetHighlighted(true); } else { dianCollider.GetComponent().SetHighlighted(false); } } /// /// 还原计量柜状态 /// public void Init() { //还原三相四线电能表 if (meteringDevice == null) { meteringDevice = GameObject.FindObjectOfType(true); } meteringDevice.Init(true); //还原接线完好 check_JieXian.isChecked = false; check_JieXian.GetComponent().enabled = true; //还原柜门 cabinetDoor.CloseState(); //还原插座 //还原进线开关 inSwitch.OpenState(); //还原电能表接线 jieXian_lines.ForEach(screw => { screw.isConnected = true; screw.transform.localPosition = new Vector3(screw.transform.localPosition.x, screw.InstallPosY, screw.transform.localPosition.z); }); //还原杂物 sundries.gameObject.SetActive(false); //刷新验电状态 CheckHasElectricity(); } /// /// 清空接线的螺丝参数 /// public void ClearLineScrew() { Debug.Log("清除接线关联的螺丝"); jieXian_lines.ForEach(a => { a.screws.Clear(); }); } /// /// 设置接线的螺丝参数 /// public void SetLineScrew() { Debug.Log("接线重新关联螺丝"); jieXian_lines.ForEach(a => { a.screws = meteringDevice.jieXian_screws.FindAll(b => b.gameObject.name.StartsWith(a.gameObject.name)); }); } /// /// 刷新电能表螺丝带电状态 /// public void CheckHasElectricity() { Debug.Log("带电状态刷新"); //进线螺丝是否带电 jieXian_lines.ForEach(a => { if (!inSwitch.isOpen) { //开关关闭不带电 a.screws.ForEach(b => b.hasElectricity = false); } else { //开关打开--线接上--螺丝拧上带电 if (!a.isConnected) { a.screws.ForEach(b => b.hasElectricity = false); } else { a.screws.ForEach(b => { //安装了则 //零线无电流,有电压 if (b.triggerName.Contains("零")) { b.hasElectricity = false; } else { //其他的看是否上电 b.hasElectricity = b.isInstall; } }); } } }); //进电开关螺丝是否带电 inSwitchScrews.ForEach(a => { a.hasElectricity = inSwitch.isOpen; }); } /// /// 刷新接线完好的显示隐藏 /// public void CheckJieXianOk() { if (jieXian_lines.TrueForAll(a => a.isConnected) && meteringDevice.jieXian_screws.TrueForAll(a => a.isInstall)) { //显示接线完好物体 SiteManager.instance.measuringCabinet.check_JieXian.isChecked = false; SiteManager.instance.measuringCabinet.check_JieXian.GetComponent().enabled = true; Debug.Log("显示接线"); } else { //隐藏接线完好物体 SiteManager.instance.measuringCabinet.check_JieXian.isChecked = true; SiteManager.instance.measuringCabinet.check_JieXian.GetComponent().enabled = false; Debug.Log("隐藏接线"); } } private void Update() { //是否可以触发能表的拆卸或安装电 if (meteringDevice == null) { dianCollider.enabled = true; } else { //电能表固定螺丝拆掉了,线拆掉了 if (!meteringDevice.fix_screw_left.isInstall && !meteringDevice.fix_screw_right.isInstall && jieXian_lines.TrueForAll(a => !a.isConnected)) { dianCollider.enabled = true; } else { dianCollider.enabled = false; } } //安装或拆除电能表 if (dianCollider.enabled) { if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out RaycastHit hit)) { if (hit.collider == dianCollider) { if ((GameManager.ProcessMgr.IsRightSubProcessStepsTriggerID(dianCollider.gameObject.name, true)) == 0) { if (meteringDevice == null) { //安装电能表 if (LiveSceneManager.Instance.currentTool != null && LiveSceneManager.Instance.currentTool.GetComponent() != null) { meteringDevice = LiveSceneManager.Instance.currentTool.GetComponent(); meteringDevice.Add(); //接线关联螺丝 SetLineScrew(); //重新注册回调 AddActions(); //刷新带电状态 CheckHasElectricity(); //打分 ScoreManager.instance.Check(dianCollider.gameObject.name, true); } } else { //拆下电能表 meteringDevice.Remove(); //情况接线关联螺丝 ClearLineScrew(); sundries.gameObject.SetActive(true); //打分 ScoreManager.instance.Check(dianCollider.gameObject.name, false); } } } } } } } private void OnDestroy() { GameManager.EventMgr.RemoveEventListener(Enum_EventType.SwitchSubProcessStepTriggerID, SwitchSubProcessStepTriggerID); } private void OnDisable() { GameManager.EventMgr.RemoveEventListener(Enum_EventType.SwitchSubProcessStepTriggerID, SwitchSubProcessStepTriggerID); } }