85 lines
3.0 KiB
C#
85 lines
3.0 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.Area;
|
|
using Gameplay.Bullet.NormalAttack;
|
|
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;
|
|
var targetCellIndex = targetUnit.transData.cellIndex;
|
|
if (targetUnit.statusData.isDead)
|
|
{
|
|
// 已经死亡,就取消该子弹
|
|
|
|
// 把命中特效播到地板上
|
|
var effectId = owner.rawConfig.DestroyEffectId;
|
|
if (effectId > 0)
|
|
{
|
|
EffectManager.instance.PlayEffectById(effectId, owner.rootObj.transform.position).owner = owner.sender;
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (owner.rawConfig.LightDuring > 0 && BlackAreaManager.instance.enableBlackArea)
|
|
{
|
|
var cellIndex = targetCellIndex;
|
|
var areaCellIndexList = AreaManager.instance.GetCellIndexs(cellIndex, owner.rawConfig.AreaId);
|
|
for (int i = 0; i < areaCellIndexList.Count; i++)
|
|
{
|
|
var lightCellIndex = areaCellIndexList[i];
|
|
BlackAreaManager.instance.LightUpCell(lightCellIndex, owner.rawConfig.LightDuring);
|
|
}
|
|
}
|
|
|
|
BulletManager.instance.AddBuffs2Unit(targetUnit, owner.sender, owner.rawConfig);
|
|
|
|
// 把命中特效播到目标身上
|
|
{
|
|
var effectId = owner.rawConfig.DestroyEffectId;
|
|
if (effectId > 0)
|
|
{
|
|
var hitPoints = NormalAttackHelper.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;
|
|
}
|
|
}
|
|
|
|
owner.TriggerAddBulletIds(targetCellIndex);
|
|
|
|
}
|
|
|
|
}
|
|
}
|