Dopo aver esaminato alcuni schemi di progettazione del gioco, mi accontento di Entity-Component-System (ES System) per il mio motore di gioco. Ho letto articoli (principalmente T = Machine ) e recensito del codice sorgente e penso di averne abbastanza per iniziare.
C'è solo un'idea di base con cui sto lottando. Come gestisco gruppi di entità dipendenti l'uno dall'altro?
Vorrei usare un esempio:
Supponiamo che stia realizzando uno sparatutto aereo standard (pensa Jamestown ) e voglio costruire una "entità boss" con più parti distinte ma connesse. La suddivisione potrebbe apparire come questa:
- Corpo della nave: movimento, rendering
- Cannone: Posizione (bloccato rispetto al corpo della Nave), Inseguimento \ Fuoco sull'eroe, Subisci danni fino a quando non viene disabilitato
- Nucleo: Posizione (bloccato rispetto al corpo della Nave), Inseguimento \ Fuoco sull'eroe, Subire danni fino a quando disabilitato, Disabilitare (er ... distruggere) tutte le altre entità nel gruppo di navi
Il mio obiettivo sarebbe qualcosa che sarebbe identificato (e manipolato) come un elemento di gioco distinto senza dover riscrivere il sottosistema dal fondo ogni volta che voglio costruire un nuovo elemento aggregato.
Come posso implementare questo tipo di design in ES System?
- Implemento un qualche tipo di relazione tra entità genitore-figlio (le entità possono avere figli)? Questo sembra contraddire la metodologia secondo cui le Entità sono solo contenitori vuoti e la fanno sentire più OOP.
- Le implemento come entità separate, con un qualche tipo di componente di connessione (BossComponent) e sistema correlato (BossSubSystem)? Non posso fare a meno di pensare che questo sarà difficile da attuare poiché il modo in cui i componenti comunicano sembra essere una trappola per orsi.
- Devo implementarli come un'unica entità, con una raccolta di componenti (ShipComponent, CannonComponents, CoreComponent)? Questo sembra deviare l'intento del Sistema ES (i componenti qui sembrano troppo entità pesanti), ma lo so, quindi ho pensato che l'avrei messo lì.
- Li implemento come qualcos'altro che ho citato?
So che questo può essere implementato molto facilmente in OOP, ma la mia scelta di ES su OOP è quella su cui mi atterrò. Se dovessi rompere con la pura teoria ES per implementare questo progetto lo farò (non come se non avessi mai dovuto compromettere il design puro prima), ma preferirei farlo per motivi di prestazioni piuttosto che iniziare con un cattivo design.
Per ulteriore credito, pensa allo stesso design, ma ognuna delle "entità boss" era in realtà collegata a una "entità BigBoss" più grande composta da un corpo principale, core principale e 3 "Entità Boss". Questo mi farebbe vedere una soluzione per almeno 3 dimensioni (nonno-genitore-figlio) ... che dovrebbe essere più che sufficiente per me.