-
Notifications
You must be signed in to change notification settings - Fork 3
Entity Component System Model
En entity representerar ett spelobjekt i världen, som t.ex ett träd, en cykel, en spelare, ett vapen. En tom entity i sig ger ingen direkt funktionalitet. Ett Entity kan jämföras med ett Substantiv.
(Insert picture)
Vad den minimalt innehåller är:
- En lista med noll till flera olika komponenter
- Ett unikt id eller namn
Varje entity har komponenter som beskriver hur den interagerar med/påverkar världen. Man kan jämföra en komponent med ett adjektiv. Antag att vi har en entity-typ "Högtalare". Entiteten skulle då kunna innehålla följande komponenter:
- Mesh (en grafisk representation av hur högtalaren ser ut)
- Position (var den står)
- Bounding Volym (Vad den har för sorts collisionsvolym, t.ex. box)
- Renderer (vilken sorts renderare den använder)
- Ljudkälla (högtalaren emittar ett ljud)
Ett system kan jämföras med ett verb, den utför något.
- Körs kontinuerligt (och kan utökas till att köras multitrådat)
- Hanterar hur komponenter hos en entitet uppdateras.
- Hanterar enbart komponenter som är relevanta att uppdatera för det givna systemet. Exempelvis: Antag att det finns komponenter av typerna Position, Audio Source och Listener. Ett AudioSystem skulle där hämta ut alla entities som har en position och en audio source, samt alla entities som har en position och en listener (En listener snappar upp ljud från audio sources), och sedan processa dessa komponenter.
(Exempelfigur på Audio)
Ett RenderingSystem skulle t.ex hantera entities med komponenter av typena Position, Rotation, Skala (Eller om alla tre ligger i en Transform-komponent), och Renderer.
(Exempelfigur på Rendering)
Om olika entiteter använder samma resurser exempelvis StaticMesh, Textur och så vidare kan användadet av FlyWeight pattern utnyttjas i kombination med factories/managers.
Ett assemblage är en mall för en entity och vad den ska innehålla. Användning av assemblage innebär att man har fördefinierat olika typer av entities och dess innehåll (i t.ex. en textfil), så att man snabbt kan konstruera dem under uppstart och i runtime.
Hantering av kopplingar mellan entities och komponenter kommer fungera på samma sätt som i Artemis framework (insert ref)