2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
3.1 KiB
C#

using System;
using UnityEngine;
namespace Game
{
public class SkillHitInfo
{
public AttackBehaviour SkillParam;
public float AttackRate;
public float StunkRate;
public int OwnerEntity;
public int HitEntity; //0为非实体对象
public Vector3 HitDir;
public bool IsDealed; //已经结算
public string SkillId; //是否技能造成的伤害
public uint Performance; //性能tag的mask
public int StaggerLevel;
public bool IsBreak;
public EHitType HitType;
}
public class ClipAttack : TimelineClipBase
{
private AttackClip _mRealAsset;
public override void OnEnter()
{
_mRealAsset = Asset as AttackClip;
}
public override void OnStay()
{
var param = _mRealAsset.template;
var skill = Owner.skill;
var castShape = param.Shape;
var castDir = Owner.skill.CastDir;
castDir = new Vector3(castDir.x, 0, castDir.z); //忽略y
var rot = Quaternion.FromToRotation(Vector3.right, castDir);
var castPos = rot * castShape.Offset + Owner.Pos();
Util.DrawShape(castShape, castPos, castDir, Color.red);
Util.ForeachEnemies(Owner.Team(), target =>
{
var isHit = UtilShape.IsOverlap(castShape, castPos, castDir, target.hp.HitBoxShape, target.Pos());
if (isHit)
{
var targetID = target.ID();
var hitKey = new Tuple<int, int>(targetID, param.hitId);
if (Owner.skill.SkillHitInfo.ContainsKey(hitKey)) return;
var skillHitInfo = new SkillHitInfo
{
SkillParam = param,
AttackRate = 1,
StunkRate = 1,
OwnerEntity = Owner.ID(),
HitEntity = targetID,
HitDir = castDir,
IsDealed = false,
SkillId = skill.SkillId.Value,
Performance = 0,
StaggerLevel = param.staggerLevel,
IsBreak = true,
HitType = param.hitType,
};
if (!string.IsNullOrEmpty(skillHitInfo.SkillId))
{
var skillCfg = Util.GetSkillMasterConfigData(skillHitInfo.SkillId);
if (skillCfg != null)
{
var featureSkill = skillCfg.GetFeatureSkill();
skillHitInfo.AttackRate = featureSkill.AttackRate;
skillHitInfo.StunkRate = featureSkill.StunRate;
}
}
Owner.skill.SkillHitInfo[hitKey] = skillHitInfo;
}
});
}
public override void OnLeave()
{
}
}
}