using Fort23.Core; using GameLogic.Combat.CombatTool; using GameLogic.Combat.Hero; using UnityEngine; 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; 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(1, 2, 1)); moveTargetDir = (target - playerHeroEntity.GameObject.transform.forward).normalized; currTime = 0; state = 0; } protected override void ProUpdate(float t) { CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity; if (playerHeroEntity == null) { return; } currTime += t; if (currTime > 3 && state == 0) { state = 1; EventManager.Instance.Dispatch(CustomEventType.ShowLoadingUI, null); InitScenes(); currTime = 0; } if (state == 2) { return; } Vector3 pos = playerHeroEntity.dotPos; Vector3 currDir = Vector3.Lerp(playerHeroEntity.GameObject.transform.forward, moveTargetDir, 0.3f); pos += currDir.normalized * 15 * t; playerHeroEntity.combatHeroGameObject.SetPosition(pos); playerHeroEntity.GameObject.transform.rotation = Quaternion.LookRotation(new Vector3(currDir.x, 0, currDir.z)); } private async void InitScenes() { await TimerComponent.Instance.WaitAsync(600); state = 2; CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity; playerHeroEntity.GameObject.transform.position = startPos; playerHeroEntity.GameObject.transform.rotation = Quaternion.Euler(startEulerAngles); await CombatController.CombatSenceController.InitScenes("LevelBattle03"); EventManager.Instance.Dispatch(CustomEventType.CloseLoadingUI, null); CombatController.CombatCameraControllder.isStop = false; CombatController.ChangeState(CombatController.fight); } } }