private void AssignGem(GemElement gemElement)
        {
            if (_firstSelectedObject)
            {
                //if same object, unselect and clean
                if (_firstSelectedObject == gemElement)
                {
                    gemElement.Unselect();
                    Clean();
                    return;
                }

                //if neighbor, proceed to complete selection
                if (_firstSelectedObject.IsNeighborFrom(gemElement))
                {
                    _secondSelectedObject = gemElement;
                    gemElement.Select();

                    OnSelectionComplete.Invoke(_firstSelectedObject, _secondSelectedObject);
                    Clean();
                    return;
                }

                //if not neighbor, it is an invalid move
                _secondSelectedObject = gemElement;
                OnSelectionInvalid?.Invoke(_firstSelectedObject, _secondSelectedObject);
                Clean();
            }
            else
            {
                _firstSelectedObject = gemElement;
                gemElement.Select();
            }
        }
예제 #2
0
 public void CheckCondition(GemElement gem)
 {
     for (int i = 0; i < 3; i++)
     {
         if (gem.index == CondGemsIndex[i] && IsDone[i] == false)
         {
             Totalmoves[i]--;
             if (i == 0)
             {
                 GameController.instance.uIController.firstCount.text = Totalmoves[i].ToString();
             }
             else if (i == 1)
             {
                 GameController.instance.uIController.secCount.text = Totalmoves[i].ToString();
             }
             else if (i == 2)
             {
                 GameController.instance.uIController.thirdCount.text = Totalmoves[i].ToString();
             }
             if (Totalmoves[i] <= 0)
             {
                 IsDone[i] = true;
                 CheckWin();
             }
         }
     }
 }
        private IEnumerator ChangeGemsPosition(GemElement first, GemElement second)
        {
            var firstSnapshot  = new GridPositionSnapshot(first);
            var secondSnapshot = new GridPositionSnapshot(second);

            _inputController.Enable(false);

            yield return(this.RunAndWait(first.Move(secondSnapshot), second.Move(firstSnapshot)));

            _gems = _gridController.UpdateGrid(_gems);

            var sequence = _sequenceChecker.IsMovementValid(_gems, first, second, out var sequenceList);

            switch (sequence)
            {
            case SequenceType.None:
                //if it is a not valid move, rollback
                yield return(this.RunAndWait(first.Move(firstSnapshot), second.Move(secondSnapshot)));

                break;

            case SequenceType.Horizontal:
            case SequenceType.Vertical:
                _soundController.Play(_swap);
                yield return(_gridController.ProcessSequence(_gems, sequenceList, sequence));

                if (!_gridController.CheckAvailableGame(_gems))
                {
                    Shuffle();
                    yield break;
                }
                _gems = _gridController.CurrentGrid;     //this is not good
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            _inputController.Enable(true);
        }
예제 #4
0
 // Use this for initialization
 private void Start()
 {
     instance = this;
     Debug.Log("AYO");
     rigidbody = GetComponent <Rigidbody>();
 }
 private void Clean()
 {
     _firstSelectedObject  = null;
     _secondSelectedObject = null;
 }
 private void InvalidMove(GemElement first, GemElement second)
 {
     first.InvalidMove();
     second.InvalidMove();
 }