64 lines
1.8 KiB
C#
64 lines
1.8 KiB
C#
using LTGame;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
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;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|