public void SwitchAttackMode()
    {
        if (attackMode)
        {
            attackMode            = false;
            avalibleMovementTiles = AreaCalculations.GetTilesAvalibleForMovement(currentCharacter);

            if (attackArea != null)
            {
                ClearTiles(attackArea.AffectedTiles);
                ClearTilesFromHashtable(attackArea.AffectedCharacters);
            }

            ShowTilesFromHashtable(avalibleMovementTiles, tileAvailableForMove);
        }
        else
        {
            attackMode = true;
            ClearTilesFromHashtable(avalibleMovementTiles);

            if (currentCharacter.ActionAvailable)
            {
                attackArea = AreaCalculations.GetAreaOfEffect(Vector3Int.FloorToInt(currentCharacter.transform.position), currentCharacter.AttackRange, currentCharacter.Team);
                ShowTiles(attackArea.AffectedTiles, tileAffected);
                ShowTilesFromHashtable(attackArea.AffectedCharacters, tileTarget);
            }
        }
    }
    public void StartTurn()
    {
        clearAllTiles();

        if (currentCharacter != null)
        {
            clearTileOnPosition(Vector3Int.FloorToInt(currentCharacter.transform.position));
        }

        currentCharacter = gameController.GetNextCharacter(currentCharacter);
        DisplayCurrentCharacterData();

        setTileOnPosition(Vector3Int.FloorToInt(currentCharacter.transform.position), tileCurrentCharacter);

        attackMode = false;

        avalibleMovementTiles = AreaCalculations.GetTilesAvalibleForMovement(currentCharacter);
        ShowTilesFromHashtable(avalibleMovementTiles, tileAvailableForMove);
    }
    private void MoveCharacter(RaycastHit2D hit)
    {
        Vector3    mouseWorldPos   = camera.ScreenToWorldPoint(Input.mousePosition);
        Vector3Int tilemapMousePos = UILayer.WorldToCell(mouseWorldPos);

        if (avalibleMovementTiles.Contains(tilemapMousePos))
        {
            clearTileOnPosition(Vector3Int.FloorToInt(currentCharacter.transform.position));

            currentCharacter.Move(tilemapMousePos, 0);
            currentCharacter.ChangeCurrentSpeedByCost((int)avalibleMovementTiles[tilemapMousePos]);

            logEvent.Invoke(currentCharacter.name + " moved to: " + tilemapMousePos);

            ClearTilesFromHashtable(avalibleMovementTiles);

            setTileOnPosition(Vector3Int.FloorToInt(currentCharacter.transform.position), tileCurrentCharacter);

            avalibleMovementTiles = AreaCalculations.GetTilesAvalibleForMovement(currentCharacter);
            ShowTilesFromHashtable(avalibleMovementTiles, tileAvailableForMove);
        }

        DisplayCurrentCharacterData();
    }