// Create and position piece object
    public void CreateAndPositionPieceObject(GamePiece newPiece)
    {
        GamePieceObject newPieceObject = CreatePieceObject(newPiece);

        gamePieceObjects[newPiece] = newPieceObject;
        newPieceObject.SetPosition(gameMapObject);
        resourceCounter.UpdateAllResources(player.GetResources());
    }
    // Instantiate player pieces
    public void InstantiateStartingPieces()
    {
        List <GamePiece> pieces = player.pieces;

        for (int i = 0; i < pieces.Count; i++)
        {
            GamePieceObject newPieceObject = GamePieceObject.InitializeFromGamePiece(pieces[i], gameMapObject.tilemap.transform, player.playerId);
            newPieceObject.SetPosition(gameMapObject);
            gamePieceObjects[pieces[i]] = newPieceObject;
        }
        fogMapObject.PaintFogMap();
    }
 // Initialize from a card piece
 public static GamePieceObject InitializeFromCardPiece(CardPiece cardPiece, Transform parentTransform, Player player)
 {
     if (cardPiece.cardType == CardType.Unit)
     {
         GamePieceObject newUnitObject = Instantiate(GetUnitPrefab(), parentTransform);
         Unit            newUnit       = GamePiece.CreatePiece <Unit>(cardPiece, player);
         newUnitObject.SetPiece(newUnit);
         return(newUnitObject);
     }
     else if (cardPiece.cardType == CardType.Building)
     {
         GamePieceObject newBuildingObject = Instantiate(GetUnitPrefab(), parentTransform);
         Building        newBuilding       = GamePiece.CreatePiece <Building>(cardPiece, player);
         newBuildingObject.SetPiece(newBuilding);
         return(newBuildingObject);
     }
     else
     {
         return(null);
     }
 }
    // Initialize from a game piece
    public static GamePieceObject InitializeFromGamePiece(GamePiece piece, Transform parentTransform, int playerId)
    {
        CardPiece cardPiece = piece.GetCard();

        if (cardPiece.cardType == CardType.Unit)
        {
            GamePieceObject newUnitObject = Instantiate(GetUnitPrefab(), parentTransform);
            newUnitObject.SetPiece(piece);
            //piece.gamePieceObject = newUnitObject;
            return(newUnitObject);
        }
        else if (cardPiece.cardType == CardType.Building)
        {
            GamePieceObject newBuildingObject = Instantiate(GetUnitPrefab(), parentTransform);
            newBuildingObject.SetPiece(piece);
            //piece.gamePieceObject = newBuildingObject;
            return(newBuildingObject);
        }
        else
        {
            return(null);
        }
    }
    // Attack piece
    private void AttackPiece(Vector3Int targetTileCoords)
    {
        // Get targeted piece and player object
        GamePiece    targetPiece  = gameMap.GetHexPieceFromHexCoords(Hex.TileToHexCoords(targetTileCoords));
        PlayerObject playerObject = gameManagerObject.GetPlayerObject(targetPiece.GetPlayerId());

        // Attack piece
        GamePiece attackingPiece = player.selectedPiece;

        attackingPiece.AttackPiece(targetPiece);

        // Update the targeted piece lifebar
        playerObject.UpdateGamePieceObjectLifebar(targetPiece);

        // Set attacking piece as disabled
        GamePieceObject gamePieceObject = gamePieceObjects[attackingPiece];

        gamePieceObject.ShowPieceDisabled();

        // Update maps
        player.UpdateMaps(gameMap);
        PaintPlayerMaps();
    }
    // Get unit prefab
    public static GamePieceObject GetUnitPrefab()
    {
        GamePieceObject gamePieceObject = Resources.Load <GamePieceObject>(ENV.UNIT_PREFAB_RESOURCE_PATH);

        return(gamePieceObject);
    }
    // Create piece object
    public GamePieceObject CreatePieceObject(GamePiece piece)
    {
        GamePieceObject newPieceObject = GamePieceObject.InitializeFromGamePiece(piece, gameMapObject.tilemap.transform, player.playerId);

        return(newPieceObject);
    }
    // Create piece
    public GamePieceObject CreatePiece(CardPiece cardPiece)
    {
        GamePieceObject newPieceObject = GamePieceObject.InitializeFromCardPiece(cardPiece, gameMapObject.tilemap.transform, player);

        return(newPieceObject);
    }