Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        //缓存血条
        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);
            }
        }
Esempio n. 4
0
 public void SetMpMaxValue(int entityID, int v)
 {
     if (m_BloodMap.ContainsKey(entityID))
     {
         UBlood ub = m_BloodMap[entityID];
         ub.SetMpMaxValue(v);
     }
 }
Esempio n. 5
0
 public void SetRoleName(int entityID, string name)
 {
     if (m_BloodMap.ContainsKey(entityID))
     {
         UBlood ub = m_BloodMap[entityID];
         ub.SetRoleName(name);
     }
 }
Esempio n. 6
0
 public void SetVisible(int entityID, bool v)
 {
     if (m_BloodMap.ContainsKey(entityID))
     {
         UBlood ub = m_BloodMap[entityID];
         ub.SetVisible(v);
     }
 }
Esempio n. 7
0
 public void SetLevel(int entityID, int lev)
 {
     if (m_BloodMap.ContainsKey(entityID))
     {
         UBlood ub = m_BloodMap[entityID];
         ub.SetLevel(lev);
     }
 }
Esempio n. 8
0
        public void DestroyBlood(int entityID)
        {
            UBlood ub = FindBlood(entityID);

            if (ub != null)
            {
                DestroyBlood(ub);
            }
        }
Esempio n. 9
0
 public UBlood FindBlood(int entityID)
 {
     if (m_BloodMap.ContainsKey(entityID))
     {
         UBlood ub = m_BloodMap[entityID];
         return(ub);
     }
     return(null);
 }
Esempio n. 10
0
        public void SetCamType(int entityID, int camp)
        {
            if (entityID == pkTargetID)
            {
                return;
            }

            if (m_BloodMap.ContainsKey(entityID))
            {
                UBlood ub = m_BloodMap[entityID];
                ub.SetCampType(camp);
            }
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
        /// <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);
        }
Esempio n. 13
0
 /// <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();
 }
Esempio n. 14
0
        //预热血条
        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;
            }
        }
Esempio n. 15
0
        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));
                }
            }
        }
Esempio n. 16
0
        /// <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);
        }
Esempio n. 17
0
        /// <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);
            }
        }
Esempio n. 18
0
        /// <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);
        }