Advertisement
nPhoenix

ui grid

Aug 12th, 2019
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const Random = Phaser.Math.Between;
  2.  
  3. const COLOR_PRIMARY = 0x4e342e;
  4. const COLOR_LIGHT = 0x7b5e57;
  5. const COLOR_DARK = 0x260e04;
  6.  
  7. class Demo extends Phaser.Scene {
  8.     constructor() {
  9.         super({
  10.             key: 'examples'
  11.         })
  12.     }
  13.  
  14.     preload() {
  15.         this.load.scenePlugin({
  16.             key: 'rexuiplugin',
  17.             url: 'https://raw.githubusercontent.com/rexrainbow/phaser3-rex-notes/master/plugins/dist/rexuiplugin.min.js',
  18.             sceneKey: 'rexUI'
  19.         });
  20.        
  21.         this.load.image("bg", "https://i.imgur.com/M93flWZ.jpg");
  22.         this.load.image("lico", "https://i.imgur.com/UUvkoJw.png");
  23.     }
  24.  
  25.     create() {
  26.         var scrollMode = 0; // 0:vertical, 1:horizontal
  27.         var gridTable = this.rexUI.add.gridTable({
  28.             x: 400,
  29.             y: 300,
  30.             width: (scrollMode === 0) ? 480 : 420,
  31.             height: (scrollMode === 0) ? 240 : 300,
  32.  
  33.             scrollMode: scrollMode,
  34.  
  35.             background: this.add.sprite(0, 0, "bg"),
  36.  
  37.             table: {
  38.                 cellWidth: (scrollMode === 0) ? undefined : 60,
  39.                 cellHeight: (scrollMode === 0) ? 30 : undefined,
  40.  
  41.                 columns: 1,
  42.  
  43.                 mask: {
  44.                     padding: 2,
  45.                 },
  46.  
  47.                 reuseCellContainer: true,
  48.             },
  49.  
  50.             slider: {
  51.                 track: this.rexUI.add.roundRectangle(0, 0, 20, 10, 10, COLOR_DARK),
  52.                 thumb: this.rexUI.add.roundRectangle(0, 0, 0, 0, 13, COLOR_PRIMARY),
  53.             },
  54.  
  55.             header: this.rexUI.add.label({
  56.                 width: (scrollMode === 0) ? undefined : 30,
  57.                 height: (scrollMode === 0) ? 30 : undefined,
  58.  
  59.                 orientation: scrollMode,
  60.                 background: this.rexUI.add.roundRectangle(0, 0, 20, 20, 0, COLOR_DARK),
  61.                 text: this.add.text(0, 0, 'Header'),
  62.             }),
  63.  
  64.             footer: null,
  65.  
  66.             space: {
  67.                 left: 20,
  68.                 right: 20,
  69.                 top: 20,
  70.                 bottom: 20,
  71.  
  72.                 table: 10,
  73.                 header: 10,
  74.                 footer: 10,
  75.             },
  76.  
  77.             createCellContainerCallback: function (cell, cellContainer) {
  78.                 var scene = cell.scene,
  79.                     width = cell.width,
  80.                     height = cell.height,
  81.                     item = cell.item,
  82.                     index = cell.index;
  83.                 if (cellContainer === null) {
  84.                     cellContainer = scene.rexUI.add.label({
  85.                         width: width,
  86.                         height: height,
  87.  
  88.                         orientation: scrollMode,
  89.                         background: scene.rexUI.add.roundRectangle(0, 0, 20, 20, 0).setStrokeStyle(2, COLOR_DARK),
  90.                         icon: scene.add.sprite(0, 0, "lico"),
  91.                         text: scene.add.text(0, 0, ''),
  92.  
  93.                         space: {
  94.                             icon: 10,
  95.                             left: (scrollMode === 0) ? 15 : 0,
  96.                             top: (scrollMode === 0) ? 0 : 15,
  97.                         }
  98.                     });
  99.                     console.log(cell.index + ': create new cell-container');
  100.                 } else {
  101.                     console.log(cell.index + ': reuse cell-container');
  102.                 }
  103.  
  104.                 // Set properties from item value
  105.                 cellContainer.setMinSize(width, height); // Size might changed in this demo
  106.                 cellContainer.getElement('text').setText(item.id); // Set text of text object
  107.                 console.log("oi", cellContainer.getElement('icon'));
  108.                 //cellContainer.getElement('icon').setFillStyle(item.color); // Set fill color of round rectangle object
  109.                 return cellContainer;
  110.             },
  111.             items: getItems(100)
  112.         })
  113.             .layout()
  114.         //.drawBounds(this.add.graphics(), 0xff0000);
  115.  
  116.         this.print = this.add.text(0, 0, '');
  117.         gridTable
  118.             .on('cell.over', function (cellContainer, cellIndex) {
  119.                 cellContainer.getElement('background')
  120.                     .setStrokeStyle(2, COLOR_LIGHT)
  121.                     .setDepth(1);
  122.             }, this)
  123.             .on('cell.out', function (cellContainer, cellIndex) {
  124.                 cellContainer.getElement('background')
  125.                     .setStrokeStyle(2, COLOR_DARK)
  126.                     .setDepth(0);
  127.             }, this)
  128.              .on('cell.click', function (cellContainer, cellIndex) {
  129.                 console.log(cellIndex, cellContainer);
  130.                  this.print.text += 'click ' + cellIndex + ': ' + cellContainer.text + '\n';
  131.              }, this)
  132.             .on('cell.1tap', function (cellContainer, cellIndex) {
  133.                 this.print.text += '1 tap (' + cellIndex + ': ' + cellContainer.text + ')\n';
  134.             }, this)
  135.             .on('cell.2tap', function (cellContainer, cellIndex) {
  136.                 this.print.text += '2 taps (' + cellIndex + ': ' + cellContainer.text + ')\n';
  137.             }, this)
  138.             .on('cell.pressstart', function (cellContainer, cellIndex) {
  139.                 this.print.text += 'press-start (' + cellIndex + ': ' + cellContainer.text + ')\n';
  140.             }, this)
  141.             .on('cell.pressend', function (cellContainer, cellIndex) {
  142.                 this.print.text += 'press-end (' + cellIndex + ': ' + cellContainer.text + ')\n';
  143.             }, this)
  144.     }
  145.  
  146.     update() { }
  147. }
  148.  
  149. var getItems = function (count) {
  150.     var data = [];
  151.     var startIdx = Random(0, 100);
  152.     for (var i = 0; i < count; i++) {
  153.         data.push({
  154.             id: startIdx + i + " Oi tudo bem???",
  155.             color: Random(0, 0xffffff)
  156.         });
  157.     }
  158.     return data;
  159. }
  160.  
  161. var config = {
  162.     type: Phaser.AUTO,
  163.     parent: 'phaser-example',
  164.     width: 800,
  165.     height: 600,
  166.     scene: Demo
  167. };
  168.  
  169. var game = new Phaser.Game(config);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement