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() { } } }