using vnxbqy.UI;
|
|
using UnityEngine;
|
|
public class GA_PlayerClient : GActorPlayerBase
|
{
|
private PlayerInfo m_PlayerInfo;
|
private float m_LastUseSkillTime;
|
private int nextConAtkIndex;
|
|
public void Init(uint serverInstID, uint clientInstID, PlayerInfo info, E_ActorGroup group)
|
{
|
m_PlayerInfo = info;
|
|
Init(serverInstID, clientInstID, group, null);
|
}
|
|
protected sealed override void OnInit(GameNetPackBasic package)
|
{
|
base.OnInit(package);
|
|
if (m_PlayerInfo == null)
|
{
|
return;
|
}
|
|
// 初始化坐标
|
AdjustPos((ushort)(m_PlayerInfo.pos.x * 2), (ushort)(m_PlayerInfo.pos.z * 2));
|
|
ActorInfo.moveSpeed = 3;
|
ActorInfo.atkSpeed = 1;
|
|
JobSetup = JobSetupConfig.Get(m_PlayerInfo.job);
|
|
CEquipInfo _itemInfo;
|
|
if (m_PlayerInfo.itemDatas != null)
|
{
|
// 因为衣服是所有装备的父节点, 需要预先处理衣服
|
for (int i = 0; i < m_PlayerInfo.itemDatas.Length; ++i)
|
{
|
_itemInfo = m_PlayerInfo.itemDatas[i];
|
|
if (_itemInfo.place == (int)RoleEquipType.Clothes)
|
{
|
//m_SuitLevel = 0;
|
//if (_itemInfo.isSuit == 1)
|
//{
|
// m_SuitLevel = (byte)_itemInfo.suitLevel;
|
//}
|
SwitchClothes((uint)_itemInfo.id);
|
//ChangeEquip(_itemInfo.place, (uint)_itemInfo.id, m_SuitLevel);
|
break;
|
}
|
}
|
}
|
|
// 如果没有任何衣服, 则穿上默认装备
|
if (ClothesItemID == 0 || ClothesItemID == uint.MaxValue)
|
{
|
SwitchClothes(0);
|
}
|
|
if (m_PlayerInfo.itemDatas != null)
|
{
|
for (int i = 0; i < m_PlayerInfo.itemDatas.Length; ++i)
|
{
|
_itemInfo = m_PlayerInfo.itemDatas[i];
|
|
if (_itemInfo.place == (int)RoleEquipType.Weapon)
|
{
|
SwitchWeapon((uint)_itemInfo.id);
|
}
|
else if (_itemInfo.place == (int)RoleEquipType.Weapon2)
|
{
|
SwitchSecondary((uint)_itemInfo.id);
|
}
|
else if (_itemInfo.place == (int)RoleEquipType.Wing)
|
{
|
SwitchWing((uint)_itemInfo.id);
|
}
|
else if (_itemInfo.place == (int)RoleEquipType.Guard)
|
{
|
SwitchGuard((uint)_itemInfo.id);
|
}
|
else if (_itemInfo.place == (int)RoleEquipType.Mount)
|
{
|
ActorInfo.horseItemID = (uint)_itemInfo.id;
|
}
|
|
//m_SuitLevel = 0;
|
//if (_itemInfo.isSuit == 1)
|
//{
|
// m_SuitLevel = (byte)_itemInfo.suitLevel;
|
//}
|
|
//ChangeEquip(_itemInfo.place, (uint)_itemInfo.id, m_SuitLevel);
|
}
|
}
|
|
if (WeaponItemID == 0 || WeaponItemID == uint.MaxValue)
|
{
|
SwitchWeapon(0);
|
}
|
|
ActorInfo.LV = m_PlayerInfo.level;
|
ActorInfo.Job = m_PlayerInfo.job;
|
ActorInfo.face = m_PlayerInfo.face;
|
ActorInfo.facePic = m_PlayerInfo.facePic;
|
ActorInfo.PlayerName = m_PlayerInfo.name;
|
ActorInfo.Hp = m_PlayerInfo.hp;
|
ActorInfo.MaxHp = m_PlayerInfo.maxHp;
|
RequestName();
|
}
|
|
public sealed override void Destroy()
|
{
|
}
|
|
protected sealed override void OnUpdate()
|
{
|
base.OnUpdate();
|
|
UpdateAI();
|
}
|
|
public sealed override void OnHorse(byte upOrDown)
|
{
|
}
|
|
public sealed override void RefreshLifeBar(ulong value) { }
|
|
public sealed override void RequestName()
|
{
|
ReleaseName();
|
if (MovingState == E_MovingState.Ride)
|
{
|
m_HeadUpName = HeadUpName.RequireHeadUpName(HeadUpName.Pattern.Player, MP_Name1, 0, CameraController.Instance.CameraObject);
|
}
|
else
|
{
|
m_HeadUpName = HeadUpName.RequireHeadUpName(HeadUpName.Pattern.Player, MP_Name, 0, CameraController.Instance.CameraObject);
|
}
|
|
m_HeadUpName.SetPlayerInfo(new HeadUpName.PlayerInfo()
|
{
|
realm = ActorInfo.realm,
|
title = ActorInfo.titleID,
|
name = ActorInfo.PlayerName,
|
alliance = ActorInfo.familyName,
|
});
|
RefreshShediaoEffect(ActorInfo.titleID);
|
}
|
|
protected sealed override void OnPutonClothes(uint clothesItemID, GameObject clothed)
|
{
|
clothed.layer = LayerUtility.Player;
|
|
SkinnedMeshRenderer _renderer = clothed.GetComponentInChildren<SkinnedMeshRenderer>();
|
_renderer.gameObject.SetLayer(LayerUtility.Player, false);
|
}
|
|
protected sealed override void OnPutonSecondary(uint secondaryItemID, GameObject secondary)
|
{
|
Renderer _renderer = secondary.GetComponentInChildren<Renderer>();
|
if (_renderer)
|
{
|
_renderer.gameObject.SetLayer(LayerUtility.Player, false);
|
}
|
}
|
|
protected sealed override void OnPutonWeapon(uint weaponItemID, GameObject weapon)
|
{
|
Renderer _renderer = weapon.GetComponentInChildren<Renderer>();
|
_renderer.gameObject.SetLayer(LayerUtility.Player, false);
|
}
|
|
protected sealed override void OnPutonWing(uint wingItemID, GameObject wing)
|
{
|
SkinnedMeshRenderer _renderer = wing.GetComponentInChildren<SkinnedMeshRenderer>();
|
_renderer.gameObject.SetLayer(LayerUtility.Player, false);
|
}
|
|
protected sealed override void OnSwitchHorse(uint horseID, GameObject horse)
|
{
|
}
|
|
public sealed override bool CanAtked() { return false; }
|
|
private void UpdateAI()
|
{
|
if (SelectTarget == null
|
|| SelectTarget.ActorInfo.serverDie)
|
{
|
SelectTarget = GAMgr.Instance.GetGroupCloestTarget(Pos, E_ActorGroup.Enemy);
|
}
|
|
if (SelectTarget == null
|
|| SelectTarget.ActorInfo.serverDie)
|
{
|
return;
|
}
|
|
// 攻击间隔中
|
if (Time.time - m_LastUseSkillTime
|
< (1f / ActorInfo.atkSpeed) * .8f)
|
{
|
return;
|
}
|
|
Skill _skill = SkillMgr.CurCastSkill;
|
|
// 判断主角当前是否有技能尚未释放完毕
|
if (_skill != null)
|
{
|
if (!_skill.SkillCompelete)
|
{
|
return;
|
}
|
|
if (SkillMgr.DoingPrepareSkill)
|
{
|
return;
|
}
|
}
|
|
int _index = nextComAtkIndex;
|
if (_index < 0
|
|| _index > JobSetup.ComAtkIdList.Length - 1)
|
{
|
_index = 0;
|
}
|
|
int _comSkillID = GetCommonSkillID(_index);
|
_skill = SkillMgr.Get(_comSkillID);
|
|
if (_skill == null)
|
{
|
return;
|
}
|
|
// 判断技能范围, 不在可释放范围需要移动至目标
|
float _compareDist = _skill.skillInfo.config.AtkDist * .5f;
|
float _compareDistSqrt = _compareDist * _compareDist;
|
|
// 计算当前和目标的距离
|
float _currentDistSqrt = MathUtility.DistanceSqrtXZ(Pos, SelectTarget.Pos);
|
// 比较距离
|
if (_currentDistSqrt >= _compareDistSqrt)
|
{
|
// 移动至目标
|
MoveToTarget(SelectTarget, _compareDist);
|
|
return;
|
}
|
|
Vector3 _forward = MathUtility.ForwardXZ(SelectTarget.Pos, Pos);
|
destForward = Forward = _forward;
|
|
// 释放技能...
|
// 目前只有单个目标
|
switch (_index)
|
{
|
case 0:
|
Play(GAStaticDefine.State_Attack1Hash);
|
break;
|
case 1:
|
Play(GAStaticDefine.State_Attack2Hash);
|
break;
|
case 2:
|
Play(GAStaticDefine.State_Attack3Hash);
|
break;
|
case 3:
|
Play(GAStaticDefine.State_Attack4Hash);
|
break;
|
|
}
|
SkillMgr.CastSkill(ServerInstID, _skill.id);
|
|
ulong hurtValue = 0;
|
byte attackType = 0;
|
|
AttackHandler.CalculateDamage(this, SelectTarget as GActorFight,
|
_skill,
|
0,
|
ref hurtValue, ref attackType);
|
|
AttackHandler.HurtObjs _hurtObject = new AttackHandler.HurtObjs
|
{
|
AttackType = attackType,
|
clientInstID = SelectTarget.ClientInstID,
|
CurHP = SelectTarget.ActorInfo.Hp,
|
HurtHP = hurtValue,
|
RealHurtHP = hurtValue,
|
ObjID = SelectTarget.ServerInstID,
|
ObjType = (byte)SelectTarget.ActorType
|
};
|
|
_skill.hurtClientList.Add(_hurtObject);
|
|
m_LastUseSkillTime = Time.time;
|
}
|
|
public override void SyncSuitEffect(bool onOrOff = true)
|
{
|
}
|
}
|