Polymers เป็นไลบรารีของส่วนประกอบและระบบสำหรับเครื่องกำเนิดไฟฟ้าของระบบโพลีมอร์
ห้องสมุดจัดเตรียมส่วนประกอบสำหรับงานทั่วไปเพื่อสนับสนุนการพัฒนาซอฟต์แวร์ในรูปแบบที่กำหนดข้อมูล ส่วนประกอบเหล่านี้สามารถรวมและสร้างขึ้นกับส่วนประกอบและระบบที่ผู้ใช้ได้อย่างอิสระ
ส่วนประกอบส่วนใหญ่รองรับ Windows แต่บางส่วนก็จะทำงานบนแพลตฟอร์มอื่น ๆ หากมีแบ็กเอนด์
การนำเข้าไลบรารีจะให้การเข้าถึงเทมเพลตที่กำหนดทั้งหมด แต่ไม่ได้กำหนดอะไรหรือสร้างรหัสใด ๆ เว้นแต่จะใช้เทมเพลตเหล่านี้
การใช้เทมเพลต define จะลงทะเบียนส่วนประกอบของพวกเขากับ EC ปัจจุบัน ส่วนประกอบบางส่วนจัดหาเทมเพลตแยกต่างหากเพื่อลงทะเบียนระบบของพวกเขาเพื่อให้สามารถควบคุมคำสั่งการดำเนินการได้
ตัวอย่างเช่นคุณอาจต้องการลงทะเบียนส่วนประกอบกราฟิกสำหรับ 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 : วัดความเร็วในการส่ง/รับแพ็คเก็ต UDP บน LocalHost โดยนับจำนวนที่มาถึงภายในกรอบเวลาที่กำหนด
jsonrpc_ecsinfo : ใช้ส่วนประกอบเครือข่ายเพื่อให้บริการ JSON RPC ผ่าน HTTP เพื่อแสดงรายการเอนทิตีปัจจุบัน
simplewebsite : ใช้ส่วนประกอบเครือข่ายเพื่อให้บริการเว็บเพจพร้อมหน้าเริ่มต้นที่แสดงจำนวนมุมมองและ URL A /time ที่แสดงเวลาปัจจุบัน
spaceshooter2d : เกมยิงปืนอวกาศ 2D โดยใช้ส่วนประกอบ OpenGL
particlelife : การดำเนินการของ "ระบบอนุภาคดั้งเดิม" ที่อธิบายไว้ที่นี่chipmunkballpit : ใช้ส่วนประกอบ Chipmunk2D และ OpenGL เพื่อจำลองลูกบอลในกล่อง ใช้เมาส์เพื่อเคลื่อนย้ายพวกเขาใช้ GLBITS เพื่อแสดงผลและพื้นผิวด้วย OpenGL
ผ่านส่วนประกอบตำแหน่งของคุณเองหรือใช้ Position เริ่มต้น
โมเดล : แสดงโมเดล 3 มิติที่พิกัดในส่วนประกอบตำแหน่ง โมเดลนั้นแสดงผลด้วยวัตถุบัฟเฟอร์/อาร์เรย์จุดสุดยอดและการเรนเดอร์แบบเริ่มต้นดังนั้นจึงเป็นนักแสดงแม้จะมีหลายแสนอินสแตนซ์ก็ตาม
พื้นผิว : แสดงอินสแตนซ์บิลบอร์ดพื้นผิวที่พิกัดในส่วนประกอบตำแหน่ง
ใช้ Chipmunk2D เพื่อจำลองฟิสิกส์
Physicsbody : เสื้อคลุมสำหรับวัตถุ chipmunk.body
Physicsshape : เสื้อคลุมสำหรับ chipmunk.shape วัตถุ
BodyTemplate : ทดแทนการก่อสร้างด้วย PhysicsBody
Shapetemplate : ทดแทนการก่อสร้างด้วย PhysicsShape
ส่วนประกอบฐานข้อมูลมีสองเวอร์ชัน ecs_db_threads สำหรับการสืบค้นแบบเธรดและ ecs_db สำหรับแบบสอบถามที่ไม่ได้อ่าน
สิ่งเหล่านี้ใช้ห้องสมุด odbc ที่พบที่นี่
ConnectToDB : เริ่มการเชื่อมต่อกับฐานข้อมูลด้วยพารามิเตอร์ที่มีอยู่ เมื่อสร้างการเชื่อมต่อแล้วจะถูกลบออกและส่วนประกอบ Databaseconnection จะถูกเพิ่มเข้าไปในเอนทิตี
แบบสอบถาม : ดำเนินการสืบค้นเมื่อมีการเชื่อม ต่อ Databaseconnection เมื่อได้รับผลลัพธ์จะถูกวางไว้ในองค์ประกอบ queryResult และเพิ่มเข้าไปในเอนทิตี
ใช้พอร์ต Windows IO เสร็จสมบูรณ์สำหรับเครือข่ายความเร็วสูง
TCPConnection : ใช้เพื่อเชื่อมต่อกับที่อยู่
TCPConnected : ระบุว่าการเชื่อมต่อเสร็จสมบูรณ์
TCPRECV : อ่านข้อมูลจากการเชื่อมต่อที่ยอมรับ
TCPRECVCOMPLETE : ระบุข้อมูลได้รับเสร็จแล้ว
TCPSEND : ส่งข้อมูลไปยัง TcpConnection
TCPSENDCOMPLETE : ระบุว่าการดำเนินการส่งเสร็จสมบูรณ์
TCPLISTEN : รอการเชื่อมต่อที่เข้ามาและวางไข่ ComponentList เมื่อยอมรับการเชื่อมต่อ
tcperrors : บันทึกข้อผิดพลาด TCP
UDPread : แท็กเอนทิตีด้วยส่วนประกอบนี้เพื่อสมัครสมาชิกแพ็คเก็ต UDPData ที่เข้ามาในส่วนประกอบ UDPIncoming
UDPSEND : การเพิ่มส่วนประกอบนี้ทำให้ข้อความ UDP ถูกส่งไปยังพารามิเตอร์โฮสต์และพอร์ต
RenderChar : ส่วนประกอบนี้ส่งออกอักขระตัวเดียวอย่างมีประสิทธิภาพไปยังคอนโซลสามารถควบคุมได้ด้วยพิกัด X และ Y ปกติที่ -1.0 .. 1.0 สิ่งนี้ช่วยให้การสร้างอินเทอร์เฟซหรือเอาต์พุตที่ขับเคลื่อนด้วยข้อความได้ง่ายซึ่งคล้ายกับการแสดงผลด้วยกราฟิก
RendERSTRING : สตริงของเอนทิตีที่มีส่วนประกอบ RenderChar , จัดการเพื่อให้คุณสามารถตั้งค่าคุณสมบัติ text และพิกัดปกติ (x, y) หน่วยงานและส่วนประกอบที่เป็นส่วนประกอบสามารถเข้าถึงได้เพื่อแก้ไขและจัดการกับการตัดไปยังความกว้าง/เส้นขอบที่ต้องการ
DensityChar : ส่วนประกอบนี้อัพเดตอักขระที่แสดงใน RenderChar ตามจำนวนเอนทิตี RenderChar ที่มีอยู่ในตำแหน่งอักขระเฉพาะ สิ่งนี้ให้วิธีง่ายๆในการแสดงหลายเอนทิตีที่อยู่ใกล้กัน
ConsoleInput : รับส่วนประกอบเหตุการณ์อินพุตคอนโซล
KeyInput , Keychange : รับกิจกรรมการกดปุ่ม
MouseInput : รับส่วนประกอบเหตุการณ์ทั้งหมดของเมาส์
Mousemoving , MouseButtons : รับกิจกรรมของเมาส์ที่เฉพาะเจาะจง
Windowchange : รับกิจกรรมสำหรับขนาดการเปลี่ยนหน้าต่างคอนโซล
โมดูลนี้ใช้ ecs_renderchar และ ecs_consoleevents เพื่อสร้างปุ่ม 'ปุ่ม' ของเมาส์ที่ขับเคลื่อนด้วยเมาส์
MouseButton : อนุญาตให้กำหนดขนาดการจัดตำแหน่งข้อความพื้นหลังและตัวเลือกชายแดน การเข้าถึงเอนทิตี ที่เรนเดอร์ เต็มรูปแบบจะได้รับดังนั้นพวกเขาอาจได้รับการแก้ไข สร้างส่วนประกอบเหตุการณ์เช่น MouseButtonClicked และ MouseButtonMouseOver สำหรับระบบเพื่อตอบสนอง
Drawmouse : แท็กเอนทิตีด้วยส่วนประกอบนี้เพื่อให้ตัวละครถูกวาดที่ตำแหน่งเมาส์
แก้ไข : สตริงที่แก้ไขได้สำหรับการอ่านอินพุตจากผู้ใช้ในคอนโซล
Inputfinished : ระบุว่า EditString ได้รับการส่งคืนหรือการหลบหนี
construction (เทมเพลตของเอนทิตี) หลังจากกรอบเวลาที่กำหนด มีประโยชน์สำหรับการทำงานบางอย่างหลังจากความล่าช้าโดยไม่ต้องปิดกั้น ฆ่า : ส่วนประกอบแท็กนี้สามารถใช้เพื่อจัดการการดำเนินการทำความสะอาดภายในเฟรมของการดำเนินการ สร้างระบบที่ใช้ Killed พร้อมกับส่วนประกอบอื่น ๆ เพื่อจัดการสิ่งต่าง ๆ เช่นการปลดปล่อยทรัพยากรที่เป็นเจ้าของโดยส่วนประกอบในขั้นตอนที่ถูกต้องของการดำเนินการระบบแทนที่จะเรียก delete โดยตรง เรียกใช้ addKillingSystem ในเวลาที่เหมาะสมในการ delete ทิตีจริงหลังจากการทำความสะอาดเสร็จสิ้นแล้ว
KILLAFTER : เพิ่ม Killed ในเอนทิตีหลังจากระยะเวลาที่กำหนด มีประโยชน์สำหรับหน่วยงานชั่วคราวที่อาจมีทรัพยากรที่ต้องการการสรุปที่เหมาะสมหรือเพียงแค่ 'ไฟและลืม' หน่วยงานชั่วคราว