private void concludeEliminateStats(AdjacentPawnList pawnList) { if (!_eliminateStats.enableStats) { return; } ++_eliminateStats.comboByLastMove; _eliminateStats.continuousEliminatePawnCount += pawnList.finalList.Count; _eliminateStats.continuousEliminatePawnListCount += pawnList.mergedLists.Count; if (!_comboUpdatedThisTurn) { ++_combo; _comboUpdatedThisTurn = true; if (_combo > _gameRecord.maxCombo) { _gameRecord.maxCombo = _combo; } } invalidUI(); if (pawnList.maxPawnInListBeforeMerge >= BACKWARDS_GAIN_ELIMINATE_PAWN_PER_MOVE) { modifyBackwardsChance(1); } if (!_eliminateStats.trashChanceGained) { if (_eliminateStats.continuousEliminatePawnListCount >= TRASH_GAIN_ELIMINATE_ROW_PER_MOVE) { modifyTrashChance(1); _eliminateStats.trashChanceGained = true; } } }
private IEnumerator eliminateAdjacentPawns() { _gameState = GameState.JudgingElimination; for (int i = 0; i < _pawnListToEliminate.Count; ++i) { AdjacentPawnList pawnList = _pawnListToEliminate[i]; concludeEliminateStats(pawnList); int addedScore = calculateScore(pawnList.finalList, _combo); Pawn firstPawn = pawnList.finalList[0]; modifyScore(addedScore, firstPawn.type); checkAchieve(firstPawn.neighborOppositeCount, firstPawn.type); int eliminateSoundLevel = firstPawn.neighborOppositeCount / 2 + 1; SoundHub.instance().play("Eliminate" + eliminateSoundLevel); foreach (Pawn pawn in pawnList.finalList) { pawn.destroy(true, "eliminate"); } pawnList.finalList.Clear(); yield return new WaitForSeconds(0.3f); } _pawnListToEliminate.Clear(); clearGridFlags(); updateScenePawnState(); }
private void mergeAdjacentPawnList(PawnType type, AdjacentPawnList targetList, List<Pawn> srcList) { foreach (Pawn pawn in srcList) { _gridFlags[(int)type, pawn.gridIndex].adjacentPawnList = targetList; if (!targetList.finalList.Contains(pawn)) { targetList.finalList.Add(pawn); } } }
private bool checkAndAddAdjacentPawnList(PawnType checkType, List<Pawn> adjacentPawnList) { if (adjacentPawnList.Count >= ADJACENT_COUNT_TO_ELIMINATE) { // set grid flag AdjacentPawnList preCollectedAdjacentList = null; foreach (Pawn pawnInAdjacent in adjacentPawnList) { GridFlag gridFlag = _gridFlags[(int)checkType, pawnInAdjacent.gridIndex]; if (gridFlag.adjacentPawnList != null) { preCollectedAdjacentList = gridFlag.adjacentPawnList; break; } } if (preCollectedAdjacentList != null) { // merge adjacent list available HashSet<AdjacentPawnList> differentAdjacentLists = new HashSet<AdjacentPawnList>(); foreach (Pawn pawnInAdjacent in adjacentPawnList) { GridFlag gridFlag = _gridFlags[(int)checkType, pawnInAdjacent.gridIndex]; if (gridFlag.adjacentPawnList != null) { if (gridFlag.adjacentPawnList != preCollectedAdjacentList) { mergeAdjacentPawnList(checkType, preCollectedAdjacentList, gridFlag.adjacentPawnList.finalList); differentAdjacentLists.Add(gridFlag.adjacentPawnList); } } else { _gridFlags[(int)checkType, pawnInAdjacent.gridIndex].adjacentPawnList = preCollectedAdjacentList; preCollectedAdjacentList.finalList.Add(pawnInAdjacent); differentAdjacentLists.Add(null); } } foreach (AdjacentPawnList list in differentAdjacentLists) { if (list != null) { preCollectedAdjacentList.mergedLists.AddRange(list.mergedLists); } else { preCollectedAdjacentList.mergedLists.Add(adjacentPawnList); } if (list != null && list.maxPawnInListBeforeMerge > preCollectedAdjacentList.maxPawnInListBeforeMerge) { preCollectedAdjacentList.maxPawnInListBeforeMerge = list.maxPawnInListBeforeMerge; } } preCollectedAdjacentList.removeOverlappedMergedLists(); if (adjacentPawnList.Count > preCollectedAdjacentList.maxPawnInListBeforeMerge) { preCollectedAdjacentList.maxPawnInListBeforeMerge = adjacentPawnList.Count; } Debug.Log ("update eliminate list:" + preCollectedAdjacentList.ToString()); } else { AdjacentPawnList newAdjacentList = new AdjacentPawnList(); newAdjacentList.finalList.AddRange(adjacentPawnList); newAdjacentList.maxPawnInListBeforeMerge = adjacentPawnList.Count; newAdjacentList.mergedLists.Add(adjacentPawnList); foreach (Pawn pawnInAdjacent in adjacentPawnList) { _gridFlags[(int)checkType, pawnInAdjacent.gridIndex].adjacentPawnList = newAdjacentList; } Debug.Log ("add eliminate list:" + newAdjacentList.ToString()); _pawnListToEliminate.Add(newAdjacentList); } return true; } return false; }