ขณะนี้ฉันกำลังออกแบบระบบ Entityของฉันใหม่สำหรับ C ++ และฉันมีผู้จัดการจำนวนมาก ในการออกแบบของฉันฉันมีชั้นเรียนเหล่านี้เพื่อผูกห้องสมุดของฉันเข้าด้วยกัน ฉันได้ยินสิ่งเลวร้ายมากมายเมื่อพูดถึงคลาส "ผู้จัดการ" บางทีฉันอาจไม่ได้ตั้งชื่อชั้นเรียนของฉันอย่างเหมาะสม อย่างไรก็ตามฉันไม่รู้ว่าจะตั้งชื่อพวกเขาอย่างไร
ผู้จัดการส่วนใหญ่ในห้องสมุดของฉันประกอบด้วยชั้นเรียนเหล่านี้ (แม้ว่ามันจะแตกต่างกันเล็กน้อย):
- คอนเทนเนอร์ - คอนเทนเนอร์สำหรับวัตถุในตัวจัดการ
- คุณสมบัติ - คุณลักษณะสำหรับวัตถุในผู้จัดการ
ในการออกแบบใหม่สำหรับห้องสมุดของฉันฉันมีชั้นเรียนเฉพาะเหล่านี้เพื่อผูกห้องสมุดของฉันเข้าด้วยกัน
ComponentManager - จัดการส่วนประกอบใน Entity System
- ComponentContainer
- ComponentAttributes
- ฉาก * - อ้างอิงถึงฉาก (ดูด้านล่าง)
SystemManager - จัดการระบบในระบบองค์กร
- SystemContainer
- ฉาก * - อ้างอิงถึงฉาก (ดูด้านล่าง)
EntityManager - จัดการเอนทิตีใน Entity System
- EntityPool - กลุ่มของเอนทิตี
- EntityAttributes - คุณสมบัติของเอนทิตี (ซึ่งจะสามารถเข้าถึงคลาส ComponentContainer และ System เท่านั้น)
- ฉาก * - อ้างอิงถึงฉาก (ดูด้านล่าง)
ฉาก - เชื่อมโยงผู้จัดการทั้งหมดเข้าด้วยกัน
- ComponentManager
- SystemManager
- EntityManager
ฉันกำลังคิดว่าจะแค่วางคอนเทนเนอร์ / พูลทั้งหมดในคลาสของตัวเอง
กล่าวคือ
แทนสิ่งนี้:
Scene scene; // create a Scene
// NOTE:
// I technically could wrap this line in a createEntity() call in the Scene class
Entity entity = scene.getEntityManager().getPool().create();
มันจะเป็นแบบนี้:
Scene scene; // create a Scene
Entity entity = scene.getEntityPool().create();
แต่ฉันไม่แน่ใจ ถ้าฉันจะทำสิ่งหลังสุดนั่นก็หมายความว่าฉันจะมีวัตถุและวิธีการมากมายในชั้นเรียนของฉัน
หมายเหตุ:
- ระบบเอนทิตีเป็นเพียงการออกแบบที่ใช้สำหรับเกม ประกอบด้วย 3 ส่วนหลักคือส่วนประกอบเอนทิตีและระบบ ส่วนประกอบเป็นเพียงข้อมูลซึ่งอาจ "เพิ่ม" ให้กับเอนทิตีเพื่อให้เอนทิตีมีความโดดเด่น เอนทิตีถูกแทนด้วยจำนวนเต็ม ระบบประกอบด้วยตรรกะสำหรับองค์กรที่มีส่วนประกอบเฉพาะ
- เหตุผลที่ฉันเปลี่ยนการออกแบบสำหรับห้องสมุดของฉันเป็นเพราะฉันคิดว่ามันสามารถเปลี่ยนแปลงได้มากฉันไม่ชอบความรู้สึก / ไหลไปในขณะนี้