public NeighbourProp GetProp2(Block gem, int rw, int cl) { NeighbourProp neighbour = new NeighbourProp(); IEnumerable <Block> nhMatch = MatchesHorrizontally(gem, rw, cl); IEnumerable <Block> nvMatch = MatchesVertically(gem, rw, cl); if (GetBonusType1(nhMatch)) { if (neighbour.bt == 0) { neighbour.MatchType = 1; neighbour.bt = 1; } } if (GetBonusType1(nvMatch)) { if (neighbour.bt == 0) { neighbour.MatchType = 2; neighbour.bt = 1; } } //if (GetBonusType2(nhMatch)) //{ // nhMatch = GetEntireCol(gem); //} //if (GetBonusType2(nvMatch)) //{ // nvMatch = GetEntireRow(gem); //} //if (GetSwirlType1(nhMatch)) //{ // nhMatch = GetEntire5Match(gem); //} //if (GetSwirlType1(nvMatch)) //{ // nvMatch = GetEntire5Match(gem); //} foreach (var g in nhMatch) { neighbour.gemms.Add(g); OpenAppLevel.THIS.printScores += g.addScore; } foreach (var g in nvMatch) { neighbour.gemms.Add(g); OpenAppLevel.THIS.printScores += g.addScore; } return(neighbour); }
/// <summary> /// совпадения по вертикали и горизонтали /// </summary> /// <param name="gem"></param> /// <returns></returns> public NeighbourProp GetProp(Gem gem) { NeighbourProp neighbour = new NeighbourProp(); IEnumerable <Gem> nhMatch = MatchesHorrizontally(gem); IEnumerable <Gem> nvMatch = MatchesVertically(gem); if (GetBonusType1(nhMatch)) { if (neighbour.bt == 0) { neighbour.MatchType = 1; neighbour.bt = 1; } } if (GetBonusType1(nvMatch)) { if (neighbour.bt == 0) { neighbour.MatchType = 2; neighbour.bt = 1; } } if (GetBonusType2(nhMatch)) { nhMatch = GetEntireCol(gem); } if (GetBonusType2(nvMatch)) { nvMatch = GetEntireRow(gem); } if (GetSwirlType1(nhMatch)) { nhMatch = GetEntire5Match(gem); } if (GetSwirlType1(nvMatch)) { nvMatch = GetEntire5Match(gem); } foreach (var g in nhMatch) { neighbour.gemms.Add(g); } foreach (var g in nvMatch) { neighbour.gemms.Add(g); //if (neighbour.gemms.Contains(g)) neighbour.gemms.Add(g); } return(neighbour); }
/// <summary> /// Начинаем собирать совпадения /// </summary> /// <param name="raycast2"></param> /// <returns></returns> IEnumerator TryMatch(RaycastHit2D raycast2) { HitCandy GetHitGem2 = bubble2; if (GetHitGem.type == "swirl" && GetHitGem2.type != "ingredient" + 0 && GetHitGem2.type != "ingredient" + 1) { GetHitGem.type = GetHitGem2.type; } GetHitColor = GetHitColors[Random.Range(0, GetHitColors.Length)]; if (GetHitGem2.type == "swirl" && GetHitGem.type != "ingredient" + 0 && GetHitGem.type != "ingredient" + 1) { GetHitGem2.type = GetHitGem.type; } Block blockpr = null; if (CurrentBlk != null) { blockpr = CurrentBlk; } else { blockpr = GetHitGem.GetBlock; } var GetHitGemNeigbours = GetArrays.GetProp(blockpr, blockpr.row, blockpr.col); var GetHitGemNeigbours2 = GetArrays.GetProp(OpenAppLevel.THIS.blocksp[currentrow * OpenAppLevel.THIS.MaxX + currentcol], currentrow, currentcol); var matchs = GetHitGemNeigbours.GetGems.Union(GetHitGemNeigbours2.GetGems).Distinct(); movecount -= 1; if (matchs.Count() < 3) { //GetHitGem.transform.TweenPosition(0.2f, GetHitGem2.transform.position); //GetHitGem2.transform.TweenPosition(0.2f, GetHitGem.transform.position); yield return(new WaitForSeconds(0.2f)); GetArrays.Lastsp(); if (Ending == 1) { Ending = 0; } } string typebonus = ""; Block bonusGem = null; bool addsquareBonus = false; bool addswirlBonus = matchs.Count() == 5 && GetHitGemNeigbours.bt == 1 || GetHitGemNeigbours2.bt == 1; bool addBonus = matchs.Count() >= 4 && GetHitGemNeigbours.bt == 1 || GetHitGemNeigbours2.bt == 1; if (addBonus) { var sameTypeGem = GetHitGemNeigbours.gemms.Count() > 0 ? GetHitGem : GetHitGem2; bonusGem = sameTypeGem.GetBlock; if (matchs.Count() == 5) { //sameTypeGem.type = "swirl"; } typebonus = sameTypeGem.type; OpenAppLevel.THIS.StripeGameCount += 1; } while (matchs.Count() >= 2) { NeighbourProp neighbour = new NeighbourProp(); foreach (var i in matchs) { if (rightMouseButtonDown) { OpenAppLevel.THIS.printScores += 10; //GetArrays.gems[i.row, i.col] = new Gem(i.row, i.col); //GetArrays.gems[i.row, i.col].Nil(); CreateSquaresBlocks(i.col, i.row, CurrentBlk); if (i.candy != null) { Destroy(i.candy.gameObject); } neighbour = GetArrays.GetProp(i, i.row, i.col); //GetHitGem.transform.SetParent(GetHitGem.GetBlock.transform); GetBlockMove = GetHitGem.GetBlock; matchs = neighbour.GetGems; } else { neighbour = GetArrays.GetProp(i, i.row, i.col); CreateSquaresBlocks(i.col, i.row, CurrentBlk); matchs = neighbour.GetGems; } } //ScaleMatch() if (addBonus) { CreateBonus(GetHitGem.GetBlock, currentrow, currentcol, typebonus); } addBonus = false; //var bottom = matchs.Select(gem => gem.col).Distinct(); //var updateafterMatch = GetArrays.UpdateAfter(bottom); //var newSpawn = GetNeighbourProp(bottom); //int maxDistance = Mathf.Max(updateafterMatch.MaxDistance, newSpawn.MaxDistance); //Moved(maxDistance, newSpawn.GetGems); //Moved(updateafterMatch.MaxDistance, updateafterMatch.GetGems); if (neighbour.GetGems != null) { neighbour.MaxDistance = 2; yield return(new WaitForSeconds(0.05f * neighbour.MaxDistance)); matchs = neighbour.GetGems; if (rightMouseButtonDown) { currentHitList = matchs; } } else { yield return(new WaitForSeconds(0.05f)); } // * Mathf.Max(updateafterMatch.MaxDistance, newSpawn.MaxDistance)); //matchs = GetArrays.GetNeighbours(newSpawn.GetGems).Union(GetArrays.GetNeighbours(updateafterMatch.GetGems)).Distinct(); //matchs = GetArrays.GetNeighbours(updateafterMatch.GetGems).Distinct(); } //GetHitGem = GetCandyPrefab[Random.Range(0, GetCandyPrefab.Length)]; //bubble2 = GetHitGem; //BubleCursor.sprite = GetHitGem.GetComponent<SpriteRenderer>().sprite; if (Ending == 1) { levelsApps.LoadLB(); Ending = 2; } for (int i = 0; i < bug.Length; i++) { bug[i].transform.position = new Vector3(0, -123, 0); } if (rightMouseButtonDown) { state = 1; } else { state = 0; } //levelsApps.GetPause(); }