Advertisement
Guest User

attachEvents

a guest
Nov 27th, 2016
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function attachEvents() {
  2.     // Kinvey app connection constants
  3.     const appKey = 'kid_r1ANmjNzg';
  4.     const appUser = 'wildwestgame';
  5.     const appPassword = 'billybob';
  6.     const appDataUrl = 'https://baas.kinvey.com/appdata/kid_r1ANmjNzg/players';
  7.     const appLogin = btoa(`${appUser}:${appPassword}`);
  8.     const authHeaders = {
  9.         'Authorization': `Basic ${appLogin}`,
  10.         'Content-Type': 'application/json'
  11.     };
  12.  
  13.     // Cache some elements
  14.     let divPlayers = $('#players');
  15.     let btnAddPlayer = $('#addPlayer');
  16.     let inputNewPlayer = $('#addName');
  17.     let divGameButtons = $('#buttons');
  18.     let gameSaveButton = $('#save');
  19.     let gameReloadButton = $('#reload');
  20.     let gameCanvas = $('#canvas');
  21.  
  22.  
  23.     // App logic here
  24.     let loadedPlayers = [];
  25.     let currentPlayerHolder;
  26.  
  27.     // Expose loadPlayers() to fix
  28.  
  29.     //Bind button events
  30.     $(btnAddPlayer).click(addNewPlayer);
  31.     $(gameSaveButton).click(savePlayerProgress);
  32.     $(gameReloadButton).click(reloadPlayerBullets);
  33.  
  34.     // Load player data to page
  35.     loadPlayers();
  36.  
  37.  
  38.     // App functionality
  39.     function handleError(error) {
  40.         console.log(error);
  41.     }
  42.  
  43.     function loadPlayers() {
  44.         // Reenable add new player button if it was disabled
  45.         $(btnAddPlayer).removeAttr('disabled');
  46.  
  47.         // Clear players div
  48.         $(divPlayers).empty();
  49.  
  50.         // Build request for Kinvey
  51.         let request = {
  52.             method: 'GET',
  53.             url: appDataUrl,
  54.             headers: authHeaders
  55.         };
  56.  
  57.         // Send request. Load result in app page
  58.         $.ajax(request)
  59.             .then(loadPlayersData)
  60.             .catch(handleError);
  61.  
  62.         function loadPlayersData(playersArray) {
  63.             // Iterate over array from server response and display each player
  64.             for (let playerObj of playersArray) {
  65.                 // If player is out of money and bullets, remove from Kinvey
  66.                 if (playerObj['money'] == 0 && playerObj['bullets'] == 0) {
  67.                     deletePlayerFromDb(playerObj['_id']);
  68.                 } else { // Else save player data and display
  69.                     loadedPlayers.push(playerObj);
  70.  
  71.                     let tempPlayerDiv = $(`<div data-id=${playerObj['_id']}>`).addClass('player')
  72.                         .append($('<div>').addClass('row')
  73.                             .append($('<label>').text('Name: '))
  74.                             .append($('<label>').addClass('name').text(playerObj['name'])))
  75.                         .append($('<div>').addClass('row')
  76.                             .append($('<label>').text('Money: '))
  77.                             .append($('<label>').addClass('money').text(playerObj['money'])))
  78.                         .append($('<div>').addClass('row')
  79.                             .append($('<label>').text('Bullets: '))
  80.                             .append($('<label>').addClass('bullets').text(playerObj['bullets'])))
  81.                         .append($('<button>').addClass('play').text('Play')
  82.                             .click(playGame))
  83.                         .append($('<button>').addClass('delete').text('Delete')
  84.                             .click(deletePlayer));
  85.                     $(divPlayers).append(tempPlayerDiv);
  86.                 }
  87.             }
  88.         }
  89.     }
  90.    
  91.     function addNewPlayer() {
  92.         // Disable button to prevent spam
  93.         $(this).attr('disabled', true);
  94.  
  95.         // Get new player name and clear input box
  96.         let name = $(inputNewPlayer).val();
  97.  
  98.         // Build request to server and send
  99.         let request = {
  100.             method: 'POST',
  101.             url: appDataUrl,
  102.             headers: authHeaders,
  103.             data: JSON.stringify({
  104.                 name: name
  105.             })
  106.         };
  107.         $.ajax(request)
  108.             .then(loadPlayers)
  109.             .catch(handleError);
  110.     }
  111.  
  112.     function deletePlayer() {
  113.         // Disable button to prevent (illogical) spam
  114.         $(this).attr('disabled', true);
  115.  
  116.         // Get player id from parent
  117.         let targetId = $(this).parent().attr('data-id');
  118.  
  119.         // Build request and send to Kinvey
  120.         let request = {
  121.             method: 'DELETE',
  122.             url: `${appDataUrl}/${targetId}`,
  123.             headers: authHeaders
  124.         };
  125.         $.ajax(request)
  126.             .then(loadPlayers)
  127.             .catch(handleError);
  128.     }
  129.  
  130.     function deletePlayerFromDb(targetId) {
  131.         // Build request and send to Kinvey
  132.         let request = {
  133.             method: 'DELETE',
  134.             url: `${appDataUrl}/${targetId}`,
  135.             headers: authHeaders
  136.         };
  137.         $.ajax(request);
  138.     }
  139.  
  140.     function playGame() {
  141.         // Get player id and move player object to current player object
  142.         let targetId = $(this).parent().attr('data-id');
  143.         let targetPlayerObj = loadedPlayers.find(p => p['_id'] == targetId);
  144.         currentPlayerHolder = new CurrentPlayer(targetPlayerObj);
  145.  
  146.         // Load canvas and display it and its controls
  147.         loadCanvas(currentPlayerHolder);
  148.         showHideGameControls('show');
  149.     }
  150.  
  151.     function showHideGameControls(action) {
  152.         switch (action) {
  153.             case 'show':
  154.                 $(divGameButtons).css('display', '');
  155.                 $(gameCanvas).css('display', '');
  156.                 break;
  157.             case 'hide':
  158.                 $(divGameButtons).css('display', 'none');
  159.                 $(gameCanvas).css('display', 'none');
  160.                 break;
  161.         }
  162.     }
  163.    
  164.     function savePlayerProgress() {
  165.         let playerData = {
  166.             name: currentPlayerHolder['name'],
  167.             money: currentPlayerHolder['money'],
  168.             bullets: currentPlayerHolder['bullets']
  169.         };
  170.         let request = {
  171.             method: "PUT",
  172.             url: `${appDataUrl}/${currentPlayerHolder['_id']}`,
  173.             headers: authHeaders,
  174.             data: JSON.stringify(playerData)
  175.         };
  176.         $.ajax(request)
  177.             .then(clearCanvasInterval)
  178.             .catch(handleError);
  179.  
  180.         function clearCanvasInterval() {
  181.             clearInterval(canvas.intervalId);
  182.             showHideGameControls('hide');
  183.             loadPlayers();
  184.         }
  185.     }
  186.    
  187.     function reloadPlayerBullets() {
  188.         currentPlayerHolder['money'] -= 60;
  189.         currentPlayerHolder['bullets'] = 6;
  190.     }
  191. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement