WXMC/.svn/pristine/75/75f7b5b4a4151dbc6a7bb29ef708e5ccc670f4b5.svn-base
2024-12-04 16:18:46 +08:00

3157 lines
109 KiB
Plaintext

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Item : MonoBehaviour
{
[Header("Parent")]
public Board board;
public Node node;
[Header("Variables")]
public int color;
public ITEM_TYPE type;
public ITEM_TYPE next = ITEM_TYPE.NONE;
public BREAKER_EFFECT effect = BREAKER_EFFECT.NORMAL;
[Header("Check")]
public bool drag;
public bool nextSound = true;
public bool destroying;
public bool dropping;
public bool changing;
public Vector3 mousePostion = Vector3.zero;
public Vector3 deltaPosition = Vector3.zero;
public Vector3 swapDirection = Vector3.zero;
[Header("Swap")]
public Node neighborNode;
public Item swapItem;
[Header("Drop")]
public List<Vector3> dropPath;
[Header("Hero")]
public PuzzleHero puzzleHero;
public SpriteRenderer brokenSprite;
public List<Sprite> brokenSprites;
public SpriteRenderer fillSprite;
void Update()
{
// if a item is dragged
if (drag)
{
deltaPosition = mousePostion - GetMousePosition();
if (swapDirection == Vector3.zero)
{
SwapDirection(deltaPosition);
}
}
}
#region Type
public static void GetColorAndPrefab(ITEM_TYPE itemType, out int color, out GameObject prefab)
{
color = 0;
GameObject piece = null;
switch (itemType)
{
case ITEM_TYPE.COOKIE_RAINBOW:
piece = Resources.Load(Configure.CookieRainbow()) as GameObject;
break;
case ITEM_TYPE.COOKIE_1:
color = 1;
piece = Resources.Load(Configure.Cookie1()) as GameObject;
break;
case ITEM_TYPE.COOKIE_1_COLUMN_BREAKER:
color = 1;
piece = Resources.Load(Configure.Cookie1ColumnBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_1_ROW_BREAKER:
color = 1;
piece = Resources.Load(Configure.Cookie1RowBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_1_BOMB_BREAKER:
color = 1;
piece = Resources.Load(Configure.Cookie1BombBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_2:
color = 2;
piece = Resources.Load(Configure.Cookie2()) as GameObject;
break;
case ITEM_TYPE.COOKIE_2_COLUMN_BREAKER:
color = 2;
piece = Resources.Load(Configure.Cookie2ColumnBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_2_ROW_BREAKER:
color = 2;
piece = Resources.Load(Configure.Cookie2RowBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_2_BOMB_BREAKER:
color = 2;
piece = Resources.Load(Configure.Cookie2BombBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_3:
color = 3;
piece = Resources.Load(Configure.Cookie3()) as GameObject;
break;
case ITEM_TYPE.COOKIE_3_COLUMN_BREAKER:
color = 3;
piece = Resources.Load(Configure.Cookie3ColumnBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_3_ROW_BREAKER:
color = 3;
piece = Resources.Load(Configure.Cookie3RowBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_3_BOMB_BREAKER:
color = 3;
piece = Resources.Load(Configure.Cookie3BombBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_4:
color = 4;
piece = Resources.Load(Configure.Cookie4()) as GameObject;
break;
case ITEM_TYPE.COOKIE_4_COLUMN_BREAKER:
color = 4;
piece = Resources.Load(Configure.Cookie4ColumnBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_4_ROW_BREAKER:
color = 4;
piece = Resources.Load(Configure.Cookie4RowBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_4_BOMB_BREAKER:
color = 4;
piece = Resources.Load(Configure.Cookie4BombBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_5:
color = 5;
piece = Resources.Load(Configure.Cookie5()) as GameObject;
break;
case ITEM_TYPE.COOKIE_5_COLUMN_BREAKER:
color = 5;
piece = Resources.Load(Configure.Cookie5ColumnBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_5_ROW_BREAKER:
color = 5;
piece = Resources.Load(Configure.Cookie5RowBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_5_BOMB_BREAKER:
color = 5;
piece = Resources.Load(Configure.Cookie5BombBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_6:
color = 6;
piece = Resources.Load(Configure.Cookie6()) as GameObject;
break;
case ITEM_TYPE.COOKIE_6_COLUMN_BREAKER:
color = 6;
piece = Resources.Load(Configure.Cookie6ColumnBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_6_ROW_BREAKER:
color = 6;
piece = Resources.Load(Configure.Cookie6RowBreaker()) as GameObject;
break;
case ITEM_TYPE.COOKIE_6_BOMB_BREAKER:
color = 6;
piece = Resources.Load(Configure.Cookie6BombBreaker()) as GameObject;
break;
case ITEM_TYPE.MARSHMALLOW:
piece = Resources.Load(Configure.Marshmallow()) as GameObject;
break;
case ITEM_TYPE.GINGERBREAD_1:
color = 1;
piece = Resources.Load(Configure.Gingerbread1()) as GameObject;
break;
case ITEM_TYPE.GINGERBREAD_2:
color = 2;
piece = Resources.Load(Configure.Gingerbread2()) as GameObject;
break;
case ITEM_TYPE.GINGERBREAD_3:
color = 3;
piece = Resources.Load(Configure.Gingerbread3()) as GameObject;
break;
case ITEM_TYPE.GINGERBREAD_4:
color = 4;
piece = Resources.Load(Configure.Gingerbread4()) as GameObject;
break;
case ITEM_TYPE.GINGERBREAD_5:
color = 5;
piece = Resources.Load(Configure.Gingerbread5()) as GameObject;
break;
case ITEM_TYPE.GINGERBREAD_6:
color = 6;
piece = Resources.Load(Configure.Gingerbread6()) as GameObject;
break;
case ITEM_TYPE.CHOCOLATE_1_LAYER:
piece = Resources.Load(Configure.Chocolate1()) as GameObject;
break;
case ITEM_TYPE.CHOCOLATE_2_LAYER:
piece = Resources.Load(Configure.Chocolate2()) as GameObject;
break;
case ITEM_TYPE.CHOCOLATE_3_LAYER:
piece = Resources.Load(Configure.Chocolate3()) as GameObject;
break;
case ITEM_TYPE.CHOCOLATE_4_LAYER:
piece = Resources.Load(Configure.Chocolate4()) as GameObject;
break;
case ITEM_TYPE.CHOCOLATE_5_LAYER:
piece = Resources.Load(Configure.Chocolate5()) as GameObject;
break;
case ITEM_TYPE.CHOCOLATE_6_LAYER:
piece = Resources.Load(Configure.Chocolate6()) as GameObject;
break;
case ITEM_TYPE.ROCK_CANDY_1:
color = 1;
piece = Resources.Load(Configure.RockCandy1()) as GameObject;
break;
case ITEM_TYPE.ROCK_CANDY_2:
color = 2;
piece = Resources.Load(Configure.RockCandy2()) as GameObject;
break;
case ITEM_TYPE.ROCK_CANDY_3:
color = 3;
piece = Resources.Load(Configure.RockCandy3()) as GameObject;
break;
case ITEM_TYPE.ROCK_CANDY_4:
color = 4;
piece = Resources.Load(Configure.RockCandy4()) as GameObject;
break;
case ITEM_TYPE.ROCK_CANDY_5:
color = 5;
piece = Resources.Load(Configure.RockCandy5()) as GameObject;
break;
case ITEM_TYPE.ROCK_CANDY_6:
color = 6;
piece = Resources.Load(Configure.RockCandy6()) as GameObject;
break;
case ITEM_TYPE.COOKIE_1_X_BREAKER:
piece = Resources.Load(Configure.Cookie1XBreaker()) as GameObject;
color = 1;
break;
case ITEM_TYPE.COOKIE_2_X_BREAKER:
piece = Resources.Load(Configure.Cookie2XBreaker()) as GameObject;
color = 2;
break;
case ITEM_TYPE.COOKIE_3_X_BREAKER:
piece = Resources.Load(Configure.Cookie3XBreaker()) as GameObject;
color = 3;
break;
case ITEM_TYPE.COOKIE_4_X_BREAKER:
piece = Resources.Load(Configure.Cookie4XBreaker()) as GameObject;
color = 4;
break;
case ITEM_TYPE.COOKIE_5_X_BREAKER:
piece = Resources.Load(Configure.Cookie5XBreaker()) as GameObject;
color = 5;
break;
case ITEM_TYPE.COOKIE_6_X_BREAKER:
piece = Resources.Load(Configure.Cookie6XBreaker()) as GameObject;
color = 6;
break;
case ITEM_TYPE.COLLECTIBLE_1:
piece = Resources.Load(Configure.Collectible1()) as GameObject;
color = 1;
break;
case ITEM_TYPE.COLLECTIBLE_2:
piece = Resources.Load(Configure.Collectible2()) as GameObject;
color = 2;
break;
case ITEM_TYPE.COLLECTIBLE_3:
piece = Resources.Load(Configure.Collectible3()) as GameObject;
color = 3;
break;
case ITEM_TYPE.COLLECTIBLE_4:
piece = Resources.Load(Configure.Collectible4()) as GameObject;
color = 4;
break;
case ITEM_TYPE.COLLECTIBLE_5:
piece = Resources.Load(Configure.Collectible5()) as GameObject;
color = 5;
break;
case ITEM_TYPE.COLLECTIBLE_6:
piece = Resources.Load(Configure.Collectible6()) as GameObject;
color = 6;
break;
case ITEM_TYPE.COLLECTIBLE_7:
piece = Resources.Load(Configure.Collectible7()) as GameObject;
color = 7;
break;
case ITEM_TYPE.COLLECTIBLE_8:
piece = Resources.Load(Configure.Collectible8()) as GameObject;
color = 8;
break;
case ITEM_TYPE.COLLECTIBLE_9:
piece = Resources.Load(Configure.Collectible9()) as GameObject;
color = 9;
break;
case ITEM_TYPE.COLLECTIBLE_10:
piece = Resources.Load(Configure.Collectible10()) as GameObject;
color = 10;
break;
case ITEM_TYPE.COLLECTIBLE_11:
piece = Resources.Load(Configure.Collectible11()) as GameObject;
color = 11;
break;
case ITEM_TYPE.COLLECTIBLE_12:
piece = Resources.Load(Configure.Collectible12()) as GameObject;
color = 12;
break;
case ITEM_TYPE.COLLECTIBLE_13:
piece = Resources.Load(Configure.Collectible13()) as GameObject;
color = 13;
break;
case ITEM_TYPE.COLLECTIBLE_14:
piece = Resources.Load(Configure.Collectible14()) as GameObject;
color = 14;
break;
case ITEM_TYPE.COLLECTIBLE_15:
piece = Resources.Load(Configure.Collectible15()) as GameObject;
color = 15;
break;
case ITEM_TYPE.COLLECTIBLE_16:
piece = Resources.Load(Configure.Collectible16()) as GameObject;
color = 16;
break;
case ITEM_TYPE.COLLECTIBLE_17:
piece = Resources.Load(Configure.Collectible17()) as GameObject;
color = 17;
break;
case ITEM_TYPE.COLLECTIBLE_18:
piece = Resources.Load(Configure.Collectible18()) as GameObject;
color = 18;
break;
case ITEM_TYPE.COLLECTIBLE_19:
piece = Resources.Load(Configure.Collectible19()) as GameObject;
color = 19;
break;
case ITEM_TYPE.COLLECTIBLE_20:
piece = Resources.Load(Configure.Collectible20()) as GameObject;
color = 20;
break;
}
prefab = piece;
}
public bool Movable()
{
if (type == ITEM_TYPE.CHOCOLATE_1_LAYER ||
type == ITEM_TYPE.CHOCOLATE_2_LAYER ||
type == ITEM_TYPE.CHOCOLATE_3_LAYER ||
type == ITEM_TYPE.CHOCOLATE_4_LAYER ||
type == ITEM_TYPE.CHOCOLATE_5_LAYER ||
type == ITEM_TYPE.CHOCOLATE_6_LAYER ||
type == ITEM_TYPE.ROCK_CANDY_1 ||
type == ITEM_TYPE.ROCK_CANDY_2 ||
type == ITEM_TYPE.ROCK_CANDY_3 ||
type == ITEM_TYPE.ROCK_CANDY_4 ||
type == ITEM_TYPE.ROCK_CANDY_5 ||
type == ITEM_TYPE.ROCK_CANDY_6)
{
return false;
}
// cage
if (node.cage != null)
{
if (node.cage.type == CAGE_TYPE.CAGE_1)
{
return false;
}
}
return true;
}
public bool Matchable()
{
if (type == ITEM_TYPE.CHOCOLATE_1_LAYER ||
type == ITEM_TYPE.CHOCOLATE_2_LAYER ||
type == ITEM_TYPE.CHOCOLATE_3_LAYER ||
type == ITEM_TYPE.CHOCOLATE_4_LAYER ||
type == ITEM_TYPE.CHOCOLATE_5_LAYER ||
type == ITEM_TYPE.CHOCOLATE_6_LAYER ||
type == ITEM_TYPE.ROCK_CANDY_1 ||
type == ITEM_TYPE.ROCK_CANDY_2 ||
type == ITEM_TYPE.ROCK_CANDY_3 ||
type == ITEM_TYPE.ROCK_CANDY_4 ||
type == ITEM_TYPE.ROCK_CANDY_5 ||
type == ITEM_TYPE.ROCK_CANDY_6 ||
type == ITEM_TYPE.MARSHMALLOW ||
type == ITEM_TYPE.COOKIE_RAINBOW ||
type == ITEM_TYPE.COLLECTIBLE_1 ||
type == ITEM_TYPE.COLLECTIBLE_2 ||
type == ITEM_TYPE.COLLECTIBLE_3 ||
type == ITEM_TYPE.COLLECTIBLE_4 ||
type == ITEM_TYPE.COLLECTIBLE_5 ||
type == ITEM_TYPE.COLLECTIBLE_6 ||
type == ITEM_TYPE.COLLECTIBLE_7 ||
type == ITEM_TYPE.COLLECTIBLE_8 ||
type == ITEM_TYPE.COLLECTIBLE_9)
{
return false;
}
return true;
}
public bool Destroyable()
{
if (type == ITEM_TYPE.COLLECTIBLE_1 ||
type == ITEM_TYPE.COLLECTIBLE_2 ||
type == ITEM_TYPE.COLLECTIBLE_3 ||
type == ITEM_TYPE.COLLECTIBLE_4 ||
type == ITEM_TYPE.COLLECTIBLE_5 ||
type == ITEM_TYPE.COLLECTIBLE_6 ||
type == ITEM_TYPE.COLLECTIBLE_7 ||
type == ITEM_TYPE.COLLECTIBLE_8 ||
type == ITEM_TYPE.COLLECTIBLE_9 ||
type == ITEM_TYPE.COLLECTIBLE_10 ||
type == ITEM_TYPE.COLLECTIBLE_11 ||
type == ITEM_TYPE.COLLECTIBLE_12 ||
type == ITEM_TYPE.COLLECTIBLE_13 ||
type == ITEM_TYPE.COLLECTIBLE_14 ||
type == ITEM_TYPE.COLLECTIBLE_15 ||
type == ITEM_TYPE.COLLECTIBLE_16 ||
type == ITEM_TYPE.COLLECTIBLE_17 ||
type == ITEM_TYPE.COLLECTIBLE_18 ||
type == ITEM_TYPE.COLLECTIBLE_19 ||
type == ITEM_TYPE.COLLECTIBLE_20)
{
return false;
}
return true;
}
public bool IsCookie()
{
if (type == ITEM_TYPE.COOKIE_1 ||
type == ITEM_TYPE.COOKIE_2 ||
type == ITEM_TYPE.COOKIE_3 ||
type == ITEM_TYPE.COOKIE_4 ||
type == ITEM_TYPE.COOKIE_5 ||
type == ITEM_TYPE.COOKIE_6)
{
return true;
}
return false;
}
public bool IsCollectible()
{
if (type == ITEM_TYPE.COLLECTIBLE_1 ||
type == ITEM_TYPE.COLLECTIBLE_2 ||
type == ITEM_TYPE.COLLECTIBLE_3 ||
type == ITEM_TYPE.COLLECTIBLE_4 ||
type == ITEM_TYPE.COLLECTIBLE_5 ||
type == ITEM_TYPE.COLLECTIBLE_6 ||
type == ITEM_TYPE.COLLECTIBLE_7 ||
type == ITEM_TYPE.COLLECTIBLE_8 ||
type == ITEM_TYPE.COLLECTIBLE_9 ||
type == ITEM_TYPE.COLLECTIBLE_10 ||
type == ITEM_TYPE.COLLECTIBLE_11 ||
type == ITEM_TYPE.COLLECTIBLE_12 ||
type == ITEM_TYPE.COLLECTIBLE_13 ||
type == ITEM_TYPE.COLLECTIBLE_14 ||
type == ITEM_TYPE.COLLECTIBLE_15 ||
type == ITEM_TYPE.COLLECTIBLE_16 ||
type == ITEM_TYPE.COLLECTIBLE_17 ||
type == ITEM_TYPE.COLLECTIBLE_18 ||
type == ITEM_TYPE.COLLECTIBLE_19 ||
type == ITEM_TYPE.COLLECTIBLE_20)
{
return true;
}
return false;
}
public void SetHero(PuzzleHero hero)
{
puzzleHero = hero;
puzzleHero.OnAfterHealthChanged += OnAfterHealthChanged;
OnAfterHealthChanged();
puzzleHero.OnAfterSkillEnergyChanged += OnAfterEnergyChanged;
OnAfterEnergyChanged();
}
private void OnAfterHealthChanged()
{
float ratio = (float)puzzleHero.Health.Value / (float)puzzleHero.MaxHealth.Value;
if (ratio == 1)
{
brokenSprite.gameObject.SetActive(false);
}
else
{
float percent = 1f / (brokenSprites.Count - 1);
for (int i = 0; i < brokenSprites.Count; i++)
{
if (ratio <= percent * i)
{
brokenSprite.gameObject.SetActive(true);
brokenSprite.sprite = brokenSprites[brokenSprites.Count - 1 - i];
break;
}
}
}
}
private void OnAfterEnergyChanged()
{
float ratio = (float)puzzleHero.SkillEnergy.Value / (float)puzzleHero.MaxSkillEnergy.Value;
fillSprite.size = new Vector2(1, ratio);
}
public bool IsGingerbread()
{
if (type == ITEM_TYPE.GINGERBREAD_1 ||
type == ITEM_TYPE.GINGERBREAD_2 ||
type == ITEM_TYPE.GINGERBREAD_3 ||
type == ITEM_TYPE.GINGERBREAD_4 ||
type == ITEM_TYPE.GINGERBREAD_5 ||
type == ITEM_TYPE.GINGERBREAD_6)
{
return true;
}
return false;
}
public bool IsMarshmallow()
{
if (type == ITEM_TYPE.MARSHMALLOW)
{
return true;
}
return false;
}
public bool IsChocolate()
{
if (type == ITEM_TYPE.CHOCOLATE_1_LAYER ||
type == ITEM_TYPE.CHOCOLATE_2_LAYER ||
type == ITEM_TYPE.CHOCOLATE_3_LAYER ||
type == ITEM_TYPE.CHOCOLATE_4_LAYER ||
type == ITEM_TYPE.CHOCOLATE_5_LAYER ||
type == ITEM_TYPE.CHOCOLATE_6_LAYER)
{
return true;
}
return false;
}
public bool IsRockCandy()
{
if (type == ITEM_TYPE.ROCK_CANDY_1 ||
type == ITEM_TYPE.ROCK_CANDY_2 ||
type == ITEM_TYPE.ROCK_CANDY_3 ||
type == ITEM_TYPE.ROCK_CANDY_4 ||
type == ITEM_TYPE.ROCK_CANDY_5 ||
type == ITEM_TYPE.ROCK_CANDY_6)
{
return true;
}
return false;
}
public ITEM_TYPE OriginCookieType()
{
var order = board.NodeOrder(node.i, node.j);
return LevelLoader.instance.itemLayerData[order];
}
// check if breaker is row or column
ITEM_TYPE GetColRowBreaker(ITEM_TYPE check, Vector3 direction)
{
//print("direction: " + direction);
if (Mathf.Abs(direction.x) > Mathf.Abs(direction.y))
{
//print("row");
switch (check)
{
case ITEM_TYPE.COOKIE_1:
case ITEM_TYPE.COOKIE_1_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_1_ROW_BREAKER:
case ITEM_TYPE.COOKIE_1_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_1_X_BREAKER:
return ITEM_TYPE.COOKIE_1_ROW_BREAKER;
case ITEM_TYPE.COOKIE_2:
case ITEM_TYPE.COOKIE_2_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_2_ROW_BREAKER:
case ITEM_TYPE.COOKIE_2_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_2_X_BREAKER:
return ITEM_TYPE.COOKIE_2_ROW_BREAKER;
case ITEM_TYPE.COOKIE_3:
case ITEM_TYPE.COOKIE_3_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_3_ROW_BREAKER:
case ITEM_TYPE.COOKIE_3_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_3_X_BREAKER:
return ITEM_TYPE.COOKIE_3_ROW_BREAKER;
case ITEM_TYPE.COOKIE_4:
case ITEM_TYPE.COOKIE_4_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_4_ROW_BREAKER:
case ITEM_TYPE.COOKIE_4_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_4_X_BREAKER:
return ITEM_TYPE.COOKIE_4_ROW_BREAKER;
case ITEM_TYPE.COOKIE_5:
case ITEM_TYPE.COOKIE_5_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_5_ROW_BREAKER:
case ITEM_TYPE.COOKIE_5_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_5_X_BREAKER:
return ITEM_TYPE.COOKIE_5_ROW_BREAKER;
case ITEM_TYPE.COOKIE_6:
case ITEM_TYPE.COOKIE_6_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_6_ROW_BREAKER:
case ITEM_TYPE.COOKIE_6_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_6_X_BREAKER:
return ITEM_TYPE.COOKIE_6_ROW_BREAKER;
default:
return ITEM_TYPE.NONE;
}
}
else
{
//print("colmn");
switch (check)
{
case ITEM_TYPE.COOKIE_1:
case ITEM_TYPE.COOKIE_1_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_1_ROW_BREAKER:
case ITEM_TYPE.COOKIE_1_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_1_X_BREAKER:
return ITEM_TYPE.COOKIE_1_COLUMN_BREAKER;
case ITEM_TYPE.COOKIE_2:
case ITEM_TYPE.COOKIE_2_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_2_ROW_BREAKER:
case ITEM_TYPE.COOKIE_2_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_2_X_BREAKER:
return ITEM_TYPE.COOKIE_2_COLUMN_BREAKER;
case ITEM_TYPE.COOKIE_3:
case ITEM_TYPE.COOKIE_3_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_3_ROW_BREAKER:
case ITEM_TYPE.COOKIE_3_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_3_X_BREAKER:
return ITEM_TYPE.COOKIE_3_COLUMN_BREAKER;
case ITEM_TYPE.COOKIE_4:
case ITEM_TYPE.COOKIE_4_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_4_ROW_BREAKER:
case ITEM_TYPE.COOKIE_4_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_4_X_BREAKER:
return ITEM_TYPE.COOKIE_4_COLUMN_BREAKER;
case ITEM_TYPE.COOKIE_5:
case ITEM_TYPE.COOKIE_5_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_5_ROW_BREAKER:
case ITEM_TYPE.COOKIE_5_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_5_X_BREAKER:
return ITEM_TYPE.COOKIE_5_COLUMN_BREAKER;
case ITEM_TYPE.COOKIE_6:
case ITEM_TYPE.COOKIE_6_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_6_ROW_BREAKER:
case ITEM_TYPE.COOKIE_6_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_6_X_BREAKER:
return ITEM_TYPE.COOKIE_6_COLUMN_BREAKER;
default:
return ITEM_TYPE.NONE;
}
}
}
public bool IsBombBreaker(ITEM_TYPE check)
{
if (check == ITEM_TYPE.COOKIE_1_BOMB_BREAKER ||
check == ITEM_TYPE.COOKIE_2_BOMB_BREAKER ||
check == ITEM_TYPE.COOKIE_3_BOMB_BREAKER ||
check == ITEM_TYPE.COOKIE_4_BOMB_BREAKER ||
check == ITEM_TYPE.COOKIE_5_BOMB_BREAKER ||
check == ITEM_TYPE.COOKIE_6_BOMB_BREAKER)
{
return true;
}
return false;
}
public bool IsXBreaker(ITEM_TYPE check)
{
if (check == ITEM_TYPE.COOKIE_1_X_BREAKER ||
check == ITEM_TYPE.COOKIE_2_X_BREAKER ||
check == ITEM_TYPE.COOKIE_3_X_BREAKER ||
check == ITEM_TYPE.COOKIE_4_X_BREAKER ||
check == ITEM_TYPE.COOKIE_5_X_BREAKER ||
check == ITEM_TYPE.COOKIE_6_X_BREAKER)
{
return true;
}
return false;
}
public bool IsColumnBreaker(ITEM_TYPE check)
{
if (check == ITEM_TYPE.COOKIE_1_COLUMN_BREAKER ||
check == ITEM_TYPE.COOKIE_2_COLUMN_BREAKER ||
check == ITEM_TYPE.COOKIE_3_COLUMN_BREAKER ||
check == ITEM_TYPE.COOKIE_4_COLUMN_BREAKER ||
check == ITEM_TYPE.COOKIE_5_COLUMN_BREAKER ||
check == ITEM_TYPE.COOKIE_6_COLUMN_BREAKER)
{
return true;
}
return false;
}
public bool IsRowBreaker(ITEM_TYPE check)
{
if (check == ITEM_TYPE.COOKIE_1_ROW_BREAKER ||
check == ITEM_TYPE.COOKIE_2_ROW_BREAKER ||
check == ITEM_TYPE.COOKIE_3_ROW_BREAKER ||
check == ITEM_TYPE.COOKIE_4_ROW_BREAKER ||
check == ITEM_TYPE.COOKIE_5_ROW_BREAKER ||
check == ITEM_TYPE.COOKIE_6_ROW_BREAKER)
{
return true;
}
return false;
}
public bool IsBreaker(ITEM_TYPE check)
{
if (IsBombBreaker(check) || IsXBreaker(check) || IsColumnBreaker(check) || IsRowBreaker(check))
{
return true;
}
return false;
}
public ITEM_TYPE GetBombBreaker(ITEM_TYPE check)
{
switch (check)
{
case ITEM_TYPE.COOKIE_1:
case ITEM_TYPE.COOKIE_1_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_1_ROW_BREAKER:
case ITEM_TYPE.COOKIE_1_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_1_X_BREAKER:
return ITEM_TYPE.COOKIE_1_BOMB_BREAKER;
case ITEM_TYPE.COOKIE_2:
case ITEM_TYPE.COOKIE_2_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_2_ROW_BREAKER:
case ITEM_TYPE.COOKIE_2_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_2_X_BREAKER:
return ITEM_TYPE.COOKIE_2_BOMB_BREAKER;
case ITEM_TYPE.COOKIE_3:
case ITEM_TYPE.COOKIE_3_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_3_ROW_BREAKER:
case ITEM_TYPE.COOKIE_3_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_3_X_BREAKER:
return ITEM_TYPE.COOKIE_3_BOMB_BREAKER;
case ITEM_TYPE.COOKIE_4:
case ITEM_TYPE.COOKIE_4_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_4_ROW_BREAKER:
case ITEM_TYPE.COOKIE_4_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_4_X_BREAKER:
return ITEM_TYPE.COOKIE_4_BOMB_BREAKER;
case ITEM_TYPE.COOKIE_5:
case ITEM_TYPE.COOKIE_5_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_5_ROW_BREAKER:
case ITEM_TYPE.COOKIE_5_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_5_X_BREAKER:
return ITEM_TYPE.COOKIE_5_BOMB_BREAKER;
case ITEM_TYPE.COOKIE_6:
case ITEM_TYPE.COOKIE_6_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_6_ROW_BREAKER:
case ITEM_TYPE.COOKIE_6_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_6_X_BREAKER:
return ITEM_TYPE.COOKIE_6_BOMB_BREAKER;
default:
return ITEM_TYPE.NONE;
}
}
public ITEM_TYPE GetXBreaker(ITEM_TYPE check)
{
switch (check)
{
case ITEM_TYPE.COOKIE_1:
case ITEM_TYPE.COOKIE_1_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_1_ROW_BREAKER:
case ITEM_TYPE.COOKIE_1_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_1_X_BREAKER:
return ITEM_TYPE.COOKIE_1_X_BREAKER;
case ITEM_TYPE.COOKIE_2:
case ITEM_TYPE.COOKIE_2_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_2_ROW_BREAKER:
case ITEM_TYPE.COOKIE_2_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_2_X_BREAKER:
return ITEM_TYPE.COOKIE_2_X_BREAKER;
case ITEM_TYPE.COOKIE_3:
case ITEM_TYPE.COOKIE_3_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_3_ROW_BREAKER:
case ITEM_TYPE.COOKIE_3_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_3_X_BREAKER:
return ITEM_TYPE.COOKIE_3_X_BREAKER;
case ITEM_TYPE.COOKIE_4:
case ITEM_TYPE.COOKIE_4_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_4_ROW_BREAKER:
case ITEM_TYPE.COOKIE_4_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_4_X_BREAKER:
return ITEM_TYPE.COOKIE_4_X_BREAKER;
case ITEM_TYPE.COOKIE_5:
case ITEM_TYPE.COOKIE_5_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_5_ROW_BREAKER:
case ITEM_TYPE.COOKIE_5_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_5_X_BREAKER:
return ITEM_TYPE.COOKIE_5_X_BREAKER;
case ITEM_TYPE.COOKIE_6:
case ITEM_TYPE.COOKIE_6_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_6_ROW_BREAKER:
case ITEM_TYPE.COOKIE_6_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_6_X_BREAKER:
return ITEM_TYPE.COOKIE_6_X_BREAKER;
default:
return ITEM_TYPE.NONE;
}
}
public ITEM_TYPE GetColumnBreaker(ITEM_TYPE check)
{
switch (check)
{
case ITEM_TYPE.COOKIE_1:
case ITEM_TYPE.COOKIE_1_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_1_ROW_BREAKER:
case ITEM_TYPE.COOKIE_1_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_1_X_BREAKER:
return ITEM_TYPE.COOKIE_1_COLUMN_BREAKER;
case ITEM_TYPE.COOKIE_2:
case ITEM_TYPE.COOKIE_2_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_2_ROW_BREAKER:
case ITEM_TYPE.COOKIE_2_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_2_X_BREAKER:
return ITEM_TYPE.COOKIE_2_COLUMN_BREAKER;
case ITEM_TYPE.COOKIE_3:
case ITEM_TYPE.COOKIE_3_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_3_ROW_BREAKER:
case ITEM_TYPE.COOKIE_3_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_3_X_BREAKER:
return ITEM_TYPE.COOKIE_3_COLUMN_BREAKER;
case ITEM_TYPE.COOKIE_4:
case ITEM_TYPE.COOKIE_4_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_4_ROW_BREAKER:
case ITEM_TYPE.COOKIE_4_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_4_X_BREAKER:
return ITEM_TYPE.COOKIE_4_COLUMN_BREAKER;
case ITEM_TYPE.COOKIE_5:
case ITEM_TYPE.COOKIE_5_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_5_ROW_BREAKER:
case ITEM_TYPE.COOKIE_5_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_5_X_BREAKER:
return ITEM_TYPE.COOKIE_5_COLUMN_BREAKER;
case ITEM_TYPE.COOKIE_6:
case ITEM_TYPE.COOKIE_6_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_6_ROW_BREAKER:
case ITEM_TYPE.COOKIE_6_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_6_X_BREAKER:
return ITEM_TYPE.COOKIE_6_COLUMN_BREAKER;
default:
return ITEM_TYPE.NONE;
}
}
public ITEM_TYPE GetRowBreaker(ITEM_TYPE check)
{
switch (check)
{
case ITEM_TYPE.COOKIE_1:
case ITEM_TYPE.COOKIE_1_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_1_ROW_BREAKER:
case ITEM_TYPE.COOKIE_1_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_1_X_BREAKER:
return ITEM_TYPE.COOKIE_1_ROW_BREAKER;
case ITEM_TYPE.COOKIE_2:
case ITEM_TYPE.COOKIE_2_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_2_ROW_BREAKER:
case ITEM_TYPE.COOKIE_2_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_2_X_BREAKER:
return ITEM_TYPE.COOKIE_2_ROW_BREAKER;
case ITEM_TYPE.COOKIE_3:
case ITEM_TYPE.COOKIE_3_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_3_ROW_BREAKER:
case ITEM_TYPE.COOKIE_3_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_3_X_BREAKER:
return ITEM_TYPE.COOKIE_3_ROW_BREAKER;
case ITEM_TYPE.COOKIE_4:
case ITEM_TYPE.COOKIE_4_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_4_ROW_BREAKER:
case ITEM_TYPE.COOKIE_4_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_4_X_BREAKER:
return ITEM_TYPE.COOKIE_4_ROW_BREAKER;
case ITEM_TYPE.COOKIE_5:
case ITEM_TYPE.COOKIE_5_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_5_ROW_BREAKER:
case ITEM_TYPE.COOKIE_5_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_5_X_BREAKER:
return ITEM_TYPE.COOKIE_5_ROW_BREAKER;
case ITEM_TYPE.COOKIE_6:
case ITEM_TYPE.COOKIE_6_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_6_ROW_BREAKER:
case ITEM_TYPE.COOKIE_6_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_6_X_BREAKER:
return ITEM_TYPE.COOKIE_6_ROW_BREAKER;
default:
return ITEM_TYPE.NONE;
}
}
public static ITEM_TYPE GetCookie(ITEM_TYPE check)
{
switch (check)
{
case ITEM_TYPE.COOKIE_1:
case ITEM_TYPE.COOKIE_1_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_1_ROW_BREAKER:
case ITEM_TYPE.COOKIE_1_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_1_X_BREAKER:
return ITEM_TYPE.COOKIE_1;
case ITEM_TYPE.COOKIE_2:
case ITEM_TYPE.COOKIE_2_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_2_ROW_BREAKER:
case ITEM_TYPE.COOKIE_2_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_2_X_BREAKER:
return ITEM_TYPE.COOKIE_2;
case ITEM_TYPE.COOKIE_3:
case ITEM_TYPE.COOKIE_3_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_3_ROW_BREAKER:
case ITEM_TYPE.COOKIE_3_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_3_X_BREAKER:
return ITEM_TYPE.COOKIE_3;
case ITEM_TYPE.COOKIE_4:
case ITEM_TYPE.COOKIE_4_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_4_ROW_BREAKER:
case ITEM_TYPE.COOKIE_4_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_4_X_BREAKER:
return ITEM_TYPE.COOKIE_4;
case ITEM_TYPE.COOKIE_5:
case ITEM_TYPE.COOKIE_5_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_5_ROW_BREAKER:
case ITEM_TYPE.COOKIE_5_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_5_X_BREAKER:
return ITEM_TYPE.COOKIE_5;
case ITEM_TYPE.COOKIE_6:
case ITEM_TYPE.COOKIE_6_COLUMN_BREAKER:
case ITEM_TYPE.COOKIE_6_ROW_BREAKER:
case ITEM_TYPE.COOKIE_6_BOMB_BREAKER:
case ITEM_TYPE.COOKIE_6_X_BREAKER:
return ITEM_TYPE.COOKIE_6;
default:
return ITEM_TYPE.NONE;
}
}
#endregion
#region Swap
// helper function to know the direction of swap
public Vector3 GetMousePosition()
{
return Camera.main.ScreenToWorldPoint(Input.mousePosition);
}
// calculate the direction
void SwapDirection(Vector3 delta)
{
deltaPosition = delta;
var direction = SWAP_DIRECTION.NONE;
if (Vector3.Magnitude(deltaPosition) > 0.1f)
{
if (Mathf.Abs(deltaPosition.x) > Mathf.Abs(deltaPosition.y) && deltaPosition.x > 0) swapDirection.x = 1;
else if (Mathf.Abs(deltaPosition.x) > Mathf.Abs(deltaPosition.y) && deltaPosition.x < 0) swapDirection.x = -1;
else if (Mathf.Abs(deltaPosition.x) < Mathf.Abs(deltaPosition.y) && deltaPosition.y > 0) swapDirection.y = 1;
else if (Mathf.Abs(deltaPosition.x) < Mathf.Abs(deltaPosition.y) && deltaPosition.y < 0) swapDirection.y = -1;
if (swapDirection.x > 0)
{
//Debug.Log("Left");
direction = SWAP_DIRECTION.LEFT;
if (node != null)
{
if (node.LeftNeighbor() != null)
{
if (node.LeftNeighbor().item != null)
{
if (node.LeftNeighbor().item.Movable())
{
neighborNode = node.LeftNeighbor();
}
}
}
}
}
else if (swapDirection.x < 0)
{
//Debug.Log("Right");
direction = SWAP_DIRECTION.RIGHT;
if (node != null)
{
if (node.RightNeighbor() != null)
{
if (node.RightNeighbor().item != null)
{
if (node.RightNeighbor().item.Movable())
{
neighborNode = node.RightNeighbor();
}
}
}
}
}
else if (swapDirection.y > 0)
{
//Debug.Log("Bottom");
direction = SWAP_DIRECTION.BOTTOM;
if (node != null)
{
if (node.BottomNeighbor() != null)
{
if (node.BottomNeighbor().item != null)
{
if (node.BottomNeighbor().item.Movable())
{
neighborNode = node.BottomNeighbor();
}
}
}
}
}
else if (swapDirection.y < 0)
{
//Debug.Log("Top");
direction = SWAP_DIRECTION.TOP;
if (node != null)
{
if (node.TopNeighbor() != null)
{
if (node.TopNeighbor().item != null)
{
if (node.TopNeighbor().item.Movable())
{
neighborNode = node.TopNeighbor();
}
}
}
}
}
if (neighborNode != null && neighborNode.item != null && CheckHelpSwapable(direction) == true)
{
swapItem = neighborNode.item;
board.touchedItem = this;
board.swappedItem = swapItem;
Swap();
}
else
{
// if no neighbor item we need to reset to be able to swap again
Reset();
}
}
}
// swap animation
public void Swap(bool forced = false)
{
if (swapDirection != Vector3.zero && neighborNode != null)
{
iTween.MoveTo(gameObject, iTween.Hash(
"position", swapItem.transform.position,
"onstart", "OnStartSwap",
"oncomplete", "OnCompleteSwap",
"oncompleteparams", new Hashtable() { { "forced", forced } },
"easetype", iTween.EaseType.linear,
"time", Configure.instance.swapTime
));
iTween.MoveTo(swapItem.gameObject, iTween.Hash(
"position", transform.position,
"easetype", iTween.EaseType.linear,
"time", Configure.instance.swapTime
));
}
}
public void OnStartSwap()
{
gameObject.GetComponent<SpriteRenderer>().sortingOrder = 1;
AudioManager.instance.SwapAudio();
board.lockSwap = true;
board.HideHint();
board.dropTime = 1;
// hide help if need
Help.instance.Hide();
}
public void OnCompleteSwap(Hashtable args)
{
var forced = (bool)args["forced"];
gameObject.GetComponent<SpriteRenderer>().sortingOrder = 0;
SwapItem();
// after swap this.node = neighbor
var matchesHere = (node.FindMatches() != null) ? node.FindMatches().Count : 0;
var matchesAtNeighbor = (swapItem.node.FindMatches() != null) ? swapItem.node.FindMatches().Count : 0;
var special = false;
//print("matches here:" + matchesHere);
//print("matches at neighbor" + matchesAtNeighbor);
// one of items is rainbow and other is cookie
if (type == ITEM_TYPE.COOKIE_RAINBOW && (swapItem.IsCookie() || IsBreaker(swapItem.type) || swapItem.type == ITEM_TYPE.COOKIE_RAINBOW))
{
special = true;
}
else if (swapItem.type == ITEM_TYPE.COOKIE_RAINBOW && (IsCookie() || IsBreaker(type) || type == ITEM_TYPE.COOKIE_RAINBOW))
{
special = true;
}
else if (IsBreaker(type) && IsBreaker(swapItem.type))
{
special = true;
}
if (matchesHere <= 0 && matchesAtNeighbor <= 0 && special == false && Configure.instance.checkSwap == true && forced == false)
{
// swap back
iTween.MoveTo(gameObject, iTween.Hash(
"position", swapItem.transform.position,
"onstart", "OnStartSwapBack",
"oncomplete", "OnCompleteSwapBack",
"easetype", iTween.EaseType.linear,
"time", Configure.instance.swapTime
));
iTween.MoveTo(swapItem.gameObject, iTween.Hash(
"position", transform.position,
"easetype", iTween.EaseType.linear,
"time", Configure.instance.swapTime
));
}
else
{
// do not reduce move when forced swap
if (forced == false)
{
board.moveLeft--;
board.UITop.DecreaseMoves();
}
if (special == true)
{
RainbowDestroy(this, swapItem);
TwoColRowBreakerDestroy(this, swapItem);
TwoBombBreakerDestroy(this, swapItem);
TwoXBreakerDestory(this, swapItem);
ColRowBreakerAndBombBreakerDestroy(this, swapItem);
ColRowBreakerAndXBreakerDestroy(this, swapItem);
BombBreakerAndXBreakerDestroy(this, swapItem);
}
else
{
if (matchesHere == 4)
{
next = GetColRowBreaker(this.type, transform.position - swapItem.transform.position);
}
else if (matchesAtNeighbor == 4)
{
swapItem.next = GetColRowBreaker(swapItem.type, transform.position - swapItem.transform.position);
}
else if (matchesHere >= 5)
{
next = ITEM_TYPE.COOKIE_RAINBOW;
}
else if (matchesAtNeighbor >= 5)
{
swapItem.next = ITEM_TYPE.COOKIE_RAINBOW;
}
// find the matches to destroy (destroy match 3/4/5)
// this function will not destroy special match such as rainbow swap with breaker etc.
board.FindMatches();
}
// we reset here because the item will be destroy soon (the board is still lock)
Reset();
}
}
public void OnStartSwapBack()
{
gameObject.GetComponent<SpriteRenderer>().sortingOrder = 1;
AudioManager.instance.SwapBackAudio();
// hide in case the help crash
if (Help.instance.gameObject.activeSelf == true)
{
Help.instance.HideOnSwapBack();
}
}
public void OnCompleteSwapBack()
{
gameObject.GetComponent<SpriteRenderer>().sortingOrder = 0;
SwapItemBack();
// fix swap back wrong position cause by iTween
transform.position = board.NodeLocalPosition(node.i, node.j);
Reset();
board.lockSwap = false;
StartCoroutine(board.ShowHint());
}
public void SwapItem()
{
Node thisNode = node;
thisNode.item = swapItem;
neighborNode.item = this;
this.node = neighborNode;
swapItem.node = thisNode;
this.gameObject.transform.SetParent(neighborNode.gameObject.transform);
swapItem.gameObject.transform.SetParent(thisNode.gameObject.transform);
}
void SwapItemBack()
{
Node swapNode = swapItem.node;
this.node.item = swapItem;
swapNode.item = this;
this.node = swapItem.node;
swapItem.node = neighborNode;
this.gameObject.transform.SetParent(swapNode.gameObject.transform);
swapItem.gameObject.transform.SetParent(neighborNode.gameObject.transform);
}
// reset info after a swap
public void Reset()
{
drag = false;
swapDirection = Vector3.zero;
neighborNode = null;
swapItem = null;
}
bool CheckHelpSwapable(SWAP_DIRECTION direction)
{
if (LevelLoader.instance.level == 1)
{
if (Help.instance.step == 2)
{
if (node.OrderOnBoard() == 5 && direction == SWAP_DIRECTION.BOTTOM)
{
return true;
}
else if (node.OrderOnBoard() == 14 && direction == SWAP_DIRECTION.TOP)
{
return true;
}
else
{
return false;
}
}
}
else if (LevelLoader.instance.level == 2)
{
if (Help.instance.step == 1)
{
if (node.OrderOnBoard() == 10 && direction == SWAP_DIRECTION.BOTTOM)
{
return true;
}
else if (node.OrderOnBoard() == 17 && direction == SWAP_DIRECTION.TOP)
{
return true;
}
else
{
return false;
}
}
else if (Help.instance.step == 2)
{
if (node.OrderOnBoard() == 19 && direction == SWAP_DIRECTION.BOTTOM)
{
return true;
}
else if (node.OrderOnBoard() == 26 && direction == SWAP_DIRECTION.TOP)
{
return true;
}
else
{
return false;
}
}
}
else if (LevelLoader.instance.level == 3)
{
if (Help.instance.step == 1)
{
if (node.OrderOnBoard() == 14 && direction == SWAP_DIRECTION.BOTTOM)
{
return true;
}
else if (node.OrderOnBoard() == 22 && direction == SWAP_DIRECTION.TOP)
{
return true;
}
else
{
return false;
}
}
else if (Help.instance.step == 2)
{
if (node.OrderOnBoard() == 38 && direction == SWAP_DIRECTION.BOTTOM)
{
return true;
}
else if (node.OrderOnBoard() == 46 && direction == SWAP_DIRECTION.TOP)
{
return true;
}
else
{
return false;
}
}
else if (Help.instance.step == 3)
{
if (node.OrderOnBoard() == 18 && direction == SWAP_DIRECTION.BOTTOM)
{
return true;
}
else if (node.OrderOnBoard() == 26 && direction == SWAP_DIRECTION.TOP)
{
return true;
}
else
{
return false;
}
}
else if (Help.instance.step == 4)
{
if (node.OrderOnBoard() == 26 && direction == SWAP_DIRECTION.BOTTOM)
{
return true;
}
else if (node.OrderOnBoard() == 34 && direction == SWAP_DIRECTION.TOP)
{
return true;
}
else
{
return false;
}
}
}
else if (LevelLoader.instance.level == 4)
{
if (Help.instance.step == 1)
{
if (node.OrderOnBoard() == 36 && direction == SWAP_DIRECTION.RIGHT)
{
return true;
}
else if (node.OrderOnBoard() == 37 && direction == SWAP_DIRECTION.LEFT)
{
return true;
}
else
{
return false;
}
}
else if (Help.instance.step == 2)
{
if (node.OrderOnBoard() == 52 && direction == SWAP_DIRECTION.RIGHT)
{
return true;
}
else if (node.OrderOnBoard() == 53 && direction == SWAP_DIRECTION.LEFT)
{
return true;
}
else
{
return false;
}
}
}
else if (LevelLoader.instance.level == 5)
{
if (Help.instance.step == 1)
{
if (node.OrderOnBoard() == 42 && direction == SWAP_DIRECTION.RIGHT)
{
return true;
}
else if (node.OrderOnBoard() == 43 && direction == SWAP_DIRECTION.LEFT)
{
return true;
}
else
{
return false;
}
}
}
else if (LevelLoader.instance.level == 6)
{
if (Help.instance.step == 1)
{
if (node.OrderOnBoard() == 45 && direction == SWAP_DIRECTION.RIGHT)
{
return true;
}
else if (node.OrderOnBoard() == 46 && direction == SWAP_DIRECTION.LEFT)
{
return true;
}
else
{
return false;
}
}
}
return true;
}
#endregion
#region ColorAndAppear
// after the board is generate we need to alter the color to make sure there is no "pre-matches" on the board
public void GenerateColor(int except)
{
var colors = new List<int>();
var usingColors = LevelLoader.instance.usingColors;
for (int i = 0; i < usingColors.Count; i++)
{
int color = usingColors[i];
bool generatable = true;
Node neighbor = null;
neighbor = node.TopNeighbor();
if (neighbor != null)
{
if (neighbor.item != null)
{
if (neighbor.item.color == color)
{
generatable = false;
}
}
}
neighbor = node.LeftNeighbor();
if (neighbor != null)
{
if (neighbor.item != null)
{
if (neighbor.item.color == color)
{
generatable = false;
}
}
}
neighbor = node.RightNeighbor();
if (neighbor != null)
{
if (neighbor.item != null)
{
if (neighbor.item.color == color)
{
generatable = false;
}
}
}
if (generatable && color != except)
{
colors.Add(color);
}
} // end for
// by default index is a random color
int index = usingColors[Random.Range(0, usingColors.Count)];
// if there is generatable colors then change index
if (colors.Count > 0)
{
index = colors[Random.Range(0, colors.Count)];
}
// if the random in colors list is a except color then change the index
if (index == except)
{
index = (index++) % usingColors.Count;
}
this.color = index;
ChangeSpriteAndType(index);
}
public void ChangeSpriteAndType(int itemColor)
{
GameObject prefab = null;
switch (itemColor)
{
case 1:
prefab = Resources.Load(Configure.Cookie1()) as GameObject;
type = ITEM_TYPE.COOKIE_1;
break;
case 2:
prefab = Resources.Load(Configure.Cookie2()) as GameObject;
type = ITEM_TYPE.COOKIE_2;
break;
case 3:
prefab = Resources.Load(Configure.Cookie3()) as GameObject;
type = ITEM_TYPE.COOKIE_3;
break;
case 4:
prefab = Resources.Load(Configure.Cookie4()) as GameObject;
type = ITEM_TYPE.COOKIE_4;
break;
case 5:
prefab = Resources.Load(Configure.Cookie5()) as GameObject;
type = ITEM_TYPE.COOKIE_5;
break;
case 6:
prefab = Resources.Load(Configure.Cookie6()) as GameObject;
type = ITEM_TYPE.COOKIE_6;
break;
}
if (prefab != null)
{
GetComponent<SpriteRenderer>().sprite = prefab.GetComponent<SpriteRenderer>().sprite;
}
}
public void ChangeToRainbow()
{
var prefab = Resources.Load(Configure.CookieRainbow()) as GameObject;
type = ITEM_TYPE.COOKIE_RAINBOW;
color = 0;
GetComponent<SpriteRenderer>().sprite = prefab.GetComponent<SpriteRenderer>().sprite;
}
public void ChangeToGingerbread(ITEM_TYPE check)
{
if (node.item.IsGingerbread() == true)
{
return;
}
var upper = board.GetUpperItem(this.node);
if (upper != null && upper.IsGingerbread())
{
return;
}
AudioManager.instance.GingerbreadAudio();
GameObject explosion = null;
switch (node.item.type)
{
case ITEM_TYPE.COOKIE_1:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.BlueCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.COOKIE_2:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.GreenCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.COOKIE_3:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.OrangeCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.COOKIE_4:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.PurpleCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.COOKIE_5:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.RedCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.COOKIE_6:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.YellowCookieExplosion()) as GameObject);
break;
}
if (explosion != null) explosion.transform.position = node.item.transform.position;
GameObject prefab = null;
switch (check)
{
case ITEM_TYPE.GINGERBREAD_1:
prefab = Resources.Load(Configure.Gingerbread1()) as GameObject;
check = ITEM_TYPE.GINGERBREAD_1;
color = 1;
break;
case ITEM_TYPE.GINGERBREAD_2:
prefab = Resources.Load(Configure.Gingerbread2()) as GameObject;
check = ITEM_TYPE.GINGERBREAD_2;
color = 2;
break;
case ITEM_TYPE.GINGERBREAD_3:
prefab = Resources.Load(Configure.Gingerbread3()) as GameObject;
check = ITEM_TYPE.GINGERBREAD_3;
color = 3;
break;
case ITEM_TYPE.GINGERBREAD_4:
prefab = Resources.Load(Configure.Gingerbread4()) as GameObject;
check = ITEM_TYPE.GINGERBREAD_4;
color = 4;
break;
case ITEM_TYPE.GINGERBREAD_5:
prefab = Resources.Load(Configure.Gingerbread5()) as GameObject;
check = ITEM_TYPE.GINGERBREAD_5;
color = 5;
break;
case ITEM_TYPE.GINGERBREAD_6:
prefab = Resources.Load(Configure.Gingerbread6()) as GameObject;
check = ITEM_TYPE.GINGERBREAD_6;
color = 6;
break;
}
if (prefab != null)
{
type = check;
effect = BREAKER_EFFECT.NORMAL;
GetComponent<SpriteRenderer>().sprite = prefab.GetComponent<SpriteRenderer>().sprite;
}
}
public void ChangeToBombBreaker()
{
GameObject prefab = null;
switch (type)
{
case ITEM_TYPE.COOKIE_1:
prefab = Resources.Load(Configure.Cookie1BombBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_1_BOMB_BREAKER;
break;
case ITEM_TYPE.COOKIE_2:
prefab = Resources.Load(Configure.Cookie2BombBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_2_BOMB_BREAKER;
break;
case ITEM_TYPE.COOKIE_3:
prefab = Resources.Load(Configure.Cookie3BombBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_3_BOMB_BREAKER;
break;
case ITEM_TYPE.COOKIE_4:
prefab = Resources.Load(Configure.Cookie4BombBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_4_BOMB_BREAKER;
break;
case ITEM_TYPE.COOKIE_5:
prefab = Resources.Load(Configure.Cookie5BombBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_5_BOMB_BREAKER;
break;
case ITEM_TYPE.COOKIE_6:
prefab = Resources.Load(Configure.Cookie6BombBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_6_BOMB_BREAKER;
break;
}
if (prefab != null)
{
GetComponent<SpriteRenderer>().sprite = prefab.GetComponent<SpriteRenderer>().sprite;
}
}
public void ChangeToXBreaker()
{
GameObject prefab = null;
switch (type)
{
case ITEM_TYPE.COOKIE_1:
prefab = Resources.Load(Configure.Cookie1XBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_1_X_BREAKER;
break;
case ITEM_TYPE.COOKIE_2:
prefab = Resources.Load(Configure.Cookie2XBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_2_X_BREAKER;
break;
case ITEM_TYPE.COOKIE_3:
prefab = Resources.Load(Configure.Cookie3XBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_3_X_BREAKER;
break;
case ITEM_TYPE.COOKIE_4:
prefab = Resources.Load(Configure.Cookie4XBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_4_X_BREAKER;
break;
case ITEM_TYPE.COOKIE_5:
prefab = Resources.Load(Configure.Cookie5XBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_5_X_BREAKER;
break;
case ITEM_TYPE.COOKIE_6:
prefab = Resources.Load(Configure.Cookie6XBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_6_X_BREAKER;
break;
}
if (prefab != null)
{
GetComponent<SpriteRenderer>().sprite = prefab.GetComponent<SpriteRenderer>().sprite;
}
}
public void ChangeToColRowBreaker()
{
GameObject prefab = null;
if (Random.Range(0, 2) == 0)
{
switch (type)
{
case ITEM_TYPE.COOKIE_1:
prefab = Resources.Load(Configure.Cookie1ColumnBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_1_COLUMN_BREAKER;
break;
case ITEM_TYPE.COOKIE_2:
prefab = Resources.Load(Configure.Cookie2ColumnBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_2_COLUMN_BREAKER;
break;
case ITEM_TYPE.COOKIE_3:
prefab = Resources.Load(Configure.Cookie3ColumnBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_3_COLUMN_BREAKER;
break;
case ITEM_TYPE.COOKIE_4:
prefab = Resources.Load(Configure.Cookie4ColumnBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_4_COLUMN_BREAKER;
break;
case ITEM_TYPE.COOKIE_5:
prefab = Resources.Load(Configure.Cookie5ColumnBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_5_COLUMN_BREAKER;
break;
case ITEM_TYPE.COOKIE_6:
prefab = Resources.Load(Configure.Cookie6ColumnBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_6_COLUMN_BREAKER;
break;
}
}
else
{
switch (type)
{
case ITEM_TYPE.COOKIE_1:
prefab = Resources.Load(Configure.Cookie1RowBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_1_ROW_BREAKER;
break;
case ITEM_TYPE.COOKIE_2:
prefab = Resources.Load(Configure.Cookie2RowBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_2_ROW_BREAKER;
break;
case ITEM_TYPE.COOKIE_3:
prefab = Resources.Load(Configure.Cookie3RowBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_3_ROW_BREAKER;
break;
case ITEM_TYPE.COOKIE_4:
prefab = Resources.Load(Configure.Cookie4RowBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_4_ROW_BREAKER;
break;
case ITEM_TYPE.COOKIE_5:
prefab = Resources.Load(Configure.Cookie5RowBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_5_ROW_BREAKER;
break;
case ITEM_TYPE.COOKIE_6:
prefab = Resources.Load(Configure.Cookie6RowBreaker()) as GameObject;
type = ITEM_TYPE.COOKIE_6_ROW_BREAKER;
break;
}
}
if (prefab != null)
{
GetComponent<SpriteRenderer>().sprite = prefab.GetComponent<SpriteRenderer>().sprite;
}
}
public void SetRandomNextType()
{
var random = Random.Range(0, 2);
if (random == 0)
{
switch (type)
{
case ITEM_TYPE.COOKIE_1:
next = ITEM_TYPE.COOKIE_1_COLUMN_BREAKER;
break;
case ITEM_TYPE.COOKIE_2:
next = ITEM_TYPE.COOKIE_2_COLUMN_BREAKER;
break;
case ITEM_TYPE.COOKIE_3:
next = ITEM_TYPE.COOKIE_3_COLUMN_BREAKER;
break;
case ITEM_TYPE.COOKIE_4:
next = ITEM_TYPE.COOKIE_4_COLUMN_BREAKER;
break;
case ITEM_TYPE.COOKIE_5:
next = ITEM_TYPE.COOKIE_5_COLUMN_BREAKER;
break;
case ITEM_TYPE.COOKIE_6:
next = ITEM_TYPE.COOKIE_6_COLUMN_BREAKER;
break;
}
}
else if (random == 1)
{
switch (type)
{
case ITEM_TYPE.COOKIE_1:
next = ITEM_TYPE.COOKIE_1_ROW_BREAKER;
break;
case ITEM_TYPE.COOKIE_2:
next = ITEM_TYPE.COOKIE_2_ROW_BREAKER;
break;
case ITEM_TYPE.COOKIE_3:
next = ITEM_TYPE.COOKIE_3_ROW_BREAKER;
break;
case ITEM_TYPE.COOKIE_4:
next = ITEM_TYPE.COOKIE_4_ROW_BREAKER;
break;
case ITEM_TYPE.COOKIE_5:
next = ITEM_TYPE.COOKIE_5_ROW_BREAKER;
break;
case ITEM_TYPE.COOKIE_6:
next = ITEM_TYPE.COOKIE_6_ROW_BREAKER;
break;
}
}
else if (random == 2)
{
switch (type)
{
case ITEM_TYPE.COOKIE_1:
next = ITEM_TYPE.COOKIE_1_BOMB_BREAKER;
break;
case ITEM_TYPE.COOKIE_2:
next = ITEM_TYPE.COOKIE_2_BOMB_BREAKER;
break;
case ITEM_TYPE.COOKIE_3:
next = ITEM_TYPE.COOKIE_3_BOMB_BREAKER;
break;
case ITEM_TYPE.COOKIE_4:
next = ITEM_TYPE.COOKIE_4_BOMB_BREAKER;
break;
case ITEM_TYPE.COOKIE_5:
next = ITEM_TYPE.COOKIE_5_BOMB_BREAKER;
break;
case ITEM_TYPE.COOKIE_6:
next = ITEM_TYPE.COOKIE_6_BOMB_BREAKER;
break;
}
}
}
#endregion
#region Destroy
public void Destroy(bool forced = false)
{
if (Destroyable() == false && forced == false)
{
return;
}
// prevent multiple calls
if (destroying == true) return;
else destroying = true;
if (node != null && node.cage != null)
{
// destroy and check collect cage
node.CageExplode();
return;
}
board.destroyingItems++;
// destroy animation
iTween.ScaleTo(gameObject, iTween.Hash(
"scale", Vector3.zero,
"onstart", "OnStartDestroy",
"oncomplete", "OnCompleteDestroy",
"easetype", iTween.EaseType.linear,
"time", Configure.instance.destroyTime
));
}
public void OnStartDestroy()
{
// destroy and check collect waffle
if (node != null) node.WaffleExplode();
// check collect
board.CollectItem(this);
// destroy neighbor marshmallow/chocolate
board.DestroyNeighborItems(this);
// explosion effect
if (effect == BREAKER_EFFECT.BIG_COLUMN_BREAKER)
{
BigColumnBreakerExplosion();
}
else if (effect == BREAKER_EFFECT.BIG_ROW_BREAKER)
{
BigRowBreakerExplosion();
}
else if (effect == BREAKER_EFFECT.CROSS)
{
CrossBreakerExplosion();
}
else if (effect == BREAKER_EFFECT.BOMB_X_BREAKER)
{
BombXBreakerExplosion();
}
else if (effect == BREAKER_EFFECT.CROSS_X_BREAKER)
{
CrossXBreakerExplosion();
}
else if (effect == BREAKER_EFFECT.NORMAL)
{
if (IsCookie())
{
CookieExplosion();
}
else if (IsGingerbread())
{
GingerbreadExplosion();
}
else if (IsMarshmallow())
{
MarshmallowExplosion();
}
else if (IsChocolate())
{
ChocolateExplosion();
}
else if (IsRockCandy())
{
RockCandyExplosion();
}
else if (IsCollectible())
{
CollectibleExplosion();
}
else if (IsBombBreaker(type))
{
BombBreakerExplosion();
}
else if (IsXBreaker(type))
{
XBreakerExplosion();
}
else if (type == ITEM_TYPE.COOKIE_RAINBOW)
{
RainbowExplosion();
}
else if (IsColumnBreaker(type))
{
ColumnBreakerExplosion();
}
else if (IsRowBreaker(type))
{
RowBreakerExplosion();
}
}
}
public void OnCompleteDestroy()
{
PuzzleGameMode.main.OnAfterGemDestroyed(this);
if (board.state == GAME_STATE.PRE_WIN_AUTO_PLAYING)
{
board.score += Configure.instance.finishedScoreItem * board.dropTime;
}
else
{
board.score += Configure.instance.scoreItem * board.dropTime;
}
board.UITop.UpdateProgressBar(board.score);
board.UITop.UpdateScoreAmount(board.score);
if (next != ITEM_TYPE.NONE)
{
//print("next type: " + next);
if (IsBombBreaker(next) || IsXBreaker(next))
{
if (nextSound == true) AudioManager.instance.BombBreakerAudio();
}
else if (IsRowBreaker(next) || IsColumnBreaker(next))
{
if (nextSound == true) AudioManager.instance.ColRowBreakerAudio();
}
else if (next == ITEM_TYPE.COOKIE_RAINBOW)
{
if (nextSound == true) AudioManager.instance.RainbowAudio();
}
// generate a item at position of the node
node.GenerateItem(next);
}
else if (type == ITEM_TYPE.CHOCOLATE_2_LAYER)
{
// generate a new chocolate
node.GenerateItem(ITEM_TYPE.CHOCOLATE_1_LAYER);
// set position
board.GetNode(node.i, node.j).item.gameObject.transform.position = board.NodeLocalPosition(node.i, node.j); ;
}
else if (type == ITEM_TYPE.CHOCOLATE_3_LAYER)
{
node.GenerateItem(ITEM_TYPE.CHOCOLATE_2_LAYER);
board.GetNode(node.i, node.j).item.gameObject.transform.position = board.NodeLocalPosition(node.i, node.j); ;
}
else if (type == ITEM_TYPE.CHOCOLATE_4_LAYER)
{
node.GenerateItem(ITEM_TYPE.CHOCOLATE_3_LAYER);
board.GetNode(node.i, node.j).item.gameObject.transform.position = board.NodeLocalPosition(node.i, node.j); ;
}
else
{
node.item = null;
}
if (destroying == true)
{
board.destroyingItems--;
// there is a case when a item is dropping and it is destroyed by other call
if (dropping == true) board.droppingItems--;
puzzleHero.OnAfterHealthChanged -= OnAfterHealthChanged;
puzzleHero.OnAfterSkillEnergyChanged -= OnAfterEnergyChanged;
GameObject.Destroy(gameObject);
}
}
public void DestroyItem()
{
puzzleHero.OnAfterHealthChanged -= OnAfterHealthChanged;
puzzleHero.OnAfterSkillEnergyChanged -= OnAfterEnergyChanged;
GameObject.Destroy(gameObject);
}
public IEnumerator ResetDestroying()
{
yield return new WaitForSeconds(Configure.instance.destroyTime);
destroying = false;
}
#endregion
#region Explosion
void CookieExplosion()
{
AudioManager.instance.CookieCrushAudio();
GameObject explosion = null;
switch (type)
{
case ITEM_TYPE.COOKIE_1:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.BlueCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.COOKIE_2:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.GreenCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.COOKIE_3:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.OrangeCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.COOKIE_4:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.PurpleCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.COOKIE_5:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.RedCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.COOKIE_6:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.YellowCookieExplosion()) as GameObject);
break;
}
if (explosion != null)
{
explosion.transform.position = transform.position;
}
}
void GingerbreadExplosion()
{
AudioManager.instance.GingerbreadExplodeAudio();
GameObject explosion = null;
switch (type)
{
case ITEM_TYPE.GINGERBREAD_1:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.BlueCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.GINGERBREAD_2:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.GreenCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.GINGERBREAD_3:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.OrangeCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.GINGERBREAD_4:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.PurpleCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.GINGERBREAD_5:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.RedCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.GINGERBREAD_6:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.YellowCookieExplosion()) as GameObject);
break;
}
if (explosion != null)
{
explosion.transform.position = transform.position;
}
}
void MarshmallowExplosion()
{
AudioManager.instance.MarshmallowExplodeAudio();
GameObject explosion = null;
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.MarshmallowExplosion()) as GameObject);
if (explosion != null)
{
explosion.transform.position = transform.position;
}
}
public void ChocolateExplosion()
{
AudioManager.instance.ChocolateExplodeAudio();
GameObject explosion = null;
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ChocolateExplosion()) as GameObject);
if (explosion != null)
{
explosion.transform.position = transform.position;
}
}
public void RockCandyExplosion()
{
AudioManager.instance.RockCandyExplodeAudio();
GameObject explosion = null;
switch (type)
{
case ITEM_TYPE.ROCK_CANDY_1:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.BlueCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.ROCK_CANDY_2:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.GreenCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.ROCK_CANDY_3:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.OrangeCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.ROCK_CANDY_4:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.PurpleCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.ROCK_CANDY_5:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.RedCookieExplosion()) as GameObject);
break;
case ITEM_TYPE.ROCK_CANDY_6:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.YellowCookieExplosion()) as GameObject);
break;
}
if (explosion != null)
{
explosion.transform.position = transform.position;
}
}
void CollectibleExplosion()
{
AudioManager.instance.CollectibleExplodeAudio();
}
void BombBreakerExplosion()
{
AudioManager.instance.BombExplodeAudio();
BombBreakerDestroy();
GameObject explosion = null;
switch (type)
{
case ITEM_TYPE.COOKIE_1_BOMB_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.BreakerExplosion1()) as GameObject);
break;
case ITEM_TYPE.COOKIE_2_BOMB_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.BreakerExplosion2()) as GameObject);
break;
case ITEM_TYPE.COOKIE_3_BOMB_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.BreakerExplosion3()) as GameObject);
break;
case ITEM_TYPE.COOKIE_4_BOMB_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.BreakerExplosion4()) as GameObject);
break;
case ITEM_TYPE.COOKIE_5_BOMB_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.BreakerExplosion5()) as GameObject);
break;
case ITEM_TYPE.COOKIE_6_BOMB_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.BreakerExplosion6()) as GameObject);
break;
}
if (explosion != null)
{
explosion.transform.position = transform.position;
explosion.transform.position = new Vector3(explosion.transform.position.x, explosion.transform.position.y, -12f);
}
}
void RainbowExplosion()
{
AudioManager.instance.RainbowExplodeAudio();
GameObject explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.RainbowExplosion()) as GameObject);
if (explosion != null)
{
explosion.transform.position = transform.position;
}
}
void XBreakerExplosion()
{
AudioManager.instance.ColRowBreakerExplodeAudio();
XBreakerDestroy();
GameObject explosion = null;
GameObject animation = null;
GameObject cross = null;
switch (GetCookie(type))
{
case ITEM_TYPE.COOKIE_1:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker1()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation1()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_2:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker2()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation2()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_3:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker3()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation3()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_4:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker4()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation4()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_5:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker5()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation5()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_6:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker6()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation6()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
}
if (animation != null)
{
cross = Instantiate(animation);
animation.transform.Rotate(Vector3.back, 45);
animation.transform.position = new Vector3(animation.transform.position.x, animation.transform.position.y, -12f);
}
if (cross != null)
{
cross.transform.Rotate(Vector3.back, -45);
cross.transform.position = new Vector3(cross.transform.position.x, cross.transform.position.y, -12f);
}
if (explosion != null)
{
explosion.transform.position = transform.position;
}
GameObject.Destroy(animation, 1f);
}
void ColumnBreakerExplosion()
{
AudioManager.instance.ColRowBreakerExplodeAudio();
ColumnDestroy();
GameObject explosion = null;
GameObject animation = null;
switch (type)
{
case ITEM_TYPE.COOKIE_1_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker1()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation1()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_2_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker2()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation2()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_3_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker3()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation3()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_4_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker4()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation4()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_5_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker5()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation5()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_6_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker6()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation6()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
}
if (explosion != null)
{
explosion.transform.position = transform.position;
}
if (animation != null)
{
animation.transform.position = new Vector3(animation.transform.position.x, animation.transform.position.y, -12f);
}
GameObject.Destroy(animation, 1f);
}
void BigColumnBreakerExplosion()
{
AudioManager.instance.ColRowBreakerExplodeAudio();
ColumnDestroy(node.j - 1);
ColumnDestroy(node.j);
ColumnDestroy(node.j + 1);
GameObject explosion = null;
GameObject animation = null;
switch (type)
{
case ITEM_TYPE.COOKIE_1_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker1()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation1()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_2_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker2()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation2()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_3_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker3()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation3()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_4_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker4()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation4()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_5_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker5()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation5()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_6_COLUMN_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker6()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation6()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
}
if (explosion != null)
{
explosion.transform.position = transform.position;
}
if (animation != null)
{
animation.transform.position = new Vector3(animation.transform.position.x, animation.transform.position.y, -12f);
}
GameObject.Destroy(animation, 1f);
}
void CrossBreakerExplosion()
{
AudioManager.instance.ColRowBreakerExplodeAudio();
ColumnDestroy();
RowDestroy();
GameObject explosion = null;
GameObject columnEffect = null;
GameObject rowEffect = null;
switch (GetCookie(type))
{
case ITEM_TYPE.COOKIE_1:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker1()) as GameObject);
columnEffect = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation1()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_2:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker2()) as GameObject);
columnEffect = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation2()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_3:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker3()) as GameObject);
columnEffect = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation3()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_4:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker4()) as GameObject);
columnEffect = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation4()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_5:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker5()) as GameObject);
columnEffect = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation5()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_6:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker6()) as GameObject);
columnEffect = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation6()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
}
if (columnEffect != null)
{
rowEffect = Instantiate(columnEffect as GameObject, transform.position, Quaternion.identity) as GameObject;
columnEffect.transform.position = new Vector3(columnEffect.transform.position.x, columnEffect.transform.position.y, -12f);
}
if (rowEffect != null)
{
rowEffect.transform.Rotate(Vector3.back, 90);
rowEffect.transform.position = new Vector3(rowEffect.transform.position.x, rowEffect.transform.position.y, -12f);
}
if (explosion != null)
{
explosion.transform.position = transform.position;
}
GameObject.Destroy(rowEffect, 1f);
GameObject.Destroy(columnEffect, 1f);
}
void RowBreakerExplosion()
{
AudioManager.instance.ColRowBreakerExplodeAudio();
RowDestroy();
GameObject explosion = null;
GameObject animation = null;
switch (type)
{
case ITEM_TYPE.COOKIE_1_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker1()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation1()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_2_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker2()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation2()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_3_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker3()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation3()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_4_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker4()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation4()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_5_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker5()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation5()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_6_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker6()) as GameObject);
animation = Instantiate(Resources.Load(Configure.ColumnBreakerAnimation6()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
}
if (animation != null)
{
animation.transform.Rotate(Vector3.back, 90);
animation.transform.position = new Vector3(animation.transform.position.x, animation.transform.position.y, -12f);
}
if (explosion != null)
{
explosion.transform.position = transform.position;
}
GameObject.Destroy(animation, 1f);
}
void BigRowBreakerExplosion()
{
AudioManager.instance.ColRowBreakerExplodeAudio();
RowDestroy(node.i - 1);
RowDestroy(node.i);
RowDestroy(node.i + 1);
GameObject explosion = null;
GameObject animation = null;
switch (type)
{
case ITEM_TYPE.COOKIE_1_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker1()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation1()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_2_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker2()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation2()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_3_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker3()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation3()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_4_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker4()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation4()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_5_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker5()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation5()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
case ITEM_TYPE.COOKIE_6_ROW_BREAKER:
explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.ColRowBreaker6()) as GameObject);
animation = Instantiate(Resources.Load(Configure.BigColumnBreakerAnimation6()) as GameObject, transform.position, Quaternion.identity) as GameObject;
break;
}
if (animation != null)
{
animation.transform.Rotate(Vector3.back, 90);
animation.transform.position = new Vector3(animation.transform.position.x, animation.transform.position.y, -12f);
}
if (explosion != null)
{
explosion.transform.position = transform.position;
}
GameObject.Destroy(animation, 1f);
}
void BombXBreakerExplosion()
{
BombBreakerExplosion();
XBreakerExplosion();
}
void CrossXBreakerExplosion()
{
CrossBreakerExplosion();
XBreakerExplosion();
}
#endregion
#region SpecialDestroy
void BombBreakerDestroy()
{
List<Item> items = board.ItemAround(node);
foreach (var item in items)
{
if (item != null)
{
if (item.type == ITEM_TYPE.COOKIE_RAINBOW)
{
DestroyItemsSameColor(LevelLoader.instance.RandomColor());
}
item.Destroy();
}
}
}
void XBreakerDestroy()
{
List<Item> items = board.XCrossItems(node);
foreach (var item in items)
{
if (item != null)
{
if (item.type == ITEM_TYPE.COOKIE_RAINBOW)
{
DestroyItemsSameColor(LevelLoader.instance.RandomColor());
}
item.Destroy();
}
}
}
// destroy all items with the same color (when this color swap with a rainbow)
public void DestroyItemsSameColor(int color)
{
List<Item> items = board.GetListItems();
foreach (Item item in items)
{
if (item != null)
{
if (item.color == color)
{
board.sameColorList.Add(item);
}
}
}
board.DestroySameColorList();
}
// Rainbow swap with other item
public void RainbowDestroy(Item thisItem, Item otherItem)
{
if (thisItem.Destroyable() == false || otherItem.Destroyable() == false)
{
return;
}
if (thisItem.type == ITEM_TYPE.COOKIE_RAINBOW)
{
//Debug.Log("touched item is rainbow");
if (otherItem.IsCookie())
{
DestroyItemsSameColor(otherItem.color);
thisItem.Destroy();
}
else if (otherItem.IsBombBreaker(otherItem.type) || otherItem.IsRowBreaker(otherItem.type) || otherItem.IsColumnBreaker(otherItem.type) || otherItem.IsXBreaker(otherItem.type))
{
ChangeItemsType(otherItem.color, otherItem.type);
thisItem.Destroy();
}
else if (otherItem.type == ITEM_TYPE.COOKIE_RAINBOW)
{
board.DoubleRainbowDestroy();
thisItem.Destroy();
otherItem.Destroy();
}
}
else if (otherItem.type == ITEM_TYPE.COOKIE_RAINBOW)
{
//Debug.Log("swap item is rainbow");
if (thisItem.IsCookie())
{
DestroyItemsSameColor(thisItem.color);
otherItem.Destroy();
}
else if (thisItem.IsBombBreaker(thisItem.type) || thisItem.IsRowBreaker(thisItem.type) || thisItem.IsColumnBreaker(thisItem.type) || thisItem.IsXBreaker(thisItem.type))
{
ChangeItemsType(thisItem.color, thisItem.type);
otherItem.Destroy();
}
else if (thisItem.type == ITEM_TYPE.COOKIE_RAINBOW)
{
board.DoubleRainbowDestroy();
thisItem.Destroy();
otherItem.Destroy();
}
}
}
void ColumnDestroy(int col = -1)
{
var items = new List<Item>();
if (col == -1)
{
items = board.ColumnItems(node.j);
}
else
{
items = board.ColumnItems(col);
}
foreach (var item in items)
{
// this item maybe destroyed in other call
if (item != null)
{
if (item.type == ITEM_TYPE.COOKIE_RAINBOW)
{
DestroyItemsSameColor(LevelLoader.instance.RandomColor());
}
item.Destroy();
}
}
}
public void RowDestroy(int row = -1)
{
var items = new List<Item>();
if (row == -1)
{
items = board.RowItems(node.i);
}
else
{
items = board.RowItems(row);
}
foreach (var item in items)
{
// this item maybe destroyed in other call
if (item != null)
{
if (item.type == ITEM_TYPE.COOKIE_RAINBOW)
{
DestroyItemsSameColor(LevelLoader.instance.RandomColor());
}
item.Destroy();
}
}
}
void TwoColRowBreakerDestroy(Item thisItem, Item otherItem)
{
if (thisItem == null || otherItem == null)
{
return;
}
if ((IsRowBreaker(thisItem.type) || IsColumnBreaker(thisItem.type)) && (IsRowBreaker(otherItem.type) || IsColumnBreaker(otherItem.type)))
{
thisItem.effect = BREAKER_EFFECT.CROSS;
otherItem.effect = BREAKER_EFFECT.NONE;
thisItem.Destroy();
otherItem.Destroy();
board.FindMatches();
}
}
void TwoBombBreakerDestroy(Item thisItem, Item otherItem)
{
if (thisItem == null || otherItem == null)
{
return;
}
if (IsBombBreaker(thisItem.type) && IsBombBreaker(otherItem.type))
{
thisItem.Destroy();
otherItem.Destroy();
board.FindMatches();
}
}
void TwoXBreakerDestory(Item thisItem, Item otherItem)
{
if (thisItem == null || otherItem == null)
{
return;
}
if (IsXBreaker(thisItem.type) && IsXBreaker(otherItem.type))
{
thisItem.Destroy();
otherItem.Destroy();
board.FindMatches();
}
}
void ColRowBreakerAndBombBreakerDestroy(Item thisItem, Item otherItem)
{
if (thisItem == null || otherItem == null)
{
return;
}
if ((IsRowBreaker(thisItem.type) || IsColumnBreaker(thisItem.type)) && IsBombBreaker(otherItem.type))
{
if (IsRowBreaker(thisItem.type))
{
thisItem.effect = BREAKER_EFFECT.BIG_ROW_BREAKER;
}
else if (IsColumnBreaker(thisItem.type))
{
thisItem.effect = BREAKER_EFFECT.BIG_COLUMN_BREAKER;
}
otherItem.type = GetCookie(otherItem.type);
thisItem.ChangeToBig();
}
else if ((IsRowBreaker(otherItem.type) || IsColumnBreaker(otherItem.type)) && IsBombBreaker(thisItem.type))
{
if (IsRowBreaker(otherItem.type))
{
otherItem.effect = BREAKER_EFFECT.BIG_ROW_BREAKER;
}
else if (IsColumnBreaker(otherItem.type))
{
otherItem.effect = BREAKER_EFFECT.BIG_COLUMN_BREAKER;
}
thisItem.type = GetCookie(otherItem.type);
otherItem.ChangeToBig();
}
}
void ColRowBreakerAndXBreakerDestroy(Item thisItem, Item otherItem)
{
if (thisItem == null || otherItem == null)
{
return;
}
if ((IsXBreaker(thisItem.type) && (IsColumnBreaker(otherItem.type) || IsRowBreaker(otherItem.type))) ||
(IsXBreaker(otherItem.type) && (IsColumnBreaker(thisItem.type) || IsRowBreaker(thisItem.type))))
{
thisItem.effect = BREAKER_EFFECT.CROSS_X_BREAKER;
otherItem.type = GetCookie(otherItem.type);
thisItem.Destroy();
otherItem.Destroy();
board.FindMatches();
}
}
void BombBreakerAndXBreakerDestroy(Item thisItem, Item otherItem)
{
if (thisItem == null || otherItem == null)
{
return;
}
if ((IsBombBreaker(thisItem.type) && IsXBreaker(otherItem.type)) || (IsBombBreaker(otherItem.type) && IsXBreaker(thisItem.type)))
{
thisItem.effect = BREAKER_EFFECT.BOMB_X_BREAKER;
otherItem.type = GetCookie(otherItem.type);
thisItem.Destroy();
otherItem.Destroy();
board.FindMatches();
}
}
#endregion
#region Change
// change all items to column-breaker/row-breaker/bomb-breaker/x-breaker when swap a rainbow with a breaker
void ChangeItemsType(int color, ITEM_TYPE changeToType)
{
List<Item> items = board.GetListItems();
foreach (var item in items)
{
if (item != null)
{
if (item.color == color && item.IsCookie() == true)
{
GameObject explosion = CFX_SpawnSystem.GetNextObject(Resources.Load(Configure.RainbowExplosion()) as GameObject);
if (explosion != null) explosion.transform.position = item.transform.position;
if (item.IsColumnBreaker(changeToType) || item.IsRowBreaker(changeToType))
{
if (item.IsCookie())
{
item.ChangeToColRowBreaker();
}
}
else if (item.IsBombBreaker(changeToType))
{
if (item.IsCookie())
{
item.ChangeToBombBreaker();
}
}
else if (item.IsXBreaker(changeToType))
{
if (item.IsCookie())
{
item.ChangeToXBreaker();
}
}
board.changingList.Add(item);
}
}
}
board.DestroyChangingList();
}
void ChangeToBig()
{
// prevent multiple calls
if (changing == true) return;
else changing = true;
this.GetComponent<SpriteRenderer>().sortingLayerName = "Effect";
iTween.ScaleTo(gameObject, iTween.Hash(
"scale", new Vector3(2.5f, 2.5f, 0),
"oncomplete", "CompleteChangeToBig",
"easetype", iTween.EaseType.linear,
"time", Configure.instance.changingTime
));
}
void CompleteChangeToBig()
{
this.Destroy();
board.FindMatches();
}
#endregion
#region Drop
public void Drop()
{
// prevent multiple calls
if (dropping) return;
else dropping = true;
if (dropPath.Count > 1)
{
board.droppingItems++;
var dist = (transform.position.y - dropPath[0].y);
//print("dist: " + dist);
var time = (transform.position.y - dropPath[dropPath.Count - 1].y) / board.NodeSize();
// fix iTween interesting problems http://vanstrydonck.com/working-with-itween-paths/
while (dist > 0.1f)
{
dist -= board.NodeSize();
dropPath.Insert(0, dropPath[0] + new Vector3(0, board.NodeSize(), 0));
}
iTween.MoveTo(gameObject, iTween.Hash(
"path", dropPath.ToArray(),
"movetopath", false,
"onstart", "OnStartDrop",
"oncomplete", "OnCompleteDrop",
"easetype", iTween.EaseType.linear,
"time", Configure.instance.dropTime * time
));
}
else
{
Vector3 target = board.NodeLocalPosition(node.i, node.j) + board.transform.position;
if (Mathf.Abs(transform.position.x - target.x) > 0.1f || Mathf.Abs(transform.position.y - target.y) > 0.1f)
{
board.droppingItems++;
var time = (transform.position.y - target.y) / board.NodeSize();
//print("target: " + target);
iTween.MoveTo(gameObject, iTween.Hash(
"position", target,
"onstart", "OnStartDrop",
"oncomplete", "OnCompleteDrop",
"easetype", iTween.EaseType.linear,
"time", Configure.instance.dropTime * time
));
}
else
{
dropping = false;
}
}
}
public void OnStartDrop()
{
}
public void OnCompleteDrop()
{
if (dropping)
{
AudioManager.instance.DropAudio();
// reset
dropPath.Clear();
board.droppingItems--;
// reset
dropping = false;
}
}
#endregion
}