using Core.Triiger;
using GameLogic.Combat.CombatTool;
using UnityEngine;
namespace GameLogic.Combat.Hero.State
{
///
/// 再空中飞来飞去撞的时候
///
public class MagicWeaponMoveState : CombatHeroStateBasic
{
private CombatMagicWeaponEntity myCombatMagicWeaponEntity;
private float speed = 1;
private IUnRegister OnTriggerEnterEvent;
protected Vector3 _lastDir;
protected bool _trigger;
private float _triggerTime;
public MagicWeaponMoveState(CombatHeroEntity combatHeroEntity) : base(combatHeroEntity)
{
myCombatMagicWeaponEntity = combatHeroEntity as CombatMagicWeaponEntity;
}
protected override void ProEnter()
{
OnTriggerEnterEvent = myCombatMagicWeaponEntity.GameObject.OnTriggerEnterEvent(OnTriggerEnter);
}
private void OnTriggerEnter(Collider collider)
{
HeroEntityMono heroEntityMono = collider.GetComponent();
if (heroEntityMono == null || heroEntityMono.combatHeroEntity != myCombatMagicWeaponEntity.CollidingTarget)
{
return;
}
_trigger = true;
_triggerTime = 1;
//碰到了要撞的敌人
}
protected override void ProUpdate(float t)
{
if (myCombatMagicWeaponEntity.CollidingTarget == null)
{
CombatMagicWeaponEntity combatMagicWeaponEntity =
CombatController.currActiveCombat.MagicWeaponCombatSence.FindCollidingTarget(
myCombatMagicWeaponEntity);
myCombatMagicWeaponEntity.CollidingTarget = combatMagicWeaponEntity;
}
CombatMagicWeaponEntity currCollidingTarget = myCombatMagicWeaponEntity.CollidingTarget;
if (currCollidingTarget == null) //没有可碰撞的法宝了
{
return;
}
if (!currCollidingTarget.isCombatState) //如果目标已经激活了,那么就直接攻击
{
return;
}
Quaternion newQuaternion = myCombatMagicWeaponEntity.GameObject.transform.rotation;
if (_trigger && _triggerTime > 0)
{
_triggerTime -= t;
if (_triggerTime <= 0)
{
_trigger = false;
speed = 1;
}
}
else
{
Vector3 newDir = (currCollidingTarget.dotPos - myCombatMagicWeaponEntity.dotPos).normalized;
newQuaternion = Quaternion.LookRotation(newDir);
newQuaternion = Quaternion.RotateTowards(myCombatMagicWeaponEntity.GameObject.transform.rotation,
newQuaternion, 5);
_lastDir = newDir;
}
speed += t * 3;
if (speed > 10)
{
speed = 10;
}
Vector3 pos = newQuaternion * new Vector3(0, 0, 1);
Vector3 movePos = pos * speed * t;
Vector3 _currPos = myCombatMagicWeaponEntity.dotPos;
_currPos += movePos;
myCombatMagicWeaponEntity.combatHeroGameObject.SetPosition(_currPos);
myCombatMagicWeaponEntity.GameObject.transform.rotation = newQuaternion;
}
protected void ActiveHero()
{
}
protected override void ProExit()
{
OnTriggerEnterEvent.UnRegister();
}
public override bool IsUpdateLockTarget()
{
return false;
}
protected override void ProDispose()
{
}
}
}