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

75 lines
2.4 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;
using AOT.PostProcess.BlackArea;
using Gameplay.PostProcess.BlackArea;
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;
}
if (owner.configData.LightDuring > 0)
{
BlackAreaManager.instance.LightUpCell(targetUnit.transData.cellIndex, owner.configData.LightDuring);
}
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 + 180, 0);
EffectManager.instance.PlayEffectById(effectId, position, rot).owner = owner.sender;
}
}
}
}
}