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); }
/// <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; }