using System; using System.Collections; using System.Collections.Generic; using System.Text; using UnityEngine; using Thousandto.Core.Asset; using Thousandto.Core.Framework; using Thousandto.Code.Global; using Thousandto.Core.Base; using Thousandto.Code.Center; using Thousandto.Cfg.Data; using Thousandto.Plugins.Common; using Thousandto.Core.Support; namespace Thousandto.Code.Logic { //玩家基类 public class Player : Character { #region//变量信息 private FSkinModel _roleSkin = null; //玩家属性模块 protected PlayerPropetry _propMoudlePlayer = null; //是否变身 protected bool _isChangeModel = false; //变身模型id protected int _changeModeID = 0; //变身配置ID protected int _changeCfgID = 0; //变身配置 protected DeclareChangeModel _changeModelCfg = null; //受击闪烁器 private HitBlinker _blinker = null; //外观信息 protected IPlayerVisualInfo _visualInfo = null; //伴侣名字 protected string _spouseName = string.Empty; //切换武器挂节点倒计时 private float _brightStateTimer = 0f; //切换武器挂节点总时间 private float _brightMaxTime = 38f * Skill.OneFrameTime; //武器状态 protected PlayerBrightWeaponState _brightState = PlayerBrightWeaponState.Receive; //收武器的缩放 protected Vector3 _receiveWeaponScale = Vector3.one; //亮武器的缩放 protected Vector3 _brightWeaponScale = Vector3.one; //当前选择的目标Id protected UInt64 _curSelectedTargetId = 0; //当前选择是自动还是手动选择的 private bool _curSelectTargetIsAuto = true; //上次播放灵力特效时间 private float _frontPlayLingLiTime = 0f; //是否正在传道 private bool _isChuanDaoing = false; //仙娃唯一ID private ulong _marryChildUID = 0; //总战斗力 protected long _fightPower = 0; //图片头像id protected string _texHeadPicID = string.Empty; //上一次的Y轴朝向 private float _frontYForward = 0f; #endregion #region//属性信息 //属性 public new PlayerPropetry PropMoudle { get { if (_propMoudlePlayer == null) { _propMoudlePlayer = base.PropMoudle as PlayerPropetry; } return _propMoudlePlayer; } } //是否在坐骑上 public bool IsOnMount { get { return Skin.GetSkinPart(FSkinPartCode.Mount).IsValid; } } //是否跟随场景高度旋转 public bool RotBySceneHeight { get; protected set; } //是否变身 public bool IsChangeModel { get { return _isChangeModel; } } //变身配置ID public int ChangeCfgID { get { return _changeCfgID; } } //变身配置 public DeclareChangeModel ChangeModelCfg { get { return _changeModelCfg; } } //是否可以被选择 public override bool CanBeSelect { get { return true; } } //职业 public int Occ { get { return PropMoudle.Occ; } } //职业 public int IntOcc { get { return PropMoudle.Occ; } } //Skin public new FSkinModel Skin { get { if (_roleSkin == null) { _roleSkin = base.Skin as FSkinModel; } return _roleSkin; } set { base.Skin = value; _roleSkin = value; } } //帮会ID public virtual ulong GuildID { get { return PropMoudle.GuildId; } } //帮会职位ID public virtual int GuildRank { get { return PropMoudle.GuildRank; } } //帮会名字 public virtual string GuildName { get { return PropMoudle.GuildName; } } //当前境界等级 public int CurStateLevel { get { return PropMoudle.StateLevel; } set { if (PropMoudle.StateLevel != value) { PropMoudle.StateLevel = value; _visualInfo.StateLevel = value; GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_HUD_UPDATE_HEADINFO, this); } } } //当前识海ID public int CurShiHaiID { get { return PropMoudle.ShiHaiID; } set { if (PropMoudle.ShiHaiID != value) { PropMoudle.ShiHaiID = value; GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_HUD_UPDATE_HEADINFO, this); } } } //当前称号 public virtual DeclareTitle CurPictureTitle { get { return PropMoudle.PictureCfg; } } //外观信息 public IPlayerVisualInfo VisualInfo { get { if (_visualInfo == null) { _visualInfo = GameCenter.LuaSystem.Adaptor.CreatePlayerVisualInfo(0); } return _visualInfo; } } //灵体等级 public int LingTiDegree { get { return _visualInfo.LingTiDegree; } set { if (_visualInfo.LingTiDegree != value) { _visualInfo.LingTiDegree = value; EquipWithType(FSkinPartCode.Body, _visualInfo.GetLingTiBodyModelID(IntOcc)); } } } //时装衣服 public int FashionBodyID { get { return _visualInfo.FashionBodyID; } set { if (_visualInfo.FashionBodyID != value) { _visualInfo.FashionBodyID = value; EquipWithType(FSkinPartCode.Body, _visualInfo.GetFashionBodyModelID(IntOcc)); } } } //时装武器 public int FashionWeaponID { get { return _visualInfo.FashionWeaponID; } set { if (_visualInfo.FashionWeaponID != value) { _visualInfo.FashionWeaponID = value; EquipWithType(FSkinPartCode.GodWeaponHead, _visualInfo.GetFashionWeaponModelID(IntOcc)); } } } //时装光环 public int FashionHaloID { get { return _visualInfo.FashionHaloID; } set { if (_visualInfo.FashionHaloID != value) { _visualInfo.FashionHaloID = value; EquipWithType(FSkinPartCode.XianjiaHuan, _visualInfo.GetFashionHaloModelID()); } } } //时装法阵 public int FashionMatrixID { get { return _visualInfo.FashionMatrixID; } set { if (_visualInfo.FashionMatrixID != value) { _visualInfo.FashionMatrixID = value; EquipWithType(FSkinPartCode.XianjiaZhen, _visualInfo.GetFashionMatrixModelID()); } } } //时装头像 public int FashionHeadId { get; set; } //时装头像框 public int FashionFrameId { get; set; } //翅膀 public int WingID { get { return _visualInfo.WingId; } set { if (_visualInfo.WingId != value) { _visualInfo.WingId = value; //EquipWithType(FSkinPartCode.Wing, _visualInfo.WingId); } } } //伴侣名字 public string SpouseName { get { return _spouseName; } } //战斗状态 public bool AnimFightState { get { return _brightState != PlayerBrightWeaponState.Receive; } } //是否有目标 public bool HasTarget { get { if (_curSelectedTargetId != 0) { var e = GetCurSelectedTarget(); if (e != null) { return true; } } _curSelectedTargetId = 0; return false; } } //当前选择的目标ID public UInt64 CurSelectedTargetId { get { return _curSelectedTargetId; } } //当前选择是自动还是手动选择的 public bool CurSelectTargetIsAuto { get { return _curSelectTargetIsAuto; } } //灵气百分比 public float LingLiPercent { get { if (PropMoudle.LingLi <= 0) return 0f; return (float)PropMoudle.CurLinLi / (float)PropMoudle.LingLi; } } //是否正在传道 public bool IsChuanDaoing { get { return _isChuanDaoing; } set { if (_isChuanDaoing != value) { _isChuanDaoing = value; if (_isChuanDaoing) { if (!IsXState(EntityStateID.ChuanDaoSitDown)) { Action_ChuanDaoSitDown(); } } else { if (IsXState(EntityStateID.ChuanDaoSitDown)) { Stop_Action(); } } } } } //飞剑跟随的trans public Transform FlySwordHeightTrans { get; protected set; } //转职等级 public int ChangeJobLevel { get { return PropMoudle.ChangeJobLevel; } set { PropMoudle.ChangeJobLevel = value; } } //获取战斗力 public virtual long FightPower { get { return _fightPower; } set { if (_fightPower != value) { _fightPower = value; } } } //图片头像id public string TexHeadPicID { get { return _texHeadPicID; } set { _texHeadPicID = value; } } //是否显示图片头像 public bool IsShowHeadPic { get; set; } //坐骑动作播放速度 public float MountAnimSpeed { get; set; } #endregion #region//装备处理 /// /// 检查转换装备ID /// /// /// /// protected int CheckEquipID(int type, int equipId) { switch (type) { case FSkinPartCode.Body: if (Scene != null && Scene.Cfg.SpecialBody.Length > 0) { equipId = DeclareDataUtils.GetValueWithPrefix((int)Occ, Scene.Cfg.SpecialBody, equipId); } if (IsChangeModel) { equipId = _changeModeID; } else if (FashionBodyID <= 0) { equipId = _visualInfo.GetLingTiBodyModelID(IntOcc); } break; case FSkinPartCode.GodWeaponHead: if (Scene != null && Scene.Cfg.SpecialWeaponHead.Length > 0) { equipId = DeclareDataUtils.GetValueWithPrefix((int)Occ, Scene.Cfg.SpecialWeaponHead, equipId); } break; case FSkinPartCode.GodWeaponBody: case FSkinPartCode.GodWeaponVfx: equipId = 0; break; case FSkinPartCode.Wing: if (Scene != null && Scene.Cfg.SpecialWing.Length > 0) { equipId = DeclareDataUtils.GetValueWithPrefix((int)Occ, Scene.Cfg.SpecialWing, equipId); } else if (!GameCenter.GameSetting.IsEnabled(GameSettingKeyCode.EnableShowWing) && !IsLocalPlayer()) { Skin.HideSkinPart(FSkinPartCode.Wing); } break; case FSkinPartCode.XianjiaHuan: break; case FSkinPartCode.XianjiaZhen: break; } return equipId; } //切换装备 public virtual void EquipWithType(int type, int equipId, bool bClearVfx = true) { equipId = CheckEquipID(type, equipId); Skin.SetSkinPartFromCfgID(type, equipId, null, true, null, bClearVfx); } #endregion #region//初始化处理 protected override bool OnSetupFSMBefore() { ResetDirection(); return base.OnSetupFSMBefore(); } //初始化FSM状态 protected override bool OnSetupFSM() { Fsm = new EntityFSM(this); Fsm.AddState(new PlayerFSM.Idle()); Fsm.AddState(new PlayerFSM.PathMove()); Fsm.AddState(new PlayerFSM.DirMove()); Fsm.AddState(new Dead()); Fsm.AddState(new Collect()); Fsm.AddState(new Jump()); Fsm.AddState(new BeHitBack()); Fsm.AddState(new BeHitFly()); Fsm.AddState(new BeHitGrab()); Fsm.AddState(new FlyUp()); Fsm.AddState(new FlyDown()); Fsm.AddState(new FlyTeleport()); Fsm.AddState(new RollDodge()); Fsm.AddState(new CrossMapTran()); Fsm.AddState(new PlayerFSM.SameRide()); Fsm.AddState(new TaskBarAround()); Fsm.AddState(new SkillMove()); Fsm.AddState(new PlayerFSM.SitDown()); Fsm.AddState(new PlayerFSM.EnterMap()); Fsm.AddState(new PlayerFSM.ChuanDaoSitDown()); Fsm.SetDefaultStateId(EntityStateID.Idle); Fsm.Init(this); return true; } protected override bool OnInitializeAfter(EntityInitInfo baseInfo) { MountAnimSpeed = 1f; var initInfo = baseInfo as PlayerInitInfo; _visualInfo = initInfo.VisualInfo; _blinker = new HitBlinker(); return base.OnInitializeAfter(baseInfo); } protected override void OnUninitializeBefore() { //释放飞剑 UnLoadFlySword(); //释放仙娃 UnLoadMarryChild(); base.OnUninitializeBefore(); } #endregion #region//心跳处理 Update protected override void OnUpdate(float elapsedTime) { _blinker.Update(elapsedTime); UpdateBrightState(elapsedTime); UpdateTarget(); if (Skin != null && (Skin.GetSkinPartCfgID(FSkinPartCode.XianjiaZhen) > 0 || Skin.GetSkinPartCfgID(FSkinPartCode.XianjiaHuan) > 0)) { if (Skin.GetSkinPartCfgID(FSkinPartCode.Mount) > 0) { Skin.HideSkinPart(FSkinPartCode.XianjiaZhen); Skin.HideSkinPart(FSkinPartCode.XianjiaHuan); } else { Skin.ShowSkinPart(FSkinPartCode.XianjiaZhen); Skin.ShowSkinPart(FSkinPartCode.XianjiaHuan); } } base.OnUpdate(elapsedTime); } #endregion #region //重写Entity的方法 //更新实体的旋转角 protected override void OnUpdateRotation(float elapsedTime) { if (Skin == null || Skin.RootGameObject == null) return; Vector3 now = Skin.GetForward(); Vector3 prev = now; prev.y = _frontYForward; prev = prev.normalized; if (IsOnMount && RotBySceneHeight) { float checkRadious = 2f; var mountPart = Skin.GetSkinPart(FSkinPartCode.Mount); if (mountPart != null) { var radious = mountPart.GetRadious(); if (radious > 0f) { checkRadious = radious; } } Vector3 pos1 = Position + now * checkRadious; pos1 = GetTerrainPosition(pos1.x, pos1.z); Vector3 pos2 = Position - now * checkRadious; pos2 = GetTerrainPosition(pos2.x, pos2.z); if (!IsBlocked(pos1) && !IsBlocked(pos2)) { now = (pos1 - pos2).normalized; SetPosition(Vector3.Lerp(pos1, pos2, 0.5f)); Skin.SetForward(Vector3.Slerp(prev, now, 0.5f / checkRadious)); } else if (now != prev || Skin.GetForward().y != 0) { Skin.SetForward(Vector3.Slerp(prev, now, 0.5f / checkRadious)); } } else { if (now != prev || now.y != 0) { now.y = 0f; Skin.SetForward(now); } } _frontYForward = Skin.GetForward().y; } public override void OnBeAttackedResponse(Character attacker, HitEffectInfo hitInfo, SkillHitType hitType, MSG_Fight.HitEffectInfo msgInfo) { if (!GameCenter.GameSetting.IsEnabled(GameSettingKeyCode.TPSkillBlink)) { var setValue = GameCenter.GameSetting.GetSetting(GameSettingKeyCode.HitBlink); if (setValue == 2 || (setValue == 1 && attacker.IsLocalPlayer())) { //开始闪烁 _blinker.Start(hitInfo.BlinkTime, hitInfo.BlinkPower, hitInfo.BlinkColor, hitInfo.BlinkCurve, Skin); } } if (attacker is Player && PropMoudle.CurLinLi > 0 && (Time.realtimeSinceStartup - _frontPlayLingLiTime) > 0.2f) { _frontPlayLingLiTime = Time.realtimeSinceStartup; var dir = Scene.SceneCamera.transform.position - Position; dir.y = 0; var vfx = PlayVFX(ModelTypeCode.BodyVFX, 101, SlotUtils.GetSlotName(Slot.Origin), FSkinPartCode.Body, true, 1f, true, false, null, true); if (vfx != null) { vfx.SetForward(dir); } } base.OnBeAttackedResponse(attacker, hitInfo, hitType, msgInfo); } //播放闪烁效果 public void PlayBlinkEffect(float time, float power, Color color, AnimationCurve curve) { if (curve == null) { curve = new AnimationCurve(); curve.AddKey(0, 0); curve.AddKey(1, 1); } _blinker.Start(time, power, color, curve, Skin); } #endregion #region 战斗状态改变 public void ChangeBrightState(PlayerBrightWeaponState state) { if (_brightState == state) { return; } _brightState = state; switch (_brightState) { case PlayerBrightWeaponState.Receive: { //直接切换挂接点 var body = Skin.GetSkinPart(FSkinPartCode.Body) as FGameObjectBody; if (body != null) { body.BrightWeapon = false; if (IsShowModel) { //SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.LeftWeapon, _receiveWeaponScale); SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.RightWeapon, _receiveWeaponScale); //SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.LeftWeaponReceive, _receiveWeaponScale); SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.RightWeaponReceive, _receiveWeaponScale); } } } break; case PlayerBrightWeaponState.Receiveing: { //播放收剑剑动作 if (IsXState(EntityStateID.Idle)) { //没有移动,播放普通收剑动作 PlayAnim(AnimClipNameDefine.SwordInIdle, AnimationPartType.AllBody, WrapMode.Once); } else { //正在移动,播放上半身动作 PlayAnim(AnimClipNameDefine.SwordInRun, AnimationPartType.UpBody, WrapMode.Once); } _brightStateTimer = _brightMaxTime; //直接切换挂接点 var body = Skin.GetSkinPart(FSkinPartCode.Body) as FGameObjectBody; if (body != null) { if (IsShowModel) { //SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.LeftWeapon, _brightWeaponScale); SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.RightWeapon, _brightWeaponScale); } } } break; case PlayerBrightWeaponState.Bright: { _brightStateTimer = _brightMaxTime; //直接切换挂接点 var body = Skin.GetSkinPart(FSkinPartCode.Body) as FGameObjectBody; if (body != null) { body.BrightWeapon = true; } if (!this.skillManager.IsSkillUseing() && (IsXState(EntityStateID.Idle) || IsXState(EntityStateID.DirMove) || IsXState(EntityStateID.PathMove))) { //播放亮剑动作 if (IsXState(EntityStateID.Idle)) { //没有移动,播放普通亮剑动作 PlayAnim(AnimClipNameDefine.SwordOutIdle, AnimationPartType.AllBody, WrapMode.Once); } else { //正在移动,播放上半身动作 PlayAnim(AnimClipNameDefine.SwordOutRun, AnimationPartType.UpBody, WrapMode.Once); } } else { if (body != null && IsShowModel) { //SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.LeftWeapon, _brightWeaponScale); SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.RightWeapon, _brightWeaponScale); } } } break; } } public void UpdateBrightState(float dt) { if (Skin == null || _skillManager == null) { return; } switch (_brightState) { case PlayerBrightWeaponState.Receive: { //容错处理 var body = Skin.GetSkinPart(FSkinPartCode.Body) as FGameObjectBody; if (body != null && body.BrightWeapon) { body.BrightWeapon = false; } if (FightState || _skillManager.IsSkillUseing()) { //进入到战斗状态,直接切换到亮剑 ChangeBrightState(PlayerBrightWeaponState.Bright); } } break; case PlayerBrightWeaponState.Receiveing: { if (!(FightState || _skillManager.IsSkillUseing())) { if (!skillManager.IsSkillUseing()) { _brightStateTimer -= dt; var body = Skin.GetSkinPart(FSkinPartCode.Body) as FGameObjectBody; if (body != null) { if (IsShowModel) { var sacle = Vector3.Lerp(_receiveWeaponScale, _brightWeaponScale, _brightStateTimer / _brightMaxTime); //SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.LeftWeapon, sacle); SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.RightWeapon, sacle); } } if (_brightStateTimer <= 0f || !(IsXState(EntityStateID.Idle) || IsXState(EntityStateID.PathMove) || IsXState(EntityStateID.DirMove))) { //切换到收剑状态 ChangeBrightState(PlayerBrightWeaponState.Receive); } } else { ChangeBrightState(PlayerBrightWeaponState.Bright); } } else { //收剑过程中进入战斗状态,直接切换到亮剑状态 StopAnim(); ChangeBrightState(PlayerBrightWeaponState.Bright); } } break; case PlayerBrightWeaponState.Bright: { if (!(FightState || _skillManager.IsSkillUseing())) { if (IsXState(EntityStateID.Idle) || IsXState(EntityStateID.DirMove) || IsXState(EntityStateID.PathMove)) { if (!skillManager.IsSkillUseing()) { //没有使用技能,切换到收剑过程状态 ChangeBrightState(PlayerBrightWeaponState.Receiveing); } else { //正在使用技能,等待技能释放完成 } } else { //状态不允许播放动作,直接切换到收剑 ChangeBrightState(PlayerBrightWeaponState.Receive); } } else { if (!_skillManager.IsSkillUseing() && _brightStateTimer > 0f) { _brightStateTimer -= dt; var body = Skin.GetSkinPart(FSkinPartCode.Body) as FGameObjectBody; if (body != null && IsShowModel) { var sacle = Vector3.Lerp(_brightWeaponScale, _receiveWeaponScale, _brightStateTimer / _brightMaxTime); //SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.LeftWeapon, sacle); SlotUtils.SetSlotLocalScale(body.RealTransform, SlotNameDefine.RightWeapon, sacle); } } else { //容错处理 var body = Skin.GetSkinPart(FSkinPartCode.Body) as FGameObjectBody; if (body != null && !body.BrightWeapon) { body.BrightWeapon = true; } } } } break; } } public override void OnFightStateChangated(bool state) { base.OnFightStateChangated(state); } #endregion #region//名字颜色 public void UpdateNameColor() { GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_HUD_UPDATEHUDNAMECOLOR, ID); var petList = GameCenter.GameSceneSystem.FindEntityAll(); for (int i = 0; i < petList.Count; ++i) { if (petList[i].PropMoudle.MasterID == ID) { GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_HUD_UPDATEHUDNAMECOLOR, petList[i].ID); } } } #endregion #region//变身效果处理 //开始变身 public void StartChangeModel(DeclareChangeModel cfg) { if (_isChangeModel) return; if (cfg == null) return; _changeModelCfg = cfg; _changeModeID = cfg.ModelId; _changeCfgID = cfg.Id; _isChangeModel = true; Skin.ShowSkinPart(FSkinPartCode.Body, false); EquipWithType(FSkinPartCode.Body, _changeModeID, false); Skin.HideSkinPart(FSkinPartCode.Mount); Skin.HideSkinPart(FSkinPartCode.GodWeaponHead); Skin.HideSkinPart(FSkinPartCode.GodWeaponBody); Skin.HideSkinPart(FSkinPartCode.GodWeaponVfx); Skin.HideSkinPart(FSkinPartCode.Wing); Skin.HideSkinPart(FSkinPartCode.XianjiaHuan); Skin.HideSkinPart(FSkinPartCode.XianjiaZhen); //变身时取消飞剑 UnLoadFlySword(); //变身时去掉仙娃 UnLoadMarryChild(); } //结束 变身 public void StopChangeModel() { if (!_isChangeModel) return; _isChangeModel = false; _changeModeID = 0; _changeCfgID = 0; _changeModelCfg = null; Skin.ShowSkinPart(FSkinPartCode.Mount); Skin.ShowSkinPart(FSkinPartCode.Body); Skin.ShowSkinPart(FSkinPartCode.GodWeaponHead); Skin.ShowSkinPart(FSkinPartCode.GodWeaponBody); Skin.ShowSkinPart(FSkinPartCode.GodWeaponVfx); Skin.ShowSkinPart(FSkinPartCode.Wing); Skin.ShowSkinPart(FSkinPartCode.XianjiaHuan); Skin.ShowSkinPart(FSkinPartCode.XianjiaZhen); EquipWithType(FSkinPartCode.Body, VisualInfo.GetBodyModelID(IntOcc), false); //重新载入飞剑 LoadFlySword(); //重新召唤仙娃 LoadMarryChild(); } #endregion #region//选择目标处理 //选择目标 protected virtual void OnSelectTarget(Entity target) { GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_PLAYER_TARGET_CHANGED, target); if (target != null) target.Select(); } //取消选择目标 protected virtual void OnDeselectTarget(Entity target) { GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_PLAYER_TARGET_CHANGED, null); if (target != null) target.Deselect(); } //获取当前目标 public Character GetCurSelectedTarget() { if (_curSelectedTargetId == 0 || Scene == null) { return null; } Character target = Scene.Find(_curSelectedTargetId); return target; } //设置当前目标, //当id==0是表示取消选择目标,id!=0但是没有找到目标的情况下不做任何操作 public bool SetCurSelectedTargetId(UInt64 id, bool isAuto = true) { _curSelectTargetIsAuto = isAuto; if (id == 0) { if (_curSelectedTargetId != 0 && Scene != null) { Character e = Scene.Find(_curSelectedTargetId); _curSelectedTargetId = 0; OnDeselectTarget(e); } _curSelectedTargetId = 0; return true; } else { Character newTarget = Scene.Find(id); //重复选择 if (id == _curSelectedTargetId || Scene == null) { return true; } if (newTarget != null && !newTarget.IsDead() && newTarget.CanBeSelect) { if (_curSelectedTargetId != 0) { Character oldTarget = Scene.Find(_curSelectedTargetId); _curSelectedTargetId = 0; OnDeselectTarget(oldTarget); } _curSelectedTargetId = id; OnSelectTarget(newTarget); GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_PLAYER_TARGET_SELECT, newTarget); return true; } } return false; } public void UpdateTarget() { //如果当前有选择的目标ID但是查找不到目标对象,丢失目标 if (_curSelectedTargetId > 0) { Character target = GetCurSelectedTarget(); if (target == null || target.IsDead() || !target.CanBeSelect) { SetCurSelectedTargetId(0); } } } #endregion #region//飞剑处理 public void LoadFlySword(bool playShow = false) { if (!IsChangeModel && PropMoudle.FlySwordCfgID > 0 && PropMoudle.FlySwordUID != ID) { GameCenter.GameSceneSystem.RefreshFlySword(new FlySwordInitInfo(PropMoudle.FlySwordCfgID, PropMoudle.FlySwordUID, this, PropMoudle.FlySwordSkillId, playShow)); } } //释放法宝 public void UnLoadFlySword() { if (PropMoudle.FlySwordUID > 0 && PropMoudle.FlySwordUID != ID) { GameCenter.GameSceneSystem.RemoveRemoteEntity(PropMoudle.FlySwordUID); } } #endregion #region//仙娃处理 //载入仙娃 public void LoadMarryChild() { UnLoadMarryChild(); var cfg = DeclareMarryChild.Get(PropMoudle.MarryChildID); if (cfg != null) { var initInfo = new MarryChildInitInfo(cfg, this, PropMoudle.MarryChildName); _marryChildUID = initInfo.ID; GameCenter.GameSceneSystem.RefreshMarryChild(initInfo); } } //释放仙娃 public void UnLoadMarryChild() { if (_marryChildUID > 0) { GameCenter.GameSceneSystem.RemoveRemoteEntity(_marryChildUID); _marryChildUID = 0; } } #endregion #region//婚姻处理 public void SetSpouseName(string name) { _spouseName = name; GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_HUD_UPDATE_HEADINFO, this); } #endregion } }