// using System.Collections;
// using System.Collections.Generic;
// using Enums;
// using UnityEngine;
//
// //This is a SINGULAR gem
// public class SC_Gem : MonoBehaviour
// {
//     [HideInInspector]
//     public Vector2Int posIndex;
//
//     private Vector2 firstTouchPosition;
//     private Vector2 finalTouchPosition;
//     private bool mousePressed;
//     private float swipeAngle = 0;
//     private SC_Gem otherGem;
//
//     public GemType type;
//     public bool isMatch = false;
//     private Vector2Int previousPos;
//     public GameObject destroyEffect;
//     public int scoreValue = 10;
//
//     public int blastSize = 1;
//     private SC_GameLogic scGameLogic;
//
//     void Update()
//     {
//         //if the current position doesnt match the index in GameBoard, animate it to move to the correct position
//         //else, we update the GameBoard with the current possition, do we need this every frame????
//         if (Vector2.Distance(this.transform.position, this.posIndex) > 0.01f)
//             this.transform.position = Vector2.Lerp(this.transform.position, this.posIndex, SC_GameVariables.Instance.gemSpeed * Time.deltaTime);
//         else
//         {
//             this.transform.position = new Vector3(this.posIndex.x, this.posIndex.y, 0);
//             this.scGameLogic.SetGem(this.posIndex.x, this.posIndex.y, this);
//         }
//         
//         if (this.mousePressed && Input.GetMouseButtonUp(0))
//         {
//             this.mousePressed = false;
//             if (this.scGameLogic.CurrentState == GameState.Move)
//             {
//                 this.finalTouchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
//                 CalculateAngle();
//             }
//         }
//     }
//
//     public void SetupGem(SC_GameLogic _ScGameLogic,Vector2Int _Position)
//     {
//         this.posIndex = _Position;
//         this.scGameLogic = _ScGameLogic;
//     }
//
//     //Not every gem needs this
//     private void OnMouseDown()
//     {
//         if (this.scGameLogic.CurrentState == GameState.Move)
//         {
//             this.firstTouchPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
//             this.mousePressed = true;
//         }
//     }
//
//     //Not every gem needs this
//     private void CalculateAngle()
//     {
//         this.swipeAngle = Mathf.Atan2(this.finalTouchPosition.y - this.firstTouchPosition.y, this.finalTouchPosition.x - this.firstTouchPosition.x);
//         this.swipeAngle = this.swipeAngle * 180 / Mathf.PI;
//
//         if (Vector3.Distance(this.firstTouchPosition, this.finalTouchPosition) > .5f)
//             MovePieces();
//     }
//
//     //Not every gem needs this, maybe
//     private void MovePieces()
//     {
//         this.previousPos = this.posIndex;
//
//         if (this.swipeAngle < 45 && this.swipeAngle > -45 && this.posIndex.x < SC_GameVariables.Instance.rowsSize - 1)
//         {
//             this.otherGem = this.scGameLogic.GetGem(this.posIndex.x + 1, this.posIndex.y);
//             this.otherGem.posIndex.x--;
//             this.posIndex.x++;
//
//         }
//         else if (this.swipeAngle > 45 && this.swipeAngle <= 135 && this.posIndex.y < SC_GameVariables.Instance.colsSize - 1)
//         {
//             this.otherGem = this.scGameLogic.GetGem(this.posIndex.x, this.posIndex.y + 1);
//             this.otherGem.posIndex.y--;
//             this.posIndex.y++;
//         }
//         else if (this.swipeAngle < -45 && this.swipeAngle >= -135 && this.posIndex.y > 0)
//         {
//             this.otherGem = this.scGameLogic.GetGem(this.posIndex.x, this.posIndex.y - 1);
//             this.otherGem.posIndex.y++;
//             this.posIndex.y--;
//         }
//         else if (this.swipeAngle > 135 || this.swipeAngle < -135 && this.posIndex.x > 0)
//         {
//             this.otherGem = this.scGameLogic.GetGem(this.posIndex.x - 1, this.posIndex.y);
//             this.otherGem.posIndex.x++;
//             this.posIndex.x--;
//         }
//
//         this.scGameLogic.SetGem(this.posIndex.x, this.posIndex.y, this);
//         this.scGameLogic.SetGem(this.otherGem.posIndex.x, this.otherGem.posIndex.y, this.otherGem);
//
//         StartCoroutine(CheckMoveCo());
//     }
//
//     //Why are we checking matches on the Gem itself
//     public IEnumerator CheckMoveCo()
//     {
//         this.scGameLogic.SetState(GameState.Wait);
//
//         yield return new WaitForSeconds(.5f);
//         this.scGameLogic.FindAllMatches();
//
//         if (this.otherGem != null)
//         {
//             if (this.isMatch == false && this.otherGem.isMatch == false)
//             {
//                 this.otherGem.posIndex = this.posIndex;
//                 this.posIndex = this.previousPos;
//
//                 this.scGameLogic.SetGem(this.posIndex.x, this.posIndex.y, this);
//                 this.scGameLogic.SetGem(this.otherGem.posIndex.x, this.otherGem.posIndex.y, this.otherGem);
//
//                 yield return new WaitForSeconds(.5f);
//                 this.scGameLogic.SetState(GameState.Move);
//             }
//             else
//             {
//                 this.scGameLogic.DestroyMatches();
//             }
//         }
//     }
// }
