using UnityEngine;
|
|
public class Warn_300 : SMB_Base
|
{
|
public int nextSkillID = -1;
|
|
protected override void OnEnter(GActor owner, Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
|
{
|
base.OnEnter(owner, animator, stateInfo, layerIndex);
|
}
|
|
protected override void OnUpdate(GActor owner, Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
|
{
|
base.OnUpdate(owner, animator, stateInfo, layerIndex);
|
|
if (owner is GA_NpcClientFightNorm)
|
{
|
GA_NpcClientFightNorm _owner = owner as GA_NpcClientFightNorm;
|
|
if (stateInfo.normalizedTime > 1f)
|
{
|
if (nextSkillID != -1)
|
{
|
Skill _skill = _owner.SkillMgr.Get(nextSkillID);
|
float length = 7.5f;
|
SkillHelper.EffectValue _effectValue;
|
if (_skill.skillInfo.effectValue.TryGetValue(2100, out _effectValue))
|
{
|
length = _effectValue.value1 * .5f;
|
Vector3 _end = owner.Pos + owner.Forward * length;
|
|
Vector3 _position = owner.Pos;
|
_position.y = 0;
|
_end.y = 0;
|
UnityEngine.AI.NavMeshHit _hit;
|
if (UnityEngine.AI.NavMesh.Raycast(_position, _end, out _hit, -1))
|
{
|
_end = _hit.position;
|
}
|
_end.y = owner.Pos.y;
|
_skill.targetPosition = _end;
|
}
|
|
if (_skill.skillInfo.config.Skillactmark != 0)
|
{
|
owner.SetAnimatorSpeed(1);
|
owner.NextAction = _skill.skillInfo.config.Skillactmark;
|
_owner.SkillMgr.CastSkill(_owner.ServerInstID, nextSkillID, true);
|
|
bool _canAttacked = false;
|
|
int _type = _skill.skillInfo.config.WarnInfo / 1000000;
|
if (_type > 200)
|
{
|
if (CollisionUtility.IsPointInRectangle(owner.Pos, owner.Forward, 4, length, PlayerDatas.Instance.hero.Pos)
|
&& PlayerDatas.Instance.hero.State != E_ActorState.Roll)
|
{
|
_canAttacked = true;
|
}
|
}
|
else if (_type >= 100 && _type < 200)
|
{
|
float _distSqrt = MathUtility.DistanceSqrtXZ(owner.Pos, PlayerDatas.Instance.hero.Pos);
|
if (_distSqrt < _skill.skillInfo.config.AtkDist * _skill.skillInfo.config.AtkDist)
|
{
|
_canAttacked = true;
|
}
|
}
|
//Debug.LogFormat("=====================: {0}", PlayerDatas.Instance.hero.State);
|
if (_canAttacked)
|
{
|
uint hurtValue = 0;
|
byte attackType = 0;
|
|
AttackHandler.CalculateDamage(_owner, PlayerDatas.Instance.hero, _skill, 0, ref hurtValue, ref attackType);
|
AttackHandler.HurtObjs _hurtObject = new AttackHandler.HurtObjs
|
{
|
AttackType = attackType,
|
clientInstID = PlayerDatas.Instance.hero.ClientInstID,
|
CurHP = PlayerDatas.Instance.hero.ActorInfo.Hp,
|
CurHPEx = 0,
|
HurtHP = hurtValue,
|
ObjID = (uint)PlayerDatas.Instance.hero.ServerInstID,
|
ObjType = (byte)GameObjType.gotPlayer
|
};
|
|
_skill.hurtClientList.Add(_hurtObject);
|
}
|
}
|
_skill.SkillPreparing = false;
|
}
|
}
|
}
|
}
|
|
protected override void OnExit(GActor owner, Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
|
{
|
base.OnExit(owner, animator, stateInfo, layerIndex);
|
owner.SetAnimatorSpeed(1);
|
}
|
}
|