using DG.Tweening; using HighlightPlus; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; /// /// 普通门 /// public class Door : Device_Base { public bool isOpen; public ZhouEnum zhouEnum; public float angele; public float duration; Dictionary dic; //[SerializeField] private Vector3 initR; //[SerializeField] private Vector3 nextR; /// /// 判断是否可以打开或关闭 /// public Func canOpen; /// /// 验电位置 /// public Transform testPosAndRot; /// /// 是否带电 /// [ReconnetAtrribute] public bool hasElectricity; public DoorGroup group; protected override void OnAwake() { base.OnAwake(); GetEndAngle(); } protected override void OnMDown() { base.OnMDown(); if (LiveSceneManager.Instance?.currentTool != null && LiveSceneManager.Instance?.currentTool.name == "验电笔") return; if (group != null) { if (triggerAction == null || triggerAction.Invoke(triggerName, true) == 0) group.OpenOrClose(); return; } else { bool canopen = (canOpen != null ? canOpen.Invoke() : true); if (canopen) { if (triggerAction == null || triggerAction.Invoke(triggerName, true) == 0) { CanOpen(); } } } } public void CanOpen() { isOpen = !isOpen; transform.DOLocalRotate(dic[isOpen], duration).OnComplete(() => { base.CallScoreAction(isOpen); }); } private void GetEndAngle() { initR = transform.localEulerAngles; transform.Rotate(new Vector3(zhouEnum == ZhouEnum.X ? 1 : 0, zhouEnum == ZhouEnum.Y ? 1 : 0, zhouEnum == ZhouEnum.Z ? 1 : 0), angele, Space.Self); nextR = transform.localEulerAngles; transform.localEulerAngles = initR; dic = new Dictionary(); dic.Add(isOpen, initR); dic.Add(!isOpen, nextR); } /// /// 设置门状态 /// /// public void SetState(bool isOpen) { this.isOpen = isOpen; transform.localEulerAngles = dic[isOpen]; } } public enum ZhouEnum { X, Y, Z }