Sobre o projeto

# Um modelo de jogo Bevy Modelo para um jogo usando a incrível [Bevy engine][bevy] com builds prontos para Windows, Linux, macOS, Web (Wasm), Android e iOS. # O que este modelo oferece? * pequeno exemplo ["jogo"](https://niklasei.github.io/bevy_game_template/) * configuração fácil para executar o build web usando [trunk] (`trunk serve`) * execute a versão nativa com `cargo run` * fluxo de trabalho para GitHub actions criando lançamentos para Windows, Linux, macOS e Web (Wasm) prontos para distribuição * o mesmo fluxo cria builds de desenvolvimento para plataformas móveis (dois fluxos separados podem enviar para as lojas após [alguma configuração](#deploy-mobile-platforms)) * envie uma tag no formato `v[0-9]+.[0-9]+.[0-9]+*` (ex.: `v1.1.42`) para acionar o fluxo * fluxo de CI que verifica seu aplicativo em todas as plataformas nativas a cada push AVISO: se você trabalha em um repositório privado, esteja ciente de que os runners macOS e Windows custam mais minutos de build. **Para repositórios públicos, os runners do fluxo são gratuitos!** # Como usar este modelo? 1. Clique em "Use this template" na página do repositório 2. Procure por `ToDo` para usar seu próprio nome de jogo em todos os lugares 3. [Atualize os ícones conforme descrito abaixo](#updating-the-icons) 4. Comece a codificar :tada: * Inicie o aplicativo nativo: `cargo run` * Inicie o build web: `trunk serve` * requer [trunk]: `cargo install --locked trunk` * requer o alvo `wasm32-unknown-unknown`: `rustup target add wasm32-unknown-unknown` * isso servirá seu aplicativo na porta `8080` e reconstruirá + recarregará automaticamente após mudanças no código * Inicie o aplicativo Android: `cargo apk run -p mobile` * requer seguir as instruções no [readme de exemplo do Bevy para configuração Android][android-instructions] * Inicie o aplicativo iOS (veja o [readme de exemplo do Bevy para instruções de configuração iOS][ios-instructions]) * Instale o Xcode pela app store * Abra o Xcode e instale o simulador iOS (marque a caixa no primeiro início, ou instale via `Preferences > Platforms` depois) * Instale os alvos Rust iOS e simulador iOS com `rustup target add aarch64-apple-ios x86_64-apple-ios aarch64-apple-ios-sim` * execute `make run` dentro do diretório `/mobile` Você deve manter o diretório `credits` atualizado. O fluxo de lançamento inclui automaticamente o diretório em cada build. ### Atualizando os ícones 1. Substitua `build/macos/icon_1024x1024.png` por um ícone png de `1024` por `1024` pixels e execute `create_icns.sh` ou `create_icns_linux.sh` se você usar linux (certifique-se de executar o script dentro do diretório `build/macos`) - _Nota: `create_icns.sh` requer um mac, e `create_icns_linux.sh` requer imagemagick e png2icns_ 2. Substitua `build/windows/icon.ico` (usado para o executável Windows e como favicon para os builds web) * Você pode criar um arquivo `.ico` para Windows seguindo estes passos: 1. Abra `macos/AppIcon.iconset/icon_256x256.png` no [Gimp](https://www.gimp.org/downloads/) 2. Selecione o item de menu `File > Export As`. 3. Mude a extensão do arquivo para `.ico` (ou clique em `Select File Type (By Extension)` e selecione `Microsoft Windows Icon`) 4. Salve como `build/windows/icon.ico` 3. Substitua `build/android/res/mipmap-mdpi/icon.png` com `macos/AppIcon.iconset/icon_256x256.png`, mas renomeie para `icon.png` ### Implantar build web no GitHub pages 1. Acione o fluxo `deploy-github-page` 2. Ative [GitHub pages](https://pages.github.com/) para seu repositório 1. Fonte da branch `gh-pages` (criada pela ação recém-executada) 3. Após alguns minutos, seu jogo estará disponível em `http://username.github.io/repository` Para implantar versões mais recentes, basta executar o fluxo `deploy-github-page` novamente. # Implantar plataformas móveis Para informações gerais sobre suporte móvel, você pode dar uma olhada em [um dos meus posts de blog sobre desenvolvimento móvel com Bevy][mobile_dev_with_bevy_2] que é relevante para a configuração atual. ## Android Atualmente, `cargo-apk` é usado para executar o aplicativo de desenvolvimento. Mas APKs não podem mais ser publicados na loja e `cargo-apk` não pode produzir o AAB necessário. É por isso que há configuração para duas ferramentas relacionadas ao Android. Em [`mobile/Cargo.toml`](./mobile/Cargo.toml), a seção `package.metadata.android` configura `cargo-apk` enquanto [`mobile/manifest.yaml`](./mobile/manifest.yaml) configura um fork personalizado de `xbuild` que é usado no fluxo `release-android-google-play` para criar um AAB. Há um [post sobre como configurar o fluxo de lançamento Android][workflow_bevy_android] no meu blog. ## iOS A configuração é basicamente o que o Bevy faz para o exemplo móvel. Há um [post sobre como configurar o fluxo de lançamento iOS][workflow_bevy_ios] no meu blog. # Removendo plataformas móveis Se você não quiser segmentar Android ou iOS, basta excluir os diretórios `/mobile`, `/build/android` e `/build/ios`. Depois, exclua a seção `[workspace]` do `Cargo.toml`. # Ambientes de desenvolvimento ## Suporte Nix nixgl é usado apenas em sistemas Linux não-NixOS; ao executar lá, precisamos usar o sinalizador `--impure`: ``` nix develop --impure ``` Se usar nixgl, então, por exemplo, `gl cargo run`, caso contrário, use `cargo` normalmente. # Começando com Bevy Você deve verificar o site do Bevy para [links para recursos][bevy-learn] e o [Bevy Cheat Book] para um monte de documentação e exemplos úteis. Também posso recomendar o [servidor oficial do Discord do Bevy][bevy-discord] para acompanhar o desenvolvimento e obter ajuda de outros usuários do Bevy. # Problemas conhecidos Áudio em builds web pode ter problemas em alguns navegadores. Isso parece ser um problema geral de desempenho e não devido ao áudio em si (veja [bevy_kira_audio/#9][firefox-sound-issue]). # Licença Este projeto é licenciado sob [CC0 1.0 Universal](LICENSE), exceto algum conteúdo de `assets` e os ícones do Bevy no diretório `build` (veja [Credits](credits/CREDITS.md)). Vá em frente e sinta-se à vontade para me mostrar o que você construir com isso ([@nikl_me][nikl-twitter] / [@nikl_me@mastodon.online][nikl-mastodon]). [bevy]: https://bevyengine.org/ [bevy-learn]: https://bevyengine.org/learn/ [bevy-discord]: https://discord.gg/bevy [nikl-twitter]: https://twitter.com/nikl_me [nikl-mastodon]: https://mastodon.online/@nikl_me [firefox-sound-issue]: https://github.com/NiklasEi/bevy_kira_audio/issues/9 [Bevy Cheat Book]: https://bevy-cheatbook.github.io/introduction.html [trunk]: https://github.com/trunk-rs/trunk [android-instructions]: https://github.com/bevyengine/bevy/blob/latest/examples/README.md#setup [ios-instructions]: https://github.com/bevyengine/bevy/blob/latest/examples/README.md#setup-1 [mobile_dev_with_bevy_2]: https://www.nikl.me/blog/2023/notes_on_mobile_development_with_bevy_2/ [workflow_bevy_android]: https://www.nikl.me/blog/2023/github_workflow_to_publish_android_app/ [workflow_bevy_ios]: https://www.nikl.me/blog/2023/github_workflow_to_publish_ios_app/