Cercando di avvolgere la mia testa intorno ai modi per gestire correttamente la collisione in un gioco progettato attorno ai componenti.
Vedo che molti esempi hanno una sorta di PhysicsComponent
aggiunta all'elenco dei componenti dell'entità, ma l'implementazione effettiva mi sta confondendo.
Perché questo funzioni, PhysicsComponent
dovrebbe avere accesso al mondo che lo circonda. Questo non ha senso intuitivo per me. Un componente non dovrebbe ignorare non solo il suo contenitore (l'entità), ma il contenitore del suo contenitore (il mondo)?
Per me, sembra che il livello o la scena debba mantenere un elenco di queste entità e ogni aggiornamento del gioco, scorrere tra le entità per determinare quale scontro.
La mia domanda è innanzitutto se questo è un buon progetto e, in secondo luogo, come determinare quali entità possono scontrarsi. Suppongo che entità solide possano implementare un'interfaccia IRigidBody vuota in modo che il livello possa determinare quali entità nell'elenco supportano la collisione. Ma questo sta rompendo il design dei componenti?
Invece, dovrebbero contenere un componente RigidBody vuoto? Questo potrebbe effettivamente essere migliore perché potrebbe non essere sempre vuoto e questo approccio è più a prova di futuro. L'unico problema è la complessità. La scena dovrebbe scorrere non solo tutte le entità, ma anche i componenti di ogni entità per determinare se avesse questo componente RigidBody.
In terzo luogo, quando si scontrano, entrambe le entità dovrebbero essere informate in qualche modo e non sono sicuro su come farlo.
Supponiamo che entrambe le entità contenessero un componente sanitario e quando si scontrassero entrambe le loro condizioni di salute sarebbero diminuite di un valore arbitrario, 5. Suppongo che sarebbe responsabilità della scena gestirlo quando rileva una collisione tra due entità?
Ma allora la scena è responsabile di troppo? Potrei vederlo sfuggire di mano e diventare ingombrante quando la scena è responsabile di molte cose a cui le entità non dovrebbero (?) Avere accesso.
Modifica: domanda aggiornata con maggiori dettagli.