quarta-feira, 7 de novembro de 2007

Estrutura da engine Tecnodata3D

A engine tem uma estrutura simples, porém bem flexivel.

Divimos a engine em varias assemblies, sendo atualmente as seguintes:

- Tecnodata3D.Utility
Engloba metodos e classes básicas necessárias ao funcionamento da engine. Nela se encontram singletons como a Global ( disponibiliza uma interface geral de acesso a todos os subsistemas da utility ), Input, Camera, AssetManager (gerencia o conteúdo do jogo), Log, ScreenManager (gerencia as telas do jogo) e UserProfileManager. Possui classes que representam entidades, luzes, coleções (ex. Pair), perfis de usuário e configurações, exceções, efeitos e módulos. Além de tudo isso, inclui também a classe BaseGame que é necessário herdar para a criação de um aplicativo usando a engine;

- Tecnodata3D.Additional
Inclui vários componentes como contador de FPS, capturador de imagem de tela, e telas padrão de jogo (explicarei esta parte em mais detalhe num novo post);

- Tecnodata3D.ContentPipeline
Todas as classes necessárias para a criação de tipos próprios de dados, como por exemplo nossa T3DModel e Terrain;

- Tecnodata3D.Physics
Toda a lógica de mundo físico é definida aqui nesta assembly. Por hora estamos utilizando a biblioteca Newton para simulação de física, mas nossa estrutura de classes é flexivel ao ponto de nos permitir utilizar outras bibliotecas, ou mesmo criar uma lógica do zero;

- Tecnodata3D.Renderer
Aqui se encontram as classes responsáveis pelo desenho 2D e 3D na tela, incluindo um SceneManager (que utiliza de um SceneGraph internamente para controle de cena). Inclui também facilidades pra criação de interfaces gráficas 2D, e controle de cursor de mouse;

Esta estrutura nos possibilitou uma fácil visualização do escopo da engine, e uma flexibilidade enorme na hora de alterar e adicionar módulos de engine. Eu estarei explicando mais detalhadamente cada uma das assemblies em posts seguintes - então até breve.

2 comentários:

Anônimo disse...

A classe Util não é um porão? Onde muitos programadores colocam rotinas diversas?
Não seria mais prudente definir mais as classes?
[billguedes]

Daniel 'Portus' Alves disse...

Opa Guedes, bacana voce ter postado por aqui.

Bom, na verdade a Utility nao eh uma classe, e sim um conjunto de classes. Nessa biblioteca, colocamos tudo representa a base da engine. Existe uma biblioteca extra na engine que define rotinas e classes diversas de apoio, a qual chamamos de Tecnodata3D.Additional. É mais uma questao de nomeclatura.

Em relaçao a definir mais classes - a utility incorpora um bom punhado de classes necessarias ao funcionamento da engine (e cresce a cada dia q passa), isso inclui classes para manipulaçao de modelos (com texturas e animaçoes), camera, input, logging, configuraçoes de usuario, controle de fluxo, gerenciamento de janela e jogo, etc.