Skip to content

GameElement

storm1er edited this page Oct 1, 2017 · 5 revisions

Accueil > Spécifications techniques > GameElement


4.3. GameElement

Un GameElement est un élément de jeu.

4.3.1. Le principe

Les GameElement sont formalisé de la façon suivante :

  • ^[A-Z]{1}[a-zA-Z]+::[A-Z]{1}[a-zA-Z]+$, exemple : MonSuperSysteme::MonSuperGameElement (gameElementName ci-dessous)
  • Structure unique : src="/js/"+folder.toLowerCase()+"/"+elementName+".js"
  • Ils doivent extends GameElement

4.3.2. La composition

Admettons le GameElement "MonSuperSysteme::MonSuperGameElement" :

  • doit être dans /js/monsupersysteme/MonSuperGameElement.js
  • doit être déclaré de cette façon class MonSuperGameElement extends GameElement {...}

Le GameManager va se servir de votre GameElement de la façon suivante :

  • MonSuperGameElement.onStart() sera appeler quand le GameManager va intégrer MonSuperGameElement.
  • MonSuperGameElement.onUpdate() pour chaque retour de requestAnimationFrame.
  • MonSuperGameElement.onDestroy() en cas d'erreur critique (n'est pas censé arriver).
  • MonSuperGameElement.sharedRessources() retournera par défaut this (== votre GameElement entier) et sera envoyé aux éléments qui vondront utiliser MonSuperGameElement. Nous vous conseillons de surcharger cette fonction pour s'assurer du bon fonctionnement de votre GameElement.

Au sein de MonSuperGameElement, vous pouvez utiliser les éléments suivant :

  • this.master est le lien avec le GameManager :
    • this.master.element(gameElementName) : retourne une Promise.
      L'argument de resolve() sera le retour de sharedRessources() du GameElement correspondant.
    • this.master.fatalError("msg") : va détruire le jeu, à appeler quand une erreur irréparable se produit (n'est donc pas censé arrivé).
    • this.master.isGameElementExist(gameElementName) : permet de vérifier qu'un élément est chargé et actif dans GameManager.
    • this.master.on("eventName", callback) : Executera votre callback à chaque fois que l'évent "eventName" sera émis.
    • this.master.off("eventName", callback) : Vous permet de ne plus écouter l'event "eventName", vous devez préciser votre callback (utilisé dans this.master.on) pour que cela fonctionne.
    • this.master.emit("gameElementEvent") : va trigger l'event "MonSuperGameElement[gameElementEvent]" via le GameManager, cette event pourra être écouté par n'importe quel autre GameElement.
  • this.getDependency("XXXXX") permet de charger une dépendance depuis src/js/webpack.js. Voir le point 4.3.3.

4.3.3. La gestion des dépendances

Si vous souhaitez injecter une librairie externe, merci de suivre les étapes suivantes :

  • à la racine du projet, exécuter npm intall VOTRELIBRAIRIE --save
    Ceci va ajouter votre librairie dans package.json, pensez à le git add sinon cela pourrait empêcher votre dépendance de fonctionner.
  • Dans src/js/webpack.js:
    • définissez un nom valide pour votre dépendance : /[A-Z]{1}[a-zA-Z]+/ (e.g. : VotreLib).
    • une fois que vous avez trouvez votre nom, ajouter la ligne suivante au début du fichier :
      dispatchDependency("VotreLib", require('NOMDUPACKAGE'));.
  • Ajouter le GameElement correspondant dans src/js/lib :
    • en gardant le nom VotreLib
    • utiliser this.getDependency("XXXXX") dans this.onStart()
  • Appeler votre dépendance dans un autre GameElement via this.master.element('Lib::VotreLib').
  • Example avec JQuery et ConsoleFPS : src/js/debug/ConsoleFPS.js, src/js/lib/JQuery.js, src/js/webpack.js et package.json

#14

Accès rapide :

  1. Règles et Story line
    1.1. Map
    1.2. Appareils
    1.3. Données
    1.4. Vous
    1.5. Les quêtes
  2. Utilis. & Config. client
    2.1. Compte
    2.2. Interface
    2.3. Appareil
    2.4. Quêtes
  3. Utilis. & Config. serveur
  4. Spécifications techniques
    4.1. Env. de développement
    4.2. GameManager
    4.3. GameElement
  5. WorkFlow
    5.1. Guideline du Wiki
    5.2. Guideline du tracker
Clone this wiki locally