@urso/core 0.2.3-dev → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/.babelrc +11 -11
  2. package/README.md +10 -10
  3. package/build/js/index.js +1 -1
  4. package/build/js/index.js.LICENSE.txt +41 -39
  5. package/package.json +52 -49
  6. package/src/js/app.js +76 -76
  7. package/src/js/components/_info.js +8 -8
  8. package/src/js/components/base/_info.js +3 -3
  9. package/src/js/components/base/controller.js +78 -78
  10. package/src/js/components/debug/_info.js +6 -6
  11. package/src/js/components/debug/controller.js +38 -38
  12. package/src/js/components/debug/coords.js +23 -23
  13. package/src/js/components/debug/fps.js +34 -34
  14. package/src/js/components/debug/template.js +33 -33
  15. package/src/js/components/deviceRotate/_info.js +3 -3
  16. package/src/js/components/deviceRotate/controller.js +86 -86
  17. package/src/js/components/fullscreen/_info.js +6 -6
  18. package/src/js/components/fullscreen/android.js +104 -104
  19. package/src/js/components/fullscreen/controller.js +64 -64
  20. package/src/js/components/fullscreen/desktop.js +49 -49
  21. package/src/js/components/fullscreen/ios.js +111 -111
  22. package/src/js/components/loader/_info.js +4 -4
  23. package/src/js/components/loader/controller.js +66 -66
  24. package/src/js/components/loader/template.js +70 -70
  25. package/src/js/components/soundInitialPopup/_info.js +3 -3
  26. package/src/js/components/soundInitialPopup/controller.js +42 -42
  27. package/src/js/components/soundInitialPopup/template.js +109 -109
  28. package/src/js/components/stateDriven/_info.js +3 -4
  29. package/src/js/components/stateDriven/controller.js +96 -96
  30. package/src/js/config/load.js +5 -5
  31. package/src/js/config/main.js +9 -9
  32. package/src/js/extra/_info.js +23 -22
  33. package/src/js/extra/browserEvents.js +32 -32
  34. package/src/js/index.js +8 -8
  35. package/src/js/lib/_info.js +13 -13
  36. package/src/js/lib/cache.js +98 -98
  37. package/src/js/lib/composition.js +89 -89
  38. package/src/js/lib/device.js +1276 -1276
  39. package/src/js/lib/helper.js +524 -513
  40. package/src/js/lib/loader.js +121 -121
  41. package/src/js/lib/localData.js +15 -15
  42. package/src/js/lib/logger.js +22 -22
  43. package/src/js/lib/math.js +20 -20
  44. package/src/js/lib/objectPool.js +54 -54
  45. package/src/js/lib/time.js +18 -18
  46. package/src/js/lib/tween.js +147 -147
  47. package/src/js/modules/_info.js +11 -11
  48. package/src/js/modules/assets/_info.js +7 -7
  49. package/src/js/modules/assets/baseModel.js +18 -18
  50. package/src/js/modules/assets/config.js +35 -35
  51. package/src/js/modules/assets/controller.js +37 -37
  52. package/src/js/modules/assets/models/_info.js +12 -12
  53. package/src/js/modules/assets/models/atlas.js +8 -8
  54. package/src/js/modules/assets/models/audiosprite.js +27 -27
  55. package/src/js/modules/assets/models/bitmapFont.js +8 -8
  56. package/src/js/modules/assets/models/container.js +16 -16
  57. package/src/js/modules/assets/models/dragonBones.js +26 -26
  58. package/src/js/modules/assets/models/font.js +8 -8
  59. package/src/js/modules/assets/models/image.js +14 -14
  60. package/src/js/modules/assets/models/json.js +8 -8
  61. package/src/js/modules/assets/models/sound.js +14 -14
  62. package/src/js/modules/assets/models/spine.js +8 -8
  63. package/src/js/modules/assets/service.js +330 -330
  64. package/src/js/modules/instances/_info.js +3 -3
  65. package/src/js/modules/instances/controller.js +218 -218
  66. package/src/js/modules/logic/_info.js +5 -5
  67. package/src/js/modules/logic/buttons.js +120 -120
  68. package/src/js/modules/logic/config/_info.js +3 -3
  69. package/src/js/modules/logic/config/buttons.js +63 -63
  70. package/src/js/modules/logic/config/sounds.js +23 -23
  71. package/src/js/modules/logic/controller.js +48 -48
  72. package/src/js/modules/logic/sounds.js +96 -96
  73. package/src/js/modules/objects/_info.js +11 -11
  74. package/src/js/modules/objects/baseModel.js +161 -161
  75. package/src/js/modules/objects/cache.js +99 -99
  76. package/src/js/modules/objects/controller.js +115 -115
  77. package/src/js/modules/objects/create.js +246 -231
  78. package/src/js/modules/objects/find.js +140 -140
  79. package/src/js/modules/objects/models/_info.js +25 -20
  80. package/src/js/modules/objects/models/atlasImage.js +50 -50
  81. package/src/js/modules/objects/models/bitmapText.js +23 -23
  82. package/src/js/modules/objects/models/button.js +184 -184
  83. package/src/js/modules/objects/models/buttonComposite.js +35 -35
  84. package/src/js/modules/objects/models/checkbox.js +95 -0
  85. package/src/js/modules/objects/models/collection.js +54 -54
  86. package/src/js/modules/objects/models/component.js +44 -44
  87. package/src/js/modules/objects/models/container.js +19 -19
  88. package/src/js/modules/objects/models/dragonBones.js +250 -250
  89. package/src/js/modules/objects/models/emitter.js +54 -54
  90. package/src/js/modules/objects/models/graphics.js +38 -38
  91. package/src/js/modules/objects/models/group.js +19 -19
  92. package/src/js/modules/objects/models/hitArea.js +104 -104
  93. package/src/js/modules/objects/models/image.js +34 -34
  94. package/src/js/modules/objects/models/imagesAnimation.js +113 -113
  95. package/src/js/modules/objects/models/mask.js +38 -38
  96. package/src/js/modules/objects/models/scrollbox.js +62 -0
  97. package/src/js/modules/objects/models/slider.js +199 -0
  98. package/src/js/modules/objects/models/spine.js +83 -83
  99. package/src/js/modules/objects/models/text.js +38 -38
  100. package/src/js/modules/objects/models/textInput.js +55 -0
  101. package/src/js/modules/objects/models/toggle.js +169 -0
  102. package/src/js/modules/objects/models/world.js +19 -19
  103. package/src/js/modules/objects/propertyAdapter.js +421 -416
  104. package/src/js/modules/objects/proxy.js +179 -179
  105. package/src/js/modules/objects/styles.js +116 -116
  106. package/src/js/modules/observer/_info.js +4 -4
  107. package/src/js/modules/observer/controller.js +99 -99
  108. package/src/js/modules/observer/events.js +32 -28
  109. package/src/js/modules/scenes/_info.js +8 -8
  110. package/src/js/modules/scenes/controller.js +34 -34
  111. package/src/js/modules/scenes/model.js +35 -35
  112. package/src/js/modules/scenes/pixiWrapper.js +194 -194
  113. package/src/js/modules/scenes/resolutions.js +161 -161
  114. package/src/js/modules/scenes/resolutionsConfig.js +73 -73
  115. package/src/js/modules/scenes/service.js +84 -84
  116. package/src/js/modules/soundManager/_info.js +3 -3
  117. package/src/js/modules/soundManager/controller.js +99 -99
  118. package/src/js/modules/soundManager/soundSprite.js +202 -202
  119. package/src/js/modules/statesManager/_info.js +12 -12
  120. package/src/js/modules/statesManager/action.js +55 -55
  121. package/src/js/modules/statesManager/actions/_info.js +3 -3
  122. package/src/js/modules/statesManager/all.js +23 -23
  123. package/src/js/modules/statesManager/configStates.js +71 -71
  124. package/src/js/modules/statesManager/controller.js +132 -132
  125. package/src/js/modules/statesManager/functionsStorage.js +82 -82
  126. package/src/js/modules/statesManager/helper.js +27 -27
  127. package/src/js/modules/statesManager/race.js +75 -75
  128. package/src/js/modules/statesManager/sequence.js +47 -47
  129. package/src/js/modules/template/_info.js +6 -6
  130. package/src/js/modules/template/controller.js +28 -28
  131. package/src/js/modules/template/model.js +11 -11
  132. package/src/js/modules/template/service.js +125 -125
  133. package/src/js/modules/template/types.js +46 -41
  134. package/src/js/modules/transport/_info.js +8 -8
  135. package/src/js/modules/transport/baseConnectionType.js +24 -24
  136. package/src/js/modules/transport/config.js +22 -22
  137. package/src/js/modules/transport/connectionTypes/_info.js +3 -3
  138. package/src/js/modules/transport/connectionTypes/websocket.js +74 -74
  139. package/src/js/modules/transport/connectionTypes/xhr.js +41 -41
  140. package/src/js/modules/transport/controller.js +48 -48
  141. package/src/js/modules/transport/decorator.js +16 -16
  142. package/src/js/modules/transport/service.js +138 -138
  143. package/src/js/templates/_info.js +4 -4
  144. package/src/js/templates/groups/_info.js +1 -1
  145. package/src/js/templates/scenes/_info.js +1 -1
  146. package/webpack.config.js +47 -47
  147. package/src/js/components/stateDriven/actionConfig.js +0 -7
@@ -1,513 +1,524 @@
1
- class LibHelper {
2
-
3
- constructor() {
4
-
5
- /**
6
- * angle radian factor
7
- * @type Number
8
- */
9
- this._arFactor = (Math.PI / 180);
10
- }
11
-
12
- /**
13
- * getting GET param(s) by name or all params list
14
- *
15
- * @param {string} [name] - get param name
16
- * @returns {Object}
17
- */
18
- parseGetParams(name) {
19
- let $_GET = {};
20
- const _GET = window.location.href.substring(1).split("?");
21
-
22
- if (_GET[1]) {
23
- const __GET = _GET[1].split("&");
24
-
25
- for (let i = 0; i < __GET.length; i++) {
26
- let getVar = __GET[i].split("=");
27
- $_GET[getVar[0]] = typeof getVar[1] === "undefined" ? "" : getVar[1];
28
- }
29
- }
30
-
31
- if (!name)
32
- return $_GET;
33
-
34
- return $_GET[name];
35
- }
36
-
37
- /**
38
- * get uniq elements from two arrays
39
- * @param {Array} array1
40
- * @param {Array} array2
41
- * @example arraysGetUniqElements([1,2,3], [2,3,4]) returns [1, 4]
42
- */
43
- arraysGetUniqElements(array1, array2) {
44
- const result = [];
45
- const tempObject = {};
46
- let key, element;
47
-
48
- const parseArray = function (arrayObject) {
49
- for (element of arrayObject) {
50
- if (!tempObject[element])
51
- tempObject[element] = { counter: 1, value: element };
52
- else
53
- tempObject[element].counter++;
54
- }
55
- };
56
-
57
- parseArray(array1);
58
- parseArray(array2);
59
-
60
- for (key in tempObject)
61
- if (tempObject[key].counter === 1)
62
- result.push(tempObject[key].value);
63
-
64
- return result;
65
- }
66
-
67
- /**
68
- * replase string pattern in the string
69
- * @param {String} needle
70
- * @param {String} replacement
71
- * @param {String} haystack
72
- * @returns {String}
73
- */
74
- stringReplace(needle, replacement, haystack) {
75
- return haystack.split(needle).join(replacement);
76
- }
77
-
78
- /**
79
- * capitalise first letter in the string
80
- * @param {String} str
81
- * @returns {String}
82
- */
83
- capitaliseFirstLetter(str) {
84
- return str.charAt(0).toUpperCase() + str.slice(1);
85
- }
86
-
87
- /**
88
- * returns array without last element
89
- * @param {Array} array
90
- * @returns {Array}
91
- */
92
- initial(array) {
93
- array.pop();
94
- return array;
95
- }
96
-
97
- /**
98
- * lead degree zero
99
- * @param {Number} num
100
- * @param {Number} count
101
- * @returns {String}
102
- */
103
- ldgZero(num, count) {
104
- let numZeropad = num + '';
105
-
106
- while (numZeropad.length < count) {
107
- numZeropad = "0" + numZeropad;
108
- }
109
-
110
- return numZeropad;
111
- }
112
-
113
- /**
114
- * merge two arrays into new array
115
- * @param {Array} a
116
- * @param {Array} b
117
- */
118
- mergeArrays(a, b) {
119
- let c = a.concat(b.filter(function (item) {
120
- return a.indexOf(item) < 0;
121
- }));
122
-
123
- return c;
124
- }
125
-
126
- /**
127
- * recursive set value to object by key
128
- * @param {String} key
129
- * @param {Mixed} value
130
- * @param {Object} object
131
- * @returns {Boolean}
132
- */
133
- recursiveSet(key, value, object) {
134
- key = (typeof key === 'string') ? key.split(".") : key;
135
-
136
- let firstKey = key.shift();
137
-
138
- if (key.length > 0) {
139
- if (!object[firstKey])
140
- object[firstKey] = {};
141
-
142
- this.recursiveSet(key, value, object[firstKey]);
143
- } else
144
- object[firstKey] = value;
145
-
146
- return true;
147
- }
148
-
149
- /**
150
- * @param {Array} matrix
151
- * @returns {Array}
152
- */
153
- rowsToCols(matrix) {
154
- return Object.keys(matrix[0])
155
- .map(colNumber => matrix.map(rowNumber => rowNumber[colNumber]));
156
- }
157
-
158
- /**
159
- * recursive get value from object by key
160
- * @param {String} key
161
- * @param {Object} object
162
- * @returns {Mixed}
163
- */
164
- recursiveGet(key, object, defaultResult) {
165
- if (object === undefined)
166
- return defaultResult;
167
-
168
- key = (typeof key === 'string') ? key.split(".") : key;
169
-
170
- for (let k of key) {
171
- if (typeof object[k] === 'undefined')
172
- return defaultResult;
173
-
174
- object = object[k];
175
- }
176
-
177
- return object;
178
- }
179
-
180
- /**
181
- * recursive delete value from object by key
182
- * @param {String} key
183
- * @param {Object} object
184
- * @returns {Boolean}
185
- */
186
- recursiveDelete(key, obj) {
187
- key = (typeof key === 'string') ? key.split(".") : key;
188
-
189
- for (let k = 0; k < key.length; k++) {
190
- let ok = key[k];
191
-
192
- if (typeof obj[ok] === 'undefined')
193
- return false;
194
-
195
- if (k === (key.length - 1))
196
- delete (obj[ok]);
197
- else
198
- obj = obj[ok];
199
- }
200
-
201
- return true;
202
- }
203
-
204
- /**
205
- * recursive merge two objects into one
206
- * @param {Object} obj1
207
- * @param {Object} obj2
208
- * @param {Boolean} mergeInFirstFlag
209
- * @returns {Object}
210
- */
211
- mergeObjectsRecursive(obj1, obj2, mergeInFirstFlag) {
212
- let newObj = (mergeInFirstFlag) ? obj1 : this.objectClone(obj1);
213
-
214
- for (let k in obj2) {
215
- if (typeof obj2[k] === 'object' && typeof obj1[k] === 'object')
216
- newObj[k] = this.mergeObjectsRecursive(obj1[k], obj2[k], mergeInFirstFlag);
217
- else
218
- newObj[k] = obj2[k];
219
- }
220
-
221
- return newObj;
222
- }
223
-
224
- /**
225
- * clone object
226
- * @param {Object} obj
227
- * @param {Number} recursiveCalls
228
- * @returns {Object}
229
- */
230
- objectClone(obj, recursiveCalls) {
231
- if (!obj || "object" !== typeof obj)
232
- return obj;
233
-
234
- if (typeof recursiveCalls === 'undefined')
235
- recursiveCalls = 999;
236
-
237
- let clone = "function" === typeof obj.pop ? [] : {}; //object o array
238
- let prop, propValue;
239
-
240
- if (obj.hasOwnProperty)
241
- for (prop in obj) {
242
- if (obj.hasOwnProperty(prop)) {
243
- propValue = obj[prop];
244
-
245
- if (prop === "imageSrc")
246
- clone[prop] = propValue;
247
- else if (propValue && "object" === typeof propValue)
248
- clone[prop] = (recursiveCalls) ? this.objectClone(propValue, recursiveCalls - 1) : '[object Object]';
249
- else
250
- clone[prop] = propValue;
251
- }
252
- }
253
-
254
- return clone;
255
- }
256
-
257
- /**
258
- * get object size (keys length)
259
- * @param {Object} obj
260
- * @returns {Number}
261
- */
262
- getObjectSize(obj) {
263
- return Object.keys(obj).length;
264
- }
265
-
266
- /**
267
- * object apply
268
- * @param {Object} fromObj
269
- * @param {Object} toObj
270
- * @returns {Object}
271
- */
272
- objectApply(fromObj, toObj, recursiveCalls = 999) {
273
- if (!recursiveCalls)
274
- return fromObj;
275
-
276
- for (let k in toObj) {
277
- let paramTo = toObj[k];
278
-
279
- if (!fromObj[k]) {
280
- fromObj[k] = paramTo;
281
- } else if (typeof paramTo === "array" || typeof paramTo === "object") {
282
- fromObj[k] = this.objectApply(fromObj[k], toObj[k], recursiveCalls - 1);
283
- } else {
284
- if (toObj[k] !== fromObj[k]) {
285
- fromObj[k] = paramTo;
286
- }
287
- }
288
- }
289
-
290
- return fromObj;
291
- }
292
-
293
- /**
294
- * check deep objects equal
295
- * @param {Object} obj1
296
- * @param {Object} obj2
297
- * @returns {Boolean}
298
- */
299
- checkDeepEqual(obj1, obj2) {
300
- return JSON.stringify(obj1) === JSON.stringify(obj2);
301
- }
302
-
303
- /**
304
- * check objects equal
305
- * @param {Object} obj1
306
- * @param {Object} obj2
307
- * @returns {Boolean}
308
- */
309
- checkEqual(obj1, obj2) {
310
- const objSort = (o) => {
311
- const sortedObj = {};
312
- const keys = Object.keys(o);
313
- keys.sort();
314
-
315
- for (let index in keys) {
316
- if (keys.hasOwnProperty(index)) {
317
- let key = keys[index];
318
- let value = o[key];
319
-
320
- if (typeof o[key] === 'object')
321
- value = objSort(value);
322
-
323
- sortedObj[key] = value;
324
- }
325
- }
326
-
327
- return sortedObj;
328
- };
329
-
330
- const o1s = objSort(obj1);
331
- const o2s = objSort(obj2);
332
-
333
- return this.checkDeepEqual(o1s, o2s);
334
- }
335
-
336
- /**
337
- * check Arrays Partial Entry
338
- * @param {Object} main
339
- * @param {Object} partial
340
- * @returns {Boolean}
341
- */
342
- checkArraysPartialEntry(main, partial) {
343
- if (!main || !partial)
344
- return false;
345
-
346
- main = main.sort();
347
- partial = partial.sort();
348
-
349
- let kPartial = partial.length - 1;
350
-
351
- for (let i = main.length - 1; i >= 0; i--) {
352
- if (JSON.stringify(main[i]) === JSON.stringify(partial[kPartial]))
353
- kPartial--;
354
-
355
- if (kPartial === -1)
356
- return true;
357
- }
358
-
359
- return false;
360
- }
361
-
362
- /**
363
- * check is device mobile or tablet
364
- * @returns {Boolean}
365
- */
366
- mobileAndTabletCheck() {
367
- let check = false;
368
- (function (a) {
369
- if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)))
370
- check = true;
371
- })(navigator.userAgent || navigator.vendor || window.opera);
372
-
373
- return check;
374
- }
375
-
376
- /**
377
- * make objects property reactive
378
- * @param {Object} targetObject
379
- * @param {String} key
380
- * @param {Function} callback
381
- * @returns
382
- */
383
- reactive(targetObject, key, callback) {
384
- let descriptor = Object.getOwnPropertyDescriptor(targetObject, key);
385
- let targetObjectTemp = targetObject;
386
-
387
- while (!descriptor && targetObjectTemp.__proto__) {
388
- targetObjectTemp = targetObjectTemp.__proto__;
389
- let descriptorTemp = Object.getOwnPropertyDescriptor(targetObjectTemp, key);
390
-
391
- if (descriptorTemp && (descriptorTemp.value || descriptorTemp.set || descriptorTemp.get)) {
392
- descriptor = descriptorTemp;
393
- }
394
- }
395
-
396
- if (!descriptor) // bad descriptors and its IOS mobile
397
- return false;
398
-
399
- if (typeof descriptor.value !== 'undefined') {
400
- let value = descriptor.value;
401
- descriptor.get = function () { return value; };
402
- descriptor.set = function (v) { value = v; };
403
-
404
- delete descriptor.value;
405
- delete descriptor.writable;
406
- }
407
-
408
- let setter = descriptor.set;
409
-
410
- descriptor.set = function (v) {
411
- if (setter)
412
- setter.call(targetObject, v);
413
-
414
- callback.call(targetObject, v);
415
- };
416
-
417
- Object.defineProperty(targetObject, key, descriptor);
418
-
419
- return true;
420
- }
421
-
422
-
423
- /**
424
- * calc length between two points
425
- *
426
- * @param {Object} point1
427
- * @param {Object} point1
428
- * @return {Number}
429
- */
430
- getLengthBy2Points(point1, point2) {
431
- return Math.sqrt((point2.x - point1.x) * (point2.x - point1.x) +
432
- (point2.y - point1.y) * (point2.y - point1.y));
433
- }
434
-
435
- /**
436
- * calc angle between three points (in radians)
437
- *
438
- * @param {Object} point1
439
- * @param {Object} point2
440
- * @param {Object} point3
441
- * @return {Number}
442
- */
443
- getAngleBy3Points(point1, point2, point3) {
444
- let angle = 0;
445
- const c = this.getLengthBy2Points(point1, point3);
446
- const a = this.getLengthBy2Points(point1, point2);
447
- const b = this.getLengthBy2Points(point2, point3);
448
-
449
- if (a !== 0 && b !== 0) {
450
- const cornerRcos = (a * a + b * b - c * c) / (2 * a * b);
451
- angle = Math.acos(cornerRcos);
452
- }
453
-
454
- return angle;
455
- }
456
-
457
-
458
- /**
459
- * get angle in radians from degrees
460
- *
461
- * @param {Number} angle
462
- * @return {Number}
463
- */
464
- getRadian(angle) {
465
- return (angle * this._arFactor);
466
- }
467
-
468
- /**
469
- * get angle in degrees from radians
470
- *
471
- * @param {Number} radian
472
- * @return {Number}
473
- */
474
- getAngle(radian) {
475
- return (radian / this._arFactor);
476
- }
477
-
478
- /**
479
- * arguments {oblect} (ClassInstance, functionName, param1, param2, ...)
480
- * needs {Object} obj._logicBlocks;
481
- * creates {Object} obj._logicBlocksInstances;
482
- * @returns {Array} execution results
483
- */
484
- logicBlocksDo() {
485
- const params = Array.prototype.slice.call(arguments);
486
- const entity = params.shift();
487
- const funcName = params.shift();
488
-
489
- //if no instances we will create them
490
- if (!entity._logicBlocksInstances) {
491
- entity._logicBlocksInstances = {};
492
-
493
- for (let k in entity._logicBlocks) {
494
- const name = entity._logicBlocks[k];
495
- const nameCap = this.capitaliseFirstLetter(name);
496
- entity._logicBlocksInstances[name] = entity.getInstance(nameCap);
497
- }
498
- }
499
-
500
- let results = [];
501
- //game
502
- for (let name in entity._logicBlocksInstances) {
503
- if (entity._logicBlocksInstances[name][funcName]) {
504
- const res = entity._logicBlocksInstances[name][funcName].apply(this, params);
505
- results.push(res);
506
- }
507
- }
508
-
509
- return results;
510
- }
511
- }
512
-
513
- module.exports = LibHelper;
1
+ class LibHelper {
2
+
3
+ constructor() {
4
+
5
+ /**
6
+ * angle radian factor
7
+ * @type Number
8
+ */
9
+ this._arFactor = (Math.PI / 180);
10
+ }
11
+
12
+ /**
13
+ * getting GET param(s) by name or all params list
14
+ *
15
+ * @param {string} [name] - get param name
16
+ * @returns {Object}
17
+ */
18
+ parseGetParams(name) {
19
+ let $_GET = {};
20
+ const _GET = window.location.href.substring(1).split("?");
21
+
22
+ if (_GET[1]) {
23
+ const __GET = _GET[1].split("&");
24
+
25
+ for (let i = 0; i < __GET.length; i++) {
26
+ let getVar = __GET[i].split("=");
27
+ $_GET[getVar[0]] = typeof getVar[1] === "undefined" ? "" : getVar[1];
28
+ }
29
+ }
30
+
31
+ if (!name)
32
+ return $_GET;
33
+
34
+ return $_GET[name];
35
+ }
36
+
37
+ /**
38
+ * get uniq elements from two arrays
39
+ * @param {Array} array1
40
+ * @param {Array} array2
41
+ * @example arraysGetUniqElements([1,2,3], [2,3,4]) returns [1, 4]
42
+ */
43
+ arraysGetUniqElements(array1, array2) {
44
+ const result = [];
45
+ const tempObject = {};
46
+ let key, element;
47
+
48
+ const parseArray = function (arrayObject) {
49
+ for (element of arrayObject) {
50
+ if (!tempObject[element])
51
+ tempObject[element] = { counter: 1, value: element };
52
+ else
53
+ tempObject[element].counter++;
54
+ }
55
+ };
56
+
57
+ parseArray(array1);
58
+ parseArray(array2);
59
+
60
+ for (key in tempObject)
61
+ if (tempObject[key].counter === 1)
62
+ result.push(tempObject[key].value);
63
+
64
+ return result;
65
+ }
66
+
67
+ /**
68
+ * replase string pattern in the string
69
+ * @param {String} needle
70
+ * @param {String} replacement
71
+ * @param {String} haystack
72
+ * @returns {String}
73
+ */
74
+ stringReplace(needle, replacement, haystack) {
75
+ return haystack.split(needle).join(replacement);
76
+ }
77
+
78
+ /**
79
+ * capitalise first letter in the string
80
+ * @param {String} str
81
+ * @returns {String}
82
+ */
83
+ capitaliseFirstLetter(str) {
84
+ return str.charAt(0).toUpperCase() + str.slice(1);
85
+ }
86
+
87
+ /**
88
+ * returns array without last element
89
+ * @param {Array} array
90
+ * @returns {Array}
91
+ */
92
+ initial(array) {
93
+ array.pop();
94
+ return array;
95
+ }
96
+
97
+ /**
98
+ * lead degree zero
99
+ * @param {Number} num
100
+ * @param {Number} count
101
+ * @returns {String}
102
+ */
103
+ ldgZero(num, count) {
104
+ let numZeropad = num + '';
105
+
106
+ while (numZeropad.length < count) {
107
+ numZeropad = "0" + numZeropad;
108
+ }
109
+
110
+ return numZeropad;
111
+ }
112
+
113
+ /**
114
+ * merge two arrays into new array
115
+ * @param {Array} a
116
+ * @param {Array} b
117
+ */
118
+ mergeArrays(a, b) {
119
+ let c = a.concat(b.filter(function (item) {
120
+ return a.indexOf(item) < 0;
121
+ }));
122
+
123
+ return c;
124
+ }
125
+
126
+ /**
127
+ * recursive set value to object by key
128
+ * @param {String} key
129
+ * @param {Mixed} value
130
+ * @param {Object} object
131
+ * @returns {Boolean}
132
+ */
133
+ recursiveSet(key, value, object) {
134
+ key = (typeof key === 'string') ? key.split(".") : key;
135
+
136
+ let firstKey = key.shift();
137
+
138
+ if (key.length > 0) {
139
+ if (!object[firstKey])
140
+ object[firstKey] = {};
141
+
142
+ this.recursiveSet(key, value, object[firstKey]);
143
+ } else
144
+ object[firstKey] = value;
145
+
146
+ return true;
147
+ }
148
+
149
+ /**
150
+ * @param {Array} matrix
151
+ * @returns {Array}
152
+ */
153
+ rowsToCols(matrix) {
154
+ return Object.keys(matrix[0])
155
+ .map(colNumber => matrix.map(rowNumber => rowNumber[colNumber]));
156
+ }
157
+
158
+ /**
159
+ * recursive get value from object by key
160
+ * @param {String} key
161
+ * @param {Object} object
162
+ * @returns {Mixed}
163
+ */
164
+ recursiveGet(key, object, defaultResult) {
165
+ if (object === undefined)
166
+ return defaultResult;
167
+
168
+ key = (typeof key === 'string') ? key.split(".") : key;
169
+
170
+ for (let k of key) {
171
+ if (typeof object[k] === 'undefined')
172
+ return defaultResult;
173
+
174
+ object = object[k];
175
+ }
176
+
177
+ return object;
178
+ }
179
+
180
+ /**
181
+ * recursive delete value from object by key
182
+ * @param {String} key
183
+ * @param {Object} object
184
+ * @returns {Boolean}
185
+ */
186
+ recursiveDelete(key, obj) {
187
+ key = (typeof key === 'string') ? key.split(".") : key;
188
+
189
+ for (let k = 0; k < key.length; k++) {
190
+ let ok = key[k];
191
+
192
+ if (typeof obj[ok] === 'undefined')
193
+ return false;
194
+
195
+ if (k === (key.length - 1))
196
+ delete (obj[ok]);
197
+ else
198
+ obj = obj[ok];
199
+ }
200
+
201
+ return true;
202
+ }
203
+
204
+ /**
205
+ * tranpose matrix (rows to cols)
206
+ * @param {Array} matrix
207
+ * @returns {Array}
208
+ */
209
+ transpose(matrix) {
210
+ return Object.keys(matrix[0])
211
+ .map(colNumber => matrix
212
+ .map(rowNumber => rowNumber[colNumber]));
213
+ }
214
+
215
+ /**
216
+ * recursive merge two objects into one
217
+ * @param {Object} obj1
218
+ * @param {Object} obj2
219
+ * @param {Boolean} mergeInFirstFlag
220
+ * @returns {Object}
221
+ */
222
+ mergeObjectsRecursive(obj1, obj2, mergeInFirstFlag) {
223
+ let newObj = (mergeInFirstFlag) ? obj1 : this.objectClone(obj1);
224
+
225
+ for (let k in obj2) {
226
+ if (typeof obj2[k] === 'object' && typeof obj1[k] === 'object')
227
+ newObj[k] = this.mergeObjectsRecursive(obj1[k], obj2[k], mergeInFirstFlag);
228
+ else
229
+ newObj[k] = obj2[k];
230
+ }
231
+
232
+ return newObj;
233
+ }
234
+
235
+ /**
236
+ * clone object
237
+ * @param {Object} obj
238
+ * @param {Number} recursiveCalls
239
+ * @returns {Object}
240
+ */
241
+ objectClone(obj, recursiveCalls) {
242
+ if (!obj || "object" !== typeof obj)
243
+ return obj;
244
+
245
+ if (typeof recursiveCalls === 'undefined')
246
+ recursiveCalls = 999;
247
+
248
+ let clone = "function" === typeof obj.pop ? [] : {}; //object o array
249
+ let prop, propValue;
250
+
251
+ if (obj.hasOwnProperty)
252
+ for (prop in obj) {
253
+ if (obj.hasOwnProperty(prop)) {
254
+ propValue = obj[prop];
255
+
256
+ if (prop === "imageSrc")
257
+ clone[prop] = propValue;
258
+ else if (propValue && "object" === typeof propValue)
259
+ clone[prop] = (recursiveCalls) ? this.objectClone(propValue, recursiveCalls - 1) : '[object Object]';
260
+ else
261
+ clone[prop] = propValue;
262
+ }
263
+ }
264
+
265
+ return clone;
266
+ }
267
+
268
+ /**
269
+ * get object size (keys length)
270
+ * @param {Object} obj
271
+ * @returns {Number}
272
+ */
273
+ getObjectSize(obj) {
274
+ return Object.keys(obj).length;
275
+ }
276
+
277
+ /**
278
+ * object apply
279
+ * @param {Object} fromObj
280
+ * @param {Object} toObj
281
+ * @returns {Object}
282
+ */
283
+ objectApply(fromObj, toObj, recursiveCalls = 999) {
284
+ if (!recursiveCalls)
285
+ return fromObj;
286
+
287
+ for (let k in toObj) {
288
+ let paramTo = toObj[k];
289
+
290
+ if (!fromObj[k]) {
291
+ fromObj[k] = paramTo;
292
+ } else if (typeof paramTo === "array" || typeof paramTo === "object") {
293
+ fromObj[k] = this.objectApply(fromObj[k], toObj[k], recursiveCalls - 1);
294
+ } else {
295
+ if (toObj[k] !== fromObj[k]) {
296
+ fromObj[k] = paramTo;
297
+ }
298
+ }
299
+ }
300
+
301
+ return fromObj;
302
+ }
303
+
304
+ /**
305
+ * check deep objects equal
306
+ * @param {Object} obj1
307
+ * @param {Object} obj2
308
+ * @returns {Boolean}
309
+ */
310
+ checkDeepEqual(obj1, obj2) {
311
+ return JSON.stringify(obj1) === JSON.stringify(obj2);
312
+ }
313
+
314
+ /**
315
+ * check objects equal
316
+ * @param {Object} obj1
317
+ * @param {Object} obj2
318
+ * @returns {Boolean}
319
+ */
320
+ checkEqual(obj1, obj2) {
321
+ const objSort = (o) => {
322
+ const sortedObj = {};
323
+ const keys = Object.keys(o);
324
+ keys.sort();
325
+
326
+ for (let index in keys) {
327
+ if (keys.hasOwnProperty(index)) {
328
+ let key = keys[index];
329
+ let value = o[key];
330
+
331
+ if (typeof o[key] === 'object')
332
+ value = objSort(value);
333
+
334
+ sortedObj[key] = value;
335
+ }
336
+ }
337
+
338
+ return sortedObj;
339
+ };
340
+
341
+ const o1s = objSort(obj1);
342
+ const o2s = objSort(obj2);
343
+
344
+ return this.checkDeepEqual(o1s, o2s);
345
+ }
346
+
347
+ /**
348
+ * check Arrays Partial Entry
349
+ * @param {Object} main
350
+ * @param {Object} partial
351
+ * @returns {Boolean}
352
+ */
353
+ checkArraysPartialEntry(main, partial) {
354
+ if (!main || !partial)
355
+ return false;
356
+
357
+ main = main.sort();
358
+ partial = partial.sort();
359
+
360
+ let kPartial = partial.length - 1;
361
+
362
+ for (let i = main.length - 1; i >= 0; i--) {
363
+ if (JSON.stringify(main[i]) === JSON.stringify(partial[kPartial]))
364
+ kPartial--;
365
+
366
+ if (kPartial === -1)
367
+ return true;
368
+ }
369
+
370
+ return false;
371
+ }
372
+
373
+ /**
374
+ * check is device mobile or tablet
375
+ * @returns {Boolean}
376
+ */
377
+ mobileAndTabletCheck() {
378
+ let check = false;
379
+ (function (a) {
380
+ if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)))
381
+ check = true;
382
+ })(navigator.userAgent || navigator.vendor || window.opera);
383
+
384
+ return check;
385
+ }
386
+
387
+ /**
388
+ * make objects property reactive
389
+ * @param {Object} targetObject
390
+ * @param {String} key
391
+ * @param {Function} callback
392
+ * @returns
393
+ */
394
+ reactive(targetObject, key, callback) {
395
+ let descriptor = Object.getOwnPropertyDescriptor(targetObject, key);
396
+ let targetObjectTemp = targetObject;
397
+
398
+ while (!descriptor && targetObjectTemp.__proto__) {
399
+ targetObjectTemp = targetObjectTemp.__proto__;
400
+ let descriptorTemp = Object.getOwnPropertyDescriptor(targetObjectTemp, key);
401
+
402
+ if (descriptorTemp && (descriptorTemp.value || descriptorTemp.set || descriptorTemp.get)) {
403
+ descriptor = descriptorTemp;
404
+ }
405
+ }
406
+
407
+ if (!descriptor) // bad descriptors and its IOS mobile
408
+ return false;
409
+
410
+ if (typeof descriptor.value !== 'undefined') {
411
+ let value = descriptor.value;
412
+ descriptor.get = function () { return value; };
413
+ descriptor.set = function (v) { value = v; };
414
+
415
+ delete descriptor.value;
416
+ delete descriptor.writable;
417
+ }
418
+
419
+ let setter = descriptor.set;
420
+
421
+ descriptor.set = function (v) {
422
+ if (setter)
423
+ setter.call(targetObject, v);
424
+
425
+ callback.call(targetObject, v);
426
+ };
427
+
428
+ Object.defineProperty(targetObject, key, descriptor);
429
+
430
+ return true;
431
+ }
432
+
433
+
434
+ /**
435
+ * calc length between two points
436
+ *
437
+ * @param {Object} point1
438
+ * @param {Object} point1
439
+ * @return {Number}
440
+ */
441
+ getLengthBy2Points(point1, point2) {
442
+ return Math.sqrt((point2.x - point1.x) * (point2.x - point1.x) +
443
+ (point2.y - point1.y) * (point2.y - point1.y));
444
+ }
445
+
446
+ /**
447
+ * calc angle between three points (in radians)
448
+ *
449
+ * @param {Object} point1
450
+ * @param {Object} point2
451
+ * @param {Object} point3
452
+ * @return {Number}
453
+ */
454
+ getAngleBy3Points(point1, point2, point3) {
455
+ let angle = 0;
456
+ const c = this.getLengthBy2Points(point1, point3);
457
+ const a = this.getLengthBy2Points(point1, point2);
458
+ const b = this.getLengthBy2Points(point2, point3);
459
+
460
+ if (a !== 0 && b !== 0) {
461
+ const cornerRcos = (a * a + b * b - c * c) / (2 * a * b);
462
+ angle = Math.acos(cornerRcos);
463
+ }
464
+
465
+ return angle;
466
+ }
467
+
468
+
469
+ /**
470
+ * get angle in radians from degrees
471
+ *
472
+ * @param {Number} angle
473
+ * @return {Number}
474
+ */
475
+ getRadian(angle) {
476
+ return (angle * this._arFactor);
477
+ }
478
+
479
+ /**
480
+ * get angle in degrees from radians
481
+ *
482
+ * @param {Number} radian
483
+ * @return {Number}
484
+ */
485
+ getAngle(radian) {
486
+ return (radian / this._arFactor);
487
+ }
488
+
489
+ /**
490
+ * arguments {oblect} (ClassInstance, functionName, param1, param2, ...)
491
+ * needs {Object} obj._logicBlocks;
492
+ * creates {Object} obj._logicBlocksInstances;
493
+ * @returns {Array} execution results
494
+ */
495
+ logicBlocksDo() {
496
+ const params = Array.prototype.slice.call(arguments);
497
+ const entity = params.shift();
498
+ const funcName = params.shift();
499
+
500
+ //if no instances we will create them
501
+ if (!entity._logicBlocksInstances) {
502
+ entity._logicBlocksInstances = {};
503
+
504
+ for (let k in entity._logicBlocks) {
505
+ const name = entity._logicBlocks[k];
506
+ const nameCap = this.capitaliseFirstLetter(name);
507
+ entity._logicBlocksInstances[name] = entity.getInstance(nameCap);
508
+ }
509
+ }
510
+
511
+ let results = [];
512
+ //game
513
+ for (let name in entity._logicBlocksInstances) {
514
+ if (entity._logicBlocksInstances[name][funcName]) {
515
+ const res = entity._logicBlocksInstances[name][funcName].apply(this, params);
516
+ results.push(res);
517
+ }
518
+ }
519
+
520
+ return results;
521
+ }
522
+ }
523
+
524
+ module.exports = LibHelper;