@urso/core 0.1.95 → 0.2.0-dev

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 (144) 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 +33 -33
  5. package/package.json +49 -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 +4 -3
  29. package/src/js/components/stateDriven/actionConfig.js +7 -0
  30. package/src/js/components/stateDriven/controller.js +61 -52
  31. package/src/js/config/load.js +5 -5
  32. package/src/js/config/main.js +9 -9
  33. package/src/js/extra/_info.js +22 -22
  34. package/src/js/extra/browserEvents.js +32 -32
  35. package/src/js/index.js +8 -8
  36. package/src/js/lib/_info.js +13 -13
  37. package/src/js/lib/cache.js +98 -98
  38. package/src/js/lib/composition.js +89 -89
  39. package/src/js/lib/device.js +1276 -1276
  40. package/src/js/lib/helper.js +513 -513
  41. package/src/js/lib/loader.js +121 -121
  42. package/src/js/lib/localData.js +15 -15
  43. package/src/js/lib/logger.js +22 -22
  44. package/src/js/lib/math.js +20 -20
  45. package/src/js/lib/objectPool.js +54 -54
  46. package/src/js/lib/time.js +18 -18
  47. package/src/js/lib/tween.js +147 -147
  48. package/src/js/modules/_info.js +11 -11
  49. package/src/js/modules/assets/_info.js +7 -7
  50. package/src/js/modules/assets/baseModel.js +18 -18
  51. package/src/js/modules/assets/config.js +35 -35
  52. package/src/js/modules/assets/controller.js +37 -37
  53. package/src/js/modules/assets/models/_info.js +12 -12
  54. package/src/js/modules/assets/models/atlas.js +8 -8
  55. package/src/js/modules/assets/models/audiosprite.js +27 -27
  56. package/src/js/modules/assets/models/bitmapFont.js +8 -8
  57. package/src/js/modules/assets/models/container.js +16 -16
  58. package/src/js/modules/assets/models/dragonBones.js +26 -26
  59. package/src/js/modules/assets/models/font.js +8 -8
  60. package/src/js/modules/assets/models/image.js +14 -14
  61. package/src/js/modules/assets/models/json.js +8 -8
  62. package/src/js/modules/assets/models/sound.js +14 -14
  63. package/src/js/modules/assets/models/spine.js +8 -8
  64. package/src/js/modules/assets/service.js +330 -330
  65. package/src/js/modules/instances/_info.js +3 -3
  66. package/src/js/modules/instances/controller.js +218 -218
  67. package/src/js/modules/logic/_info.js +5 -5
  68. package/src/js/modules/logic/buttons.js +120 -120
  69. package/src/js/modules/logic/config/_info.js +3 -3
  70. package/src/js/modules/logic/config/buttons.js +63 -63
  71. package/src/js/modules/logic/config/sounds.js +23 -23
  72. package/src/js/modules/logic/controller.js +48 -48
  73. package/src/js/modules/logic/sounds.js +96 -96
  74. package/src/js/modules/objects/_info.js +11 -11
  75. package/src/js/modules/objects/baseModel.js +161 -161
  76. package/src/js/modules/objects/cache.js +99 -99
  77. package/src/js/modules/objects/controller.js +115 -115
  78. package/src/js/modules/objects/create.js +231 -231
  79. package/src/js/modules/objects/find.js +140 -140
  80. package/src/js/modules/objects/models/_info.js +20 -20
  81. package/src/js/modules/objects/models/atlasImage.js +50 -50
  82. package/src/js/modules/objects/models/bitmapText.js +23 -23
  83. package/src/js/modules/objects/models/button.js +184 -184
  84. package/src/js/modules/objects/models/buttonComposite.js +35 -35
  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/spine.js +83 -83
  97. package/src/js/modules/objects/models/text.js +38 -38
  98. package/src/js/modules/objects/models/world.js +19 -19
  99. package/src/js/modules/objects/propertyAdapter.js +416 -416
  100. package/src/js/modules/objects/proxy.js +179 -179
  101. package/src/js/modules/objects/styles.js +116 -116
  102. package/src/js/modules/observer/_info.js +4 -4
  103. package/src/js/modules/observer/controller.js +99 -99
  104. package/src/js/modules/observer/events.js +28 -28
  105. package/src/js/modules/scenes/_info.js +8 -8
  106. package/src/js/modules/scenes/controller.js +34 -34
  107. package/src/js/modules/scenes/model.js +35 -35
  108. package/src/js/modules/scenes/pixiWrapper.js +194 -194
  109. package/src/js/modules/scenes/resolutions.js +161 -161
  110. package/src/js/modules/scenes/resolutionsConfig.js +73 -73
  111. package/src/js/modules/scenes/service.js +84 -84
  112. package/src/js/modules/soundManager/_info.js +3 -3
  113. package/src/js/modules/soundManager/controller.js +99 -99
  114. package/src/js/modules/soundManager/soundSprite.js +202 -202
  115. package/src/js/modules/statesManager/_info.js +12 -12
  116. package/src/js/modules/statesManager/action.js +55 -113
  117. package/src/js/modules/statesManager/actions/_info.js +3 -3
  118. package/src/js/modules/statesManager/all.js +23 -23
  119. package/src/js/modules/statesManager/configStates.js +71 -86
  120. package/src/js/modules/statesManager/controller.js +132 -91
  121. package/src/js/modules/statesManager/functionsStorage.js +83 -0
  122. package/src/js/modules/statesManager/helper.js +27 -37
  123. package/src/js/modules/statesManager/race.js +75 -80
  124. package/src/js/modules/statesManager/sequence.js +47 -47
  125. package/src/js/modules/template/_info.js +6 -6
  126. package/src/js/modules/template/controller.js +28 -28
  127. package/src/js/modules/template/model.js +11 -11
  128. package/src/js/modules/template/service.js +125 -125
  129. package/src/js/modules/template/types.js +41 -41
  130. package/src/js/modules/transport/_info.js +8 -8
  131. package/src/js/modules/transport/baseConnectionType.js +24 -24
  132. package/src/js/modules/transport/config.js +22 -22
  133. package/src/js/modules/transport/connectionTypes/_info.js +3 -3
  134. package/src/js/modules/transport/connectionTypes/websocket.js +74 -74
  135. package/src/js/modules/transport/connectionTypes/xhr.js +41 -41
  136. package/src/js/modules/transport/controller.js +48 -48
  137. package/src/js/modules/transport/decorator.js +16 -16
  138. package/src/js/modules/transport/service.js +138 -138
  139. package/src/js/templates/_info.js +4 -4
  140. package/src/js/templates/groups/_info.js +1 -1
  141. package/src/js/templates/scenes/_info.js +1 -1
  142. package/webpack.config.js +47 -47
  143. package/src/js/modules/statesManager/actionModel.js +0 -48
  144. package/src/js/modules/statesManager/configActions.js +0 -54
@@ -1,513 +1,513 @@
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
+ * 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;