/// <summary> /// 是否实体顶部栏可用 /// </summary> /// <param name="entity"></param> /// <param name="statusType"></param> /// <returns></returns> public static bool IsEntityHeadStatusTypeEnable(IEntity entity, HeadStatusType statusType) { bool enable = false; if (null != entity) { switch (statusType) { case HeadStatusType.Hp: { EntityHpSprite hpSp = RoleStateBarManager.GetEntityHpSpData(entity); if (hpSp != null) { enable = hpSp.bShow; } } break; case HeadStatusType.Name: { enable = PlayerNameEnable; if (entity.GetEntityType() == EntityType.EntityType_NPC) { INPC npc = entity as INPC; enable = npc.WhetherShowHeadTips(); } } break; case HeadStatusType.Clan: { uint clanIdLow = (uint)entity.GetProp((int)CreatureProp.ClanIdLow); uint clanIdHigh = (uint)entity.GetProp((int)CreatureProp.ClanIdHigh); uint clanid = (clanIdHigh << 16) | clanIdLow; enable = ClanNameEnable && (clanid != 0); //enable = ClanNameEnable && ((uint)entity.GetProp((int)CreatureProp.ClanId) != 0); } break; case HeadStatusType.Title: { enable = PlayerTitleEnable && (entity.GetEntityType() == EntityType.EntityType_Player && (uint)entity.GetProp((int)PlayerProp.TitleId) != 0); } break; case HeadStatusType.Collect: { } break; case HeadStatusType.HeadMaskIcon: { enable = IsEntityHaveHeadIconMask(entity); } break; case HeadStatusType.TaskStatus: { if (entity.GetEntityType() == EntityType.EntityType_NPC) { QuestTraceInfo info = null; if (TryGetNPCTraceInfo(entity, out info)) { enable = true; } } } break; case HeadStatusType.CampMask: { int camp = entity.GetProp((int)Client.CreatureProp.Camp); if (camp == (int)GameCmd.eCamp.CF_Green || camp == (int)GameCmd.eCamp.CF_Red) { enable = true; } } break; case HeadStatusType.BossSay: { int baseID = entity.GetProp((int)EntityProp.BaseID); if (baseID == DataManager.Manager <RoleStateBarManager>().GetTalkingBossID()) { enable = DataManager.Manager <RoleStateBarManager>().GetBossTalkVisible(); } else { enable = false; } } break; } } return(enable); }
/// <summary> /// 获取实体血条 /// </summary> /// <param name="entity"></param> /// <returns></returns> public static EntityHpSprite GetEntityHpSpData(IEntity entity) { EntityHpSprite spriteParams = new EntityHpSprite(); spriteParams.spriteType = UISprite.Type.Filled; if (entity.GetEntityType() == EntityType.EntityType_Player) { GameCmd.eCamp mycamp = (GameCmd.eCamp)MainPlayerHelper.GetMainPlayer().GetProp((int)CreatureProp.Camp); GameCmd.eCamp camp = (GameCmd.eCamp)entity.GetProp((int)CreatureProp.Camp); spriteParams.bgSpriteName = GetHpSpriteName(HpSpriteType.PlayerBg); if (entity == MainPlayerHelper.GetMainPlayer()) { spriteParams.spriteName = GetHpSpriteName(HpSpriteType.Me); } else { if (EntityCanAttack(entity)) { spriteParams.spriteName = GetHpSpriteName(HpSpriteType.Enemy); } else { spriteParams.spriteName = GetHpSpriteName(HpSpriteType.Friend); } } spriteParams.bShow = true; } else if (entity.GetEntityType() == EntityType.EntityType_NPC) { INPC npc = entity as INPC; //任意NPC先给一个默认的血条 spriteParams.bgSpriteName = GetHpSpriteName(HpSpriteType.NoneBg); spriteParams.spriteName = GetHpSpriteName(HpSpriteType.None); spriteParams.bShow = IsNeedHpSlider(entity); if (npc.WhetherShowHeadTips()) { //是可以攻击的NPC if (npc.IsCanAttackNPC()) { //是不是佣兵 if (npc.IsMercenary()) { spriteParams.spriteName = GetHpSpriteName(HpSpriteType.Friend); spriteParams.bgSpriteName = GetHpSpriteName(HpSpriteType.PlayerBg); spriteParams.bShow = true; } else { if (npc.IsPet()) { spriteParams.bgSpriteName = GetHpSpriteName(HpSpriteType.PetBg); if (npc.IsMainPlayerSlave()) { spriteParams.spriteName = GetHpSpriteName(HpSpriteType.MyPet); } else { if (EntityCanAttack(entity)) { spriteParams.spriteName = GetHpSpriteName(HpSpriteType.EnemyPet); } } } else if (npc.IsSummon()) { spriteParams.bgSpriteName = GetHpSpriteName(HpSpriteType.SummonBg); if (npc.IsMainPlayerSlave()) { spriteParams.spriteName = GetHpSpriteName(HpSpriteType.MySummon); } else { if (EntityCanAttack(entity)) { spriteParams.spriteName = GetHpSpriteName(HpSpriteType.EnemySummon); } } } else if (npc.IsMonster()) { spriteParams.bgSpriteName = GetHpSpriteName(HpSpriteType.MonsterBg); spriteParams.spriteName = GetHpSpriteName(HpSpriteType.Monster); spriteParams.spriteType = UISprite.Type.Simple; } } } } else { spriteParams.bShow = false; } } else if (entity.GetEntityType() == EntityType.EntityTYpe_Robot) { GameCmd.eCamp mycamp = (GameCmd.eCamp)MainPlayerHelper.GetMainPlayer().GetProp((int)CreatureProp.Camp); GameCmd.eCamp camp = (GameCmd.eCamp)entity.GetProp((int)CreatureProp.Camp); spriteParams.bgSpriteName = GetHpSpriteName(HpSpriteType.PlayerBg); if (entity == MainPlayerHelper.GetMainPlayer()) { spriteParams.spriteName = GetHpSpriteName(HpSpriteType.Me); } else { if (EntityCanAttack(entity)) { spriteParams.spriteName = GetHpSpriteName(HpSpriteType.Enemy); } else { spriteParams.spriteName = GetHpSpriteName(HpSpriteType.Friend); } } spriteParams.bShow = true; } return(spriteParams); }
public HeadTipData(IEntity entity, HeadTipType htype, bool vivible) { if (entity == null) { throw new ArgumentNullException("entity"); } this.type = htype; this.m_bVisible = vivible; switch (type) { case HeadTipType.Hp: { this.value = entity.GetProp((int)CreatureProp.Hp) / (float)entity.GetProp((int)CreatureProp.MaxHp); this.color = ColorType.Green; this.spriteParams = GetSpiteName(entity); } break; case HeadTipType.Name: { this.value = entity.GetName(); this.color = GetNameColor(entity); } break; case HeadTipType.HeadMaskIcon: { table.NpcHeadMaskDataBase npcmaskDB = RoleStateBarManager.GetNPCHeadMaskDB(entity); this.value = (null != npcmaskDB) ? npcmaskDB.headMaskIcon : ""; } break; case HeadTipType.Clan: { this.color = GetClanNameColor(entity); // this.m_nFontSize = 18; //this.value = //异步请求 } break; case HeadTipType.Title: { this.value = GetTitleText(entity); this.color = ColorType.Green; } break; case HeadTipType.Collect: { this.color = ColorType.JSXT_CaiJiWu; this.m_bVisible = true; } break; case HeadTipType.Max: break; default: break; } }
/// <summary> /// 更新顶部栏状态 /// </summary> public void UpdateHeadStatus(HeadStatusType type, bool adjustPos = true) { RoleStateBarManager mgr = DataManager.Manager <RoleStateBarManager>(); IEntity entity = RoleStateBarManager.GetEntity(UID); if (null == entity) { return; } Transform widget = GetWidget(type); if (null != widget) { QuestTraceInfo traceInfo = null; bool visible = false; if (type != HeadStatusType.TaskStatus) { visible = RoleStateBarManager.IsEntityHeadStatusTypeEnable(entity, type); } else { if (RoleStateBarManager.TryGetNPCTraceInfo(entity, out traceInfo)) { visible = true; } } if (widget.gameObject.activeSelf != visible) { widget.gameObject.SetActive(visible); } if (type == HeadStatusType.Title && null != m_particleWidget) { m_particleWidget.ReleaseParticle(); } if (visible) { switch (type) { case HeadStatusType.Hp: if (null != m_hpSlider && null != m_spHpbg && null != m_spHpForg) { float hpPer = entity.GetProp((int)CreatureProp.Hp) / (float)entity.GetProp((int)CreatureProp.MaxHp); EntityHpSprite hpSp = RoleStateBarManager.GetEntityHpSpData(entity); if (hpSp != null) { m_spHpbg.spriteName = hpSp.bgSpriteName; m_spHpbg.MakePixelPerfect(); m_spHpForg.spriteName = hpSp.spriteName; m_spHpForg.MakePixelPerfect(); m_hpSlider.gameObject.SetActive(hpSp.bShow); m_hpSlider.value = hpPer; } } break; case HeadStatusType.Name: if (null != m_labName) { m_labName.text = ColorManager.GetColorString(mgr.GetNameColor(entity), entity.GetName()); } break; case HeadStatusType.Clan: if (null != m_labClanName) { Action <string, int> clanNameDlg = (clanName, getNameSeed) => { if (getNameSeed >= m_iGetNameSeed) { //保证先后 //string name = DataManager.Manager<TextManager>().GetLocalFormatText(LocalTextType.Clan_Commond_shizumingzi, clanName); //labelClan.fontSize = data.m_nFontSize; m_labClanName.text = ColorManager.GetColorString(RoleStateBarManager.GetClanNameColor(entity), clanName); } }; RoleStateBarManager.GetRoleBarClanName(entity, clanNameDlg, ++m_iGetNameSeed); } break; case HeadStatusType.Title: if (null != m_labTitle) { table.TitleDataBase titleDb = RoleStateBarManager.GetTitleText(entity); if (null != titleDb) { bool visibleTxt = (titleDb.UIState == 0); if (null != m_labTitle) { if (m_labTitle.gameObject.activeSelf != visibleTxt) { m_labTitle.gameObject.SetActive(visibleTxt); } m_labTitle.text = titleDb.SceneTextUI; } if (null != m_particleWidget) { if (m_particleWidget.gameObject.activeSelf == visibleTxt) { m_particleWidget.gameObject.SetActive(!visibleTxt); } m_particleWidget.AddParticle(titleDb.FxUI, m_particleRelativeWidget); } } } break; case HeadStatusType.Collect: if (null != m_labCollectTips) { m_labCollectTips.color = ColorManager.GetColor32OfType(ColorType.JSXT_CaiJiWu); } break; case HeadStatusType.HeadMaskIcon: if (null != m_spHeadMask) { table.NpcHeadMaskDataBase npcmaskDB = RoleStateBarManager.GetNPCHeadMaskDB(entity); string iconName = (null != npcmaskDB) ? npcmaskDB.headMaskIcon : ""; UIManager.GetAtlasAsyn(iconName, ref m_headCASD, () => { if (null != m_spHeadMask) { m_spHeadMask.atlas = null; } }, m_spHeadMask); } break; case HeadStatusType.TaskStatus: if (null != m_spTaskStatus && null != traceInfo) { long uid = 0; string icon = ""; if (RoleStateBarManager.TryGetQuestStatusIcon(traceInfo, out uid, out icon) && uid == UID) { UIManager.GetAtlasAsyn(icon, ref m_taskCASD, () => { if (null != m_spTaskStatus) { m_spTaskStatus.atlas = null; } }, m_spTaskStatus); } else { widget.gameObject.SetActive(false); } } break; case HeadStatusType.CampMask: { bool isGod = true; int camp = entity.GetProp((int)Client.CreatureProp.Camp); if (camp == (int)GameCmd.eCamp.CF_Red) { isGod = false; } if (null != m_tsDemonMask && m_tsDemonMask.gameObject.activeSelf == isGod) { m_tsDemonMask.gameObject.SetActive(!isGod); } if (null != m_tsGodMask && m_tsGodMask.gameObject.activeSelf != isGod) { m_tsGodMask.gameObject.SetActive(isGod); } } break; case HeadStatusType.BossSay: { uint npcID = DataManager.Manager <RoleStateBarManager>().GetTalkingBossID(); table.BossTalkDataBase db = GameTableManager.Instance.GetTableItem <table.BossTalkDataBase>(npcID); if (db != null) { uint textID = db.textID; table.LangTextDataBase ldb = GameTableManager.Instance.GetTableItem <table.LangTextDataBase>(textID); if (ldb != null) { m_bossText.text = ldb.strText; } m_bossTalk.gameObject.SetActive(visible); } else { m_bossTalk.gameObject.SetActive(false); } } break; } } if (adjustPos) { AdjustStatusPos(); } } }
EntityHpSprite GetSpiteName(IEntity entity) { EntityHpSprite spriteParams = new EntityHpSprite(); spriteParams.spriteType = UISprite.Type.Filled; bool needHp = RoleStateBarManagerOld.Instance().IsNeedHpSlider(entity); Client.ISkillPart skillPart = MainPlayerHelper.GetMainPlayer().GetPart(EntityPart.Skill) as Client.ISkillPart; bool canAttack = true; if (skillPart != null) { int skillerror = 0; canAttack = skillPart.CheckCanAttackTarget(entity, out skillerror); } if (entity.GetEntityType() == EntityType.EntityType_Player) { GameCmd.eCamp mycamp = (GameCmd.eCamp)MainPlayerHelper.GetMainPlayer().GetProp((int)CreatureProp.Camp); GameCmd.eCamp camp = (GameCmd.eCamp)entity.GetProp((int)CreatureProp.Camp); spriteParams.bgSpriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.PlayerBg); if (entity == MainPlayerHelper.GetMainPlayer()) { spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.Me); } else { if (canAttack) { spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.Enemy); } else { spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.Friend); } } spriteParams.bShow = true; } else if (entity.GetEntityType() == EntityType.EntityType_NPC) { INPC npc = entity as INPC; //任意NPC先给一个默认的血条 spriteParams.bgSpriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.NoneBg); spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.None); spriteParams.bShow = needHp; //是可以攻击的NPC if (npc.IsCanAttackNPC()) { //是不是佣兵 if (npc.IsMercenary()) { spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.Friend); spriteParams.bgSpriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.PlayerBg); spriteParams.bShow = true; } else { if (npc.IsPet()) { spriteParams.bgSpriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.PetBg); if (npc.IsMainPlayerSlave()) { spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.MyPet); } else { if (canAttack) { spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.EnemyPet); } } } else if (npc.IsSummon()) { spriteParams.bgSpriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.SummonBg); if (npc.IsMainPlayerSlave()) { spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.MySummon); } else { if (canAttack) { spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.EnemySummon); } } } else if (npc.IsMonster()) { spriteParams.bgSpriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.MonsterBg); spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.Monster); spriteParams.spriteType = UISprite.Type.Simple; } } } } else if (entity.GetEntityType() == EntityType.EntityTYpe_Robot) { GameCmd.eCamp mycamp = (GameCmd.eCamp)MainPlayerHelper.GetMainPlayer().GetProp((int)CreatureProp.Camp); GameCmd.eCamp camp = (GameCmd.eCamp)entity.GetProp((int)CreatureProp.Camp); spriteParams.bgSpriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.PlayerBg); if (entity == MainPlayerHelper.GetMainPlayer()) { spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.Me); } else { if (canAttack) { spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.Enemy); } else { spriteParams.spriteName = RoleStateBarManager.GetHpSpriteName(HpSpriteType.Friend); } } spriteParams.bShow = true; } return(spriteParams); }