using CG.UTility; using DG.Tweening; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using ZXK.GYJQR; /// /// 调整方向菜单枚举类型 /// namespace ZXK.GYJQR { public enum AdjustAngleType { clockwise = -1,//顺时针 anticlockwise = 1,//逆时针 none } /// /// 保存安装部署流程接头的物体集合 /// [System.Serializable] public class AZBSStateJoints { public string aZBSState;//安装部署流程枚举 public string aZBSPartName;//安装部署流程接头路径 } /// /// 方向调整UI菜单//机器人接线-信号电缆旋转失灵//TODO: /// public class AdjustAngleMenu : MonoBehaviour { public List clockWiseControls;//菜单列表 //public List aZBSStateJoints;//安装部署接头列表 public GameObject azbstateJoint;//需要操作的安装部署接头 private float excutetime = 0.0f;//实际执行时间 private float rotateSpeed = 0.5f;//旋转速度 [Header("允许拼接的最小旋转数值")] public float allowedJointMinValue; [Header("允许拼接的最大旋转数值")] public float allowedJointMaxValue; [Header("偏移量")] public float offset;//偏移量 [Header("当前步骤类的唯一标识符")] [ReadOnly] public string identityID;//唯一标识符 public void Start() { foreach (var item in clockWiseControls) { item.onMouseDown.AddListener(OnClockWiseMouseDown); item.onMouseUp.AddListener(OnClockWiseMouseUp); } } /// /// 鼠标按下绑定事件 /// /// public void OnClockWiseMouseDown(AdjustAngleType angleType, string state) { if (!CG.UTility.PopUpMng._TriAble) return; if (azbstateJoint == null) return; //if (aZBSStateJoints.Count == 0) //{ // return; //} //azbstateJoint = ModelManager.Instance.SeekPathModeWithName(aZBSStateJoints[0].aZBSPartName); excutetime += Time.deltaTime; var v = (int)angleType; PathManager pm = azbstateJoint.GetComponent(); switch (pm.lockRoateType) { case LockRoateType.LockX: azbstateJoint.transform.localEulerAngles -= new Vector3(excutetime * rotateSpeed * v, 0.0f, 0.0f); break; case LockRoateType.LockY: azbstateJoint.transform.eulerAngles -= new Vector3(0.0f, excutetime * rotateSpeed * v, 0.0f); break; case LockRoateType.LockZ: azbstateJoint.transform.eulerAngles -= new Vector3(0.0f, 0.0f, excutetime * rotateSpeed * v); break; case LockRoateType.None: break; default: break; } } /// /// 鼠标抬起绑定事件 /// /// public void OnClockWiseMouseUp(AdjustAngleType angleType, string state) { if (!CG.UTility.PopUpMng._TriAble|| azbstateJoint==null) return; //azbstateJoint = ModelManager.Instance.SeekPathModeWithName(aZBSStateJoints[0].aZBSPartName); //if (azbstateJoint == null) //{ // return; //} excutetime = 0.0f; PathManager pm_azbstateJoint = azbstateJoint.GetComponent() ? azbstateJoint.GetComponent() : azbstateJoint.AddComponent(); pm_azbstateJoint.onMouseDown = new UnityEngine.Events.UnityEvent(); pm_azbstateJoint.onMouseDown.AddListener(() => { pm_azbstateJoint.onMouseDown.RemoveAllListeners(); pm_azbstateJoint.GetComponent().enabled = false; CanJoint(pm_azbstateJoint, azbstateJoint, () => { AZBS curAzbs = GameManager.Instance._DataAZBSHandler.CurAZBShandler.Value; //TODO 加分系统 //GameManager.Instance._DataAZBSHandler.AddScore(curAzbs.stepName, StepManager.Instance.GetIdentityStep(identityID).stepName, StepManager.Instance.GetIdentityStep(identityID).score); AzbsStateJointStep(azbstateJoint, pm_azbstateJoint); }, () => { PopUpMng.PopToast("方向错误,需将两者调至水平对齐", 0.0f); StartCoroutine(OnDelay(3.0f, () => { AzbsStateJointStep(azbstateJoint, pm_azbstateJoint); })); }); }); } /// /// 拼接步骤 /// public void AzbsStateJointStep(GameObject o, PathManager pm) { Sequence sequence = DOTween.Sequence(); sequence.SetId("correct"); sequence.Append(pm.transform.DORotate(pm._JieTouFinishTran.rotation.eulerAngles, 2.0f)); sequence.Insert(0, pm.transform.DOMove(pm._JieTouFinishTran.position, 2.0f)); sequence.onComplete += () => { pm.GetComponent().enabled = false; if (pm.transform.GetComponent() != null) { pm.transform.GetComponent().enabled = false; } StepManager.Instance.SwitchIdentityStep(StepManager.Instance.GetIdentityStep(identityID)); StopAllCoroutines(); gameObject.SetActive(false); }; } /// /// 判断是否可以进行拼接组装 /// /// public void CanJoint(PathManager pm, GameObject o, Action correct, Action error) { Vector3 v = o.transform.eulerAngles; float _v = 0.0f;//旋转数值 switch (pm.lockRoateType) { case LockRoateType.LockX: break; case LockRoateType.LockY: _v = v.y; break; case LockRoateType.LockZ: _v = v.z; break; case LockRoateType.None: break; default: break; } if (allowedJointMinValue > allowedJointMaxValue) { if (_v >= allowedJointMinValue || _v <= allowedJointMaxValue) { correct?.Invoke(); } else { error?.Invoke(); } } else { if (_v >= allowedJointMinValue && _v <= allowedJointMaxValue) { correct?.Invoke(); } else { error?.Invoke(); } } } /// /// 延迟函数 /// /// public IEnumerator OnDelay(float t, Action action) { yield return new WaitForSeconds(t); action?.Invoke(); } } }