Compilar a partir do código-fonte

Esta página foi traduzida automaticamente e pode conter erros. Encontrou um problema? Use o link "Edit this page" para ajudar a corrigir.

Para colaboradores e desenvolvedores que querem trabalhar no próprio motor.

Requisitos

  • SDK do .NET 10
  • glslc para compilar shaders — parte do Vulkan SDK, ou sudo apt install glslc
  • Um driver de GPU com suporte a Vulkan 1.3
  • Linux ou Windows

Clonar e compilar

git clone https://github.com/MASS4ORG/Turian.git
cd Turian
./build.sh compile          # restaura, compila os shaders para SPIR-V e compila todos os projetos

No Windows, use build.cmd ou build.ps1. A compilação é orquestrada pelo NUKE; um dotnet build simples também funciona depois que os shaders forem compilados.

Executar o Studio e a CLI a partir do código-fonte

# Studio, abrindo um projeto
dotnet run --project Turian/Editor/Studio -- --project ../turian-examples/example-01

# CLI
dotnet run --project Turian/Editor/CLI -- new /tmp/MeuJogo
dotnet run --project Turian/Editor/CLI -- export /tmp/MeuJogo
dotnet run --project Turian/Editor/CLI -- screenshot ../turian-examples/example-01 --out shot.png

Os projetos de exemplo ficam no repositório separado turian-examples; clone-o ao lado de Turian.

Organização do repositório

Gaya/                 a plataforma de plugins sobre a qual o Studio roda (Gaya.Sdk, Gaya.Host); sem referências ao Turian
Turian/
  Engine/
    Attributes/       atributos compartilhados por motor, editor e seus scripts ([Range], [Button], [TypeId]…)
    Core/             renderizador Vulkan, grafo de cena, componentes, assets, entrada, localização, serialização
    UI/               interface de jogo .ui / .uss sobre o Guinevere
  Editor/
    Core/             lógica do editor independente de UI: compilação, importação de assets, inspetor, play mode
    Gaya.Plugin/      o próprio Turian Studio — um plugin Gaya (painéis, comandos, viewports)
    Studio/           o executável desktop que hospeda o Gaya e o plugin
    CLI/              turian-cli
    Bootstrap/        os lançadores turian-cli / turian-studio dos pacotes de release
    CSharp/           geradores de código e analisadores Roslyn
Turian.Tests/         testes do motor e do editor
.nuke/                alvos de compilação, empacotamento e release

O Studio é apenas a casca de interface: a lógica fica em Editor/Core ou no motor, onde a CLI e os testes também podem usá-la.

Adicionando um componente embutido

Os componentes embutidos ficam em Turian/Engine/Core. Todo tipo serializado precisa de um [TypeId] estável e único — gere um GUID novo uma vez e nunca o altere, porque os arquivos de cena o armazenam:

namespace Turian.Engine.Core;

/// <summary>Faz um nó subir e descer.</summary>
[ComponentContextMenu("Motion/Bobber")]
[TypeId("0b8d9c3e-6f3a-4a52-9d1e-2f5c7a1b8e40")]
public class BobberComponent : Component
{
    /// <summary>Altura do movimento em metros.</summary>
    public float Amplitude { get; set; } = 0.25f;

    /// <inheritdoc />
    public override void OnUpdate(float deltaTime) { /* … */ }
}

[ComponentContextMenu] o coloca no menu Add Component do Inspector.

Rodando os testes

dotnet run --project Turian.Tests/Turian.Tests.csproj

Use dotnet run, e não dotnet test: a suíte roda sobre a Microsoft.Testing.Platform. A CI roda os mesmos testes com ./build.sh Restore Compile TestReport.

Empacotamento

./build.sh Pack --configuration Release --runtime-identifier linux-x64   # arquivo zip
./build.sh Pack DebianPackage --configuration Release --runtime-identifier linux-x64
./build.sh Pack --configuration Release --runtime-identifier win-x64     # zip + instalador NSIS

Os artefatos vão para artifacts/. O instalador do Windows precisa do makensis (NSIS), que também roda no Linux.

CI/CD

O GitHub Actions roda os testes a cada push (ci.yml). Uma tarefa diária cria uma release quando há commits novos e publica os pacotes para Windows e Linux, a release no GitHub e a imagem de contêiner ghcr.io/mass4org/turian-cli.

Contribuindo

Leia as diretrizes de contribuição: Conventional Commits, pull requests contra main e nenhum aviso novo de compilação.


← Toda a documentação Editar esta página