Untuk mendapatkan komponen agar dapat memperbarui setiap frame (dan meninggalkan fungsi ini dari komponen yang tidak perlu), saya mendapat ide untuk membuat komponen UpdateComponent. Komponen lain seperti MovableComponent
(yang memiliki kecepatan) akan mewarisi dari IUpdatable
kelas abstrak. Ini memaksa MovableComponent
untuk menerapkan Update(gametime dt)
metode dan lainnya RegisterWithUpdater()
yang memberikan UpdateComponent
pointer ke MovableComponent
. Banyak komponen dapat melakukan ini dan kemudian UpdateComponent
dapat memanggil semua Update(gametime dt)
metode mereka tanpa harus peduli tentang siapa atau apa mereka.
Pertanyaan saya adalah:
- Apakah ini tampak seperti sesuatu yang normal atau digunakan oleh siapa pun? Saya tidak dapat menemukan apa pun tentang masalah ini.
- Bagaimana saya bisa mempertahankan pesanan pada komponen-komponen seperti fisika lalu posisi berubah? Apakah ini perlu?
- Apa cara lain untuk memastikan bahwa komponen yang harus diproses setiap frame sebenarnya diproses?
EDIT
Saya pikir saya akan mempertimbangkan bagaimana memberikan daftar jenis entitas yang dapat diupdate oleh manajer entitas. Kemudian SEMUA komponen jenis itu dapat memperbarui daripada mengaturnya per entitas (yang hanya indeks di sistem saya saja).
Masih. Pertanyaan saya tetap valid bagi saya. Saya tidak tahu apakah ini masuk akal / normal, atau apa yang cenderung dilakukan orang lain.
Juga, orang-orang di Insomniac luar biasa! / EDIT
Kode rebus untuk contoh sebelumnya:
class IUpdatable
{
public:
virtual void Update(float dt) = 0;
protected:
virtual void RegisterAsUpdatable() = 0;
};
class Component
{
...
};
class MovableComponent: public Component, public IUpdatable
{
public:
...
virtual void Update(float dt);
private:
...
virtual void RegisterWithUpdater();
};
class UpdateComponent: public Component
{
public:
...
void UpdateAll();
void RegisterUpdatable(Component* component);
void RemoveUpdatable(Component* component);
private:
...
std::set<Component*> updatables_;
};