using Excel2Json; using Fort23.Core; using Fort23.UTool; using GameLogic.Combat.CombatTool; using GameLogic.Combat.Hero; using UnityEngine; using Utility.UITool; namespace GameLogic.Combat.CombatState { public class CombatSceneSwitchState : CombatStateBasic { private Vector3 dir; private Vector3 moveTargetDir; private float currTime; private int state; private Vector3 startPos; private Vector3 startEulerAngles; private float speed=0.5f; private float feiXingCurTime; public CombatSceneSwitchState(CombatController combatController) : base(combatController) { } protected override void ProEnter() { CombatController.CombatCameraControllder.isStop = true; CombatController.IsFightState = false; CombatController.GameTimeLineParticleFactory.RecycleAllFxAiLogicBasic(); CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity; if (playerHeroEntity != null) { playerHeroEntity.PlayAnim(CombatHeroStateType.idle, true, 0, false, 1); CombatController.MagicWeaponCombatSence.CloseSecene(); } startPos = playerHeroEntity.GameObject.transform.position; startEulerAngles = playerHeroEntity.GameObject.transform.rotation.eulerAngles; // CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity; Vector3 target = playerHeroEntity.GameObject.transform.TransformPoint(new Vector3(2, 2, 1)); moveTargetDir = (target - playerHeroEntity.GameObject.transform.forward).normalized; dir = playerHeroEntity.GameObject.transform.forward; currTime = 0; state = 0; feiXingCurTime = 0; } protected override void ProUpdate(float t) { CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity; if (playerHeroEntity == null) { return; } currTime += t; if (currTime > 2 && state == 0) { state = 1; EventManager.Instance.Dispatch(CustomEventType.ShowLoadingUI, null); InitScenes(); currTime = 0; } if (state == 2) { return; } feiXingCurTime += t * speed; float dirT = AnimationCurveManager.Instance.AnimationCurveLibrary.switchSceneCurve.Evaluate(feiXingCurTime); Vector3 pos = playerHeroEntity.dotPos; Vector3 currDir = Vector3.Lerp(dir, moveTargetDir, dirT); pos += currDir.normalized * 15 * t; playerHeroEntity.combatHeroGameObject.SetPosition(pos); playerHeroEntity.GameObject.transform.rotation = Quaternion.LookRotation(new Vector3(currDir.x, 0, currDir.z).normalized); } private async void InitScenes() { await TimerComponent.Instance.WaitAsync(2600); state = 2; CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity; playerHeroEntity.GameObject.transform.position = startPos; playerHeroEntity.GameObject.transform.rotation = Quaternion.Euler(startEulerAngles); SmallPlacesConfig smallPlacesConfig = ConfigComponent.Instance.Get(PlayerManager.Instance.CurrentsmallPlaces.id); await CombatController.CombatSenceController.InitScenes(smallPlacesConfig.scencName); EventManager.Instance.Dispatch(CustomEventType.CloseLoadingUI, null); CombatController.CombatCameraControllder.isStop = false; CombatController.ChangeState(CombatController.fight); } } }