using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic; using Fort23.Core; using GameLogic.Combat.CombatTool; using GameLogic.Combat.CombatType; using GameLogic.Combat.Hero; using UnityEngine; namespace GameLogic.Combat.CombatState { public class CombatUpdateState : CombatStateBasic { /// /// 下次遇见怪的时间 /// private float _nextMonsterTime; /// /// 是否没有敌人 /// protected bool isNullMonster; public CombatUpdateState(CombatController combatController) : base(combatController) { } protected override void ProEnter() { CombatController.CombatCameraControllder.isStop = false; CombatController.IsFightState = false; CombatController.GameTimeLineParticleFactory.RecycleAllFxAiLogicBasic(); CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.CombatHeroController.playerHeroEntity; if (playerHeroEntity != null) { playerHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.Flight); playerHeroEntity.CurrCombatHeroInfo.Shield = playerHeroEntity.MaxCombatHeroInfo.Shield; CombatCalculateTool.Instance.Recover(playerHeroEntity, playerHeroEntity.GetMainHotPoin(), 999999, AttType.Normal, HarmType.Default, new TriggerData()); } _nextMonsterTime = Random.Range(5, 10); isNullMonster = true; CombatController.MagicWeaponCombatSence.CloseSecene(); } protected override void ProUpdate(float t) { CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.CombatHeroController.playerHeroEntity; if (playerHeroEntity == null) { return; } if (isNullMonster) { _nextMonsterTime -= t; if (_nextMonsterTime < 0) { isNullMonster = false; TestCombatType testCombatType = CombatController.currActiveCombat.CombatTypeBasic as TestCombatType; if (testCombatType != null) { testCombatType.CreateEnemy(new CTaskAwaitBuffer()); } } } CombatHeroEntity[] allHero = CombatController.currActiveCombat.CombatHeroController.GetHero(true); IHero ihero = FindMinDixtance(allHero); if (ihero != null) { CombatController.ChangeState("fight"); return; } float add = 0.1f; Vector3 pos = Vector3.zero; Vector3 dir = Vector3.zero; float fx = 1; pos = CombatController.currActiveCombat.CombatSenceController.Move(30 * t); float lt = CombatController.currActiveCombat.CombatSenceController.currTime - 0.01f; Vector3 p = CombatController.currActiveCombat.CombatSenceController.GetTarget(lt); dir = (pos - p).normalized; playerHeroEntity.combatHeroGameObject.SetPosition(pos); playerHeroEntity.GameObject.transform.rotation = Quaternion.LookRotation(dir * fx); CombatController.CombatHeroController.Update(t); CombatController.CombatCameraControllder.Update(t); CombatController.GameTimeLineParticleFactory.CombatUpdate(t); } protected IHero FindMinDixtance(CombatHeroEntity[] allHero) { IHero minDistanceHero = null; if (allHero == null) { return null; } CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.CombatHeroController.playerHeroEntity; float minDistance = float.MaxValue; for (int i = 0; i < allHero.Length; i++) { CombatHeroEntity hero = allHero[i]; if (hero.GetMainHotPoin() == null) { continue; } float distance = Vector3.SqrMagnitude(hero.combatHeroGameObject.position - playerHeroEntity.combatHeroGameObject.position); if (distance < minDistance && distance < 225f) { // if (!_combatHeroEntity.IsEnemy || distance < _combatHeroEntity.CurrCombatHeroInfo.maxDisTo + 100) { minDistance = distance; minDistanceHero = hero; } } } return minDistanceHero; } } }