Example #1
0
	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;
			}
		}
	}
Example #2
0
	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();
	}
Example #3
0
	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);
			}
		}
	}
Example #4
0
	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;
	}