Polymers ist eine Bibliothek von Komponenten und Systemen für den Generator des Polymorphentity-Komponenten-Systems.
Die Bibliothek bietet Komponenten für gemeinsame Aufgaben zur Unterstützung der Entwicklungssoftware in einem datenorientierten Stil. Diese Komponenten können frei kombiniert und mit vom Benutzer hergestellten Komponenten und Systemen aufgebaut werden.
Die Komponenten unterstützen in erster Linie Windows, aber einige werden auch auf anderen Plattformen ausgeführt, wenn ein Backend verfügbar ist.
Wenn Sie die Bibliothek importieren, erhalten Sie Zugriff auf alle Define -Vorlagen, definieren jedoch nichts oder generieren Code, es sei denn, diese Vorlagen werden verwendet.
Die Verwendung der Define -Vorlagen registriert ihre Komponenten mit den aktuellen ECs. Einige Komponenten liefern separate Vorlagen, um ihre Systeme so zu registrieren, dass die Ausführungsreihenfolge gesteuert werden kann.
Sie möchten beispielsweise Grafikkomponenten für Ihr ECS registrieren und dann die GPU -Update -Systeme an einem bestimmten Punkt Ihrer Ausführung ausführen.
Weitere Informationen zur Verwendung von Polymorph finden Sie im Handbuch.
Nachfolgend finden Sie ein Beispiel für die TCP/IP -Komponenten, die Daten senden und empfangen:
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 () Der Parameter tllEvents erstellt ein Protokoll der Paketaktivität:

Viele Komponentenmodule enthalten eine Demonstration, wie sie beim Ausführen als Hauptmodul verwendet werden können. Der demos -Ordner enthält verschiedene komplexere Beispiele für die Verwendung der Komponenten zusammen.
Die Grafikdemos verwenden SDL2, um das Rendering -Fenster einzurichten.
modelsandtextures : Verwendet die OpenGL -Komponenten, um eine Million Partikel zu rendern, die auf die Maus reagieren. dbbrowser (und dbbrowserthreads ): Verwendet die Konsolen- und Datenbankkomponenten, um einen Befehlszeilen -Datenbank -Tabellenbrowser zu erstellen.
consolemousebuttons : Verwendet die Konsolenkomponenten, um eine textbasierte Schaltfläche zu erstellen, die mit der Maus mit Verwendung der Maus interagiert werden kann.
netspeedtest : Misst die Geschwindigkeit des Senden/Empfangens von UDP -Paketen auf Localhost, indem sie zählen, wie viele in einem festgelegten Zeitrahmen ankommen.
jsonrpc_ecsinfo : Verwendet die Netzwerkkomponenten, um ein JSON -RPC gegenüber HTTP für die Auflistung der aktuellen Entitäten zu bedienen.
simplewebsite : Verwendet die Netzwerkkomponenten, um eine Webseite mit einer Standardseite zu erstellen, auf der die Anzahl der Ansicht und die A /time -URL angezeigt wird, auf der die aktuelle Zeit angezeigt wird.
spaceshooter2d : Ein 2D -Space -Shooter -Spiel mit den OpenGL -Komponenten.
particlelife : Eine hier beschriebene "Urteilchensystem" "Primordial Particle System"chipmunkballpit : Verwendet die Komponenten von Chipmunk2D und OpenGL, um Bälle in einer Box zu simulieren. Verwenden Sie die Maus, um sie zu bewegen.Verwendet GLBits, um Modelle und Texturen mit OpenGL zu rendern.
Geben Sie in Ihrer eigenen Positionskomponente oder verwenden Sie die Position .
Modell : Zeigt ein 3D -Modell an den Koordinaten in der Positionskomponente an. Das Modell wird mit Scheitelpunktpuffer-/Array -Objekten und einem ein und ein instanzialen Rendering gerendert, sodass auch mit Hunderttausenden von Instanzen auftretend ist.
Textur : Zeigt eine Textur -Billboard -Instanz in den Koordinaten in der Positionskomponente an.
Verwendet Chipmunk2D, um die Physik zu simulieren.
Physicsbody : Ein Wrapper für das chipmunk.body -Objekt.
PhysicsShape : Ein Wrapper für chipmunk.shape -Objekte.
BodyTemplate : Durch die Konstruktion durch PhysicsBody ersetzt.
Shapetemplate : Ersetzt durch die Konstruktion durch PhysicsShape .
Es gibt zwei Versionen der Datenbankkomponenten, ecs_db_threads für Thread-Abfragen und ecs_db für nicht-Thread-Abfragen.
Diese verwenden die hier gefundene odbc -Bibliothek.
ConnectToDB : Initiiert eine Verbindung zur Datenbank mit ihren enthaltenen Parametern. Sobald die Verbindung hergestellt ist, wird sie entfernt und dem Entität eine Datenbankkonnection -Komponente hinzugefügt.
Abfrage : führt eine Abfrage aus, wenn eine Datenbankvermittlung vorhanden ist. Wenn ein Ergebnis erzielt wird, wird es innerhalb einer QueryResult -Komponente platziert und der Entität hinzugefügt.
Verwendet Windows IO Completion -Ports für Hochgeschwindigkeitsnetzwerke.
TCPConnection : Wird verwendet, um eine Verbindung zu einer Adresse herzustellen.
Tcpconnected : Die Angabe der Verbindung hat abgeschlossen.
TCPRECV : Laut Daten aus einer akzeptierten Verbindung.
TCPRECVCOMPLETETE : Zeigt an, dass die Daten empfangen wurden.
TCPSend : Senden Sie einige Daten an eine TcpConnection .
TCPSendComplete : Gibt an, dass eine Send -Operation abgeschlossen ist.
Tcplisten : Warten auf eine eingehende Verbindung und erzeugt eine ComponentList , wenn eine Verbindung akzeptiert wird.
TCPerRors : Aufzeichnungen TCP -Fehler.
UDPREAD : Tags mit einer Entität mit dieser Komponente, um eingehende UDPData -Pakete zu abonnieren, die in UDPIncoming -Komponenten geliefert werden.
UDPSend : Hinzufügen dieser Komponente veranlasst eine UDP -Nachricht, an den Parameterhost und Port zu senden.
Renderchar : Diese Komponente gibt effizient ein einzelnes Zeichen in die Konsole aus und steuerbar mit X- und Y -Koordinaten, die auf -1.0 .. 1.0 . Dies ermöglicht eine einfache Erstellung von textgetriebenen Schnittstellen oder Ausgängen, die mit Grafiken eher das Rendering der Rendite ähneln.
Renderstring : Eine Reihe von Entitäten mit RenderChar -Komponenten, sodass Sie die text und eine normalisierte (x, y) Koordinate festlegen können. Die Bestandteile und Komponenten sind zum Bearbeiten zugegriffen und können die gewünschten Breite/Grenzen ausschneiden.
DensityChar : Diese Komponente aktualisiert das in einem RenderChar angezeigte Zeichen entsprechend der Anzahl der in einer bestimmten Zeichenposition vorhandenen RenderChar -Entitäten. Dies gibt eine einfache Möglichkeit, mehrere Entitäten anzuzeigen, die nahe beieinander liegen.
Konsoleinput : Empfangen von Konsoleneingangsereigniskomponenten.
KeyInput , KeyChange : Empfangen Sie Taste Drücken Sie Ereignisse.
MouseInput : Empfangen Sie alle Mausereigniskomponenten.
MouseMoving , Mausbuttons : Erhalten Sie spezifische Mausereignisse.
Windowchange : Empfangen Sie Ereignisse für das Fenster der Konsolenfenster ändern die Größe.
Dieses Modul verwendet ecs_renderchar und ecs_consoleevents um mausgetriebene textuelle UI -Schaltflächen zu erstellen.
Mausbutton : Ermöglicht die Definition einer Größe, einer Textausrichtung, des Hintergrunds und der Grenzoptionen. Der volle Zugang zu den Renderchar -Unternehmen wird gegeben, damit sie bearbeitet werden können. Generiert Ereigniskomponenten wie Mausbuttonclicked und MausbuttonMouseover , auf die Systeme reagieren können.
DrawMouse : Markieren Sie eine Entität mit dieser Komponente, damit ihr Zeichen am Mausortort gezogen wird.
EditString : bearbeitbarer Zeichenfolge zum Lesen der Eingaben vom Benutzer in der Konsole.
InputFineSteured : Zeigt an, dass die EditString eine Rückgabe- oder Escape -Eingabe erhalten hat.
construction (eine Vorlage von Entitäten). Nützlich, um eine Aufgabe nach einer Verzögerung auszuführen, ohne zu blockieren. Getötet : Diese Tag -Komponente kann verwendet werden, um Reinigungsvorgänge innerhalb eines Ausführungsrahmens zu verarbeiten. Erstellen Sie Systeme, die Killed werden, um Dinge wie die Freilegung von Ressourcen einer Komponente in der richtigen Phase der Systemausführung zu verarbeiten, anstatt direkt delete aufzurufen. Invoke addKillingSystem zum richtigen Zeitpunkt, um Entitäten nach Abschluss einer Bereinigung tatsächlich delete .
Killafter : Fügen Sie nach einer festgelegten Dauer zu einer Entität Killed . Nützlich für temporäre Einheiten, die Ressourcen haben, die eine angemessene Abschlüsse erfordern oder nur vorübergehende Einheiten "feuern und vergessen".