private void OnTilesLinked(GameObject one, GameObject two) { /* Purpose: called whenever the user links two tiles * Parameters: one and two, should be game objects with TileController scripts */ //Debug.Log("OnTilesLinked: Start"); //We need to make sure these two objects are actually tiles //So, try to access their TileControllers TileController thisTile = one.GetComponent <TileController>(); TileController otherTile = two.GetComponent <TileController>(); //Debug.Log("Linking two tiles " + thisTile + " and " + otherTile); //If both turned out to be tiles . . . if (thisTile != null && otherTile != null) { //We now need to check which cards the two tiles belong to //since you can't combine or cancel tiles on the same card CardController otherCard = otherTile.GetCard(); CardController thisCard = thisTile.GetCard(); //If both tiles belong to cards if (otherCard != null && thisCard != null) { //Next, we need to find out if the cards that the two tiles belong //to themselves belong to even larger cards. CardController thisParentCard = thisCard.GetParentCard(); CardController otherParentCard = otherCard.GetParentCard(); //If the two cards are different //and if the two tiles represent the same prime factor if (!otherCard.Equals(thisCard) && otherTile.number == thisTile.number) { //If the numbers are on the same side of the equation //we'll need to factor out the common factor but not //simply "delete it" from the equation //Debug.Log(thisTile.GetSide()); //Debug.Log(otherTile.GetSide()); if (thisTile.GetSide().Equals(otherTile.GetSide())) { //If either the two cards do not themselves belong to //an even larger card or they both belong to the same card //Debug.Log("Here we are"); //Debug.Log("thisParentCard = " + thisParentCard); //Debug.Log("otherParentCard = " + otherParentCard); if ((thisParentCard == null && otherParentCard == null) || (thisParentCard != null && thisParentCard.Equals(otherParentCard))) { //Debug.Log("Removing tile other " + otherTile.name); //Then we've found a common factor and can extract it! //We need to remove the common tile from both the original cards //Debug.Log(name + " need to remove other card " + otherCard + " and otherTile = " + otherTile); otherCard.RemoveTile(otherTile, false); //if(thisCard.GetChildCards().Count == 0) //{ //Debug.Log("Removing tile this " + thisTile); thisCard.RemoveTile(thisTile, true); //} //Debug.Log("Our two parent cards are " + thisParentCard + " and " + otherParentCard); //If the larger card doesn't exist, we need to create it if (thisParentCard == null && otherParentCard == null) { //if (thisCard.GetChildCards().Count == 0) //{ //We need to add the two cards to a new common card //Debug.Log("Creating a new card"); List <TileController> commonTiles = new List <TileController>(); commonTiles.Add(otherTile); List <CardController> childCards = new List <CardController>(); foreach (CardController c in thisCard.GetChildCards()) { childCards.Add(c); } thisCard.MergeWith(otherCard, childCards, commonTiles); //} /*else * { * thisCard.AddChildCard(otherCard); * thisCard.ResizeTiles(); * } */ } else if (thisParentCard != null && thisParentCard.Equals(otherParentCard)) { //We just need to add the common factor to the tiles in //the larger card to which the two cards belong. Debug.Log("Adding extra tile"); thisParentCard.AddTile(otherTile); thisParentCard.AdjustCardSizeAndContents(); if (thisParentCard.GetParentCard()) { thisParentCard.GetParentCard().AdjustCardSizeAndContents(); } } //Debug.Log("Now to distribute Columns"); thisTile.GetSide().DistributeColumns(); } } else if (thisTile.GetSide().NumColumns() == 1 && otherTile.GetSide().NumColumns() == 1) { //If either the two cards do not themselves belong to //an even larger card or they both belong to the same card if (thisParentCard == null && otherParentCard == null) { //Debug.Log("Removing tile other"); //Then we've found a common factor and can extract it! //We need to remove the common tile from both the original cards //Debug.Log("Removing tiles"); otherCard.RemoveTile(otherTile, true); //Debug.Log("Removing tile this"); thisCard.RemoveTile(thisTile, true); if (otherCard.GetTiles().Count > 0) { //Debug.Log("Adjusts other"); otherCard.AdjustCardSizeAndContents(); } else if (otherCard.GetChildCards().Count > 0) { otherCard.GetColumn().FreeChildCards(); } if (thisCard.GetTiles().Count > 0) { //Debug.Log("Adjusts this"); thisCard.AdjustCardSizeAndContents(); } else if (thisCard.GetChildCards().Count > 0) { thisCard.GetColumn().FreeChildCards(); } } } } } currentBoard.GetSide(0).DistributeColumns(); currentBoard.GetSide(1).DistributeColumns(); } else //Now to check if these are cards { //We need to make sure these two objects are actually tiles //So, try to access their TileControllers CardController thisCard = one.GetComponent <CardController>(); CardController otherCard = two.GetComponent <CardController>(); if (thisCard && otherCard) { int newCardValue = thisCard.GetValue() + otherCard.GetValue(); Debug.Log(thisCard.GetValue() + " + " + otherCard.GetValue() + " = " + newCardValue); if (thisCard.transform.position.x < otherCard.transform.position.x) { otherCard.GetSide().RemoveCard(otherCard, true); thisCard.RemoveTiles(); AddTilesToThisCard(thisCard, newCardValue); } else { thisCard.GetSide().RemoveCard(thisCard, true); otherCard.RemoveTiles(); AddTilesToThisCard(otherCard, newCardValue); } } } }