tisdag 4 januari 2011

Relationer mellan objekt

Det finns två typer av relationer (i dagsläget): referenspunker (objekt kretsar kring andra objekt) och gravitation. Bara spelaren påverkas av gravitation! Andra rörelser är t ex cirkulära eller elliptiska (eller fyrkantiga för den delen).

Det är den första typen av relationer som detta inlägg handlar om. Det finns olika varianter (se diskussionen nedan), till att börja med ska variant nummer 1 prövas.

Under tiden som leveln skapas kommer alltså GameObjectRelationSystem att spara alla objekt som agerar referenspunkter i en hashmap:
<int, GameObject> där int är referensobjektets ID och den andra är pekaren till objektet.

Så när referensobjektet skapas (se separat inlägg) måste den alltså ange att den är ett referensobjekt, samt uppge ett ID. På samma sätt måste de som rör sig kring en referenspunkt få en komponent PositionReferenceComponent som håller pekaren till referensobjektet, och som uppdateras som bland de första komponenterna. Det innebär självklart att referenspunkter måste komma före i GameObject-trädet.

Till en början tillåter vi bara cirkulära rörelser - det blir lättast så...

Dessutom: Det här innebär att vår player, the dude, kommer att behöva byta plats i trädet beroende på om han befinner sig på en planet eller ute i rymden!

Alternativ till utformning av systemet
Det ska gärna vara "lättvikt" eftersom beräkningar görs i varje frame, och inte för rörigt (dumt, men snabbt, att objekt har pekare direkt till andra objekt).

Exempel på alternativ 1: Pekare direkt till referensobjektet.

Detta system kommer inte ha ett globalt system för att handskas med relationer under spelets gång, men likväl måste det finnas för att kunna koppla samman objekten när leveln skapas.


Exempel på alternativ 2: Pekare hanteras av globalt system.

Inga kommentarer:

Skicka en kommentar