using System; using AOT.PostProcess.ColorFade; using Cysharp.Threading.Tasks; using Framework; using Gameplay.Area.Around; using Gameplay.Guide; using LTGame; using TGS; using UnityEngine; namespace Gameplay.Level { public abstract class BaseLevelState : NBaseState { protected Level _level; public BaseLevelState(Level level, int stateId) : base(stateId) { _level = level; } protected async void _WaitBlackOut() { if (GlobalFadeManager.instance.fadeProgress <= 0.5f) { return; } GlobalFadeManager.instance.FadeOut(0.5f); await UniTask.WaitForSeconds(0.5f); } public override void Run(float dt) { // 暂停状态下不执行 if (_level.IsPause()) return; base.Run(dt); } protected override void _OnEnter(NBaseState exitState, object param) { } protected override void _OnRunning() { } protected override void _OnExit(NBaseState exitState, object param) { } protected abstract void _OnCellClick(TerrainGridSystem tgs, int cellIndex, int buttonIndex); protected abstract void _OnClick(Vector2 screenPosition); public void ClickFromScreen(Vector2 screenPos) { _OnClick(screenPos); } /// /// 检查能否点击地板 /// protected void CheckCellClick(TerrainGridSystem tgs, int cellIndex, int buttonIndex) { if (GuideManager.Instance.IsGuiding && // 在新手引导中 GuideManager.Instance.IsControlFloor && // 是否控制地板点击 GuideManager.Instance.FloorIndex != cellIndex) // 点击的不是指定地板 { EventManager.Instance.Send(EventManager.EventName.ToFightModelDragSuc, false); return; } EventManager.Instance.Send(EventManager.EventName.Guide_ClickFloor, cellIndex); DebugUtil.LogG($"用户点击格子:{cellIndex}"); _OnCellClick(tgs, cellIndex, buttonIndex); // _TestCode(cellIndex); // _TestCode2(cellIndex); } private void _TestCode1(int cellIndex) { var blockData = _level.Map.GetBlockData(cellIndex); if (blockData == null) { DebugUtil.LogError("Block data is null"); return; } DebugUtil.Log("blockProperty:" + blockData.GetTerrainTypeProperty().crossLevel); _level.Map.GetRuntimeBlockProperty(cellIndex, out var runtimeBlockProperty); DebugUtil.Log("runtimeBlockProperty:" + runtimeBlockProperty.crossLevel); } private void _TestCode2(int cellIndex) { var mathV3 = AroundHelper.GetMathPosV3(cellIndex); var reCovertIndex = AroundHelper.GetCellIndexV3(mathV3); DebugUtil.Log("cellIndex:" + cellIndex + " mathV3:" + mathV3 + " recovertIndex:" + reCovertIndex); cellIndex = reCovertIndex; var cacheList = new System.Collections.Generic.List(); AroundHelper.GetAroundMath(cellIndex, 2, cacheList); var centerPos = _level.Map.TerrainGridSystem.CellGetPosition(cellIndex); // 在对应位置创建一个球体 DebugUtil.CreateSphere(centerPos, 0.5f, 10f); for (int i = 0; i < cacheList.Count; i++) { var searchIndex = cacheList[i]; var worldPos = _level.Map.TerrainGridSystem.CellGetPosition(searchIndex); Debug.DrawLine(centerPos, worldPos, Color.red, 10); } } private void _PerformanceTest(int cellIndex) { UnityEngine.Profiling.Profiler.BeginSample("PerformanceTest - GetAroundMath"); var cacheList = new System.Collections.Generic.List(); for (int i = 0; i < 1000; i++) { cacheList.Clear(); AroundHelper.GetAroundMath(cellIndex, 7, cacheList); } UnityEngine.Profiling.Profiler.EndSample(); UnityEngine.Profiling.Profiler.BeginSample("PerformanceTest - GetAroundLogic"); for (int i = 0; i < 1000; i++) { cacheList.Clear(); AroundHelper.GetAroundLogic(cellIndex, 7, cacheList); } UnityEngine.Profiling.Profiler.EndSample(); } } }