NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Bullet/State/BulletStateUnitLockFly.cs

65 lines
1.8 KiB
C#

using LTGame;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Gameplay.Unit;
namespace Gameplay.Bullet
{
using Gameplay.Common;
using UnityEngine;
public class BulletStateUnitLockFly : BaseBulletState
{
private Vector3 _targetPos;
private GameUnit targetUnit;
private float _flySpeed;
public BulletStateUnitLockFly(ViewBullet owner) : base(owner, EBulletState.UnitLockFly)
{
}
protected override void _OnEnter(NBaseState exitState, object param)
{
base._OnEnter(exitState, param);
this.targetUnit = owner.lockUnit;
this._targetPos = targetUnit.transData.pos;
_flySpeed = owner.configData.FlySpeed;
}
protected override void _OnRunning()
{
base._OnRunning();
var currentPos = owner.rootObj.transform.position;
if (!targetUnit.statusData.isDead)
{
// 更新位置
_targetPos = targetUnit.transData.pos;
}
var targetPos = _targetPos;
var toTargetPos = targetPos - currentPos;
var toTargetPosLength = toTargetPos.magnitude;
var toTargetPosDir = toTargetPos.normalized;
var moveDistance = _flySpeed * Time.deltaTime;
if (moveDistance >= toTargetPosLength)
{
owner.rootObj.transform.position = targetPos;
isFinished = true;
nextState = EBulletState.DamageUnit;
}
else
{
var newPos = currentPos + toTargetPosDir * moveDistance;
owner.rootObj.transform.position = newPos;
}
}
}
}