private void BindLava(IQueryable <GroupMember> members, List <Person> familyMembers, RockContext rockContext)
        {
            var items = new List <LavaData>();
            AttributeMatrixService attributeMatrixService = new AttributeMatrixService(rockContext);

            foreach (var person in familyMembers)
            {
                //Get all the camp group members for this person
                List <GroupMember> medicalMembers = members.Where(m => m.PersonId == person.Id).ToList();

                if (!medicalMembers.Any())
                {
                    continue;
                }

                person.LoadAttributes();
                var attribute       = person.GetAttributeValue(GetAttributeValue("MedicationMatrixKey"));
                var attributeMatrix = attributeMatrixService.Get(attribute.AsGuid());

                LavaData data = new LavaData
                {
                    Person      = person,
                    Groups      = medicalMembers.Select(m => m.Group).ToList(),
                    Medications = attributeMatrix
                };
                items.Add(data);
            }
            var mergeObjects = Rock.Lava.LavaHelper.GetCommonMergeFields(RockPage, CurrentPerson);

            mergeObjects.Add("Items", items);
            ltLava.Text = GetAttributeValue("LavaTemplate").ResolveMergeFields(mergeObjects);
        }
Example #2
0
    /// <summary>
    /// 計算排名
    /// </summary>
    private Dictionary<int, LavaData> CalculateRank(int[] roseNum,int[] lavaState,int[]bodyNum,bool[] isJoinGame)
    {
        bool isHaveButterfly = false;
        Dictionary<int,LavaData> tmpRankData = new Dictionary<int,LavaData>();
        //依規則進行排名 狀態 > 玫瑰數 > 身體節數
        //資料處理
        LavaData[] lavaData 	= new LavaData[Sct_DEFCONST.LAVA_AMOUNT_MAX];
        for(int lavaTag = 0; lavaTag< Sct_DEFCONST.LAVA_AMOUNT_MAX; lavaTag++)
        {
            lavaData[lavaTag] = new LavaData(lavaTag+1, lavaState[lavaTag], roseNum[lavaTag], bodyNum[lavaTag], isJoinGame[lavaTag]);
        }

        //狀態分類
        List<LavaData> lava = new List<LavaData>();
        List<LavaData> butterfly = new List<LavaData>();
        foreach(LavaData data in lavaData)
        {
            if(data.isJoinGame)
            {
                if(data.lavaState == 0) 		lava.Add(data);
                else if(data.lavaState == 1)	butterfly.Add (data);
            }
        }
        //參加人數
        int joinAmount = butterfly.Count + lava.Count;
        //決定排序
        if(butterfly.Count > 0) isHaveButterfly = true;
        else 					isHaveButterfly = false;
        #region 排序
        switch(joinAmount)
        {
            case 2:
            {
                //2個玩家
                if(isHaveButterfly)
                {
                    //有蝴蝶的排序
                    if(butterfly.Count == 1)
                    {
                        // 利用 Lambda 運算式,依玫瑰花數由大到小排序
                        //lava.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        tmpRankData.Add(1,butterfly[0]);//蝴蝶只有一隻(第一名)
                        tmpRankData.Add(2,lava[0]);
                    }
                    else if(butterfly.Count == 2)
                    {
                        // 利用 Lambda 運算式,依玫瑰花數由大到小排序
                        butterfly.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        //lava.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        tmpRankData.Add(1,butterfly[0]);
                        tmpRankData.Add(2,butterfly[1]);
                    }
                }
                else
                {
                    //沒蝴蝶的排序
                    lava.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                    tmpRankData.Add(1,lava[0]);
                    tmpRankData.Add(2,lava[1]);
                }
                break;
            }
            case 3:
            {
                //3個玩家
                if(isHaveButterfly)
                {
                    //有蝴蝶的排序
                    if(butterfly.Count == 1)
                    {
                        // 利用 Lambda 運算式,依玫瑰花數由大到小排序
                        lava.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        tmpRankData.Add(1,butterfly[0]);//蝴蝶只有一隻(第一名)
                        tmpRankData.Add(2,lava[0]);
                        tmpRankData.Add(3,lava[1]);
                    }
                    else if(butterfly.Count == 2)
                    {
                        // 利用 Lambda 運算式,依玫瑰花數由大到小排序
                        butterfly.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        //lava.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        tmpRankData.Add(1,butterfly[0]);
                        tmpRankData.Add(2,butterfly[1]);
                        tmpRankData.Add(3,lava[0]);
                    }
                    else if(butterfly.Count == 3)
                    {
                        butterfly.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        tmpRankData.Add(1,butterfly[0]);
                        tmpRankData.Add(2,butterfly[1]);
                        tmpRankData.Add(3,butterfly[2]);
                    }
                }
                else
                {
                    //沒蝴蝶的排序
                    lava.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                    tmpRankData.Add(1,lava[0]);
                    tmpRankData.Add(2,lava[1]);
                    tmpRankData.Add(3,lava[2]);
                }
                break;
            }
            case 4:
            {
                //4個玩家
                if(isHaveButterfly)
                {
                    //有蝴蝶的排序
                    if(butterfly.Count == 1)
                    {
                        // 利用 Lambda 運算式,依玫瑰花數由大到小排序
                        lava.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        tmpRankData.Add(1,butterfly[0]);//蝴蝶只有一隻(第一名)
                        tmpRankData.Add(2,lava[0]);
                        tmpRankData.Add(3,lava[1]);
                        tmpRankData.Add(4,lava[2]);
                    }
                    else if(butterfly.Count == 2)
                    {
                        // 利用 Lambda 運算式,依玫瑰花數由大到小排序
                        butterfly.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        lava.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        tmpRankData.Add(1,butterfly[0]);
                        tmpRankData.Add(2,butterfly[1]);
                        tmpRankData.Add(3,lava[0]);
                        tmpRankData.Add(4,lava[1]);
                    }
                    else if(butterfly.Count == 3)
                    {
                        butterfly.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        tmpRankData.Add(1,butterfly[0]);
                        tmpRankData.Add(2,butterfly[1]);
                        tmpRankData.Add(3,butterfly[2]);
                        tmpRankData.Add(4,lava[0]);
                    }
                    else if(butterfly.Count == 4)
                    {
                        butterfly.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                        tmpRankData.Add(1,butterfly[0]);
                        tmpRankData.Add(2,butterfly[1]);
                        tmpRankData.Add(3,butterfly[2]);
                        tmpRankData.Add(4,butterfly[3]);
                    }
                }
                else
                {
                    //沒蝴蝶的排序
                    lava.Sort((x, y) => {return -x.lavaRoseNum.CompareTo(y.lavaRoseNum);});
                    tmpRankData.Add(1,lava[0]);
                    tmpRankData.Add(2,lava[1]);
                    tmpRankData.Add(3,lava[2]);
                    tmpRankData.Add(4,lava[3]);
                }
                break;
            }
            default:
            {
                Debug.LogError("參加人數最少2人最多4人[錯誤參加人數" + joinAmount + "]");
                break;
            }
        }
        #endregion
        #if(Debug)
        foreach(KeyValuePair<int,LavaData> data in tmpRankData)
        {
            Debug.Log("排名:"+ data.Key + "蟲蟲編號:" +  data.Value.lavaNum + "蟲蟲狀態:" + data.Value.lavaState + "玫瑰花數:" + data.Value.lavaRoseNum + "參加遊戲:" + data.Value.isJoinGame);
        }
        #endif

        return tmpRankData;
    }