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; } } } } }