Polymers é uma biblioteca de componentes e sistemas para o gerador de sistema de componentes de entidade-componente do Polymorph.
A biblioteca fornece componentes para tarefas comuns para apoiar o desenvolvimento de software em um estilo orientado a dados. Esses componentes podem ser combinados e construídos livremente com componentes e sistemas fabricados pelo usuário.
Os componentes suportam principalmente o Windows, mas alguns também serão executados em outras plataformas se houver um back -end disponível.
A importação da biblioteca dará acesso a todos os modelos de defina, mas não definirá nada ou gerará nenhum código, a menos que esses modelos sejam usados.
O uso dos modelos de define registrará seus componentes com o ECS atual. Alguns componentes fornecem modelos separados para registrar seus sistemas para que a ordem de execução possa ser controlada.
Por exemplo, você pode registrar componentes gráficos para o seu ECS e executar os sistemas de atualização da GPU em um ponto específico da sua execução.
Para obter mais informações sobre o uso do Polymorph, consulte o manual.
Abaixo está um exemplo dos componentes TCP/IP enviando e recebendo dados:
import polymorph, polymers
defineTcpNetworking ( fixedSizeComponents ( 100 ), defaultSysOpts, tllEvents)
makeSystem ( " serverRead " , [ TcpRecv , TcpRecvComplete ]):
fields:
gotMessage: bool
all:
echo " Server received message: " , item.tcpRecv.data
sys.gotMessage = true
makeEcs ()
commitSystems " poll "
let
port = 1234 . Port
server = newEntityWith ( TcpListen (port: port))
client = newEntityWith (
TcpConnection (
remoteAddress: " 127.0.0.1 " ,
remotePort: port),
TcpSend (data: " Hello " ))
while not sysServerRead.gotMessage:
poll () O parâmetro tllEvents cria um log de atividade de pacotes:

Muitos módulos de componentes incluem uma demonstração de como eles podem ser usados quando executados como o módulo principal. A pasta demos contém vários exemplos mais complexos de uso dos componentes juntos.
As demos gráficas usam SDL2 para configurar a janela de renderização.
modelsandtextures : usa os componentes do OpenGL para renderizar um milhão de partículas que reagem ao mouse. dbbrowser (e dbbrowserthreads ): usa os componentes do console e do banco de dados para criar um navegador de tabela de banco de dados da linha de comando.
consolemousebuttons : usa os componentes do console para criar uma interface do botão baseada em texto que pode ser interagida com o uso do mouse.
netspeedtest : mede a velocidade do envio/recebimento de pacotes UDP no host localizando quantas chegam dentro de um período de tempo definido.
jsonrpc_ecsinfo : usa os componentes de rede para servir um RPC JSON sobre o HTTP para listar as entidades atuais.
simplewebsite : usa os componentes de rede para servir uma página da web com uma página padrão que exibe a contagem de visualizações e a URL /time que exibe o horário atual.
spaceshooter2d : um jogo de tiro espacial 2D usando os componentes do OpenGL.
particlelife : uma implementação do "sistema de partículas primordiais" descrito aquichipmunkballpit : usa os componentes Chipmunk2D e OpenGL para simular bolas em uma caixa. Use o mouse para movê -los.Usa Glbits para renderizar modelos e texturas com o OpenGL.
Passe em seu próprio componente de posição ou use a Position padrão.
Modelo : exibe um modelo 3D nas coordenadas no componente de posição. O modelo é renderizado com objetos de buffer/matriz de vértice e renderização instanciada, assim como performante, mesmo com centenas de milhares de instâncias.
Textura : Exibe uma instância do Billboard de textura nas coordenadas no componente de posição.
Usa o Chipmunk2D para simular a física.
Física : um invólucro para o objeto chipmunk.body .
PhysicsShape : um invólucro para objetos chipmunk.shape .
BodyTemplate : Substituído na construção pelo PhysicsBody .
ShapeTemplate : substituído na construção por PhysicsShape .
Existem duas versões dos componentes do banco de dados, ecs_db_threads para consultas encadeadas e ecs_db para consultas não thread.
Eles usam a biblioteca odbc encontrada aqui.
ConnectTodb : inicia uma conexão com o banco de dados com seus parâmetros contidos. Depois que a conexão é estabelecida, ela é removida e um componente de banco de dados é adicionado à entidade.
Consulta : executa uma consulta quando uma sequência de dados de banco de dados está presente. Quando um resultado é obtido, ele é colocado dentro de um componente de consultas e adicionado à entidade.
Usa as portas de conclusão do Windows IO para redes de alta velocidade.
TCPConnection : Usado para conectar -se a um endereço.
TCPConnected : Indica que a conexão foi concluída.
TCPRECV : lê dados de uma conexão aceita.
TCPRECVCOMPLETE : Indica que os dados terminaram de ser recebidos.
TCPSEND : Envie alguns dados para uma TcpConnection .
TcpsendComplete : indica que uma operação de envio foi concluída.
Tcplisten : aguarda uma conexão de entrada e gera uma ComponentList quando uma conexão é aceita.
Tcperrors : registra erros de tcp.
UdPread : Tag Uma entidade com este componente para se inscrever nos pacotes UDPData recebidos entre os componentes UDPIncoming .
UDPSEND : Adicionar este componente faz com que uma mensagem UDP seja enviada ao host e porta do parâmetro.
RenderChar : Este componente gera com eficiência um único caractere para o console, controlável com as coordenadas x e y normalizadas para -1.0 .. 1.0 . Isso permite a criação fácil de interfaces ou saídas acionadas por texto que se assemelham mais à renderização com os gráficos.
Renderstring : Uma série de entidades com componentes RenderChar , gerenciada para que você possa definir a propriedade text e uma coordenada normalizada (x, y). As entidades e componentes constituintes são acessíveis para editar e lida com o recorte da largura/fronteira desejada.
Densidade : Este componente atualiza o caractere exibido em um RenderChar de acordo com o número de entidades RenderChar presentes em uma posição específica de caractere. Isso fornece uma maneira simples de exibir várias entidades que estão próximas.
Consoleinput : Receba componentes do evento de entrada do console.
KeyInput , KeyChange : Receba eventos de imprensa de teclas.
MouseInput : Receba todos os componentes do evento do mouse.
Mousemoving , MouseButtons : Receba eventos específicos do mouse.
WindowChange : Receba eventos para a janela do console Alterando o tamanho.
Este módulo usa ecs_renderchar e ecs_consoleevents para criar 'botões' textuais de UI textual acionado por mouse.
MouseButton : permite definir um tamanho, alinhamento de texto, opções de fundo e borda. O acesso total às entidades de renderização é fornecido para que possam ser editados. Gera componentes de eventos como MouseButtonClick e MouseButtonMouseOver para os sistemas para responder.
DrawMouse : Tag uma entidade com este componente para que seu personagem seja desenhado no local do mouse.
EditString : string editável para leitura de entrada do usuário no console.
InputFinished : Indica que o EditString recebeu uma entrada de retorno ou escape.
construction (um modelo de entidades) após um determinado período de tempo. Útil para executar alguma tarefa após algum atraso sem bloquear. Morto : Este componente de tag pode ser usado para lidar com operações de limpeza dentro de um quadro de execução. Crie sistemas que usam Killed junto com outros componentes para lidar com coisas como recursos de liberação de propriedade de um componente no estágio correto da execução do sistema, em vez de chamar delete diretamente. Invoque addKillingSystem no momento apropriado para delete as entidades após o término do trabalho de limpeza.
Killafter : Adicionar Killed a uma entidade após uma duração definida. Útil para entidades temporárias que possam ter recursos que precisam de finalização apropriada ou apenas 'fogo e esquecer' entidades temporárias.