private void Start()
 {
     //player.currShipEnergy = player.ShipEnergy;
     lootItem    = null;
     goldLoot    = 0;
     battleState = BattleState.creatingMap;
     coIsRunning = false;
     isMapFull   = false;
     cleared     = false;
     finded      = false;
     board       = new GemControler[col, row + 1];
     GenerateBoard();
     player            = Player.Instance;
     monster           = Monster.Instance;
     destroyedGemCount = new int[gems.Length];
     player.CurrBuff   = 0;
     player.CurrShield = 0;
     player.ShieldMax  = 0;
     PopoutCreator.Initialize();
     mapControler          = GameObject.Find("MapControler").GetComponent <MapControler>();
     playerImageTransform  = GameObject.Find("PlayerImage").transform;
     enemyImageTransform   = GameObject.Find("EnemyImage").transform;
     player.currShipEnergy = player.ShipEnergy;
     player.inventory.ForEach(item => { item.DoOnBattleStart(); });
     audioSource = GetComponents <AudioSource>();
 }
    private void DoAttack()
    {
        bool  isSuperNova = false;
        Color c           = new Color();

        //0-attack 1-heal 2-shield 3-buff 4-gold 5-debuff
        if (destroyedGemCount[3] > 0)//buff
        {
            ColorUtility.TryParseHtmlString("#FF8E00FF", out c);
            int value = destroyedGemCount[3] - 2;
            player.CurrBuff += value;

            PopoutCreator.CreatePopoutText("+" + value.ToString(), playerImageTransform, c);
            isSuperNova         = isSuperNova ? true : (destroyedGemCount[3] >= superNovaCounter ? true : false);
            audioSource[0].clip = audioClips[3];
        }
        if (destroyedGemCount[5] > 0)//debuff
        {
            ColorUtility.TryParseHtmlString("#FF8E00FF", out c);
            int value = destroyedGemCount[5];
            monster.CurrBuff -= value;
            PopoutCreator.CreatePopoutText("+" + value.ToString(), enemyImageTransform, c);
            isSuperNova         = isSuperNova ? true : (destroyedGemCount[5] >= superNovaCounter ? true : false);
            audioSource[0].clip = audioClips[4];
        }
        if (destroyedGemCount[4] > 0)//gold
        {
            ColorUtility.TryParseHtmlString("#F1FF00FF", out c);
            int value = ((destroyedGemCount[4] - 3) * 20) + 30;
            player.gold += value;
            PopoutCreator.CreatePopoutText("+" + value.ToString(), playerImageTransform, c);
            isSuperNova         = isSuperNova ? true : (destroyedGemCount[4] >= superNovaCounter ? true : false);
            audioSource[0].clip = audioClips[5];
        }
        if (destroyedGemCount[1] > 0)//heal
        {
            ColorUtility.TryParseHtmlString("#00FF00FF", out c);
            int value = ((destroyedGemCount[1] - 3) * 2) + 3;
            player.HitPoint += value;
            PopoutCreator.CreatePopoutText("+" + value.ToString(), playerImageTransform, c);
            isSuperNova         = isSuperNova ? true : (destroyedGemCount[1] >= superNovaCounter ? true : false);
            audioSource[0].clip = audioClips[2];
        }
        if (destroyedGemCount[2] > 0)//shield
        {
            ColorUtility.TryParseHtmlString("#1697C5FF", out c);
            int value = ((destroyedGemCount[2] - 3) * 2) + 3 + player.CurrBuff;
            value              = value > 0 ? value : 0;
            player.CurrShield += value;
            PopoutCreator.CreatePopoutText("+" + value.ToString(), playerImageTransform, c);
            isSuperNova         = isSuperNova ? true : (destroyedGemCount[2] >= superNovaCounter ? true : false);
            audioSource[0].clip = audioClips[1];
        }
        if (destroyedGemCount[0] > 0)//attack
        {
            ColorUtility.TryParseHtmlString("#B60101FF", out c);
            //destroyedGemCount[0] += player.currBuff;
            //destroyedGemCount[0] = destroyedGemCount[0] >= 0 ? destroyedGemCount[0] : 0;
            //int value = ((destroyedGemCount[0] - 3) * 2) + 3;
            int value = 3;
            for (int a = 1; a <= (destroyedGemCount[0] - 3); a++)
            {
                value += a * 2;
            }
            value += player.CurrBuff;
            value  = value >= 0 ? value : 0;
            PopoutCreator.CreatePopoutText("-" + value.ToString(), enemyImageTransform, c);
            int temp = monster.CurrShield;
            monster.CurrShield -= value;
            value -= temp;
            if (value > 0)
            {
                monster.CurrHp -= value;
            }
            isSuperNova         = isSuperNova ? true : (destroyedGemCount[0] >= superNovaCounter ? true : false);
            audioSource[0].clip = audioClips[0];
        }
        int i = Random.Range(0, 2);

        audioSource[0].Play();
        if (superNova)
        {
            GameObject nova = Instantiate(superNovaAnim);
            nova.transform.SetParent(novaPosition.transform);
            nova.GetComponent <RectTransform>().localPosition = Vector3.zero;
            Destroy(nova, superNovaAnim.GetComponent <Animator>().runtimeAnimatorController.animationClips[0].length - 0.1f);
            audioSource[1].clip = audioClips[6];
            audioSource[1].Play();
            player.currShipEnergy += 1;
            superNova              = false;
        }

        Array.Clear(destroyedGemCount, 0, destroyedGemCount.Length);
        if (monster.CurrHp <= 0)
        {
            battleState = BattleState.win;
            monster.Kill();
        }
    }