using Core.Audio; using GameLogic.Combat.CombatTool; using GameLogic.Combat.CombatTool.CombatReport; using GameLogic.Combat.Hero; using UnityEngine; namespace GameLogic.Combat.CombatState { public class CombatFightState : CombatStateBasic { public CombatFightState(CombatController combatController) : base(combatController) { } protected override void ProEnter() { CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity; CombatController.CombatCameraControllder.SetPos(playerHeroEntity.combatHeroGameObject.transform); CombatController.CombatCameraControllder.isStop = true; CombatController.IsFightState = true; CombatController.currActiveCombat.CombatCameraControllder.SetFieldOfView(60, 3); AudioManager.Instance.PlayBGM("battle1.mp3"); } protected override void ProExit() { CombatController.CombatCameraControllder.isStop = false; } protected override void ProUpdate(float t) { CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity; if (playerHeroEntity == null) { return; } CombatHeroEntity[] allHero = CombatController.currActiveCombat.CombatHeroController.GetHero(true, out int maxCount); IHero ihero = FindMinDixtance(allHero, maxCount, 500); if (ihero == null) { CombatController.ChangeState("update"); return; } IHero ihero2 = FindMinDixtance(allHero, maxCount, 225); if (ihero2 == null) { float add = 0.1f; Vector3 pos = playerHeroEntity.dotPos; Vector3 dir = CombatController.currActiveCombat.CombatHeroController.moveDir; float fx = 1; pos += dir.normalized * CombatController.currActiveCombat.CombatHeroController.moveSpeed * t; 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, int maxCount, int maxDis) { IHero minDistanceHero = null; if (allHero == null) { return null; } CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity; float minDistance = float.MaxValue; for (int i = 0; i < maxCount; i++) { CombatHeroEntity hero = allHero[i]; if (hero.GetMainHotPoin() == null) { continue; } float distance = Vector3.SqrMagnitude(hero.combatHeroGameObject.position - playerHeroEntity.combatHeroGameObject.position); if (distance < minDistance && distance < maxDis) { // if (!_combatHeroEntity.IsEnemy || distance < _combatHeroEntity.CurrCombatHeroInfo.maxDisTo + 100) { minDistance = distance; minDistanceHero = hero; } } } return minDistanceHero; } } }