Beispiel #1
0
    private IEnumerator DelayedPlayerStart()
    {
        yield return(new WaitForSeconds(1f));

        _playerPiece = Instantiate(PrefabManager.GetPrefab(PrefabManager.PrefabType.PlayerPiece), Vector3.zero, Quaternion.identity)
                       .GetComponent <PlayerPieceController>();

        if (GridLevel == 2)
        {
            _playerPiece.ConvertPlayerPieceType(PlayerPieceController.PlayerPieceType.Destroy);
        }
        else if (GridLevel == 3)
        {
            _playerPiece.ConvertPlayerPieceType(PlayerPieceController.PlayerPieceType.Mirror);

            _playerMirrorPiece = Instantiate(PrefabManager.GetPrefab(PrefabManager.PrefabType.PlayerPiece), Vector3.zero, Quaternion.identity)
                                 .GetComponent <PlayerPieceController>();

            _playerMirrorPiece.ConvertPlayerPieceType(PlayerPieceController.PlayerPieceType.Mirror);

            _playerMirrorPiece.PlaceOnTop(ActiveGrid.Pieces[4, 4]);
        }

        _playerPiece.PlaceOnTop(ActiveGrid.Pieces[0, 0]);
    }
    private void OnTriggerEnter(Collider other)
    {
        bool           isOtherColliderHasPieceChildTag = other.CompareTag(TagConstants.TAG_NAME_PLAYER_1_PIECE_CHILD) || other.CompareTag(TagConstants.TAG_NAME_PLAYER_2_PIECE_CHILD);
        PieceMetadatas pieceMetadatasScript            = other.GetComponent <PieceMetadatas>();

        if (isOtherColliderHasPieceChildTag && !pieceMetadatasScript.IsSparkling)
        {
            PlayerPieceController parentPieceMovementScript = null;
            parentPieceMovementScript = other.GetComponentInParent <PlayerPieceController>();

            if (parentPieceMovementScript == null)
            {
                return;
            }

            //If the piece is moving
            if (parentPieceMovementScript.IsMoving)
            {
                PieceMetadatas parentPieceMetadatasScript = other.transform.parent.GetComponent <PieceMetadatas>();
                Vector3        sparkPosition = new Vector3(this.transform.position.x, other.transform.position.y, other.transform.position.z);
                GameObject     currentSpark  = Instantiate(sparkEffects, sparkPosition, sparkEffects.transform.rotation);

                currentSpark.transform.parent = other.gameObject.transform.parent;

                pieceMetadatasScript.IsSparkling       = true;
                parentPieceMetadatasScript.IsSparkling = true;
            }
        }
    }
Beispiel #3
0
    private IEnumerator AnimatePlayerMovement(PlayerPieceController playerPieceController, PieceController pieceController)
    {
        _playerMoving = true;

        AnimationCurve easeEase = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);

        float shrinkTime = 0.09f;
        float expandTime = 0.09f;
        float timer      = shrinkTime;

        while (timer > 0f)
        {
            playerPieceController.transform.localScale = Vector3.Lerp(Vector3.one, Vector3.zero, easeEase.Evaluate((shrinkTime - timer) / shrinkTime));

            timer -= Time.deltaTime;

            yield return(null);
        }

        playerPieceController.transform.localScale = Vector3.zero;

        playerPieceController.PlaceOnTop(pieceController);

        timer = expandTime;

        while (timer > 0f)
        {
            playerPieceController.transform.localScale = Vector3.Lerp(Vector3.zero, Vector3.one, easeEase.Evaluate((expandTime - timer) / expandTime));

            timer -= Time.deltaTime;

            yield return(null);
        }

        playerPieceController.transform.localScale = Vector3.one;

        _playerMoving = false;
    }
Beispiel #4
0
    private void Update()
    {
        int x = (int)Input.GetAxisRaw("Horizontal");
        int z = (int)Input.GetAxisRaw("Vertical");

        if (Input.GetKeyDown(KeyCode.G))
        {
            if (_meteor == null)
            {
                _meteor = Instantiate(PrefabManager.GetPrefab(PrefabManager.PrefabType.Meteor)).GetComponent <MeteorController>();

                StartCoroutine(MeteorPause());

                _gameStarted = false;
            }
            return;
        }

        if (Input.GetKeyDown(KeyCode.R))
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
        }


        if (!_gameStarted)
        {
            return;
        }

        if (Input.anyKeyDown)
        {
            if (_playerMoving)
            {
                return;
            }

            if (Mathf.Abs(x) > 0f || Mathf.Abs(z) > 0f)
            {
                if (_playerPiece.PPieceType == PlayerPieceController.PlayerPieceType.Mirror)
                {
                    PieceController nextPiece = ActiveGrid.ProcessInput(_playerPiece.GridPosition, new Vector2Int(x, z));

                    if (nextPiece != null)
                    {
                        StartCoroutine(AnimatePlayerMovement(_playerPiece, nextPiece));
                    }

                    nextPiece = ActiveGrid.ProcessInput(_playerMirrorPiece.GridPosition, new Vector2Int(x * -1, z * -1));

                    if (nextPiece != null)
                    {
                        StartCoroutine(AnimatePlayerMovement(_playerMirrorPiece, nextPiece));
                    }
                }
                else
                {
                    PieceController nextPiece = ActiveGrid.ProcessInput(_playerPiece.GridPosition, new Vector2Int(x, z));

                    if (nextPiece != null)
                    {
                        StartCoroutine(AnimatePlayerMovement(_playerPiece, nextPiece));
                    }
                }
            }

            if (Input.GetKeyDown(KeyCode.Space))
            {
                if (_playerPiece.PPieceType == PlayerPieceController.PlayerPieceType.Destroy)
                {
                    PieceController destroyedPiece = _playerPiece.DestroyAction();

                    if (destroyedPiece != null)
                    {
                        ActiveGrid.PlayingPieces.Remove(destroyedPiece);
                    }
                }
                else if (_playerPiece.PPieceType == PlayerPieceController.PlayerPieceType.Normal)
                {
                    _playerPiece.ConvertPieceType(PieceController.PieceType.Normal);
                    ActiveGrid.AddPlayingPiece(_playerPiece);
                }
                else if (_playerPiece.PPieceType == PlayerPieceController.PlayerPieceType.Mirror)
                {
                    _playerPiece.ConvertPieceType(PieceController.PieceType.Normal);
                    ActiveGrid.AddPlayingPiece(_playerPiece);

                    _playerMirrorPiece.ConvertPieceType(PieceController.PieceType.Normal);
                    ActiveGrid.AddPlayingPiece(_playerMirrorPiece);
                }

                _cubesUsed++;

                if (ActiveGrid.CheckComplete())
                {
                    PlaceCivsOnPiece(ActiveGrid.Pieces[1, 1]);

                    StartCoroutine(SceneTransition());

                    _gameStarted = false;
                }
                else
                {
                    _playerPiece = Instantiate(PrefabManager.GetPrefab(PrefabManager.PrefabType.PlayerPiece), Vector3.zero, Quaternion.identity)
                                   .GetComponent <PlayerPieceController>();

                    if (GridLevel == 3)
                    {
                        if (_cubesUsed == 1)
                        {
                            _playerPiece.ConvertPlayerPieceType(PlayerPieceController.PlayerPieceType.Destroy);
                        }
                    }

                    _playerPiece.PlaceOnTop(ActiveGrid.Pieces[0, 0]);
                }

                //_playerPiece.ConvertPlayerPieceType(PlayerPieceController.PlayerPieceType.Destroy);
            }
        }
    }