/******************************************************************************** * 文件名: Obj_OtherPlayer.cs * 全路径: \Script\Obj\Obj_OtherPlayer.cs * 创建人: 李嘉 * 创建时间:2013-10-25 * * 功能说明:游戏其他玩家Obj逻辑类 * 修改记录: *********************************************************************************/ using Games.ChatHistory; using Games.Events; using Games.GlobeDefine; using Games.Scene; using GCGame; using GCGame.Table; using Module.Log; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; namespace Games.LogicObj { public class Obj_Player_Init_Data : Obj_Character_Init_Data { public string ServerName; //跨服场景中头顶名字显示所在服务器 public string m_strTitleName; //称号名 public int m_CurTitleID; //称号ID public int m_AdvanceMountId; // 坐骑ID public int m_MountState; //双人坐骑 public ulong m_LinkID; //双人坐骑 public int m_MagicID; //法宝ID public int m_nOtherVipCost; //vip info public UInt64 m_GuildGuid; //帮会GUID public int m_GuildJob; //帮会职位 public int m_nOtherCombatValue; //战力 public bool m_bIsWildEnemyForMainPlayer; //是否与主角敌对 public int m_nPaoShangState; //跑商状态 public int m_nLightSkillLevel; //轻功等级 public int _TeamLeader; public int _CaptainWelfareLevel; //队长福利等级 public bool _IsInMeditate; //是否在打坐 public int m_hideMask; // 部件隐藏掩码 public bool m_IsShowWing;//是否显示翅膀 public ChildData.ChildInitData m_CurCarryChildData; //当前携带的孩子数据 public Obj_Player_Init_Data() { CleanUp(); } public override void CleanUp() { base.CleanUp(); ServerName = string.Empty; m_strTitleName = string.Empty; m_CurTitleID = GlobeVar.INVALID_ID; m_AdvanceMountId = -1; m_MagicID = -1; m_nOtherVipCost = -1; m_GuildGuid = GlobeVar.INVALID_GUID; m_GuildJob = (int)GameDefine_Globe.GUILD_JOB.INVALID; m_nOtherCombatValue = 0; m_bIsWildEnemyForMainPlayer = false; m_nPaoShangState = -1; m_nLightSkillLevel = -1; _CaptainWelfareLevel = -1; m_CurCarryChildData = new ChildData.ChildInitData(); //LinkId = 0; //name = ""; //masterName = ""; //model = -1; //weapon = -1; } } public partial class Obj_OtherPlayer : Obj_Character { /// /// Obj包含的身份部件类型 /// public override int[] bodyParts { get { return new[] { ModelPart.body, ModelPart.weaponLeft, ModelPart.weaponRight, ModelPart.wing, ModelPart.mount }; } } public override UIPathData HeadUiPath { get { return Obj_PlayerHeadUI.pathData; } } public Obj_OtherPlayer() { m_ObjType = GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER; SetObjPoolLevel(ObjPoolLevel.otherPlayer); } // 暂时使用这个后期赋值的接口处理,似乎没有找到其他安全的位置 protected void SetObjPoolLevel(ObjPoolLevel objPoolLevel) { var models = GetPlayerModels(); for (var i = 0; i < models.Length; i++) models[i].poolLevel = objPoolLevel; } protected ObjModelRecord[] GetPlayerModels() { return new [] { ModelNode, mountModel, weaponLeft, weaponRight, wingObj, effectAura, weaponEffectLeft, weaponEffectRight }; } public Obj_PlayerHeadUI m_headUIObj { get; private set; } private int m_GuildJob = (int)GameDefine_Globe.GUILD_JOB.INVALID; public virtual int GuildJob { get { return m_GuildJob; } set { m_GuildJob = value; } } private UInt64 m_GuildGUID = GlobeVar.INVALID_GUID; public virtual System.UInt64 GuildGUID { get { return m_GuildGUID; } set { m_GuildGUID = value; } } private int m_fellowID; public int FellowID { get { return m_fellowID; } set { m_fellowID = value; } } public ChildData.ChildInitData m_CurCarryChildData; protected string m_ServerName = ""; private string m_PaoShangTitle = ""; private bool m_bIsWildEnemyForMainPlayer = false; public bool IsWildEnemyForMainPlayer { get { return m_bIsWildEnemyForMainPlayer; } set { m_bIsWildEnemyForMainPlayer = value; } } public bool _IsTeamLeader = false; public bool _IsInMeditate { get; set; } public override bool Init(ObjParent_Init_Data initData1) { speedAdaption = true; var result = base.Init(initData1); if (result == false) return false; Obj_Player_Init_Data initData = initData1 as Obj_Player_Init_Data; if (initData == null) return false; m_ServerName = initData.ServerName; modelHideMask = initData.m_hideMask; PkModle = initData.m_PkModel; PkValue = initData.m_PkValue; VipCost = initData.m_nOtherVipCost; GuildGUID = initData.m_GuildGuid; GuildJob = initData.m_GuildJob; OtherCombatValue = initData.m_nOtherCombatValue; IsWildEnemyForMainPlayer = initData.m_bIsWildEnemyForMainPlayer; _IsTeamLeader = initData._TeamLeader > 0; m_strTitleInvestitive = initData.m_strTitleName; m_CurTitleID = initData.m_CurTitleID; IsInMainPlayerPKList = initData.m_isInMainPlayerPKList; AdcaneMountId = initData.m_AdvanceMountId; DoubleRidingState = initData.m_MountState; _LinkID = initData.m_LinkID; IsShowWing = initData.m_IsShowWing; #region childData m_CurCarryChildData = new ChildData.ChildInitData() { childLevel = initData.m_CurCarryChildData.childLevel, childName = initData.m_CurCarryChildData.childName, childFashionId = initData.m_CurCarryChildData.childFashionId, childGender = initData.m_CurCarryChildData.childGender, childGuid = initData.m_CurCarryChildData.childGuid }; #endregion OrnamentFootPrintID = initData.m_OrnamentFootPrintId; BaseAttr.HP = initData._InitCurHP; BaseAttr.MaxHP = initData._InitMaxHP; BaseAttr.CaptainWelfareLevel = initData._CaptainWelfareLevel; m_ObjTransform.localRotation = Utils.DirServerToClient(initData.m_fDir); m_nPaoShangState = initData.m_nPaoShangState; _IsInMeditate = initData._IsInMeditate; OptChangPKModle(); CreateNameBoard(); InitBindFromData(initData); InitImpactInfo(initData); CanLogic = true; //初始化寻路代理 InitNavAgent(); CreateModel(ForceUseModel == null ? ModelID : ForceUseModel.modelData.Id); CreateMagicModel(initData.m_MagicID); CreateChildModel(new Child_Init_Data() { childFashionId = initData.m_CurCarryChildData.childFashionId, childName = initData.m_CurCarryChildData.childName, childLevel = initData.m_CurCarryChildData.childLevel, childGender = initData.m_CurCarryChildData.childGender, childGuid = initData.m_CurCarryChildData.childGuid, bindPlayerGuid = BaseAttr.Guid, }, transform.position); ObjManager.Instance.AddPoolObj(this); Hashtable tab = new Hashtable(); tab["profession"] = initData.m_nProfession; tab["type"] = Obj_Fellow.FellowDialogType.OtherPlayerCheck; EventDispatcher.Instance.SendMessage(Games.Events.EventId.FellowDialogEvent, tab); EventDispatcher.Instance.Dispatch(Events.EventId.FellowOwerEvent); return true; } // 重载模型回调 protected override void CreateModelOver(Hashtable table) { base.CreateModelOver(table); //if (m_nPaoShangState != -1) // UpdatePaoShangStateEffect(m_nPaoShangState); RealoadPlayerWeaponVisual(); if (ForceUseModel == null || ForceUseModel.useModel) ReloadPlayerEffect(); RealoadWingModel(); if (SkillCore != null) SkillCore.UserCacheSkill(); RideOrUnMount(AdcaneMountId); ReloadOrnamentFootPrint(AdcaneMountId > 0); if (_IsInMeditate) EnterMeditateState(AdcaneMountId); IsNeedBindWC(); } public void IsNeedBindWC() { if (GameManager.gameManager.PlayerDataPool._WCBindObjDic.ContainsKey(GUID)) { var info = GameManager.gameManager.PlayerDataPool._WCBindObjDic[GUID]; BindCloneModelToWC(info._BindParent, info._AnimationId, info._ScaleVal); } } //创建孩子 protected virtual void CreateChildModel(Child_Init_Data _ChildData, Vector3 pos) { Child_Init_Data childData = new Child_Init_Data(); childData.childFashionId = _ChildData.childFashionId; childData.childName = _ChildData.childName; childData.childLevel = _ChildData.childLevel; childData.childGender = _ChildData.childGender; childData.childGuid = _ChildData.childGuid; childData.bindPlayerGuid = GUID; childData.m_fX = pos.x; childData.m_fZ = pos.z; childData.m_MoveSpeed = MoveSpeed; childData.bindPlayerGuid = GUID; childData.m_StrName = "Child"; var childObjParent = Singleton.Instance.NewCharacterObj(GameDefine_Globe.OBJ_TYPE.OBJ_CHILD, childData); if(m_CurCarryChild != null) { m_CurCarryChild.DestroyObj(); } m_CurCarryChild = childObjParent.GetComponent(); } public virtual void ReloadChildModel(Vector3 pos, ChildData.ChildInitData initData) { Child_Init_Data childData = new Child_Init_Data(); childData.childFashionId = initData.childFashionId; childData.childName = initData.childName; childData.childLevel = initData.childLevel; childData.childGender = initData.childGender; childData.childGuid = initData.childGuid; childData.bindPlayerGuid = GUID; childData.m_fX = pos.x; childData.m_fZ = pos.z; childData.m_MoveSpeed = MoveSpeed; if (initData.childLevel == -1 || initData.childGuid == -1) { if (m_CurCarryChild != null) { m_CurCarryChild.DestroyObj(); m_CurCarryChild = null; } return; } else { if (m_CurCarryChild != null) { m_CurCarryChild.ReloadChildModel(childData); } else { var childObjParent = Singleton.Instance.NewCharacterObj(GameDefine_Globe.OBJ_TYPE.OBJ_CHILD, childData); m_CurCarryChild = childObjParent.GetComponent(); } } } protected override void Update() { //UpdateQingGong(); //由于轻功可能改变玩家坐标,所以放在UpdateTargetMove之后进行 //UpdateLightSkill(); UpdateMagic(); base.Update(); } public List> GetAssetReference() { var result = new List>(); GetAssetReference(result); return result; } public void GetAssetReference(List> list) { var models = GetPlayerModels(); for (var i = 0; i < models.Length; i++) { var model = models[i]; if (!string.IsNullOrEmpty(model.targetBundle) && !string.IsNullOrEmpty(model.targetModel)) { var add = true; for (var j = 0; j < list.Count; j++) if (list[j].first == model.targetBundle && list[j].second == model.targetModel) { add = false; break; } if (add) list.Add(new MyTuple(model.targetBundle, model.targetModel)); } } } //改成了不管有没有跑商任务,都显示帮会名字 public void ChangePaoShangState(string title) { if (m_headUIObj != null) { m_headUIObj.UpdatePaoShangIcon(title); } m_PaoShangTitle = title; } public void UpdateTeamInfo(bool state) { if(m_headUIObj!=null) m_headUIObj.UpdateCaptainIcon(state); } public override void InitNameBoard(Obj_HeadUI headUiItem) { base.InitNameBoard(headUiItem); m_headUIObj = (Obj_PlayerHeadUI)headUiItem; ShowTitleInvestitive(); UpdateVipInfo(); m_headUIObj.ShowOriginalHeadInfo(true); m_headUIObj.UpdateCaptainIcon(true); m_headUIObj.UpdateOtherPkModel(this); m_headUIObj.UpdatePaoShangIcon(m_PaoShangTitle); SetSpricelName(); } public void SetSpricelName() { if (m_headUIObj == null) return; string name = BaseAttr.RoleName; if (string.IsNullOrEmpty(m_ServerName) == false) { var fuben = TableManager.GetFubenByID(GlobalData.GetCurSceenFubenId(), 0); if(fuben.IsShowCamp == 1) { if (BaseAttr.Force == 6) name = StrDictionary.GetClientDictionaryString("#{5820}") + name; if (BaseAttr.Force == 7) name = StrDictionary.GetClientDictionaryString("#{5821}") + name; if (BaseAttr.Force == 27) name = StrDictionary.GetClientDictionaryString("#{5822}") + name; } if(fuben != null && fuben.CrossSrvType == 1) { name = m_ServerName + name; } m_headUIObj.ResetNameBoradPos(true); } else { m_headUIObj.ResetNameBoradPos(false); } m_headUIObj.SetName(name); int Force = BaseAttr.Force; if(ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER) { Force = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Force; } int WarForce = BaseAttr.WarForce; if (ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER) { WarForce = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.WarForce; } Color nameColor = GCGame.Utils.GetColorByString(StrDictionary.GetClientDictionaryString("#{5554}")); //暂时按照阵营来确定是不是在战场 if (WarForce != 0) { if (GameManager.gameManager.RunningScene == (int)GameDefine_Globe.SCENE_DEFINE.SCENE_GUANNING) { if (Force == 6) { m_headUIObj.SetName(StrDictionary.GetClientDictionaryString("#{9210}")); } else if (Force == 7) { m_headUIObj.SetName(StrDictionary.GetClientDictionaryString("#{9211}")); } } if (Singleton.Instance.MainPlayer!=null && (WarForce != GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.WarForce || Force != GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Force)) { nameColor = GCGame.Utils.GetColorByString(StrDictionary.GetClientDictionaryString("#{5556}")); //m_headUIObj.HideHp(true); } else { //m_headUIObj.HideHp(ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER || GameManager.gameManager.PlayerDataPool.IsTeamMem(GUID)); } m_headUIObj.SetNameColor(nameColor); } else { if (ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER && GameManager.gameManager.RunningScene == (int)GameDefine_Globe.SCENE_DEFINE.SCENE_GUILD && SceneData.sceneGuildGuid != GameManager.gameManager.PlayerDataPool.GuildInfo.GuildGuid && m_GuildGUID != GlobeVar.INVALID_GUID && m_GuildGUID != GameManager.gameManager.PlayerDataPool.GuildInfo.GuildGuid && Reputation.IsEnemy(this)==false) { m_headUIObj.SetNameColor(GCGame.Utils.GetColorByString(StrDictionary.GetClientDictionaryString("#{5556}"))); } else { m_headUIObj.SetNameColor(GetNameBoardColor()); } //m_headUIObj.HideHp(ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER || GameManager.gameManager.PlayerDataPool.IsTeamMem(GUID)); } m_headUIObj.HpSliderShowLogic(); m_headUIObj.HideChatBubble(false); OptHPChange(); ChangeFellowNameColor(); } //public virtual void UpdateCombatValue() //{ // int nNeedEffect = -1; // if (m_nOtherCombatValue >= GlobeVar.COMBAT_LEVEL_5) // { // nNeedEffect = GlobeVar.COMBAT_EFFECT_5; // } // else if (m_nOtherCombatValue >= GlobeVar.COMBAT_LEVEL_4) // { // nNeedEffect = GlobeVar.COMBAT_EFFECT_4; // } // else if (m_nOtherCombatValue >= GlobeVar.COMBAT_LEVEL_3) // { // nNeedEffect = GlobeVar.COMBAT_EFFECT_3; // } // else if (m_nOtherCombatValue >= GlobeVar.COMBAT_LEVEL_2) // { // nNeedEffect = GlobeVar.COMBAT_EFFECT_2; // } // else if (m_nOtherCombatValue >= GlobeVar.COMBAT_LEVEL_1) // { // nNeedEffect = GlobeVar.COMBAT_EFFECT_1; // } //if (nNeedEffect > 0) //{ // Tab_Effect EffectInfo = TableManager.GetEffectByID(nNeedEffect, 0); // if (EffectInfo != null && IsHaveBindPoint(EffectInfo.ParentName) && GetEffectCountById(nNeedEffect) < 1) // { // StopEffect(GlobeVar.COMBAT_EFFECT_5); // StopEffect(GlobeVar.COMBAT_EFFECT_4); // StopEffect(GlobeVar.COMBAT_EFFECT_3); // StopEffect(GlobeVar.COMBAT_EFFECT_2); // StopEffect(GlobeVar.COMBAT_EFFECT_1); // PlayEffect(nNeedEffect); // } //} //else //{ // StopEffect(GlobeVar.COMBAT_EFFECT_5); // StopEffect(GlobeVar.COMBAT_EFFECT_4); // StopEffect(GlobeVar.COMBAT_EFFECT_3); // StopEffect(GlobeVar.COMBAT_EFFECT_2); // StopEffect(GlobeVar.COMBAT_EFFECT_1); //} //} public virtual void UpdateVipInfo() { if (null != m_headUIObj) { m_headUIObj.UpdateVipInfo(m_nVipCost); } } private string m_strTitleInvestitive; public string StrTitleInvestitive { get { return m_strTitleInvestitive; } set { m_strTitleInvestitive = value; } } private int m_CurTitleID; public int CurTitleID { get { return m_CurTitleID; } set { m_CurTitleID = value; } } public void ShowTitleInvestitive() { if (null != m_headUIObj && m_ObjType != GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER) { m_headUIObj.ShowTitleInvestitiveByTable(m_CurTitleID, m_strTitleInvestitive); } } //VIP private int m_nVipCost = -1; public virtual int VipCost { get { return m_nVipCost; } set { m_nVipCost = value; UpdateVipInfo(); } } private int m_nOtherCombatValue = -1; public virtual int OtherCombatValue { get { return m_nOtherCombatValue; } set { m_nOtherCombatValue = value; } } //PK模式 private int m_nPkModle = -1; public virtual int PkModle { get { return m_nPkModle; } set { m_nPkModle = value; } } private int m_nPkValue = -1; public virtual int PkValue { get { return m_nPkValue; } set { m_nPkValue = value; } } //是否在主角的反击列表中 public bool IsInMainPlayerPKList { get; set; } public Color GetOutLineColor() { if (Reputation.IsEnemy(this)) return Utils.GetColorByString(StrDictionary.GetClientDictionaryString("#{5559}")); int blueMin = 0; int blueMax = 0; int purpleMin = 1; int purpleMax = 59; int redMin = 60; Tab_PKDetailInfo pkdata = TableManager.GetPKDetailInfoByID(1, 0); if (pkdata != null) { blueMin = pkdata.BluePKValueMin; blueMax = pkdata.BluePKValueMax; purpleMin = pkdata.PurplePKValueMin; purpleMax = pkdata.PurplePKValueMax; redMin = pkdata.RedPKValueMin; } //新规则按PK值来定 string strColor = StrDictionary.GetClientDictionaryString("#{5557}"); if (BaseAttr.PKValue >= blueMin && BaseAttr.PKValue <= blueMax) { strColor = StrDictionary.GetClientDictionaryString("#{5557}"); } if (BaseAttr.PKValue >= purpleMin && BaseAttr.PKValue <= purpleMax) { strColor = StrDictionary.GetClientDictionaryString("#{5558}"); } if (BaseAttr.PKValue >= redMin) { strColor = StrDictionary.GetClientDictionaryString("#{5559}"); } return GCGame.Utils.GetColorByString(strColor); } public Color GetColorByPK() { int blueMin = 0; int blueMax = 0; int purpleMin = 1; int purpleMax = 59; int redMin = 60; Tab_PKDetailInfo pkdata = TableManager.GetPKDetailInfoByID(1, 0); if (pkdata != null) { blueMin = pkdata.BluePKValueMin; blueMax = pkdata.BluePKValueMax; purpleMin = pkdata.PurplePKValueMin; purpleMax = pkdata.PurplePKValueMax; redMin = pkdata.RedPKValueMin; } //新规则按PK值来定 string strColor = StrDictionary.GetClientDictionaryString("#{5554}"); if (BaseAttr.PKValue >= blueMin && BaseAttr.PKValue <= blueMax) { strColor = StrDictionary.GetClientDictionaryString("#{5554}"); if (ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER) strColor = StrDictionary.GetClientDictionaryString("#{5557}"); } if (BaseAttr.PKValue >= purpleMin && BaseAttr.PKValue <= purpleMax) { strColor = StrDictionary.GetClientDictionaryString("#{5555}"); } if (BaseAttr.PKValue >= redMin) { strColor = StrDictionary.GetClientDictionaryString("#{5556}"); } return GCGame.Utils.GetColorByString(strColor); } public virtual Color GetNameBoardColor() { return Reputation.IsEnemy(this) ? Utils.GetColorByString(StrDictionary.GetClientDictionaryString("#{5556}")) : GetColorByPK(); } public virtual void OptChangPKModle() { if (null != m_headUIObj) m_headUIObj.UpdateOtherPkModel(this); ChangeFellowNameColor(); } public void ChangeTeamLeaderFlag(int teamLeaderFlag) { _IsTeamLeader = teamLeaderFlag > 0; if (m_headUIObj != null) { m_headUIObj.UpdateCaptainIcon(true); } } public override void UpdateAttrBroadcastPackt(GC_BROADCAST_ATTR packet) { base.UpdateAttrBroadcastPackt(packet); } public void SetNameBoardColor() { if (m_headUIObj != null) { m_headUIObj.SetNameColor(GetNameBoardColor()); } } public override void OptNameChange()//名字变化后的操作 { if (m_headUIObj != null) SetSpricelName(); //m_headUIObj.SetName(BaseAttr.RoleName); } public override void OptHPChange() //血量变化后的操作 { float rate = 1; if (BaseAttr.MaxHP > 0) { rate = BaseAttr.HP / (float)BaseAttr.MaxHP; } if (m_headUIObj != null) { m_headUIObj.SetNewHp(rate); } } private void ChangeFellowNameColor() { var ObjFellow = Singleton.Instance.FindObjInScene(FellowID) as Obj_Fellow; if (null != ObjFellow) { ObjFellow.ChangeNameColor(Reputation.IsEnemy(this)); } } public override void OptPKValueChange() { base.OptPKValueChange(); SetSpricelName(); } public override void OptWarForceChange() { base.OptWarForceChange(); SetSpricelName(); if (Singleton.Instance.MainPlayer != null) Singleton.Instance.MainPlayer.SetSpricelName(); } public override void OptForceChange() { base.OptForceChange(); SetSpricelName(); if (Singleton.Instance.MainPlayer != null) Singleton.Instance.MainPlayer.SetSpricelName(); } public override bool OnCorpse() { ChangeCorpseCapsule(); return base.OnCorpse(); } //Obj死亡时候调用 public override bool OnDie() { var result = base.OnDie(); if (result) { if (SceneLogic.CameraController != null && SceneLogic.CameraController.IsCurrFocus(this)) EventDispatcher.Instance.SendMessage(Events.EventId.MainCameraFocusValid); ChangeCorpseCapsule(); } return result; } /// /// 胶囊像尸体一样横放 /// private void ChangeCorpseCapsule() { // 特殊处理 - 非主角的其他玩家死亡后,胶囊碰撞体像尸体一样横放 if (ObjType == GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER) { var capsulaCollider = GetComponent(); if (capsulaCollider == null) LogModule.WarningLog(string.Format("角色{0}没有胶囊碰撞体", gameObject.name)); else { // 居然不是枚举 capsulaCollider.direction = 2; capsulaCollider.center = Vector3.back * capsulaCollider.height * 0.5f; } } } public override bool OnRelife(bool isMotion = false) { base.OnRelife(isMotion); return true; } // 放技能时换装需要等待 private bool m_UpdateModelWait = false; private bool m_UpdateWeaponWait = false; private bool m_UpdateWeaponGemWait = false; private bool m_UpdateWingModelWait = false; public void UpdateVisualAfterSkill() { if (m_UpdateModelWait) { ReloadPlayerModelVisual(); } if (m_UpdateWeaponWait) { RealoadPlayerWeaponVisual(); } if (m_UpdateWeaponGemWait) { ReloadPlayerEffect(); } if (m_UpdateWingModelWait) { RealoadWingModel(); } m_UpdateModelWait = false; m_UpdateWeaponWait = false; m_UpdateWeaponGemWait = false; m_UpdateWingModelWait = false; } //玩家轻功部分处理 private bool m_bQingGongState = false; public bool QingGongState { get { return m_bQingGongState; } set { m_bQingGongState = value; } } private float m_DistanceValue = 0f; private Vector3 m_QingGongSrc = Vector3.zero; private Vector3 m_QingGongDst = Vector3.zero; private int m_nQingGongType = GlobeVar.INVALID_ID; private int m_nQingGongPointID = GlobeVar.INVALID_ID; public int QingGongPointID { get { return m_nQingGongPointID; } } private float m_fQingGongMaxHeight = 0; private float m_fQingGongTime = 0; private float m_fQingGongBeginTime = 0; //public virtual void BeginQingGong(GameEvent _event) //{ // if (_event.EventID != GameDefine_Globe.EVENT_DEFINE.EVENT_QINGGONG) // { // return; // } // // //得到目标点坐标 // Vector3 dstPos = new Vector3(_event.GetFloatParam(0), _event.GetFloatParam(1), _event.GetFloatParam(2)); // //dstPos.y = Terrain.activeTerrain.SampleHeight(dstPos); // // if (m_ObjTransform == null) // { // m_ObjTransform = transform; // } // // m_bQingGongState = true; // m_QingGongDst = dstPos; // m_QingGongSrc = m_ObjTransform.position; // // //忽略阻挡前进 // if (null != NavAgent && NavAgent.enabled) // { // NavAgent.enabled = false; // } // // m_fMoveSpeed = _event.GetFloatParam(3); // m_nQingGongType = _event.GetIntParam(0); // m_fQingGongMaxHeight = _event.GetFloatParam(4); // // m_nQingGongPointID = _event.GetIntParam(1); // // //记录朝向,注意抛物线轨迹由UpdateQingGong进行位移操作,不使用系统MoveTo // FaceTo(m_QingGongDst); // // //根据不同类型模拟线路和调整玩家角度 // if (m_nQingGongType == (int)GameDefine_Globe.QINGGONG_TRAIL_TYPE.PARABOLA) // { // //如果是抛物线移动 // CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_JUMP; // // //根据起始点和目标点计算本次轻功运动时间 // float fTreckDistance = Vector3.Distance(m_QingGongSrc, m_QingGongDst); // if (m_fMoveSpeed > 0) // { // m_fQingGongTime = fTreckDistance / m_fMoveSpeed; // } // // //本次允许最大浮动值 // m_DistanceValue = (fTreckDistance + Mathf.Abs(m_fQingGongMaxHeight)) * 1.5f; // // //记录轻功开始时间 // m_fQingGongBeginTime = Time.time; // } // else if (m_nQingGongType == (int)GameDefine_Globe.QINGGONG_TRAIL_TYPE.TURN_LEFT) // { // //如果是线性移动 // CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_FASTRUN_LEFT; // //直线移动,使用底层MoveTo即可 // MoveAsMainPlayer(m_QingGongDst); // } // else if (m_nQingGongType == (int)GameDefine_Globe.QINGGONG_TRAIL_TYPE.TURN_RIGHT) // { // //如果是线性移动 // CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_FASTRUN_RIGHT; // //直线移动,使用底层MoveTo即可 // MoveAsMainPlayer(m_QingGongDst); // } // // //播放轻功特效 // if (null != ObjEffectLogic) // { // PlayEffect(GlobeVar.QINGGONG_EFFECT); // } //} // //public virtual void EndQingGong() //{ // StopMove(MoveState.JumpDelay); // m_bQingGongState = false; // // //恢复数据 // if (NavAgent) // { // NavAgent.enabled = true; // } // // m_fMoveSpeed = BaseAttr.MoveSpeed; // // //重置参数 // m_fQingGongMaxHeight = 0; // m_fQingGongTime = 0; // m_fQingGongBeginTime = 0; // // m_DistanceValue = 0f; // m_QingGongSrc = Vector3.zero; // m_QingGongDst = Vector3.zero; //} // //public virtual void UpdateQingGong() //{ // if (false == m_bQingGongState) // { // return; // } // // //计算从轻功开始到结束的流逝时间 // float fElapseTime = Time.time - m_fQingGongBeginTime; // // //到达目的地,轻功结束 // if (Vector3.Distance(m_ObjTransform.position, m_QingGongDst) < 0.4f // || fElapseTime > m_fQingGongTime * 2) //添加时间限制。如果时间超出正常时间2倍后,结束轻功 // { // m_ObjTransform.position = m_QingGongDst; // EndQingGong(); // return; // } // // //如果是抛物线轨迹,根据最大高度进行抛物线轨迹更新 // if (m_nQingGongType == (int)GameDefine_Globe.QINGGONG_TRAIL_TYPE.PARABOLA) // { // //更新运动轨迹 // Vector3 fMoveDirection = (m_QingGongDst - m_QingGongSrc).normalized; // // //当前点 // Vector3 curPos = m_QingGongSrc + fMoveDirection * m_fMoveSpeed * fElapseTime; // // if (m_fQingGongMaxHeight > 0 && m_fQingGongTime > 0) // { // //获得当前时间在轻功总行程中的路径比例 // float fRate = fElapseTime / m_fQingGongTime; // // float fHeightRefix = 0.0f; // //抛物线分前半段和后半段,分别处于上升和下降 // if (fRate < 0.5f) // { // fHeightRefix = m_fQingGongMaxHeight * (fRate / 0.5f); // } // else // { // fHeightRefix = m_fQingGongMaxHeight * ((1 - fRate) / 0.5f); // } // // //修正MainPlayer的高度 // //Vector3 pos = transform.position; // curPos.y = curPos.y + fHeightRefix; // // //对位置进行验证。如果发现位置计算失败,直接到目的位置,结束本次轻功 // float difValue = Vector3.Distance(m_QingGongSrc, curPos); // if (difValue > m_DistanceValue) // { // m_ObjTransform.position = m_QingGongDst; // EndQingGong(); // return; // } // // m_ObjTransform.position = curPos; // } // else // { // //数据出错 // m_ObjTransform.position = m_QingGongDst; // EndQingGong(); // } // } //} public override void ShowChatBubble(ChatHistoryItem history) { if (null != m_headUIObj) { m_headUIObj.ShowChatBubble(history); } } public override void SetVisible(bool bVisible) { base.SetVisible(bVisible); OnSwithObjAnimState(CurObjAnimState); Obj_Character curFellow = Singleton.Instance.FindObjInScene(m_fellowID) as Obj_Character; if (null == curFellow) { return; } curFellow.SetVisible(bVisible); } //跑商 private int m_nPaoShangState = -1; public int PaoShangState { get { return m_nPaoShangState; } set { m_nPaoShangState = value; } } //public void UpdatePaoShangStateEffect(int nState) //{ // //名字图标 // //if (m_headUIObj) // //{ // // m_headUIObj.UpdatePaoShangIcon(nState); // //} // //特效 // switch (nState) // { // case (int)GC_BROADCASTPSSTATE.PSSTATE.REMOVE: // StopEffect(238); // StopEffect(239); // break; // case (int)GC_BROADCASTPSSTATE.PSSTATE.CANROB: // StopEffect(239); // PlayEffect(238); // break; // case (int)GC_BROADCASTPSSTATE.PSSTATE.NOTCANROB: // StopEffect(238); // PlayEffect(239); // break; // } //} // #region Jump功能 // private bool _jumpState; // private float _jumpTimeStart = 1.0f; // private float _jumpTime1; // private float _jumpTime2; // private float _jumpTime3; // private string _jumpName1; // private string _jumpName2; // private string _jumpName3; // private int _playingJumpAnim; // //protected void UpdateJumpState() //{ // if (NavAgent != null && NavAgent.isActiveAndEnabled) // { // if (NavAgent.isOnOffMeshLink && !_jumpState) // { // if (!SkillAllowMove) // return; // if (AnimLogic.AnimationControl == null) // return; // //NavAgent.speed = NavAgent.currentOffMeshLinkData.offMeshLink.costOverride; // _jumpState = true; // _jumpTimeStart = Time.time; // if (NavAgent.currentOffMeshLinkData.offMeshLink.costOverride <= 1) // { // var animTab = // TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump01, 0); // _jumpName1 = animTab.AnimName; // animTab = TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump01_Loop, // 0); // _jumpName2 = animTab.AnimName; // animTab = TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump01_End, // 0); // _jumpName3 = animTab.AnimName; // } // else if (NavAgent.currentOffMeshLinkData.offMeshLink.costOverride <= 2) // { // var animTab = // TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump02, 0); // _jumpName1 = animTab.AnimName; // animTab = TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump02_Loop, // 0); // _jumpName2 = animTab.AnimName; // animTab = TableManager.GetAnimationByID((int)CharacterDefine.CharacterAnimId.Jump02_End, // 0); // _jumpName3 = animTab.AnimName; // } // var anims = AnimLogic.AnimationControl.runtimeAnimatorController.animationClips; // foreach (var anim in anims) // if (anim.name == _jumpName1) // _jumpTime1 = anim.length; // else if (anim.name == _jumpName2) // _jumpTime2 = anim.length; // else if (anim.name == _jumpName3) // _jumpTime3 = anim.length; // _playingJumpAnim = 0; // CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_JUMP; // NavAgent.transform.LookAt(new Vector3(NavAgent.currentOffMeshLinkData.endPos.x, // NavAgent.transform.position.y, NavAgent.currentOffMeshLinkData.endPos.z)); // //AnimLogic.m_animator.Play(_JumpName1); // } // if (_jumpState) // { // var newPos = Vector3.zero; // var deltaTime = Time.time - _jumpTimeStart; // if (deltaTime < _jumpTime1) // { // newPos = NavAgent.currentOffMeshLinkData.startPos; // //NavAgent.enabled = false; // NavAgent.transform.position = newPos; // NavAgent.transform.LookAt(new Vector3(NavAgent.currentOffMeshLinkData.endPos.x, // NavAgent.transform.position.y, NavAgent.currentOffMeshLinkData.endPos.z)); // if (_playingJumpAnim != 1) // { // AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Jump01); // _playingJumpAnim = 1; // EnableMovingRotation(false); // } // } // else if (deltaTime < _jumpTime1 + _jumpTime2) // { // var moveDelta = (deltaTime - _jumpTime1) / _jumpTime2; // newPos = Vector3.Lerp(NavAgent.currentOffMeshLinkData.startPos, // NavAgent.currentOffMeshLinkData.endPos, moveDelta); // newPos.y += 2f * Mathf.Sin(Mathf.PI * moveDelta); // NavAgent.transform.position = newPos; // // if (_playingJumpAnim != 2) // { // AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Jump01_Loop); // _playingJumpAnim = 2; // } // NavAgent.transform.LookAt(new Vector3(NavAgent.currentOffMeshLinkData.endPos.x, // NavAgent.transform.position.y, NavAgent.currentOffMeshLinkData.endPos.z)); // } // else if (deltaTime < _jumpTime1 + _jumpTime2 + _jumpTime3) // { // newPos = NavAgent.currentOffMeshLinkData.endPos; // NavAgent.transform.position = newPos; // if (_playingJumpAnim != 3) // { // AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Jump01_End); // _playingJumpAnim = 3; // } // } // else // { // _playingJumpAnim = 0; // NavAgent.CompleteOffMeshLink(); // NavAgent.Resume(); // CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_WALK; // _jumpState = false; // EnableMovingRotation(true); // } // } // //else // //{ // // if (_JumpState) // // { // // NavAgent.speed = BaseAttr.MoveSpeed; // // _JumpState = false; // // CurObjAnimState = GameDefine_Globe.OBJ_ANIMSTATE.STATE_WALK; // // } // //} // } //} //#endregion } }