/*
* Delegate Handlers
*/
/*
* Collision Delegate Handler
*/
void onBubbleCollision(GameObject bubble)
{
// If the ball falls under the amoun of rows, the game is over
Vector2 bubblePos = BubbleMatrixControllerHelper.CellForPosition(bubble.transform.position, this.geometry, this._matrix.isBaselineAlignedLeft);
if ((int)bubblePos.x >= this.geometry.rows)
{
this.FinishGame(GameState.Loose);
return;
}
// Create the new bubble
BubbleController bubbleController = bubble.GetComponent <BubbleController>();
Vector2 matrixPosition = BubbleMatrixControllerHelper.CellForPosition(bubble.transform.position, this.geometry, this._matrix.isBaselineAlignedLeft);
// Update the model
this._matrix.insert(bubbleController.bubble, (int)matrixPosition.x, (int)matrixPosition.y);
// if we don't have to add a new row (because of the timer), move the bubble smoothly to its snapping point
if (!this._pendingToAddRow)
{
bubbleController.moveTo(BubbleMatrixControllerHelper.PositionForCell(matrixPosition, geometry, this._matrix.isBaselineAlignedLeft), 0.1f);
}
else
{
// otherwise move it rapidly
bubbleController.transform.position = BubbleMatrixControllerHelper.PositionForCell(matrixPosition, geometry, this._matrix.isBaselineAlignedLeft);
}
// Explode the bubbles that need to explode
// The the cluster of bubbles with a similar color as the colliding one
ArrayList cluster = this._matrix.colorCluster(bubbleController.bubble);
if (cluster.Count > 2)
{
// Explode the cluster
bubbleController.transform.position = BubbleMatrixControllerHelper.PositionForCell(matrixPosition, geometry, this._matrix.isBaselineAlignedLeft);
this.destroyCluster(cluster, true);
// Notify that bubbles have been removed
GameEvents.BubblesRemoved(cluster.Count, true);
}
// Drop the bubbles that fall
cluster = this._matrix.looseBubbles();
this.destroyCluster(cluster, false);
if (cluster.Count > 0)
{
GameEvents.BubblesRemoved(cluster.Count, false);
}
// Add a new Row of random bubbles if required
if (_pendingToAddRow)
{
this.addRow();
StartCoroutine("addRowScheduler");
}
// If there are no bubble lefts, win the game
if (this._matrix.bubbles.Count == 0)
{
this.FinishGame(GameState.Win);
return;
}
// Prepare the new bubble to shoot it
this._currentBubble = this.createBubble();
}