Più divertimento con un ES ...
Attualmente, ho alcuni sistemi:
- Renderer (attributo renderizzabile, attributo trasformazione)
- Movimento (attributo mobile, attributo trasformazione, attributo renderizzabile [per i riquadri di delimitazione, ecc.])
- Input (attributo InputReceiver)
- eccetera.
Sto aggiungendo il rilevamento delle collisioni. Il mio primo pensiero è stato quello di aggiungere un nuovo sistema che esegue la collisione. Ha senso per me per mantenere questo isolato dal Motion
sistema in quanto non tutte le cose che si muovono o sono animate necessariamente partecipare al rilevamento delle collisioni - telecamere, nebbia, ecc - ma sembra che Collision
e Motion
sono interdipendenti.
Quando si Motion
sposta un'entità, è necessario convalidare la trasformazione Collision
e annullare il movimento o modificarlo (rimbalzare, fermarsi contro un muro, ecc.).
Un'alternativa sarebbe quella di creare un attributo Collidable che mantenga un riferimento a un oggetto di collisione - kd-tree, octree, ecc. Che è condiviso tra entità che possono scontrarsi tra loro. Il Motion
sistema verifica quindi tale attributo e lo utilizza per verificare o regolare il movimento.
Dal punto di vista del codice, questa è una soluzione accettabile. Tuttavia, dal punto di vista dell'architettura ECS, sembra che stia spingendo la logica nel Motion
sistema che non si applica a tutte le entità che hanno un Movable
attributo.
Potrei anche memorizzare un vettore di movimento Movable
nell'attributo e far Collider
regolare il sistema Transform
secondo necessità, ma ciò comporterà la duplicazione della funzionalità tra Motion
e Collider
, o un callback da Collider
a Motion
con alcuni dati sulla posizione di collisione e dati di superficie per rimbalzo / riflessione, ecc. .
Questo potrebbe rientrare nel titolo di "caso speciale hack", ma mi piacerebbe ottenere alcuni input da quelli che hanno gestito questo prima senza creare un sacco di codice del caso limite.
La domanda Qual è un buon modo per evitare l'accoppiamento stretto tra i sistemi di movimento e di collisione quando sembra che richiedano una conoscenza reciproca?