using Sirenix.Utilities; using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 计量柜 /// public class Device_MeasuringCabinet : Device_Base { /// /// 当前机柜中安装的三相四线电能表 /// public Device_3Phase4WireMeter meteringDevice; /// /// 柜门 /// public Device_CabinetDoor cabinetDoor; /// /// 插座 /// public Device_Socket socket; /// /// 进电开关 /// public Device_Switch inSwitch; /// /// 电能表接线 /// public List jieXian_screws; /// /// 电能表碰撞 /// public BoxCollider dianCollider; /// /// 电能表安装完成后的杂物 /// public Device_Sundries sundries; private void Awake() { //添加开关切换回调 inSwitch.AddAction(isOpen => { //刷新带电状态 CheckHasElectricity(); }); //添加螺丝拆装回调 meteringDevice.jieXian_screws.ForEach(screw => { screw.AddAction(isinstalled => { //刷新带电状态 CheckHasElectricity(); }); }); } /// /// 还原计量柜状态 /// public void Init() { //还原三相四线电能表 meteringDevice.Init(true); //还原柜门 cabinetDoor.isOpen = false; cabinetDoor.transform.localEulerAngles = Vector3.zero; cabinetDoor.transform.Find("计量柜锁2/计量柜锁3").localEulerAngles = Vector3.zero; //还原插座 //还原进线开关 inSwitch.isOpen = true; inSwitch.transform.localEulerAngles = new Vector3(0, 0, 0); //还原电能表接线 jieXian_screws.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_screws.ForEach(a => { a.screws.Clear(); }); } /// /// 设置接线的螺丝参数 /// public void SetLineScrew() { Debug.Log("接线重新关联螺丝"); jieXian_screws.ForEach(a => { a.screws = meteringDevice.jieXian_screws.FindAll(b => b.gameObject.name.StartsWith(a.gameObject.name)); }); } /// /// 刷新电能表螺丝带电状态 /// public void CheckHasElectricity() { Debug.Log("带电状态刷新"); //进线螺丝是否带电 jieXian_screws.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 => { //安装了则带电 b.hasElectricity = b.isInstall; }); } } }); } private void Update() { //是否可以触发能表的拆卸或安装电 if (meteringDevice == null) { dianCollider.enabled = true; } else { //电能表固定螺丝拆掉了,线拆掉了 if (!meteringDevice.fix_screw_left.isInstall && !meteringDevice.fix_screw_right.isInstall && jieXian_screws.TrueForAll(a => !a.isConnected)) { dianCollider.enabled = true; } else { dianCollider.enabled = false; } } //安装或拆除电能表 if (Input.GetMouseButtonDown(0)) { if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out RaycastHit hit)) { if (hit.collider == dianCollider) { if (meteringDevice == null) { //安装电能表 if (LiveSceneManager.Instance.currentTool != null && LiveSceneManager.Instance.currentTool.GetComponent() != null) { meteringDevice = LiveSceneManager.Instance.currentTool.GetComponent(); meteringDevice.Add(); //接线关联螺丝 SetLineScrew(); //刷新带电状态 CheckHasElectricity(); } } else { //拆下电能表 meteringDevice.Remove(); //情况接线关联螺丝 ClearLineScrew(); sundries.gameObject.SetActive(true); } } } } } }