Dalam 2D atau 3D, sistem komponen entitas (ECS) setidaknya harus memiliki akses ke sistem GUI, jika itu bukan bagian dari ECS yang sama.
Secara pribadi, saya tidak akan mencampur keduanya. Penggunaan kembali kode untuk GUI hanya benar-benar terjadi di tingkat atas. Menanggapi mouse / keyboard, rendering, dan sebagainya. Fungsi yang diambil oleh tombol yang berbeda, atau informasi yang ditampilkan daftar tertentu sebenarnya bukan sesuatu yang dapat dibuat cukup umum untuk digunakan kembali.
Sebagai contoh, saya akan membayangkan komponen untuk entitas GUI akan seperti position
, render
dan gui
. Di mana komponen GUI akan menentukan jenis tindakan yang dilakukan entitas GUI. Namun, tindakan itu akan menjadi sangat unik dan spesifik konteks. Ini menghasilkan sistem yang menangani komponen GUI yang sangat besar dan pada dasarnya dirancang untuk menangani masing-masing fungsi GUI (memuat game, menyimpan game, mencari server, dll). Kedengarannya berantakan.
Saya lebih suka melakukan file kelas standar untuk setiap "layar" GUI. Memiliki semua fungsionalitas untuk layar itu di satu tempat (dengan referensi ke kelas fungsionalitas umum). Ini jauh lebih rapi dan lebih mudah dikelola.
Namun, seperti yang saya katakan, ECS harus memiliki akses ke sistem GUI. Perlu untuk dapat memberikan informasi kepada GUI berdasarkan entitas dalam sistemnya. Misalnya, melayang di atas unit sekutu akan memunculkan jendela GUI dengan semua informasi tentang unit itu. Di mana melayang di atas kesatuan musuh akan muncul jendela GUI dengan informasi terbatas. Anda mungkin tidak ingin memprogram GUI untuk mengetahui perbedaan antara keduanya, Anda ingin meminta entitas untuk menampilkan informasinya.
Jadi, entitas kemungkinan masih memiliki beberapa jenis komponen GUI, tetapi mereka akan menjadi entitas "dalam game", bukan entitas GUI. Komponen ini akan menggunakan sistem GUI eksternal untuk membuat antarmuka GUI mereka.