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;
}
}
}