Pārlūkot izejas kodu

reorganized directory, code refactor and resizing

lairaalmas 1 gadu atpakaļ
vecāks
revīzija
c9578a6957
100 mainītis faili ar 18 papildinājumiem un 1201 dzēšanām
  1. 18 13
      index.html
  2. 0 824
      js/globals.js
  3. 0 364
      js/preMenu.js
  4. 0 0
      src/assets/audio/beep.mp3
  5. 0 0
      src/assets/audio/beep.ogg
  6. 0 0
      src/assets/audio/error.mp3
  7. 0 0
      src/assets/audio/error.ogg
  8. 0 0
      src/assets/audio/ok.mp3
  9. 0 0
      src/assets/audio/ok.ogg
  10. 0 0
      src/assets/audio/pop.wav
  11. 0 0
      src/assets/img/NOT-USED/add.png
  12. 0 0
      src/assets/img/NOT-USED/info.png
  13. 0 0
      src/assets/img/NOT-USED/list.png
  14. 0 0
      src/assets/img/NOT-USED/multiply.png
  15. 0 0
      src/assets/img/NOT-USED/subtract.png
  16. 0 0
      src/assets/img/NOT-USED/view.png
  17. 0 0
      src/assets/img/character/balloon/airballoon_base.png
  18. 0 0
      src/assets/img/character/balloon/airballoon_upper.png
  19. 0 0
      src/assets/img/character/kid/lost.png
  20. 0 0
      src/assets/img/character/kid/run.png
  21. 0 0
      src/assets/img/character/kid/walk.png
  22. 0 0
      src/assets/img/character/tractor/tractor.png
  23. 0 0
      src/assets/img/flag/br.png
  24. 0 0
      src/assets/img/flag/fr.png
  25. 0 0
      src/assets/img/flag/it.png
  26. 0 0
      src/assets/img/flag/pe.png
  27. 0 0
      src/assets/img/flag/us.png
  28. 0 0
      src/assets/img/info_box/c1-A-h.png
  29. 0 0
      src/assets/img/info_box/c1-A.png
  30. 0 0
      src/assets/img/info_box/c1-B-h.png
  31. 0 0
      src/assets/img/info_box/c1-diff-1.png
  32. 0 0
      src/assets/img/info_box/c1-diff-5.png
  33. 0 0
      src/assets/img/info_box/c1-label.png
  34. 0 0
      src/assets/img/info_box/map-c1s2.png
  35. 0 0
      src/assets/img/info_box/map-s1.png
  36. 0 0
      src/assets/img/info_box/operation_equals.png
  37. 0 0
      src/assets/img/info_box/operation_minus.png
  38. 0 0
      src/assets/img/info_box/operation_mixed.png
  39. 0 0
      src/assets/img/info_box/operation_plus.png
  40. 0 0
      src/assets/img/info_box/s1-A-h.png
  41. 0 0
      src/assets/img/info_box/s1-A.png
  42. 0 0
      src/assets/img/info_box/s1-B-h.png
  43. 0 0
      src/assets/img/info_box/s1-diff-1.png
  44. 0 0
      src/assets/img/info_box/s1-diff-3.png
  45. 0 0
      src/assets/img/info_box/s1-label.png
  46. 0 0
      src/assets/img/info_box/s2-A-h.png
  47. 0 0
      src/assets/img/info_box/s2-B-h.png
  48. 0 0
      src/assets/img/info_box/s2-diff-1.png
  49. 0 0
      src/assets/img/info_box/s2-diff-5.png
  50. 0 0
      src/assets/img/info_box/s2-label.png
  51. 0 0
      src/assets/img/info_box/s2.png
  52. 0 0
      src/assets/img/interac_icon/close.png
  53. 0 0
      src/assets/img/interac_icon/down.png
  54. 0 0
      src/assets/img/interac_icon/error.png
  55. 0 0
      src/assets/img/interac_icon/info.png
  56. 0 0
      src/assets/img/interac_icon/ok.png
  57. 0 0
      src/assets/img/interac_icon/pointer.png
  58. 0 0
      src/assets/img/interac_icon/selectionBox.png
  59. 0 0
      src/assets/img/levels/circleOne.png
  60. 0 0
      src/assets/img/levels/circleOne_1.png
  61. 0 0
      src/assets/img/levels/circleOne_2.png
  62. 0 0
      src/assets/img/levels/operation_equals.png
  63. 0 0
      src/assets/img/levels/operation_minus.png
  64. 0 0
      src/assets/img/levels/operation_mixed.png
  65. 0 0
      src/assets/img/levels/operation_plus.png
  66. 0 0
      src/assets/img/levels/squareOne.png
  67. 0 0
      src/assets/img/levels/squareOne_1.png
  68. 0 0
      src/assets/img/levels/squareOne_2.png
  69. 0 0
      src/assets/img/levels/squareTwo.png
  70. 0 0
      src/assets/img/levels/squareTwo_1.png
  71. 0 0
      src/assets/img/levels/squareTwo_2.png
  72. 0 0
      src/assets/img/navig_icon/audio.png
  73. 0 0
      src/assets/img/navig_icon/back.png
  74. 0 0
      src/assets/img/navig_icon/help.png
  75. 0 0
      src/assets/img/navig_icon/home.png
  76. 0 0
      src/assets/img/navig_icon/language.png
  77. 0 0
      src/assets/img/navig_icon/menu.png
  78. 0 0
      src/assets/img/scene/bg.jpg
  79. 0 0
      src/assets/img/scene/bg_map.png
  80. 0 0
      src/assets/img/scene/broken_sign.png
  81. 0 0
      src/assets/img/scene/bush.png
  82. 0 0
      src/assets/img/scene/cloud.png
  83. 0 0
      src/assets/img/scene/farm.png
  84. 0 0
      src/assets/img/scene/flag.png
  85. 0 0
      src/assets/img/scene/floor.png
  86. 0 0
      src/assets/img/scene/garage.png
  87. 0 0
      src/assets/img/scene/house.png
  88. 0 0
      src/assets/img/scene/place.png
  89. 0 0
      src/assets/img/scene/place_off.png
  90. 0 0
      src/assets/img/scene/place_on.png
  91. 0 0
      src/assets/img/scene/road.png
  92. 0 0
      src/assets/img/scene/rock.png
  93. 0 0
      src/assets/img/scene/school.png
  94. 0 0
      src/assets/img/scene/sign.png
  95. 0 0
      src/assets/img/scene/tree.png
  96. 0 0
      src/assets/img/scene/tree2.png
  97. 0 0
      src/assets/img/scene/tree3.png
  98. 0 0
      src/assets/img/scene/tree4.png
  99. 0 0
      src/assets/lang/en_US
  100. 0 0
      assets/lang/es_PE

+ 18 - 13
index.html

@@ -1,7 +1,7 @@
 <!DOCTYPE html>
 <!-- LInE - Free Education, Private Data - http://www.usp.br/line -->
 
-<html>
+<html lang="pt-br">
 
 <head>
 
@@ -11,7 +11,7 @@
   <meta name="keywords" content="ifractions, fraction, game, private data" />
   <link rel="shortcut icon" href="assets/img/scene/flag.png">
   <title>iFractions</title>
-  <link rel="stylesheet" href="css/bootstrap.min.css">
+  <link rel="stylesheet" href="./src/style/bootstrap.min.css">
 
   <style>
     /* canvas */
@@ -132,17 +132,22 @@
     </div>
 
     <!-- Load all js files -->
-    <script src="js/preMenu.js"></script>
-    <script src="js/menu.js"></script>
-    <script src="js/customMenu.js"></script>
-    <script src="js/map.js"></script>
-    <script src="js/games/circleOne.js"></script>
-    <script src="js/games/squareOne.js"></script>
-    <script src="js/games/squareTwo.js"></script>
-    <script src="js/studentReport.js"></script> <!-- FOR MOODLE -->
-    <script src="js/integrationFunctions.js"></script> <!-- FOR MOODLE -->
-    <script src="js/gameMechanics.js"></script>
-    <script src="js/globals.js"></script>
+    <script src="src/js/menus/preMenu_boot.js"></script>
+    <script src="src/js/menus/preMenu_lang.js"></script>
+    <script src="src/js/menus/preMenu_name.js"></script>
+    <script src="src/js/menus/menu_main.js"></script>
+    <script src="src/js/menus/menu_custom.js"></script>
+    <script src="src/js/screens/map.js"></script>
+    <script src="src/js/screens/end.js"></script>
+    <script src="src/js/games/circleOne.js"></script>
+    <script src="src/js/games/squareOne.js"></script>
+    <script src="src/js/games/squareTwo.js"></script>
+    <script src="src/js/moodle/studentReport.js"></script> <!-- FOR MOODLE -->
+    <script src="src/js/moodle/integrationFunctions.js"></script> <!-- FOR MOODLE -->
+    <script src="src/js/gameMechanics.js"></script>
+    <script src="src/js/globals/globals_control.js"></script>
+    <script src="src/js/globals/globals_tokens.js"></script>
+    <script src="src/js/globals/globals_functions.js"></script>
 
     <script>
 

+ 0 - 824
js/globals.js

@@ -1,824 +0,0 @@
-/**************************************************************
- * LInE - Free Education, Private Data - http://www.usp.br/line
- *
- * This file holds all global elements to the game.
- *
- * Generating game levels in menu:
- * .....................................................
- * ...............square....................circle...... }                   = gameShape
- * .........../...........\....................|........ } = gameType (game)
- * ........One.............Two................One....... }
- * ......./...\.........../...\............./....\......
- * ......A.....B.........A.....B...........A......B..... = gameMode (game mode)
- * .(floor)..(stack)..(top)..(bottom)..(floor)..(stack).
- * .......\./.............\./................\./........
- * ........|...............|..................|.........
- * ......./.\..............|................/.|.\.......
- * ...Plus...Minus.......Equals........Plus.Minus.Mixed. = gameOperation (game math operation)
- * .......\./..............|................\.|./.......
- * ........|...............|..................|.........
- * ......1,2,3.........1,2,3,4,5..........1,2,3,4,5..... = gameDifficulty (difficulty level)
- * .....................................................
- *
- * About levels in map:
- *
- * ..................(game.levels)......................
- * ......................__|__..........................
- * .....................|.|.|.|.........................
- * ...................0,1,2,3,4,5....................... = mapPosition (map positions)
- * ...................|.........|.......................
- * ................(start)....(end).....................
- **************************************************************/
-
-/**
- * Turns console messages ON/OFF (for debug purposes only)
- * @type {boolean}
- */
-const debugMode = false;
-
-/** FOR MOODLE <br>
- *
- * iFractions can run on a server or inside moodle through iAssign. <br>
- * This variable should be set according to where it is suposed to run: <br>
- * - if true, on moodle <br>
- * - if false, on a server
- */
-const moodle = false;
-
-/**
- * Name of the selected game.<br>
- * Can be: 'squareOne', 'squareTwo' or 'circleOne'.
- *
- * @type {string}
- */
-let gameType;
-
-/**
- * Used for text and game information.<br>
- * Shape that makes the name of the game - e.g in 'squareOne' it is 'square'.<br>
- * Can be: 'circle' or 'square'.
- *
- * @type {string}
- */
-let gameShape;
-
-/**
- * Holds selected game mode.<br>
- * In squareOne/circleOne   can be: 'A' (click on the floor) or 'B' (click on the amount to go/stacked figures).<br>
- * In squareTwo             can be: 'A' (more subdivisions on top) or 'B' (more subdivisions on bottom).
- *
- * @type {string}
- */
-let gameMode;
-
-/**
- * Holds game math operation.<br>
- * In squareOne   can be: 'Plus' (green tractor goes right) or 'Minus' (red tractor goes left).<br>
- * In circleOne   can be: 'Plus' (green tractor goes right), 'Minus' (red tractor goes left) or 'Mixed' (green tractor goes both sides).<br>
- * In squareTwo   can be: 'Equals' (compares two rectangle subdivisions).
- *
- * @type {string}
- */
-let gameOperation;
-
-/**
- * Holds game overall difficulty. 1 (easier) -> n (harder).<br>
- * In squareOne             can be: 1..3.<br>
- * In circleOne/squareTwo   can be: 1..5.
- *
- * @type {number}
- */
-let gameDifficulty;
-
-/**
- * Turns displaying the fraction labels on levels ON/OFF
- * @type {boolean}
- */
-let fractionLabel = true;
-
-/**
- * When true, the character can move to next position in the map
- * @type {boolean}
- */
-let mapMove;
-
-/**
- * Character position on the map, aka game levels (1..4: valid; 5: end)
- * @type {number}
- */
-let mapPosition;
-
-/**
- * Number of finished levels in the map
- * @type {number}
- */
-let completedLevels;
-
-/**
- * Turns game audio ON/OFF
- * @type {boolean}
- */
-let audioStatus = false;
-
-/**
- * Player's name
- * @type {string}
- */
-let playerName;
-
-/**
- * String that contains the selected language.<br>
- * It is the name of the language file.
- * @type {string}
- */
-let langString;
-
-/**
- * Holds the current state.<br>
- * Is used as if it was a 'this' inside state functions.
- * @type {object}
- */
-let self;
-
-const medSrc = 'assets/img/'; // Base directory for media
-
-/**
- * Metadata for all games
- * @type {object}
- */
-const info = {
-  all: {
-    squareOne: {
-      gameShape: 'square',
-      gameType: 'squareOne',
-      gameTypeUrl: 'game0',
-      gameMode: ['A', 'B'],
-      gameModeUrl: ['mode0', 'mode1'],
-      gameOperation: ['Plus', 'Minus'],
-      gameOperationUrl: ['operation_plus', 'operation_minus'],
-      gameDifficulty: 3,
-    },
-
-    circleOne: {
-      gameShape: 'circle',
-      gameType: 'circleOne',
-      gameTypeUrl: 'game1',
-      gameMode: ['A', 'B'],
-      gameModeUrl: ['mode2', 'mode3'],
-      gameOperation: ['Plus', 'Minus', 'Mixed'],
-      gameOperationUrl: [
-        'operation_plus',
-        'operation_minus',
-        'operation_mixed',
-      ],
-      gameDifficulty: 5,
-    },
-
-    squareTwo: {
-      gameShape: 'square',
-      gameType: 'squareTwo',
-      gameTypeUrl: 'game2',
-      gameMode: ['A', 'B'],
-      gameModeUrl: ['mode4', 'mode5'],
-      gameOperation: ['Equals'],
-      gameOperationUrl: ['operation_equals'],
-      gameDifficulty: 5,
-    },
-  },
-  gameShape: [],
-  gameType: [],
-  gameTypeUrl: [],
-  gameMode: [],
-  gameModeUrl: [],
-  gameOperation: [],
-  gameOperationUrl: [],
-  gameDifficulty: [],
-};
-
-// Called once when the game starts
-(function () {
-  for (key in info.all) {
-    info.gameShape.push(info.all[key].gameShape);
-    info.gameType.push(info.all[key].gameType);
-    info.gameTypeUrl.push(info.all[key].gameTypeUrl);
-    info.gameMode.push(info.all[key].gameMode);
-    info.gameModeUrl.push(info.all[key].gameMode);
-    info.gameOperation.push(info.all[key].gameOperation);
-    info.gameOperationUrl.push(info.all[key].gameOperationUrl);
-    info.gameDifficulty.push(info.all[key].gameDifficulty);
-  }
-})();
-
-/**
- * Preset colors for graphic elements.
- * @type {object}
- */
-const colors = {
-  // Blues
-  blue: '#003cb3', // Subtitle
-  blueDark: '#183780', // Line color that indicates right and fraction numbers
-
-  blueBg: '#cce5ff', // Background color
-  blueBgOff: '#adc8e6',
-  blueBgInsideLevel: '#a8c0e6', // Background color in squareOne (used for floor gap)
-
-  blueMenuLine: '#b7cdf4',
-
-  // Reds
-  red: '#b30000', // Linecolor that indicates left
-  redLight: '#d27979', // squareTwo figures
-  redDark: '#330000', // squareTwo figures and some titles
-
-  // Greens
-  green: '#00804d', // Title
-  greenLight: '#83afaf', // squareTwo figures
-  greenDark: '#1e2f2f', // squareTwo figures
-  greenNeon: '#00d600',
-
-  // Basics
-  white: '#efeff5',
-  gray: '#708090',
-  black: '#000',
-  yellow: '#ffef1f',
-};
-
-const fontSizes = {
-  h0: '56px',
-  h1: '40px',
-  h2: '32px',
-  h3: '30px',
-  h4: '28px',
-  p: '22px',
-  h1_old: '32px',
-  h2_old: '26px',
-  h3_old: '22px',
-  h4_old: '20px',
-  p_old: '14px',
-};
-/**
- * Preset text styles for game text.<br>
- * Contains: font, size, text color and text align.
- * @type {object}
- */
-const textStyles = {
-  h0_green: {
-    font: fontSizes.h0 + ' Arial,sans-serif',
-    fill: colors.green,
-    align: 'center',
-  }, // menu title
-  h1_green: {
-    font: fontSizes.h1 + ' Arial,sans-serif',
-    fill: colors.green,
-    align: 'center',
-  }, // Menu title
-  h2_green: {
-    font: fontSizes.h2 + ' Arial,sans-serif',
-    fill: colors.green,
-    align: 'center',
-  }, // Flag labels (langState)
-
-  h1_white: {
-    font: fontSizes.h1 + ' Arial,sans-serif',
-    fill: colors.white,
-    align: 'center',
-  }, // Ok button (nameState)
-  h2_white: {
-    font: fontSizes.h2 + ' Arial,sans-serif',
-    fill: colors.white,
-    align: 'center',
-  }, // Difficulty buttons (menuState)
-  h3__white: {
-    font: fontSizes.h3 + ' Arial,sans-serif',
-    fill: colors.white,
-    align: 'center',
-  }, // Difficulty numbers (menuState)
-  h4_white: {
-    font: fontSizes.h4 + ' Arial,sans-serif',
-    fill: colors.white,
-    align: 'center',
-  }, // Difficulty numbers (menuState)
-  p_white: {
-    font: fontSizes.p + ' Arial,sans-serif',
-    fill: colors.white,
-    align: 'center',
-  }, // Enter button (menuState)
-
-  h2_brown: {
-    font: fontSizes.h2 + ' Arial,sans-serif',
-    fill: colors.redDark,
-    align: 'center',
-  }, // Map difficulty label
-  h4_brown: {
-    font: fontSizes.h4 + ' Arial,sans-serif',
-    fill: colors.redDark,
-    align: 'center',
-  }, // Menu overtitle
-  p_brown: {
-    font: fontSizes.p + ' Arial,sans-serif',
-    fill: colors.redDark,
-    align: 'center',
-  }, // Map difficulty label
-
-  h2_blue: {
-    font: fontSizes.h2 + ' Arial,sans-serif',
-    fill: colors.blue,
-    align: 'center',
-  }, // Menu subtitle
-  h4_blue: {
-    font: fontSizes.h4 + ' Arial,sans-serif',
-    fill: colors.blue,
-    align: 'center',
-  }, // Menu subtitle
-
-  h2_blueDark: {
-    font: fontSizes.h2 + ' Arial,sans-serif',
-    fill: colors.blueDark,
-    align: 'center',
-  }, // Fractions
-  h4_blueDark: {
-    font: fontSizes.h4 + ' Arial,sans-serif',
-    fill: colors.blueDark,
-    align: 'center',
-  }, // Fractions
-  p_blueDark: {
-    font: fontSizes.p + ' Arial,sans-serif',
-    fill: colors.blueDark,
-    align: 'center',
-  }, // Fractions
-};
-
-/**
- * List of URL for all media in the game
- * divided 1st by the 'state' that loads the media
- * and 2nd by the 'media type' for that state.
- *
- * @type {object}
- */
-const url = {
-  /**
-   * url.<state>
-   * where <state> can be: boot, menu, squareOne, squareTwo, circleOne.
-   */
-  boot: {
-    /**
-     * url.<state>.<media type>
-     * where <media type> can be: image, sprite, audio <br><br>
-     *
-     * image: [ [name, source], ... ] <br>
-     * sprite: [ [name, source, number of frames], ... ] <br>
-     * audio: [ [name, [source, alternative source] ], ... ]
-     */
-    image: [
-      // Scene
-      ['bgimage', medSrc + 'scene/bg.jpg'],
-      ['bgmap', medSrc + 'scene/bg_map.png'],
-      ['broken_sign', medSrc + 'scene/broken_sign.png'],
-      ['bush', medSrc + 'scene/bush.png'],
-      ['cloud', medSrc + 'scene/cloud.png'],
-      ['floor', medSrc + 'scene/floor.png'],
-      ['place_off', medSrc + 'scene/place_off.png'],
-      ['place_on', medSrc + 'scene/place_on.png'],
-      ['rock', medSrc + 'scene/rock.png'],
-      ['road', medSrc + 'scene/road.png'],
-      ['sign', medSrc + 'scene/sign.png'],
-      ['tree1', medSrc + 'scene/tree.png'],
-      ['tree2', medSrc + 'scene/tree2.png'],
-      ['tree3', medSrc + 'scene/tree3.png'],
-      ['tree4', medSrc + 'scene/tree4.png'],
-      // Flags
-      ['flag_BR', medSrc + 'flag/br.png'],
-      ['flag_FR', medSrc + 'flag/fr.png'],
-      ['flag_IT', medSrc + 'flag/it.png'],
-      ['flag_PE', medSrc + 'flag/pe.png'],
-      ['flag_US', medSrc + 'flag/us.png'],
-      // Navigation icons on the top of the page
-      ['back', medSrc + 'navig_icon/back.png'],
-      ['help', medSrc + 'navig_icon/help.png'],
-      ['home', medSrc + 'navig_icon/home.png'],
-      ['language', medSrc + 'navig_icon/language.png'],
-      ['menu', medSrc + 'navig_icon/menu.png'],
-      // Interactive icons
-      ['arrow_down', medSrc + 'interac_icon/down.png'],
-      ['close', medSrc + 'interac_icon/close.png'],
-      ['error', medSrc + 'interac_icon/error.png'],
-      ['help_pointer', medSrc + 'interac_icon/pointer.png'],
-      ['info', medSrc + 'interac_icon/info.png'],
-      ['ok', medSrc + 'interac_icon/ok.png'],
-      // Menu icons - Games
-      ['game0', medSrc + 'levels/squareOne.png'], // Square I
-      ['game1', medSrc + 'levels/circleOne.png'], // Circle I
-      ['game2', medSrc + 'levels/squareTwo.png'], // Square II
-      // Menu icons - Info box
-      ['c1-A', medSrc + 'info_box/c1-A.png'],
-      ['c1-A-h', medSrc + 'info_box/c1-A-h.png'],
-      ['c1-B-h', medSrc + 'info_box/c1-B-h.png'],
-      ['c1-diff-1', medSrc + 'info_box/c1-diff-1.png'],
-      ['c1-diff-5', medSrc + 'info_box/c1-diff-5.png'],
-      ['c1-label', medSrc + 'info_box/c1-label.png'],
-      ['map-c1s2', medSrc + 'info_box/map-c1s2.png'],
-      ['map-s1', medSrc + 'info_box/map-s1.png'],
-      ['s1-A', medSrc + 'info_box/s1-A.png'],
-      ['s1-A-h', medSrc + 'info_box/s1-A-h.png'],
-      ['s1-B-h', medSrc + 'info_box/s1-B-h.png'],
-      ['s1-diff-1', medSrc + 'info_box/s1-diff-1.png'],
-      ['s1-diff-3', medSrc + 'info_box/s1-diff-3.png'],
-      ['s1-label', medSrc + 'info_box/s1-label.png'],
-      ['s2', medSrc + 'info_box/s2.png'],
-      ['s2-A-h', medSrc + 'info_box/s2-A-h.png'],
-      ['s2-B-h', medSrc + 'info_box/s2-B-h.png'],
-      ['s2-diff-1', medSrc + 'info_box/s2-diff-1.png'],
-      ['s2-diff-5', medSrc + 'info_box/s2-diff-5.png'],
-      ['s2-label', medSrc + 'info_box/s2-label.png'],
-      ['operation_plus', medSrc + 'info_box/operation_plus.png'],
-      ['operation_minus', medSrc + 'info_box/operation_minus.png'],
-      ['operation_mixed', medSrc + 'info_box/operation_mixed.png'],
-      ['operation_equals', medSrc + 'info_box/operation_equals.png'],
-    ],
-    sprite: [
-      // Game Sprites
-      ['kid_walk', medSrc + 'character/kid/walk.png', 26],
-      // Navigation icons on the top of the page
-      ['audio', medSrc + 'navig_icon/audio.png', 2],
-      // Interactive icons
-      ['select', medSrc + 'interac_icon/selectionBox.png', 2],
-      // Menu icons - Game modes
-      ['mode0', medSrc + 'levels/squareOne_1.png', 2], // Square I : A
-      ['mode1', medSrc + 'levels/squareOne_2.png', 2], // Square I : B
-      ['mode2', medSrc + 'levels/circleOne_1.png', 2], // Circle I : A
-      ['mode3', medSrc + 'levels/circleOne_2.png', 2], // Circle I : B
-      ['mode4', medSrc + 'levels/squareTwo_1.png', 2], // Square II : A
-      ['mode5', medSrc + 'levels/squareTwo_2.png', 2], // Square II : B
-      // Menu icons - Math operations
-      ['operation_plus', medSrc + 'levels/operation_plus.png', 2], // Square/circle I : right
-      ['operation_minus', medSrc + 'levels/operation_minus.png', 2], // Square/circle I : left
-      ['operation_mixed', medSrc + 'levels/operation_mixed.png', 2], // Circle I : mixed
-      ['operation_equals', medSrc + 'levels/operation_equals.png', 2], // Square II : equals
-    ],
-    audio: [
-      // Sound effects
-      ['beepSound', ['assets/audio/beep.ogg', 'assets/audio/beep.mp3']],
-      ['okSound', ['assets/audio/ok.ogg', 'assets/audio/ok.mp3']],
-      ['errorSound', ['assets/audio/error.ogg', 'assets/audio/error.mp3']],
-      ['popSound', ['', 'assets/audio/pop.wav']],
-    ],
-  },
-  squareOne: {
-    image: [
-      // Map buildings
-      ['farm', medSrc + 'scene/farm.png'],
-      ['garage', medSrc + 'scene/garage.png'],
-    ],
-    sprite: [
-      // Game sprites
-      ['tractor', medSrc + 'character/tractor/tractor.png', 15],
-    ],
-    audio: [],
-  },
-  squareTwo: {
-    image: [
-      // Map buildings
-      ['house', medSrc + 'scene/house.png'],
-      ['school', medSrc + 'scene/school.png'],
-    ],
-    sprite: [
-      // Game sprites
-      ['kid_standing', medSrc + 'character/kid/lost.png', 6],
-      ['kid_run', medSrc + 'character/kid/run.png', 12],
-    ],
-    audio: [],
-  },
-  circleOne: {
-    image: [
-      // Map buildings
-      ['house', medSrc + 'scene/house.png'],
-      ['school', medSrc + 'scene/school.png'],
-      // Game images
-      ['balloon', medSrc + 'character/balloon/airballoon_upper.png'],
-      ['balloon_basket', medSrc + 'character/balloon/airballoon_base.png'],
-    ],
-    sprite: [
-      // Game sprites
-      ['kid_run', medSrc + 'character/kid/run.png', 12],
-    ],
-    audio: [],
-  },
-};
-
-/**
- * Manages navigation icons on the top of the screen
- * @namespace
- */
-const navigationIcons = {
-  /**
-   * Add navigation icons.<br>
-   *  * The icons on the left are ordered from left to right. <br>
-   *  * The icons on the right are ordered from right to left.
-   *
-   * @param {boolean} leftIcon0 1st left icon (back)
-   * @param {boolean} leftIcon1 2nd left icon (main menu)
-   * @param {boolean} leftIcon2 3rd left icon (solve game)
-   * @param {boolean} rightIcon0 1st right icon (audio)
-   * @param {boolean} rightIcon1 2nd right icon (lang)
-   * @param {undefined|string} state state to be called by the 'back' button (must exist if param 'leftIcon0' is true)
-   * @param {undefined|function} help function in the current game state that display correct answer
-   */
-  add: function (
-    leftIcon0,
-    leftIcon1,
-    leftIcon2,
-    rightIcon0,
-    rightIcon1,
-    state,
-    help
-  ) {
-    let left_x = 10;
-    let right_x = context.canvas.width - 50 - 10;
-    this.iconsList = [];
-
-    // 'Descriptive labels' for the navigation icons
-    this.left_text = game.add.text(left_x, 73, '', textStyles.h4_brown);
-    this.left_text.align = 'left';
-
-    this.right_text = game.add.text(right_x + 50, 73, '', textStyles.h4_brown);
-    this.right_text.align = 'right';
-
-    // Left icons
-
-    if (leftIcon0) {
-      // Return to previous screen
-      if (!state) {
-        console.error(
-          "Game error: You tried to add a 'back' icon without the 'state' parameter."
-        );
-      } else {
-        this.state = state;
-        this.iconsList.push(game.add.image(left_x, 10, 'back'));
-        left_x += 50;
-      }
-    }
-
-    if (leftIcon1) {
-      // Return to main menu screen
-      this.iconsList.push(game.add.image(left_x, 10, 'menu'));
-      left_x += 50;
-    }
-
-    if (leftIcon2) {
-      // Shows solution to the game
-      if (!help) {
-        console.error(
-          "Game error: You tried to add a 'game solution' icon without the 'help' parameter."
-        );
-      } else {
-        this.help = help;
-        this.iconsList.push(game.add.image(left_x, 10, 'help'));
-        left_x += 50;
-      }
-    }
-
-    // Right icons
-
-    if (rightIcon0) {
-      // Turns game audio on/off
-      this.audioIcon = game.add.sprite(right_x, 10, 'audio', 1);
-      this.audioIcon.curFrame = audioStatus ? 0 : 1;
-      this.iconsList.push(this.audioIcon);
-      right_x -= 50;
-    }
-
-    if (rightIcon1) {
-      // Return to select language screen
-      this.iconsList.push(game.add.image(right_x, 10, 'language'));
-      right_x -= 50;
-    }
-  },
-
-  /**
-   * When 'back' icon is clicked go to this state
-   *
-   * @param {string} state name of the next state
-   */
-  callState: function (state) {
-    if (audioStatus) game.audio.popSound.play();
-
-    game.event.clear(self);
-    game.state.start(state);
-  },
-
-  /**
-   * Called by mouse click event
-   *
-   * @param {number} x contains the mouse x coordinate
-   * @param {number} y contains the mouse y coordinate
-   */
-  onInputDown: function (x, y) {
-    navigationIcons.iconsList.forEach((cur) => {
-      if (game.math.isOverIcon(x, y, cur)) {
-        const name = cur.name;
-        switch (name) {
-          case 'back':
-            navigationIcons.callState(navigationIcons.state);
-            break;
-          case 'menu':
-            navigationIcons.callState('menu');
-            break;
-          case 'help':
-            navigationIcons.help();
-            break;
-          case 'language':
-            navigationIcons.callState('lang');
-            break;
-          case 'audio':
-            if (audioStatus) {
-              audioStatus = false;
-              navigationIcons.audioIcon.curFrame = 1;
-            } else {
-              audioStatus = true;
-              if (audioStatus) game.audio.popSound.play();
-              navigationIcons.audioIcon.curFrame = 0;
-            }
-            game.render.all();
-            break;
-          default:
-            console.error('Game error: error in navigation icon');
-        }
-      }
-    });
-  },
-
-  /**
-   * Called by mouse move event
-   *
-   * @param {number} x contains the mouse x coordinate
-   * @param {number} y contains the mouse y coordinate
-   */
-  onInputOver: function (x, y) {
-    let flag = false;
-
-    navigationIcons.iconsList.forEach((cur) => {
-      if (game.math.isOverIcon(x, y, cur)) {
-        flag = true;
-        let name = cur.name;
-        switch (name) {
-          case 'back':
-            navigationIcons.left_text.name = game.lang.nav_back;
-            break;
-          case 'menu':
-            navigationIcons.left_text.name = game.lang.nav_menu;
-            break;
-          case 'help':
-            navigationIcons.left_text.name = game.lang.nav_help;
-            break;
-          case 'language':
-            navigationIcons.right_text.name = game.lang.nav_lang;
-            break;
-          case 'audio':
-            navigationIcons.right_text.name = game.lang.audio;
-            break;
-        }
-      }
-    });
-
-    if (!flag) {
-      navigationIcons.left_text.name = '';
-      navigationIcons.right_text.name = '';
-    } else {
-      document.body.style.cursor = 'pointer';
-    }
-  },
-};
-
-/**
- * Sends game information to database
- *
- * @param {string} extraData player information for the current game
- */
-const sendToDB = function (extraData) {
-  // FOR MOODLE
-  if (moodle) {
-    if (self.result) moodleVar.hits[mapPosition - 1]++;
-    else moodleVar.errors[mapPosition - 1]++;
-
-    moodleVar.time[mapPosition - 1] += game.timer.elapsed;
-
-    const url = iLMparameters.iLM_PARAM_ServerToGetAnswerURL;
-    const grade = '' + getEvaluation();
-    const report = getAnswer();
-    const data =
-      'return_get_answer=1' +
-      '&iLM_PARAM_ActivityEvaluation=' +
-      encodeURIComponent(grade) +
-      '&iLM_PARAM_ArchiveContent=' +
-      encodeURIComponent(report);
-
-    const init = {
-      method: 'POST',
-      body: data,
-      headers: {
-        'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
-      },
-    };
-
-    fetch(url, init)
-      .then((response) => {
-        if (response.ok) {
-          if (debugMode) console.log('Processing...');
-        } else {
-          console.error('Game error: Network response was not ok.');
-        }
-      })
-      .catch((error) => {
-        console.error(
-          'Game error: problem with fetch operation - ' + error.message + '.'
-        );
-      });
-  } else {
-    // Create some variables we need to send to our PHP file
-    // Attention: this names must be compactible to data table (MySQL server)
-    // @see php/save.php
-    const data =
-      'line_ip=143.107.45.11' + // INSERT database server IP
-      '&line_name=' +
-      playerName +
-      '&line_lang=' +
-      langString +
-      extraData;
-
-    const url = 'php/save.php';
-
-    const init = {
-      method: 'POST',
-      body: data,
-      headers: { 'Content-type': 'application/x-www-form-urlencoded' },
-    };
-    fetch(url, init)
-      .then((response) => {
-        if (response.ok) {
-          if (debugMode) console.log('Processing...');
-          response.text().then((text) => {
-            if (debugMode) {
-              console.log(text);
-            }
-          });
-        } else {
-          console.error('Game error: Network response was not ok.');
-        }
-      })
-      .catch((error) => {
-        console.error(
-          'Game error: problem with fetch operation - ' + error.message + '.'
-        );
-      });
-  }
-};
-
-let gameFrame = function () {
-  let x = (y = 200);
-  let width = context.canvas.width - 2 * x;
-  let height = context.canvas.height - 2 * y;
-  let rect = function () {
-    game.add.geom.rect(x, y, width, height, colors.red, 2);
-  };
-  let point = function (offsetW, offsetH) {
-    for (let i = 0, y1 = y; i < 4; i++) {
-      x1 = x;
-      for (let j = 0; j < 7; j++) {
-        game.add.geom.rect(x1, y1, 20, 20, undefined, 0, colors.red, 1);
-        x1 += offsetW;
-      }
-      y1 += offsetH;
-    }
-  };
-  return { x, y, width, height, rect, point };
-};
-
-// For debug
-const debug = {
-  grid: function () {
-    const grid = 2;
-    const h = 1920 / (grid + 0.5);
-    const v = 1080 / (grid + 0.5);
-    for (let i = 0; i < grid; i++) {
-      game.add.geom.rect(
-        h / 2 + i * h,
-        0,
-        h / 2,
-        1080,
-        '',
-        0,
-        colors.blue,
-        0.3
-      );
-      game.add.geom.rect(
-        0,
-        v / 2 + i * v,
-        1920,
-        v / 2,
-        '',
-        0,
-        colors.blue,
-        0.3
-      );
-    }
-  },
-};

+ 0 - 364
js/preMenu.js

@@ -1,364 +0,0 @@
-/******************************
- * This file holds game states.
- ******************************/
-
-/** [BOOT STATE] First state called. Loads media. <br>
- *
- * @namespace
- */
-const bootState = {
-  /**
-   * Preloads media for current state
-   */
-  preload: function () {
-    // FOR MOODLE
-    if (moodle) {
-      loadLangState.firstTime = false;
-      const moodleLang = iLMparameters.lang;
-      switch (moodleLang) {
-        case 'en':
-          langString = 'en_US';
-          break;
-        case 'pt':
-          langString = 'pt_BR';
-          break;
-        case 'fr':
-          langString = 'fr_FR';
-          break;
-        case 'es':
-          langString = 'es_PE';
-          break;
-        case 'it':
-          langString = 'it_IT';
-          break;
-        default:
-          langString = 'en_US';
-      }
-      game.load.lang('assets/lang/' + langString);
-    }
-    // LOADING MEDIA
-    game.load.audio(url.boot.audio);
-    game.load.image(url.boot.image);
-    game.load.sprite(url.boot.sprite);
-  },
-
-  /**
-   * Main code
-   */
-  create: function () {
-    // Calls first screen seen by the player
-
-    // FOR MOODLE
-    if (moodle) {
-      game.state.start('menu');
-    } else {
-      game.state.start('lang');
-    }
-  },
-};
-
-/** [LANGUAGE STATE] Screen that asks the user to select the language for the game text.
- *
- * @namespace
- */
-const langState = {
-  /**
-   * Main code
-   */
-  create: function () {
-    // Background color
-    game.add.geom.rect(
-      0,
-      0,
-      context.canvas.width,
-      context.canvas.height,
-      colors.white,
-      0,
-      colors.blueBg,
-      1
-    );
-
-    // Parameters for the elements on the screen
-    this.listOfFlags = [];
-
-    this.langs = {
-      text: [
-        'FRAÇÕES  ',
-        'FRACCIONES  ',
-        'FRACTIONS  ',
-        'FRACTIONS  ',
-        'FRAZIONI  ',
-      ], // Language names
-      flag: ['flag_BR', 'flag_PE', 'flag_FR', 'flag_US', 'flag_IT'], // Icon names
-      lang: ['pt_BR', 'es_PE', 'fr_FR', 'en_US', 'it_IT'], // Parameters sent for language object
-      x: [-350, -350, -350, 170, 170],
-      y: [-220, 0, 220, -110, 110],
-    };
-
-    // Create elements on screen
-    for (let i in this.langs.flag) {
-      // Add text for language names
-      game.add.text(
-        context.canvas.width / 2 + this.langs.x[i],
-        context.canvas.height / 2 + this.langs.y[i],
-        this.langs.text[i],
-        textStyles.h1_green
-      ).align = 'right';
-
-      // Add icons for flags
-      const flag = game.add.image(
-        context.canvas.width / 2 + this.langs.x[i] + 100,
-        context.canvas.height / 2 + this.langs.y[i] - 13,
-        this.langs.flag[i]
-      );
-      flag.anchor(0.5, 0.5);
-      this.listOfFlags.push(flag);
-    }
-
-    game.event.add('click', this.onInputDown);
-    game.event.add('mousemove', this.onInputOver);
-
-    console.log('DEBUG');
-    this.setLang('pt_BR');
-  },
-
-  /**
-   * Calls state that loads selected language
-   *
-   * @param {string} selectedLang language selected by player
-   */
-  setLang: function (selectedLang) {
-    // Saves language name e.g 'pt_BR'
-    langString = selectedLang;
-    if (audioStatus) game.audio.popSound.play();
-    // Calls loading screen
-    game.state.start('loadLang');
-  },
-
-  /**
-   * Called by mouse click event
-   *
-   * @param {object} mouseEvent contains the mouse click coordinates
-   */
-  onInputDown: function (mouseEvent) {
-    const x = game.math.getMouse(mouseEvent).x;
-    const y = game.math.getMouse(mouseEvent).y;
-
-    self.listOfFlags.forEach((cur) => {
-      if (game.math.isOverIcon(x, y, cur)) {
-        for (let i in self.langs.flag) {
-          if (self.langs.flag[i] == cur.name) {
-            self.setLang(self.langs.lang[i]);
-            break;
-          }
-        }
-      }
-    });
-  },
-
-  /**
-   * Called by mouse move event
-   *
-   * @param {object} mouseEvent contains the mouse move coordinates
-   */
-  onInputOver: function (mouseEvent) {
-    const x = game.math.getMouse(mouseEvent).x;
-    const y = game.math.getMouse(mouseEvent).y;
-    let flag = false;
-
-    self.listOfFlags.forEach((cur) => {
-      if (game.math.isOverIcon(x, y, cur)) {
-        flag = true;
-        cur.scale = cur.scale = 1.05;
-      } else {
-        cur.scale = cur.scale = 1;
-      }
-    });
-
-    if (flag) document.body.style.cursor = 'pointer';
-    else document.body.style.cursor = 'auto';
-
-    game.render.all();
-  },
-};
-
-/** [LOADING LANGUAGE STATE] Loads the selected language.
- *
- *  @namespace
- */
-const loadLangState = {
-  /**
-   * Preloads media for current state
-   */
-  preload: function () {
-    // LOADING MEDIA : selected language
-    game.load.lang('assets/lang/' + langString);
-  },
-
-  /**
-   * Main code
-   */
-  create: function () {
-    if (debugMode) console.log('Language: ' + langString);
-
-    // Make sure to only ask for player name on the first time oppening the game
-    if (this.firstTime == undefined) {
-      this.firstTime = false;
-      game.state.start('name'); // First time opening ifractions ('language' >> 'name' >> 'menu')
-    } else {
-      game.state.start('menu'); // If changing language during the game ('language' >> >> 'menu')
-    }
-  },
-};
-
-/** [NAME STATE] Screen that asks for the user's name.
- *
- * @namespace
- */
-const nameState = {
-  /**
-   * Main code
-   */
-  create: function () {
-    // Background color
-    game.add.geom.rect(
-      0,
-      0,
-      context.canvas.width,
-      context.canvas.height,
-      colors.white,
-      0,
-      colors.blueBg,
-      1
-    );
-
-    // Set title and warning text
-
-    game.add.text(
-      context.canvas.width / 2,
-      context.canvas.height / 2 - 100,
-      game.lang.insert_name,
-      textStyles.h1_green
-    );
-
-    this.warningEmptyName = game.add.text(
-      context.canvas.width / 2,
-      context.canvas.height / 2 - 70,
-      '',
-      textStyles.h4_brown
-    );
-
-    // Set 'ok' button that gets player's information
-    this.okBtn = game.add.geom.rect(
-      context.canvas.width / 2 - 104,
-      context.canvas.height / 2 + 62,
-      208, //168,
-      72, //60,
-      undefined,
-      0,
-      colors.gray,
-      0.6
-    );
-
-    // Set button Text
-    game.add.text(
-      context.canvas.width / 2 + 1,
-      context.canvas.height / 2 + 112,
-      game.lang.ready,
-      textStyles.h1_white
-    );
-
-    // Makes text field visible
-    document.getElementById('textbox').style.visibility = 'visible';
-
-    // Does the same as the button click when the player presses 'enter'
-    document
-      .getElementById('textbox-content')
-      .addEventListener('keypress', function (e) {
-        const keycode = e.key || e.code;
-        if (keycode == 'Enter') {
-          if (self.checkEmptyName()) self.saveName();
-          game.render.all(); // Can show empty name
-        }
-      });
-
-    game.event.add('click', this.onInputDown);
-    game.event.add('mousemove', this.onInputOver);
-
-    console.log('DEBUG');
-    document.getElementById('textbox-content').value = 'Laira';
-    this.saveName();
-  },
-
-  /**
-   * Checks if player entered name in text box
-   *
-   * @returns {boolean} false is textBox is emptys
-   */
-  checkEmptyName: function () {
-    // If text field is empty displays error message
-    if (document.getElementById('textbox-content').value == '') {
-      self.warningEmptyName.name = game.lang.empty_name;
-      return false;
-    }
-    return true;
-  },
-
-  /**
-   * Saves player name and calls next state
-   */
-  saveName: function () {
-    // Saves player's input in global variable 'playerName'
-    playerName = document.getElementById('textbox-content').value;
-
-    // Hides and clears text field
-    document.getElementById('textbox').style.visibility = 'hidden';
-    document.getElementById('textbox-content').value = '';
-
-    if (audioStatus) game.audio.popSound.play();
-    if (debugMode) console.log('Username: ' + playerName);
-
-    // FOR MOODLE
-    // Calls 'menu' state
-    if (!moodle) game.state.start('menu');
-  },
-
-  /**
-   * Called by mouse click event
-   *
-   * @param {object} mouseEvent contains the mouse click coordinates
-   */
-  onInputDown: function (mouseEvent) {
-    const x = game.math.getMouse(mouseEvent).x;
-    const y = game.math.getMouse(mouseEvent).y;
-    const cur = self.okBtn;
-
-    if (game.math.isOverIcon(x, y, cur)) {
-      if (self.checkEmptyName()) {
-        self.saveName();
-      }
-    }
-    game.render.all();
-  },
-
-  /**
-   * Called by mouse move event
-   *
-   * @param {object} mouseEvent contains the mouse move coordinates
-   */
-  onInputOver: function (mouseEvent) {
-    const x = game.math.getMouse(mouseEvent).x;
-    const y = game.math.getMouse(mouseEvent).y;
-    const cur = self.okBtn;
-
-    if (game.math.isOverIcon(x, y, cur)) {
-      document.body.style.cursor = 'pointer';
-      cur.alpha = 0.4;
-    } else {
-      document.body.style.cursor = 'auto';
-      cur.alpha = 0.6;
-    }
-
-    game.render.all();
-  },
-};

assets/audio/beep.mp3 → src/assets/audio/beep.mp3


assets/audio/beep.ogg → src/assets/audio/beep.ogg


assets/audio/error.mp3 → src/assets/audio/error.mp3


assets/audio/error.ogg → src/assets/audio/error.ogg


assets/audio/ok.mp3 → src/assets/audio/ok.mp3


assets/audio/ok.ogg → src/assets/audio/ok.ogg


assets/audio/pop.wav → src/assets/audio/pop.wav


assets/img/NOT-USED/add.png → src/assets/img/NOT-USED/add.png


assets/img/NOT-USED/info.png → src/assets/img/NOT-USED/info.png


assets/img/NOT-USED/list.png → src/assets/img/NOT-USED/list.png


assets/img/NOT-USED/multiply.png → src/assets/img/NOT-USED/multiply.png


assets/img/NOT-USED/subtract.png → src/assets/img/NOT-USED/subtract.png


assets/img/NOT-USED/view.png → src/assets/img/NOT-USED/view.png


assets/img/character/balloon/airballoon_base.png → src/assets/img/character/balloon/airballoon_base.png


assets/img/character/balloon/airballoon_upper.png → src/assets/img/character/balloon/airballoon_upper.png


assets/img/character/kid/lost.png → src/assets/img/character/kid/lost.png


assets/img/character/kid/run.png → src/assets/img/character/kid/run.png


assets/img/character/kid/walk.png → src/assets/img/character/kid/walk.png


assets/img/character/tractor/tractor.png → src/assets/img/character/tractor/tractor.png


assets/img/flag/br.png → src/assets/img/flag/br.png


assets/img/flag/fr.png → src/assets/img/flag/fr.png


assets/img/flag/it.png → src/assets/img/flag/it.png


assets/img/flag/pe.png → src/assets/img/flag/pe.png


assets/img/flag/us.png → src/assets/img/flag/us.png


assets/img/info_box/c1-A-h.png → src/assets/img/info_box/c1-A-h.png


assets/img/info_box/c1-A.png → src/assets/img/info_box/c1-A.png


assets/img/info_box/c1-B-h.png → src/assets/img/info_box/c1-B-h.png


assets/img/info_box/c1-diff-1.png → src/assets/img/info_box/c1-diff-1.png


assets/img/info_box/c1-diff-5.png → src/assets/img/info_box/c1-diff-5.png


assets/img/info_box/c1-label.png → src/assets/img/info_box/c1-label.png


assets/img/info_box/map-c1s2.png → src/assets/img/info_box/map-c1s2.png


assets/img/info_box/map-s1.png → src/assets/img/info_box/map-s1.png


assets/img/info_box/operation_equals.png → src/assets/img/info_box/operation_equals.png


assets/img/info_box/operation_minus.png → src/assets/img/info_box/operation_minus.png


assets/img/info_box/operation_mixed.png → src/assets/img/info_box/operation_mixed.png


assets/img/info_box/operation_plus.png → src/assets/img/info_box/operation_plus.png


assets/img/info_box/s1-A-h.png → src/assets/img/info_box/s1-A-h.png


assets/img/info_box/s1-A.png → src/assets/img/info_box/s1-A.png


assets/img/info_box/s1-B-h.png → src/assets/img/info_box/s1-B-h.png


assets/img/info_box/s1-diff-1.png → src/assets/img/info_box/s1-diff-1.png


assets/img/info_box/s1-diff-3.png → src/assets/img/info_box/s1-diff-3.png


assets/img/info_box/s1-label.png → src/assets/img/info_box/s1-label.png


assets/img/info_box/s2-A-h.png → src/assets/img/info_box/s2-A-h.png


assets/img/info_box/s2-B-h.png → src/assets/img/info_box/s2-B-h.png


assets/img/info_box/s2-diff-1.png → src/assets/img/info_box/s2-diff-1.png


assets/img/info_box/s2-diff-5.png → src/assets/img/info_box/s2-diff-5.png


assets/img/info_box/s2-label.png → src/assets/img/info_box/s2-label.png


assets/img/info_box/s2.png → src/assets/img/info_box/s2.png


assets/img/interac_icon/close.png → src/assets/img/interac_icon/close.png


assets/img/interac_icon/down.png → src/assets/img/interac_icon/down.png


assets/img/interac_icon/error.png → src/assets/img/interac_icon/error.png


assets/img/interac_icon/info.png → src/assets/img/interac_icon/info.png


assets/img/interac_icon/ok.png → src/assets/img/interac_icon/ok.png


assets/img/interac_icon/pointer.png → src/assets/img/interac_icon/pointer.png


assets/img/interac_icon/selectionBox.png → src/assets/img/interac_icon/selectionBox.png


assets/img/levels/circleOne.png → src/assets/img/levels/circleOne.png


assets/img/levels/circleOne_1.png → src/assets/img/levels/circleOne_1.png


assets/img/levels/circleOne_2.png → src/assets/img/levels/circleOne_2.png


assets/img/levels/operation_equals.png → src/assets/img/levels/operation_equals.png


assets/img/levels/operation_minus.png → src/assets/img/levels/operation_minus.png


assets/img/levels/operation_mixed.png → src/assets/img/levels/operation_mixed.png


assets/img/levels/operation_plus.png → src/assets/img/levels/operation_plus.png


assets/img/levels/squareOne.png → src/assets/img/levels/squareOne.png


assets/img/levels/squareOne_1.png → src/assets/img/levels/squareOne_1.png


assets/img/levels/squareOne_2.png → src/assets/img/levels/squareOne_2.png


assets/img/levels/squareTwo.png → src/assets/img/levels/squareTwo.png


assets/img/levels/squareTwo_1.png → src/assets/img/levels/squareTwo_1.png


assets/img/levels/squareTwo_2.png → src/assets/img/levels/squareTwo_2.png


assets/img/navig_icon/audio.png → src/assets/img/navig_icon/audio.png


assets/img/navig_icon/back.png → src/assets/img/navig_icon/back.png


assets/img/navig_icon/help.png → src/assets/img/navig_icon/help.png


assets/img/navig_icon/home.png → src/assets/img/navig_icon/home.png


assets/img/navig_icon/language.png → src/assets/img/navig_icon/language.png


assets/img/navig_icon/menu.png → src/assets/img/navig_icon/menu.png


assets/img/scene/bg.jpg → src/assets/img/scene/bg.jpg


assets/img/scene/bg_map.png → src/assets/img/scene/bg_map.png


assets/img/scene/broken_sign.png → src/assets/img/scene/broken_sign.png


assets/img/scene/bush.png → src/assets/img/scene/bush.png


assets/img/scene/cloud.png → src/assets/img/scene/cloud.png


assets/img/scene/farm.png → src/assets/img/scene/farm.png


assets/img/scene/flag.png → src/assets/img/scene/flag.png


assets/img/scene/floor.png → src/assets/img/scene/floor.png


assets/img/scene/garage.png → src/assets/img/scene/garage.png


assets/img/scene/house.png → src/assets/img/scene/house.png


assets/img/scene/place.png → src/assets/img/scene/place.png


assets/img/scene/place_off.png → src/assets/img/scene/place_off.png


assets/img/scene/place_on.png → src/assets/img/scene/place_on.png


assets/img/scene/road.png → src/assets/img/scene/road.png


assets/img/scene/rock.png → src/assets/img/scene/rock.png


assets/img/scene/school.png → src/assets/img/scene/school.png


assets/img/scene/sign.png → src/assets/img/scene/sign.png


assets/img/scene/tree.png → src/assets/img/scene/tree.png


assets/img/scene/tree2.png → src/assets/img/scene/tree2.png


assets/img/scene/tree3.png → src/assets/img/scene/tree3.png


assets/img/scene/tree4.png → src/assets/img/scene/tree4.png


assets/lang/en_US → src/assets/lang/en_US


+ 0 - 0
assets/lang/es_PE


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels