Guest User

Untitled

a guest
May 3rd, 2020
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class UI {
  2.  
  3.   /**
  4.   * constructor
  5.   * @param game {Game} : un instancier de la classe Game
  6.   * @return {UI}
  7.   */
  8.   constructor(game) {
  9.  
  10.     this.game = game;
  11.  
  12.     this.assetManager = this.game.assetManager;
  13.  
  14.     this.canvas = this.game.canvas;
  15.     this.ctx = this.game.ctx;
  16.  
  17.     // on stockera ici l'asset de l'UI
  18.     this.spriteSheet = null;
  19.  
  20.     // l'indice
  21.     this.currentChoice = 0;
  22.  
  23.     // le nombre de boutons
  24.     this.countButtons = 4;
  25.  
  26.     // le temps que dure le moment où le coeur du joueur se retrouve tout seul sur le fond noir (sans être briser)
  27.     this.gameOverKeepHeartDuration = 1200;
  28.     this.gameOverKeepHeartTime = Date.now();
  29.  
  30.     // le temps que dure le moment où le coeur se brise
  31.     this.gameOverKeepBreakHeartDuration = 500;
  32.     this.gameOverKeepBreakHeartTime = Date.now();
  33.  
  34.     // on stockera ici les différentes étapes de l'affiche du game over
  35.     this.gameOverState = 0x0;
  36.  
  37.  
  38.   }
  39.  
  40.   /**
  41.   * reset: permet de reset l'UI
  42.   */
  43.   reset() {
  44.  
  45.     this.gameOverState = 0x0;
  46.     this.currentChoice = 0;
  47.  
  48.   }
  49.  
  50.   /**
  51.   * gameOverPrepare: permet de préparer le game over
  52.   */
  53.   gameOverPrepare() {
  54.     // on passe à l'état 0x1 (j'aurais pu utiliser une énumération pour ça)
  55.     this.gameOverKeepHeartTime = Date.now();
  56.     this.gameOverKeepBreakHeartTime = Date.now();
  57.     this.gameOverState = 0x1;
  58.   }
  59.  
  60.   /**
  61.   * init: permet d'initialiser l'UI
  62.   */
  63.   init() {
  64.     // on récupère simplement l'asset
  65.     this.spriteSheet = this.assetManager.getAsset('interface.sprite');
  66.   }
  67.  
  68.   /**
  69.   * draw: permet de dessiner l'UI
  70.   */
  71.   draw() {
  72.  
  73.     // pour l'instant, on dessine les boutons
  74.     this.drawChoiceButton();
  75.  
  76.   }
  77.  
  78.   /**
  79.   * disable: permet de désactiver le choix du menu
  80.   */
  81.   disable() {
  82.     this.currentChoice = 0;
  83.   }
  84.  
  85.   /**
  86.   * enable: permet d'activer le choix du menu
  87.   * @param keyCodeToSelect {array} : contient la touche qui permet de naviguer vers la gauche, et la touche qui permet de naviguer vers la droite
  88.   * @param keyCodeToValidate {array} : contient les touches qui permettent de valider le choix
  89.   * @param next {function} : callback qui sera appelé une fois le choix fait
  90.   */
  91.   enable(keyCodeToSelect,keyCodeToValidate,next) {
  92.  
  93.     // par défaut, on sélectionne le 1er bouton
  94.     this.currentChoice = 1;
  95.  
  96.     // on stocke le scope "this"
  97.     var _this = this;
  98.  
  99.     // on prépare la création d'un event local (un event qui ne s'exécute qu'une seule fois)
  100.     var localevent;
  101.  
  102.     localevent = function(event) {
  103.  
  104.       // si on arrive ici, c'est que l'utilisateur a appuyé sur une touche
  105.  
  106.       // on regarde si le joueur a appuyé sur une touche permettant de valider le choix
  107.       for (var i = 0; i < keyCodeToValidate.length; i++) {
  108.  
  109.         if (keyCodeToValidate[i] == event.keyCode) {
  110.  
  111.           // si on arrive là, c'est que le joueur a validé son choix
  112.  
  113.           // on supprime toutes les touches
  114.           for (var j = 0; j < keyCodeToValidate.length; j++) {
  115.             _this.game.keyState[keyCodeToValidate[j]] = false;
  116.             delete _this.game.keyState[keyCodeToValidate[j]];
  117.           }
  118.  
  119.           // on appelle le callback
  120.           // si ce callback renvoie true, on supprime cette event, sinon on fait rien
  121.           if (next(_this.currentChoice)) {
  122.             document.removeEventListener('keydown', localevent);
  123.           }
  124.  
  125.           // on arrete la fonction ici
  126.           return;
  127.         }
  128.  
  129.       }
  130.  
  131.       // on regarde si l'utilisateur tente de naviguer dans le menu
  132.       for (var i = 0; i < keyCodeToSelect.length; i++) {
  133.  
  134.         if (keyCodeToSelect[i] == event.keyCode) {
  135.  
  136.           // si on arrive là, c'est que l'utilisateur appuie sur des bouttons permettant de naviguer dans le menu
  137.  
  138.           // comme on a que 2 bouttons dans le tableau, on définit arbitrairement que le 1er c'est pour aller à gauche
  139.           // et le 2ème pour aller à droite
  140.           if (i==0) {
  141.             _this.currentChoice--; // on va vers la gauche
  142.           } else {
  143.             _this.currentChoice++; // on va vers la droite
  144.           }
  145.  
  146.           // si on va trop à gauche, on revient tout à droite, si on va trop à droite, on revient tout à gauche (sinon on fait rien)
  147.           _this.currentChoice = _this.currentChoice < 1 ? _this.countButtons : _this.currentChoice > _this.countButtons ? 1 : _this.currentChoice;
  148.  
  149.         }
  150.  
  151.       }
  152.     };
  153.  
  154.     // on ajoute l'event
  155.     document.addEventListener('keydown', localevent);
  156.  
  157.   }
  158.  
  159.   /**
  160.   * drawChoiceButton: permet de dessiner les bouttons
  161.   */
  162.   drawChoiceButton() {
  163.  
  164.     // on récupère le canvas et le contexte
  165.     var canvas = this.canvas;
  166.     var ctx = this.ctx;
  167.  
  168.     // j'ai littéralement copier/coller ton code ici :D
  169.     var a = '#FF7E24';
  170.     var b = '#FF7E24';
  171.     var c = '#FF7E24';
  172.     var d = '#FF7E24';
  173.     if (this.currentChoice == 1) a = '#FFFF00';
  174.     if (this.currentChoice == 2) b = '#FFFF00';
  175.     if (this.currentChoice == 3) c = '#FFFF00';
  176.     if (this.currentChoice == 4) d = '#FFFF00';
  177.  
  178.     ctx.lineWidth = 1;
  179.     ctx.strokeStyle = a;
  180.     ctx.strokeRect(40, 400, 100, 40);
  181.     ctx.strokeStyle = b;
  182.     ctx.strokeRect(180, 400, 100, 40);
  183.     ctx.strokeStyle = c;
  184.     ctx.strokeRect(320, 400, 100, 40);
  185.     ctx.strokeStyle = d;
  186.     ctx.strokeRect(460, 400, 100, 40);
  187.  
  188.     ctx.font = '23px Verdana';
  189.     ctx.textAlign = 'right';
  190.     ctx.fillStyle = a;
  191.     ctx.fillText('FIGHT', 136, 429);
  192.     ctx.fillStyle = b;
  193.     ctx.fillText('ACT', 262, 429);
  194.     ctx.fillStyle = c;
  195.     ctx.fillText('ITEM', 410, 429);
  196.     ctx.font = '22px Verdana';
  197.     ctx.fillStyle = d;
  198.     ctx.fillText('MERCY', 557, 429);
  199.  
  200.     // là, on utilise les méthodes des assets (je te laisse faire des aller-retour pour comprendre ce qu'il se passe)
  201.     // ne tkt pas, on fait la classe Player juste après :)
  202.     if (this.currentChoice == 1) { this.game.player.drawHeart(52, 420); } else { this.spriteSheet.drawSprite(ctx, 'fight', 45, 405, 15, 28); }
  203.     if (this.currentChoice == 2) { this.game.player.drawHeart(199, 420); } else { this.spriteSheet.drawSprite(ctx, 'act', 192, 412, 15, 28); }
  204.     if (this.currentChoice == 3) { this.game.player.drawHeart(337, 420); } else { this.spriteSheet.drawSprite(ctx, 'item', 330, 408, 15, 28); }
  205.     if (this.currentChoice == 4) { this.game.player.drawHeart(471, 420); } else { this.spriteSheet.drawSprite(ctx, 'mercy', 463, 410, 15, 28); }
  206.  
  207.   }
  208.  
  209. }
Add Comment
Please, Sign In to add comment