Polymers est une bibliothèque de composants et de systèmes pour le générateur de système de composant entité polymorphe.
La bibliothèque fournit des composants pour les tâches courantes pour prendre en charge le développement de logiciels dans un style orienté vers les données. Ces composants peuvent être librement combinés et construits sur des composants et des systèmes fabriqués par l'utilisateur.
Les composants prennent principalement en charge Windows, mais certains fonctionneront également sur d'autres plates-formes s'il y a un backend disponible.
L'importation de la bibliothèque donnera accès à tous les modèles Define, mais ne définit rien ou ne générera aucun code à moins que ces modèles ne soient utilisés.
L'utilisation des modèles Define enregistrera leurs composants avec les EC actuels. Certains composants fournissent des modèles distincts pour enregistrer leurs systèmes afin que l'ordre d'exécution puisse être contrôlé.
Par exemple, vous souhaiterez peut-être enregistrer des composants graphiques pour votre ECS, puis exécuter les systèmes de mise à jour GPU à un moment précis de votre exécution.
Pour plus d'informations sur l'utilisation de Polymorph, consultez le manuel.
Vous trouverez ci-dessous un exemple des composants TCP / IP d'envoi et de réception de données:
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 () Le paramètre tllEvents crée un journal d'activité de paquets:

De nombreux modules de composants incluent une démonstration de la façon dont ils peuvent être utilisés lorsqu'ils sont exécutés comme module principal. Le dossier demos contient divers exemples plus complexes d'utilisation des composants ensemble.
Les démos graphiques utilisent SDL2 pour configurer la fenêtre de rendu.
modelsandtextures : utilise les composants OpenGL pour rendre un million de particules qui réagissent à la souris. dbbrowser (et dbbrowserthreads ): utilise les composants de la console et de la base de données pour créer un navigateur de table de base de données de ligne de commande.
consolemousebuttons : utilise les composants de la console pour créer une interface utilisateur de bouton basée sur le texte qui peut être interagi avec l'utilisation de la souris.
netspeedtest : mesure la vitesse de l'envoi / réception des paquets UDP sur localhost en comptant le nombre de personnes arrivent dans un délai défini.
jsonrpc_ecsinfo : utilise les composants de réseautage pour desservir un RPC JSON sur HTTP pour répertorier les entités actuelles.
simplewebsite : utilise les composants de mise en réseau pour desservir une page Web avec une page par défaut qui affiche le nombre de vues et une URL /time qui affiche l'heure actuelle.
spaceshooter2d : un jeu de tir spatial 2D utilisant les composants OpenGL.
particlelife : une mise en œuvre du "système de particules primordial" décrit icichipmunkballpit : utilise les composants ChipMunk2D et OpenGL pour simuler des balles dans une boîte. Utilisez la souris pour les déplacer.Utilise GLBITS pour rendre les modèles et les textures avec OpenGL.
Passez dans votre propre composant de position ou utilisez la Position par défaut.
Modèle : affiche un modèle 3D aux coordonnées dans le composant de position. Le modèle est rendu avec des objets tampon / tableau de sommet et un rendu instancié, il est donc performant même avec des centaines de milliers d'instances.
Texture : affiche une instance de panneau d'affichage de texture aux coordonnées dans le composant de position.
Utilise ChipMunk2D pour simuler la physique.
Physicsbody : un emballage pour l'objet chipmunk.body .
PhysicsShape : un wrapper pour les objets chipmunk.shape .
BodyTemplate : substitué sur la construction par PhysicsBody .
Shapetemplate : substitué sur la construction par PhysicsShape .
Il existe deux versions des composants de la base de données, ecs_db_threads pour les requêtes en fil et ecs_db pour les requêtes non fidèles.
Ceux-ci utilisent la bibliothèque odbc trouvée ici.
ConnectTodb : initie une connexion à la base de données avec ses paramètres contenus. Une fois la connexion établie, elle est supprimée et un composant DatabaseConnection est ajouté à l'entité.
Query : effectue une requête lorsqu'une connexion Database est présente. Lorsqu'un résultat est obtenu, il est placé dans un composant QueryResult et ajouté à l'entité.
Utilise les ports d'achèvement de Windows IO pour un réseau à grande vitesse.
TCPConnection : utilisé pour se connecter à une adresse.
TCPConned : indique que la connexion est terminée.
TCPRecv : lit les données à partir d'une connexion acceptée.
TCPRECVCOMPLETE : indique que les données ont terminé la réception.
TCPSEND : Envoyez des données à une TcpConnection .
TCPSsendComplete : indique qu'une opération d'envoi est terminée.
TCPLISTEN : attend une connexion entrante et engendre une ComponentList lorsqu'une connexion est acceptée.
TCPERRORS : enregistre les erreurs TCP.
Udpread : Taguez une entité avec ce composant pour s'abonner aux paquets UDPData entrants livrés dans les composants UDPIncoming .
UDPSEND : l'ajout de ce composant provoque l'envoi d'un message UDP à l'hôte et au port de paramètre.
Renderchar : Ce composant publie efficacement un seul caractère à la console, contrôlable avec des coordonnées x et y normalisées à -1.0 .. 1.0 . Cela permet une création facile d'interfaces ou de sorties pilotées par le texte qui ressemblent plus étroitement à un rendu avec des graphiques.
Renderstring : une chaîne d'entités avec des composants RenderChar , gérée afin que vous puissiez définir la propriété text et une coordonnée normalisée (x, y). Les entités et composants constituants sont accessibles pour modifier et gère l'écrasement de la largeur / les bordures souhaitées.
DENSITYCHAR : Ce composant met à jour le caractère affiché dans un RenderChar en fonction du nombre d'entités RenderChar présent dans une position de caractère particulière. Cela donne un moyen simple d'afficher plusieurs entités qui sont rapprochées.
ConsoleInput : Recevez des composants d'événements d'entrée de console.
KeyInput , KeyChange : Recevoir des événements de presse de la touche.
MouseInput : Recevez tous les composants de l'événement de souris.
MouseMoving , Mousebuttons : Recevez des événements de souris spécifiques.
WindowChange : Recevez des événements pour la taille de la vitre de la console.
Ce module utilise ecs_renderchar et ecs_consoleevents pour créer des «boutons» textuels axés sur la souris.
MouseButton : permet de définir une taille, un alignement du texte, des options d'arrière-plan et de bordure. L'accès complet aux entités de rendu est donné afin qu'ils puissent être modifiés. Génère des composants d'événements tels que MouseButtonClicked et MouseButtonMouseOver pour les systèmes auxquels les systèmes répondent.
DrawMouse : Taguez une entité avec ce composant afin que son caractère soit dessiné à l'emplacement de la souris.
EditString : modification modifiable pour la lecture des entrées de l'utilisateur dans la console.
Entrée définie : indique que la EditString a reçu une entrée de retour ou d'échappement.
construction (un modèle d'entités) après un délai donné. Utile pour effectuer une tâche après un certain retard sans blocage. Tué : ce composant de balise peut être utilisé pour gérer les opérations de nettoyage dans un cadre d'exécution. Créez des systèmes qui utilisent Killed avec d'autres composants pour gérer des choses comme la libération de ressources appartenant à un composant au stade correct de l'exécution du système, plutôt que d'appeler delete directement. Invoquez addKillingSystem au moment approprié pour delete réellement des entités une fois les travaux de nettoyage terminés.
KILLAFTER : Ajouter Killed à une entité après une durée définie. Utile pour les entités temporaires qui pourraient avoir des ressources qui nécessitent une finalisation appropriée, ou simplement «tirer et oublier» des entités temporaires.