public void DestroyALL() { ClearCache(); if (null != m_BloodMap) { foreach (KeyValuePair <int, UBlood> var in m_BloodMap) { UBlood ub = var.Value; if (ub != null) { var temp = ub.gameObject; ub.resNode.DestroyInstanceRes(ref temp); ub.Clear(); } } m_curIndexArry = new Vector2[3]; m_BloodMap.Clear(); } if (null != BossBlood) { var temp = BossBlood.gameObject; BossBlood.resNode.DestroyInstanceRes(ref temp); BossBlood.Clear(); BossBlood = null; CurrentBossBloodHostID = -1; } BossBloodEntityTable.Clear(); BossBloodProityList.Clear(); m_unUseCanvasNodeMap.Clear(); }
/// <summary> /// 摧毁血条实例 /// </summary> /// <param name="instance"></param> private void DestroyBlood(UBlood instance) { if (null == instance) { return; } int id = instance.ID; //节点有效则缓存节点,大血条不用 if (instance.CanvasNode.isValid && instance.BloodType != BloodStyleType.Boss) { if (!m_unUseCanvasNodeMap.ContainsKey(instance.BloodType)) { m_unUseCanvasNodeMap.Add(instance.BloodType, new Queue <BloodCanvasNode>()); } m_unUseCanvasNodeMap[instance.BloodType].Enqueue(instance.CanvasNode); } var temp = instance.gameObject; instance.resNode.DestroyInstanceRes(ref temp); instance.Clear(); if (m_BloodMap.ContainsKey(id)) { m_BloodMap[id] = null; m_BloodMap.Remove(id); } }
//缓存血条 private void CacheBlood(UBlood ub) { if (null == ub) { return; } if (!m_CacheBloodMap.ContainsKey(ub.BloodType)) { DestroyBlood(ub); return; } if (ub.ISHero) { return; } if (m_BloodMap.ContainsKey(ub.ID)) { ub.SetEnable(false); ub.ChangeBloodColor(false); ub.ChangeParent(CacheBloodRoot.transform); Queue <UBlood> m_list = m_CacheBloodMap[ub.BloodType]; m_list.Enqueue(ub); m_BloodMap.Remove(ub.ID); } else { DestroyBlood(ub); } }
public void SetMpMaxValue(int entityID, int v) { if (m_BloodMap.ContainsKey(entityID)) { UBlood ub = m_BloodMap[entityID]; ub.SetMpMaxValue(v); } }
public void SetRoleName(int entityID, string name) { if (m_BloodMap.ContainsKey(entityID)) { UBlood ub = m_BloodMap[entityID]; ub.SetRoleName(name); } }
public void SetVisible(int entityID, bool v) { if (m_BloodMap.ContainsKey(entityID)) { UBlood ub = m_BloodMap[entityID]; ub.SetVisible(v); } }
public void SetLevel(int entityID, int lev) { if (m_BloodMap.ContainsKey(entityID)) { UBlood ub = m_BloodMap[entityID]; ub.SetLevel(lev); } }
public void DestroyBlood(int entityID) { UBlood ub = FindBlood(entityID); if (ub != null) { DestroyBlood(ub); } }
public UBlood FindBlood(int entityID) { if (m_BloodMap.ContainsKey(entityID)) { UBlood ub = m_BloodMap[entityID]; return(ub); } return(null); }
public void SetCamType(int entityID, int camp) { if (entityID == pkTargetID) { return; } if (m_BloodMap.ContainsKey(entityID)) { UBlood ub = m_BloodMap[entityID]; ub.SetCampType(camp); } }
private UBlood GetBlood(BloodStyleType type, ref BloodCanvasNode canvNode) { UBlood ub = null; if (!bPreWarmBlood) { if (!AllocBloodPos(type, ref canvNode)) { return(null); } ub = InstanceUBlood(type, canvNode); return(ub); } if (!m_CacheBloodMap.ContainsKey(type)) { if (!AllocBloodPos(type, ref canvNode)) { return(null); } ub = InstanceUBlood(type, canvNode); return(ub); } else { if (!m_CacheBloodMap.ContainsKey(type)) { if (!AllocBloodPos(type, ref canvNode)) { return(null); } ub = InstanceUBlood(type, canvNode); return(ub); } Queue <UBlood> m_CacheList = m_CacheBloodMap[type]; if (m_CacheList.Count > 0) { ub = m_CacheList.Dequeue(); canvNode = ub.CanvasNode; ub.RefreshTexture(); } else { if (!AllocBloodPos(type, ref canvNode)) { return(null); } ub = InstanceUBlood(type, canvNode); } } return(ub); }
/// <summary> /// 实例化大血条 /// </summary> /// <returns></returns> private UBlood InstanceUBossBlood() { BloodStyleInfo bloodInfo = m_BloodStyleList.Find((x) => { return(x.bloodType == BloodStyleType.Boss); }); if (null != bloodInfo && null != bloodInfo.bloodRes && null != bossBloodParent) { GameObject go = bloodInfo.bloodRes.InstanceMainRes(); RectTransform rt = go.transform.GetComponent <RectTransform>(); rt.SetParent(bossBloodParent, false); UBlood blood = go.GetComponent <UBlood>(); blood.resNode = bloodInfo.bloodRes; return(blood); } return(null); }
/// <summary> /// 普通血条更新 /// </summary> private void NormalUpdate() { m_InvalidList.Clear(); if (null != m_BloodMap) { foreach (UBlood var in m_BloodMap.Values) { UBlood ub = var; EntityView view = ub.Entity; if (view == null || !view.IsValid) { m_InvalidList.Enqueue(ub); continue; } //如果实体未激活,或者尚未加载完毕则隐藏血条 if (SkinInstance.isNullOrEmpry(view.SkinControl.CurrentSkinInstance) || !view.StateMachine.GetVisible()) { ub.SetEnable(false); if (view.Type == ENTITY_TYPE.TYPE_PLAYER_ROLE) { ub.OnUpdate(); } } else { ub.SetEnable(true); //需要更新的血条进行正常更新 ub.OnUpdate(); } } } while (m_InvalidList.Count > 0) { UBlood ub = m_InvalidList.Dequeue(); if (bPreWarmBlood) { CacheBlood(ub); } else { DestroyBlood(ub); } } m_InvalidList.Clear(); }
//预热血条 public void PreWarmBlood() { if (bPreWarmBlood) { return; } bPreWarmBlood = true; for (int i = 0; i < (int)BloodStyleType.Boss; i++) { BloodStyleType eType = (BloodStyleType)i; if (!m_CacheBloodMap.ContainsKey(eType)) { m_CacheBloodMap.Add(eType, new Queue <UBlood>()); } Queue <UBlood> BloodList = m_CacheBloodMap[eType]; BloodList.Clear(); for (int n = 0; n < CacheCountArry[i]; n++) { BloodCanvasNode canvNode = new BloodCanvasNode(); if (!AllocBloodPos(eType, ref canvNode)) { continue; } UBlood ub = InstanceUBlood(eType, canvNode); if (null != ub) { ub.Init(null, 0, eType, canvNode); ub.ChangeParent(CacheBloodRoot.transform); ub.SetEnable(false); BloodList.Enqueue(ub); } } } if (EntityFactory.MainHero != null) { bossBloodTarget = EntityFactory.MainHero.transform; } }
public void UpdateBlood(EntityView view) { int entityID = -1; if (EntityView.isNullOrEmpty(view)) { return; } entityID = view.ID; if (m_BloodMap.ContainsKey(entityID)) { UBlood ub = m_BloodMap[entityID]; ub.Entity = view; ub.ChangeParent(view.transform); if (view.Property != null) { ub.SetCampType(view.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_CAMP)); } } }
/// <summary> /// 实例化普通血条 /// </summary> /// <param name="entityType">实体类型</param> /// <param name="isHero">是否主角</param> /// <param name="bcn">血条节点数据</param> /// <returns></returns> private UBlood InstanceUBlood(BloodStyleType type, BloodCanvasNode bcn) { //大血条返回null,这个方法只创常规血条 if (type == BloodStyleType.Boss) { return(null); } BloodStyleInfo bloodInfo = m_BloodStyleList.Find((x) => { return(x.bloodType == type); }); if (null != bloodInfo && null != bloodInfo.bloodRes) { GameObject go = bloodInfo.bloodRes.InstanceMainRes(); if (RectPosition(go, bcn)) { UBlood blood = go.GetComponent <UBlood>(); blood.resNode = bloodInfo.bloodRes; return(blood); } } return(null); }
/// <summary> /// 设置角色属性 /// </summary> /// <param name="objev"></param> private void SetProperty(EntityView objev, UBlood blood) { if (null == objev || null == objev.Property || null == blood) { return; } int nHeroID = objev.ID; int nMaxHp = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MAX_HP); int nCurHp = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_HP); int nTempHp = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_SHIELD); int nCurMp = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MP); int nMaxMp = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MAX_MP); int nCamp = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_CAMP); int nLevel = 1; if (pkTargetID < 0) //PKTarget<0,代表当前不在PK状态 { nLevel = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_LEVEL); } else { nLevel = GameLogicAPI.getPlayerLevel(nHeroID); } int masterID = objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MASTER_UID); string sName = objev.Property.CreatureName; bool bIsMainHero = objev.IsHero; if (masterID > 0) { EntityView masterView = EntityFactory.getEntityViewByID(masterID); if (null != masterView && null != masterView.Property) { //英雄分身 if (blood.BloodType == BloodStyleType.Player) { nMaxHp = masterView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MAX_HP); nCurHp = masterView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_HP); nTempHp = masterView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_SHIELD); nCurMp = masterView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MP); nMaxMp = masterView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MAX_MP); nLevel = 1; if (pkTargetID < 0) //PKTarget<0,代表当前不在PK状态 { nLevel = masterView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_LEVEL); } else { nLevel = GameLogicAPI.getPlayerLevel(masterID); } sName = masterView.Property.CreatureName; } } } if (nHeroID != pkTargetID) { blood.SetCampType(nCamp); } blood.SetLevel(nLevel); blood.SetMaxValue(nMaxHp); blood.SetCurValue(nCurHp); blood.SetTempValue(nTempHp); blood.SetMpValue(nCurMp); blood.SetMpMaxValue(nMaxMp); if (!bIsMainHero) { blood.SetRoleName(sName); } else { blood.SetClosed(!actorBloodVisible); } }
/// <summary> /// 血条创建 /// </summary> /// <param name="objev">实体View</param> /// <param name="entityID">实体ID</param> /// <param name="host">实体Object</param> /// <param name="camType">阵营</param> /// <returns></returns> public UBlood CreatBlood(EntityView objev, int campType) { if (!bInit) { Trace.LogError("UBloodManager必须初始化!"); return(null); } if (null == objev || !objev.IsValid || null == objev.Property) { Trace.LogWarning("Blood--EntityView无效!"); return(null); } CreateBossBlood(); int entityID = objev.ID; if (m_BloodMap.ContainsKey(entityID)) { Trace.LogWarning(entityID + "已经有血条,返回已有的实例"); UBlood ub = m_BloodMap[entityID]; return(ub); } //按照策划要求,目前不创建己方小兵血条,其他己方物体不变 //if (objev.Flag == (int)MONSTER_SUB_TYPE.MONSTER_SUB_TYPE_SOLDIER && campType == (int)GFxCampTpye.CT_Friend && objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MASTER_UID) <= 0) //{ // return null; //} int hideFlag = (int)ENTITY_MASKFLAG.MASKFLAG_PROPCHANGE_HIDE_SAME_CAMP; if (campType == (int)GFxCampTpye.CT_Friend && (objev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_MASK) & hideFlag) == hideFlag) { return(null); } BloodStyleType bloodType = BloodStyleType.Player; if (objev.Type == ENTITY_TYPE.TYPE_PLAYER_ROLE) { bloodType = BloodStyleType.Player; } else if (objev.Type == ENTITY_TYPE.TYPE_MONSTER && objev.createinfo.nBloodStyle < (int)BloodStyleType.Boss) { bloodType = (BloodStyleType)objev.createinfo.nBloodStyle; } BloodCanvasNode bcn = new BloodCanvasNode(); UBlood blood = GetBlood(bloodType, ref bcn); if (null == blood) { return(null); } blood.Init(objev, campType, bloodType, bcn); m_BloodMap.Add(entityID, blood); ChangeMask(objev, true); SetProperty(objev, blood); return(blood); }