Polymers 、Polymorph Entity-Component-System Generator用のコンポーネントとシステムのライブラリです。
ライブラリは、データ指向のスタイルでの開発ソフトウェアをサポートするための一般的なタスク用のコンポーネントを提供します。これらのコンポーネントは、ユーザーが作成したコンポーネントとシステムと自由に組み合わせて構築できます。
コンポーネントは主にWindowsをサポートしていますが、バックエンドが利用可能な場合は他のプラットフォームでも実行されます。
ライブラリをインポートすると、すべてのテンプレートが定義されますが、これらのテンプレートが使用されない限り、何も定義したり、コードを生成したりすることはありません。
定義テンプレートを使用すると、コンポーネントが現在のECSに登録されます。一部のコンポーネントは、実行の順序を制御できるように、システムを登録するための個別のテンプレートを提供します。
たとえば、ECSのグラフィックコンポーネントを登録してから、実行中の特定のポイントでGPUアップデートシステムを実行することをお勧めします。
Polymorphの使用の詳細については、マニュアルを参照してください。
以下は、データの送信と受信のTCP/IPコンポーネントの例です。
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 () tllEventsパラメーターは、パケットアクティビティのログを作成します。

多くのコンポーネントモジュールには、メインモジュールとして実行されたときの使用方法のデモンストレーションが含まれています。 demosフォルダーには、コンポーネントを一緒に使用するさまざまなより複雑な例が含まれています。
グラフィックデモはSDL2を使用してレンダリングウィンドウを設定します。
modelsandtextures :OpenGLコンポーネントを使用して、マウスに反応する百万粒子をレンダリングします。 dbbrowser (およびdbbrowserthreads ):コンソールコンポーネントとデータベースコンポーネントを使用して、コマンドラインデータベーステーブルブラウザーを作成します。
consolemousebuttons :コンソールコンポーネントを使用して、マウスを使用して対話できるテキストベースのボタンUIを作成します。
netspeedtest :設定された時間枠内に到着する数を数えることにより、LocalHostでUDPパケットを送信/受信する速度を測定します。
jsonrpc_ecsinfo :ネットワークコンポーネントを使用して、現在のエンティティをリストするためにHTTPを介してJSON RPCを提供します。
simplewebsite :ネットワークコンポーネントを使用して、ビューカウントと現在の時間を表示するA /time URLを表示するデフォルトページのWebページを提供します。
spaceshooter2d :OpenGLコンポーネントを使用した2Dスペースシューターゲーム。
particlelife :ここで説明する「原始粒子システム」の実装chipmunkballpit :Chipmunk2DとOpenGLコンポーネントを使用して、ボックス内のボールをシミュレートします。マウスを使用してそれらを動かします。Glbitsを使用して、OpenGLでモデルとテクスチャをレンダリングします。
独自の位置コンポーネントを渡すか、デフォルトのPositionを使用します。
モデル:位置コンポーネントの座標に3Dモデルを表示します。このモデルは、頂点バッファー/アレイオブジェクトとインスタンスレンダリングでレンダリングされているため、数十万のインスタンスでもパフォーマンスがあります。
テクスチャ:位置コンポーネントの座標にテクスチャビルボードインスタンスを表示します。
Chipmunk2Dを使用して物理学をシミュレートします。
Physicsbody : chipmunk.bodyオブジェクトのラッパー。
Physicsshape : chipmunk.shapeオブジェクトのラッパー。
BodyTemplate : PhysicsBodyで構造に置き換えられます。
ShapeTemplate : PhysicsShapeもので構造に代わって。
データベースコンポーネントには、スレッドクエリ用のecs_db_threadsと、非スレッドクエリにはecs_dbの2つのバージョンがあります。
これらは、ここにあるodbcライブラリを使用しています。
ConnectToDB :含まれているパラメーターを使用して、データベースへの接続を開始します。接続が確立されると、削除され、データベースコネクションコンポーネントがエンティティに追加されます。
クエリ: DataBaseConnectionが存在するときにクエリを実行します。結果が得られると、それはqueryResultコンポーネント内に配置され、エンティティに追加されます。
高速ネットワーキングにWindows IO完了ポートを使用します。
TCPCONNECTION :アドレスに接続するために使用されます。
TCPCONNECTED :接続が完了したことを示します。
TCPRECV :受け入れられた接続からデータを読み取ります。
TCPRECVComplete :データの受信が終了したことを示します。
TCPSEND : TcpConnectionにデータを送信します。
TCPSENDComplete :送信操作が完了したことを示します。
tcplisten :着信接続を待ち、接続が受け入れられたときにComponentListを生成します。
TCPERRORS :TCPエラーを記録します。
udpread :このコンポーネントのあるエンティティにタグを付けて、 UDPIncomingコンポーネント内で配信される着信UDPDataパケットを購読します。
udpsend :このコンポーネントを追加すると、UDPメッセージがパラメーターホストとポートに送信されます。
RenderChar :このコンポーネントは、単一の文字をコンソールに効率的に出力し、 -1.0 .. 1.0に正規化されたXおよびY座標で制御可能です。これにより、テキスト駆動型のインターフェイスまたはグラフィックスとのレンダリングに類似した出力を簡単に作成できます。
RenderString : RenderCharコンポーネントを備えた一連のエンティティ。マネージドして、 textプロパティと正規化(x、y)座標を設定できます。構成要素とコンポーネントは編集にアクセスでき、希望の幅/境界線にクリッピングを処理できます。
密度char :このコンポーネントは、特定の文字位置に存在するRenderCharエンティティの数に従って、 RenderCharに表示される文字を更新します。これにより、近くにある複数のエンティティを表示する簡単な方法が提供されます。
コンソレインプット:コンソール入力イベントコンポーネントを受信します。
keyinput 、 keychange :キープレスイベントを受信します。
MouseInput :すべてのマウスイベントコンポーネントを受信します。
Mousemoving 、 MouseButtons :特定のマウスイベントを受信します。
WindowChange :コンソールウィンドウのサイズを変更するためのイベントを受信します。
このモジュールは、 ecs_rendercharおよびecs_consoleeventsを使用して、マウス駆動型のテキストUI 'ボタンを作成します。
MouseButton :サイズ、テキストアライメント、背景、ボーダーオプションの定義を許可します。 Rendercharエンティティへの完全なアクセスが与えられるため、それらが編集される可能性があります。 MouseButtonClickedやMouseButtonMouseOverなどのイベントコンポーネントを生成して、応答するシステムを生成します。
DrawMouse :このコンポーネントのエンティティにタグを付けて、そのキャラクターがマウスの場所で描画されるようにします。
編集:コンソールのユーザーから入力を読み取るための編集可能な文字列。
inputfinished : EditStringリターンまたはエスケープ入力を受け取ったことを示します。
construction (エンティティのテンプレート)を生成します。ブロッキングせずにある程度の遅延の後、何らかのタスクを実行するのに役立ちます。殺された:このタグコンポーネントは、実行のフレーム内のクリーンアップ操作を処理するために使用できます。他のコンポーネントと一緒にKilledシステムを使用して、 delete直接呼び出すのではなく、システム実行の正しい段階でコンポーネントが所有する解放リソースなどを処理します。クリーンアップ作業が終了した後、実際にエンティティdeleteための適切な時期にaddKillingSystemを呼び出します。
Killafter :設定された期間後にエンティティにKilled追加を追加します。適切な最終化を必要とするリソース、または単に「火災と忘れ」の一時的なエンティティを必要とする可能性のある一時的なエンティティに役立ちます。