lvjincheng 3 年之前
父节点
当前提交
5111f16e36

+ 7 - 0
Assets/BowArrow/Modules/NewUserGuider/NewUserGuider.cs

@@ -164,6 +164,13 @@ public class NewUserGuider : MonoBehaviour
         img.color = c;
     }
 
+    public void SetMaskOpacity(float opacity) 
+    {
+        Color c = hollowOutMask.color;
+        c.a = opacity;
+        hollowOutMask.color = c;
+    }
+
     public void SetCanvasSortOrder(int sortOrder) {
         transform.GetComponent<Canvas>().sortingOrder = sortOrder;
     }

+ 126 - 17
Assets/BowArrow/Modules/NewUserGuider/NewUserGuiderManager.cs

@@ -186,17 +186,73 @@ public class NewUserGuiderManager : MonoBehaviour
         config.onStart = (g) => {
             g.GetMaskClickedEvent().RemoveAllListeners();
             Action onclickTarget = () => {
-                g.gameObject.SetActive(false);
-                DeviceCalibrateView.ins.action_OnDestroy += () => {
-                    g.clickedWillPlayAudioBtn = false;
-                    g.OnClick_ToNext();
-                };
+                g.clickedWillPlayAudioBtn = false;
+                g.OnClick_ToNext();
             };
             DeviceView1.ins.action_OnClickGyr += onclickTarget;
             g.action_OnDestroy += () => DeviceView1.ins.action_OnClickGyr -= onclickTarget;
         };
         configs.Add(config.key, config);
 
+        
+        config = new NewUserGuiderConfig();
+        config.key = "陀螺仪校准-开始";
+        config.frameTipPivot = "rt";
+        config.frameTipText = "";
+        config.onPrepare = (g) => {
+            g.SetCanvasSortOrder(DeviceCalibrateView.ins.GetComponent<Canvas>().sortingOrder + 1);
+            RectTransform btn = DeviceCalibrateView.ins.transform.Find("Gyr/Button") as RectTransform;
+            g.hollowOutMask.SetTarget(btn);
+            g.SetIconPointerHitOpacity(0.8f);
+            g.SetMaskOpacity(0.33f);
+            g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f);
+            g.config.pointerRotZ = 180;
+            g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(-0.1f, 0.2f));
+            g.frameTip.gameObject.SetActive(false);
+        };
+        config.onStart = (g) => {
+            g.GetMaskClickedEvent().RemoveAllListeners();
+            Func<bool> interceptor = () => {
+                return DeviceCalibrateView.ins.flag_GyrCalibarateOperateAndFinish != -1;
+            };
+            Action operateFinished = () => {
+                g.hollowOutMask.isTargetRectCanThrough = false;
+                g.GetMaskClickedEvent().AddListener(g.OnClick_ToNext);
+            };
+            DeviceCalibrateView.ins.action_OnClickGyrCalibrateInterceptor += interceptor;
+            DeviceCalibrateView.ins.action_GyrCalibarateOperateAndFinish += operateFinished;
+            g.action_OnDestroy += () => {
+                DeviceCalibrateView.ins.action_OnClickGyrCalibrateInterceptor -= interceptor;
+                DeviceCalibrateView.ins.action_GyrCalibarateOperateAndFinish -= operateFinished;
+            };
+        };
+        configs.Add(config.key, config);
+
+
+        config = new NewUserGuiderConfig();
+        config.key = "陀螺仪校准-完成";
+        config.frameTipPivot = "rt";
+        config.frameTipText = "";
+        config.onPrepare = (g) => {
+            g.SetCanvasSortOrder(DeviceCalibrateView.ins.GetComponent<Canvas>().sortingOrder + 1);
+            RectTransform btn = DeviceCalibrateView.ins.transform.Find("BtnFinish") as RectTransform;
+            g.hollowOutMask.SetTarget(btn);
+            g.SetIconPointerHitOpacity(0.8f);
+            g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f);
+            g.config.pointerRotZ = 120;
+            g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(-0.2f, 1.2f));
+            g.frameTip.gameObject.SetActive(false);
+        };
+        config.onStart = (g) => {
+            g.GetMaskClickedEvent().RemoveAllListeners();
+            Action operateFinished = () => {
+                g.clickedWillPlayAudioBtn = false;
+                g.OnClick_ToNext();
+            };
+            DeviceCalibrateView.ins.action_OnDestroy += operateFinished;
+        };
+        configs.Add(config.key, config);
+
 
         config = new NewUserGuiderConfig();
         config.key = "设备-地磁计校准";
@@ -221,22 +277,71 @@ public class NewUserGuiderManager : MonoBehaviour
         config.onStart = (g) => {
             g.GetMaskClickedEvent().RemoveAllListeners();
             Action onclickTarget = () => {
-                g.gameObject.SetActive(false);
-                DeviceCalibrateView.ins.action_OnDestroy += () => {
-                    if (AimHandler.ins.MagCalibrater.Complete) {
-                        FindObjectOfType<DeviceView1>()?.OnClick_Back();
-                        g.clickedWillPlayAudioBtn = false;
-                        g.OnClick_ToNext();
-                    } else {
-                        g.gameObject.SetActive(true);
-                    }
-                };
+                g.clickedWillPlayAudioBtn = false;
+                g.OnClick_ToNext();
             };
             DeviceView1.ins.action_OnClickMag += onclickTarget;
+            g.action_OnDestroy += () => DeviceView1.ins.action_OnClickMag -= onclickTarget;
+        };
+        configs.Add(config.key, config);
+
+
+        config = new NewUserGuiderConfig();
+        config.key = "地磁计校准-开始";
+        config.frameTipPivot = "rt";
+        config.frameTipText = "";
+        config.onPrepare = (g) => {
+            g.SetCanvasSortOrder(DeviceCalibrateView.ins.GetComponent<Canvas>().sortingOrder + 1);
+            RectTransform btn = DeviceCalibrateView.ins.transform.Find("Mag/MagReset") as RectTransform;
+            g.hollowOutMask.SetTarget(btn);
+            g.SetIconPointerHitOpacity(0.8f);
+            g.SetMaskOpacity(0.33f);
+            g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f);
+            g.config.pointerRotZ = 180;
+            g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(-0.1f, 0.2f));
+            g.frameTip.gameObject.SetActive(false);
+        };
+        config.onStart = (g) => {
+            g.GetMaskClickedEvent().RemoveAllListeners();
+            Func<bool> interceptor = () => {
+                return DeviceCalibrateView.ins.flag_MagCalibarateOperateAndFinish != -1;
+            };
+            Action operateFinished = () => {
+                g.hollowOutMask.isTargetRectCanThrough = false;
+                g.GetMaskClickedEvent().AddListener(g.OnClick_ToNext);
+            };
+            DeviceCalibrateView.ins.action_OnClickMagCalibrateInterceptor += interceptor;
+            DeviceCalibrateView.ins.action_MagCalibarateOperateAndFinish += operateFinished;
             g.action_OnDestroy += () => {
-                if (!DeviceView1.ins) return;
-                DeviceView1.ins.action_OnClickMag -= onclickTarget;
+                DeviceCalibrateView.ins.action_OnClickMagCalibrateInterceptor -= interceptor;
+                DeviceCalibrateView.ins.action_MagCalibarateOperateAndFinish -= operateFinished;
+            };
+        };
+        configs.Add(config.key, config);
+
+
+        config = new NewUserGuiderConfig();
+        config.key = "地磁计校准-完成";
+        config.frameTipPivot = "rt";
+        config.frameTipText = "";
+        config.onPrepare = (g) => {
+            g.SetCanvasSortOrder(DeviceCalibrateView.ins.GetComponent<Canvas>().sortingOrder + 1);
+            RectTransform btn = DeviceCalibrateView.ins.transform.Find("BtnFinish") as RectTransform;
+            g.hollowOutMask.SetTarget(btn);
+            g.SetIconPointerHitOpacity(0.8f);
+            g.config.hitPos = RectTransformUtils.GetPositionByPivot(btn, Vector2.one * 0.5f);
+            g.config.pointerRotZ = 120;
+            g.config.pointerPos = RectTransformUtils.GetPositionByPivot(btn, new Vector2(-0.2f, 1.2f));
+            g.frameTip.gameObject.SetActive(false);
+        };
+        config.onStart = (g) => {
+            g.GetMaskClickedEvent().RemoveAllListeners();
+            Action operateFinished = () => {
+                FindObjectOfType<DeviceView1>()?.OnClick_Back();
+                g.clickedWillPlayAudioBtn = false;
+                g.OnClick_ToNext();
             };
+            DeviceCalibrateView.ins.action_OnDestroy += operateFinished;
         };
         configs.Add(config.key, config);
 
@@ -539,7 +644,11 @@ public class NewUserGuiderManager : MonoBehaviour
         "连接设备",
         "弓箭详情",
         "设备-陀螺仪校准",
+        "陀螺仪校准-开始",
+        "陀螺仪校准-完成",
         "设备-地磁计校准",
+        "地磁计校准-开始",
+        "地磁计校准-完成",
         "查看设置",
         "查看商城",
         "切换好友/排行榜",

文件差异内容过多而无法显示
+ 268 - 376
Assets/BowArrow/Resources/Prefabs/Views/DeviceCalibrateView.prefab


+ 4 - 0
Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/cn.json

@@ -28,6 +28,10 @@
     "course_title_11": "结束动作",
     "course_btn_see": "查看",
     
+    "device-calibrate_gyr-tip": "将安装了模块的智能弓箭静置在一个平面上,\n再点击陀螺仪校准。",
+    "device-calibrate_mag-tip": "将安装了模块的智能弓箭沿着不同方向持续翻转,\n直到提示校准完成为止。",
+    "device-calibrate_mag-ok": "地磁计校准已完成",
+
     "new-user-guider_btn_skip": "跳过教程",
     "new-user-guider_tip_模块开机": "长按模块上的<color=#FFA500>“开机”</color>键,当绿灯闪\n烁时,即模块处于等待连接的状态。",
     "new-user-guider_tip_连接设备": "点击<color=#FFA500>“连接”</color>等待设备提示连接成功,\n此时模块是绿灯常亮的状态。",

+ 4 - 0
Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/en.json

@@ -27,6 +27,10 @@
     "course_title_10": "Release",
     "course_title_11": "Finish up job",
     "course_btn_see": "see",
+
+    "device-calibrate_gyr-tip": "Place the smart bow with the module installed \non a plane, and then click Gyr Calibration.",
+    "device-calibrate_mag-tip": "Turn the smart bow and arrow with the module \ninstalled in different directions until it prompts \nthat the calibration is completed.",
+    "device-calibrate_mag-ok": "Mag calibration completed",
     
     "new-user-guider_btn_skip": "Skip Tutorial",
     "new-user-guider_tip_模块开机": "Press and hold the <color=#FFA500>\"Power on\"</color> \nkey on the module, and when \nthe green light flashes, the \nmodule is in the state of \nwaiting for connection.",

+ 42 - 97
Assets/BowArrow/Scripts/View/DeviceCalibrateView.cs

@@ -8,8 +8,8 @@ public class DeviceCalibrateView : MonoBehaviour, MenuBackInterface
 {
     [SerializeField] Button btnGyrCalibrate;
     [SerializeField] Text progressGyrCalibrate;
-    [SerializeField] Button btnMagCalibrate;
-    [SerializeField] Button btnIdentityCalibrate;
+    [SerializeField] GameObject magReset; //地磁校准按钮
+    [SerializeField] GameObject magTipOk;
     [SerializeField] Button btnBack;
     [SerializeField] Button btnNext;
     [SerializeField] Button btnFinish;
@@ -39,12 +39,8 @@ public class DeviceCalibrateView : MonoBehaviour, MenuBackInterface
 
     void Start()
     {
-        BluetoothHolder.ins.ShowMagEllipse(this);
         btnGyrCalibrate.GetComponent<Button>().onClick.AddListener(ClickGyrCalibrate);
-        btnMagCalibrate.GetComponent<Button>().onClick.AddListener(ClickMagCalibrate);
-        btnIdentityCalibrate.GetComponent<Button>().onClick.AddListener(ClickIdentityCalibrate);
         magReset.GetComponent<Button>().onClick.AddListener(ClickResetMag);
-        RefreshResetMagBtn();
         btnBack.GetComponent<Button>().onClick.AddListener(delegate() {
             guideIndex--;
             RefreshPage();
@@ -87,13 +83,6 @@ public class DeviceCalibrateView : MonoBehaviour, MenuBackInterface
         try { 
             GlobalEventCenter.ins.onDeviceCalibrateViewAwakeChanged?.Invoke(false); 
         } catch (System.Exception e) { Debug.LogError(e.Message); }
-        BluetoothHolder.ins.HideMagEllipse(this);
-        // if (gyrCalibrating) {
-        //     AimHandler.ins.CalibrateGyr(false);
-        // }
-        // if (magCalibrating) {
-        //     AimHandler.ins.CalibrateMag(false);
-        // }
         action_OnDestroy?.Invoke();
     }
 
@@ -103,24 +92,16 @@ public class DeviceCalibrateView : MonoBehaviour, MenuBackInterface
         return is_interactable;
     }
 
-    bool canUpdateGyrCalibrateProgress = false;
+    
 
-    float calibrateMagStartTime = 0; //地磁校准开始时刻
+    
 
     void Update()
     {   
-        if (canUpdateGyrCalibrateProgress) {
-            int progress = AimHandler.ins.gyrCalibrateCompleteCount * 100 / AimHandler.ins.gyrCalibrateTotalCount;
-            progressGyrCalibrate.text = progress + "%";
-            if (progress >= 100) {
-                FinishGyrCalibrate();
-            }
-        }
+        UpdateForGyr();
         UpdateForMag();
     }
-    [SerializeField] GameObject tipMag1;
-    [SerializeField] GameObject tipMag2;
-    [SerializeField] GameObject magReset;
+    
 
     void RefreshPage() {
         if (guide) {
@@ -151,11 +132,12 @@ public class DeviceCalibrateView : MonoBehaviour, MenuBackInterface
         }
         this.transform.Find("Gyr").gameObject.SetActive(deviceCalibrateItem == DeviceCalibrateItem.Gyr);
         this.transform.Find("Mag").gameObject.SetActive(deviceCalibrateItem == DeviceCalibrateItem.Mag);
-        this.transform.Find("Identity").gameObject.SetActive(deviceCalibrateItem == DeviceCalibrateItem.Identity);
+        RefreshResetMagBtn();
     }
 
     /* ------ 新地磁计校准(2022-10-3) ------ */
     bool calibrateMagDoing = false;
+    float calibrateMagStartTime = 0; //地磁校准开始时刻
     void RefreshResetMagBtn() 
     {
         if (calibrateMagDoing) {
@@ -172,13 +154,21 @@ public class DeviceCalibrateView : MonoBehaviour, MenuBackInterface
             magReset.GetComponentInChildren<TextAutoLanguage>().SetText(85);
         }
     }
+    //在当前页面中,用户是否点击了开始校准并校准成功;有则flag=1
+    [NonSerialized] public int flag_MagCalibarateOperateAndFinish = -1;
+    public Action action_MagCalibarateOperateAndFinish;
+    public Func<bool> action_OnClickMagCalibrateInterceptor;
     void ClickResetMag() 
     {
+        if (action_OnClickMagCalibrateInterceptor != null) {
+            if (action_OnClickMagCalibrateInterceptor.Invoke()) return;
+        }
         calibrateMagDoing = !calibrateMagDoing;
         if (calibrateMagDoing) {
             calibrateMagStartTime = Time.realtimeSinceStartup;
             AimHandler.ins.MagCalibrater = new o0._9Axis.MagnetometerAutoCalibrater();
             PlayerPrefs.DeleteKey("new_mag_record");
+            flag_MagCalibarateOperateAndFinish = 0;
         }
         interactableAllSkipBtns(!calibrateMagDoing);
         RefreshResetMagBtn();
@@ -191,39 +181,43 @@ public class DeviceCalibrateView : MonoBehaviour, MenuBackInterface
     void UpdateForMag() {
         if (deviceCalibrateItem == DeviceCalibrateItem.Mag) {
             if (!AimHandler.ins.MagCalibrater.Complete) {
-                tipMag1.SetActive(true);
-                tipMag2.SetActive(false);
-                magReset.SetActive(true);
+                magTipOk.SetActive(false);
                 //地磁校准超时提示
                 if (calibrateMagDoing && Time.realtimeSinceStartup - calibrateMagStartTime > 20) {
                     CancelResetMag();
                     PopupMgr.ins.ShowTipTop(TextAutoLanguage2.GetTextByKey("tip_mag-calibrate_please-leave-interfere"));
                 }
             } else {
-                tipMag1.SetActive(false);
-                tipMag2.SetActive(true);
-                magReset.SetActive(true);
+                magTipOk.SetActive(true);
                 if (calibrateMagDoing) {
                     CancelResetMag();
                 }
+                if (flag_MagCalibarateOperateAndFinish == 0) {
+                    flag_MagCalibarateOperateAndFinish = 1;
+                    action_MagCalibarateOperateAndFinish?.Invoke();
+                }
             }
         }
     }
-    //重置地磁校准超时检测
-    public void ResetCalibrateMagTimeout() {
-        calibrateMagStartTime = Time.realtimeSinceStartup;
-    }
 
     // ------ 陀螺仪校准 ------
+    //在当前页面中,用户是否点击了开始校准并校准成功;有则flag=1
+    [NonSerialized] public int flag_GyrCalibarateOperateAndFinish = -1;
+    public Action action_GyrCalibarateOperateAndFinish;
+    public Func<bool> action_OnClickGyrCalibrateInterceptor;
     bool gyrCalibrating = false;
     void ClickGyrCalibrate() 
     {
+        if (action_OnClickGyrCalibrateInterceptor != null) {
+            if (action_OnClickGyrCalibrateInterceptor.Invoke()) return;
+        }
         //Logic
         gyrCalibrating = !gyrCalibrating;
         interactableAllSkipBtns(!gyrCalibrating);
         if (gyrCalibrating) {
             AimHandler.ins.gyrCalibrateCompleteCount = 0;
             canUpdateGyrCalibrateProgress = true;
+            flag_GyrCalibarateOperateAndFinish = 0;
         } else {
             canUpdateGyrCalibrateProgress = false;
         }
@@ -262,71 +256,22 @@ public class DeviceCalibrateView : MonoBehaviour, MenuBackInterface
         }
     }
 
-    // ------ 地磁计校准 ------
-    bool magCalibrating = false;
-    void ClickMagCalibrate() 
+    bool canUpdateGyrCalibrateProgress = false;
+    void UpdateForGyr()
     {
-        Button btn = btnMagCalibrate.GetComponent<Button>();
-        magCalibrating = !magCalibrating;
-        interactableAllSkipBtns(!magCalibrating);
-        if (magCalibrating) {
-            activeMagTipFail(false);
-            btn.GetComponentInChildren<TextAutoLanguage>().SetText(83);
-            btn.GetComponentInChildren<Text>().color = Color.red;
-            AimHandler.ins.CalibrateMag(true);
-        } else {
-            AimHandler.ins.CalibrateMag(false);
-            //检测校准完成时的圆是否理想
-            bool circleIsOk = AimHandler.ins.isCalibrateMagPerfect;
-            //bool circleIsOk = true;
-            // if (AimHandler.ins) {
-            //     Vector3 radius = AimHandler.ins.MagCalibrater._Radius;
-            //     if (radius.Equals(Vector3.zero)) {
-            //         circleIsOk = false;
-            //     } else if (radius.x == 0 || radius.y == 0 || radius.z == 0) {
-            //         circleIsOk = false;
-            //     } else if (
-            //         Mathf.Abs(1f - radius.x / radius.y) > 0.2f ||
-            //         Mathf.Abs(1f - radius.x / radius.z) > 0.2f ||
-            //         Mathf.Abs(1f - radius.y / radius.z) > 0.2f
-            //     ) {
-            //         circleIsOk = false;
-            //     }
-            // }
-            //提示校准效果不理想
-            if (!circleIsOk) activeMagTipFail(true);
-            //调整校准按钮
-            if (guide && circleIsOk) {
-                //关闭按钮
-                btn.enabled = false;
-                btn.GetComponentInChildren<TextAutoLanguage>().SetText(82);
-                btn.GetComponent<Image>().sprite = Resources.Load<Sprite>("Textures/Common/ButtonGray");
-                btn.GetComponentInChildren<Text>().color = Color.gray;
-            } else {
-                btn.GetComponentInChildren<TextAutoLanguage>().SetText(116);
-                Color outColor;
-                ColorUtility.TryParseHtmlString("#005AB6", out outColor);
-                btn.GetComponentInChildren<Text>().color = outColor;    
+        if (canUpdateGyrCalibrateProgress) {
+            int progress = AimHandler.ins.gyrCalibrateCompleteCount * 100 / AimHandler.ins.gyrCalibrateTotalCount;
+            progressGyrCalibrate.text = progress + "%";
+            if (progress >= 100) {
+                FinishGyrCalibrate();
+                if (flag_GyrCalibarateOperateAndFinish == 0) {
+                    flag_GyrCalibarateOperateAndFinish = 1;
+                    action_GyrCalibarateOperateAndFinish?.Invoke();
+                }
             }
         }
     }
 
-    private void activeMagTipFail(bool value) {
-        Transform tipFail_T = this.transform.Find("Mag/TipFail");
-        if (tipFail_T.gameObject) {
-            tipFail_T.gameObject.SetActive(value);
-        }
-    }
-
-    // ------ 视角归位 ------
-    void ClickIdentityCalibrate() {
-        AimHandler.ins.DoIdentity();
-        Button btn = btnIdentityCalibrate.GetComponent<Button>();
-        btn.GetComponent<Image>().sprite = Resources.Load<Sprite>("Textures/Common/ButtonGray");
-        btn.GetComponentInChildren<Text>().color = Color.gray;
-        btn.enabled = false;
-    }
-
     //设置所有跳转按钮是否可交互
     private void interactableAllSkipBtns(bool value) {
         this.btnBack.interactable = value;
@@ -336,5 +281,5 @@ public class DeviceCalibrateView : MonoBehaviour, MenuBackInterface
 }
 public enum  DeviceCalibrateItem
 {
-    Guide, Gyr, Mag, Identity
+    Guide, Gyr, Mag
 }

部分文件因为文件数量过多而无法显示