GODOT 4 vs GODOT 3.X: incompatibilidades

Um robô sob a luz do luar em um cenário urbano

🤖🤖🤖

Hoje é lua cheia e coincidência ou não, sempre estou mais inclinado a iniciar novos projetos na lua cheia (ou retomar velhos projetos, como é o caso).

Descobri hoje que a Godot versão 4 foi lançada oficialmente.

Eu estava muito ansioso por isso, mesmo tendo pausado o projeto Space Punkers no inicio de janeiro devido a problemas de agenda, eu esperava colocar minhas garras nesta nova versão da Engine para poder testá-la com o meu projeto em andamento em algum momento desse semestre.

Hoje, navegando na internet, resolvi visitar a página oficial da Godot para ver as novidades e eis que me deparei com a agradável surpresa: a versão 4 já está disponível para download. Como não acesso desde janeiro, pode ser que ela já esteja disponível a um tempo.

Fui logo testar a importação do meu projeto para a engine nova e eis que o motor dá logo um alerta: eu precisaria converter meu projeto para a nova versão e para fazer isso deveria escolher entre converter todo o projeto ou apenas o arquivo principal que nomeia o projeto.

Escolhi converter todo o projeto; afinal, só assim eu poderia testar todas as funcionalidades e mudanças na ferramenta.

Claro que com isso, muitos erros de versão irão ocorrer e eu precisaria arrumá-los todos (mas só vou seguir com isso se a quantidade de erros não for intratável).

Ao término da conversão a Godot me avisa que o arquivo da cena inicial (Start Game.tscn) deu um problema durante a conversão.

Cliquei em "Ok" para finalizar a conclusão e após isso tentei rodar o projeto e já me deparei com o primeiro erro em uma chamada para uma função global (escrita na cena OneRing_Script.tscn: sim, minha cena de funções globais para a todas as outras cenas dominar). O erro diz respeito a função que eu uso para ler e contar diretórios e arquivos em um diretório. Essa é uma função muito útil e que eu adaptei da função padrão de exemplo na documentação da própria Godot.

O erro diz respeito à palavra reservada Directory como é possível ver no print abaixo, pois é exibida a mensagem informando que essa palavra não está declarada. Sendo assim, ela deve ter sido modificada na linguagem GDScript (alias, eu uso a linguagem oficial da Godot, que é a GDScript, para programar na ferramenta, ainda que ela permita o uso de outras linguagens).

Tela da engine Godot: erro na palavra reservada Directory
erro na palavra reservada Directory

Consultei a documentação atualizada e encontrei novamente o exemplo de como escrever uma função para contar diretórios e arquivos. Com base nessa documentação, fiz os ajustes necessários no meu código (conforme o print abaixo) e aparentemente deu certo, porque após executar o projeto, o mesmo não parou nessa tela de erro referente à palavra Directory. Em contrapartida, parou em outra função, o que indica que a quantidade de erros que precisarei tratar para finalizar essa conversão para a Godot 4 é bem grande. Basicamente agora a palavra Directory mudou para DirAccess e a forma de usá-la está um pouco diferente; mais simples: não é mais preciso criar uma instância da classe e depois usar a instância para abrir o diretório desejado. Agora você já cria uma instância do próprio "diretório", encurtando um pouco o caminho.

Tela da engine Godot: ajuste realizado no erro
ajuste realizado

Talvez eu faça um teste convertendo apenas o arquivo principal do projeto, sem alterar a estrutura dos demais arquivos, mas deixarei para testar isso em outro momento.

Vou ficando por aqui, mas espero voltar em breve com outros ajustes na conversão do Space Punkers versão Godot 3.X para Godot 4.

Estou muito animado com a nova versão dessa Engine maravilhosa.