using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 普通状态 /// public class NormalExistSafetyAreaSpecialState : AbstractExistSafetyAreaSpecialState { private const float OFFLINE_MAP_CALL_TIME_SPAN = 0.5f; private const float AUTO_SAVE_MAP_TIME_SPAN = 60f; private const float TAP_TIMER = 0.5f; private float timer = 0f; private bool isOpenSeeThrough = false; private float savemapTimer = 0f; private int tapCount; private float tapTimer = 0f; public override void OnStateBreathe() { if (SafetyAreaManager.Instance.isSettingSafetyArea || SafetyAreaManager.Instance.isDisableSafetyArea) { reference.outOfSafetyArea.SetActive(false); reference.nomapUI.SetActive(false); reference.slamLostUI.gameObject.SetActive(false); reference.meshRenderer.enabled = !SafetyAreaManager.Instance.isDisableSafetyArea; return; } if (tapTimer > 0f) { tapTimer -= Time.deltaTime; } else { tapTimer = 0f; } timer += Time.deltaTime; savemapTimer += Time.deltaTime; if (savemapTimer > AUTO_SAVE_MAP_TIME_SPAN) { savemapTimer = 0f; API_GSXR_Slam.GSXR_SaveMap(); } if (timer >= OFFLINE_MAP_CALL_TIME_SPAN) { timer = 0f; int currentRelocState = API_GSXR_Slam.GSXR_Get_OfflineMapRelocState(); if (currentRelocState == 0) { reference.ChangeState(ExistSafetyAreaEnum.NoMap); return; } } if (reference.distance > 10f) { reference.ChangeState(ExistSafetyAreaEnum.SlamLost); return; } if (reference.alpha >= 1.1f) { reference.ChangeState(ExistSafetyAreaEnum.OutOfArea); return; } } public override void OnStateEnter(object data) { timer = 0f; savemapTimer = 0f; isOpenSeeThrough = false; SafetyAreaManager.Instance.OnDisableSafetyArea += OnDisableChange; SafetyAreaManager.Instance.OnDoubleTapShowSafetyArea += OnDoubleTapShowSafetyArea; API_GSXR_Slam.GSXR_Add_SlamPauseCallback(OnSlamPause); if (!SafetyAreaManager.Instance.isSettingSafetyArea) { SafetyAreaManager.Instance.EnterSafetyAreaInvoke(); } #if !UNITY_EDITOR TpActionManager.Instance.ActiveTpListener(OnTpDown); #endif } public override void OnStateExit(object data) { #if !UNITY_EDITOR TpActionManager.Instance.CancelTpListener(); #endif API_GSXR_Slam.GSXR_Remove_SlamPauseCallback(OnSlamPause); SafetyAreaManager.Instance.OnDoubleTapShowSafetyArea -= OnDoubleTapShowSafetyArea; SafetyAreaManager.Instance.OnDisableSafetyArea -= OnDisableChange; } private void OnSlamPause(bool isPause) { if (!isPause && !SafetyAreaManager.Instance.isDisableSafetyArea) { if (isOpenSeeThrough) { API_GSXR_Slam.GSXR_StartSeeThrough(); } } } private void OnDisableChange(bool isDisable) { if (!isDisable && isOpenSeeThrough) { API_GSXR_Slam.GSXR_StartSeeThrough(); } else { API_GSXR_Slam.GSXR_StopSeeThrough(); } } private void OnDoubleTapShowSafetyArea(bool isActive) { if (!isActive) { isOpenSeeThrough = false; API_GSXR_Slam.GSXR_StopSeeThrough(); } } private void OnTpDown() { if (!SafetyAreaManager.Instance.DoubleClickShowSeeThrough || SafetyAreaManager.Instance.isSettingSafetyArea || SafetyAreaManager.Instance.isDisableSafetyArea) { return; } if (tapTimer != 0f) { if (isOpenSeeThrough) { //Debug.LogError("LQR GSXR_StopSeeThrough"); isOpenSeeThrough = false; API_GSXR_Slam.GSXR_StopSeeThrough(); } else { //Debug.LogError("LQR GSXR_StartSeeThrough"); isOpenSeeThrough = true; API_GSXR_Slam.GSXR_StartSeeThrough(); } tapTimer = 0f; } else { tapTimer = TAP_TIMER; } } }