Exemplo n.º 1
0
    /// <summary>
    /// 通过类型获取节点对象
    /// </summary>
    /// <param name="targetType"></param>
    /// <returns></returns>
    private static GoodsNode GetGoodNode(EnumGoodsType targetType)
    {
        GoodsNode goodsNode = null;

        goodsNodeDic.TryGetValue(targetType, out goodsNode);
        return(goodsNode);
    }
Exemplo n.º 2
0
    /// <summary>
    /// 判断给定的父子关系是否存在
    /// </summary>
    /// <param name="child">子节点</param>
    /// <param name="parent">父节点</param>
    /// <param name="ignoreDeep">是否忽略深度,如果忽略则会忽略两者之间的节点</param>
    /// <returns></returns>
    public static bool IsChildGoodsNode(EnumGoodsType child, EnumGoodsType parent, bool ignoreDeep = true)
    {
        if ((int)child < (int)parent)
        {
            return(false);
        }
        if ((int)child - (int)parent > 1000000)
        {
            return(false);
        }
        GoodsNode childNode  = GetGoodNode(child);
        GoodsNode parentNode = GetGoodNode(parent);

        if (childNode == null || parentNode == null)
        {
            return(false);
        }
        if (!ignoreDeep)
        {
            return(Equals(childNode.Parent, parentNode));
        }
        else
        {
            GoodsNode _parentNode = childNode;
            while (_parentNode != null)
            {
                if (Equals(_parentNode, parentNode))
                {
                    return(true);
                }
                _parentNode = _parentNode.Parent;
            }
            return(false);
        }
    }
Exemplo n.º 3
0
        private void FillUiElement(GoodsNode sortedGoods, PremiumInfoUiElement infoUi)
        {
            string str         = sortedGoods.countableItemsPack.Pack.First <KeyValuePair <long, int> >().Value.ToString();
            string description = sortedGoods.specialOfferContentLocalization.Description;
            bool   flag        = sortedGoods.countableItemsPack.Pack.ContainsKey(-180272377L);
            string str3        = !flag ? string.Empty : "+";

            string[] textArray1 = new string[] { str, " ", description, " ", str3 };
            infoUi.daysText.text = string.Concat(textArray1);
            infoUi.crystalObject.SetActive(flag);
            infoUi.tabCrystalObject.SetActive(flag);
        }
Exemplo n.º 4
0
    /// <summary>
    /// 获取指定物品的大类
    /// </summary>
    /// <param name="child">子节点</param>
    /// <param name="deep">检索深度,默认为1(即上下层关系 )</param>
    /// <returns></returns>
    public static EnumGoodsType?GetParentGoodsType(EnumGoodsType child, int deep = 1)
    {
        GoodsNode childNode = GetGoodNode(child);

        if (childNode == null)
        {
            return(null);
        }
        GoodsNode parentNode = childNode;

        while (deep > 0 && parentNode != null)
        {
            deep--;
            parentNode = parentNode.Parent;
        }
        if (parentNode != null)
        {
            return(parentNode.GoodsType);
        }
        return(null);
    }
Exemplo n.º 5
0
 public void UpdateGoodsPrice(UpdateGoodsPriceEvent e, GoodsNode goods)
 {
     if (goods.Entity.HasComponent <GoodsPriceComponent>())
     {
         GoodsPriceComponent component = goods.Entity.GetComponent <GoodsPriceComponent>();
         component.Currency = e.Currency;
         component.Price    = e.Price;
     }
     else
     {
         GoodsPriceComponent component = new GoodsPriceComponent {
             Currency = e.Currency,
             Price    = e.Price
         };
         goods.Entity.AddComponent(component);
     }
     if (goods.Entity.HasComponent <SpecialOfferComponent>())
     {
         goods.Entity.GetComponent <SpecialOfferComponent>().Discount = e.DiscountCoeff * 100f;
     }
     base.ScheduleEvent <GoodsChangedEvent>(goods.Entity);
 }
Exemplo n.º 6
0
    /// <summary>
    /// 初始化节点
    /// </summary>
    static void InitGoodsNode()
    {
        root         = new GoodsNode();
        goodsNodeDic = new Dictionary <EnumGoodsType, GoodsNode>();
        int layer1         = 1000000;
        int layer2         = 100000;
        int layer3         = 1000;
        var tempDataStruct = Enum.GetValues(typeof(EnumGoodsType)).OfType <EnumGoodsType>()
                             .Select(temp => new { type = temp, value = (int)temp })
                             .OrderBy(temp => temp.value)
                             .ToArray();

        root.Childs = new List <GoodsNode>();
        for (int i = 1; i < 10; i++)//第一层
        {
            #region 第一层
            int layer1Min            = layer1 * i;
            int layer1Max            = layer1 * (i + 1);
            var layer1TempDataStruct = tempDataStruct.Where(temp => temp.value >= layer1Min && temp.value < layer1Max)
                                       .Select(temp => new { type = temp.type, value = temp.value % layer1, baseValue = temp.value })
                                       .OrderBy(temp => temp.value).ToArray();
            if (layer1TempDataStruct.Length == 0)
            {
                continue;
            }
            GoodsNode layer1TreeNode = new GoodsNode();
            layer1TreeNode.Childs    = new List <GoodsNode>();
            layer1TreeNode.GoodsType = layer1TempDataStruct[0].type;
            goodsNodeDic.Add(layer1TreeNode.GoodsType, layer1TreeNode);
            root.Childs.Add(layer1TreeNode);
            layer1TreeNode.Parent = root;
            #endregion
            for (int j = 1; j < 10; j++)//第二层
            {
                #region 第二层
                int layer2Min            = layer2 * j;
                int layer2Max            = layer2 * (j + 1);
                var layer2TempDataStruct = layer1TempDataStruct.Where(temp => temp.value >= layer2Min && temp.value < layer2Max)
                                           .Select(temp => new { type = temp.type, value = temp.value % layer2, baseValue = temp.baseValue })
                                           .OrderBy(temp => temp.value).ToArray();
                if (layer2TempDataStruct.Length == 0)
                {
                    continue;
                }
                GoodsNode layer2TreeNode = new GoodsNode();
                layer2TreeNode.Childs    = new List <GoodsNode>();
                layer2TreeNode.GoodsType = layer2TempDataStruct[0].type;
                goodsNodeDic.Add(layer2TreeNode.GoodsType, layer2TreeNode);
                layer1TreeNode.Childs.Add(layer2TreeNode);
                layer2TreeNode.Parent = layer1TreeNode;
                #endregion
                for (int k = 1; k < 100; k++)//第三层
                {
                    #region 第三层
                    int layer3Min            = layer3 * k;
                    int layer3Max            = layer3 * (k + 1);
                    var layer3TempDataStruct = layer2TempDataStruct.Where(temp => temp.value >= layer3Min && temp.value < layer3Max)
                                               .Select(temp => new { type = temp.type, value = temp.value % layer3, baseValue = temp.baseValue })
                                               .OrderBy(temp => temp.value).ToArray();
                    if (layer3TempDataStruct.Length == 0)
                    {
                        continue;
                    }
                    GoodsNode layer3TreeNode = new GoodsNode();
                    layer3TreeNode.Childs    = new List <GoodsNode>();
                    layer3TreeNode.GoodsType = layer3TempDataStruct[0].type;
                    goodsNodeDic.Add(layer3TreeNode.GoodsType, layer3TreeNode);
                    layer2TreeNode.Childs.Add(layer3TreeNode);
                    layer3TreeNode.Parent = layer2TreeNode;
                    #endregion
                    for (int l = 1; l < layer3TempDataStruct.Length; l++)//第四层
                    {
                        #region 第四层
                        GoodsNode layer4TreeNode = new GoodsNode();
                        layer4TreeNode.Childs    = new List <GoodsNode>();
                        layer4TreeNode.GoodsType = layer3TempDataStruct[l].type;
                        goodsNodeDic.Add(layer4TreeNode.GoodsType, layer4TreeNode);
                        layer3TreeNode.Childs.Add(layer4TreeNode);
                        layer4TreeNode.Parent = layer3TreeNode;
                        #endregion
                    }
                }
            }
        }
    }