public void Move(Vector3 v3Direction)
    {
        if (bEnableMovement)
        {
            if (bRotateBeforeMove && v3LookDirection != v3Direction)
            {
                v3LookDirection = v3Direction;
                if (v3LookDirection == Vector3.right)
                {
                    this.transform.rotation = Quaternion.Euler(Vector3.up * 180);
                }
                else if (v3LookDirection == Vector3.left)
                {
                    this.transform.rotation = Quaternion.Euler(Vector3.zero);
                }
                else if (v3LookDirection == Vector3.forward)
                {
                    this.transform.rotation = Quaternion.Euler(Vector3.up * 90);
                }
                else if (v3LookDirection == Vector3.back)
                {
                    this.transform.rotation = Quaternion.Euler(Vector3.up * 270);
                }

                qCurrentRotation = this.transform.rotation;
            }
            else
            {
                if (ValidateMove(v3Direction))
                {
                    v3TargetPosition += v3Direction;
                    bfinishedMoving   = false;
                    RefreshLevelReference(v3Direction);
                }

                else if (ValidatePush(v3Direction))
                {
                    int            index          = MMUtils.MatrixIndexesToListIndex(v3CurrentPosition + v3Direction, gameController.GetCurrentLevel().MaxSize);
                    MovementObject mvObjectToMove = gameController.scenarioObjects[index].GetComponent <MovementObject>();
                    if (mvObjectToMove.bEnableMovement)
                    {
                        StartCoroutine(mvObjectToMove.Movequeue(v3Direction));
                    }
                }
            }
        }
    }