GMOT
Nieuws:
 
*
Welkom, Gast. Alsjeblieft inloggen of registreren. 19 Januari 2019, 22:00:41


Login met gebruikersnaam, wachtwoord en sessielengte


Pagina's: [1]
  Print  
Advertenties


ShroomProductions
Pretty addicted
*******

Berichten: 3.198



Bekijk profiel
« Gepost op: 04 September 2016, 15:08:53 »


Hoe maak je een overzichtelijke structuur met templates voor een entity/components systeem?

Ik ben bezig met een project waarbij vrijwel alles in het spel een instance van obj_entity is, en zijn eigenschappen bepaald worden door losse componenten.

Voorbeeld: de entity "player" heeft als componenten: physical, alive, visible, player controlled, attacker, inventory, bleeder etcetera. Elk van deze components regelt specifiek gedrag.

Nu wil ik templates maken om bepaalde groepen componenten aan te maken zodat niet elk component apart moet worden aangemaakt, maar ik loop een beetje vast. Ik wil bijvoorbeeld een template maken om een generieke "actor" entity te maken. Dit kan dan in een specifieker template gebruikt worden om er een vijand, npc of player controlled character van te maken. Zo'n zelfde soort template zou bijvoorbeeld bestaan voor environment entities, met een specifieker template voor vloeren, muren etcetera. Aangezien ik nog niet precies weet wat ik aan het spel wil toevoegen wil ik het zo generiek mogelijk houden, een muur moet bijvoorbeeld ook een npc kunnen zijn, een undead heeft geen alive component maar is wel destructable en kan ook een playable character zijn, dus niet elke actor krijgt automatisch het alive component mee.

Het componentensysteem zelf implementeren is het probleem niet, maar hoe structureer je zo iets zonder er een class hiėrarchie van te maken?
Gelogd


kaas1
Infinity
*********

Berichten: 19.931


LeesMij.txt


Bekijk profiel
« Antwoord #1 Gepost op: 04 September 2016, 15:32:42 »

Ik geloof dat dit "object composition" heet ofzo, mss kun je daar ff op googlen.

Eerste wat bij me opkomt is een functie maken die een lijst van componenten teruggeeft, bvb actor(type) waarbij type "player", "npc", "environment" etc.. kan zijn.

Je zou ook iets kunnen doen met relaties tussen componenten, bijvoorbeeld een component "controller" die een vast protocol gebruikt maar die zowel door de speler als door een AI bestuurd kan worden. En dan een component "movement" o.i.d. die aan een generieke controller gelinkt kan worden. Dan kan je bepalen of een monster een enemy of een player is adhv welke controller je meegeeft.
Gelogd


ShroomProductions
Pretty addicted
*******

Berichten: 3.198



Bekijk profiel
« Antwoord #2 Gepost op: 04 September 2016, 15:42:52 »

Ja ik had al bedacht dat componenten gebruik kunnen maken van inheritance zodat alle ai types en "player controlled" dezelfde parent hebben.

Het probleem is denk ik dat ik voor de entities nog teveel in zo'n hiėrarchie denk. Misschien moet ik maar gewoon voor ieder specifiek ding een functie maken dat alle losse components toevoegt zonder generieke templates te gebruiken.

edit: actor moet gewoon een component zijn bedenk ik me nu
« Laatste verandering: 04 September 2016, 18:32:55 door ShroomProductions » Gelogd


ShroomProductions
Pretty addicted
*******

Berichten: 3.198



Bekijk profiel
« Antwoord #3 Gepost op: 05 September 2016, 02:03:07 »

https://www.youtube.com/watch?v=U03XXzcThGU dit
Gelogd


RA
Pretty addicted
*******

Berichten: 4.702



Bekijk profiel
« Antwoord #4 Gepost op: 05 September 2016, 22:40:48 »

Ik denk dat hier verschillende oplossingen voor zijn, wellicht misschien afhankelijk per programmeertaal. Misschien dat ik het probleem verkeerd begrijp maar in Python zou je bijvoorbeeld mixins/multiple inheritance kunnen gebruiken.

Ik richt mijn meer op web development en voor CSS heb je hier BEM voor. V.B: player--healthy of player__head--angy.
Gelogd


ShroomProductions
Pretty addicted
*******

Berichten: 3.198



Bekijk profiel
« Antwoord #5 Gepost op: 05 September 2016, 22:52:51 »

Ik denk dat ik er wel uit ga komen. Ik moet gewoon geen "actor" template maken, want actors kunnen veel te verschillend zijn opgebouwd. Actor wordt gewoon een component, en ik maak templates voor verschillende soorten creatures.

Als de speler een undead humanoid moet zijn zou ik die dan zo aanmaken:

> maak humanoid volgens template
> verwijder "alive" component en voeg "undead" component toe
> verwijder AI component en voeg "player controlled" component toe


en combat zou zo iets gaan:
> combat component stuurt event "do damage" met een waarde en damage type naar target entity
> target entity scrollt door zijn componentenlijst en laat ieder component een voor een het event zien en eventueel aanpassen. bijvoorbeeld: "fire resistant" component filtert fire damage uit het damage event
> physical component haalt de damage van hp af en vernietigt het event
« Laatste verandering: 05 September 2016, 23:03:44 door ShroomProductions » Gelogd



Advertenties
Pagina's: [1]
  Print  

 
Ga naar:  

Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines | Smartphoneversie bekijken

Dilber MC Theme by HarzeM