Polymers es una biblioteca de componentes y sistemas para el generador de sistemas de componente de la entidad polimorfa.
La biblioteca proporciona componentes para tareas comunes para admitir el desarrollo del software en un estilo orientado a datos. Estos componentes se pueden combinar y construir libremente con componentes y sistemas hechos por el usuario.
Los componentes admiten principalmente Windows, pero algunos también se ejecutarán en otras plataformas si hay un backend disponible.
La importación de la biblioteca dará acceso a todas las plantillas Definir, pero no definirá nada ni generará ningún código a menos que se usen estas plantillas.
El uso de las plantillas Definir registrará sus componentes con el ECS actual. Algunos componentes suministran plantillas separadas para registrar sus sistemas para que se pueda controlar el orden de ejecución.
Por ejemplo, es posible que desee registrar componentes gráficos para su ECS, luego ejecutar los sistemas de actualización de GPU en un punto específico de su ejecución.
Para obtener más información sobre el uso de Polymorph, consulte el manual.
A continuación se muestra un ejemplo de los componentes TCP/IP que envían y reciben datos:
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 () El parámetro tllEvents crea un registro de actividad de paquetes:

Muchos módulos de componentes incluyen una demostración de cómo se pueden usar cuando se ejecutan como el módulo principal. La carpeta demos contiene varios ejemplos más complejos de uso de los componentes juntos.
Las demostraciones de gráficos usan SDL2 para configurar la ventana de representación.
modelsandtextures : utiliza los componentes OpenGL para representar un millón de partículas que reaccionan al ratón. dbbrowser (y dbbrowserthreads ): utiliza los componentes de la consola y la base de datos para crear un navegador de la tabla de base de datos de línea de comando.
consolemousebuttons : utiliza los componentes de la consola para crear una interfaz de usuario de botón basada en texto que se pueda interactuar con el uso del mouse.
netspeedtest : mide la velocidad de enviar/recibir paquetes UDP en localhost contando cuántos llegan dentro de un marco de tiempo establecido.
jsonrpc_ecsinfo : utiliza los componentes de red para servir a un JSON RPC a través de HTTP para enumerar las entidades actuales.
simplewebsite : utiliza los componentes de red para servir una página web con una página predeterminada que muestra el recuento de la vista y la URL A /time que muestra la hora actual.
spaceshooter2d : un juego de tiradores espaciales 2D usando los componentes OpenGL.
particlelife : una implementación del "sistema de partículas primordiales" descrita aquíchipmunkballpit : usa los componentes Chipmunk2D y OpenGL para simular bolas en una caja. Usa el mouse para moverlos.Utiliza GLBITS para representar modelos y texturas con OpenGL.
Pase en su propio componente de posición o use la Position predeterminada.
Modelo : muestra un modelo 3D en las coordenadas en el componente de posición. El modelo se representa con los objetos de búfer/matriz de vértices y la representación instanciada, por lo que es un rendimiento incluso con cientos de miles de instancias.
Textura : muestra una instancia de Billboard de textura en las coordenadas en el componente de posición.
Utiliza Chipmunk2D para simular la física.
Física : un envoltorio para el objeto chipmunk.body .
PhysicsShape : un envoltorio para chipmunk.shape objetos.
BodyTemplate : sustituido en la construcción con PhysicsBody .
Shapetemplate : sustituido en la construcción con PhysicsShape .
Hay dos versión de los componentes de la base de datos, ecs_db_threads para consultas roscadas y ecs_db para consultas no tensas.
Estos usan la biblioteca odbc que se encuentra aquí.
ConnectTodb : inicia una conexión a la base de datos con sus parámetros contenidos. Una vez que se establece la conexión, se elimina y se agrega un componente de DataBASEConnection a la entidad.
Consulta : realiza una consulta cuando hay un DataBASEConnection presente. Cuando se obtiene un resultado, se coloca dentro de un componente de consulta y se agrega a la entidad.
Utiliza puertos de finalización de Windows IO para redes de alta velocidad.
TCPConnection : se usa para conectarse a una dirección.
TCPConnected : indica que la conexión se ha completado.
TCPRECV : lee datos de una conexión aceptada.
TcprecvComplete : indica que los datos han terminado de recibir.
TCPSEND : envíe algunos datos a una TcpConnection .
TCPSENDCOMPLETE : indica que se ha completado una operación de envío.
Tcplisten : espera una conexión entrante y genera una ComponentList cuando se acepta una conexión.
TCPERRORS : registra errores TCP.
UDPRAD : etiquete una entidad con este componente para suscribirse a paquetes UDPData entrantes entregados dentro de los componentes UDPIncoming .
UDPSEND : Agregar este componente hace que se envíe un mensaje UDP al host y el puerto de parámetros.
RenderChar : este componente genera eficientemente un solo carácter a la consola, controlable con coordenadas X e Y normalizadas a -1.0 .. 1.0 . Esto permite la creación fácil de interfaces o salidas impulsadas por texto que se parecen más a la representación con gráficos.
RenderString : una cadena de entidades con componentes RenderChar , administrado para que pueda establecer la propiedad text y una coordenada normalizada (x, y). Las entidades y componentes constituyentes son accesibles para editar, y maneja el recorte del ancho/bordes deseados.
DensidadChar : este componente actualiza el personaje que se muestra en un RenderChar de acuerdo con el número de entidades RenderChar presentes en una posición de carácter particular. Esto ofrece una forma simple de mostrar múltiples entidades que están juntas.
ConsoleInput : Reciba componentes del evento de entrada de consola.
KeyInput , KeyChange : Reciba la tecla Presione Eventos.
Mouseinput : reciba todos los componentes del evento del mouse.
MouseMoving , MouseButtons : reciba eventos específicos del mouse.
Cambio de ventana : reciba eventos para el tamaño de cambio de ventana de la consola.
Este módulo utiliza ecs_renderchar y ecs_consoleevents para crear 'botones' textuales impulsados por el mouse.
MouseButton : permite definir un tamaño, alineación de texto, antecedentes y opciones de borde. Se da acceso completo a las entidades Renderchar para que puedan ser editadas. Genera componentes de eventos como MouseButtonclicked y MouseButtonMouseOver para los sistemas a los que responder.
Drawmouse : etiquete una entidad con este componente para que su carácter se dibuje en la ubicación del mouse.
EditString : cadena editable para leer la entrada del usuario en la consola.
Entrada Finished : Indica que la EditString ha recibido una entrada de retorno o escape.
construction (una plantilla de entidades) después de un período de tiempo determinado. Útil para realizar alguna tarea después de un retraso sin bloquear. Matado : este componente de la etiqueta se puede usar para manejar las operaciones de limpieza dentro de un marco de ejecución. Cree sistemas que usen Killed junto con otros componentes para manejar cosas como liberar recursos propiedad de un componente en la etapa correcta de la ejecución del sistema, en lugar de llamar directamente delete . Invoca addKillingSystem en el momento apropiado para delete las entidades después de que se haya terminado cualquier trabajo de limpieza.
KILLAFTER : Agregue Killed a una entidad después de una duración fija. Útil para entidades temporales que pueden tener recursos que necesitan la finalización adecuada, o simplemente 'disparar y olvidar' entidades temporales.