68 lines
2.2 KiB
C#
68 lines
2.2 KiB
C#
using Gameplay.Effect;
|
|
using Gameplay.Weapon;
|
|
using LTGame;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Gameplay.Bullet
|
|
{
|
|
|
|
using UnityEngine;
|
|
|
|
public class BulletStateDamageUnit: BaseBulletState
|
|
{
|
|
|
|
public BulletStateDamageUnit(ViewBullet owner): base(owner, EBulletState.DamageUnit)
|
|
{
|
|
|
|
}
|
|
|
|
protected override void _OnEnter(NBaseState exitState, object param)
|
|
{
|
|
base._OnEnter(exitState, param);
|
|
isFinished = true;
|
|
nextState = EBulletState.Destroy;
|
|
|
|
var targetUnit = owner.lockUnit;
|
|
if (targetUnit.statusData.isDead)
|
|
{
|
|
// 已经死亡,就取消该子弹
|
|
|
|
// 把命中特效播到地板上
|
|
var effectId = owner.configData.DestroyEffectId;
|
|
if (effectId > 0)
|
|
{
|
|
EffectManager.instance.PlayEffectById(effectId, owner.rootObj.transform.position).owner = owner.sender;
|
|
}
|
|
return;
|
|
}
|
|
|
|
BulletManager.instance.AddBuffs2Unit(targetUnit, owner.sender, owner.configData);
|
|
|
|
// 把命中特效播到目标身上
|
|
{
|
|
var effectId = owner.configData.DestroyEffectId;
|
|
if (effectId > 0)
|
|
{
|
|
var hitPoints = ViewWeapon.GetPoints(targetUnit);
|
|
var randomPoint = hitPoints.m_OtherPoints[Random.Range(0, hitPoints.m_OtherPoints.Length)];
|
|
var sender = owner.sender;
|
|
var senderPos = sender != null ? sender.transData.pos : owner.rootObj.transform.position;
|
|
var position = randomPoint.position;
|
|
var toSenderPos = senderPos - position;
|
|
toSenderPos.y = 0;
|
|
var angle = Vector3.SignedAngle(Vector3.forward, toSenderPos, Vector3.up);
|
|
var rot = Quaternion.Euler(0, angle, 0);
|
|
EffectManager.instance.PlayEffectById(effectId, position, rot).owner = owner.sender;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|
|
}
|